본문으로 건너뛰기
버전: 3.5.0

IRC721 표준 (deprecated)

대체 불가능 토큰(NFT)을 위한 표준 인터페이스입니다.

안내

IRC721은 IOST의 NFT 표준이었습니다. 하지만 이후 설계상 쉽게 고치기 어려운 결함들이 발견되어, 현재는 또 다른 순수 JavaScript 기반 NFT 표준인 IRC722 사용을 권장합니다.

개요

IOST에서 발행되는 대체 불가능 토큰은 반드시 시스템 컨트랙트 token721.iost를 기반으로 구현되어야 합니다. 대부분의 경우 token721.iost 컨트랙트를 통해 직접 토큰을 발행할 수 있지만, 커스터마이즈된 토큰을 발행하려면 자체 토큰 컨트랙트를 구현하여 배포해야 합니다.

참고: token721.iost는 현재 사용할 수는 있지만 완전히 구현되어 있지는 않습니다. 가까운 미래에 완전한 기능을 갖춘 버전을 릴리스할 계획이므로, 그전까지는 프로덕션 환경에서 사용하지 마세요.

커스텀 대체 불가능 토큰 컨트랙트는 지갑이나 브라우저 같은 애플리케이션을 지원하기 위해 다음 인터페이스를 구현해야 합니다.

ABI

{
"lang": "*",
"version": "*",
"abi": [
// optional
{
"name": "issue",
"args": [
"string", // token_symbol
"string", // to
"string" // meta
]
},
// required
{
"name": "transfer",
"args": [
"string", // token_symbol
"string", // from
"string", // to
"string" // token_id
]
},
// required
{
"name": "approve",
"args": [
"string", // token_symbol
"string", // from
"string", // operator
"string" // token_id
]
},
// optional
{
"name": "balanceOf",
"args": [
"string", // token_symbol
"string" // owner
]
},
// optional
{
"name": "ownerOf",
"args": [
"string", // token_symbol
"string" // token_id
]
},
// optional
{
"name": "tokenOfOwnerByIndex",
"args": [
"string", // token_symbol
"string", // owner
"number" // index
]
},
// optional
{
"name": "tokenMetadata",
"args": [
"string", // token_symbol
"string" // token_id
]
}
]
}

명세

토큰 정보

토큰 정보는 token721.iost에 저장됩니다. 지갑 등 애플리케이션은 정보의 신뢰성을 확보하기 위해 token721.iost 컨트랙트에 저장된 정보를 직접 사용해야 합니다.

issue(tokenSymbol, acc, metaJson)

Optional: 애플리케이션은 이 메서드가 존재한다고 가정해서는 안 됩니다.

필요 권한: tokenSymbol의 issuer

acc 계정에 tokenSymbol을 발행합니다. metaJson은 새로 발행되는 토큰의 JSON 문자열입니다.

transfer(tokenSymbol, accFrom, accTo, tokenId)

필요 권한: accFrom

tokenSymbol을 accFrom에서 accTo로 tokenId와 함께 전송합니다. transfer가 컨트랙트나 다른 사용자(accFrom이 아닌)에 의해 호출되어야 한다면, accFrom이 먼저 approve를 호출해야 하며 그렇지 않으면 예외가 발생합니다. 컨트랙트 호출의 경우, 같은 트랜잭션 내에서 approve를 호출한 뒤 컨트랙트를 호출할 수 있습니다.

전송 성공 여부 판단 기준은 token721.iost 컨트랙트의 표준과 동일합니다. 트랜잭션이 성공한 상태에서 tx_receiptreceipts 필드 중 func_nametoken721.iost/transfer라면 전송이 성공한 것입니다. 통화, 계정, tokenId는 해당 항목의 content 필드에서 추가로 파싱해야 합니다.

approve(tokenSymbol, accFrom, accTrans, tokenId)

필요 권한: accFrom

accTrans가 특정 tokenIdtokenSymbol 토큰을 전송할 수 있도록 허용합니다.

tokenIdaccFrom의 소유가 아니라면 예외가 발생합니다.

approve가 컨트랙트에 의해 호출되면 예외가 발생합니다.

승인 성공 여부 판단 기준은 token721.iost 컨트랙트의 표준과 동일합니다. 트랜잭션이 성공한 상태에서 tx_receiptreceipts 필드 중 func_nametoken721.iost/approve라면 승인이 성공한 것입니다. 통화, 계정, tokenId는 해당 항목의 content 필드에서 추가로 파싱해야 합니다.

balanceOf(tokenSymbol, acc)

Optional: 애플리케이션은 이 메서드가 존재한다고 가정해서는 안 됩니다.

필요 권한: 없음

tokenSymbol 토큰의 계정 잔액을 조회합니다.

ownerOf(tokenSymbol, tokenId)

Optional: 애플리케이션은 이 메서드가 존재한다고 가정해서는 안 됩니다.

필요 권한: 없음

tokenId를 가진 특정 tokenSymbol 토큰의 소유자를 조회합니다.

tokenOfOwnerByIndex(tokenSymbol, owner, index)

Optional: 애플리케이션은 이 메서드가 존재한다고 가정해서는 안 됩니다.

필요 권한: 없음

owner가 보유한 tokenSymbol 토큰 중 index에 해당하는 토큰의 메타 정보를 조회합니다.

tokenMetadata(tokenSymbol, tokenId)

Optional: 애플리케이션은 이 메서드가 존재한다고 가정해서는 안 됩니다.

필요 권한: 없음

tokenId를 가진 특정 tokenSymbol 토큰의 메타 정보를 조회합니다.