entropy_debug_reveal.ts 2.1 KB

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