entropy_debug_reveal.ts 2.2 KB

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