Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Base Sepolia support #16

Merged
merged 8 commits into from
Apr 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ jobs:
- name: Run Foundry tests
run: |
export PROVIDER_URI_SEPOLIA=${{ secrets.PROVIDER_URI_SEPOLIA }}
export PROVIDER_URI_BASE=${{ secrets.PROVIDER_URI_BASE }}
RUST_BACKTRACE=1 forge test -vvv

test-mac:
Expand Down Expand Up @@ -84,4 +85,5 @@ jobs:
- name: Run Foundry tests
run: |
export PROVIDER_URI_SEPOLIA=${{ secrets.PROVIDER_URI_SEPOLIA }}
export PROVIDER_URI_BASE=${{ secrets.PROVIDER_URI_BASE }}
yi-sun marked this conversation as resolved.
Show resolved Hide resolved
RUST_BACKTRACE=1 forge test -vvv
2 changes: 2 additions & 0 deletions env.example
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# Make a copy of this file and rename to `.env`
PROVIDER_URI_SEPOLIA=
PROVIDER_URI_MAINNET=
PROVIDER_URI_BASE_SEPOLIA=
PROVIDER_URI_BASE=
2 changes: 2 additions & 0 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ ast = true
[rpc_endpoints]
sepolia = "${PROVIDER_URI_SEPOLIA}"
mainnet = "${PROVIDER_URI_MAINNET}"
base-sepolia = "${PROVIDER_URI_BASE_SEPOLIA}"
base = "${PROVIDER_URI_BASE}"

[fmt]
bracket_spacing = true
Expand Down
30 changes: 15 additions & 15 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "axiom-std",
"version": "0.1.6",
"version": "0.1.7",
"description": "",
"main": "index.js",
"scripts": {
Expand All @@ -11,12 +11,12 @@
"author": "Intrinsic Technologies",
"license": "MIT",
"dependencies": {
"@axiom-crypto/circuit": "2.0.7",
"@axiom-crypto/client": "2.0.7",
"@axiom-crypto/circuit": "2.0.8",
"@axiom-crypto/client": "2.0.8",
"@axiom-crypto/core": "2.3.8",
"commander": "^11.1.0",
"dotenv": "^16.4.5",
"viem": "^2.9.5"
"viem": "^2.9.7"
},
"devDependencies": {
"@types/node": "18.15.13",
Expand Down
28 changes: 14 additions & 14 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions src/AxiomCli.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
pragma solidity ^0.8.0;

library AxiomCli {

/// @dev The SHA256 hash of the Axiom CLI binary
bytes public constant CLI_SHASUM = hex"f0f355f27f363bab6acb092fabeeffcf63b80ba08a7bd13577317a6732a90ff7";
}
}
109 changes: 73 additions & 36 deletions src/AxiomTest.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import "forge-std/console.sol";

// 🧩 MODULES
import {AxiomVm, Query, Axiom, QueryArgs, FulfillCallbackArgs} from "./AxiomVm.sol";
import { IAxiomV2Core } from "@axiom-crypto/v2-periphery/interfaces/core/IAxiomV2Core.sol";
import { IAxiomV2Query } from "@axiom-crypto/v2-periphery/interfaces/query/IAxiomV2Query.sol";
import { IAxiomV2Client } from "@axiom-crypto/v2-periphery/interfaces/client/IAxiomV2Client.sol";
import { AxiomV2Addresses } from "./AxiomV2Addresses.sol";
import {IAxiomV2Core} from "@axiom-crypto/v2-periphery/interfaces/core/IAxiomV2Core.sol";
import {IAxiomV2Query} from "@axiom-crypto/v2-periphery/interfaces/query/IAxiomV2Query.sol";
import {IAxiomV2Client} from "@axiom-crypto/v2-periphery/interfaces/client/IAxiomV2Client.sol";
import {AxiomV2Addresses, MAINNET_CHAIN_ID, SEPOLIA_CHAIN_ID, BASE_SEPOLIA_CHAIN_ID, BASE_CHAIN_ID} from "./AxiomV2Addresses.sol";

// ⭐️ TEST
/// @title AxiomTest
Expand All @@ -31,6 +31,14 @@ abstract contract AxiomTest is Test {
/// @dev The AxiomVm contract
AxiomVm axiomVm;

/// @dev Dummy address for AxiomV2Core used when Axiom is not yet deployed on a chain
address public constant DUMMY_AXIOM_V2_CORE_ADDRESS =
0xDeaDBEefDeaDBEEfdEadBEEFdEaDbEefCCcccccc;

/// @dev Dummy address for AxiomV2Query used when Axiom is not yet deployed on a chain
address public constant DUMMY_AXIOM_V2_QUERY_ADDRESS =
0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF;

/// @dev Event emitted when a query is initiated on-chain
event QueryInitiatedOnchain(
address indexed caller,
Expand All @@ -55,11 +63,14 @@ abstract contract AxiomTest is Test {
/// @dev Create a forked test environment and set up Axiom contracts
/// @param urlOrAlias The URL or alias of the fork to create
/// @param forkBlock The block number to fork from
function _createSelectForkAndSetupAxiom(string memory urlOrAlias, uint256 forkBlock) internal {
function _createSelectForkAndSetupAxiom(
string memory urlOrAlias,
uint256 forkBlock
) internal {
vm.createSelectFork(urlOrAlias, forkBlock);
uint64 chainId = uint64(block.chainid);

if (chainId == 1) {
if (chainId == MAINNET_CHAIN_ID) {
axiomV2CoreAddress = AxiomV2Addresses.axiomV2CoreAddress(chainId);
axiomV2QueryAddress = AxiomV2Addresses.axiomV2QueryAddress(chainId);

Expand All @@ -71,21 +82,34 @@ abstract contract AxiomTest is Test {
forkBlock >= AxiomV2Addresses.axiomV2QueryDeployBlock(chainId),
"AxiomV2Query not yet deployed at forkBlock"
);
} else {
axiomV2CoreAddress = AxiomV2Addresses.axiomV2CoreMockAddress(chainId);
axiomV2QueryAddress = AxiomV2Addresses.axiomV2QueryMockAddress(chainId);
axiomV2Core = IAxiomV2Core(axiomV2CoreAddress);
axiomV2Query = IAxiomV2Query(axiomV2QueryAddress);
} else if (
chainId == SEPOLIA_CHAIN_ID || chainId == BASE_SEPOLIA_CHAIN_ID
) {
axiomV2CoreAddress = AxiomV2Addresses.axiomV2CoreMockAddress(
chainId
);
axiomV2QueryAddress = AxiomV2Addresses.axiomV2QueryMockAddress(
chainId
);

require(
forkBlock >= AxiomV2Addresses.axiomV2CoreMockDeployBlock(chainId),
forkBlock >=
AxiomV2Addresses.axiomV2CoreMockDeployBlock(chainId),
"AxiomV2CoreMock not yet deployed at forkBlock"
);
require(
forkBlock >= AxiomV2Addresses.axiomV2QueryMockDeployBlock(chainId),
forkBlock >=
AxiomV2Addresses.axiomV2QueryMockDeployBlock(chainId),
"AxiomV2QueryMock not yet deployed at forkBlock"
);
axiomV2Core = IAxiomV2Core(axiomV2CoreAddress);
axiomV2Query = IAxiomV2Query(axiomV2QueryAddress);
} else {
axiomV2CoreAddress = DUMMY_AXIOM_V2_CORE_ADDRESS;
axiomV2QueryAddress = DUMMY_AXIOM_V2_QUERY_ADDRESS;
}
axiomV2Core = IAxiomV2Core(axiomV2CoreAddress);
axiomV2Query = IAxiomV2Query(axiomV2QueryAddress);

vm.makePersistent(axiomV2CoreAddress);
vm.makePersistent(axiomV2QueryAddress);
Expand All @@ -97,19 +121,31 @@ abstract contract AxiomTest is Test {
/// @param _querySchema The query schema to use
/// @param input The input data for the query
/// @param callbackTarget The address of the contract to send a callback to
function query(bytes32 _querySchema, bytes memory input, address callbackTarget)
internal
view
returns (Query memory)
{
return query(
_querySchema,
input,
callbackTarget,
bytes(""),
IAxiomV2Query.AxiomV2FeeData({ maxFeePerGas: 25 gwei, callbackGasLimit: 1_000_000, overrideAxiomQueryFee: 0 }),
msg.sender
);
function query(
bytes32 _querySchema,
bytes memory input,
address callbackTarget
) internal view returns (Query memory) {
uint64 maxFeePerGas = 25 gwei;
if (
block.chainid == BASE_CHAIN_ID ||
block.chainid == BASE_SEPOLIA_CHAIN_ID
) {
maxFeePerGas = 0.75 gwei;
}
return
query(
_querySchema,
input,
callbackTarget,
bytes(""),
IAxiomV2Query.AxiomV2FeeData({
maxFeePerGas: maxFeePerGas,
callbackGasLimit: 1_000_000,
overrideAxiomQueryFee: 0
}),
msg.sender
);
}

/// @dev Create a query into Axiom with advanced parameters
Expand All @@ -127,15 +163,16 @@ abstract contract AxiomTest is Test {
IAxiomV2Query.AxiomV2FeeData memory feeData,
address caller
) internal view returns (Query memory) {
return Query({
querySchema: _querySchema,
input: input,
callbackTarget: callbackTarget,
callbackExtraData: callbackExtraData,
feeData: feeData,
axiomVm: axiomVm,
outputString: "",
caller: caller
});
return
Query({
querySchema: _querySchema,
input: input,
callbackTarget: callbackTarget,
callbackExtraData: callbackExtraData,
feeData: feeData,
axiomVm: axiomVm,
outputString: "",
caller: caller
});
}
}
Loading
Loading