entropy_debug_reveal.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import yargs from "yargs";
  2. import { hideBin } from "yargs/helpers";
  3. import { DefaultStore, EvmChain, toPrivateKey } from "../src";
  4. import { COMMON_DEPLOY_OPTIONS, findEntropyContract } from "./common";
  5. const parser = yargs(hideBin(process.argv))
  6. .usage(
  7. "Tries to reveal an entropy request with callback using the provided private key.\n" +
  8. "This can be used to manually debug why a callback was not triggered.\n" +
  9. "Usage: $0 --chain <chain-id> --private-key <private-key> --sequence-number <sequence-number>"
  10. )
  11. .options({
  12. chain: {
  13. type: "string",
  14. demandOption: true,
  15. desc: "test latency for the contract on this chain",
  16. },
  17. "private-key": COMMON_DEPLOY_OPTIONS["private-key"],
  18. "sequence-number": {
  19. type: "number",
  20. demandOption: true,
  21. desc: "sequence number of the request to reveal",
  22. },
  23. });
  24. async function main() {
  25. const argv = await parser.argv;
  26. const chain = DefaultStore.getChainOrThrow(argv.chain, EvmChain);
  27. const contract = findEntropyContract(chain);
  28. const sequenceNumber = argv.sequenceNumber;
  29. const provider = await contract.getDefaultProvider();
  30. const providerInfo = await contract.getProviderInfo(provider);
  31. const privateKey = toPrivateKey(argv.privateKey);
  32. const request = await contract.getRequest(provider, sequenceNumber);
  33. if (request.sequenceNumber === "0") {
  34. console.log("Request not found");
  35. return;
  36. }
  37. console.log("Request block number: ", request.blockNumber);
  38. const userRandomNumber = await contract.getUserRandomNumber(
  39. provider,
  40. sequenceNumber,
  41. parseInt(request.blockNumber)
  42. );
  43. console.log("User random number: ", userRandomNumber);
  44. const revealUrl = providerInfo.uri + `/revelations/${sequenceNumber}`;
  45. const fortunaResponse = await fetch(revealUrl);
  46. if (fortunaResponse.status !== 200) {
  47. console.log("Fortuna response status: ", fortunaResponse.status);
  48. return;
  49. }
  50. const payload = await fortunaResponse.json();
  51. const providerRevelation = "0x" + payload.value.data;
  52. await contract.revealWithCallback(
  53. userRandomNumber,
  54. providerRevelation,
  55. provider,
  56. sequenceNumber,
  57. privateKey
  58. );
  59. }
  60. main();