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 以外)から呼び出す必要がある場合は、事前に accFrom が approve を呼び出している必要があります。そうでなければ例外が発生します。
コントラクト呼び出しの場合、同じトランザクション内で approve を呼んだ後にコントラクトを呼び出すことができます。
転送成功の判定基準は token721.iost コントラクトの仕様と同じです。トランザクションが成功した上で、tx_receipt の receipts フィールドのうち func_name が token721.iost/transfer の項目があれば転送が成立しています。通貨、アカウント、tokenId は該当項目の content フィールドからさらにパースしてください。
approve(tokenSymbol, accFrom, accTrans, tokenId)
必要な権限: accFrom
accTrans に対し、特定 tokenId の tokenSymbol トークンの転送を許可します。
tokenId が accFrom 所有でない場合は例外を投げます。
approve がコントラクトから呼ばれた場合は例外を投げます。
承認成功の判定基準は token721.iost コントラクトの仕様と同じです。トランザクションが成功した上で、tx_receipt の receipts フィールドのうち func_name が token721.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 トークンのメタ情報を取得します。