メインコンテンツまでスキップ

lesson-3_トークンを送ってみよう

ここまでであなたは以下のことを実行しました ✨

  • アカウント作成(環境変数IDへexport)
  • サブアカウント作成
  • サブアカウントにftコントラクトをデプロイ

このレッスンでは以下のことに挑戦します 🚀

  • オリジナルトークンの発行
  • アカウントの登録
  • トークンの転送

🌱 トークンを発行しよう

トークンを発行するためにコマンドラインから以下のコマンドを実行しましょう!

$ near call sub.$ID new '{"owner_id": "'$ID'", "total_supply": "1000000000000000", "metadata": { "spec": "ft-1.0.0", "name": "My First Token", "symbol": "MYFT", "decimals": 8 }}' --accountId $ID

実行結果

near cliでコントラクトのメソッドを呼ぶ場合はこのような構文になっています。

near call (or view) [コントラクトのデプロイされたアカウント名] [メソッド名] [メソッドの引数(json形式)]

つまり、先ほどのコマンドでは、sub.ft_account.testnetのコントラクト(ftコントラクト)の newメソッドを引数とともに呼び出していました。 引数では

owner_id: 発行したftを所有するアカウント名 (今回はft_account.testnetを指定)
total_supply: 発行する総量
metadata: ftに関するメタデータ

を指定していました。 メタデータの中身は発行するftのシンボルなどを指定していました。(詳しくはこちらを参照してください)

また、--accountIdによってどのアカウントからnewメソッドを呼び出すかを指定していました。

newメソッドの呼び出しを終えたら、testnet walletから owner_idで指定したアカウントにftが発行されていることを確認しましょう!

🎈 コントラクトのメソッドについて

ブロックチェーン上にデプロイされたスマートコントラクトにはメソッド(関数)が用意されています。 コントラクトのメソッドを呼び出すことでそのコントラクトの機能を使えるということです。 メソッドには大きく分けて2種類あります。 コントラクトの情報を読み取るのみのメソッドと情報を書き換えるメソッドです。 読み取るのみのメソッドをviewメソッド、書き換えるメソッドをchangeメソッドと呼ぶことにしましょう。 以下に各メソッドの特徴を整理します。

viewメソッド

  • 呼び出しに手数料(ガス代)がかからない
  • アカウントなしで呼び出すことが可能
  • near-cliから呼び出す際にはnear viewで呼び出す

changeメソッド

  • 呼び出す際に手数料(ガス代)がかかる
  • アカウントから呼び出す必要がある
  • near-cliから呼び出す際にはnear callで呼び出す

🚢 トークンを転送しよう

トークンを転送するために testnet wallet から(好きな名前で)他のアカウントを作成しましょう。

ここではft_receiver.testnetというアカウントを作成しました。 コマンドラインから操作できるようにnear-cliで作成したアカウントにログインしましょう。

$ near login

そしてトークンのやり取りを行うために、ft_receiver.testnetftコントラクトに登録します。 以下を実行しましょう。

$ near call sub.$ID storage_deposit '' --accountId ft_receiver.testnet --amount 0.00125

実行結果

このアカウントの登録作業はftコントラクトNEP-145という規約(ルール)に則ったストレージマネジメントを採用していることが所以です。

ストレージマネージメント NEAR はストレージステーキングという仕組みを採用しており、 コントラクトのアカウントはブロックチェーン上で使用するすべてのストレージをカバーするのに十分な残高(NEAR)を持っていなければなりません。 ftコントラクトでは ft のやり取りをするアカウントが増えるほど、アカウント情報を保存するために使用するストレージが増えてゆきます。 そのため長期的に増えてゆくストレージコストをユーザアカウントに払ってもらおうというのがここでいうストレージマネージメントで, そのルールをまとめたのがNEP-145です。

先ほど実行したstorage_depositというメソッドはftコントラクトNEP-145に則って実装されているもので, ft_receiver.testnet0.00125NEARを支払い登録を行いました。

それではトークンの転送を行います! コマンドラインで以下を実行します。

$ near call sub.$ID ft_transfer '{"receiver_id": "ft_receiver.testnet", "amount": "19"}' --accountId $ID --amount 0.000000000000000000000001

実行結果(結果に表示されるURLをブラウザに貼り付けるとトランザクションの内容が見られます)。

結果をtestnet walletで確認することもできますが、viewメソッドft_balance_ofを使用してft_receiver.testnetの残高を確認してみましょう。

$ near view sub.$ID ft_balance_of '{"account_id": "ft_receiver.testnet"}'

実行結果

トークンの転送が完了しました 🎉

🙋‍♂️ 質問する

ここまでの作業で何かわからないことがある場合は、Discordの#nearで質問をしてください。

ヘルプをするときのフローが円滑になるので、エラーレポートには下記の4点を記載してください ✨

1. 質問が関連しているセクション番号とレッスン番号
2. 何をしようとしていたか
3. エラー文をコピー&ペースト
4. エラー画面のスクリーンショット

おめでとうございます! このセクションでの作業はここで終了です。 トークンの転送結果を#nearに投稿して、あなたの成功をコミュニティで祝いましょう 🎉 最後にコントラクトのコードを少しだけ覗きに行きます! 次のレッスンに進みましょう!