ゼロから始めるスマートコントラクト(その8)
トランザクションの送信
Truffleコンソールを使用して、ローカルネット(Ganache)にデプロイされたコントラクトと対話します。
$ npx truffle console --network development
その後下記を入力。
truffle(development)> Test = await Test.deployed()
undefined
Test関数のstoreは整数値を受け取って値を格納します。この関数はブロックチェーンの状態を変更するため、トランザクションをコントラクトに送信して実行する必要があります。
格納された値を呼び出すトランザクションを送信します。
truffle(development)> await Test.store(1)
{
tx: '0x67466a736b6fab04327a4027719c16238afba25b29bfc41b8bcb94f01bccbd72',
receipt: {
transactionHash: '0x67466a736b6fab04327a4027719c16238afba25b29bfc41b8bcb94f01bccbd72',
transactionIndex: 0,
blockHash: '0x6c3baf27adedae3a12fc215dd7d958f5fe14d605e6ac43283e35fad3aa96461d',
blockNumber: 17,
from: '0x6d26bd603b45efdcb57d188bb60a9e301eabedf6',
to: '0x94e07a06b94b08e087bad7bef899c735a92962de',
gasUsed: 43415,
cumulativeGasUsed: 43415,
contractAddress: null,
logs: [ [Object] ],
status: true,
logsBloom: '0x40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000',
rawLogs: [ [Object] ]
},
logs: [
{
logIndex: 0,
transactionIndex: 0,
transactionHash: '0x67466a736b6fab04327a4027719c16238afba25b29bfc41b8bcb94f01bccbd72',
blockHash: '0x6c3baf27adedae3a12fc215dd7d958f5fe14d605e6ac43283e35fad3aa96461d',
blockNumber: 17,
address: '0x94E07A06B94b08e087Bad7BEF899C735A92962DE',
type: 'mined',
id: 'log_1f733d80',
event: 'ValueChanged',
args: [Result]
}
]
}
トランザクションのレシートにValueChangedイベントが発生しました!
retrieve関数にて、コントラクトに格納されている整数値を返します。これはブロックチェーン状態のクエリであるため、トランザクションを送信する必要はありません。状態を読み取るだけでトランザクションを送信しないため、レポートするトランザクションハッシュはありません。つまり、クエリの使用Etherの費用がかからず、どのネットワークでも無料で使用できちゃいます。
truffle(development)> await Test.retrieve()
BN { negative: 0, words: [ 1, <1 empty item> ], length: 1, red: null }
わかりやすくするには以下の通り
truffle(development)> (await Test.retrieve()).toString()
'1'
ローカルブロックチェーンをセットアップし、コントラクトをデプロイし、それらと対話する方法を学びました。実力をつけ、自分の開発したスマートコントラクトがパブリックテストネットワーク、および本番環境へデプロイできれば、更に世界は広がります。