mirror of
https://github.com/vacp2p/linea-monorepo.git
synced 2026-01-09 04:08:01 -05:00
[Chore] - First pass contracts and makefile cleanup (#276)
* first pass contracts and makefile cleanup * remove unused 4844 test files * Remove Goerli references * lint fixing * lint fixing * remove more Goerli references * correct folder paths for L2 service tests * fix pathing and hardhat version * reinstate deleted file * correct file pathing
This commit is contained in:
@@ -13,7 +13,6 @@ assignees: ''
|
|||||||
- Network scope: Select those that apply, or select All
|
- Network scope: Select those that apply, or select All
|
||||||
- [ ] All
|
- [ ] All
|
||||||
- [ ] Mainnet
|
- [ ] Mainnet
|
||||||
- [ ] Testnet - Goerli
|
|
||||||
- [ ] Testnet - Sepolia
|
- [ ] Testnet - Sepolia
|
||||||
- [ ] Devnet
|
- [ ] Devnet
|
||||||
|
|
||||||
|
|||||||
17
Makefile
17
Makefile
@@ -80,7 +80,6 @@ deploy-linea-rollup-v5:
|
|||||||
LINEA_ROLLUP_GENESIS_TIMESTAMP=1683325137 \
|
LINEA_ROLLUP_GENESIS_TIMESTAMP=1683325137 \
|
||||||
npx ts-node local-deployments-artifacts/deployPlonkVerifierAndLineaRollupV5.ts
|
npx ts-node local-deployments-artifacts/deployPlonkVerifierAndLineaRollupV5.ts
|
||||||
|
|
||||||
|
|
||||||
deploy-linea-rollup-v6:
|
deploy-linea-rollup-v6:
|
||||||
# WARNING: FOR LOCAL DEV ONLY - DO NOT REUSE THESE KEYS ELSEWHERE
|
# WARNING: FOR LOCAL DEV ONLY - DO NOT REUSE THESE KEYS ELSEWHERE
|
||||||
cd contracts/; \
|
cd contracts/; \
|
||||||
@@ -155,13 +154,6 @@ deploy-l2-test-erc20:
|
|||||||
TEST_ERC20_INITIAL_SUPPLY=100000 \
|
TEST_ERC20_INITIAL_SUPPLY=100000 \
|
||||||
npx ts-node local-deployments-artifacts/deployTestERC20.ts
|
npx ts-node local-deployments-artifacts/deployTestERC20.ts
|
||||||
|
|
||||||
upgrade-linea-rollup-on-uat:
|
|
||||||
cd contracts/; \
|
|
||||||
rm -f .openzeppelin/goerli.json; \
|
|
||||||
sed "s/BLOCKCHAIN_NODE=.*/BLOCKCHAIN_NODE=https:\/\/goerli.infura.io\/v3\/${INFURA_KEY}/" .env.template.uat > .env; \
|
|
||||||
sed -i~ "s/PRIVATE_KEY=.*/PRIVATE_KEY=${PRIVATE_KEY}/" .env; \
|
|
||||||
npx hardhat run ./scripts/upgrades/upgradeZkEVM.ts --network zkevm_dev
|
|
||||||
|
|
||||||
fresh-start-l2-blockchain-only:
|
fresh-start-l2-blockchain-only:
|
||||||
make clean-environment
|
make clean-environment
|
||||||
make start-l2-blockchain-only
|
make start-l2-blockchain-only
|
||||||
@@ -183,10 +175,6 @@ fresh-start-all-traces-v2:
|
|||||||
make clean-environment
|
make clean-environment
|
||||||
make start-all-traces-v2
|
make start-all-traces-v2
|
||||||
|
|
||||||
start-all-smc-v4:
|
|
||||||
L1_GENESIS_TIME=$(get_future_time) make start-whole-environment
|
|
||||||
make deploy-contracts-v4
|
|
||||||
|
|
||||||
start-all:
|
start-all:
|
||||||
L1_GENESIS_TIME=$(get_future_time) make start-whole-environment
|
L1_GENESIS_TIME=$(get_future_time) make start-whole-environment
|
||||||
make deploy-contracts
|
make deploy-contracts
|
||||||
@@ -194,11 +182,6 @@ start-all:
|
|||||||
start-all-traces-v2:
|
start-all-traces-v2:
|
||||||
L1_GENESIS_TIME=$(get_future_time) make start-whole-environment-traces-v2
|
L1_GENESIS_TIME=$(get_future_time) make start-whole-environment-traces-v2
|
||||||
make deploy-contracts
|
make deploy-contracts
|
||||||
|
|
||||||
deploy-contracts-v4:
|
|
||||||
make compile-contracts
|
|
||||||
$(MAKE) -j2 deploy-linea-rollup-v4 deploy-l2messageservice
|
|
||||||
|
|
||||||
deploy-contracts:
|
deploy-contracts:
|
||||||
cd contracts/; \
|
cd contracts/; \
|
||||||
export L1_NONCE=$$(npx ts-node local-deployments-artifacts/get-wallet-nonce.ts --wallet-priv-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --rpc-url http://localhost:8445) && \
|
export L1_NONCE=$$(npx ts-node local-deployments-artifacts/get-wallet-nonce.ts --wallet-priv-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --rpc-url http://localhost:8445) && \
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ L2MSGSERVICE_L1L2_MESSAGE_SETTER="0x90F79bf6EB2c4f870365E785982E1f101E93b906"
|
|||||||
L2MSGSERVICE_RATE_LIMIT_PERIOD="86400" #24Hours in seconds
|
L2MSGSERVICE_RATE_LIMIT_PERIOD="86400" #24Hours in seconds
|
||||||
L2MSGSERVICE_RATE_LIMIT_AMOUNT="1000000000000000000000" #1000ETH
|
L2MSGSERVICE_RATE_LIMIT_AMOUNT="1000000000000000000000" #1000ETH
|
||||||
|
|
||||||
BLOCKCHAIN_NODE="https://goerli.infura.io/v3/<infura_key>"
|
BLOCKCHAIN_NODE="https://sepolia.infura.io/v3/<infura_key>"
|
||||||
L2_BLOCKCHAIN_NODE="https://linea-goerli.infura.io/v3/<infura_key>"
|
L2_BLOCKCHAIN_NODE="https://linea-sepolia.infura.io/v3/<infura_key>"
|
||||||
DEPLOYMOCKVERIFIER="FALSE"
|
DEPLOYMOCKVERIFIER="FALSE"
|
||||||
PRIVATE_KEY=
|
PRIVATE_KEY=
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ L2MSGSERVICE_L1L2_MESSAGE_SETTER="0x90F79bf6EB2c4f870365E785982E1f101E93b906"
|
|||||||
L2MSGSERVICE_RATE_LIMIT_PERIOD="86400" #24Hours in seconds
|
L2MSGSERVICE_RATE_LIMIT_PERIOD="86400" #24Hours in seconds
|
||||||
L2MSGSERVICE_RATE_LIMIT_AMOUNT="1000000000000000000000" #1000ETH
|
L2MSGSERVICE_RATE_LIMIT_AMOUNT="1000000000000000000000" #1000ETH
|
||||||
|
|
||||||
BLOCKCHAIN_NODE="https://goerli.infura.io/v3/<infura_key>"
|
BLOCKCHAIN_NODE="https://sepolia.infura.io/v3/<infura_key>"
|
||||||
L2_BLOCKCHAIN_NODE="https://linea-goerli.infura.io/v3/<infura_key>"
|
L2_BLOCKCHAIN_NODE="https://linea-sepolia.infura.io/v3/<infura_key>"
|
||||||
DEPLOYMOCKVERIFIER="FALSE"
|
DEPLOYMOCKVERIFIER="FALSE"
|
||||||
PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
|
PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
export enum SupportedChainIds {
|
export enum SupportedChainIds {
|
||||||
MAINNET = 1,
|
MAINNET = 1,
|
||||||
GOERLI = 5,
|
SEPOLIA = 11155111,
|
||||||
LINEA_TESTNET = 59140,
|
LINEA_TESTNET = 59140,
|
||||||
LINEA = 59144,
|
LINEA = 59144,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
// SPDX-License-Identifier: AGPL-3.0
|
|
||||||
pragma solidity 0.8.26;
|
|
||||||
|
|
||||||
import { LineaRollup } from "./LineaRollup.sol";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @title Contract to reinitialize cross-chain messaging on L1 and rollup proving.
|
|
||||||
* @author ConsenSys Software Inc.
|
|
||||||
* @dev Init indicates it is an initializer contract
|
|
||||||
* @custom:security-contact security-report@linea.build
|
|
||||||
*/
|
|
||||||
contract LineaRollupInit is LineaRollup {
|
|
||||||
/**
|
|
||||||
* @notice Reinitializes LineaRollup and underlying service dependencies.
|
|
||||||
* @param _initialStateRootHash The initial hash at migration used for proof verification.
|
|
||||||
* @param _initialL2BlockNumber The initial block number at migration.
|
|
||||||
*/
|
|
||||||
function initializeV2(uint256 _initialL2BlockNumber, bytes32 _initialStateRootHash) external reinitializer(3) {
|
|
||||||
currentL2BlockNumber = _initialL2BlockNumber;
|
|
||||||
stateRootHashes[_initialL2BlockNumber] = _initialStateRootHash;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,63 +0,0 @@
|
|||||||
// SPDX-License-Identifier: AGPL-3.0
|
|
||||||
pragma solidity 0.8.19;
|
|
||||||
|
|
||||||
import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
|
||||||
import { AccessControl } from "@openzeppelin/contracts/access/AccessControl.sol";
|
|
||||||
|
|
||||||
contract MyToken is ERC20, AccessControl {
|
|
||||||
error TokenIsSoulBound();
|
|
||||||
|
|
||||||
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
|
|
||||||
|
|
||||||
constructor(address minter) ERC20("MyToken", "MTK") {
|
|
||||||
_grantRole(DEFAULT_ADMIN_ROLE, minter);
|
|
||||||
_grantRole(MINTER_ROLE, minter);
|
|
||||||
}
|
|
||||||
|
|
||||||
function mint(address _to, uint256 _amount) external onlyRole(MINTER_ROLE) {
|
|
||||||
_mint(_to, _amount);
|
|
||||||
}
|
|
||||||
|
|
||||||
function batchMint(address[] calldata _to, uint256 _amount) external onlyRole(MINTER_ROLE) {
|
|
||||||
uint256 addressLength = _to.length;
|
|
||||||
|
|
||||||
for (uint256 i; i < addressLength; ) {
|
|
||||||
unchecked {
|
|
||||||
_mint(_to[i], _amount);
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function batchMintMultiple(address[] calldata _to, uint256[] calldata _amounts) external onlyRole(MINTER_ROLE) {
|
|
||||||
require(_to.length == _amounts.length, "Array lengths do not match");
|
|
||||||
|
|
||||||
uint256 addressLength = _to.length;
|
|
||||||
for (uint256 i; i < addressLength; ) {
|
|
||||||
unchecked {
|
|
||||||
_mint(_to[i], _amounts[i]);
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function transfer(address, uint256) public virtual override returns (bool) {
|
|
||||||
revert TokenIsSoulBound();
|
|
||||||
}
|
|
||||||
|
|
||||||
function transferFrom(address, address, uint256) public virtual override returns (bool) {
|
|
||||||
revert TokenIsSoulBound();
|
|
||||||
}
|
|
||||||
|
|
||||||
function approve(address, uint256) public virtual override returns (bool) {
|
|
||||||
revert TokenIsSoulBound();
|
|
||||||
}
|
|
||||||
|
|
||||||
function increaseAllowance(address, uint256) public virtual override returns (bool) {
|
|
||||||
revert TokenIsSoulBound();
|
|
||||||
}
|
|
||||||
|
|
||||||
function decreaseAllowance(address, uint256) public virtual override returns (bool) {
|
|
||||||
revert TokenIsSoulBound();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -13,14 +13,14 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
|
|||||||
const { deployments } = hre;
|
const { deployments } = hre;
|
||||||
validateDeployBranchAndTags(hre.network.name);
|
validateDeployBranchAndTags(hre.network.name);
|
||||||
|
|
||||||
const contractName = "LineaRollupInit";
|
const contractName = "LineaRollupV6";
|
||||||
const existingContractAddress = await getDeployedContractAddress(contractName, deployments);
|
const existingContractAddress = await getDeployedContractAddress(contractName, deployments);
|
||||||
|
|
||||||
const proxyAddress = getRequiredEnvVar("LINEA_ROLLUP_ADDRESS");
|
const proxyAddress = getRequiredEnvVar("LINEA_ROLLUP_ADDRESS");
|
||||||
const initialL2BlockNumber = "3";
|
const initialL2BlockNumber = "3";
|
||||||
const initialStateRootHash = "0x3450000000000000000000000000000000000000000000000000000000000000";
|
const initialStateRootHash = "0x3450000000000000000000000000000000000000000000000000000000000000";
|
||||||
|
|
||||||
const factory = await ethers.getContractFactory("LineaRollupInit");
|
const factory = await ethers.getContractFactory("LineaRollupV6");
|
||||||
|
|
||||||
if (existingContractAddress === undefined) {
|
if (existingContractAddress === undefined) {
|
||||||
console.log(`Deploying initial version, NB: the address will be saved if env SAVE_ADDRESS=true.`);
|
console.log(`Deploying initial version, NB: the address will be saved if env SAVE_ADDRESS=true.`);
|
||||||
@@ -38,6 +38,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
|
|||||||
console.log(`Contract deployed at ${contract}`);
|
console.log(`Contract deployed at ${contract}`);
|
||||||
|
|
||||||
// The encoding should be used through the safe.
|
// The encoding should be used through the safe.
|
||||||
|
// THIS IS JUST A SAMPLE AND WILL BE ADJUSTED WHEN NEEDED FOR GENERATING THE CALLDATA FOR THE UPGRADE CALL
|
||||||
const upgradeCallWithReinitializationUsingSecurityCouncil = ethers.concat([
|
const upgradeCallWithReinitializationUsingSecurityCouncil = ethers.concat([
|
||||||
"0x9623609d",
|
"0x9623609d",
|
||||||
ethers.AbiCoder.defaultAbiCoder().encode(
|
ethers.AbiCoder.defaultAbiCoder().encode(
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
import { ethers } from "hardhat";
|
|
||||||
import { DeployFunction } from "hardhat-deploy/types";
|
|
||||||
import { HardhatRuntimeEnvironment } from "hardhat/types";
|
|
||||||
import { deployFromFactory } from "../scripts/hardhat/utils";
|
|
||||||
import { get1559Fees } from "../scripts/utils";
|
|
||||||
import {
|
|
||||||
tryVerifyContractWithConstructorArgs,
|
|
||||||
getDeployedContractAddress,
|
|
||||||
tryStoreAddress,
|
|
||||||
getRequiredEnvVar,
|
|
||||||
} from "../common/helpers";
|
|
||||||
|
|
||||||
const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
|
|
||||||
const { deployments } = hre;
|
|
||||||
const contractName = "MyToken";
|
|
||||||
const existingContractAddress = await getDeployedContractAddress(contractName, deployments);
|
|
||||||
const provider = ethers.provider;
|
|
||||||
|
|
||||||
const adminAddress = getRequiredEnvVar("MYTOKEN_ADMIN_ADDRESS");
|
|
||||||
|
|
||||||
if (existingContractAddress === undefined) {
|
|
||||||
console.log(`Deploying initial version, NB: the address will be saved if env SAVE_ADDRESS=true.`);
|
|
||||||
} else {
|
|
||||||
console.log(`Deploying new version, NB: ${existingContractAddress} will be overwritten if env SAVE_ADDRESS=true.`);
|
|
||||||
}
|
|
||||||
const contract = await deployFromFactory(contractName, provider, adminAddress, await get1559Fees(provider));
|
|
||||||
|
|
||||||
const contractAddress = await contract.getAddress();
|
|
||||||
console.log(`${contractName} deployed at ${contractAddress}`);
|
|
||||||
|
|
||||||
const deployTx = contract.deploymentTransaction();
|
|
||||||
if (!deployTx) {
|
|
||||||
throw "Contract deployment transaction receipt not found.";
|
|
||||||
}
|
|
||||||
|
|
||||||
await tryStoreAddress(hre.network.name, contractName, contractAddress, deployTx.hash);
|
|
||||||
|
|
||||||
const args = [adminAddress];
|
|
||||||
|
|
||||||
await tryVerifyContractWithConstructorArgs(contractAddress, "contracts/token/MyToken.sol:MyToken", args);
|
|
||||||
};
|
|
||||||
export default func;
|
|
||||||
func.tags = ["MYToken"];
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
5
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"address": "0xB20e7214c0C60fF5156Eb592a40a88cBcfb03cDc",
|
|
||||||
"abi": "[{\"type\":\"function\",\"name\":\"Verify\",\"constant\":true,\"stateMutability\":\"view\",\"payable\":false,\"inputs\":[{\"type\":\"bytes\",\"name\":\"proof\"},{\"type\":\"uint256[]\",\"name\":\"public_inputs\"}],\"outputs\":[{\"type\":\"bool\",\"name\":\"success\"}]}]",
|
|
||||||
"transactionHash": "0x626b168da0c941578e2511c90369f4b96079b5307dbbe51be8122c46517dc97d"
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"address": "0x29d07227c033e75e1A567f81eE981D7a06154faC",
|
|
||||||
"abi": "[{\"type\":\"function\",\"name\":\"Verify\",\"constant\":true,\"stateMutability\":\"view\",\"payable\":false,\"inputs\":[{\"type\":\"bytes\",\"name\":\"proof\"},{\"type\":\"uint256[]\",\"name\":\"public_inputs\"}],\"outputs\":[{\"type\":\"bool\",\"name\":\"success\"}]}]",
|
|
||||||
"transactionHash": "0xfd1b390714a8b743718efe3e3d1a5830e28aa5c277763bb7dcb76a7ca74939a8"
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"address": "0xE1F005233fbc735e72982e11DD62E81F6d0fF8C1",
|
|
||||||
"abi": "[{\"type\":\"function\",\"name\":\"Verify\",\"constant\":true,\"stateMutability\":\"view\",\"payable\":false,\"inputs\":[{\"type\":\"bytes\",\"name\":\"proof\"},{\"type\":\"uint256[]\",\"name\":\"public_inputs\"}],\"outputs\":[{\"type\":\"bool\",\"name\":\"success\"}]}]",
|
|
||||||
"transactionHash": "0xb472d89c576a5781e1a45ae620b5f49a5eb4a58d77bf70bdd8cb9050a0208966"
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"address": "0xA23e7cb9bc9eF2A072E35cE36439735ef1b20113",
|
|
||||||
"abi": "[{\"type\":\"function\",\"name\":\"Verify\",\"constant\":true,\"stateMutability\":\"view\",\"payable\":false,\"inputs\":[{\"type\":\"bytes\",\"name\":\"proof\"},{\"type\":\"uint256[]\",\"name\":\"public_inputs\"}],\"outputs\":[{\"type\":\"bool\",\"name\":\"success\"}]}]",
|
|
||||||
"transactionHash": "0x9f64c8b5dd0b2db52821ff7cf7dd43b5490abf613a9e634ef168892ebc8c6acd"
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
59140
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -42,7 +42,7 @@
|
|||||||
"dotenv": "16.4.5",
|
"dotenv": "16.4.5",
|
||||||
"edit-json-file": "1.8.0",
|
"edit-json-file": "1.8.0",
|
||||||
"ethers": "6.12.0",
|
"ethers": "6.12.0",
|
||||||
"hardhat": "2.22.10",
|
"hardhat": "2.22.11",
|
||||||
"hardhat-deploy": "0.12.4",
|
"hardhat-deploy": "0.12.4",
|
||||||
"hardhat-storage-layout": "0.1.7",
|
"hardhat-storage-layout": "0.1.7",
|
||||||
"hardhat-tracer": "2.8.2",
|
"hardhat-tracer": "2.8.2",
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
{
|
|
||||||
"aggregatedProof": "0x1fe5267b8eafc819b3b74ab65b9e34362a35022232187314803267372d6ceffe2153541f479292f4ab57eeb145a192f1aed7f5ef9e0043db0d56313dec96eefb2015742f0bd1f0bc2d7580299c40b27631437a7463ce9dfcae3d22e421c7067c01229f2e356f2a1a334aa2518357628ff4c9c2603a5378500b7745a32a682959286db89403ce1630bd8f67b5d7215e4331cf12f4bbf1e2eafce24c7fca50b167298301b7267fdef114b5ebcafcfdc27725c332ebdce073cb4d20aedc741912ba02f66d94402a8c87effc0659255afdd704d9e84f00545d662127f5b5f0aac9fa00d3595236dd194c165f2021a6cd36f4354cdb45ff774df8e145804bdfca64f22ef402958c3659e87dfc8bfb59d006d65f5a690e1d5bf219abb9a0846e4b946c1b1f5bfa67e7a759230cfdbcc8c59ea1ea9e50ccc69080416ac59a63b3487a92141771b119932810469ed904f3054f36d9c8929cec6262719468c1784d07a0ea1a5836a08ce2d83344ac1a9c7225c0e43a51141a67c637a0c9c30bd98af734e40c7ab90abbb1866f10d6258a201d9a290987d82304f07032e9439a8fd017fbcb094a6c1007657ab3711ac1a106d230d6b49d3cf1ca5c6f5b0095e15c6c3673d20418aa76db1d96e38be28551e2c8913a7d48c0a56d9c922bf16db556b05e791c261b1f2cba652d6c368b60a63ddb350a12e256a915a27e464010e8fea18cb5c903c27f1683fcbcbb21399f76813288f38f68235b6f5a6a41139faf894c19a9af0fae4174b7fee8b9abfb50d49d59e27d766337307fb8b4d756f343f066672dc60991577ddcc2231b8dd215edbf78d8bd946067704f62a40bcb19593a78c0ea4f03bdd235742712148f7b7169e0767e3146bf27c19e3c74401c6d461cb55c4ccc1b853beae90d82a8929fe039b7ead8827b1d4443c5751bf00a5a14cc16f45d6c0188f7a7be76f133802e5f5a2c2834b5f916f62beec11fba816da5039d12fe1806c7fec2196075449a50fb2418a71c9faa09033f4f178683ee79e6af43b0e1ba2cd915cf409bcba2cdac3b6f1328eea241d2c85f39e7fb4e45aed4430b0826870ceeceeac26249914c76f53cd229baa5c6d1c63990670dcb29c573fe5259f9ca07191911ecf79c61edff2a672af0b92e917812e3929bed1edfbcb413ef121d2825ff7665487375108a686e5a8b6d06a934f1c926df0b50ebdf22f9366e33824922eccc7b55c619a0dcb6e9ba7a3df149f3ba8544e3f01b2356edcf8b4caad21622f29c3aef492d026dae7bd519ab733aa04e1dc2e785b842042ad3c7906168d7",
|
|
||||||
"aggregatedProverVersion": "test",
|
|
||||||
"aggregatedVerifierIndex": 1,
|
|
||||||
"aggregatedProofPublicInput": "0x231e898779333073b4d50d1132d89d60e969d9a1e3acd03fa169b4122ecfa373",
|
|
||||||
"dataHashes": [
|
|
||||||
"0x01f5853fa56ab910be0933f2ee811bbc437500dba4e38acbae17eab00eec9f95",
|
|
||||||
"0x82694a9670032c50548d42dbf6f0d9d09febc4f2454796997ec9a4edc7f87106",
|
|
||||||
"0x017b1d49c6c7947f83855cc16063ef19d02369540b97867855427b56cdaea487"
|
|
||||||
],
|
|
||||||
"dataParentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"parentAggregationFinalShnarf": "0x4f64fe1ce613546d34d666d8258c13c6296820fd13114d784203feb91276e838",
|
|
||||||
"finalShnarf": "0x01eac6954f735d506a9a7c519e62f1a3a75c0e48e058a6358be8d3896e93af10",
|
|
||||||
"parentStateRootHash": "0x072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd",
|
|
||||||
"parentAggregationLastBlockTimestamp": 1683325137,
|
|
||||||
"lastFinalizedBlockNumber": 0,
|
|
||||||
"finalTimestamp": 1683335137,
|
|
||||||
"finalBlockNumber": 114,
|
|
||||||
"l1RollingHash": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
||||||
"l1RollingHashMessageNumber": 12,
|
|
||||||
"l2MerkleRoots": [
|
|
||||||
"0x54ace467f69267f4e71233605888cb0161f115c83ffeb1f1c9430c9988432f4e"
|
|
||||||
],
|
|
||||||
"l2MerkleTreesDepth": 5,
|
|
||||||
"l2MessagingBlocksOffsets": "0x00000000000000000000000fffff"
|
|
||||||
}
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,395 +0,0 @@
|
|||||||
import { AbiCoder, BytesLike, Transaction, Wallet, ethers } from "ethers";
|
|
||||||
import { commitmentsToVersionedHashes } from "@ethereumjs/util";
|
|
||||||
import * as kzg from "c-kzg";
|
|
||||||
import submissionDataJson2 from "../SixInOne/blocks-1-46.json";
|
|
||||||
import submissionDataJson from "./blocks-47-81.json";
|
|
||||||
import submissionDataJson3 from "./blocks-82-114.json";
|
|
||||||
import aggregateProof1to114 from "./aggregatedProof-1-114.json";
|
|
||||||
import { DataHexString } from "ethers/lib.commonjs/utils/data";
|
|
||||||
|
|
||||||
export function generateKeccak256(types: string[], values: unknown[], packed?: boolean) {
|
|
||||||
return ethers.keccak256(encodeData(types, values, packed));
|
|
||||||
}
|
|
||||||
|
|
||||||
export const encodeData = (types: string[], values: unknown[], packed?: boolean) => {
|
|
||||||
if (packed) {
|
|
||||||
return ethers.solidityPacked(types, values);
|
|
||||||
}
|
|
||||||
return AbiCoder.defaultAbiCoder().encode(types, values);
|
|
||||||
};
|
|
||||||
|
|
||||||
type SubmissionData = {
|
|
||||||
parentStateRootHash: string;
|
|
||||||
dataParentHash: string;
|
|
||||||
finalStateRootHash: string;
|
|
||||||
firstBlockInData: bigint;
|
|
||||||
finalBlockInData: bigint;
|
|
||||||
snarkHash: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type ParentSubmissionData = {
|
|
||||||
finalStateRootHash: string;
|
|
||||||
firstBlockInData: bigint;
|
|
||||||
finalBlockInData: bigint;
|
|
||||||
shnarf: string;
|
|
||||||
dataParentHash: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export function generateSubmissionDataFromJSON(
|
|
||||||
startingBlockNumber: number,
|
|
||||||
endingBlockNumber: number,
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
parsedJSONData: any,
|
|
||||||
): { submissionData: SubmissionData; blob: Uint8Array } {
|
|
||||||
const returnData = {
|
|
||||||
parentStateRootHash: parsedJSONData.parentStateRootHash,
|
|
||||||
dataParentHash: parsedJSONData.parentDataHash,
|
|
||||||
finalStateRootHash: parsedJSONData.finalStateRootHash,
|
|
||||||
firstBlockInData: BigInt(startingBlockNumber),
|
|
||||||
finalBlockInData: BigInt(endingBlockNumber),
|
|
||||||
snarkHash: parsedJSONData.snarkHash,
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
submissionData: returnData,
|
|
||||||
blob: ethers.decodeBase64(parsedJSONData.compressedData),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function generateParentSubmissionData(finalStateRootHash: string, parentDataHash: string): ParentSubmissionData {
|
|
||||||
return {
|
|
||||||
finalStateRootHash: finalStateRootHash,
|
|
||||||
firstBlockInData: BigInt(0),
|
|
||||||
finalBlockInData: BigInt(0),
|
|
||||||
shnarf: ethers.keccak256(ethers.toUtf8Bytes(ethers.ZeroHash)),
|
|
||||||
dataParentHash: parentDataHash,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
export function generateParentSubmissionDataFromJson(parsedJSONData: any): ParentSubmissionData {
|
|
||||||
return {
|
|
||||||
finalStateRootHash: parsedJSONData.finalStateRootHash,
|
|
||||||
firstBlockInData: BigInt(parsedJSONData.conflationOrder.startingBlockNumber),
|
|
||||||
finalBlockInData: BigInt(parsedJSONData.conflationOrder.upperBoundaries.slice(-1)[0]),
|
|
||||||
shnarf: parsedJSONData.expectedShnarf,
|
|
||||||
dataParentHash: parsedJSONData.parentDataHash,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function generateSubmissionCallDataFromJSON(
|
|
||||||
startingBlockNumber: number,
|
|
||||||
endingBlockNumber: number,
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
parsedJSONData: any,
|
|
||||||
): { submissionData: SubmissionData } {
|
|
||||||
const returnData = {
|
|
||||||
parentStateRootHash: parsedJSONData.parentStateRootHash,
|
|
||||||
dataParentHash: parsedJSONData.parentDataHash,
|
|
||||||
finalStateRootHash: parsedJSONData.finalStateRootHash,
|
|
||||||
firstBlockInData: BigInt(startingBlockNumber),
|
|
||||||
finalBlockInData: BigInt(endingBlockNumber),
|
|
||||||
snarkHash: parsedJSONData.snarkHash,
|
|
||||||
compressedData: ethers.hexlify(ethers.decodeBase64(parsedJSONData.compressedData)),
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
submissionData: returnData,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPadded(data: Uint8Array): Uint8Array {
|
|
||||||
const pdata = new Uint8Array(131072).fill(0);
|
|
||||||
pdata.set(data);
|
|
||||||
return pdata;
|
|
||||||
}
|
|
||||||
|
|
||||||
function requireEnv(name: string): string {
|
|
||||||
const envVariable = process.env[name];
|
|
||||||
if (!envVariable) {
|
|
||||||
throw new Error(`Missing ${name} environment variable`);
|
|
||||||
}
|
|
||||||
|
|
||||||
return envVariable;
|
|
||||||
}
|
|
||||||
|
|
||||||
function kzgCommitmentsToVersionedHashes(commitments: Uint8Array[]): string[] {
|
|
||||||
const versionedHashes = commitmentsToVersionedHashes(commitments);
|
|
||||||
return versionedHashes.map((versionedHash) => ethers.hexlify(versionedHash));
|
|
||||||
}
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
const rpcUrl = requireEnv("RPC_URL");
|
|
||||||
const privateKey = requireEnv("PRIVATE_KEY");
|
|
||||||
const destinationAddress = requireEnv("DESTINATION_ADDRESS");
|
|
||||||
|
|
||||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
|
||||||
const wallet = new Wallet(privateKey, provider);
|
|
||||||
|
|
||||||
kzg.loadTrustedSetup(`${__dirname}/../trusted_setup.txt`);
|
|
||||||
|
|
||||||
const { submissionData: submissionData2, blob: blob2 } = generateSubmissionDataFromJSON(1, 46, submissionDataJson2);
|
|
||||||
const parentSubmissionData1 = generateParentSubmissionData(
|
|
||||||
"0x072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd",
|
|
||||||
ethers.ZeroHash,
|
|
||||||
);
|
|
||||||
|
|
||||||
const { submissionData } = generateSubmissionCallDataFromJSON(47, 81, submissionDataJson);
|
|
||||||
const parentSubmissionData2 = generateParentSubmissionDataFromJson(submissionDataJson2);
|
|
||||||
|
|
||||||
const { submissionData: submissionData3, blob: blob3 } = generateSubmissionDataFromJSON(82, 114, submissionDataJson3);
|
|
||||||
const parentSubmissionData3 = generateParentSubmissionDataFromJson(submissionDataJson);
|
|
||||||
|
|
||||||
const finalSubmissionData = generateParentSubmissionDataFromJson(submissionDataJson3);
|
|
||||||
|
|
||||||
const fullblob2 = getPadded(blob2);
|
|
||||||
const fullblob3 = getPadded(blob3);
|
|
||||||
|
|
||||||
const commitment2 = kzg.blobToKzgCommitment(fullblob2);
|
|
||||||
const commitment3 = kzg.blobToKzgCommitment(fullblob3);
|
|
||||||
|
|
||||||
const [versionedHash2, versionedHash3] = kzgCommitmentsToVersionedHashes([commitment2, commitment3]);
|
|
||||||
|
|
||||||
let encodedCall = encodeCall(submissionData2, parentSubmissionData1, [commitment2], submissionDataJson2);
|
|
||||||
await submitBlob(provider, wallet, encodedCall, destinationAddress, [versionedHash2], fullblob2);
|
|
||||||
|
|
||||||
await submitCalldata(submissionData, parentSubmissionData2);
|
|
||||||
|
|
||||||
encodedCall = encodeCall(submissionData3, parentSubmissionData3, [commitment3], submissionDataJson3);
|
|
||||||
|
|
||||||
await submitBlob(provider, wallet, encodedCall, destinationAddress, [versionedHash3], fullblob3);
|
|
||||||
|
|
||||||
await sendProof(aggregateProof1to114, parentSubmissionData1, finalSubmissionData);
|
|
||||||
}
|
|
||||||
|
|
||||||
function encodeCall(
|
|
||||||
submissionData: SubmissionData,
|
|
||||||
parentSubmissionData: ParentSubmissionData,
|
|
||||||
commitments: BytesLike[],
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
submissionDataJson: any,
|
|
||||||
): DataHexString {
|
|
||||||
const encodedCall = ethers.concat([
|
|
||||||
"0xf82c988c",
|
|
||||||
ethers.AbiCoder.defaultAbiCoder().encode(
|
|
||||||
[
|
|
||||||
"tuple(bytes32,bytes32,bytes32,uint256,uint256,bytes32)",
|
|
||||||
"tuple(bytes32,uint256,uint256,bytes32,bytes32)",
|
|
||||||
"uint256",
|
|
||||||
"bytes",
|
|
||||||
"bytes",
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
submissionData.parentStateRootHash,
|
|
||||||
submissionData.dataParentHash,
|
|
||||||
submissionData.finalStateRootHash,
|
|
||||||
submissionData.firstBlockInData,
|
|
||||||
submissionData.finalBlockInData,
|
|
||||||
submissionData.snarkHash,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
parentSubmissionData.finalStateRootHash,
|
|
||||||
parentSubmissionData.firstBlockInData,
|
|
||||||
parentSubmissionData.finalBlockInData,
|
|
||||||
parentSubmissionData.shnarf,
|
|
||||||
parentSubmissionData.dataParentHash,
|
|
||||||
],
|
|
||||||
submissionDataJson.expectedY,
|
|
||||||
commitments[0],
|
|
||||||
submissionDataJson.kzgProofContract,
|
|
||||||
],
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
return encodedCall;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function submitBlob(
|
|
||||||
provider: ethers.JsonRpcProvider,
|
|
||||||
wallet: Wallet,
|
|
||||||
encodedCall: string,
|
|
||||||
destinationAddress: string,
|
|
||||||
versionedHashes: string[],
|
|
||||||
fullblob: Uint8Array,
|
|
||||||
) {
|
|
||||||
const { maxFeePerGas, maxPriorityFeePerGas } = await provider.getFeeData();
|
|
||||||
const nonce = await provider.getTransactionCount(wallet.address);
|
|
||||||
|
|
||||||
const transaction = Transaction.from({
|
|
||||||
data: encodedCall,
|
|
||||||
maxPriorityFeePerGas: maxPriorityFeePerGas!,
|
|
||||||
maxFeePerGas: maxFeePerGas!,
|
|
||||||
to: destinationAddress,
|
|
||||||
chainId: 31648428,
|
|
||||||
type: 3,
|
|
||||||
nonce,
|
|
||||||
value: 0,
|
|
||||||
kzg,
|
|
||||||
blobs: [fullblob],
|
|
||||||
gasLimit: 5_000_000,
|
|
||||||
blobVersionedHashes: versionedHashes,
|
|
||||||
maxFeePerBlobGas: maxFeePerGas!,
|
|
||||||
});
|
|
||||||
|
|
||||||
const tx = await wallet.sendTransaction(transaction);
|
|
||||||
const receipt = await tx.wait();
|
|
||||||
console.log({ transaction: tx, receipt });
|
|
||||||
}
|
|
||||||
|
|
||||||
async function sendProof(
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
proofFile: any,
|
|
||||||
submissionData: ParentSubmissionData,
|
|
||||||
finalSubmissionData: ParentSubmissionData,
|
|
||||||
) {
|
|
||||||
console.log("proof");
|
|
||||||
|
|
||||||
const rpcUrl = requireEnv("RPC_URL");
|
|
||||||
const privateKey = requireEnv("PRIVATE_KEY");
|
|
||||||
const destinationAddress = requireEnv("DESTINATION_ADDRESS");
|
|
||||||
|
|
||||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
|
||||||
const wallet = new Wallet(privateKey, provider);
|
|
||||||
|
|
||||||
const xxx = [
|
|
||||||
proofFile.aggregatedProof,
|
|
||||||
0,
|
|
||||||
[
|
|
||||||
proofFile.parentStateRootHash,
|
|
||||||
submissionData.shnarf,
|
|
||||||
proofFile.dataHashes.slice(-1)[0],
|
|
||||||
[
|
|
||||||
finalSubmissionData.finalStateRootHash,
|
|
||||||
finalSubmissionData.firstBlockInData,
|
|
||||||
finalSubmissionData.finalBlockInData,
|
|
||||||
finalSubmissionData.shnarf,
|
|
||||||
finalSubmissionData.dataParentHash,
|
|
||||||
],
|
|
||||||
proofFile.parentAggregationLastBlockTimestamp,
|
|
||||||
proofFile.finalTimestamp,
|
|
||||||
proofFile.l1RollingHash,
|
|
||||||
proofFile.l1RollingHashMessageNumber,
|
|
||||||
proofFile.l2MerkleRoots,
|
|
||||||
proofFile.l2MerkleTreesDepth,
|
|
||||||
proofFile.l2MessagingBlocksOffsets,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
console.log(xxx);
|
|
||||||
|
|
||||||
const encodedCall = ethers.concat([
|
|
||||||
"0x727073c8",
|
|
||||||
ethers.AbiCoder.defaultAbiCoder().encode(
|
|
||||||
[
|
|
||||||
"bytes",
|
|
||||||
"uint256",
|
|
||||||
"tuple(bytes32,bytes32,bytes32,tuple(bytes32,uint256,uint256,bytes32,bytes32),uint256,uint256,bytes32,uint256,bytes32[],uint256,bytes)",
|
|
||||||
],
|
|
||||||
[
|
|
||||||
proofFile.aggregatedProof,
|
|
||||||
0,
|
|
||||||
[
|
|
||||||
proofFile.parentStateRootHash,
|
|
||||||
submissionData.shnarf,
|
|
||||||
proofFile.dataHashes.slice(-1)[0],
|
|
||||||
[
|
|
||||||
finalSubmissionData.finalStateRootHash,
|
|
||||||
finalSubmissionData.firstBlockInData,
|
|
||||||
finalSubmissionData.finalBlockInData,
|
|
||||||
finalSubmissionData.shnarf,
|
|
||||||
finalSubmissionData.dataParentHash,
|
|
||||||
],
|
|
||||||
proofFile.parentAggregationLastBlockTimestamp,
|
|
||||||
proofFile.finalTimestamp,
|
|
||||||
proofFile.l1RollingHash,
|
|
||||||
proofFile.l1RollingHashMessageNumber,
|
|
||||||
proofFile.l2MerkleRoots,
|
|
||||||
proofFile.l2MerkleTreesDepth,
|
|
||||||
proofFile.l2MessagingBlocksOffsets,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
const { maxFeePerGas, maxPriorityFeePerGas } = await provider.getFeeData();
|
|
||||||
const nonce = await provider.getTransactionCount(wallet.address);
|
|
||||||
|
|
||||||
const transaction = Transaction.from({
|
|
||||||
data: encodedCall,
|
|
||||||
maxPriorityFeePerGas: maxPriorityFeePerGas!,
|
|
||||||
maxFeePerGas: maxFeePerGas!,
|
|
||||||
to: destinationAddress,
|
|
||||||
chainId: 31648428,
|
|
||||||
nonce,
|
|
||||||
value: 0,
|
|
||||||
gasLimit: 5_000_000,
|
|
||||||
});
|
|
||||||
|
|
||||||
const tx = await wallet.sendTransaction(transaction);
|
|
||||||
const receipt = await tx.wait();
|
|
||||||
console.log({ transaction: tx, receipt });
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
async function submitCalldata(calldata: any, parentSubmissionData: ParentSubmissionData) {
|
|
||||||
const rpcUrl = requireEnv("RPC_URL");
|
|
||||||
const privateKey = requireEnv("PRIVATE_KEY");
|
|
||||||
const destinationAddress = requireEnv("DESTINATION_ADDRESS");
|
|
||||||
|
|
||||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
|
||||||
const wallet = new Wallet(privateKey, provider);
|
|
||||||
|
|
||||||
const encodedCall = ethers.concat([
|
|
||||||
"0xc6251c58",
|
|
||||||
ethers.AbiCoder.defaultAbiCoder().encode(
|
|
||||||
[
|
|
||||||
"tuple(bytes32,bytes32,bytes32,uint256,uint256,bytes32,bytes)",
|
|
||||||
"tuple(bytes32,uint256,uint256,bytes32,bytes32)",
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
calldata.parentStateRootHash,
|
|
||||||
calldata.dataParentHash,
|
|
||||||
calldata.finalStateRootHash,
|
|
||||||
calldata.firstBlockInData,
|
|
||||||
calldata.finalBlockInData,
|
|
||||||
calldata.snarkHash,
|
|
||||||
calldata.compressedData,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
parentSubmissionData.finalStateRootHash,
|
|
||||||
parentSubmissionData.firstBlockInData,
|
|
||||||
parentSubmissionData.finalBlockInData,
|
|
||||||
parentSubmissionData.shnarf,
|
|
||||||
parentSubmissionData.dataParentHash,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
const { maxFeePerGas, maxPriorityFeePerGas } = await provider.getFeeData();
|
|
||||||
const nonce = await provider.getTransactionCount(wallet.address);
|
|
||||||
|
|
||||||
const transaction = Transaction.from({
|
|
||||||
data: encodedCall,
|
|
||||||
maxPriorityFeePerGas: maxPriorityFeePerGas!,
|
|
||||||
maxFeePerGas: maxFeePerGas!,
|
|
||||||
to: destinationAddress,
|
|
||||||
chainId: 31648428,
|
|
||||||
nonce,
|
|
||||||
value: 0,
|
|
||||||
gasLimit: 5_000_000,
|
|
||||||
});
|
|
||||||
|
|
||||||
const tx = await wallet.sendTransaction(transaction);
|
|
||||||
const receipt = await tx.wait();
|
|
||||||
console.log({ transaction: tx, receipt });
|
|
||||||
}
|
|
||||||
|
|
||||||
main()
|
|
||||||
.then(() => process.exit(0))
|
|
||||||
.catch((error) => {
|
|
||||||
console.error(error);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
@@ -146,7 +146,7 @@ async function main() {
|
|||||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
||||||
const wallet = new Wallet(privateKey, provider);
|
const wallet = new Wallet(privateKey, provider);
|
||||||
|
|
||||||
kzg.loadTrustedSetup(`${__dirname}/../trusted_setup.txt`);
|
kzg.loadTrustedSetup(`${__dirname}/trusted_setup.txt`);
|
||||||
|
|
||||||
const parentSubmissionData1 = generateParentSubmissionData(
|
const parentSubmissionData1 = generateParentSubmissionData(
|
||||||
"0x072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd",
|
"0x072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd",
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"aggregatedProof": "0x20732827391ad5a5df0d53b28ab354ecca70ccc4de92fb23a518ccc7d3492c320afc6cd28fc0f4190ec985b947787a8cbfa185fdeab41fe586a7a2c81aba775802543720e6224be0cca01afa8d2fc489639cb561add49a10496a3d8b8267c19f2e2b38026f7e2980908e88589479ccbd3468869554bc5c055a3d8752189b11882090bd3714278158f76cb0384cd4173bff2029ad74fc9d367c376c1edcad99f91f3c6f7a3ea3683d04dff0fd7fe953c334ecf1081aa49d30fe85cde0a101849e0aed76f9905df06d9076d51e2a97c2c05c64d62dc4b4785d208e8f692ef289b91f54985a79866d63cab792360048963de6f11a2c9ba21558ef8cd02acbe4d90e26020a6f73d04c953176f703c265c6c06c909e763f6742e686cecc39201a10f429aaef17f3963e95741831cd08795f4fb723a90749d8360a713f05e6998c1e2e14b5eb5f14efba252108cb354d7221c24d8057a908c0f11ec7d5621a8e97dbd30abbd543eafbc7f7c9c3e145dd309a8257519de2a31826a27e2e714af38369d50c9f865ead16dcbf3d40c0310fc5ce5624a88ed01793cbd083559eb222f60b45232d9253787c65c98bd649eae7cafe153903bbf7b111b85cd0841976a5920c9a01d7cd1b31545a1dc6c7a9cfaf985ce55b367e11eba90d5efdb1f957d43eedb72a4b759328bad9e173a151a251ccfb52b463dde2d593c5f2186799391d5c0132092cbbc24e65b79197900876e5d810f564f65b7fa1803168a3f6b8783e8118ca1a3346cc71faec9e61038660a800268b140c7926170968de8fc7381780d682912451dbdb298be466f122a0879b91eaadf4831d54e27a20916e103d71d50e039b2413e77c871f3902e19bbb432ab112eaf8e249a23d8c0e795f30bf4440c559fa025c40d57962c47eed08a7ba1751d5503fc7b935dc2ef36f2e5aa5dd308575cc24aa2ec20da42de4a0ae5b2c5674139d4cf620fcb4934cf3b315e61d31cd70ed05fb48ce6c62f974d47a8df1d432d65706e076e0e74afdf6f5aac5a8bedf102c109936c4dae4ddf68d0f738124ccd99b677fbd5d225d8bc300ec9b7ba7b4f07f0f4140123ba1a3d90dc15596ab335d3e6d985ae7b05b8fdee2092e076cd92a01002633a614a3cd0339daa7703d6fbfb8fc188d7b2dadfd1d6a839d6df3c8cd4912718d5041a0ee63e867557dd677f3dd7d6f2329f0ccec15a89b54099ae961c91bc048ac0006b53c03cf8d2c142cefe822472f9c0b9060f3914303b1bf0b5dcc0b26f8f21577d732e9b1634b1dbe3fef0c44053dd3c08f5d8cd522258a85f18f",
|
|
||||||
"aggregatedProverVersion": "test",
|
|
||||||
"aggregatedVerifierIndex": 1,
|
|
||||||
"aggregatedProofPublicInput": "0x276e5991b2c54ead939750d9f9ff67dc90a79e8dd17bf7528d1fd5ef9add0037",
|
|
||||||
"dataHashes": [
|
|
||||||
"0x7126453ddb4c09537a505a70bae0dd57a3f5daba4522fa1f79b760fb28efb35c"
|
|
||||||
],
|
|
||||||
"dataParentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"parentStateRootHash": "0x072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd",
|
|
||||||
"parentAggregationLastBlockTimestamp": 1683325137,
|
|
||||||
"lastFinalizedBlockNumber": 0,
|
|
||||||
"finalTimestamp": 1683335137,
|
|
||||||
"finalBlockNumber": 46,
|
|
||||||
"l1RollingHash": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
||||||
"l1RollingHashMessageNumber": 12,
|
|
||||||
"l2MerkleRoots": [
|
|
||||||
"0x97cd1539d08f7c0ba06ad836b2690eef50afd86609a0672517ec0ef8c1f94796"
|
|
||||||
],
|
|
||||||
"l2MerkleTreesDepth": 5,
|
|
||||||
"l2MessagingBlocksOffsets": "0x00000000000000000000000fffff"
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"aggregatedProof": "0x2d469df88312f32b8e4b689ebdab672b14dff77fc472b3b3bc3481b64921cadc2c422b0045ad11dac8a8cb4c57519e6325ba1f4e837e3a931208b9530bed67e91c26625523abd69510fec2852bfe93fb6893f8011d156da32f2367205483773e2c72c6c163a6ba50cd5573ffdfd6b8d93e7c42578b12434cd1de308c0720650b285497b617782c71ad63aa09f8d0dad8b4683d5e25a277358748f68f3b81fc292f7f983ed244eee0db89288d764aaff6c00df830f20ccab93ae11a2ae507ffa322c76db4af3de67e9d50078f3b49283a0af08350df1ac9b42ecf30f6e11526bd06269646f1f5e049c235bef2625f8d5feec18a807bf1b5e797ff8e516c0f0bf926c03b61e100daed4c089217fe9ccb518bcee2d1c6458d3ab8c55e763c6a13b029563adfc66fe13830354450caee49049b480ab85b09ce39677a588a7114154c00f49aed7ff0de838cd3772affeff4101783c1670c7a5fcd2fb4977801e8b7062ecf410067bc193c4e8e11a5e9e8254232f17e13805f73d4daf44cff409278390e12815e4860fce98daab617c470646f91ab708ae34c0501b5460fb9e97960d610998d2b35f9eef294d8476c9d8fdda6ca24056f33f2ac8a46c439ced4cc0ef92eb710c17ba07fd51fef1d5a55b1c9f610285cfc8e31facfa6bf61cce34be9792541decb8f907bfffb76bb3e66a2e12e75a79b74f86a2ea8317d3cb5243d57550aab1e76c567f4a9ee76c106aa2261ed178efa5324518493d3fefd34f8f1fa670e28d4f69716be043aef04867466e2b39f8fdb70f09fcc53e15abb21872013eb22b45c2c4ed2ced483a1bc63064b37aa31c4bff107f73cc5ec980f6ba154b07b09bc0f21c113d9dcc59a2df81449dc879321c061d4b8b085ea4ae5b6c23e91762d3c3bf89b5cc7594be1384064a0d42c13aa2d4aa30c5f6b9bef6ccbf18dbd672c5cb5547ab16375a137d572337d0ef8e05a48584ed3804d9e217b7bce1d83a0118553e7d4a92d002136a30e053f7a6a5210a31d19825d8e1264a1d6715389b025ff4bec874ae4739d9198e34beddb645842951b80018e9a11db1bb594919014225d8449f247a1966b9b9f790a4fb3060fc532defc2752741b31143e6407c1202c9e696844492e16c6576fe47eb9b5f06d83c79650e0ccae02375adb883a30462b35cfc46adf843bcf74f7b9844200f380b8c390fa6bdfbe2f25dd0be62e6aae25ec73777e1ba4a4ec2957b125aa9c79dca7d78130bf19b1ea811486682e5ee11a31f42a13b1303638b4978f087193844cd299d5c59561cdb8e8ee2b2ac8ffa6",
|
|
||||||
"aggregatedProverVersion": "test",
|
|
||||||
"aggregatedVerifierIndex": 1,
|
|
||||||
"aggregatedProofPublicInput": "0x0d0ec9112097d93742ccbbfb7099ea929e0d358b7a4242463ce97c7d18f17ae7",
|
|
||||||
"dataHashes": [
|
|
||||||
"0x01f5853fa56ab910be0933f2ee811bbc437500dba4e38acbae17eab00eec9f95",
|
|
||||||
"0x01a142b35ad91719145a4e3bf1d5402e6a73818db67312ade7a73ad5130ac618"
|
|
||||||
],
|
|
||||||
"dataParentHash": "0x7126453ddb4c09537a505a70bae0dd57a3f5daba4522fa1f79b760fb28efb35c",
|
|
||||||
"parentStateRootHash": "0xea09456033a79b5f8b369a95cce74d3dbe34fdd6415bff1a417ff8a8fa0cffd3",
|
|
||||||
"parentAggregationLastBlockTimestamp": 1683335137,
|
|
||||||
"lastFinalizedBlockNumber": 46,
|
|
||||||
"finalTimestamp": 1683355137,
|
|
||||||
"finalBlockNumber": 127,
|
|
||||||
"l1RollingHash": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
||||||
"l1RollingHashMessageNumber": 12,
|
|
||||||
"l2MerkleRoots": [
|
|
||||||
"0x6de197db892fd7d3fe0a389452dae0c5d0520e23d18ad20327546e2189a7e3f1"
|
|
||||||
],
|
|
||||||
"l2MerkleTreesDepth": 5,
|
|
||||||
"l2MessagingBlocksOffsets": "0x00000000000000000000000fffff"
|
|
||||||
}
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,273 +0,0 @@
|
|||||||
import { BytesLike, Transaction, Wallet, ethers } from "ethers";
|
|
||||||
import { commitmentsToVersionedHashes } from "@ethereumjs/util";
|
|
||||||
import * as kzg from "c-kzg";
|
|
||||||
import submissionDataJson from "./blocks-1-46.json";
|
|
||||||
import submissionDataJson2 from "./blocks-47-92.json";
|
|
||||||
import submissionDataJson3 from "./blocks-93-127.json";
|
|
||||||
import aggregateProof1to46 from "./aggregatedProof-1-46.json";
|
|
||||||
import aggregateProof47to127 from "./aggregatedProof-47-127.json";
|
|
||||||
import { DataHexString } from "ethers/lib.commonjs/utils/data";
|
|
||||||
|
|
||||||
type SubmissionData = {
|
|
||||||
parentStateRootHash: string;
|
|
||||||
dataParentHash: string;
|
|
||||||
finalStateRootHash: string;
|
|
||||||
firstBlockInData: bigint;
|
|
||||||
finalBlockInData: bigint;
|
|
||||||
snarkHash: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export function generateSubmissionDataFromJSON(
|
|
||||||
startingBlockNumber: number,
|
|
||||||
endingBlockNumber: number,
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
parsedJSONData: any,
|
|
||||||
): { submissionData: SubmissionData; blob: Uint8Array } {
|
|
||||||
const returnData = {
|
|
||||||
parentStateRootHash: parsedJSONData.parentStateRootHash,
|
|
||||||
dataParentHash: parsedJSONData.parentDataHash,
|
|
||||||
finalStateRootHash: parsedJSONData.finalStateRootHash,
|
|
||||||
firstBlockInData: BigInt(startingBlockNumber),
|
|
||||||
finalBlockInData: BigInt(endingBlockNumber),
|
|
||||||
snarkHash: parsedJSONData.snarkHash,
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
submissionData: returnData,
|
|
||||||
blob: ethers.decodeBase64(parsedJSONData.compressedData),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
export function generateSubmissionCallDataFromJSON(
|
|
||||||
startingBlockNumber: number,
|
|
||||||
endingBlockNumber: number,
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
parsedJSONData: any,
|
|
||||||
): { submissionData: SubmissionData } {
|
|
||||||
const returnData = {
|
|
||||||
parentStateRootHash: parsedJSONData.parentStateRootHash,
|
|
||||||
dataParentHash: parsedJSONData.parentDataHash,
|
|
||||||
finalStateRootHash: parsedJSONData.finalStateRootHash,
|
|
||||||
firstBlockInData: BigInt(startingBlockNumber),
|
|
||||||
finalBlockInData: BigInt(endingBlockNumber),
|
|
||||||
snarkHash: parsedJSONData.snarkHash,
|
|
||||||
compressedData: ethers.hexlify(ethers.decodeBase64(parsedJSONData.compressedData)),
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
submissionData: returnData,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function requireEnv(name: string): string {
|
|
||||||
const envVariable = process.env[name];
|
|
||||||
if (!envVariable) {
|
|
||||||
throw new Error(`Missing ${name} environment variable`);
|
|
||||||
}
|
|
||||||
|
|
||||||
return envVariable;
|
|
||||||
}
|
|
||||||
|
|
||||||
function kzgCommitmentsToVersionedHashes(commitments: Uint8Array[]): string[] {
|
|
||||||
const versionedHashes = commitmentsToVersionedHashes(commitments);
|
|
||||||
return versionedHashes.map((versionedHash) => ethers.hexlify(versionedHash));
|
|
||||||
}
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
const rpcUrl = requireEnv("RPC_URL");
|
|
||||||
const privateKey = requireEnv("PRIVATE_KEY");
|
|
||||||
const destinationAddress = requireEnv("DESTINATION_ADDRESS");
|
|
||||||
|
|
||||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
|
||||||
const wallet = new Wallet(privateKey, provider);
|
|
||||||
|
|
||||||
kzg.loadTrustedSetup(`${__dirname}/../trusted_setup.txt`);
|
|
||||||
|
|
||||||
const { submissionData } = generateSubmissionCallDataFromJSON(1, 46, submissionDataJson);
|
|
||||||
const { submissionData: submissionData2, blob: blob2 } = generateSubmissionDataFromJSON(47, 92, submissionDataJson2);
|
|
||||||
const { submissionData: submissionData3, blob: blob3 } = generateSubmissionDataFromJSON(93, 127, submissionDataJson3);
|
|
||||||
|
|
||||||
const commitments2 = kzg.blobToKzgCommitment(blob2);
|
|
||||||
const commitments3 = kzg.blobToKzgCommitment(blob3);
|
|
||||||
|
|
||||||
const [versionedHashes2, versionedHashes3] = kzgCommitmentsToVersionedHashes([commitments2, commitments3]);
|
|
||||||
|
|
||||||
await submitCalldata(submissionData);
|
|
||||||
|
|
||||||
let encodedCall = encodeCall(submissionData2, [commitments2], submissionDataJson2);
|
|
||||||
await submitBlob(provider, wallet, encodedCall, destinationAddress, [versionedHashes2], blob2);
|
|
||||||
|
|
||||||
encodedCall = encodeCall(submissionData3, [commitments3], submissionDataJson3);
|
|
||||||
await submitBlob(provider, wallet, encodedCall, destinationAddress, [versionedHashes3], blob3);
|
|
||||||
|
|
||||||
await sendProof(aggregateProof1to46);
|
|
||||||
await sendProof(aggregateProof47to127);
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
function encodeCall(submissionData: SubmissionData, commitments: BytesLike[], submissionDataJson: any): DataHexString {
|
|
||||||
const encodedCall = ethers.concat([
|
|
||||||
"0x2d3c12e5",
|
|
||||||
ethers.AbiCoder.defaultAbiCoder().encode(
|
|
||||||
["tuple(bytes32,bytes32,bytes32,uint256,uint256,bytes32)", "uint256", "bytes", "bytes"],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
submissionData.parentStateRootHash,
|
|
||||||
submissionData.dataParentHash,
|
|
||||||
submissionData.finalStateRootHash,
|
|
||||||
submissionData.firstBlockInData,
|
|
||||||
submissionData.finalBlockInData,
|
|
||||||
submissionData.snarkHash,
|
|
||||||
],
|
|
||||||
submissionDataJson.expectedY,
|
|
||||||
commitments[0],
|
|
||||||
submissionDataJson.kzgProofContract,
|
|
||||||
],
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
return encodedCall;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function submitBlob(
|
|
||||||
provider: ethers.JsonRpcProvider,
|
|
||||||
wallet: Wallet,
|
|
||||||
encodedCall: string,
|
|
||||||
destinationAddress: string,
|
|
||||||
versionedHashes: string[],
|
|
||||||
fullblob: Uint8Array,
|
|
||||||
) {
|
|
||||||
const { maxFeePerGas, maxPriorityFeePerGas } = await provider.getFeeData();
|
|
||||||
const nonce = await provider.getTransactionCount(wallet.address);
|
|
||||||
|
|
||||||
console.log("nonce", nonce);
|
|
||||||
const transaction = Transaction.from({
|
|
||||||
data: encodedCall,
|
|
||||||
maxPriorityFeePerGas: maxPriorityFeePerGas!,
|
|
||||||
maxFeePerGas: maxFeePerGas!,
|
|
||||||
to: destinationAddress,
|
|
||||||
chainId: 31648428,
|
|
||||||
type: 3,
|
|
||||||
nonce,
|
|
||||||
value: 0,
|
|
||||||
kzg,
|
|
||||||
blobs: [fullblob],
|
|
||||||
gasLimit: 5_000_000,
|
|
||||||
blobVersionedHashes: versionedHashes,
|
|
||||||
maxFeePerBlobGas: maxFeePerGas!,
|
|
||||||
});
|
|
||||||
|
|
||||||
const tx = await wallet.sendTransaction(transaction);
|
|
||||||
const receipt = await tx.wait();
|
|
||||||
console.log({ transaction: tx, receipt });
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
async function sendProof(proofFile: any) {
|
|
||||||
console.log("proof");
|
|
||||||
|
|
||||||
const rpcUrl = requireEnv("RPC_URL");
|
|
||||||
const privateKey = requireEnv("PRIVATE_KEY");
|
|
||||||
const destinationAddress = requireEnv("DESTINATION_ADDRESS");
|
|
||||||
|
|
||||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
|
||||||
const wallet = new Wallet(privateKey, provider);
|
|
||||||
|
|
||||||
const encodedCall = ethers.concat([
|
|
||||||
"0xd630280f",
|
|
||||||
ethers.AbiCoder.defaultAbiCoder().encode(
|
|
||||||
[
|
|
||||||
"bytes",
|
|
||||||
"uint256",
|
|
||||||
"tuple(bytes32,bytes32[],bytes32,uint256,uint256,uint256,bytes32,uint256,bytes32[],uint256,bytes)",
|
|
||||||
],
|
|
||||||
[
|
|
||||||
proofFile.aggregatedProof,
|
|
||||||
0,
|
|
||||||
[
|
|
||||||
proofFile.parentStateRootHash,
|
|
||||||
proofFile.dataHashes,
|
|
||||||
proofFile.dataParentHash,
|
|
||||||
proofFile.finalBlockNumber,
|
|
||||||
proofFile.parentAggregationLastBlockTimestamp,
|
|
||||||
proofFile.finalTimestamp,
|
|
||||||
proofFile.l1RollingHash,
|
|
||||||
proofFile.l1RollingHashMessageNumber,
|
|
||||||
proofFile.l2MerkleRoots,
|
|
||||||
proofFile.l2MerkleTreesDepth,
|
|
||||||
proofFile.l2MessagingBlocksOffsets,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
const { maxFeePerGas, maxPriorityFeePerGas } = await provider.getFeeData();
|
|
||||||
const nonce = await provider.getTransactionCount(wallet.address);
|
|
||||||
|
|
||||||
const transaction = Transaction.from({
|
|
||||||
data: encodedCall,
|
|
||||||
maxPriorityFeePerGas: maxPriorityFeePerGas!,
|
|
||||||
maxFeePerGas: maxFeePerGas!,
|
|
||||||
to: destinationAddress,
|
|
||||||
chainId: 31648428,
|
|
||||||
nonce,
|
|
||||||
value: 0,
|
|
||||||
gasLimit: 5_000_000,
|
|
||||||
});
|
|
||||||
|
|
||||||
const tx = await wallet.sendTransaction(transaction);
|
|
||||||
const receipt = await tx.wait();
|
|
||||||
console.log({ transaction: tx, receipt });
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
async function submitCalldata(calldata: any) {
|
|
||||||
const rpcUrl = requireEnv("RPC_URL");
|
|
||||||
const privateKey = requireEnv("PRIVATE_KEY");
|
|
||||||
const destinationAddress = requireEnv("DESTINATION_ADDRESS");
|
|
||||||
|
|
||||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
|
||||||
const wallet = new Wallet(privateKey, provider);
|
|
||||||
|
|
||||||
const encodedCall = ethers.concat([
|
|
||||||
"0x7a776315",
|
|
||||||
ethers.AbiCoder.defaultAbiCoder().encode(
|
|
||||||
["tuple(bytes32,bytes32,bytes32,uint256,uint256,bytes32,bytes)"],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
calldata.parentStateRootHash,
|
|
||||||
calldata.dataParentHash,
|
|
||||||
calldata.finalStateRootHash,
|
|
||||||
calldata.firstBlockInData,
|
|
||||||
calldata.finalBlockInData,
|
|
||||||
calldata.snarkHash,
|
|
||||||
calldata.compressedData,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
const { maxFeePerGas, maxPriorityFeePerGas } = await provider.getFeeData();
|
|
||||||
const nonce = await provider.getTransactionCount(wallet.address);
|
|
||||||
|
|
||||||
const transaction = Transaction.from({
|
|
||||||
data: encodedCall,
|
|
||||||
maxPriorityFeePerGas: maxPriorityFeePerGas!,
|
|
||||||
maxFeePerGas: maxFeePerGas!,
|
|
||||||
to: destinationAddress,
|
|
||||||
chainId: 31648428,
|
|
||||||
nonce,
|
|
||||||
value: 0,
|
|
||||||
gasLimit: 5_000_000,
|
|
||||||
});
|
|
||||||
|
|
||||||
const tx = await wallet.sendTransaction(transaction);
|
|
||||||
const receipt = await tx.wait();
|
|
||||||
console.log({ transaction: tx, receipt });
|
|
||||||
}
|
|
||||||
|
|
||||||
main()
|
|
||||||
.then(() => process.exit(0))
|
|
||||||
.catch((error) => {
|
|
||||||
console.error(error);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
{
|
|
||||||
"aggregatedProof": "0x026df7feeb2cc002cc600ffad35c6a913132c6ffd33c8bec6b6eeeab74875e630b02c55b02dcb08b5ca876113df1c2af6f0366eefbdbbe3f0c9eb10f4c50893728f217d93e2f769e16e12764c416c1c5108cdd12d578e6b95a4c0d4b80abbbd91185b4625b4257800302467fc807ef4d195da399947424521ba2ecceda1e900c2c976df8a8cf5bc7d97f4b45c6a1fb3b605b96c7a2b02ad2bd9349abc365aa612ca0e3942ec0c07efa7c974178acf1398bec47cc2697b2ebf405e1aac17d781a24958afd1ab3f237f17f9ba8bf899d55521314a4d35df7aa5540fc8695153a661443713035ebc568ca96dfd721f5ffa60d4520cea6b4629ed05f91961f8ff4ef1802296560d8727b6694d75b0bb85d7d64544ae2f64779f32fc5d58f2cbf106f2210532faf9023dad94af3e2fba94614aa34e7e37da65a2e9e63e48425b3eb3422ce97fdbfdedef32190989b78df2ea927eb6837d62f76dee7ceeac256b84fb21caf936758cc7d56151e1a5e979ca87917ad3f8e754cd31160a866a6d37ef1f807a1c08e4a85d5043d0b8a54b6facc8d0a8ce94d1715b317a9e8e9df9fc98d1b08e6169bd05f61cd5e32735d33e873b50e4c0354c4e0242966f882db2dd5efa325c658e3915899a8665e717d042c903ef5908528274c4295f76bc1189d3ff4a31a55e455a0b4fbe5a79338e400218ae31e90f35913602026c11000d66b37d8db0d0b3c1b365bae5f91f7278759924d7705f22c3c203a34ef135fcaf0d6de647d2a537f51f3d0fdeb4003f015a21a326c9d7fd29aea8db21dc3472506c8abdbab2b48e9d518fc94d9f700ed7cf949270cee7840c3728991439da93264c8abf2a8165dcb5b526966ed033a9b3b009b5bd713c680c4388b556870c8377834dde8221fbf7c4fac229d387d7fac7375790336d0bc0099a3dec3c92058fc9a66f79b1e28481795cafc2f3c5bde4c95d544f2cb18856679bcd82d63aa8c3eb639b9ca6009d057077279a7c66a2f55f30605115991f1afacc0b31df0621b9297e79bee500152db12459361dfee627eb4185d91123a8a1060de6d18b0b27171b78fd1b7ba0cd2d075c12981e3a61dddb8c2b81897b4df1177685da49984307eee4bbc77320b3cb5528bfc4d4d9f2006dd96896a9bef5a41ac570ea1c2180e1f649e3e177523012569019a06c70cb5c110884d85a2f1e7442e301efbe49707c22c98914cad2d0708e7fdb2e12b018fb37970b9b22cdf8553b51538f4ccdd5fcd969aedd9600b23b393745e2871bf1b9f2af7176deb4daa292e44f799dc4a72bf826a1c646f",
|
|
||||||
"aggregatedProverVersion": "test",
|
|
||||||
"aggregatedVerifierIndex": 1,
|
|
||||||
"aggregatedProofPublicInput": "0x1d2b9051238709f6f992a6bce6b5102a7182a6b9db4100ce46a9fe26f92dde78",
|
|
||||||
"dataHashes": [
|
|
||||||
"0x01f5853fa56ab910be0933f2ee811bbc437500dba4e38acbae17eab00eec9f95",
|
|
||||||
"0x01a142b35ad91719145a4e3bf1d5402e6a73818db67312ade7a73ad5130ac618",
|
|
||||||
"0x017b1d49c6c7947f83855cc16063ef19d02369540b97867855427b56cdaea487",
|
|
||||||
"0x012cab32c78df416fe59f8f123e2ded2466a64e201bacddc8396231f335d2088",
|
|
||||||
"0x0159ba31314753be910d2abb9b7aeeafbefd58cc4163e8d3cc6695315960c7c1",
|
|
||||||
"0x017207990658280f269f538918209b2ab0f4e70c4b222aa8067ed327caf3c762"
|
|
||||||
],
|
|
||||||
"dataParentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"parentAggregationFinalShnarf": "0x47452a1b9ebadfe02bdd02f580fa1eba17680d57eec968a591644d05d78ee84f",
|
|
||||||
"finalShnarf": "0x96ed18f2706ace8f30f5535d286087d34d1cc04a1e03b4100e24c209de5dcd6f",
|
|
||||||
"parentStateRootHash": "0x072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd",
|
|
||||||
"parentAggregationLastBlockTimestamp": 1683325137,
|
|
||||||
"lastFinalizedBlockNumber": 0,
|
|
||||||
"finalTimestamp": 1683335137,
|
|
||||||
"finalBlockNumber": 206,
|
|
||||||
"l1RollingHash": "0xdc8e70637c1048e1e0406c4ed6fab51a7489ccb52f37ddd2c135cb1aa18ec697",
|
|
||||||
"l1RollingHashMessageNumber": 1,
|
|
||||||
"l2MerkleRoots": [
|
|
||||||
"0xff0e2ae07c9c972f7ac6ab579a49376381d56f8101b37142cc52a4abef5cfb86"
|
|
||||||
],
|
|
||||||
"l2MerkleTreesDepth": 5,
|
|
||||||
"l2MessagingBlocksOffsets": "0x00000000000000000000000fffff"
|
|
||||||
}
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,443 +0,0 @@
|
|||||||
import { AbiCoder, BytesLike, Transaction, Wallet, ethers } from "ethers";
|
|
||||||
import { commitmentsToVersionedHashes } from "@ethereumjs/util";
|
|
||||||
import * as kzg from "c-kzg";
|
|
||||||
import submissionDataJson1 from "./blocks-1-46.json";
|
|
||||||
import submissionDataJson2 from "./blocks-47-81.json";
|
|
||||||
import submissionDataJson3 from "./blocks-82-114.json";
|
|
||||||
import submissionDataJson4 from "./blocks-115-155.json";
|
|
||||||
import submissionDataJson5 from "./blocks-156-175.json";
|
|
||||||
import submissionDataJson6 from "./blocks-176-206.json";
|
|
||||||
import aggregateProof1to206 from "./aggregatedProof-1-206.json";
|
|
||||||
import { DataHexString } from "ethers/lib.commonjs/utils/data";
|
|
||||||
|
|
||||||
const dataItems = [
|
|
||||||
submissionDataJson1,
|
|
||||||
submissionDataJson2,
|
|
||||||
submissionDataJson3,
|
|
||||||
submissionDataJson4,
|
|
||||||
submissionDataJson5,
|
|
||||||
submissionDataJson6,
|
|
||||||
];
|
|
||||||
|
|
||||||
export function generateKeccak256(types: string[], values: unknown[], packed?: boolean) {
|
|
||||||
return ethers.keccak256(encodeData(types, values, packed));
|
|
||||||
}
|
|
||||||
|
|
||||||
export const encodeData = (types: string[], values: unknown[], packed?: boolean) => {
|
|
||||||
if (packed) {
|
|
||||||
return ethers.solidityPacked(types, values);
|
|
||||||
}
|
|
||||||
return AbiCoder.defaultAbiCoder().encode(types, values);
|
|
||||||
};
|
|
||||||
|
|
||||||
export type SubmissionData = {
|
|
||||||
parentStateRootHash: string;
|
|
||||||
dataParentHash: string;
|
|
||||||
finalStateRootHash: string;
|
|
||||||
firstBlockInData: bigint;
|
|
||||||
finalBlockInData: bigint;
|
|
||||||
snarkHash: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type BlobSubmissionData = {
|
|
||||||
submissionData: SubmissionData;
|
|
||||||
parentSubmissionData: ParentSubmissionData;
|
|
||||||
dataEvaluationClaim: bigint;
|
|
||||||
kzgCommitment: BytesLike;
|
|
||||||
kzgProof: BytesLike;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type ParentSubmissionData = {
|
|
||||||
finalStateRootHash: string;
|
|
||||||
firstBlockInData: bigint;
|
|
||||||
finalBlockInData: bigint;
|
|
||||||
shnarf: string;
|
|
||||||
dataParentHash: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export function generateSubmissionDataFromJSON(
|
|
||||||
startingBlockNumber: number,
|
|
||||||
endingBlockNumber: number,
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
parsedJSONData: any,
|
|
||||||
): { submissionData: SubmissionData; blob: Uint8Array } {
|
|
||||||
const returnData = {
|
|
||||||
parentStateRootHash: parsedJSONData.parentStateRootHash,
|
|
||||||
dataParentHash: parsedJSONData.parentDataHash,
|
|
||||||
finalStateRootHash: parsedJSONData.finalStateRootHash,
|
|
||||||
firstBlockInData: BigInt(startingBlockNumber),
|
|
||||||
finalBlockInData: BigInt(endingBlockNumber),
|
|
||||||
snarkHash: parsedJSONData.snarkHash,
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
submissionData: returnData,
|
|
||||||
blob: ethers.decodeBase64(parsedJSONData.compressedData),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function generateParentSubmissionData(finalStateRootHash: string, parentDataHash: string): ParentSubmissionData {
|
|
||||||
return {
|
|
||||||
finalStateRootHash: finalStateRootHash,
|
|
||||||
firstBlockInData: BigInt(0),
|
|
||||||
finalBlockInData: BigInt(0),
|
|
||||||
shnarf: "0x47452a1b9ebadfe02bdd02f580fa1eba17680d57eec968a591644d05d78ee84f",
|
|
||||||
dataParentHash: parentDataHash,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
export function generateParentSubmissionDataFromJson(parsedJSONData: any): ParentSubmissionData {
|
|
||||||
return {
|
|
||||||
finalStateRootHash: parsedJSONData.finalStateRootHash,
|
|
||||||
firstBlockInData: BigInt(parsedJSONData.conflationOrder.startingBlockNumber),
|
|
||||||
finalBlockInData: BigInt(parsedJSONData.conflationOrder.upperBoundaries.slice(-1)[0]),
|
|
||||||
shnarf: parsedJSONData.expectedShnarf,
|
|
||||||
dataParentHash: parsedJSONData.parentDataHash,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function generateSubmissionCallDataFromJSON(
|
|
||||||
startingBlockNumber: number,
|
|
||||||
endingBlockNumber: number,
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
parsedJSONData: any,
|
|
||||||
): { submissionData: SubmissionData } {
|
|
||||||
const returnData = {
|
|
||||||
parentStateRootHash: parsedJSONData.parentStateRootHash,
|
|
||||||
dataParentHash: parsedJSONData.parentDataHash,
|
|
||||||
finalStateRootHash: parsedJSONData.finalStateRootHash,
|
|
||||||
firstBlockInData: BigInt(startingBlockNumber),
|
|
||||||
finalBlockInData: BigInt(endingBlockNumber),
|
|
||||||
snarkHash: parsedJSONData.snarkHash,
|
|
||||||
compressedData: ethers.hexlify(ethers.decodeBase64(parsedJSONData.compressedData)),
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
submissionData: returnData,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPadded(data: Uint8Array): Uint8Array {
|
|
||||||
const pdata = new Uint8Array(131072).fill(0);
|
|
||||||
pdata.set(data);
|
|
||||||
return pdata;
|
|
||||||
}
|
|
||||||
|
|
||||||
function requireEnv(name: string): string {
|
|
||||||
const envVariable = process.env[name];
|
|
||||||
if (!envVariable) {
|
|
||||||
throw new Error(`Missing ${name} environment variable`);
|
|
||||||
}
|
|
||||||
|
|
||||||
return envVariable;
|
|
||||||
}
|
|
||||||
|
|
||||||
function kzgCommitmentsToVersionedHashes(commitments: Uint8Array[]): string[] {
|
|
||||||
const versionedHashes = commitmentsToVersionedHashes(commitments);
|
|
||||||
return versionedHashes.map((versionedHash) => ethers.hexlify(versionedHash));
|
|
||||||
}
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
const rpcUrl = requireEnv("RPC_URL");
|
|
||||||
const privateKey = requireEnv("PRIVATE_KEY");
|
|
||||||
const destinationAddress = requireEnv("DESTINATION_ADDRESS");
|
|
||||||
|
|
||||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
|
||||||
const wallet = new Wallet(privateKey, provider);
|
|
||||||
|
|
||||||
kzg.loadTrustedSetup(`${__dirname}/../trusted_setup.txt`);
|
|
||||||
|
|
||||||
const parentSubmissionData1 = generateParentSubmissionData(
|
|
||||||
"0x072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd",
|
|
||||||
ethers.ZeroHash,
|
|
||||||
);
|
|
||||||
|
|
||||||
let kzgProofsArray: Uint8Array[] = [];
|
|
||||||
let commitmentsArray: Uint8Array[] = [];
|
|
||||||
let versionedHashesArray: string[] = [];
|
|
||||||
let blobsArray: Uint8Array[] = [];
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
let kzgProofsContractArray: any[] = [];
|
|
||||||
// const parentSubmissionData: ParentSubmissionData[] = [];
|
|
||||||
|
|
||||||
let blobSubmissionData: BlobSubmissionData[] = [];
|
|
||||||
|
|
||||||
let previousSubmissionData = generateParentSubmissionData(
|
|
||||||
"0x072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd",
|
|
||||||
ethers.ZeroHash,
|
|
||||||
);
|
|
||||||
|
|
||||||
const finalSubmissionData = generateParentSubmissionDataFromJson(submissionDataJson6);
|
|
||||||
|
|
||||||
for (let i = 0; i < 3; i++) {
|
|
||||||
const { submissionData, blob } = generateSubmissionDataFromJSON(
|
|
||||||
dataItems[i].conflationOrder.startingBlockNumber,
|
|
||||||
dataItems[i].conflationOrder.upperBoundaries.slice(-1)[0],
|
|
||||||
dataItems[i],
|
|
||||||
);
|
|
||||||
const fullblob = getPadded(blob);
|
|
||||||
const commitment = kzg.blobToKzgCommitment(fullblob);
|
|
||||||
const kzgProof = kzg.computeBlobKzgProof(fullblob, commitment);
|
|
||||||
|
|
||||||
blobsArray.push(fullblob);
|
|
||||||
versionedHashesArray.push(kzgCommitmentsToVersionedHashes([commitment])[0]);
|
|
||||||
commitmentsArray.push(commitment);
|
|
||||||
kzgProofsArray.push(kzgProof);
|
|
||||||
kzgProofsContractArray.push(dataItems[i].kzgProofContract);
|
|
||||||
|
|
||||||
blobSubmissionData.push({
|
|
||||||
submissionData: submissionData,
|
|
||||||
parentSubmissionData: previousSubmissionData,
|
|
||||||
dataEvaluationClaim: BigInt(dataItems[i].expectedY),
|
|
||||||
kzgCommitment: commitment,
|
|
||||||
kzgProof: dataItems[i].kzgProofContract,
|
|
||||||
});
|
|
||||||
|
|
||||||
previousSubmissionData = generateParentSubmissionDataFromJson(dataItems[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
let encodedCall = encodeCall(blobSubmissionData);
|
|
||||||
|
|
||||||
await submitBlob(provider, wallet, encodedCall, destinationAddress, versionedHashesArray, blobsArray);
|
|
||||||
|
|
||||||
blobSubmissionData = [];
|
|
||||||
kzgProofsArray = [];
|
|
||||||
commitmentsArray = [];
|
|
||||||
versionedHashesArray = [];
|
|
||||||
blobsArray = [];
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
kzgProofsContractArray = [];
|
|
||||||
|
|
||||||
for (let i = 3; i < dataItems.length; i++) {
|
|
||||||
const { submissionData, blob } = generateSubmissionDataFromJSON(
|
|
||||||
dataItems[i].conflationOrder.startingBlockNumber,
|
|
||||||
dataItems[i].conflationOrder.upperBoundaries.slice(-1)[0],
|
|
||||||
dataItems[i],
|
|
||||||
);
|
|
||||||
const fullblob = getPadded(blob);
|
|
||||||
const commitment = kzg.blobToKzgCommitment(fullblob);
|
|
||||||
const kzgProof = kzg.computeBlobKzgProof(fullblob, commitment);
|
|
||||||
|
|
||||||
blobsArray.push(fullblob);
|
|
||||||
versionedHashesArray.push(kzgCommitmentsToVersionedHashes([commitment])[0]);
|
|
||||||
commitmentsArray.push(commitment);
|
|
||||||
kzgProofsArray.push(kzgProof);
|
|
||||||
kzgProofsContractArray.push(dataItems[i].kzgProofContract);
|
|
||||||
|
|
||||||
blobSubmissionData.push({
|
|
||||||
submissionData: submissionData,
|
|
||||||
parentSubmissionData: previousSubmissionData,
|
|
||||||
dataEvaluationClaim: BigInt(dataItems[i].expectedY),
|
|
||||||
kzgCommitment: commitment,
|
|
||||||
kzgProof: dataItems[i].kzgProofContract,
|
|
||||||
});
|
|
||||||
|
|
||||||
previousSubmissionData = generateParentSubmissionDataFromJson(dataItems[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
encodedCall = encodeSecondCall(blobSubmissionData);
|
|
||||||
|
|
||||||
await submitBlob(provider, wallet, encodedCall, destinationAddress, versionedHashesArray, blobsArray);
|
|
||||||
|
|
||||||
await sendMessage();
|
|
||||||
|
|
||||||
await sendProof(aggregateProof1to206, parentSubmissionData1, finalSubmissionData);
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
function mapToTuple(blobSubmissionDataItems: BlobSubmissionData[]): any {
|
|
||||||
return blobSubmissionDataItems.map((blobSubmissionData) => [
|
|
||||||
[
|
|
||||||
blobSubmissionData.submissionData.finalStateRootHash,
|
|
||||||
blobSubmissionData.submissionData.firstBlockInData,
|
|
||||||
blobSubmissionData.submissionData.finalBlockInData,
|
|
||||||
blobSubmissionData.submissionData.snarkHash,
|
|
||||||
],
|
|
||||||
blobSubmissionData.dataEvaluationClaim,
|
|
||||||
blobSubmissionData.kzgCommitment,
|
|
||||||
blobSubmissionData.kzgProof,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function encodeCall(submissionData: BlobSubmissionData[]): DataHexString {
|
|
||||||
const encodedCall = ethers.concat([
|
|
||||||
"0x42fbe842",
|
|
||||||
ethers.AbiCoder.defaultAbiCoder().encode(
|
|
||||||
["tuple(tuple(bytes32,uint256,uint256,bytes32),uint256,bytes,bytes)[]", "bytes32", "bytes32"],
|
|
||||||
[mapToTuple(submissionData), submissionData[0].parentSubmissionData.shnarf, dataItems[2].expectedShnarf],
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
return encodedCall;
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
function encodeSecondCall(submissionData: BlobSubmissionData[]): DataHexString {
|
|
||||||
const encodedCall = ethers.concat([
|
|
||||||
"0x42fbe842",
|
|
||||||
ethers.AbiCoder.defaultAbiCoder().encode(
|
|
||||||
["tuple(tuple(bytes32,uint256,uint256,bytes32),uint256,bytes,bytes)[]", "bytes32", "bytes32"],
|
|
||||||
[mapToTuple(submissionData), dataItems[2].expectedShnarf, dataItems[dataItems.length - 1].expectedShnarf],
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
return encodedCall;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function sendMessage() {
|
|
||||||
console.log("sending the message");
|
|
||||||
|
|
||||||
const rpcUrl = requireEnv("RPC_URL");
|
|
||||||
const privateKey = requireEnv("PRIVATE_KEY");
|
|
||||||
const destinationAddress = requireEnv("DESTINATION_ADDRESS");
|
|
||||||
|
|
||||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
|
||||||
const wallet = new Wallet(privateKey, provider);
|
|
||||||
|
|
||||||
const encodedCall = ethers.concat([
|
|
||||||
"0x9f3ce55a",
|
|
||||||
ethers.AbiCoder.defaultAbiCoder().encode(
|
|
||||||
["address", "uint256", "bytes"],
|
|
||||||
["0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC", "50000000000000000", "0x"],
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
const { maxFeePerGas, maxPriorityFeePerGas } = await provider.getFeeData();
|
|
||||||
const nonce = await provider.getTransactionCount(wallet.address);
|
|
||||||
|
|
||||||
const transaction = Transaction.from({
|
|
||||||
data: encodedCall,
|
|
||||||
maxPriorityFeePerGas: maxPriorityFeePerGas!,
|
|
||||||
maxFeePerGas: maxFeePerGas!,
|
|
||||||
to: destinationAddress,
|
|
||||||
chainId: 31648428,
|
|
||||||
nonce,
|
|
||||||
value: 1050000000000000000n,
|
|
||||||
gasLimit: 5_000_000,
|
|
||||||
});
|
|
||||||
|
|
||||||
const tx = await wallet.sendTransaction(transaction);
|
|
||||||
const receipt = await tx.wait();
|
|
||||||
console.log({ transaction: tx, receipt });
|
|
||||||
}
|
|
||||||
|
|
||||||
async function submitBlob(
|
|
||||||
provider: ethers.JsonRpcProvider,
|
|
||||||
wallet: Wallet,
|
|
||||||
encodedCall: string,
|
|
||||||
destinationAddress: string,
|
|
||||||
versionedHashes: string[],
|
|
||||||
fullblobs: Uint8Array[],
|
|
||||||
) {
|
|
||||||
const { maxFeePerGas, maxPriorityFeePerGas } = await provider.getFeeData();
|
|
||||||
const nonce = await provider.getTransactionCount(wallet.address);
|
|
||||||
|
|
||||||
console.log(encodedCall);
|
|
||||||
|
|
||||||
const transaction = Transaction.from({
|
|
||||||
data: encodedCall,
|
|
||||||
maxPriorityFeePerGas: maxPriorityFeePerGas!,
|
|
||||||
maxFeePerGas: maxFeePerGas!,
|
|
||||||
to: destinationAddress,
|
|
||||||
chainId: 31648428,
|
|
||||||
type: 3,
|
|
||||||
nonce,
|
|
||||||
value: 0,
|
|
||||||
kzg,
|
|
||||||
blobs: fullblobs,
|
|
||||||
gasLimit: 5_000_000,
|
|
||||||
blobVersionedHashes: versionedHashes,
|
|
||||||
maxFeePerBlobGas: maxFeePerGas!,
|
|
||||||
});
|
|
||||||
|
|
||||||
const tx = await wallet.sendTransaction(transaction);
|
|
||||||
const receipt = await tx.wait();
|
|
||||||
|
|
||||||
console.log(versionedHashes);
|
|
||||||
console.log("BlobTX Hash: ", tx.hash);
|
|
||||||
console.log(`BlobTX receipt: ${JSON.stringify(receipt, null, 2)}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function sendProof(
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
proofFile: any,
|
|
||||||
submissionData: ParentSubmissionData,
|
|
||||||
finalSubmissionData: ParentSubmissionData,
|
|
||||||
) {
|
|
||||||
console.log("proof");
|
|
||||||
|
|
||||||
const rpcUrl = requireEnv("RPC_URL");
|
|
||||||
const privateKey = requireEnv("PRIVATE_KEY");
|
|
||||||
const destinationAddress = requireEnv("DESTINATION_ADDRESS");
|
|
||||||
|
|
||||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
|
||||||
const wallet = new Wallet(privateKey, provider);
|
|
||||||
|
|
||||||
const finalSubmission = dataItems[dataItems.length - 1];
|
|
||||||
|
|
||||||
const proofData = [
|
|
||||||
proofFile.aggregatedProof,
|
|
||||||
0,
|
|
||||||
[
|
|
||||||
proofFile.parentStateRootHash,
|
|
||||||
submissionData.shnarf,
|
|
||||||
finalSubmissionData.finalBlockInData,
|
|
||||||
[
|
|
||||||
finalSubmission.prevShnarf,
|
|
||||||
finalSubmission.snarkHash,
|
|
||||||
finalSubmission.finalStateRootHash,
|
|
||||||
finalSubmission.expectedX,
|
|
||||||
finalSubmission.expectedY,
|
|
||||||
],
|
|
||||||
proofFile.parentAggregationLastBlockTimestamp,
|
|
||||||
proofFile.finalTimestamp,
|
|
||||||
"0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
proofFile.l1RollingHash,
|
|
||||||
0, // last finalized message number
|
|
||||||
proofFile.l1RollingHashMessageNumber,
|
|
||||||
proofFile.l2MerkleTreesDepth,
|
|
||||||
proofFile.l2MerkleRoots,
|
|
||||||
proofFile.l2MessagingBlocksOffsets,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
console.log(proofData);
|
|
||||||
|
|
||||||
const encodedCall = ethers.concat([
|
|
||||||
"0xabffac32",
|
|
||||||
ethers.AbiCoder.defaultAbiCoder().encode(
|
|
||||||
[
|
|
||||||
"bytes",
|
|
||||||
"uint256",
|
|
||||||
"tuple(bytes32,bytes32,uint256,tuple(bytes32,bytes32,bytes32,bytes32,bytes32),uint256,uint256,bytes32,bytes32,uint256,uint256,uint256,bytes32[],bytes)",
|
|
||||||
],
|
|
||||||
proofData,
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
const { maxFeePerGas, maxPriorityFeePerGas } = await provider.getFeeData();
|
|
||||||
const nonce = await provider.getTransactionCount(wallet.address);
|
|
||||||
|
|
||||||
const transaction = Transaction.from({
|
|
||||||
data: encodedCall,
|
|
||||||
maxPriorityFeePerGas: maxPriorityFeePerGas!,
|
|
||||||
maxFeePerGas: maxFeePerGas!,
|
|
||||||
to: destinationAddress,
|
|
||||||
chainId: 31648428,
|
|
||||||
nonce,
|
|
||||||
value: 0,
|
|
||||||
gasLimit: 5_000_000,
|
|
||||||
});
|
|
||||||
|
|
||||||
const tx = await wallet.sendTransaction(transaction);
|
|
||||||
const receipt = await tx.wait();
|
|
||||||
console.log({ transaction: tx, receipt });
|
|
||||||
}
|
|
||||||
|
|
||||||
main()
|
|
||||||
.then(() => process.exit(0))
|
|
||||||
.catch((error) => {
|
|
||||||
console.error(error);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"aggregatedProof": "0x066df7ab7e98425f6f4420a9f84dc0778f5732a2e6867331d600b4be4ec4d71f2ed2cb00ae9b91d83b9acfdf5b9e99bc09f9330b0045a45c2e0b82174824990f118fda6919cce05f3e742b6d908b19012f19b7fa5a4859c841b0fb4245ef4cab2f917a55d05cf6fcf1e686da1200b414233313b2b83a644cb98839bf2d025ddb0abfffd32a4d9271da6c035bbd29a17b062a16b4552af74e866816e8fb93292b1e9dc02ea9586973ab019af9b518933ef2b43a07dfca130c96de11e3ea6ec76821bf76414ab318a24074c96a2d4f9ea8229b1f95069c9891f8b9630ebb43aa501b1883f214128097bb02d8db95004169206817394c98a2bcc2c16c07a53bda9a0ab02b425bea284f90e19d98c135384b2f53969a2bd6c9a6ed4db23c45c1a2dc009df63e685dd458c285ec91972639b1fe196d835b6b6bfe54dfb25eae69a5b8168a6c341ab0ccae820aa1d7bafb276e30069bd2a5dc12ffba4963dba95d1b8a09cb518f02ed373de651362b5dced18ed89abd7544b465d27abaaed924d54112175dc49c7c09077c059dc6e84055e3aa6012e83863965e84a123995ffc234b481dc0ccfe79c52c033e55ca247db94cd5f9a7f788f29e08757b76e8967341df60142484b43ece53794ece4fbddac059f760dbccb6924f5ad6eb7f2c86c91324ad1fec8d725a7d0a69152239a5107ffc8ad38265dd4b61dc613ff53ba935d052921ec3d15f7662d7155c7bb7a40d531ff813f7d121b158f508d5360524841d20ee08e041228a91088241a542927a74e63c4e60e78f7c93b6bc0da3f2e6a9938b7601476a105dd6e289e769f466eca691aa0ea2e4065fca6106b863eb0d44a62c6827909145988fce252cc48c7fc4e0861a5cd2e1e7af1ecc4d1ffbbb98ef2c6a4e0e07d160a13aa28fe18fc4f88af7283780c0806e1d4edfa6cb1bf1cace3e98610c69c3abf8c70af727fa69d9df7ad77e3f91cb7a1e8f8dfa9be34732bda6133900aac696aa73cd7575bf603a3efc6b4d701690c4565effe660333a721dc850890cc7b562ed0fc7a2796d998f2e9263536bf4f59c43668a767c19fe2a906970dd136ad4c7b96678691270ffa4c68178de6ec6548eca71cdb49eea6a0f9c0b96a82c6ecbb46e4aa32194782a15f372b39e7782986d6729fdfbf7927ec473c32aab092b217b3596081654c172a00cc8010b69a5d0abd27b365022249b9a5205f0582afb1f90670da3e66ce65ab5ecaf0cc810c8f76e9b93cebffc3ad0160afdea4c1cb4fbb0b8203fd43eeaef0d4644af49f751f7e72fdc351ebc5c7c3d229a8092",
|
|
||||||
"aggregatedProverVersion": "test",
|
|
||||||
"aggregatedVerifierIndex": 1,
|
|
||||||
"aggregatedProofPublicInput": "0x0845ce6ad7b96ead3f07532f8c14efca7926d3b8a6b10254f1c4ba65bfb7f247",
|
|
||||||
"dataHashes": [
|
|
||||||
"0x01f5853fa56ab910be0933f2ee811bbc437500dba4e38acbae17eab00eec9f95",
|
|
||||||
"0x01a142b35ad91719145a4e3bf1d5402e6a73818db67312ade7a73ad5130ac618"
|
|
||||||
],
|
|
||||||
"dataParentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"parentStateRootHash": "0x072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd",
|
|
||||||
"parentAggregationLastBlockTimestamp": 1683325137,
|
|
||||||
"lastFinalizedBlockNumber": 0,
|
|
||||||
"finalTimestamp": 1683335137,
|
|
||||||
"finalBlockNumber": 81,
|
|
||||||
"l1RollingHash": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
||||||
"l1RollingHashMessageNumber": 12,
|
|
||||||
"l2MerkleRoots": [
|
|
||||||
"0x6de197db892fd7d3fe0a389452dae0c5d0520e23d18ad20327546e2189a7e3f1"
|
|
||||||
],
|
|
||||||
"l2MerkleTreesDepth": 5,
|
|
||||||
"l2MessagingBlocksOffsets": "0x00000000000000000000000fffff"
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"aggregatedProof": "0x1cbd99a6717d59c1f3d0b401f51837eca8880dba59e06ef6d3d51c7f8b84bf3b0e28362df993991e53093cf0a5bf33524f894518d29f7e3b7662a8760efffb1b24bf4a192ed312058d456656c5e62daeaa5f39d12d5f0356607176cb755825b20c7f5bb8491f456973ecd82b9a89d3624659f123ad992f928b38ea389fe7339200fe3b06f738f976714e7e5076ed5fa5b5016b136ee86495623e06511604a0e92e87d1418e3e7cb378b2517ef518faef4a82e50f68884554f8f5b0f6129502782259d9aaa5de29d64f9ec69bc6010912a38d583df837744febca28bfa0a6a36f1fa62e63efc84520986c9a2cbe74b188c59b9abf1b6db87ea1f342a85883570519f084912710ac88051f00fa087dacb0a64f32ac71f73389f7bebaa138de8be1013d6f79215afeae40e365c316728a19c16c6b4f949d2a5f91881169c1459e430af11d232c48ef074b1f8fc75413bfe586185fd7c3ad46812b374113c02a7e2f3008fd0abb1fc412864bee93af6fce5c13a5aca9c16119d1ff550a775c22ce842380046dcfb7f602f99e123d00c8fc8ae242230b93902940611adf2465faa3ae11baccaa27f958117b817759a24290916be764a6ad53c4b9e7fe8c3cc2c7216d2fa188627bc1a1a9f51086b8734587e82c5e5c712bd67e6a96e2f0a494a7c038002937e32c41ef5f763fc0cc377b56ef2371ff45d1d5f6af8fc1d0a9e09d695c13de57d0d34e961b0c82fb7395ab187c980be2c6ffc2f6cf3bdc06ab0daa67c7034b9850e8af9343962392cb7b0685b3db328e6ad0edc8ea9930167dd4c1fa1c030977b4a996f9441fdf123d22566f066e8689e19133c642cee2946262dd760d1549bca5f966b3982822b3c98b120e26d41f5e313a241d8a0d5a558f7fe712c32b06b94eb5a2b707c134302879964ce9d7c65f4a9d0e1e5a55e49b1b74a52f4c1f4a9d2e57c8665b5a1d44a98eefa8bc85213fd2a4b973f0663c921010a4c800001f52612168d24d80aeced4ac922d8bb7388cc762d76e47ba63a79bc41928ee08fb4c74eeed5d9fcf9d47de8d45d0f8ed96c71453713ce69b7fcaa1aa28a33a2f7f91189c1617c6c852585510a19c6e0902b1f7137e1d93ee97826e6b510a682eb6c8d277cbbf2343979b29355a8427059084a16bfddd83ec04b87b8be56927168f6c57d638f3c87357408ab999cc10dae428ea8d0df307bef18c87fd234c250f8aeb4438cb80f9543b4e74be92fbc170d3e94878e3d154656c53b9122f14f314da523fe7c79e5c50d530107a3b7a97727e25b95bf9c1f68a1e48d7bdfcc27e",
|
|
||||||
"aggregatedProverVersion": "test",
|
|
||||||
"aggregatedVerifierIndex": 1,
|
|
||||||
"aggregatedProofPublicInput": "0x224c02f36233239efd78f5e99a2400bf60950d62c705b204797bd949a29aa993",
|
|
||||||
"dataHashes": [
|
|
||||||
"0x01bdfef0d1ddb163bf8431ea63ad7166bcd69a72a4fa30342138335d7fac96f4",
|
|
||||||
"0x0112b6fcf15707263de267fdc63c78cf9881654e88455b94fb8f9f7623223365"
|
|
||||||
],
|
|
||||||
"dataParentHash": "0x01a142b35ad91719145a4e3bf1d5402e6a73818db67312ade7a73ad5130ac618",
|
|
||||||
"parentStateRootHash": "0xf0f26782f7afb93f926cacb145f55530714f20b1356725e3971dc99e0ef8b591",
|
|
||||||
"parentAggregationLastBlockTimestamp": 1683335137,
|
|
||||||
"lastFinalizedBlockNumber": 81,
|
|
||||||
"finalTimestamp": 1683355137,
|
|
||||||
"finalBlockNumber": 153,
|
|
||||||
"l1RollingHash": "0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
|
||||||
"l1RollingHashMessageNumber": 14,
|
|
||||||
"l2MerkleRoots": [
|
|
||||||
"0xf82d0ea8590489e98ca4279f30bd4b32a4fd62e6574ddc4f606d6496096b3721"
|
|
||||||
],
|
|
||||||
"l2MerkleTreesDepth": 5,
|
|
||||||
"l2MessagingBlocksOffsets": "0x00000000000000000000000fffff"
|
|
||||||
}
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,221 +0,0 @@
|
|||||||
import { BytesLike, Transaction, Wallet, ethers } from "ethers";
|
|
||||||
import { commitmentsToVersionedHashes } from "@ethereumjs/util";
|
|
||||||
import * as kzg from "c-kzg";
|
|
||||||
import submissionDataJson from "./blocks-1-46.json";
|
|
||||||
import submissionDataJson2 from "./blocks-47-81.json";
|
|
||||||
import submissionDataJson3 from "./blocks-82-119.json";
|
|
||||||
import submissionDataJson4 from "./blocks-120-153.json";
|
|
||||||
import aggregateProof1to81 from "./aggregatedProof-1-81.json";
|
|
||||||
import aggregateProof82to153 from "./aggregatedProof-82-153.json";
|
|
||||||
import { DataHexString } from "ethers/lib.commonjs/utils/data";
|
|
||||||
|
|
||||||
type SubmissionData = {
|
|
||||||
parentStateRootHash: string;
|
|
||||||
dataParentHash: string;
|
|
||||||
finalStateRootHash: string;
|
|
||||||
firstBlockInData: bigint;
|
|
||||||
finalBlockInData: bigint;
|
|
||||||
snarkHash: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export function generateSubmissionDataFromJSON(
|
|
||||||
startingBlockNumber: number,
|
|
||||||
endingBlockNumber: number,
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
parsedJSONData: any,
|
|
||||||
): { submissionData: SubmissionData; blob: Uint8Array } {
|
|
||||||
const returnData = {
|
|
||||||
parentStateRootHash: parsedJSONData.parentStateRootHash,
|
|
||||||
dataParentHash: parsedJSONData.parentDataHash,
|
|
||||||
finalStateRootHash: parsedJSONData.finalStateRootHash,
|
|
||||||
firstBlockInData: BigInt(startingBlockNumber),
|
|
||||||
finalBlockInData: BigInt(endingBlockNumber),
|
|
||||||
snarkHash: parsedJSONData.snarkHash,
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
submissionData: returnData,
|
|
||||||
blob: ethers.decodeBase64(parsedJSONData.compressedData),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function requireEnv(name: string): string {
|
|
||||||
const envVariable = process.env[name];
|
|
||||||
if (!envVariable) {
|
|
||||||
throw new Error(`Missing ${name} environment variable`);
|
|
||||||
}
|
|
||||||
|
|
||||||
return envVariable;
|
|
||||||
}
|
|
||||||
|
|
||||||
function kzgCommitmentsToVersionedHashes(commitments: Uint8Array[]): string[] {
|
|
||||||
const versionedHashes = commitmentsToVersionedHashes(commitments);
|
|
||||||
return versionedHashes.map((versionedHash) => ethers.hexlify(versionedHash));
|
|
||||||
}
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
const rpcUrl = requireEnv("RPC_URL");
|
|
||||||
const privateKey = requireEnv("PRIVATE_KEY");
|
|
||||||
const destinationAddress = requireEnv("DESTINATION_ADDRESS");
|
|
||||||
|
|
||||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
|
||||||
const wallet = new Wallet(privateKey, provider);
|
|
||||||
|
|
||||||
kzg.loadTrustedSetup(`${__dirname}/trusted_setup.txt`);
|
|
||||||
|
|
||||||
const { submissionData, blob } = generateSubmissionDataFromJSON(1, 46, submissionDataJson);
|
|
||||||
const { submissionData: submissionData2, blob: blob2 } = generateSubmissionDataFromJSON(47, 81, submissionDataJson2);
|
|
||||||
const { submissionData: submissionData3, blob: blob3 } = generateSubmissionDataFromJSON(82, 119, submissionDataJson3);
|
|
||||||
const { submissionData: submissionData4, blob: blob4 } = generateSubmissionDataFromJSON(
|
|
||||||
120,
|
|
||||||
153,
|
|
||||||
submissionDataJson4,
|
|
||||||
);
|
|
||||||
|
|
||||||
const commitments = kzg.blobToKzgCommitment(blob);
|
|
||||||
const commitments2 = kzg.blobToKzgCommitment(blob2);
|
|
||||||
const commitments3 = kzg.blobToKzgCommitment(blob3);
|
|
||||||
const commitments4 = kzg.blobToKzgCommitment(blob4);
|
|
||||||
|
|
||||||
const [versionedHashes, versionedHashes2, versionedHashes3, versionedHashes4] = kzgCommitmentsToVersionedHashes([
|
|
||||||
commitments,
|
|
||||||
commitments2,
|
|
||||||
commitments3,
|
|
||||||
commitments4,
|
|
||||||
]);
|
|
||||||
|
|
||||||
let encodedCall = encodeCall(submissionData, [commitments], submissionDataJson);
|
|
||||||
await submitBlob(provider, wallet, encodedCall, destinationAddress, [versionedHashes], blob);
|
|
||||||
|
|
||||||
encodedCall = encodeCall(submissionData2, [commitments2], submissionDataJson2);
|
|
||||||
await submitBlob(provider, wallet, encodedCall, destinationAddress, [versionedHashes2], blob2);
|
|
||||||
|
|
||||||
encodedCall = encodeCall(submissionData3, [commitments3], submissionDataJson3);
|
|
||||||
await submitBlob(provider, wallet, encodedCall, destinationAddress, [versionedHashes3], blob3);
|
|
||||||
|
|
||||||
encodedCall = encodeCall(submissionData4, [commitments4], submissionDataJson4);
|
|
||||||
await submitBlob(provider, wallet, encodedCall, destinationAddress, [versionedHashes4], blob4);
|
|
||||||
|
|
||||||
await sendProof(aggregateProof1to81);
|
|
||||||
await sendProof(aggregateProof82to153);
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
function encodeCall(submissionData: SubmissionData, commitments: BytesLike[], submissionDataJson: any): DataHexString {
|
|
||||||
const encodedCall = ethers.concat([
|
|
||||||
"0x2d3c12e5",
|
|
||||||
ethers.AbiCoder.defaultAbiCoder().encode(
|
|
||||||
["tuple(bytes32,bytes32,bytes32,uint256,uint256,bytes32)", "uint256", "bytes", "bytes"],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
submissionData.parentStateRootHash,
|
|
||||||
submissionData.dataParentHash,
|
|
||||||
submissionData.finalStateRootHash,
|
|
||||||
submissionData.firstBlockInData,
|
|
||||||
submissionData.finalBlockInData,
|
|
||||||
submissionData.snarkHash,
|
|
||||||
],
|
|
||||||
submissionDataJson.expectedY,
|
|
||||||
commitments[0],
|
|
||||||
submissionDataJson.kzgProofContract,
|
|
||||||
],
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
return encodedCall;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function submitBlob(
|
|
||||||
provider: ethers.JsonRpcProvider,
|
|
||||||
wallet: Wallet,
|
|
||||||
encodedCall: string,
|
|
||||||
destinationAddress: string,
|
|
||||||
versionedHashes: string[],
|
|
||||||
fullblob: Uint8Array,
|
|
||||||
) {
|
|
||||||
const { maxFeePerGas, maxPriorityFeePerGas } = await provider.getFeeData();
|
|
||||||
const nonce = await provider.getTransactionCount(wallet.address);
|
|
||||||
|
|
||||||
const transaction = Transaction.from({
|
|
||||||
data: encodedCall,
|
|
||||||
maxPriorityFeePerGas: maxPriorityFeePerGas!,
|
|
||||||
maxFeePerGas: maxFeePerGas!,
|
|
||||||
to: destinationAddress,
|
|
||||||
chainId: 31648428,
|
|
||||||
type: 3,
|
|
||||||
nonce,
|
|
||||||
value: 0,
|
|
||||||
gasLimit: 5_000_000,
|
|
||||||
kzg,
|
|
||||||
blobs: [fullblob],
|
|
||||||
blobVersionedHashes: versionedHashes,
|
|
||||||
maxFeePerBlobGas: maxFeePerGas!,
|
|
||||||
});
|
|
||||||
|
|
||||||
const tx = await wallet.sendTransaction(transaction);
|
|
||||||
const receipt = await tx.wait();
|
|
||||||
console.log(receipt);
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
async function sendProof(proofFile: any) {
|
|
||||||
const rpcUrl = requireEnv("RPC_URL");
|
|
||||||
const privateKey = requireEnv("PRIVATE_KEY");
|
|
||||||
const destinationAddress = requireEnv("DESTINATION_ADDRESS");
|
|
||||||
|
|
||||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
|
||||||
const wallet = new Wallet(privateKey, provider);
|
|
||||||
|
|
||||||
const encodedCall = ethers.concat([
|
|
||||||
"0xd630280f",
|
|
||||||
ethers.AbiCoder.defaultAbiCoder().encode(
|
|
||||||
[
|
|
||||||
"bytes",
|
|
||||||
"uint256",
|
|
||||||
"tuple(bytes32,bytes32[],bytes32,uint256,uint256,uint256,bytes32,uint256,bytes32[],uint256,bytes)",
|
|
||||||
],
|
|
||||||
[
|
|
||||||
proofFile.aggregatedProof,
|
|
||||||
0,
|
|
||||||
[
|
|
||||||
proofFile.parentStateRootHash,
|
|
||||||
proofFile.dataHashes,
|
|
||||||
proofFile.dataParentHash,
|
|
||||||
proofFile.finalBlockNumber,
|
|
||||||
proofFile.parentAggregationLastBlockTimestamp,
|
|
||||||
proofFile.finalTimestamp,
|
|
||||||
proofFile.l1RollingHash,
|
|
||||||
proofFile.l1RollingHashMessageNumber,
|
|
||||||
proofFile.l2MerkleRoots,
|
|
||||||
proofFile.l2MerkleTreesDepth,
|
|
||||||
proofFile.l2MessagingBlocksOffsets,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
const { maxFeePerGas, maxPriorityFeePerGas } = await provider.getFeeData();
|
|
||||||
const nonce = await provider.getTransactionCount(wallet.address);
|
|
||||||
|
|
||||||
const transaction = Transaction.from({
|
|
||||||
data: encodedCall,
|
|
||||||
maxPriorityFeePerGas: maxPriorityFeePerGas!,
|
|
||||||
maxFeePerGas: maxFeePerGas!,
|
|
||||||
to: destinationAddress,
|
|
||||||
chainId: 31648428,
|
|
||||||
nonce,
|
|
||||||
value: 0,
|
|
||||||
gasLimit: 5_000_000,
|
|
||||||
});
|
|
||||||
|
|
||||||
const tx = await wallet.sendTransaction(transaction);
|
|
||||||
const receipt = await tx.wait();
|
|
||||||
console.log({ transaction: tx, receipt: receipt });
|
|
||||||
}
|
|
||||||
|
|
||||||
main()
|
|
||||||
.then(() => process.exit(0))
|
|
||||||
.catch((error) => {
|
|
||||||
console.error(error);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
@@ -9,7 +9,7 @@ import { TOKEN_BRIDGE_ROLES } from "contracts/common/constants";
|
|||||||
|
|
||||||
export async function deployTokenBridge(messageServiceAddress: string, verbose = false) {
|
export async function deployTokenBridge(messageServiceAddress: string, verbose = false) {
|
||||||
const [owner] = await ethers.getSigners();
|
const [owner] = await ethers.getSigners();
|
||||||
const chainIds = [SupportedChainIds.GOERLI, SupportedChainIds.LINEA_TESTNET];
|
const chainIds = [SupportedChainIds.SEPOLIA, SupportedChainIds.LINEA_TESTNET];
|
||||||
|
|
||||||
const roleAddresses = generateRoleAssignments(TOKEN_BRIDGE_ROLES, owner.address, []);
|
const roleAddresses = generateRoleAssignments(TOKEN_BRIDGE_ROLES, owner.address, []);
|
||||||
|
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ describe("L1MessageService", () => {
|
|||||||
|
|
||||||
before(async () => {
|
before(async () => {
|
||||||
[admin, pauser, limitSetter, notAuthorizedAccount, postmanAddress, l2Sender] = await ethers.getSigners();
|
[admin, pauser, limitSetter, notAuthorizedAccount, postmanAddress, l2Sender] = await ethers.getSigners();
|
||||||
|
// TODO adjust the tests to dynamically use whatever nonce is set for the merkle proof
|
||||||
await setNonce(admin.address, 1);
|
await setNonce(admin.address, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,109 +0,0 @@
|
|||||||
import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers";
|
|
||||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
|
||||||
import { expect } from "chai";
|
|
||||||
import { ethers } from "hardhat";
|
|
||||||
import { TestLineaRollup, LineaRollupInit__factory } from "../typechain-types";
|
|
||||||
import {
|
|
||||||
GENESIS_L2_TIMESTAMP,
|
|
||||||
INITIALIZED_ALREADY_MESSAGE,
|
|
||||||
INITIAL_WITHDRAW_LIMIT,
|
|
||||||
LINEA_ROLLUP_INITIALIZE_SIGNATURE,
|
|
||||||
ONE_DAY_IN_SECONDS,
|
|
||||||
OPERATOR_ROLE,
|
|
||||||
pauseTypeRoles,
|
|
||||||
unpauseTypeRoles,
|
|
||||||
} from "./common/constants";
|
|
||||||
import { deployUpgradableFromFactory } from "./common/deployment";
|
|
||||||
import { expectRevertWithReason, generateRandomBytes } from "./common/helpers";
|
|
||||||
import { generateRoleAssignments } from "contracts/common/helpers";
|
|
||||||
import { LINEA_ROLLUP_ROLES } from "contracts/common/constants";
|
|
||||||
|
|
||||||
describe("LineaRollup Init contract", () => {
|
|
||||||
let LineaRollup: TestLineaRollup;
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
||||||
let admin: SignerWithAddress;
|
|
||||||
let verifier: string;
|
|
||||||
let securityCouncil: SignerWithAddress;
|
|
||||||
let operator: SignerWithAddress;
|
|
||||||
|
|
||||||
const multiCallAddress = "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
||||||
|
|
||||||
const parentStateRootHash = generateRandomBytes(32);
|
|
||||||
|
|
||||||
const firstBlockNumber = 199;
|
|
||||||
|
|
||||||
async function deployLineaRollupFixture() {
|
|
||||||
const PlonkVerifierFactory = await ethers.getContractFactory("TestPlonkVerifierForDataAggregation");
|
|
||||||
const plonkVerifier = await PlonkVerifierFactory.deploy();
|
|
||||||
await plonkVerifier.waitForDeployment();
|
|
||||||
|
|
||||||
verifier = await plonkVerifier.getAddress();
|
|
||||||
|
|
||||||
const genesisData = {
|
|
||||||
initialStateRootHash: parentStateRootHash,
|
|
||||||
initialL2BlockNumber: firstBlockNumber - 1,
|
|
||||||
genesisTimestamp: GENESIS_L2_TIMESTAMP,
|
|
||||||
defaultVerifier: verifier,
|
|
||||||
rateLimitPeriodInSeconds: ONE_DAY_IN_SECONDS,
|
|
||||||
rateLimitAmountInWei: INITIAL_WITHDRAW_LIMIT,
|
|
||||||
roleAddresses: generateRoleAssignments(LINEA_ROLLUP_ROLES, securityCouncil.address, [
|
|
||||||
{ role: OPERATOR_ROLE, addresses: [operator.address] },
|
|
||||||
]),
|
|
||||||
pauseTypeRoles: pauseTypeRoles,
|
|
||||||
unpauseTypeRoles: unpauseTypeRoles,
|
|
||||||
fallbackOperator: multiCallAddress,
|
|
||||||
defaultAdmin: securityCouncil.address,
|
|
||||||
};
|
|
||||||
|
|
||||||
const LineaRollup = (await deployUpgradableFromFactory("TestLineaRollup", [genesisData], {
|
|
||||||
initializer: LINEA_ROLLUP_INITIALIZE_SIGNATURE,
|
|
||||||
})) as unknown as TestLineaRollup;
|
|
||||||
|
|
||||||
return { LineaRollup };
|
|
||||||
}
|
|
||||||
|
|
||||||
before(async () => {
|
|
||||||
[admin, securityCouncil, operator] = await ethers.getSigners();
|
|
||||||
});
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
const contracts = await loadFixture(deployLineaRollupFixture);
|
|
||||||
LineaRollup = contracts.LineaRollup;
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("Re-initialisation", () => {
|
|
||||||
LineaRollupInit__factory.createInterface();
|
|
||||||
|
|
||||||
it("Should set the initial block number", async () => {
|
|
||||||
const l2block = 12121n;
|
|
||||||
const l2BlockNumber = await LineaRollup.currentL2BlockNumber();
|
|
||||||
const lineaRollupContract = await deployUpgradableFromFactory("LineaRollupInit", [l2block, parentStateRootHash], {
|
|
||||||
initializer: "initializeV2(uint256,bytes32)",
|
|
||||||
unsafeAllow: ["constructor"],
|
|
||||||
});
|
|
||||||
const currentL2BlockNumber = await lineaRollupContract.currentL2BlockNumber();
|
|
||||||
|
|
||||||
expect(currentL2BlockNumber).to.be.equal(l2block);
|
|
||||||
expect(currentL2BlockNumber).to.not.be.equal(l2BlockNumber);
|
|
||||||
expect(await LineaRollup.periodInSeconds()).to.be.equal(ONE_DAY_IN_SECONDS);
|
|
||||||
expect(lineaRollupContract.stateRootHashes(l2block)).to.not.be.equal(
|
|
||||||
LineaRollup.stateRootHashes(parentStateRootHash),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("Cannot initialize twice", async () => {
|
|
||||||
const l2block = 12121n;
|
|
||||||
const l2BlockNumber = await LineaRollup.currentL2BlockNumber();
|
|
||||||
const lineaRollupContract = await deployUpgradableFromFactory("LineaRollupInit", [l2block, parentStateRootHash], {
|
|
||||||
initializer: "initializeV2(uint256,bytes32)",
|
|
||||||
unsafeAllow: ["constructor"],
|
|
||||||
});
|
|
||||||
|
|
||||||
await expectRevertWithReason(
|
|
||||||
lineaRollupContract.initializeV2(l2BlockNumber, parentStateRootHash),
|
|
||||||
INITIALIZED_ALREADY_MESSAGE,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,192 +0,0 @@
|
|||||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
|
||||||
import fs from "fs";
|
|
||||||
import { ethers } from "hardhat";
|
|
||||||
import path from "path";
|
|
||||||
import { TestLineaRollup } from "../typechain-types";
|
|
||||||
import {
|
|
||||||
GENESIS_L2_TIMESTAMP,
|
|
||||||
HASH_ZERO,
|
|
||||||
INITIAL_WITHDRAW_LIMIT,
|
|
||||||
ONE_DAY_IN_SECONDS,
|
|
||||||
TEST_PUBLIC_VERIFIER_INDEX,
|
|
||||||
} from "./common/constants";
|
|
||||||
import { deployUpgradableFromFactory } from "./common/deployment";
|
|
||||||
import { generateFinalizationDataFromJSON, generateSubmissionDataFromJSON } from "./common/helpers";
|
|
||||||
|
|
||||||
// This stores initialization data for the smart-contract
|
|
||||||
import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers";
|
|
||||||
import INITIALIZATION_DATA from "./testData/integrationWithProver/rolling-hash-history.json";
|
|
||||||
|
|
||||||
const submissionsDirectory = `${__dirname}/testData/integrationWithProver/blobSubmissions`;
|
|
||||||
const finalizationDirectory = `${__dirname}/../../testdata/prover/prover-aggregation/responses`;
|
|
||||||
|
|
||||||
function scanAndParseDir(directory: string): {
|
|
||||||
start: number;
|
|
||||||
stop: number;
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
parsed: any;
|
|
||||||
}[] {
|
|
||||||
const entries = fs.readdirSync(directory);
|
|
||||||
const parsedList = [];
|
|
||||||
|
|
||||||
for (const entry of entries) {
|
|
||||||
const filepath = path.join(directory, entry);
|
|
||||||
const dataTxt = fs.readFileSync(filepath, "utf-8");
|
|
||||||
const parsed = JSON.parse(dataTxt);
|
|
||||||
const blockRange = entry.split("-", 2);
|
|
||||||
parsedList.push({
|
|
||||||
start: parseInt(blockRange[0]),
|
|
||||||
stop: parseInt(blockRange[1]),
|
|
||||||
parsed: parsed,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return parsedList;
|
|
||||||
}
|
|
||||||
|
|
||||||
describe("Linea Rollup contract", () => {
|
|
||||||
let lineaRollup: TestLineaRollup;
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
||||||
let admin: SignerWithAddress;
|
|
||||||
let verifier: string;
|
|
||||||
let securityCouncil: SignerWithAddress;
|
|
||||||
let operator: SignerWithAddress;
|
|
||||||
|
|
||||||
const multiCallAddress = "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
||||||
|
|
||||||
async function deployLineaRollupFixture() {
|
|
||||||
const PlonkVerifierFactory = await ethers.getContractFactory("TestPlonkVerifierForDataAggregation");
|
|
||||||
const plonkVerifier = await PlonkVerifierFactory.deploy();
|
|
||||||
await plonkVerifier.waitForDeployment();
|
|
||||||
|
|
||||||
verifier = await plonkVerifier.getAddress();
|
|
||||||
|
|
||||||
const lineaRollup = (await deployUpgradableFromFactory(
|
|
||||||
"TestLineaRollup",
|
|
||||||
[
|
|
||||||
INITIALIZATION_DATA.initialParentStateRootHash,
|
|
||||||
INITIALIZATION_DATA.initialFinalizedBlock,
|
|
||||||
verifier,
|
|
||||||
securityCouncil.address,
|
|
||||||
[operator.address],
|
|
||||||
ONE_DAY_IN_SECONDS,
|
|
||||||
INITIAL_WITHDRAW_LIMIT,
|
|
||||||
GENESIS_L2_TIMESTAMP,
|
|
||||||
multiCallAddress,
|
|
||||||
],
|
|
||||||
{
|
|
||||||
initializer: "initialize(bytes32,uint256,address,address,address[],uint256,uint256,uint256,address)",
|
|
||||||
unsafeAllow: ["constructor"],
|
|
||||||
},
|
|
||||||
)) as unknown as TestLineaRollup;
|
|
||||||
|
|
||||||
return lineaRollup;
|
|
||||||
}
|
|
||||||
|
|
||||||
before(async () => {
|
|
||||||
[admin, securityCouncil, operator] = await ethers.getSigners();
|
|
||||||
});
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
lineaRollup = await loadFixture(deployLineaRollupFixture);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("Finalizing with the data generated from the prover's integration tests", () => {
|
|
||||||
beforeEach(async () => {
|
|
||||||
await lineaRollup.setupParentDataShnarf(
|
|
||||||
INITIALIZATION_DATA.initialParentDataHash,
|
|
||||||
INITIALIZATION_DATA.initialShnarf,
|
|
||||||
);
|
|
||||||
|
|
||||||
await lineaRollup.setupParentFinalizedStateRoot(
|
|
||||||
INITIALIZATION_DATA.initialParentDataHash,
|
|
||||||
INITIALIZATION_DATA.initialParentStateRootHash,
|
|
||||||
);
|
|
||||||
|
|
||||||
for (const event of INITIALIZATION_DATA.rollingHashHistory) {
|
|
||||||
await lineaRollup.setRollingHash(event.messageNumber, event.rollingHash);
|
|
||||||
}
|
|
||||||
await lineaRollup.setLastTimeStamp(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
//skipped as discussed with Alex
|
|
||||||
it.skip(
|
|
||||||
"Should successfully finalize with previous submission data and data submitted in finalization",
|
|
||||||
async () => {
|
|
||||||
const submissionsJSON = scanAndParseDir(submissionsDirectory);
|
|
||||||
const finalizationsJSON = scanAndParseDir(finalizationDirectory);
|
|
||||||
|
|
||||||
let index = 0;
|
|
||||||
for (const submission of submissionsJSON) {
|
|
||||||
const submissionContractData = generateSubmissionDataFromJSON(
|
|
||||||
submission.start,
|
|
||||||
submission.stop,
|
|
||||||
submission.parsed,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (index == 0) {
|
|
||||||
// bypass first submission which is the expected behavior
|
|
||||||
submissionContractData.dataParentHash = HASH_ZERO;
|
|
||||||
submissionContractData.parentStateRootHash = HASH_ZERO;
|
|
||||||
}
|
|
||||||
|
|
||||||
index++;
|
|
||||||
|
|
||||||
// console.log("sending submission", submission.start, submission.stop);
|
|
||||||
// NB: we are only interested in the transaction passing. That's why we
|
|
||||||
// don't bother checking the emitted events. Also, the events are
|
|
||||||
// tested in other separate tests.
|
|
||||||
await lineaRollup.connect(operator).submitData(submissionContractData, "0x", { gasLimit: 30_000_000 });
|
|
||||||
}
|
|
||||||
|
|
||||||
index = 0;
|
|
||||||
|
|
||||||
for (const finalization of finalizationsJSON) {
|
|
||||||
const finalizationData = generateFinalizationDataFromJSON(finalization.parsed);
|
|
||||||
if (index == 0) {
|
|
||||||
finalizationData.dataParentHash = HASH_ZERO;
|
|
||||||
}
|
|
||||||
|
|
||||||
index++;
|
|
||||||
// console.log("sending finalization", finalization.start, finalization.stop);
|
|
||||||
// NB: we are only interested in the transaction passing. That's why we
|
|
||||||
// don't bother checking the emitted events. Also, the events are
|
|
||||||
// tested in other separate tests.
|
|
||||||
await lineaRollup
|
|
||||||
.connect(operator)
|
|
||||||
.finalizeCompressedBlocksWithProof(
|
|
||||||
finalizationData.aggregatedProof,
|
|
||||||
TEST_PUBLIC_VERIFIER_INDEX,
|
|
||||||
finalizationData,
|
|
||||||
{
|
|
||||||
gasLimit: 30_000_000,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const finalization of finalizationsJSON) {
|
|
||||||
const finalizationData = generateFinalizationDataFromJSON(finalization.parsed);
|
|
||||||
// console.log("sending finalization", finalization.start, finalization.stop);
|
|
||||||
|
|
||||||
// NB: we are only interested in the transaction passing. That's why we
|
|
||||||
// don't bother checking the emitted events. Also, the events are
|
|
||||||
// tested in other separate tests.
|
|
||||||
await lineaRollup
|
|
||||||
.connect(operator)
|
|
||||||
.finalizeCompressedBlocksWithProof(
|
|
||||||
finalizationData.aggregatedProof,
|
|
||||||
TEST_PUBLIC_VERIFIER_INDEX,
|
|
||||||
finalizationData,
|
|
||||||
{
|
|
||||||
gasLimit: 30_000_000,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
)
|
|
||||||
// The test has an extended timeout period. Without that, it will fail on
|
|
||||||
// the CI. This corresponds to 50sec as the timeout is given in ms.
|
|
||||||
.timeout(50_000);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -2,7 +2,7 @@ import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers";
|
|||||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { ethers } from "hardhat";
|
import { ethers } from "hardhat";
|
||||||
import { TestPauseManager } from "../typechain-types";
|
import { TestPauseManager } from "../../typechain-types";
|
||||||
import {
|
import {
|
||||||
DEFAULT_ADMIN_ROLE,
|
DEFAULT_ADMIN_ROLE,
|
||||||
GENERAL_PAUSE_TYPE,
|
GENERAL_PAUSE_TYPE,
|
||||||
@@ -24,9 +24,9 @@ import {
|
|||||||
FINALIZATION_PAUSE_TYPE,
|
FINALIZATION_PAUSE_TYPE,
|
||||||
pauseTypeRoles,
|
pauseTypeRoles,
|
||||||
unpauseTypeRoles,
|
unpauseTypeRoles,
|
||||||
} from "./common/constants";
|
} from "../common/constants";
|
||||||
import { deployUpgradableFromFactory } from "./common/deployment";
|
import { deployUpgradableFromFactory } from "../common/deployment";
|
||||||
import { buildAccessErrorMessage, expectEvent } from "./common/helpers";
|
import { buildAccessErrorMessage, expectEvent } from "../common/helpers";
|
||||||
|
|
||||||
async function deployTestPauseManagerFixture(): Promise<TestPauseManager> {
|
async function deployTestPauseManagerFixture(): Promise<TestPauseManager> {
|
||||||
return deployUpgradableFromFactory("TestPauseManager", [
|
return deployUpgradableFromFactory("TestPauseManager", [
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { ethers } from "hardhat";
|
import { ethers } from "hardhat";
|
||||||
import { Mimc, SparseMerkleProof } from "../typechain-types";
|
import { Mimc, SparseMerkleProof } from "../../typechain-types";
|
||||||
import merkleProofTestData from "./testData/merkle-proof-data.json";
|
import merkleProofTestData from "../testData/merkle-proof-data.json";
|
||||||
import { deployFromFactory } from "./common/deployment";
|
import { deployFromFactory } from "../common/deployment";
|
||||||
import { expectRevertWithCustomError } from "./common/helpers";
|
import { expectRevertWithCustomError } from "../common/helpers";
|
||||||
|
|
||||||
describe("SparseMerkleProof", () => {
|
describe("SparseMerkleProof", () => {
|
||||||
let sparseMerkleProof: SparseMerkleProof;
|
let sparseMerkleProof: SparseMerkleProof;
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { TestUtils } from "../typechain-types";
|
import { TestUtils } from "../../typechain-types";
|
||||||
import { deployFromFactory } from "./common/deployment";
|
import { deployFromFactory } from "../common/deployment";
|
||||||
import { generateKeccak256, generateRandomBytes } from "./common/helpers";
|
import { generateKeccak256, generateRandomBytes } from "../common/helpers";
|
||||||
|
|
||||||
describe("Utils Library", () => {
|
describe("Utils Library", () => {
|
||||||
let contract: TestUtils;
|
let contract: TestUtils;
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { ethers } from "hardhat";
|
import { ethers } from "hardhat";
|
||||||
import { Mimc } from "../typechain-types";
|
import { Mimc } from "../../typechain-types";
|
||||||
import mimcTestData from "./testData/mimc-test-data.json";
|
import mimcTestData from "../testData/mimc-test-data.json";
|
||||||
import { deployFromFactory } from "./common/deployment";
|
import { deployFromFactory } from "../common/deployment";
|
||||||
import { expectRevertWithCustomError } from "./common/helpers";
|
import { expectRevertWithCustomError } from "../common/helpers";
|
||||||
|
|
||||||
describe("Mimc", () => {
|
describe("Mimc", () => {
|
||||||
let mimc: Mimc;
|
let mimc: Mimc;
|
||||||
@@ -2,7 +2,7 @@ import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers";
|
|||||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { ethers } from "hardhat";
|
import { ethers } from "hardhat";
|
||||||
import { TestL2MessageService, TestMessageServiceBase } from "../typechain-types";
|
import { TestL2MessageService, TestMessageServiceBase } from "../../typechain-types";
|
||||||
import {
|
import {
|
||||||
INITIALIZED_ERROR_MESSAGE,
|
INITIALIZED_ERROR_MESSAGE,
|
||||||
INITIAL_WITHDRAW_LIMIT,
|
INITIAL_WITHDRAW_LIMIT,
|
||||||
@@ -10,9 +10,9 @@ import {
|
|||||||
ONE_DAY_IN_SECONDS,
|
ONE_DAY_IN_SECONDS,
|
||||||
pauseTypeRoles,
|
pauseTypeRoles,
|
||||||
unpauseTypeRoles,
|
unpauseTypeRoles,
|
||||||
} from "./common/constants";
|
} from "../common/constants";
|
||||||
import { deployUpgradableFromFactory } from "./common/deployment";
|
import { deployUpgradableFromFactory } from "../common/deployment";
|
||||||
import { expectEvent, expectRevertWithCustomError, expectRevertWithReason } from "./common/helpers";
|
import { expectEvent, expectRevertWithCustomError, expectRevertWithReason } from "../common/helpers";
|
||||||
import { generateRoleAssignments } from "contracts/common/helpers";
|
import { generateRoleAssignments } from "contracts/common/helpers";
|
||||||
import { L2_MESSAGE_SERVICE_ROLES } from "contracts/common/constants";
|
import { L2_MESSAGE_SERVICE_ROLES } from "contracts/common/constants";
|
||||||
|
|
||||||
@@ -2,7 +2,7 @@ import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers";
|
|||||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { ethers } from "hardhat";
|
import { ethers } from "hardhat";
|
||||||
import { TestL2MessageManager } from "../typechain-types";
|
import { TestL2MessageManager } from "../../../typechain-types";
|
||||||
import {
|
import {
|
||||||
DEFAULT_ADMIN_ROLE,
|
DEFAULT_ADMIN_ROLE,
|
||||||
GENERAL_PAUSE_TYPE,
|
GENERAL_PAUSE_TYPE,
|
||||||
@@ -10,8 +10,8 @@ import {
|
|||||||
L1_L2_MESSAGE_SETTER_ROLE,
|
L1_L2_MESSAGE_SETTER_ROLE,
|
||||||
pauseTypeRoles,
|
pauseTypeRoles,
|
||||||
unpauseTypeRoles,
|
unpauseTypeRoles,
|
||||||
} from "./common/constants";
|
} from "../../common/constants";
|
||||||
import { deployUpgradableFromFactory } from "./common/deployment";
|
import { deployUpgradableFromFactory } from "../../common/deployment";
|
||||||
import {
|
import {
|
||||||
buildAccessErrorMessage,
|
buildAccessErrorMessage,
|
||||||
calculateRollingHashFromCollection,
|
calculateRollingHashFromCollection,
|
||||||
@@ -20,7 +20,7 @@ import {
|
|||||||
expectRevertWithReason,
|
expectRevertWithReason,
|
||||||
generateKeccak256Hash,
|
generateKeccak256Hash,
|
||||||
generateNKeccak256Hashes,
|
generateNKeccak256Hashes,
|
||||||
} from "./common/helpers";
|
} from "../../common/helpers";
|
||||||
|
|
||||||
describe("L2MessageManager", () => {
|
describe("L2MessageManager", () => {
|
||||||
let l2MessageManager: TestL2MessageManager;
|
let l2MessageManager: TestL2MessageManager;
|
||||||
@@ -2,7 +2,7 @@ import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers";
|
|||||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { ethers, upgrades } from "hardhat";
|
import { ethers, upgrades } from "hardhat";
|
||||||
import { TestL2MessageService, TestReceivingContract } from "../typechain-types";
|
import { TestL2MessageService, TestReceivingContract } from "../../../typechain-types";
|
||||||
import {
|
import {
|
||||||
ADDRESS_ZERO,
|
ADDRESS_ZERO,
|
||||||
BLOCK_COINBASE,
|
BLOCK_COINBASE,
|
||||||
@@ -26,8 +26,8 @@ import {
|
|||||||
UNPAUSE_ALL_ROLE,
|
UNPAUSE_ALL_ROLE,
|
||||||
RATE_LIMIT_SETTER_ROLE,
|
RATE_LIMIT_SETTER_ROLE,
|
||||||
USED_RATE_LIMIT_RESETTER_ROLE,
|
USED_RATE_LIMIT_RESETTER_ROLE,
|
||||||
} from "./common/constants";
|
} from "../../common/constants";
|
||||||
import { deployUpgradableFromFactory } from "./common/deployment";
|
import { deployUpgradableFromFactory } from "../../common/deployment";
|
||||||
import {
|
import {
|
||||||
buildAccessErrorMessage,
|
buildAccessErrorMessage,
|
||||||
calculateRollingHash,
|
calculateRollingHash,
|
||||||
@@ -39,9 +39,9 @@ import {
|
|||||||
expectRevertWithReason,
|
expectRevertWithReason,
|
||||||
generateKeccak256,
|
generateKeccak256,
|
||||||
generateKeccak256Hash,
|
generateKeccak256Hash,
|
||||||
} from "./common/helpers";
|
} from "../../common/helpers";
|
||||||
import { ZeroAddress } from "ethers";
|
import { ZeroAddress } from "ethers";
|
||||||
import { generateRoleAssignments } from "../common/helpers";
|
import { generateRoleAssignments } from "../../../common/helpers";
|
||||||
import {
|
import {
|
||||||
L2_MESSAGE_SERVICE_PAUSE_TYPES_ROLES,
|
L2_MESSAGE_SERVICE_PAUSE_TYPES_ROLES,
|
||||||
L2_MESSAGE_SERVICE_ROLES,
|
L2_MESSAGE_SERVICE_ROLES,
|
||||||
@@ -50,7 +50,7 @@ import {
|
|||||||
PAUSE_L2_L1_ROLE,
|
PAUSE_L2_L1_ROLE,
|
||||||
UNPAUSE_L1_L2_ROLE,
|
UNPAUSE_L1_L2_ROLE,
|
||||||
UNPAUSE_L2_L1_ROLE,
|
UNPAUSE_L2_L1_ROLE,
|
||||||
} from "../common/constants";
|
} from "../../../common/constants";
|
||||||
|
|
||||||
describe("L2MessageService", () => {
|
describe("L2MessageService", () => {
|
||||||
let l2MessageService: TestL2MessageService;
|
let l2MessageService: TestL2MessageService;
|
||||||
@@ -2,21 +2,21 @@ import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers";
|
|||||||
import { loadFixture, time } from "@nomicfoundation/hardhat-network-helpers";
|
import { loadFixture, time } from "@nomicfoundation/hardhat-network-helpers";
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { ethers, upgrades } from "hardhat";
|
import { ethers, upgrades } from "hardhat";
|
||||||
import { TestRateLimiter } from "../typechain-types";
|
import { TestRateLimiter } from "../../../typechain-types";
|
||||||
import {
|
import {
|
||||||
DEFAULT_ADMIN_ROLE,
|
DEFAULT_ADMIN_ROLE,
|
||||||
INITIALIZED_ERROR_MESSAGE,
|
INITIALIZED_ERROR_MESSAGE,
|
||||||
ONE_DAY_IN_SECONDS,
|
ONE_DAY_IN_SECONDS,
|
||||||
RATE_LIMIT_SETTER_ROLE,
|
RATE_LIMIT_SETTER_ROLE,
|
||||||
USED_RATE_LIMIT_RESETTER_ROLE,
|
USED_RATE_LIMIT_RESETTER_ROLE,
|
||||||
} from "./common/constants";
|
} from "../../common/constants";
|
||||||
import { deployUpgradableFromFactory } from "./common/deployment";
|
import { deployUpgradableFromFactory } from "../../common/deployment";
|
||||||
import {
|
import {
|
||||||
buildAccessErrorMessage,
|
buildAccessErrorMessage,
|
||||||
expectEvent,
|
expectEvent,
|
||||||
expectRevertWithCustomError,
|
expectRevertWithCustomError,
|
||||||
expectRevertWithReason,
|
expectRevertWithReason,
|
||||||
} from "./common/helpers";
|
} from "../../common/helpers";
|
||||||
|
|
||||||
describe("Rate limiter", () => {
|
describe("Rate limiter", () => {
|
||||||
let testRateLimiter: TestRateLimiter;
|
let testRateLimiter: TestRateLimiter;
|
||||||
@@ -2,9 +2,9 @@ import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers";
|
|||||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { ethers } from "hardhat";
|
import { ethers } from "hardhat";
|
||||||
import { TimeLock } from "../typechain-types";
|
import { TimeLock } from "../../../typechain-types";
|
||||||
import { CANCELLER_ROLE, EXECUTOR_ROLE, PROPOSER_ROLE, TIMELOCK_ADMIN_ROLE } from "./common/constants";
|
import { CANCELLER_ROLE, EXECUTOR_ROLE, PROPOSER_ROLE, TIMELOCK_ADMIN_ROLE } from "../../common/constants";
|
||||||
import { deployFromFactory } from "./common/deployment";
|
import { deployFromFactory } from "../../common/deployment";
|
||||||
|
|
||||||
describe("Timelock", () => {
|
describe("Timelock", () => {
|
||||||
let contract: TimeLock;
|
let contract: TimeLock;
|
||||||
@@ -2,9 +2,9 @@ import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers";
|
|||||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { ethers } from "hardhat";
|
import { ethers } from "hardhat";
|
||||||
import { LineaSurgeXP, TestLineaSurgeXP } from "../typechain-types";
|
import { LineaSurgeXP, TestLineaSurgeXP } from "../../typechain-types";
|
||||||
import { ADDRESS_ZERO, DEFAULT_ADMIN_ROLE, MINTER_ROLE, TRANSFER_ROLE } from "./common/constants";
|
import { ADDRESS_ZERO, DEFAULT_ADMIN_ROLE, MINTER_ROLE, TRANSFER_ROLE } from "../common/constants";
|
||||||
import { deployFromFactory } from "./common/deployment";
|
import { deployFromFactory } from "../common/deployment";
|
||||||
|
|
||||||
describe("Linea Surge XP Token Tests", () => {
|
describe("Linea Surge XP Token Tests", () => {
|
||||||
let contract: LineaSurgeXP;
|
let contract: LineaSurgeXP;
|
||||||
@@ -2,10 +2,10 @@ import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers";
|
|||||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { ethers } from "hardhat";
|
import { ethers } from "hardhat";
|
||||||
import { LineaVoyageXP } from "../typechain-types";
|
import { LineaVoyageXP } from "../../typechain-types";
|
||||||
import { DEFAULT_ADMIN_ROLE, MINTER_ROLE } from "./common/constants";
|
import { DEFAULT_ADMIN_ROLE, MINTER_ROLE } from "../common/constants";
|
||||||
import { deployFromFactory } from "./common/deployment";
|
import { deployFromFactory } from "../common/deployment";
|
||||||
import { buildAccessErrorMessage, expectRevertWithCustomError, expectRevertWithReason } from "./common/helpers";
|
import { buildAccessErrorMessage, expectRevertWithCustomError, expectRevertWithReason } from "../common/helpers";
|
||||||
|
|
||||||
describe("Linea Voyage XP Token Tests", () => {
|
describe("Linea Voyage XP Token Tests", () => {
|
||||||
let contract: LineaVoyageXP;
|
let contract: LineaVoyageXP;
|
||||||
@@ -8,11 +8,11 @@ import {
|
|||||||
MINTER_ROLE,
|
MINTER_ROLE,
|
||||||
ONE_DAY_IN_SECONDS,
|
ONE_DAY_IN_SECONDS,
|
||||||
RATE_LIMIT_SETTER_ROLE,
|
RATE_LIMIT_SETTER_ROLE,
|
||||||
} from "./common/constants";
|
} from "../common/constants";
|
||||||
import { deployFromFactory } from "./common/deployment";
|
import { deployFromFactory } from "../common/deployment";
|
||||||
import { TokenMintingRateLimiter } from "../typechain-types/contracts/token/TokenMintingRateLimiter";
|
import { TokenMintingRateLimiter } from "../../typechain-types/contracts/token/TokenMintingRateLimiter";
|
||||||
import { LineaVoyageXP } from "../typechain-types";
|
import { LineaVoyageXP } from "../../typechain-types";
|
||||||
import { buildAccessErrorMessage, expectRevertWithCustomError, expectRevertWithReason } from "./common/helpers";
|
import { buildAccessErrorMessage, expectRevertWithCustomError, expectRevertWithReason } from "../common/helpers";
|
||||||
|
|
||||||
describe("Token Minting Rate Limiter", () => {
|
describe("Token Minting Rate Limiter", () => {
|
||||||
let tokenMintingRateLimiter: TokenMintingRateLimiter;
|
let tokenMintingRateLimiter: TokenMintingRateLimiter;
|
||||||
@@ -31,6 +31,7 @@ import {
|
|||||||
expectRevertWithReason,
|
expectRevertWithReason,
|
||||||
} from "../common/helpers";
|
} from "../common/helpers";
|
||||||
import { DEFAULT_ADMIN_ROLE } from "contracts/common/constants";
|
import { DEFAULT_ADMIN_ROLE } from "contracts/common/constants";
|
||||||
|
import { SupportedChainIds } from "contracts/common/supportedNetworks";
|
||||||
|
|
||||||
const initialUserBalance = BigInt(10 ** 9);
|
const initialUserBalance = BigInt(10 ** 9);
|
||||||
const mockName = "L1 DAI";
|
const mockName = "L1 DAI";
|
||||||
@@ -181,8 +182,8 @@ describe("TokenBridge", function () {
|
|||||||
defaultAdmin: PLACEHOLDER_ADDRESS,
|
defaultAdmin: PLACEHOLDER_ADDRESS,
|
||||||
messageService: PLACEHOLDER_ADDRESS,
|
messageService: PLACEHOLDER_ADDRESS,
|
||||||
tokenBeacon: PLACEHOLDER_ADDRESS,
|
tokenBeacon: PLACEHOLDER_ADDRESS,
|
||||||
sourceChainId: 5,
|
sourceChainId: SupportedChainIds.SEPOLIA,
|
||||||
targetChainId: 51940,
|
targetChainId: SupportedChainIds.LINEA_TESTNET,
|
||||||
reservedTokens: [],
|
reservedTokens: [],
|
||||||
roleAddresses: [],
|
roleAddresses: [],
|
||||||
pauseTypeRoles: [],
|
pauseTypeRoles: [],
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers";
|
|||||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { ethers } from "hardhat";
|
import { ethers } from "hardhat";
|
||||||
import { RecoverFunds, TestExternalCalls } from "../typechain-types";
|
import { RecoverFunds, TestExternalCalls } from "../../typechain-types";
|
||||||
import {
|
import {
|
||||||
ADDRESS_ZERO,
|
ADDRESS_ZERO,
|
||||||
DEFAULT_ADMIN_ROLE,
|
DEFAULT_ADMIN_ROLE,
|
||||||
@@ -10,9 +10,9 @@ import {
|
|||||||
FUNCTION_EXECUTOR_ROLE,
|
FUNCTION_EXECUTOR_ROLE,
|
||||||
INITIALIZED_ALREADY_MESSAGE,
|
INITIALIZED_ALREADY_MESSAGE,
|
||||||
INITIAL_WITHDRAW_LIMIT,
|
INITIAL_WITHDRAW_LIMIT,
|
||||||
} from "./common/constants";
|
} from "../common/constants";
|
||||||
import { deployUpgradableFromFactory } from "./common/deployment";
|
import { deployUpgradableFromFactory } from "../common/deployment";
|
||||||
import { buildAccessErrorMessage, expectRevertWithCustomError, expectRevertWithReason } from "./common/helpers";
|
import { buildAccessErrorMessage, expectRevertWithCustomError, expectRevertWithReason } from "../common/helpers";
|
||||||
|
|
||||||
describe("RecoverFunds contract", () => {
|
describe("RecoverFunds contract", () => {
|
||||||
let recoverFunds: RecoverFunds;
|
let recoverFunds: RecoverFunds;
|
||||||
@@ -33,7 +33,7 @@ To perform a dry run and verify if the corrent nodes are targetted, include the
|
|||||||
|
|
||||||
# Ethstats
|
# Ethstats
|
||||||
[Mainnet](https://ethstats.linea.build/)
|
[Mainnet](https://ethstats.linea.build/)
|
||||||
[Testnet](https://ethstats.goerli.linea.build/)
|
[Testnet](https://ethstats.sepolia.linea.build/)
|
||||||
|
|
||||||
# Local Development
|
# Local Development
|
||||||
It is highly recommended to read the official docs of `oclif` as it is used to generate the CLI.
|
It is highly recommended to read the official docs of `oclif` as it is used to generate the CLI.
|
||||||
|
|||||||
122
pnpm-lock.yaml
generated
122
pnpm-lock.yaml
generated
@@ -173,16 +173,16 @@ importers:
|
|||||||
version: 9.0.3
|
version: 9.0.3
|
||||||
'@nomicfoundation/hardhat-ethers':
|
'@nomicfoundation/hardhat-ethers':
|
||||||
specifier: 3.0.5
|
specifier: 3.0.5
|
||||||
version: 3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
version: 3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
||||||
'@nomicfoundation/hardhat-network-helpers':
|
'@nomicfoundation/hardhat-network-helpers':
|
||||||
specifier: 1.0.10
|
specifier: 1.0.10
|
||||||
version: 1.0.10(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
version: 1.0.10(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
||||||
'@nomicfoundation/hardhat-toolbox':
|
'@nomicfoundation/hardhat-toolbox':
|
||||||
specifier: 4.0.0
|
specifier: 4.0.0
|
||||||
version: 4.0.0(jyfxkil3vfakgnenb4mg6e5zke)
|
version: 4.0.0(zgfjqfwfiondltx7mdbaovzgze)
|
||||||
'@nomicfoundation/hardhat-verify':
|
'@nomicfoundation/hardhat-verify':
|
||||||
specifier: 1.1.1
|
specifier: 1.1.1
|
||||||
version: 1.1.1(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
version: 1.1.1(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
||||||
'@openzeppelin/contracts':
|
'@openzeppelin/contracts':
|
||||||
specifier: 4.9.6
|
specifier: 4.9.6
|
||||||
version: 4.9.6
|
version: 4.9.6
|
||||||
@@ -191,7 +191,7 @@ importers:
|
|||||||
version: 4.9.6
|
version: 4.9.6
|
||||||
'@openzeppelin/hardhat-upgrades':
|
'@openzeppelin/hardhat-upgrades':
|
||||||
specifier: 2.5.1
|
specifier: 2.5.1
|
||||||
version: 2.5.1(@nomicfoundation/hardhat-ethers@3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-verify@1.1.1(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)
|
version: 2.5.1(@nomicfoundation/hardhat-ethers@3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-verify@1.1.1(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)
|
||||||
'@safe-global/protocol-kit':
|
'@safe-global/protocol-kit':
|
||||||
specifier: 3.0.2
|
specifier: 3.0.2
|
||||||
version: 3.0.2(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)
|
version: 3.0.2(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)
|
||||||
@@ -200,7 +200,7 @@ importers:
|
|||||||
version: 4.0.2(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)
|
version: 4.0.2(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)
|
||||||
'@typechain/hardhat':
|
'@typechain/hardhat':
|
||||||
specifier: 9.1.0
|
specifier: 9.1.0
|
||||||
version: 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))(typescript@5.4.5))(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))
|
version: 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))(typescript@5.4.5))(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))
|
||||||
'@types/diff':
|
'@types/diff':
|
||||||
specifier: 5.2.0
|
specifier: 5.2.0
|
||||||
version: 5.2.0
|
version: 5.2.0
|
||||||
@@ -229,17 +229,17 @@ importers:
|
|||||||
specifier: 6.12.0
|
specifier: 6.12.0
|
||||||
version: 6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
version: 6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
||||||
hardhat:
|
hardhat:
|
||||||
specifier: 2.22.10
|
specifier: 2.22.11
|
||||||
version: 2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
version: 2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
||||||
hardhat-deploy:
|
hardhat-deploy:
|
||||||
specifier: 0.12.4
|
specifier: 0.12.4
|
||||||
version: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
version: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
||||||
hardhat-storage-layout:
|
hardhat-storage-layout:
|
||||||
specifier: 0.1.7
|
specifier: 0.1.7
|
||||||
version: 0.1.7(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
version: 0.1.7(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
||||||
hardhat-tracer:
|
hardhat-tracer:
|
||||||
specifier: 2.8.2
|
specifier: 2.8.2
|
||||||
version: 2.8.2(bufferutil@4.0.8)(chai@4.1.1)(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)
|
version: 2.8.2(bufferutil@4.0.8)(chai@4.1.1)(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)
|
||||||
node-gyp:
|
node-gyp:
|
||||||
specifier: 10.1.0
|
specifier: 10.1.0
|
||||||
version: 10.1.0
|
version: 10.1.0
|
||||||
@@ -3413,6 +3413,7 @@ packages:
|
|||||||
|
|
||||||
'@web3modal/wagmi@5.1.11':
|
'@web3modal/wagmi@5.1.11':
|
||||||
resolution: {integrity: sha512-etV1qfBVvh41EMuBHXUpcO/W818jZVNh5/l9Z5kqRPZxlQmBaJbt5mTzw6nw/Lujoe1yYKugGQFhgjfEQK+eyA==}
|
resolution: {integrity: sha512-etV1qfBVvh41EMuBHXUpcO/W818jZVNh5/l9Z5kqRPZxlQmBaJbt5mTzw6nw/Lujoe1yYKugGQFhgjfEQK+eyA==}
|
||||||
|
deprecated: Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@wagmi/connectors': '>=4'
|
'@wagmi/connectors': '>=4'
|
||||||
'@wagmi/core': '>=2.0.0'
|
'@wagmi/core': '>=2.0.0'
|
||||||
@@ -4089,6 +4090,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
|
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
|
||||||
engines: {node: '>= 8.10.0'}
|
engines: {node: '>= 8.10.0'}
|
||||||
|
|
||||||
|
chokidar@4.0.1:
|
||||||
|
resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==}
|
||||||
|
engines: {node: '>= 14.16.0'}
|
||||||
|
|
||||||
chownr@1.1.4:
|
chownr@1.1.4:
|
||||||
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
|
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
|
||||||
|
|
||||||
@@ -4715,6 +4720,7 @@ packages:
|
|||||||
|
|
||||||
eciesjs@0.3.20:
|
eciesjs@0.3.20:
|
||||||
resolution: {integrity: sha512-Rz5AB8v9+xmMdS/R7RzWPe/R8DP5QfyrkA6ce4umJopoB5su2H2aDy/GcgIfwhmCwxnBkqGf/PbGzmKcGtIgGA==}
|
resolution: {integrity: sha512-Rz5AB8v9+xmMdS/R7RzWPe/R8DP5QfyrkA6ce4umJopoB5su2H2aDy/GcgIfwhmCwxnBkqGf/PbGzmKcGtIgGA==}
|
||||||
|
deprecated: Please upgrade to v0.4+
|
||||||
|
|
||||||
edit-json-file@1.8.0:
|
edit-json-file@1.8.0:
|
||||||
resolution: {integrity: sha512-IBOpbe2aQufNl5oZ4jsr2AmNVUy5bO7jS5hk0cCyWhOLdH59Xv41B3XQObE/JB89Ae5qDY9hVsq13/hgGhFBZg==}
|
resolution: {integrity: sha512-IBOpbe2aQufNl5oZ4jsr2AmNVUy5bO7jS5hk0cCyWhOLdH59Xv41B3XQObE/JB89Ae5qDY9hVsq13/hgGhFBZg==}
|
||||||
@@ -5089,6 +5095,7 @@ packages:
|
|||||||
|
|
||||||
ethereumjs-abi@0.6.8:
|
ethereumjs-abi@0.6.8:
|
||||||
resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==}
|
resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==}
|
||||||
|
deprecated: This library has been deprecated and usage is discouraged.
|
||||||
|
|
||||||
ethereumjs-util@6.2.1:
|
ethereumjs-util@6.2.1:
|
||||||
resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==}
|
resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==}
|
||||||
@@ -5654,8 +5661,8 @@ packages:
|
|||||||
chai: 4.x
|
chai: 4.x
|
||||||
hardhat: '>=2.16 <2.21.0'
|
hardhat: '>=2.16 <2.21.0'
|
||||||
|
|
||||||
hardhat@2.22.10:
|
hardhat@2.22.11:
|
||||||
resolution: {integrity: sha512-JRUDdiystjniAvBGFmJRsiIZSOP2/6s++8xRDe3TzLeQXlWWHsXBrd9wd3JWFyKXvgMqMeLL5Sz/oNxXKYw9vg==}
|
resolution: {integrity: sha512-g9xr6BGXbzj2sqG9AjHwqeUOS9v2NwLbuq7rsdjMB2RLWmYp8IFdZnzq8UewwLJisuWgiygB+dwLktjqAbRuOw==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
ts-node: '*'
|
ts-node: '*'
|
||||||
@@ -6410,6 +6417,10 @@ packages:
|
|||||||
json-stable-stringify-without-jsonify@1.0.1:
|
json-stable-stringify-without-jsonify@1.0.1:
|
||||||
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
|
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
|
||||||
|
|
||||||
|
json-stream-stringify@3.1.6:
|
||||||
|
resolution: {integrity: sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==}
|
||||||
|
engines: {node: '>=7.10.1'}
|
||||||
|
|
||||||
json-stringify-safe@5.0.1:
|
json-stringify-safe@5.0.1:
|
||||||
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
|
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
|
||||||
|
|
||||||
@@ -7900,6 +7911,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
|
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
|
||||||
engines: {node: '>=8.10.0'}
|
engines: {node: '>=8.10.0'}
|
||||||
|
|
||||||
|
readdirp@4.0.2:
|
||||||
|
resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==}
|
||||||
|
engines: {node: '>= 14.16.0'}
|
||||||
|
|
||||||
readline@1.3.0:
|
readline@1.3.0:
|
||||||
resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==}
|
resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==}
|
||||||
|
|
||||||
@@ -11864,59 +11879,59 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
c-kzg: 2.1.2
|
c-kzg: 2.1.2
|
||||||
|
|
||||||
'@nomicfoundation/hardhat-chai-matchers@2.0.8(@nomicfoundation/hardhat-ethers@3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(chai@4.1.1)(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))':
|
'@nomicfoundation/hardhat-chai-matchers@2.0.8(@nomicfoundation/hardhat-ethers@3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(chai@4.1.1)(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nomicfoundation/hardhat-ethers': 3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
'@nomicfoundation/hardhat-ethers': 3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
||||||
'@types/chai-as-promised': 7.1.8
|
'@types/chai-as-promised': 7.1.8
|
||||||
chai: 4.1.1
|
chai: 4.1.1
|
||||||
chai-as-promised: 7.1.2(chai@4.1.1)
|
chai-as-promised: 7.1.2(chai@4.1.1)
|
||||||
deep-eql: 4.1.4
|
deep-eql: 4.1.4
|
||||||
ethers: 6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
ethers: 6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
||||||
hardhat: 2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
hardhat: 2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
||||||
ordinal: 1.0.3
|
ordinal: 1.0.3
|
||||||
|
|
||||||
'@nomicfoundation/hardhat-ethers@3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))':
|
'@nomicfoundation/hardhat-ethers@3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))':
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.3.7(supports-color@8.1.1)
|
debug: 4.3.7(supports-color@8.1.1)
|
||||||
ethers: 6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
ethers: 6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
||||||
hardhat: 2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
hardhat: 2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
||||||
lodash.isequal: 4.5.0
|
lodash.isequal: 4.5.0
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@nomicfoundation/hardhat-network-helpers@1.0.10(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))':
|
'@nomicfoundation/hardhat-network-helpers@1.0.10(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))':
|
||||||
dependencies:
|
dependencies:
|
||||||
ethereumjs-util: 7.1.5
|
ethereumjs-util: 7.1.5
|
||||||
hardhat: 2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
hardhat: 2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
||||||
|
|
||||||
'@nomicfoundation/hardhat-toolbox@4.0.0(jyfxkil3vfakgnenb4mg6e5zke)':
|
'@nomicfoundation/hardhat-toolbox@4.0.0(zgfjqfwfiondltx7mdbaovzgze)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nomicfoundation/hardhat-chai-matchers': 2.0.8(@nomicfoundation/hardhat-ethers@3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(chai@4.1.1)(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
'@nomicfoundation/hardhat-chai-matchers': 2.0.8(@nomicfoundation/hardhat-ethers@3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(chai@4.1.1)(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
||||||
'@nomicfoundation/hardhat-ethers': 3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
'@nomicfoundation/hardhat-ethers': 3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
||||||
'@nomicfoundation/hardhat-network-helpers': 1.0.10(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
'@nomicfoundation/hardhat-network-helpers': 1.0.10(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
||||||
'@nomicfoundation/hardhat-verify': 1.1.1(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
'@nomicfoundation/hardhat-verify': 1.1.1(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
||||||
'@typechain/ethers-v6': 0.5.1(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))(typescript@5.4.5)
|
'@typechain/ethers-v6': 0.5.1(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))(typescript@5.4.5)
|
||||||
'@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))(typescript@5.4.5))(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))
|
'@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))(typescript@5.4.5))(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))
|
||||||
'@types/chai': 4.3.20
|
'@types/chai': 4.3.20
|
||||||
'@types/mocha': 10.0.9
|
'@types/mocha': 10.0.9
|
||||||
'@types/node': 20.12.7
|
'@types/node': 20.12.7
|
||||||
chai: 4.1.1
|
chai: 4.1.1
|
||||||
ethers: 6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
ethers: 6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
||||||
hardhat: 2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
hardhat: 2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
||||||
hardhat-gas-reporter: 1.0.10(bufferutil@4.0.8)(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)
|
hardhat-gas-reporter: 1.0.10(bufferutil@4.0.8)(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)
|
||||||
solidity-coverage: 0.8.13(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
solidity-coverage: 0.8.13(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
||||||
ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5)
|
ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5)
|
||||||
typechain: 8.3.2(typescript@5.4.5)
|
typechain: 8.3.2(typescript@5.4.5)
|
||||||
typescript: 5.4.5
|
typescript: 5.4.5
|
||||||
|
|
||||||
'@nomicfoundation/hardhat-verify@1.1.1(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))':
|
'@nomicfoundation/hardhat-verify@1.1.1(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@ethersproject/abi': 5.7.0
|
'@ethersproject/abi': 5.7.0
|
||||||
'@ethersproject/address': 5.7.0
|
'@ethersproject/address': 5.7.0
|
||||||
cbor: 8.1.0
|
cbor: 8.1.0
|
||||||
chalk: 2.4.2
|
chalk: 2.4.2
|
||||||
debug: 4.3.7(supports-color@8.1.1)
|
debug: 4.3.7(supports-color@8.1.1)
|
||||||
hardhat: 2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
hardhat: 2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
||||||
lodash.clonedeep: 4.5.0
|
lodash.clonedeep: 4.5.0
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
table: 6.8.2
|
table: 6.8.2
|
||||||
@@ -12062,9 +12077,9 @@ snapshots:
|
|||||||
- debug
|
- debug
|
||||||
- encoding
|
- encoding
|
||||||
|
|
||||||
'@openzeppelin/hardhat-upgrades@2.5.1(@nomicfoundation/hardhat-ethers@3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-verify@1.1.1(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)':
|
'@openzeppelin/hardhat-upgrades@2.5.1(@nomicfoundation/hardhat-ethers@3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-verify@1.1.1(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nomicfoundation/hardhat-ethers': 3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
'@nomicfoundation/hardhat-ethers': 3.0.5(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
||||||
'@openzeppelin/defender-admin-client': 1.54.6(bufferutil@4.0.8)(debug@4.3.7)(encoding@0.1.13)(utf-8-validate@5.0.10)
|
'@openzeppelin/defender-admin-client': 1.54.6(bufferutil@4.0.8)(debug@4.3.7)(encoding@0.1.13)(utf-8-validate@5.0.10)
|
||||||
'@openzeppelin/defender-base-client': 1.54.6(debug@4.3.7)(encoding@0.1.13)
|
'@openzeppelin/defender-base-client': 1.54.6(debug@4.3.7)(encoding@0.1.13)
|
||||||
'@openzeppelin/defender-sdk-base-client': 1.15.0(encoding@0.1.13)
|
'@openzeppelin/defender-sdk-base-client': 1.15.0(encoding@0.1.13)
|
||||||
@@ -12074,11 +12089,11 @@ snapshots:
|
|||||||
debug: 4.3.7(supports-color@8.1.1)
|
debug: 4.3.7(supports-color@8.1.1)
|
||||||
ethereumjs-util: 7.1.5
|
ethereumjs-util: 7.1.5
|
||||||
ethers: 6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
ethers: 6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
||||||
hardhat: 2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
hardhat: 2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
||||||
proper-lockfile: 4.1.2
|
proper-lockfile: 4.1.2
|
||||||
undici: 5.28.4
|
undici: 5.28.4
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@nomicfoundation/hardhat-verify': 1.1.1(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
'@nomicfoundation/hardhat-verify': 1.1.1(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- bufferutil
|
- bufferutil
|
||||||
- encoding
|
- encoding
|
||||||
@@ -13048,12 +13063,12 @@ snapshots:
|
|||||||
typechain: 8.3.2(typescript@5.4.5)
|
typechain: 8.3.2(typescript@5.4.5)
|
||||||
typescript: 5.4.5
|
typescript: 5.4.5
|
||||||
|
|
||||||
'@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))(typescript@5.4.5))(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))':
|
'@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))(typescript@5.4.5))(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typechain/ethers-v6': 0.5.1(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))(typescript@5.4.5)
|
'@typechain/ethers-v6': 0.5.1(ethers@6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.4.5))(typescript@5.4.5)
|
||||||
ethers: 6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
ethers: 6.12.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
||||||
fs-extra: 9.1.0
|
fs-extra: 9.1.0
|
||||||
hardhat: 2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
hardhat: 2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
||||||
typechain: 8.3.2(typescript@5.4.5)
|
typechain: 8.3.2(typescript@5.4.5)
|
||||||
|
|
||||||
'@types/babel__core@7.20.5':
|
'@types/babel__core@7.20.5':
|
||||||
@@ -14824,6 +14839,10 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents: 2.3.3
|
fsevents: 2.3.3
|
||||||
|
|
||||||
|
chokidar@4.0.1:
|
||||||
|
dependencies:
|
||||||
|
readdirp: 4.0.2
|
||||||
|
|
||||||
chownr@1.1.4: {}
|
chownr@1.1.4: {}
|
||||||
|
|
||||||
chownr@2.0.0: {}
|
chownr@2.0.0: {}
|
||||||
@@ -15814,7 +15833,7 @@ snapshots:
|
|||||||
debug: 4.3.7(supports-color@8.1.1)
|
debug: 4.3.7(supports-color@8.1.1)
|
||||||
enhanced-resolve: 5.17.1
|
enhanced-resolve: 5.17.1
|
||||||
eslint: 8.57.0
|
eslint: 8.57.0
|
||||||
eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
|
eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0)
|
||||||
fast-glob: 3.3.2
|
fast-glob: 3.3.2
|
||||||
get-tsconfig: 4.8.1
|
get-tsconfig: 4.8.1
|
||||||
is-bun-module: 1.2.1
|
is-bun-module: 1.2.1
|
||||||
@@ -15827,7 +15846,7 @@ snapshots:
|
|||||||
- eslint-import-resolver-webpack
|
- eslint-import-resolver-webpack
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
eslint-module-utils@2.12.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
|
eslint-module-utils@2.12.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 3.2.7
|
debug: 3.2.7
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
@@ -15849,7 +15868,7 @@ snapshots:
|
|||||||
doctrine: 2.1.0
|
doctrine: 2.1.0
|
||||||
eslint: 8.57.0
|
eslint: 8.57.0
|
||||||
eslint-import-resolver-node: 0.3.9
|
eslint-import-resolver-node: 0.3.9
|
||||||
eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
|
eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0)
|
||||||
hasown: 2.0.2
|
hasown: 2.0.2
|
||||||
is-core-module: 2.15.1
|
is-core-module: 2.15.1
|
||||||
is-glob: 4.0.3
|
is-glob: 4.0.3
|
||||||
@@ -16905,11 +16924,11 @@ snapshots:
|
|||||||
- supports-color
|
- supports-color
|
||||||
- utf-8-validate
|
- utf-8-validate
|
||||||
|
|
||||||
hardhat-gas-reporter@1.0.10(bufferutil@4.0.8)(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10):
|
hardhat-gas-reporter@1.0.10(bufferutil@4.0.8)(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10):
|
||||||
dependencies:
|
dependencies:
|
||||||
array-uniq: 1.0.3
|
array-uniq: 1.0.3
|
||||||
eth-gas-reporter: 0.2.27(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
eth-gas-reporter: 0.2.27(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
||||||
hardhat: 2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
hardhat: 2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
||||||
sha1: 1.1.1
|
sha1: 1.1.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@codechecks/client'
|
- '@codechecks/client'
|
||||||
@@ -16917,24 +16936,24 @@ snapshots:
|
|||||||
- debug
|
- debug
|
||||||
- utf-8-validate
|
- utf-8-validate
|
||||||
|
|
||||||
hardhat-storage-layout@0.1.7(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)):
|
hardhat-storage-layout@0.1.7(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)):
|
||||||
dependencies:
|
dependencies:
|
||||||
console-table-printer: 2.12.1
|
console-table-printer: 2.12.1
|
||||||
hardhat: 2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
hardhat: 2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
||||||
|
|
||||||
hardhat-tracer@2.8.2(bufferutil@4.0.8)(chai@4.1.1)(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10):
|
hardhat-tracer@2.8.2(bufferutil@4.0.8)(chai@4.1.1)(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10):
|
||||||
dependencies:
|
dependencies:
|
||||||
chai: 4.1.1
|
chai: 4.1.1
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
debug: 4.3.7(supports-color@8.1.1)
|
debug: 4.3.7(supports-color@8.1.1)
|
||||||
ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
|
||||||
hardhat: 2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
hardhat: 2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- bufferutil
|
- bufferutil
|
||||||
- supports-color
|
- supports-color
|
||||||
- utf-8-validate
|
- utf-8-validate
|
||||||
|
|
||||||
hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10):
|
hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@ethersproject/abi': 5.7.0
|
'@ethersproject/abi': 5.7.0
|
||||||
'@metamask/eth-sig-util': 4.0.1
|
'@metamask/eth-sig-util': 4.0.1
|
||||||
@@ -16951,7 +16970,7 @@ snapshots:
|
|||||||
ansi-escapes: 4.3.2
|
ansi-escapes: 4.3.2
|
||||||
boxen: 5.1.2
|
boxen: 5.1.2
|
||||||
chalk: 2.4.2
|
chalk: 2.4.2
|
||||||
chokidar: 3.6.0
|
chokidar: 4.0.1
|
||||||
ci-info: 2.0.0
|
ci-info: 2.0.0
|
||||||
debug: 4.3.7(supports-color@8.1.1)
|
debug: 4.3.7(supports-color@8.1.1)
|
||||||
enquirer: 2.4.1
|
enquirer: 2.4.1
|
||||||
@@ -16964,6 +16983,7 @@ snapshots:
|
|||||||
glob: 7.2.0
|
glob: 7.2.0
|
||||||
immutable: 4.3.7
|
immutable: 4.3.7
|
||||||
io-ts: 1.10.4
|
io-ts: 1.10.4
|
||||||
|
json-stream-stringify: 3.1.6
|
||||||
keccak: 3.0.4
|
keccak: 3.0.4
|
||||||
lodash: 4.17.21
|
lodash: 4.17.21
|
||||||
mnemonist: 0.38.5
|
mnemonist: 0.38.5
|
||||||
@@ -17889,6 +17909,8 @@ snapshots:
|
|||||||
|
|
||||||
json-stable-stringify-without-jsonify@1.0.1: {}
|
json-stable-stringify-without-jsonify@1.0.1: {}
|
||||||
|
|
||||||
|
json-stream-stringify@3.1.6: {}
|
||||||
|
|
||||||
json-stringify-safe@5.0.1: {}
|
json-stringify-safe@5.0.1: {}
|
||||||
|
|
||||||
json5@1.0.2:
|
json5@1.0.2:
|
||||||
@@ -19493,6 +19515,8 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
picomatch: 2.3.1
|
picomatch: 2.3.1
|
||||||
|
|
||||||
|
readdirp@4.0.2: {}
|
||||||
|
|
||||||
readline@1.3.0: {}
|
readline@1.3.0: {}
|
||||||
|
|
||||||
real-require@0.1.0: {}
|
real-require@0.1.0: {}
|
||||||
@@ -20050,7 +20074,7 @@ snapshots:
|
|||||||
|
|
||||||
solidity-comments-extractor@0.0.8: {}
|
solidity-comments-extractor@0.0.8: {}
|
||||||
|
|
||||||
solidity-coverage@0.8.13(hardhat@2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)):
|
solidity-coverage@0.8.13(hardhat@2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@ethersproject/abi': 5.7.0
|
'@ethersproject/abi': 5.7.0
|
||||||
'@solidity-parser/parser': 0.18.0
|
'@solidity-parser/parser': 0.18.0
|
||||||
@@ -20061,7 +20085,7 @@ snapshots:
|
|||||||
ghost-testrpc: 0.0.2
|
ghost-testrpc: 0.0.2
|
||||||
global-modules: 2.0.0
|
global-modules: 2.0.0
|
||||||
globby: 10.0.2
|
globby: 10.0.2
|
||||||
hardhat: 2.22.10(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
hardhat: 2.22.11(bufferutil@4.0.8)(c-kzg@2.1.2)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
|
||||||
jsonschema: 1.4.1
|
jsonschema: 1.4.1
|
||||||
lodash: 4.17.21
|
lodash: 4.17.21
|
||||||
mocha: 10.7.3
|
mocha: 10.7.3
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ To install this package, execute the following command:
|
|||||||
|
|
||||||
This package exposes two main classes for usage:
|
This package exposes two main classes for usage:
|
||||||
- The `PostmanServiceClient` class is used to run a Postman service for delivering messages.
|
- The `PostmanServiceClient` class is used to run a Postman service for delivering messages.
|
||||||
- The `LineaSDK` class is used to interact with smart contracts on Ethereum and Linea (both Goerli and Mainnet).
|
- The `LineaSDK` class is used to interact with smart contracts on Ethereum and Linea (both Sepolia and Mainnet).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -1,199 +0,0 @@
|
|||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"name": "money transfer",
|
|
||||||
"context": {
|
|
||||||
"chainId": 59140,
|
|
||||||
"url": "https://rpc.goerli.linea.build",
|
|
||||||
"nbOfExecutions": 1
|
|
||||||
//"source": 0x1d80c1698946ee65b6A6B78F468B47f6bd4516f0
|
|
||||||
},
|
|
||||||
"calls": [
|
|
||||||
//round robin money transfer
|
|
||||||
{
|
|
||||||
"nbOfExecution": 0,
|
|
||||||
"scenario": {
|
|
||||||
"scenarioType": "RoundRobinMoneyTransfer",
|
|
||||||
"wallet": "new",
|
|
||||||
"nbTransfers": 200,
|
|
||||||
"nbWallets": 20
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//self tx with random payload -- does not seem to work ...
|
|
||||||
{
|
|
||||||
"nbOfExecution": 0,
|
|
||||||
"scenario": {
|
|
||||||
"scenarioType": "SelfTransactionWithRandomPayload",
|
|
||||||
"wallet": "new",
|
|
||||||
"nbTransfers": 1,
|
|
||||||
"nbWallets": 100,
|
|
||||||
"payloadSize": 5000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//addToStorageMap
|
|
||||||
{
|
|
||||||
"nbOfExecution": 1,
|
|
||||||
"scenario": {
|
|
||||||
"scenarioType": "ContractCall",
|
|
||||||
"wallet": "new",
|
|
||||||
"contract": {
|
|
||||||
"contractCallType": "CallExistingContract",
|
|
||||||
"contractAddress": "0x13B252598e0Ed9E4436467B39eC5E8Bc22584d1c",
|
|
||||||
"methodAndParameters": {
|
|
||||||
"type": "GenericCall",
|
|
||||||
"numberOfTimes": 250,
|
|
||||||
"methodName": "addToStorageMap",
|
|
||||||
"price": 25000,
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"solidityType": "Address",
|
|
||||||
"type": "SimpleParameter",
|
|
||||||
"value": "15000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"solidityType": "Uint256",
|
|
||||||
"type": "SimpleParameter",
|
|
||||||
"value": "15000"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//createStruct
|
|
||||||
{
|
|
||||||
"nbOfExecution": 1,
|
|
||||||
"scenario": {
|
|
||||||
"scenarioType": "ContractCall",
|
|
||||||
"wallet": "new",
|
|
||||||
"contract": {
|
|
||||||
"contractCallType": "CallExistingContract",
|
|
||||||
"contractAddress": "0xdce94FA9142b24a2e6c5f3C3141317c62a2Ad7c4",
|
|
||||||
"methodAndParameters": {
|
|
||||||
"type": "GenericCall",
|
|
||||||
"numberOfTimes": 250,
|
|
||||||
"methodName": "createStruct",
|
|
||||||
"price": 25000,
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"solidityType": "Uint256",
|
|
||||||
"type": "SimpleParameter",
|
|
||||||
"value": "0"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//CreateContract
|
|
||||||
{
|
|
||||||
"nbOfExecution": 1, //does not work if set to more than 1...
|
|
||||||
"scenario": {
|
|
||||||
"scenarioType": "ContractCall",
|
|
||||||
"wallet": "source",
|
|
||||||
"contract": {
|
|
||||||
"contractCallType": "CreateContract",
|
|
||||||
"name": "dummyContract",
|
|
||||||
"byteCode": "0x608060405234801561001057600080fd5b506108e5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806381cec0fe1161008c578063c7dd97f611610066578063c7dd97f6146101d3578063d75522da146101e6578063de36d65714610207578063eb6c7bc01461023e57600080fd5b806381cec0fe146101a35780639b0e317c146101b6578063c2d7ff5b146101c057600080fd5b8063445a31dc116100c8578063445a31dc1461013d57806348286a551461015d57806365e884381461017d5780636bd969ad1461019057600080fd5b8063101eb93a146100ef57806314b05a3814610104578063293fd05d1461012a575b600080fd5b6101026100fd3660046105af565b610273565b005b61011761011236600461068b565b6102cc565b6040519081526020015b60405180910390f35b6101026101383660046105af565b6102fc565b61011761014b366004610705565b60016020526000908152604090205481565b61017061016b36600461068b565b610351565b6040516101219190610795565b61010261018b3660046105af565b61037a565b61017061019e36600461068b565b6103b2565b6101026101b13660046107a8565b6103c5565b6000546101179081565b6101026101ce3660046105af565b610560565b6101176101e136600461068b565b61059c565b6101026101f43660046105af565b6040805160208101909152819052600055565b61010261021536600461080a565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260016020526040902055565b61010261024c366004610705565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040812055565b60005b818110156102c857604080516020810183905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301905252806102c081610834565b915050610276565b5050565b6000816040516020016102df9190610893565b604051602081830303815290604052805190602001209050919050565b60005b818110156102c857604080516020810183905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403019052528061034981610834565b9150506102ff565b6060816040516020016103649190610795565b6040516020818303038152906040529050919050565b60405181815233907f2a1343a7ef16865394327596242ebb1d13cafbd9dbb29027e89cbc0212cfa7379060200160405180910390a250565b6060816040516020016103649190610893565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516103ec9190610893565b6000604051808303816000865af19150503d8060008114610429576040519150601f19603f3d011682016040523d82523d6000602084013e61042e565b606091505b505090508061049e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f43616c6c206661696c656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60405130906104ae908490610893565b600060405180830381855af49150503d80600081146104e9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ee565b606091505b5050809150508061055b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44656c656761746563616c6c206661696c6564000000000000000000000000006044820152606401610495565b505050565b60408051338152602081018390527f86a4f961b36de6c45328ad9f8656c035c3f2414b5710cb261e19c9b0a8851203910160405180910390a150565b6000816040516020016102df9190610795565b6000602082840312156105c157600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115610612576106126105c8565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610658576106586105c8565b8160405280935085815286868601111561067157600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561069d57600080fd5b813567ffffffffffffffff8111156106b457600080fd5b8201601f810184136106c557600080fd5b6106d4848235602084016105f7565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461070057600080fd5b919050565b60006020828403121561071757600080fd5b610720826106dc565b9392505050565b60005b8381101561074257818101518382015260200161072a565b50506000910152565b60008151808452610763816020860160208601610727565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610720602083018461074b565b600080604083850312156107bb57600080fd5b6107c4836106dc565b9150602083013567ffffffffffffffff8111156107e057600080fd5b8301601f810185136107f157600080fd5b610800858235602084016105f7565b9150509250929050565b6000806040838503121561081d57600080fd5b610826836106dc565b946020939093013593505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361088c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600082516108a5818460208701610727565b919091019291505056fea2646970667358221220074d6f5a354629cf279c1cff0e21dacfb07ec4644065ef2edca3e52716c2669264736f6c63430008130033"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//Mint
|
|
||||||
{
|
|
||||||
"nbOfExecution": 1,
|
|
||||||
"scenario": {
|
|
||||||
"scenarioType": "ContractCall",
|
|
||||||
"wallet": "source", // contract 0x9d97700664141F25638463C5F1A024Ea24D902f5 can be called only by the owner
|
|
||||||
"contract": {
|
|
||||||
"contractCallType": "CallExistingContract",
|
|
||||||
"contractAddress": "0x9d97700664141F25638463C5F1A024Ea24D902f5",
|
|
||||||
"methodAndParameters": {
|
|
||||||
"type": "Mint",
|
|
||||||
"numberOfTimes": 100,
|
|
||||||
"address": "0x5341E203DDF276B661AdB904D6dEF1AB8944Cdc3",
|
|
||||||
"amount": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//BatchMint
|
|
||||||
{
|
|
||||||
"nbOfExecution": 1,
|
|
||||||
"scenario": {
|
|
||||||
"scenarioType": "ContractCall",
|
|
||||||
"wallet": "source", // contract 0x9d97700664141F25638463C5F1A024Ea24D902f5 can be called only by the owner
|
|
||||||
"contract": {
|
|
||||||
"contractCallType": "CallExistingContract",
|
|
||||||
"contractAddress": "0x9d97700664141F25638463C5F1A024Ea24D902f5",
|
|
||||||
"methodAndParameters": {
|
|
||||||
"type": "BatchMint",
|
|
||||||
"numberOfTimes": 100,
|
|
||||||
"address": ["0f344eb0ce3ec45c994d7abd7897821632f9619c","0x538791da292d3cdeee10574e4fdaf7d2220476a3","0x2ee8153d412a71663801c2201209891e882bb2a2",
|
|
||||||
"0xfa9bff942055cd823843ceeb0b50dc17f5f0f1e8","0x963911ce50eCf3f292faEA21D3a3ABF678E2FA9e","0x963911ce50eCf3f292faEA21D3a3ABF678E2FA9e",
|
|
||||||
"0x963911ce50eCf3f292faEA21D3a3ABF678E2FA9e","0xa5376f1151a6629281af4a79c8ebb0af60887be7","0x7ec2c4e2e7d7cf7fb84367a318dc17f908c3388d",
|
|
||||||
"0xb9d2786314d848c081f68499c93baab90ab18652","0x963911ce50eCf3f292faEA21D3a3ABF678E2FA9e","0x963911ce50eCf3f292faEA21D3a3ABF678E2FA9e",
|
|
||||||
"0x963911ce50eCf3f292faEA21D3a3ABF678E2FA9e","0x11b75115e902fa43f797d34b5252ef69f604369e","0x963911ce50eCf3f292faEA21D3a3ABF678E2FA9e",
|
|
||||||
"0xb64e5d16e6ec0e15c46dad842d2a1fac765e1bb3","0x963911ce50eCf3f292faEA21D3a3ABF678E2FA9e","0x963911ce50eCf3f292faEA21D3a3ABF678E2FA9e",
|
|
||||||
"0x963911ce50eCf3f292faEA21D3a3ABF678E2FA9e","0xd902a49242f5aefb5743204b929e6a10d01a8df8","0x963911ce50eCf3f292faEA21D3a3ABF678E2FA9e",
|
|
||||||
"0xbde4a7da0abf9ab0ebe97648ee2a9ec7713bbb23","0xe3060172919c3f11ef36ec7f05417a2e5c35b947","0x2f06eb7d40585bc87a9374a68a4297f69ec0a1cb"],
|
|
||||||
"amount": 1000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//testIndexedEventEmitting
|
|
||||||
{
|
|
||||||
"nbOfExecution": 1,
|
|
||||||
"scenario": {
|
|
||||||
"scenarioType": "ContractCall",
|
|
||||||
"wallet": "new",
|
|
||||||
"contract": {
|
|
||||||
"contractCallType": "CallExistingContract",
|
|
||||||
"contractAddress": "0xdce94FA9142b24a2e6c5f3C3141317c62a2Ad7c4",
|
|
||||||
"methodAndParameters": {
|
|
||||||
"type": "GenericCall",
|
|
||||||
"numberOfTimes": 250,
|
|
||||||
"methodName": "testIndexedEventEmitting",
|
|
||||||
"price": 25000,
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"solidityType": "Uint256",
|
|
||||||
"type": "SimpleParameter",
|
|
||||||
"value": "0"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//addToStorageMap
|
|
||||||
{
|
|
||||||
"nbOfExecution": 1,
|
|
||||||
"scenario": {
|
|
||||||
"scenarioType": "ContractCall",
|
|
||||||
"wallet": "new",
|
|
||||||
"contract": {
|
|
||||||
"contractCallType": "CallExistingContract",
|
|
||||||
"contractAddress": "0xdce94FA9142b24a2e6c5f3C3141317c62a2Ad7c4",
|
|
||||||
"methodAndParameters": {
|
|
||||||
"type": "GenericCall",
|
|
||||||
"numberOfTimes": 250,
|
|
||||||
"methodName": "addToStorageMap",
|
|
||||||
"price": 25000,
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"solidityType": "Address",
|
|
||||||
"type": "SimpleParameter",
|
|
||||||
"value": "0x1d80c1698946ee65b6A6B78F468B47f6bd4516f0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"solidityType": "Uint256",
|
|
||||||
"type": "SimpleParameter",
|
|
||||||
"value": "15000"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -9,7 +9,7 @@ import tech.pegasys.teku.infrastructure.async.SafeFuture
|
|||||||
|
|
||||||
class BlockReader {
|
class BlockReader {
|
||||||
private val web3jClient: Web3j = Web3j.build(
|
private val web3jClient: Web3j = Web3j.build(
|
||||||
HttpService("https://linea-goerli.infura.io/v3/"),
|
HttpService("https://linea-sepolia.infura.io/v3/"),
|
||||||
1000,
|
1000,
|
||||||
Async.defaultExecutorService()
|
Async.defaultExecutorService()
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user