メインコンテンツまでスキップ
バージョン: 3.3.0

IRC721 標準 (非推奨)

NFT(代替不可能トークン)のための標準インターフェースです。

お知らせ

IRC721 は IOST の NFT 標準でしたが、その後修正が容易でない設計上の問題が見つかったため、現在は別の純 JavaScript ベース NFT 標準である IRC722 の使用を推奨しています。

概要

IOST で発行する NFT は、システムコントラクト token721.iost を基に実装する必要があります。多くの場合は token721.iost コントラクトを通じて直接トークンを発行できますが、カスタマイズしたトークンを発行したい場合は、自前のトークンコントラクトを実装してデプロイする必要があります。

注意: token721.iost は現時点で利用可能ですが、まだフル実装ではありません。近い将来に機能完全版をリリース予定なので、それまでは本番環境では使用しないでください。

カスタム NFT コントラクトは、ウォレットやブラウザなどのアプリケーションをサポートするために、以下のインターフェースを実装する必要があります。

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

accFrom から accTo へ tokenSymbol を tokenId と一緒に転送します。 transfer をコントラクトや別ユーザー(accFrom 以外)から呼び出す必要がある場合は、事前に accFromapprove を呼び出している必要があります。そうでなければ例外が発生します。 コントラクト呼び出しの場合、同じトランザクション内で 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 トークンのメタ情報を取得します。