Web3.js
2020-06-27時点ではv1.2.9が最新
人間には読みづらいしJSONを組み立てるのも面倒なのでWeb3.jsが便利なインタフェースを提供する
プロバイダ
イーサリアムは全ノードが同じデータのコピーをシェアしている
Webフロントエンドからどのノードに読み書きを処理させるかをWeb3プロバイダとして設定する
自分の持つノードがあればプロバイダとして運営することもできる
手軽な方法としてはサードパーティサービスとしてInfuraがある 秘密鍵の管理
Webフロントエンドで秘密鍵を管理するのはよろしくない
コントラクトへのアクセスを行うオブジェクトの初期化には以下の2つが必要 コントラクトのアドレス
コントラクトをデプロイすると永久に有効なイーサリアム上の固定アドレスが与えられるので記録しておく
コントラクトの関数呼び出し
call
view, pure関数に使われる
myContract.methods.myMethod(123).call()
send
view, pure以外の関数に使われる
sendする際にはトランザクションに署名するようMetamaskをポップアップする myContract.methods.myMethod(123).send()
myContract.methods.myMethod(123).send({ from: userAccount, value: web3js.utils.toWei("0.001", "ether") })
$ 1 ether = 10^{18} wei
v1以降はcallbackではなくPromiseを利用するインタフェースになっている Metamaskにてアカウントが管理されており、web3.eth.accounts[0]のように取得できる Eventのsubscribe
コントラクト内のイベントをサブスクライブできる
code:javascript
contract.events.EventName({ filter: { _to: userAccount } })
.on("data", function(event) {
let data = event.returnValues;
// do something
}).on("error", console.error);
過去のイベントをクエリすることもできる
code:javascript
contract.getPastEvents("EventName", { fromBlock: 0, toBlock: "latest" })
.then(function(events) {
// eventsは、上でやったように反復可能なevent配列内のオブジェクト
});