Non-Fungible Token

[Previous << Epoch Contracts](https://qiita.com/flowcadence/items/f5e22a34d79769cb5c5d)
[Next >> NFT Metadata](https://qiita.com/flowcadence/items/191e2e765391e636a89c)

https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a#flow-developers

`NonFungibleToken`コントラクトインターフェースは、Non Fungible Token Standardを実装しています。すべてのNFTコントラクトは、このスタンダードをインポートして実装することが推奨されています。
* [Basic Non-Fungible Token Tutorial](https://qiita.com/flowcadence/items/ee22ed2ce344620c79da)
* [Non Fungible Token Guide](https://developers.flow.com/build/guides/nft)
* [Non Fungible Token Standard Repo](https://github.com/onflow/flow-nft)

Source: [NonFungibleToken.cdc](https://github.com/onflow/flow-nft/blob/master/contracts/NonFungibleToken.cdc)
| Network | Contract Address |
|:-:|:-:|
| Emulator | `0xf8d6e0586b0a20c7` |
| Cadence Testing Framework | `0x0000000000000001` |
| Testnet | `0x631e88ae7f1d7c20` |
| Mainnet | `0x1d7e57aa55817448` |

<h1>Transactions</h1>

全ての`NonFungibleToken`プロジェクトは、`flow-nft` [レポジトリ](https://github.com/onflow/flow-nft/tree/master/transactions)内の汎用(generic)トークン トランザクション/スクリプトを使用することが推奨されています。これらは、non-fungible tokenスタンダードを適切に実装したトークンであれば、違うネットワーク上であっても、コードのインポートアドレス以外一切変更しなくても、どのようなトークンにも使用できます。

<h1>Events</h1>

すべてのコントラクトから発行されるイベントは、標準的なフォーマットに従います。
```ruby
A.{contract address}.{contract name}.{event name}
```
フォーマットの構成要素は以下の通りです。
* `contract address` - スマートコントラクトがデプロイされたアカウントのアドレス
* `contract name` - ソースコード内のスマートコントラクトの名称
* `event name` - ソースコードで宣言されたイベントの名称

<h2>NonFungibleToken Events</h2>

Non-Fungible Token標準を実装するコントラクトは、トークンの預け入れやトークンの引き出しなど、関連するアクションが発生するたびに発行される標準的なイベントにアクセスできます。

つまり、プロジェクトが独自のカスタムイベントを実装する必要は、標準的なイベントがプロジェクトの要件を満たさない場合を除き、ないということです。

`NonFungibleToken`のイベントは、次の形式をとります。
```ruby
A.{contract address}.NonFungibleToken.Deposited
A.{contract address}.NonFungibleToken.Withdrawn
```
`contract address`がネットワーク上でクエリーされている`NonFungibleToken`のアドレスです。各ネットワーク上のアドレスは上部に示されています。

<h3>NonFungibleToken.Deposited</h3>

```ruby
access(all) event Deposited (
    type: String,
    id: UInt64,
    uuid: UInt64,
    to: Address?,
    collectionUUID: UInt64
)
```
`NonFungibleToken.Collection`を実装するリソース型で`deposit()`が呼び出されるたびに、`NonFungibleToken.Deposited`イベントが以下の引数と一緒に発行されます。
* `type: String`: 預け入れられたトークンの型のID。
  - 例：`A.4445e7ad11568276.TopShot.NFT`
* `id: UInt64`: 預け入れられたトークンのID。 注：これはUUIDである場合も、そうでない場合もあります。
  - 例：`173838`
* `uuid: UInt64`: 預け入れられたトークンのUUID。
  - 例：`177021372071991`
* `to: Address?`: トークンを受け取ったコレクションを所有するアカウントのアドレス。コレクションがアカウントに保存されていない場合、`to`は`nil`になります。
  - 例：`0x4445e7ad11568276`
* `collectionUUID: UInt64`：トークンを受け取ったコレクションのUUID。
  - 例：`177021372071991`


<h3>NonFungibleToken.Withdrawn</h3>

```ruby
access(all) event Withdrawn (
    type: String,
    id: UInt64,
    uuid: UInt64,
    from: Address?,
    providerUUID: UInt64
)
```
`NonFungibleToken.Collection`を実装するリソース型で`withdraw()`が呼び出されると、`NonFungibleToken.Withdrawn`イベントが以下の引数と一緒に発行されます。
* `type: String`: 引き出されるトークンの型のID。
  - 例：`A.4445e7ad11568276.TopShot.NFT`
* `id: UInt64`: 預け入れられたトークンのID。 注：これはUUIDである場合も、そうでない場合もあります。
  - 例：`173838`
* `uuid: UInt64`: 預け入れられたトークンのUUID。
  - 例：`177021372071991`
* `from: Address?`: トークンが引き出されたコレクションを所有するアカウントのアドレス。コレクションがアカウントに保存されていない場合、`to`は`nil`になります。
  - 例：`0x4445e7ad11568276`
* `providerUUID: UInt64`：トークンを引き出されたコレクションのUUID。
  - 例：`177021372071991`

<h3>NonFungibleToken.Updated</h3>

```ruby
access(all) event Updated(
    type: String,
    id: UInt64,
    uuid: UInt64,
    owner: Address?
)
```
いかなる理由でも非代替性トークンが更新されるたびに、プロジェクトは`NonFungibleToken.emitNFTUpdated()` 関数を呼び出してこのイベントを発行すべきです。これにより、イベントリスナーは、データベースに保存されているNFTに関する情報を更新するために、NFTに対してquery処理を行うべきであることが示されます。

* `type: String`: 更新されたトークンの型のID。
  - 例：`A.4445e7ad11568276.FlowToken.Vault`
* `id: UInt64`: 更新されたトークンのID。 注：これはUUIDである場合も、そうでない場合もあります。
  - 例：`173838`
* `uuid: UInt64`: 更新されたトークンのUUID。
  - 例：`177021372071991`
* `owner: Address?`: トークンを所有するコレクションを所有するアカウントのアドレス。コレクションがアカウントに保存されていない場合、`to`は`nil`になります。
  - 例：`0x4445e7ad11568276`

*Last updated on **Dec 11, 2024** by **Chase Fleming***

翻訳元

https://developers.flow.com/build/core-contracts/non-fungible-token

***

<b>[Previous << Epoch Contracts](https://qiita.com/flowcadence/items/f5e22a34d79769cb5c5d)
</b>

[Flow blockchain / Cadence version1.0ドキュメント](https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a) (Non-Fungible Token)

<b>[Next >> NFT Metadata](https://qiita.com/flowcadence/items/191e2e765391e636a89c)</b>