イベントを使用して、スマートコントラクトのデータをログに記録する
スマートコントラクトRemixSolidityイベント
中級著者にチップを渡す 0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE
Solidity では、スマートコントラクトがトリガーすることで送信される信号をイベントと呼びます。 Dapp だけでなく、イーサリアムの JSON-RPC API に接続されたすべてのプログラムは、これらのイベントをリッスンし、それに応じて動作します。 イベントをインデックス化すれば、後でイベント履歴を参照することができます。
イベント
この記事を書いている時点でイーサリアムブロックチェーンで最も一般的なイベントは、誰かがトークンを転送するときに ERC20 トークンによって発行される Transfer イベントです。
1event Transfer(address indexed from, address indexed to, uint256 value);2コピー
イベントの署名はコントラクトのコード内で宣言され、emit キーワードと共に発行されます。 例えば、送信イベントでは、この送信における送信元(from)、送信先(to)、および送信したトークン量(value)のログが記録されます。
Counter のスマートコントラクトに戻り、値が変更されるたびにログを取ることにしたと仮定しましょう。 このコントラクトは、デプロイを目的とせず、別のコントラクトを拡張する土台の役割を担うため、抽象コントラクトと呼びます。 カウンターのスマートコントラクトでは、以下のようになります:
1pragma solidity 0.5.17;23contract Counter {45 event ValueChanged(uint oldValue, uint256 newValue);67 // Private variable of type unsigned int to keep the number of counts8 uint256 private count = 0;910 // Function that increments our counter11 function increment() public {12 count += 1;13 emit ValueChanged(count - 1, count);14 }1516 // Getter to get the count value17 function getCount() public view returns (uint256) {18 return count;19 }2021}22