🍣 sushiware.xyz 🍣

イベントの発行を同期的に待機

2022-07-09

イベントの発行を同期的に待機する方法についてメモ。

自分が発行したトランザクションの場合

これはドキュメントに書いてある通り。

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というイベントを待機している。