イベントの発行を同期的に待機する方法についてメモ。
自分が発行したトランザクションの場合
これはドキュメントに書いてある通り。
const tx = await contract.doSomthing();
await tx.wait();
afterDo();
oracle とか他の誰かが発行したトランザクションによって、イベントが発行された場合
Chainlink VRF にてrequestRandomWords
を呼び出したあとに、VRF Coordinator がfulfillRandomWords
を呼び出してくれまで待機したいケース。
await new Promise(async (resolve) => {
contract.once("FulfillRandomWords", async () => resolve(0));
const tx = await contract.requestRandomWrods();
await tx.wait();
});
afterDo();
こんな感じでイベントの発行までブロックする。
fulfillRandomWords
の中でイベントを発行するのを忘れないように。
ここではFulfillRandomWords
というイベントを待機している。