|
| 1 | +# Debug Callback Failures |
| 2 | + |
| 3 | +This guide explains how to identify and resolve issues with the Entropy callback. |
| 4 | +The intended audience for this guide is developers who have made an Entropy random number request, but their application hasn't received a callback. |
| 5 | + |
| 6 | +## Dependencies |
| 7 | + |
| 8 | +This guide uses [Foundry](https://book.getfoundry.sh/getting-started/installation) to submit transactions to the blockchain. |
| 9 | +Please install Foundry before continuing. |
| 10 | + |
| 11 | +## Run the Callback |
| 12 | + |
| 13 | +Developers can run the Entropy callback themselves to see the reason for the failure. |
| 14 | +To run the callback, invoke the `revealWithCallback` function on the Entropy contract on your blockchain. |
| 15 | +The function has the following signature: |
| 16 | + |
| 17 | +```solidity |
| 18 | +function revealWithCallback(address provider, uint64 sequenceNumber, bytes32 userRandomNumber, bytes32 providerRevelation) |
| 19 | +``` |
| 20 | + |
| 21 | +This call requires the chain id, contract address and four arguments. |
| 22 | +The chain id and contract address can be retrieved from [Contract Addresses](/entropy/contract-addresses). |
| 23 | +Export these values as environment variables for later use: |
| 24 | + |
| 25 | +```bash copy |
| 26 | +export CHAIN_ID=blast |
| 27 | +export ENTROPY_ADDRESS=0x5744Cbf430D99456a0A8771208b674F27f8EF0Fb |
| 28 | +``` |
| 29 | + |
| 30 | +Three of the arguments can be retrieved from the request transaction's event logs. |
| 31 | +Look at the event logs of the request transaction in a block explorer. |
| 32 | +You should see a `RequestedWithCallback` event emitted from the Entropy contract, similar to the one below: |
| 33 | + |
| 34 | + |
| 35 | + |
| 36 | +Copy the following values from the event into environment variables: |
| 37 | + |
| 38 | +```bash |
| 39 | +export PROVIDER=0x52DeaA1c84233F7bb8C8A45baeDE41091c616506 |
| 40 | +export SEQUENCE_NUMBER=264793 |
| 41 | +# First row of the "Data" field with a 0x prefix |
| 42 | +export USER_RANDOM_NUMBER=0xb1db70cfe95d9e823ac591362921c20eb45f136dbf417362f0a045dc7100519e |
| 43 | +``` |
| 44 | + |
| 45 | +Next, collect the provider's revelation. |
| 46 | +Every provider exposes a URL that allows users to get the provider's revelation for unfulfilled requests. |
| 47 | +The URLs for the default providers are as follows: |
| 48 | + |
| 49 | +| Network type | Provider URL | |
| 50 | +| ------------ | ---------------------------------------- | |
| 51 | +| testnet | `https://fortuna-staging.dourolabs.app/` | |
| 52 | +| mainnet | `https://fortuna.dourolabs.app` | |
| 53 | + |
| 54 | +Retrieve the `/v1/chains/$CHAIN_ID/revelations/$SEQUENCE_NUMBER` endpoint from this server: |
| 55 | + |
| 56 | +```bash copy |
| 57 | +curl https://fortuna.dourolabs.app/v1/chains/$CHAIN_ID/revelations/$SEQUENCE_NUMBER |
| 58 | +``` |
| 59 | + |
| 60 | +This endpoint will return the provider's revelation as a hexadecimal value, such as: |
| 61 | + |
| 62 | +```json |
| 63 | +{ |
| 64 | + "value": { |
| 65 | + "encoding": "hex", |
| 66 | + "data": "5d4bfa3abeaf15fe8b7771c74c0e3e210096015632831460870bc5374e05d4d8" |
| 67 | + } |
| 68 | +} |
| 69 | +``` |
| 70 | + |
| 71 | +Export this value as an environment variable (prefixed with 0x): |
| 72 | + |
| 73 | +```bash copy |
| 74 | +export PROVIDER_REVELATION=0x5d4bfa3abeaf15fe8b7771c74c0e3e210096015632831460870bc5374e05d4d8 |
| 75 | +``` |
| 76 | + |
| 77 | +Finally, submit the transaction to invoke `revealWithCallback`: |
| 78 | + |
| 79 | +```bash copy |
| 80 | +cast send $ENTROPY_ADDRESS 'revealWithCallback(address, uint64, bytes32, bytes32)' $ENTROPY_ADDRESS $SEQUENCE_NUMBER $USER_RANDOM_NUMBER $PROVIDER_REVELATION |
| 81 | +``` |
| 82 | + |
| 83 | +You may also need to provide the `-r` with an RPC for your chain, plus an additional argument (such as `--private-key`) to specify the wallet to use to sign the transaction. |
| 84 | + |
| 85 | +## Interpeting the Results |
| 86 | + |
| 87 | +If the transaction succeeds, check how much gas the transaction used. |
| 88 | +If the gas exceeds the callback gas limit for your chain as shown on [Contract Addresses](/entropy/contract-addresses), please reduce the gas usage to allow the provider to invoke the callback in the future. |
| 89 | + |
| 90 | +If the transaction fails, it typically indicates a failure originating from the implementation of the callback function. |
| 91 | +Check your implementation of the `entropyCallback` function to ensure that it does not throw an error when invoked. |
0 commit comments