From 8e852690fc1cdfff1ee8df51d37002b82e080048 Mon Sep 17 00:00:00 2001 From: Amin Moghaddam Date: Mon, 9 Jun 2025 15:57:31 -0700 Subject: [PATCH 1/5] feat(contract_manager): improve manual reveal script --- .../scripts/entropy_debug_reveal.ts | 101 ++++++++++++------ 1 file changed, 68 insertions(+), 33 deletions(-) diff --git a/contract_manager/scripts/entropy_debug_reveal.ts b/contract_manager/scripts/entropy_debug_reveal.ts index 4feb0227b4..a5d1ffb305 100644 --- a/contract_manager/scripts/entropy_debug_reveal.ts +++ b/contract_manager/scripts/entropy_debug_reveal.ts @@ -7,21 +7,21 @@ import { DefaultStore } from "../src/node/utils/store"; const parser = yargs(hideBin(process.argv)) .usage( - "Tries to reveal an entropy request with callback using the provided private key.\n" + - "This can be used to manually debug why a callback was not triggered.\n" + + "Tries to reveal entropy requests with callback using the provided private key.\n" + + "This can be used to manually debug why a callback was not triggered, or recover manually from a downtime\n" + "Usage: $0 --chain --private-key --sequence-number ", ) .options({ chain: { type: "string", demandOption: true, - desc: "test latency for the contract on this chain", + desc: "Chain id where the contract is deployed", }, "private-key": COMMON_DEPLOY_OPTIONS["private-key"], "sequence-number": { - type: "number", + type: "string", demandOption: true, - desc: "sequence number of the request to reveal", + desc: "Sequence number of the request to reveal or a range of sequence numbers to reveal separated by colon (e.g. 1000:1100)", }, }); @@ -29,38 +29,73 @@ async function main() { const argv = await parser.argv; const chain = DefaultStore.getChainOrThrow(argv.chain, EvmChain); const contract = findEntropyContract(chain); - const sequenceNumber = argv.sequenceNumber; - - const provider = await contract.getDefaultProvider(); - const providerInfo = await contract.getProviderInfo(provider); - const privateKey = toPrivateKey(argv.privateKey); - const request = await contract.getRequest(provider, sequenceNumber); - if (request.sequenceNumber === "0") { - console.log("Request not found"); - return; + let startingSequenceNumber: number, endingSequenceNumber: number; + if (argv.sequenceNumber.includes(":")) { + [startingSequenceNumber, endingSequenceNumber] = argv.sequenceNumber + .split(":") + .map(Number); + } else { + startingSequenceNumber = Number(argv.sequenceNumber); + endingSequenceNumber = startingSequenceNumber + 1; // Default to revealing a single request } - console.log("Request block number: ", request.blockNumber); - const userRandomNumber = await contract.getUserRandomNumber( - provider, - sequenceNumber, - parseInt(request.blockNumber), - ); - console.log("User random number: ", userRandomNumber); - const revealUrl = providerInfo.uri + `/revelations/${sequenceNumber}`; - const fortunaResponse = await fetch(revealUrl); - if (fortunaResponse.status !== 200) { - console.log("Fortuna response status: ", fortunaResponse.status); + if (startingSequenceNumber >= endingSequenceNumber) { + console.error( + "Invalid sequence number range provided. Use format: :", + ); return; } - const payload = await fortunaResponse.json(); - const providerRevelation = "0x" + payload.value.data; - await contract.revealWithCallback( - userRandomNumber, - providerRevelation, - provider, - sequenceNumber, - privateKey, + console.log( + `Revealing requests from sequence number ${startingSequenceNumber} to ${endingSequenceNumber}`, ); + + for ( + let sequenceNumber = startingSequenceNumber; + sequenceNumber < endingSequenceNumber; + sequenceNumber++ + ) { + console.log("Revealing request for sequence number: ", sequenceNumber); + const provider = await contract.getDefaultProvider(); + const providerInfo = await contract.getProviderInfo(provider); + const privateKey = toPrivateKey(argv.privateKey); + const request = await contract.getRequest(provider, sequenceNumber); + if (request.sequenceNumber === "0") { + console.log("Request not found"); + continue; + } + console.log("Request block number: ", request.blockNumber); + const userRandomNumber = await contract.getUserRandomNumber( + provider, + sequenceNumber, + parseInt(request.blockNumber), + ); + console.log("User random number: ", userRandomNumber); + const revealUrl = + providerInfo.uri + + `/revelations/${sequenceNumber}?block_number=${request.blockNumber}`; + const fortunaResponse = await fetch(revealUrl); + if (fortunaResponse.status !== 200) { + console.error("Fortuna response status: ", fortunaResponse.status); + console.error("Fortuna response body: ", await fortunaResponse.text()); + console.error( + "Refusing to continue the script, please check the Fortuna service first.", + ); + return; + } + const payload = await fortunaResponse.json(); + const providerRevelation = "0x" + payload.value.data; + try { + await contract.revealWithCallback( + userRandomNumber, + providerRevelation, + provider, + sequenceNumber, + privateKey, + ); + } catch (e) { + console.error("Error revealing request: ", e); + continue; + } + } } main(); From ce0b5b02f32ed8c7d79bf88ed6e32913e6cb3d74 Mon Sep 17 00:00:00 2001 From: Amin Moghaddam Date: Mon, 9 Jun 2025 16:01:32 -0700 Subject: [PATCH 2/5] polish --- contract_manager/scripts/entropy_debug_reveal.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contract_manager/scripts/entropy_debug_reveal.ts b/contract_manager/scripts/entropy_debug_reveal.ts index a5d1ffb305..7372f34cf1 100644 --- a/contract_manager/scripts/entropy_debug_reveal.ts +++ b/contract_manager/scripts/entropy_debug_reveal.ts @@ -8,7 +8,7 @@ import { DefaultStore } from "../src/node/utils/store"; const parser = yargs(hideBin(process.argv)) .usage( "Tries to reveal entropy requests with callback using the provided private key.\n" + - "This can be used to manually debug why a callback was not triggered, or recover manually from a downtime\n" + + "This can be used to manually debug why a callback was not triggered or recover manually from a downtime\n" + "Usage: $0 --chain --private-key --sequence-number ", ) .options({ @@ -29,6 +29,9 @@ async function main() { const argv = await parser.argv; const chain = DefaultStore.getChainOrThrow(argv.chain, EvmChain); const contract = findEntropyContract(chain); + const provider = await contract.getDefaultProvider(); + const providerInfo = await contract.getProviderInfo(provider); + const privateKey = toPrivateKey(argv.privateKey); let startingSequenceNumber: number, endingSequenceNumber: number; if (argv.sequenceNumber.includes(":")) { [startingSequenceNumber, endingSequenceNumber] = argv.sequenceNumber @@ -54,9 +57,6 @@ async function main() { sequenceNumber++ ) { console.log("Revealing request for sequence number: ", sequenceNumber); - const provider = await contract.getDefaultProvider(); - const providerInfo = await contract.getProviderInfo(provider); - const privateKey = toPrivateKey(argv.privateKey); const request = await contract.getRequest(provider, sequenceNumber); if (request.sequenceNumber === "0") { console.log("Request not found"); From c80f3455c8497b539afc538a3760a67ad171f63d Mon Sep 17 00:00:00 2001 From: Amin Moghaddam Date: Mon, 9 Jun 2025 16:03:32 -0700 Subject: [PATCH 3/5] more --- contract_manager/scripts/entropy_debug_reveal.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/contract_manager/scripts/entropy_debug_reveal.ts b/contract_manager/scripts/entropy_debug_reveal.ts index 7372f34cf1..9708fd55b3 100644 --- a/contract_manager/scripts/entropy_debug_reveal.ts +++ b/contract_manager/scripts/entropy_debug_reveal.ts @@ -8,8 +8,8 @@ import { DefaultStore } from "../src/node/utils/store"; const parser = yargs(hideBin(process.argv)) .usage( "Tries to reveal entropy requests with callback using the provided private key.\n" + - "This can be used to manually debug why a callback was not triggered or recover manually from a downtime\n" + - "Usage: $0 --chain --private-key --sequence-number ", + "This can be used to manually debug why a callback was not triggered or recover manually from a downtime\n" + + "Usage: $0 --chain --private-key --sequence-number ", ) .options({ chain: { @@ -69,9 +69,7 @@ async function main() { parseInt(request.blockNumber), ); console.log("User random number: ", userRandomNumber); - const revealUrl = - providerInfo.uri + - `/revelations/${sequenceNumber}?block_number=${request.blockNumber}`; + const revealUrl = providerInfo.uri + `/revelations/${sequenceNumber}`; const fortunaResponse = await fetch(revealUrl); if (fortunaResponse.status !== 200) { console.error("Fortuna response status: ", fortunaResponse.status); From 8bbe5c1ba1242d671a3afca3a25866d5b9daa790 Mon Sep 17 00:00:00 2001 From: Amin Moghaddam Date: Mon, 9 Jun 2025 16:22:08 -0700 Subject: [PATCH 4/5] fix --- contract_manager/scripts/entropy_debug_reveal.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/contract_manager/scripts/entropy_debug_reveal.ts b/contract_manager/scripts/entropy_debug_reveal.ts index 9708fd55b3..3f86dd8369 100644 --- a/contract_manager/scripts/entropy_debug_reveal.ts +++ b/contract_manager/scripts/entropy_debug_reveal.ts @@ -8,8 +8,11 @@ import { DefaultStore } from "../src/node/utils/store"; const parser = yargs(hideBin(process.argv)) .usage( "Tries to reveal entropy requests with callback using the provided private key.\n" + - "This can be used to manually debug why a callback was not triggered or recover manually from a downtime\n" + - "Usage: $0 --chain --private-key --sequence-number ", + "This can be used to manually debug why a callback was not triggered or recover manually from a downtime\n" + + "Usage: \n" + + "$0 --chain --private-key --sequence-number \n" + + "$0 --chain --private-key --sequence-number :", + ) .options({ chain: { @@ -21,7 +24,7 @@ const parser = yargs(hideBin(process.argv)) "sequence-number": { type: "string", demandOption: true, - desc: "Sequence number of the request to reveal or a range of sequence numbers to reveal separated by colon (e.g. 1000:1100)", + desc: "Sequence number of the request to reveal or a range of sequence numbers to reveal separated by colon (e.g. 1000:1100 reveals requests with 1000 <= number < 1100)", }, }); From aaca441374f0315fcfc54b4c0fa10d803adf82d8 Mon Sep 17 00:00:00 2001 From: Amin Moghaddam Date: Mon, 9 Jun 2025 16:30:47 -0700 Subject: [PATCH 5/5] fix --- contract_manager/scripts/entropy_debug_reveal.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/contract_manager/scripts/entropy_debug_reveal.ts b/contract_manager/scripts/entropy_debug_reveal.ts index 3f86dd8369..6287adcb01 100644 --- a/contract_manager/scripts/entropy_debug_reveal.ts +++ b/contract_manager/scripts/entropy_debug_reveal.ts @@ -12,7 +12,6 @@ const parser = yargs(hideBin(process.argv)) "Usage: \n" + "$0 --chain --private-key --sequence-number \n" + "$0 --chain --private-key --sequence-number :", - ) .options({ chain: {