コントラクトレベルのストレージ
Solidity
- データはコントラクトのストレージ スロットに保存される。
- NFTの所有権などは、コントラクトの保存されたコード(ロジック)とデータ(ステート)を用いて追跡される。
アカウント中心のストレージ
Move
- 統一されたツリー型のグローバル ストレージにデータを保存。
- 各アカウントは、モジュール (契約コード) とリソース (データ) の両方のコンテナーとして機能。
- ERC-721 のようなコントラクトからの継承を使用する代わりに、NFT はオブジェクトとして作成される。
- オブジェクトはリソースの「コンテナ」と考え、基本的にリソースはグループ化されてオブジェクトを作成する。
- そのオブジェクトは NFT を表し、各オブジェクトは単一のアドレスに保存される。
- 所有権はアカウントとより直接的に関連しており、コントラクトステートとはそれほど関係がない。
module 0x1::my_module {
use std::signer; // Library in Move to use 'signers'
use std::string; // Library in Move to use strings
// Define a simple NFT resource with an id and some metadata
// IN PRACTICE, YOU HAVE TO USE THE DIGITAL ASSET STANDARD TO DEFINE AN NFT
struct NFT has key {
id: u64,
name: string::utf8("My NFT"),
}
// Public entry function to create a new NFT and store it in the creator's account
public entry fun create_nft(account: &signer, id: u64, metadata: vector<u8>) {
let nft = NFT { id, metadata };
move_to(account, nft);
}
}