Comment on page
Client Contract
Solidity contract for the Autonomous Airdrop example
Contract code is all in
/contracts/src
. The main files of interest are AutonomousAirdrop.sol
and AxiomV2Client.sol
.WARNING: This code is not audited and is only provided as an example.
AxiomV2Client is a useful reference implementation for the callback, which will be called in this form from the Prover. The
axiomV2Callback
function receives the callback, runs the internal and overrideable _validateAxiomV2Call
and _axiomV2Callback
functions. function axiomV2Callback(
uint64 sourceChainId,
address callerAddr,
bytes32 querySchema,
bytes32 queryHash,
bytes32[] calldata axiomResults,
bytes calldata callbackExtraData
) external {
require(msg.sender == axiomV2QueryAddress, "AxiomV2Client: caller must be axiomV2QueryAddress");
emit AxiomV2Call(sourceChainId, callerAddr, querySchema, queryHash);
_validateAxiomV2Call(sourceChainId, callerAddr, querySchema);
_axiomV2Callback(sourceChainId, callerAddr, querySchema,queryHash, axiomResults, callbackExtraData);
}
In our AutonomousAirdrop contract, we inherit
AxiomV2Client
and proceed to override the _validateAxiomV2Call
and _axiomV2Callback
functions in order for us to do our validation on the callback.Inside AutonomousAirdrop.sol, we override
_axiomV2Callback
. Inside this function, we do a number of things:- 1.Decode the callbackExtraData to be the user's address, which was checked earlier
- 2.Parse the
eventSchema
,userEventAddress
, andblockNumber
from the results array - 3.Validate the results
- 4.Transfer the tokens to the user
- 5.Emit the
ClaimAirdrop
event