Skip to content

Commit

Permalink
fix: specifying caller for Query.send (#8)
Browse files Browse the repository at this point in the history
  • Loading branch information
rpalakkal authored Feb 25, 2024
1 parent dc98b83 commit e10e6e3
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 20 deletions.
9 changes: 6 additions & 3 deletions src/AxiomTest.sol
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,8 @@ abstract contract AxiomTest is Test {
input,
callbackTarget,
bytes(""),
IAxiomV2Query.AxiomV2FeeData({ maxFeePerGas: 25 gwei, callbackGasLimit: 1_000_000, overrideAxiomQueryFee: 0 })
IAxiomV2Query.AxiomV2FeeData({ maxFeePerGas: 25 gwei, callbackGasLimit: 1_000_000, overrideAxiomQueryFee: 0 }),
msg.sender
);
}

Expand All @@ -117,12 +118,14 @@ abstract contract AxiomTest is Test {
/// @param callbackTarget The address of the contract to send a callback to
/// @param callbackExtraData Extra data to include in the callback
/// @param feeData The fee data for the query
/// @param caller the address of the caller
function query(
bytes32 _querySchema,
bytes memory input,
address callbackTarget,
bytes memory callbackExtraData,
IAxiomV2Query.AxiomV2FeeData memory feeData
IAxiomV2Query.AxiomV2FeeData memory feeData,
address caller
) internal view returns (Query memory) {
return Query({
querySchema: _querySchema,
Expand All @@ -132,7 +135,7 @@ abstract contract AxiomTest is Test {
feeData: feeData,
axiomVm: axiomVm,
outputString: "",
caller: msg.sender
caller: caller
});
}
}
18 changes: 5 additions & 13 deletions src/AxiomVm.sol
Original file line number Diff line number Diff line change
Expand Up @@ -79,18 +79,8 @@ library Axiom {
/// @param self The query to send
function send(Query memory self) public {
self.outputString = self.axiomVm.getArgsAndSendQuery(
self.querySchema, self.input, self.callbackTarget, self.callbackExtraData, self.feeData
);
}

/// @dev Sends a query to Axiom
/// @param self The query to send
/// @param caller The address of the caller of the original query into Axiom
function send(Query memory self, address caller) public {
self.outputString = self.axiomVm.getArgsAndSendQuery(
self.querySchema, self.input, self.callbackTarget, self.callbackExtraData, self.feeData
self.querySchema, self.input, self.callbackTarget, self.callbackExtraData, self.feeData, self.caller
);
self.caller = caller;
}

/// @dev Pranks a callback from Axiom
Expand Down Expand Up @@ -434,19 +424,21 @@ contract AxiomVm is Test {
* @param callbackTarget the callback contract address
* @param callbackExtraData extra data to be passed to the callback contract
* @param feeData the fee data
* @param caller the address of the caller
* @return queryString the query string
*/
function getArgsAndSendQuery(
bytes32 querySchema,
bytes memory input,
address callbackTarget,
bytes memory callbackExtraData,
IAxiomV2Query.AxiomV2FeeData memory feeData
IAxiomV2Query.AxiomV2FeeData memory feeData,
address caller
) public returns (string memory queryString) {
(QueryArgs memory args, string memory _queryString) =
sendQueryArgs(querySchema, input, callbackTarget, callbackExtraData, feeData);
queryString = _queryString;
vm.prank(msg.sender);
vm.prank(caller);
IAxiomV2Query(axiomV2QueryAddress).sendQuery{ value: args.value }(
args.sourceChainId,
args.dataQueryHash,
Expand Down
13 changes: 9 additions & 4 deletions test/AverageBalance.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,17 @@ contract AverageBalanceTest is AxiomTest {
overrideAxiomQueryFee: 0
});

// create a query into Axiom with custom `callbackExtraData` and `feeData`
Query memory q = query(querySchema, abi.encode(input), address(averageBalance), callbackExtraData, feeData);
// create a query into Axiom with custom `callbackExtraData`, `feeData`, and `caller`
address caller = address(123);
vm.deal(caller, 1 ether);
Query memory q = query(querySchema, abi.encode(input), address(averageBalance), callbackExtraData, feeData, caller);

// send the query to Axiom
address caller = address(123);
q.send(caller);
vm.expectEmit(false, false, false, false);
emit QueryFeeInfoRecorded(0, address(0), 0, 0, 0, 0);
vm.expectEmit(true, false, false, false);
emit QueryInitiatedOnchain(caller, bytes32(0), 0, bytes32(0), caller, address(averageBalance), hex"");
q.send();

// prank fulfillment of the query, returning the Axiom results
vm.expectEmit();
Expand Down

0 comments on commit e10e6e3

Please sign in to comment.