From 26620c367af90219c66ef8ced32f3d97b54b2216 Mon Sep 17 00:00:00 2001 From: Afolabi Date: Sat, 17 Aug 2024 23:20:30 -0700 Subject: [PATCH] Contracts/garden (#75) * removed resolvers * added etherscan to foundry and .env updated rpc urls to alchemy RPC * added tokenbound constants and interface for registry created lib for deploying tokenbound accounts on multiple chains * created garden token and account added methods for adding gardners and operators to account created minting method only Green Goods can access * removed openzeppelin using tokenbound lib fixed rempaaing issues when building * imported tokenbound deploy script as template foe deploying rba * removed action registry being worked on in different branch * deleted common sol file not needed * added base test for garden account * deleted gardener file not needed for now --- packages/contracts/.env.example | 1 + packages/contracts/foundry.toml | 10 +- packages/contracts/package.json | 1 - packages/contracts/remappings.txt | 3 +- packages/contracts/script/Counter.s.sol | 2 +- .../script/DeployGardenAccount.s.sol | 130 ++++ packages/contracts/script/DeployScript.s.sol | 177 ------ packages/contracts/src/Common.sol | 44 -- packages/contracts/src/Constants.sol | 6 +- packages/contracts/src/accounts/Garden.sol | 81 +++ packages/contracts/src/accounts/Gardener.sol | 0 .../src/interfaces/IERC6551Registry.sol | 30 + packages/contracts/src/lib/TBA.sol | 65 ++ packages/contracts/src/registries/Action.sol | 104 ---- packages/contracts/src/resolvers/Work.sol | 72 --- .../contracts/src/resolvers/WorkApproval.sol | 72 --- packages/contracts/src/tokens/Garden.sol | 33 + packages/contracts/test/ActionRegistry.t.sol | 173 ------ packages/contracts/test/GardenAccount.t.sol | 11 + pnpm-lock.yaml | 562 +++++++++--------- 20 files changed, 639 insertions(+), 938 deletions(-) create mode 100644 packages/contracts/script/DeployGardenAccount.s.sol delete mode 100644 packages/contracts/script/DeployScript.s.sol delete mode 100644 packages/contracts/src/Common.sol delete mode 100644 packages/contracts/src/accounts/Gardener.sol create mode 100644 packages/contracts/src/interfaces/IERC6551Registry.sol create mode 100644 packages/contracts/src/lib/TBA.sol delete mode 100644 packages/contracts/src/registries/Action.sol delete mode 100644 packages/contracts/src/resolvers/Work.sol delete mode 100644 packages/contracts/src/resolvers/WorkApproval.sol delete mode 100644 packages/contracts/test/ActionRegistry.t.sol create mode 100644 packages/contracts/test/GardenAccount.t.sol diff --git a/packages/contracts/.env.example b/packages/contracts/.env.example index 298ee4a..a8eaa0b 100644 --- a/packages/contracts/.env.example +++ b/packages/contracts/.env.example @@ -1,5 +1,6 @@ export API_KEY_ALCHEMY="YOUR_API_KEY_ALCHEMY" export API_KEY_ARBISCAN="YOUR_API_KEY_ARBISCAN" +export API_KEY_ETHERSCAN="YOUR_API_KEY_ETHERSCAN" export API_KEY_INFURA="YOUR_API_KEY_INFURA" export PRIVATE_KEY="YOUR_MNEMONIC" export FOUNDRY_PROFILE="default" \ No newline at end of file diff --git a/packages/contracts/foundry.toml b/packages/contracts/foundry.toml index 9ae44c3..27ed347 100644 --- a/packages/contracts/foundry.toml +++ b/packages/contracts/foundry.toml @@ -21,6 +21,7 @@ test = 'test' verbosity = 4 [etherscan] + sepolia = { key = "${API_KEY_ETHERSCAN}"} arbitrum = { key = "${API_KEY_ARBISCAN}" } [fmt] @@ -37,13 +38,14 @@ extra_output_files = [ "abi", "evm.bytecode" ] + fs_permissions = [{ access = "read", path = "./"}] eth_rpc_url = "http://localhost:8545" -[profile.arbitrum] -eth_rpc_url = "https://arb1.arbitrum.io/rpc" +[profile.sepolia] +eth_rpc_url = "https://arb-mainnet.g.alchemy.com/v2/i2qnBKk5GQ8pVGPLA-G3D9il5o0ULQO3" -[profile.arbitrum-sepolia] -eth_rpc_url = "https://sepolia-rollup.arbitrum.io/rpc" +[profile.arbitrum] +eth_rpc_url = "https://arb-mainnet.g.alchemy.com/v2/i2qnBKk5GQ8pVGPLA-G3D9il5o0ULQO3" # See more config options https://github.com/foundry-rs/foundry/tree/master/config \ No newline at end of file diff --git a/packages/contracts/package.json b/packages/contracts/package.json index d7bbac3..c0771b6 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -19,7 +19,6 @@ }, "dependencies": { "@ethereum-attestation-service/eas-contracts": "1.7.1", - "@openzeppelin/contracts": "4.8.3", "@openzeppelin/contracts-upgradeable": "4.8.3" }, "devDependencies": { diff --git a/packages/contracts/remappings.txt b/packages/contracts/remappings.txt index 9fad027..7e83eff 100644 --- a/packages/contracts/remappings.txt +++ b/packages/contracts/remappings.txt @@ -1,6 +1,7 @@ ds-test=./node_modules/ds-test/src/ forge-std=./node_modules/forge-std/src/ -@openzeppelin/contracts=./node_modules/@openzeppelin/contracts/ +@openzeppelin/contracts=lib/tokenbound/lib/openzeppelin-contracts/contracts/ @openzeppelin/contracts-upgradeable=./node_modules/@openzeppelin/contracts-upgradeable/ @eas=./node_modules/@ethereum-attestation-service/eas-contracts/contracts/ @tokenbound=./lib/tokenbound/src/ +erc6551/=lib/tokenbound/lib/erc6551/src/ diff --git a/packages/contracts/script/Counter.s.sol b/packages/contracts/script/Counter.s.sol index 3dda6f9..58649ba 100644 --- a/packages/contracts/script/Counter.s.sol +++ b/packages/contracts/script/Counter.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.21; +pragma solidity ^0.8.25; import "forge-std/Script.sol"; diff --git a/packages/contracts/script/DeployGardenAccount.s.sol b/packages/contracts/script/DeployGardenAccount.s.sol new file mode 100644 index 0000000..c5ed151 --- /dev/null +++ b/packages/contracts/script/DeployGardenAccount.s.sol @@ -0,0 +1,130 @@ +// SPDX-License-Identifier: UNLICENSED +/* solhint-disable max-line-length */ + +pragma solidity ^0.8.25; + +import { Script, console } from "forge-std/Script.sol"; +import { AccountProxy } from "@tokenbound/AccountProxy.sol"; +import { AccountGuardian } from "@tokenbound/AccountGuardian.sol"; +import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; +import { Create2 } from "@openzeppelin/contracts/utils/Create2.sol"; + +import { GardenToken } from "../src/tokens/Garden.sol"; +import { GardenAccount } from "../src/accounts/Garden.sol"; +import { TOKENBOUND_REGISTRY } from "../src/Constants.sol"; + +contract Deploy is Script { + function run() external { + bytes32 salt = 0x6551655165516551655165516551655165516551655165516551655165516551; + address factory = 0x4e59b44847b379578588920cA78FbF26c0B4956C; + + address tokenboundSafe = 0x1B9Ac97Ea62f69521A14cbe6F45eb24aD6612C19; // ToDo: Deploy with same address on Sepolia + address erc4337EntryPoint = 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789; + address multicallForwarder = 0xcA11bde05977b3631167028862bE2a173976CA11; + + address guardian = Create2.computeAddress( + salt, + keccak256( + abi.encodePacked(type(AccountGuardian).creationCode, abi.encode(tokenboundSafe)) + ), + factory + ); + address implementation = Create2.computeAddress( + salt, + keccak256( + abi.encodePacked( + type(GardenAccount).creationCode, + abi.encode(erc4337EntryPoint, multicallForwarder, TOKENBOUND_REGISTRY, guardian) + ) + ), + factory + ); + address proxy = Create2.computeAddress( + salt, + keccak256( + abi.encodePacked( + type(AccountProxy).creationCode, abi.encode(guardian, implementation) + ) + ), + factory + ); + + // Deploy AccountGuardian + if (guardian.code.length == 0) { + vm.startBroadcast(); + new AccountGuardian{salt: salt}(tokenboundSafe); + vm.stopBroadcast(); + + console.log("AccountGuardian:", guardian, "(deployed)"); + } else { + console.log("AccountGuardian:", guardian, "(exists)"); + } + + // Deploy Account implementation + if (implementation.code.length == 0) { + vm.startBroadcast(); + new GardenAccount{salt: salt}( + erc4337EntryPoint, + multicallForwarder, + TOKENBOUND_REGISTRY, + guardian + ); + vm.stopBroadcast(); + + console.log("GardenAccount:", implementation, "(deployed)"); + } else { + console.log("GardenAccount:", implementation, "(exists)"); + } + + // Deploy AccountProxy + if (proxy.code.length == 0) { + vm.startBroadcast(); + new AccountProxy{salt: salt}(guardian, implementation); + vm.stopBroadcast(); + + console.log("AccountProxy:", proxy, "(deployed)"); + } else { + console.log("AccountProxy:", proxy, "(exists)"); + } + + console.log("\nVerification Commands:\n"); + console.log( + "AccountGuardian: forge verify-contract --num-of-optimizations 200 --chain-id", + block.chainid, + guardian, + string.concat( + "src/AccountGuardian.sol:AccountGuardian --constructor-args $(cast abi-encode \"constructor(address)\" ", + Strings.toHexString(tokenboundSafe), + ")\n" + ) + ); + console.log( + "GardenAccount: forge verify-contract --num-of-optimizations 200 --chain-id", + block.chainid, + implementation, + string.concat( + "src/GardenAccount.sol:GardenAccount --constructor-args $(cast abi-encode \"constructor(address,address,address,address)\" ", + Strings.toHexString(erc4337EntryPoint), + " ", + Strings.toHexString(multicallForwarder), + " ", + Strings.toHexString(TOKENBOUND_REGISTRY), + " ", + Strings.toHexString(guardian), + ")\n" + ) + ); + console.log( + "AccountProxy: forge verify-contract --num-of-optimizations 200 --chain-id", + block.chainid, + proxy, + string.concat( + "src/AccountProxy.sol:AccountProxy --constructor-args $(cast abi-encode \"constructor(address,address)\" ", + Strings.toHexString(guardian), + " ", + Strings.toHexString(implementation), + ")\n" + ) + ); + } +} diff --git a/packages/contracts/script/DeployScript.s.sol b/packages/contracts/script/DeployScript.s.sol deleted file mode 100644 index 240087b..0000000 --- a/packages/contracts/script/DeployScript.s.sol +++ /dev/null @@ -1,177 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.20; - -import {Test, console2} from "forge-std/Test.sol"; - -import { IEAS, AttestationRequest, AttestationRequestData } from "eas-contracts/IEAS.sol"; - -import { Script } from "forge-std/Script.sol"; -import { Create2 } from "@openzeppelin/contracts/utils/Create2.sol"; - -import { EAS_OP } from "../src/Constants.sol"; - -import { ActionRegistry } from "../src/registries/Action.sol"; -import { ActionResolver } from "../src/resolvers/Action.sol"; - -contract Deploy is Script { - //ActionRegistry public gpnft; - - function run() public { - - // guardian = Create2.computeAddress( - // salt, - // keccak256(abi.encodePacked(type(AccountGuardian).creationCode, abi.encode(gpSafe))), - // factory - // ); - - // confirmationResolver = Create2.computeAddress( - // salt, - // keccak256(abi.encodePacked(type(ConfirmationResolver).creationCode, abi.encode(EAS_OP))), - // factory - // ); - - // contributionResolver = Create2.computeAddress( - // salt, - // keccak256(abi.encodePacked(type(ContributionResolver).creationCode, abi.encode(EAS_OP))), - // factory - // ); - - // hypercert = Create2.computeAddress( - // salt, - // keccak256( - // abi.encodePacked( - // type(Hypercert).creationCode, abi.encode() - // ) - // ), - // factory - // ); - - // console2.log("hypercert", hypercert); - - // campaignImplementation = Create2.computeAddress( - // salt, - // keccak256( - // abi.encodePacked( - // type(CampaignAccount).creationCode, - // abi.encode(confirmationResolver, erc4337EntryPoint, multicallForwarder, TOKENBOUND_REGISTRY, guardian) - // ) - // ), - // factory - // ); - - // campaignProxy = Create2.computeAddress( - // salt, - // keccak256(abi.encodePacked(type(AccountProxy).creationCode, abi.encode(guardian, campaignImplementation))), - // factory - // ); - - // campaignToken = Create2.computeAddress( - // salt, - // keccak256( - // abi.encodePacked( - // type(ActionRegistry).creationCode, abi.encode(campaignImplementation, confirmationResolver, hypercert) - // ) - // ), - // factory - // ); - - - - // Load the private key from the `PRIVATE_KEY` environment variable (in .env) - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - - // // Deploy AccountGuardian - // if (guardian.code.length == 0) { - // vm.startBroadcast(deployerPrivateKey); - // new AccountGuardian{salt: salt}(gpSafe); - // vm.stopBroadcast(); - - // console.log("AccountGuardian:", guardian, "(deployed)"); - // } else { - // console.log("AccountGuardian:", guardian, "(exists)"); - // } - - // // Deploy Campaign Account Implementation - // if (campaignImplementation.code.length == 0) { - // vm.startBroadcast(deployerPrivateKey); - // new CampaignAccount{salt: salt}( - // confirmationResolver, - // erc4337EntryPoint, - // multicallForwarder, - // TOKENBOUND_REGISTRY, - // guardian - // ); - // vm.stopBroadcast(); - - // console.log("CampaignAccount:", campaignImplementation, "(deployed)"); - // } else { - // console.log("CampaignAccount:", campaignImplementation, "(exists)"); - // } - - // // Deploy Campaign Account Proxy - // if (campaignProxy.code.length == 0) { - // vm.startBroadcast(deployerPrivateKey); - // new AccountProxy{salt: salt}(guardian, campaignImplementation); - // vm.stopBroadcast(); - - // console.log("CampaignProxy:", campaignProxy, "(deployed)"); - // } else { - // console.log("CampaignProxy:", campaignProxy, "(exists)"); - // } - - // // Deploy Campaign Token - // if (campaignToken.code.length == 0) { - // vm.startBroadcast(deployerPrivateKey); - // new ActionRegistry{salt: salt}(campaignImplementation, confirmationResolver, hypercert); - // vm.stopBroadcast(); - // console.log("ActionRegistry:", campaignToken, "(deployed)"); - // } else { - // console.log("ActionRegistry:", campaignToken, "(exists)"); - // } - - // if (contributionResolver.code.length == 0) { - // vm.startBroadcast(deployerPrivateKey); - // new ContributionResolver{salt: salt}(EAS_OP); - // vm.stopBroadcast(); - // console.log("ContributionResolver:", contributionResolver, "(deployed)"); - // } else { - // console.log("ContributionResolver:", contributionResolver, "(exists)"); - // } - - // if (confirmationResolver.code.length == 0) { - // vm.startBroadcast(deployerPrivateKey); - // new ConfirmationResolver{salt: salt}(EAS_OP); - // vm.stopBroadcast(); - - // console.log("ConfirmationResolver:", confirmationResolver, "(deployed)"); - // } else { - // console.log("ConfirmationResolver:", confirmationResolver, "(exists)"); - // } - - // if (hypercert.code.length == 0) { - // vm.startBroadcast(deployerPrivateKey); - // new Hypercert{salt: salt}(); - // vm.stopBroadcast(); - - // console.log("Hypercert:", hypercert, "(deployed)"); - // } else { - // console.log("Hypercert:", hypercert, "(exists)"); - // } - - - vm.startBroadcast(deployerPrivateKey); - // contributionSchemaUid = easRegistry.register("uint256 value, string title, string description, string[] media, string[] capitals", ISchemaResolver(0xa547526412e87fBAD5B483bd17F6540a1dC686fd), true); - vm.stopBroadcast(); - // console2.log("contributionSchemaUid", contributionSchemaUid); - vm.startBroadcast(deployerPrivateKey); - // confirmationSchemaUid = easRegistry.register("uint contributionId, bool approval, string feedback, address campAccount", ISchemaResolver(0xd76a4D50F1CcaD941B85692Dc6681b35bC6B480c), true); - vm.stopBroadcast(); - // console2.log("confirmationSchemaUid", confirmationSchemaUid); - - vm.startBroadcast(deployerPrivateKey); - - // Test stuff - - vm.stopBroadcast(); - } -} diff --git a/packages/contracts/src/Common.sol b/packages/contracts/src/Common.sol deleted file mode 100644 index ecaad30..0000000 --- a/packages/contracts/src/Common.sol +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -// A representation of an empty/uninitialized UID. -bytes32 constant EMPTY_UID = 0; - -// A zero expiration represents an non-expiring attestation. -uint64 constant NO_EXPIRATION_TIME = 0; - -error AccessDenied(); -error DeadlineExpired(); -error InvalidEAS(); -error InvalidLength(); -error InvalidSignature(); -error NotFound(); - -/// @notice A struct representing ECDSA signature data. -struct Signature { - uint8 v; // The recovery ID. - bytes32 r; // The x-coordinate of the nonce R. - bytes32 s; // The signature data. -} - -/// @notice A struct representing a single attestation. -struct Attestation { - bytes32 uid; // A unique identifier of the attestation. - bytes32 schema; // The unique identifier of the schema. - uint64 time; // The time when the attestation was created (Unix timestamp). - uint64 expirationTime; // The time when the attestation expires (Unix timestamp). - uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp). - bytes32 refUID; // The UID of the related attestation. - address recipient; // The recipient of the attestation. - address attester; // The attester/sender of the attestation. - bool revocable; // Whether the attestation is revocable. - bytes data; // Custom attestation data. -} - -/// @notice A helper function to work with unchecked iterators in loops. -function uncheckedInc(uint256 i) pure returns (uint256 j) { - unchecked { - j = i + 1; - } -} diff --git a/packages/contracts/src/Constants.sol b/packages/contracts/src/Constants.sol index 68b3c37..d489403 100644 --- a/packages/contracts/src/Constants.sol +++ b/packages/contracts/src/Constants.sol @@ -1,5 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; +pragma solidity ^0.8.25; + +// TOKENBOUND (FUTURE PRIMTIVE) +address constant TOKENBOUND_REGISTRY = 0x002c0c13181038780F552f0eC1B72e8C720147E6; // Same address on all EVM chains +address constant TOKENBOUND_ACCOUNT = 0x9FFDEb36540e1a12b1F27751508715174122C090; // Same address on all EVM chains // EAS (ETHEREUM ATTESTATION SERVICE) address constant EAS_OP = 0x4200000000000000000000000000000000000021; // Any OP Stack deployed diff --git a/packages/contracts/src/accounts/Garden.sol b/packages/contracts/src/accounts/Garden.sol index e69de29..7937f77 100644 --- a/packages/contracts/src/accounts/Garden.sol +++ b/packages/contracts/src/accounts/Garden.sol @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.25; + +import { AccountV3Upgradable } from "@tokenbound/AccountV3Upgradable.sol"; +import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; + +error NotGardenOwner(); +error TransferNotStarted(); +error NotGoodTransferResolver(); + +contract GardenAccount is AccountV3Upgradable, Initializable { + address public communityToken; + string public name; + + mapping(address gardener => bool isGardener) private gardeners; + mapping(address operator => bool isOperator) private gardenOperators; + + constructor( + address erc4337EntryPoint, + address multicallForwarder, + address erc6551Registry, + address guardian + ) AccountV3Upgradable(erc4337EntryPoint, multicallForwarder, erc6551Registry, guardian) {} + + function initialize( + address _communityToken, + string calldata _name, + address[] calldata _gardeners, + address[] calldata _gardenOperators) external initializer { + communityToken = _communityToken; + name = _name; + + for (uint256 i = 0; i < _gardeners.length; i++) { + gardeners[_gardeners[i]] = true; + } + + for (uint256 i = 0; i < _gardenOperators.length; i++) { + gardenOperators[_gardenOperators[i]] = true; + } + } + + function updateName(string memory _name) external { + if (_isValidSigner(msg.sender, "")) { + revert NotGardenOwner(); + } + + name = _name; + } + + function addGardener(address gardener) external { + if (_isValidSigner(msg.sender, "")) { + revert NotGardenOwner(); + } + + gardeners[gardener] = true; + } + + function removeGardener(address gardener) external { + if (_isValidSigner(msg.sender, "")) { + revert NotGardenOwner(); + } + + gardeners[gardener] = false; + } + + function addGardenOperator(address operator) external { + if (_isValidSigner(msg.sender, "")) { + revert NotGardenOwner(); + } + + gardenOperators[operator] = true; + } + + function removeGardenOperator(address operator) external { + if (_isValidSigner(msg.sender, "")) { + revert NotGardenOwner(); + } + + gardenOperators[operator] = false; + } +} diff --git a/packages/contracts/src/accounts/Gardener.sol b/packages/contracts/src/accounts/Gardener.sol deleted file mode 100644 index e69de29..0000000 diff --git a/packages/contracts/src/interfaces/IERC6551Registry.sol b/packages/contracts/src/interfaces/IERC6551Registry.sol new file mode 100644 index 0000000..8067760 --- /dev/null +++ b/packages/contracts/src/interfaces/IERC6551Registry.sol @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.25; + +interface IERC6551Registry { + event AccountCreated( + address account, + address implementation, + uint256 chainId, + address tokenContract, + uint256 tokenId, + uint256 salt + ); + + function createAccount( + address implementation, + uint256 chainId, + address tokenContract, + uint256 tokenId, + uint256 seed, + bytes calldata initData + ) external returns (address); + + function account( + address implementation, + uint256 chainId, + address tokenContract, + uint256 tokenId, + uint256 salt + ) external view returns (address); +} diff --git a/packages/contracts/src/lib/TBA.sol b/packages/contracts/src/lib/TBA.sol new file mode 100644 index 0000000..a740940 --- /dev/null +++ b/packages/contracts/src/lib/TBA.sol @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import {TOKENBOUND_REGISTRY} from "../Constants.sol"; +import {IERC6551Registry} from "../interfaces/IERC6551Registry.sol"; + +error InvalidChainId(); + +library TBALib { + function createAccount(address implmentation, address tokenContract, uint256 tokenId) external returns (address) { + address account; + + if (block.chainid == 42161) { + account = IERC6551Registry(TOKENBOUND_REGISTRY).createAccount( + implmentation, + 42161, + tokenContract, + tokenId, + 7, + "" + ); + + } else if (block.chainid == 11155111) { + account = IERC6551Registry(TOKENBOUND_REGISTRY).createAccount( + implmentation, + 11155111, + tokenContract, + tokenId, + 7, + "" + ); + } else { + revert InvalidChainId(); + } + + return account; + } + + function getAccount(address implmentation, address tokenContract, uint256 tokenId) external view returns (address) { + address account; + + if (block.chainid == 42161) { + account = IERC6551Registry(TOKENBOUND_REGISTRY).account( + implmentation, + 42161, + tokenContract, + tokenId, + 7 + ); + + } else if (block.chainid == 11155111) { + account = IERC6551Registry(TOKENBOUND_REGISTRY).account( + implmentation, + 11155111, + tokenContract, + tokenId, + 7 + ); + } else { + revert InvalidChainId(); + } + + return account; + } +} diff --git a/packages/contracts/src/registries/Action.sol b/packages/contracts/src/registries/Action.sol deleted file mode 100644 index d7a187e..0000000 --- a/packages/contracts/src/registries/Action.sol +++ /dev/null @@ -1,104 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.20; - -error NotActionResolver(); -error NotActionOwner(); -error InvalidActionData(); - -contract ActionRegistry { - enum ActionCategory { - LIVING, - SOCIAL - } - - struct ActionStruct { - uint frequency; - ActionCategory category; - string metadata; - } - - event ActionRegistered(address indexed creator, /*uint256 hypercertId,*/ string[] capitals, string metadata); - event ActionUpdated(address indexed creator, /*uint256 hypercertId,*/ string[] capitals, string metadata); - - address private actionResolver; - - mapping(bytes32 => address) public actionToOwner; - mapping(bytes32 => ActionStruct) public idToActionData; - - constructor( - address _actionResolver - ) { - actionResolver = _actionResolver; - } - - function registerAction( - address _owner, - bytes32 _id, - uint _frequency, - ActionCategory _category, - string calldata _metadata - ) external { - // Check that sender is the resolver - if (msg.sender != actionResolver) { - revert NotActionResolver(); - } - - // Create mapping for action to owner - actionToOwner[_id] = _owner; - - // Create mapping for action id to action data - idToActionData[_id] = ActionStruct(_frequency, _category, _metadata); - - } - - function updateActionFrequency( - bytes32 _id, - uint _frequency - ) external returns(address, uint256){ - address owner = actionToOwner[_id]; - - if (msg.sender != owner) { - revert NotActionOwner(); - } - - ActionStruct memory action = idToActionData[_id]; - - action.frequency = _frequency; - - idToActionData[_id] = action; - } - - function updateActionCategory( - bytes32 _id, - ActionCategory _category - ) external returns(address, uint256){ - address owner = actionToOwner[_id]; - - if (msg.sender != owner) { - revert NotActionOwner(); - } - - ActionStruct memory action = idToActionData[_id]; - - action.category = _category; - - idToActionData[_id] = action; - } - - function updateActionMetadata( - bytes32 _id, - string calldata _metadata - ) external returns(address, uint256){ - address owner = actionToOwner[_id]; - - if (msg.sender != owner) { - revert NotActionOwner(); - } - - ActionStruct memory action = idToActionData[_id]; - - action.metadata = _metadata; - - idToActionData[_id] = action; - } -} diff --git a/packages/contracts/src/resolvers/Work.sol b/packages/contracts/src/resolvers/Work.sol deleted file mode 100644 index 71f05ca..0000000 --- a/packages/contracts/src/resolvers/Work.sol +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -import { IEAS, Attestation } from "eas-contracts/IEAS.sol"; -import { SchemaResolver } from "eas-contracts/resolver/SchemaResolver.sol"; -import { UUPSUpgradeable } from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; -import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; - -error NotCampaignAccount(); -error NotAllowed(); - -/// @title ActionResolver -/// @notice A schema resolver for the Actions event schema -contract ActionResolver is SchemaResolver, OwnableUpgradeable, UUPSUpgradeable { - struct ActionSchema { - uint256 contributionId; - bool approval; - string feedback; - address campAccount; - } - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor(address easAddrs) SchemaResolver(IEAS(easAddrs)) { - _disableInitializers(); - } - - function initialize() external initializer { - // __Ownable_init(); - } - - function isPayable() public pure override returns (bool) { - return true; - } - - function onAttest(Attestation calldata attestation, uint256 /*value*/ ) - internal - override - returns (bool) - { - ActionSchema memory schema = abi.decode(attestation.data, (ActionSchema)); - // CampaignAccount campaignAccount = CampaignAccount(payable(schema.campAccount)); - - // if (!campaignAccount.isCampaign()) { - // revert NotCampaignAccount(); - // } - - // if (!campaignAccount.team(attestation.attester)) { - // revert NotAllowed(); - // } - - // if(schema.approval){campaignAccount.compensateContribution( - // attestation.recipient, - // 4,//schema.amount, - // schema.contributionId - // );} - - return(true); - - } - - function onRevoke(Attestation calldata attestation, uint256 /*value*/ ) - internal - view - override - onlyOwner - returns (bool) - { - return true; - } - - function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} -} diff --git a/packages/contracts/src/resolvers/WorkApproval.sol b/packages/contracts/src/resolvers/WorkApproval.sol deleted file mode 100644 index 71f05ca..0000000 --- a/packages/contracts/src/resolvers/WorkApproval.sol +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -import { IEAS, Attestation } from "eas-contracts/IEAS.sol"; -import { SchemaResolver } from "eas-contracts/resolver/SchemaResolver.sol"; -import { UUPSUpgradeable } from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; -import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; - -error NotCampaignAccount(); -error NotAllowed(); - -/// @title ActionResolver -/// @notice A schema resolver for the Actions event schema -contract ActionResolver is SchemaResolver, OwnableUpgradeable, UUPSUpgradeable { - struct ActionSchema { - uint256 contributionId; - bool approval; - string feedback; - address campAccount; - } - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor(address easAddrs) SchemaResolver(IEAS(easAddrs)) { - _disableInitializers(); - } - - function initialize() external initializer { - // __Ownable_init(); - } - - function isPayable() public pure override returns (bool) { - return true; - } - - function onAttest(Attestation calldata attestation, uint256 /*value*/ ) - internal - override - returns (bool) - { - ActionSchema memory schema = abi.decode(attestation.data, (ActionSchema)); - // CampaignAccount campaignAccount = CampaignAccount(payable(schema.campAccount)); - - // if (!campaignAccount.isCampaign()) { - // revert NotCampaignAccount(); - // } - - // if (!campaignAccount.team(attestation.attester)) { - // revert NotAllowed(); - // } - - // if(schema.approval){campaignAccount.compensateContribution( - // attestation.recipient, - // 4,//schema.amount, - // schema.contributionId - // );} - - return(true); - - } - - function onRevoke(Attestation calldata attestation, uint256 /*value*/ ) - internal - view - override - onlyOwner - returns (bool) - { - return true; - } - - function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} -} diff --git a/packages/contracts/src/tokens/Garden.sol b/packages/contracts/src/tokens/Garden.sol index e69de29..af0f82b 100644 --- a/packages/contracts/src/tokens/Garden.sol +++ b/packages/contracts/src/tokens/Garden.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.25; + +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; + +import { TBALib } from "../lib/TBA.sol"; +import { GardenAccount } from "../accounts/Garden.sol"; + +contract GardenToken is Ownable, ERC721 { + uint256 private _nextTokenId; + address private _gardenAccountImplementation; + + constructor( + address gardenAccountImplementation + ) ERC721("Green Goods Garden", "GGG") { + _gardenAccountImplementation = gardenAccountImplementation; + } + + function mintGarden( + address communityToken, + string calldata name, + address[] calldata gardeners, + address[] calldata gardenOperators + ) external onlyOwner() { + uint256 tokenId = _nextTokenId++; + _safeMint(_msgSender(), tokenId); + + address gardenAccount = TBALib.createAccount(_gardenAccountImplementation, address(this), tokenId); + + GardenAccount(payable(gardenAccount)).initialize(communityToken, name, gardeners, gardenOperators); + } +} diff --git a/packages/contracts/test/ActionRegistry.t.sol b/packages/contracts/test/ActionRegistry.t.sol deleted file mode 100644 index a73bdba..0000000 --- a/packages/contracts/test/ActionRegistry.t.sol +++ /dev/null @@ -1,173 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -/* solhint-disable no-console2 */ -/* solhint-disable no-console */ -/* solhint-disable max-states-count */ -pragma solidity ^0.8.20; - -import { IEAS, AttestationRequestData, AttestationRequest } from "eas-contracts/IEAS.sol"; -import { ISchemaRegistry } from "eas-contracts/ISchemaRegistry.sol"; -import { ISchemaResolver } from "eas-contracts/resolver/ISchemaResolver.sol"; - -import { Test, console2} from "forge-std/Test.sol"; -import { Create2 } from "@openzeppelin/contracts/utils/Create2.sol"; - -import { EAS_OP } from "../src/Constants.sol"; - -import { ActionResolver } from "../src/resolvers/Action.sol"; -import { ActionRegistry } from "../src/registries/Action.sol"; - -// import { ISchemaResolver } from "../src/interfaces/ISchemaResolver.sol"; -// import { IEAS, AttestationRequest, AttestationRequestData } from "../src/interfaces/IEAS.sol"; - -contract MintTest is Test { - address payable public alice = - payable(0x00000000000000000000000000000000000A11cE); - address payable public bob = - payable(0x0000000000000000000000000000000000000B0b); - - IEAS public eas = IEAS(EAS_OP); - ISchemaRegistry public easRegistry = ISchemaRegistry(0x4200000000000000000000000000000000000020); - - address[] public team; - string[] public capitals; - - bytes32 public salt = 0x6551655165516551655165516551655165516551655165516551655165516551; - bytes32 public actionSchemaUid; - - address public factory = address(this);//0x4e59b44847b379578588920cA78FbF26c0B4956C; - - address public actionResolver; - address public actionRegistry; - - function setUp() public { - actionResolver = Create2.computeAddress( - salt, - keccak256(abi.encodePacked(type(ActionResolver).creationCode, abi.encode(EAS_OP))), - factory - ); - - actionRegistry = Create2.computeAddress( - salt, - keccak256( - abi.encodePacked( - type(ActionRegistry).creationCode, abi.encode(actionResolver) - ) - ), - factory - ); - - // Load the private key from the `PRIVATE_KEY` environment variable (in .env) - //uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - - - // Deploy Action Token - if (actionRegistry.code.length == 0) { - //vm.startBroadcast(deployerPrivateKey); - new ActionRegistry{salt: salt}(actionResolver); - //vm.stopBroadcast(); - console2.log("ActionRegistry:", actionRegistry, "(deployed)"); - } else { - console2.log("ActionRegistry:", actionRegistry, "(exists)"); - } - - if (actionResolver.code.length == 0) { - //vm.startBroadcast(deployerPrivateKey); - /*ActionResolver test2 =*/ new ActionResolver{salt: salt}(EAS_OP); - //vm.stopBroadcast(); - //console2.log("s/b ConfResolver", address(test2)); - console2.log("ActionResolver:", actionResolver, "(deployed)"); - } else { - console2.log("ActionResolver:", actionResolver, "(exists)"); - } - - actionSchemaUid = easRegistry.register("uint contributionId, bool approval, string feedback, address campAccount", ISchemaResolver(actionResolver), true); - - // actionRegistry = new ActionRegistry(address(0x41C8f39463A868d3A88af00cd0fe7102F30E44eC), address(0xabcd)); - team.push(alice); - team.push(bob); - team.push(0xa53A6fE2d8Ad977aD926C485343Ba39f32D3A3F6); - - capitals.push("cash"); - capitals.push("money"); - capitals.push("dollars"); - capitals.push("cheese"); - } - - function testCreateAction() public { - // console2.log(ActionRegistry(actionRegistry).name()); - - hoax(alice); - - // ActionRegistry(actionRegistry).createAction(1709250389, 1709350000, "metadata", capitals, team); - - // uint256 tokenId = 0; - // address shouldBeAlice = ActionRegistry(actionRegistry).ownerOf(tokenId); - - // assertEq(shouldBeAlice, alice, "Not Alice"); - } - - function testSCAccount() public { - hoax(alice); - - uint256 tokenId = 0; - // (address tbaAddress, uint256 hyperCertId) = ActionRegistry(actionRegistry).createAction(1709250389, 1709350000,"metadata", capitals, team); - - // console2.log("scaddress ", tbaAddress); - // console2.log("hyperCertId ", hyperCertId); - - // address scAddress = TBALib.getAccount( - // address(implementation), - - // address(actionRegistry), - // tokenId - // ); - - // console2.log("scAddress ", scAddress); - - // ActionAccount scAccount = ActionAccount(payable(tbaAddress)); - - //console2.log("shouldBeAlice ", shouldBeAlice); - - // assert(scAccount.isAction()); - } - - // function testActionResolver() public { - // hoax(alice); - - // uint256 tokenId = 0; - // // (address tbaAddress, uint256 hyperCertId) = ActionRegistry(actionRegistry).createAction(1709250389, 1709350000,"metadata", capitals, team); - - // //console2.log("scaddress ", tbaAddress); - // // console2.log("hyperCertId ", hyperCertId); - - // // AttestationRequestData memory attestationRequestData = AttestationRequestData({ - // recipient: tbaAddress, - // expirationTime: 0, // The time when the attestation expires (Unix timestamp). - // revocable: true, // Whether the attestation is revocable. - // refUID: 0, // The UID of the related attestation. - // data: abi.encode(5, "title", "description", capitals, capitals), // Custom attestation data. - // value: 0 // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors. - // }); - - // /// @notice A struct representing the full arguments of the attestation request. - // AttestationRequest memory request = AttestationRequest({ - // schema: actionSchemaUid, // The unique identifier of the schema. - // data: attestationRequestData // The arguments of the attestation request. - // }); - - // hoax(bob); - - // eas.attest(request); - - // //for action - // attestationRequestData.recipient = bob; - // attestationRequestData.data = abi.encode(0, true, "gud", tbaAddress); - - // request.schema = actionSchemaUid; - // request.data = attestationRequestData; - - // hoax(alice); - - // eas.attest(request); - // } -} diff --git a/packages/contracts/test/GardenAccount.t.sol b/packages/contracts/test/GardenAccount.t.sol new file mode 100644 index 0000000..6389dbc --- /dev/null +++ b/packages/contracts/test/GardenAccount.t.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.25; + +import { Test, console2} from "forge-std/Test.sol"; +import { Create2 } from "@openzeppelin/contracts/utils/Create2.sol"; + + +contract MintTest is Test { + function setUp() public { + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f8b4419..de56ef0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,18 +15,18 @@ importers: specifier: ^6.13.2 version: 6.13.2(bufferutil@4.0.7)(utf-8-validate@5.0.10) viem: - specifier: ^2.19.2 - version: 2.19.4(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.22.4) + specifier: ^2.19.6 + version: 2.19.6(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4) devDependencies: concurrently: - specifier: 8.2.1 - version: 8.2.1 + specifier: 8.2.2 + version: 8.2.2 prettier: - specifier: ^3.0.3 - version: 3.0.3 + specifier: ^3.3.3 + version: 3.3.3 typescript: - specifier: ^5.2.2 - version: 5.2.2 + specifier: ^5.5.4 + version: 5.5.4 wait-port: specifier: 1.1.0 version: 1.1.0 @@ -35,13 +35,13 @@ importers: dependencies: '@ethereum-attestation-service/eas-sdk': specifier: 2.5.0 - version: 2.5.0(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10) + version: 2.5.0(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10) '@hookform/resolvers': specifier: ^3.3.4 version: 3.3.4(react-hook-form@7.51.0(react@18.2.0)) '@privy-io/react-auth': specifier: 1.77.0 - version: 1.77.0(@babel/core@7.24.0)(@types/react@18.3.3)(bufferutil@4.0.7)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.22.4) + version: 1.77.0(@babel/core@7.24.0)(@types/react@18.3.3)(bufferutil@4.0.7)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4) '@xstate/react': specifier: 3.2.2 version: 3.2.2(@types/react@18.3.3)(react@18.2.0)(xstate@4.38.2) @@ -53,7 +53,7 @@ importers: version: 0.424.0(react@18.2.0) permissionless: specifier: 0.1.44 - version: 0.1.44(viem@2.19.4(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.22.4)) + version: 0.1.44(viem@2.19.6(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4)) react: specifier: ^18.2.0 version: 18.2.0 @@ -93,10 +93,10 @@ importers: version: 18.3.0 '@typescript-eslint/eslint-plugin': specifier: ^8.0.1 - version: 8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.2.2))(eslint@9.9.0(jiti@1.21.0))(typescript@5.2.2) + version: 8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^8.0.1 - version: 8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.2.2) + version: 8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4) '@vitejs/plugin-react': specifier: ^4.3.1 version: 4.3.1(vite@5.4.0(@types/node@22.1.0)(terser@5.21.0)) @@ -132,32 +132,47 @@ importers: version: 0.20.1(vite@5.4.0(@types/node@22.1.0)(terser@5.21.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0) vite-plugin-svgr: specifier: 4.2.0 - version: 4.2.0(rollup@2.79.1)(typescript@5.2.2)(vite@5.4.0(@types/node@22.1.0)(terser@5.21.0)) + version: 4.2.0(rollup@2.79.1)(typescript@5.5.4)(vite@5.4.0(@types/node@22.1.0)(terser@5.21.0)) packages/contracts: dependencies: '@ethereum-attestation-service/eas-contracts': specifier: 1.7.1 - version: 1.7.1(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10) + version: 1.7.1(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10) + '@openzeppelin/contracts-upgradeable': + specifier: 4.8.3 + version: 4.8.3 devDependencies: - ds-test: - specifier: https://github.com/dapphub/ds-test.git#e282159d5170298eb2455a6c05280ab5a73a4ef0 - version: https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0 + '@types/prettier': + specifier: '2' + version: 2.7.3 + '@types/qrcode': + specifier: '1' + version: 1.5.5 + envfile: + specifier: ~6.18.0 + version: 6.18.0 forge-std: - specifier: https://github.com/foundry-rs/forge-std.git#74cfb77e308dd188d2f58864aaf44963ae6b88b1 - version: https://codeload.github.com/foundry-rs/forge-std/tar.gz/74cfb77e308dd188d2f58864aaf44963ae6b88b1 + specifier: github:foundry-rs/forge-std#v1.8.1 + version: https://codeload.github.com/foundry-rs/forge-std/tar.gz/bb4ceea94d6f10eeb5b41dc2391c6c8bf8e734ef prettier: specifier: ^3.3.3 version: 3.3.3 prettier-plugin-solidity: - specifier: ^1.3.1 - version: 1.3.1(prettier@3.3.3) + specifier: ^1.4.0 + version: 1.4.0(prettier@3.3.3) + qrcode: + specifier: ~1.5.3 + version: 1.5.3 solhint: - specifier: ^5.0.1 - version: 5.0.1(typescript@5.2.2) + specifier: ^5.0.3 + version: 5.0.3(typescript@5.5.4) solidity-coverage: specifier: ^0.8.12 - version: 0.8.12(hardhat@2.22.4(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10)) + version: 0.8.12(hardhat@2.22.4(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10)) + toml: + specifier: ~3.0.0 + version: 3.0.0 packages: @@ -185,10 +200,6 @@ packages: peerDependencies: ajv: '>=8' - '@babel/code-frame@7.23.5': - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} @@ -362,10 +373,6 @@ packages: resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.23.4': - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} - engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} @@ -1474,6 +1481,9 @@ packages: '@octokit/types@12.6.0': resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} + '@openzeppelin/contracts-upgradeable@4.8.3': + resolution: {integrity: sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg==} + '@openzeppelin/merkle-tree@1.0.6': resolution: {integrity: sha512-cGWOb2WBWbJhqvupzxjnKAwGLxxAEYPg51sk76yZ5nVe5D03mw7Vx5yo8llaIEqYhP5O39M8QlrNWclgLfKVrA==} @@ -1712,9 +1722,6 @@ packages: cpu: [x64] os: [win32] - '@scure/base@1.1.3': - resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} - '@scure/base@1.1.7': resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==} @@ -1774,9 +1781,6 @@ packages: resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} - '@solidity-parser/parser@0.17.0': - resolution: {integrity: sha512-Nko8R0/kUo391jsEHHxrGM07QFdnPGvlmox4rmH0kNiNAashItAilhy4Mv4pK5gQmW5f4sXAF58fwJbmlkGcVw==} - '@solidity-parser/parser@0.18.0': resolution: {integrity: sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==} @@ -1972,9 +1976,15 @@ packages: '@types/pbkdf2@3.1.0': resolution: {integrity: sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==} + '@types/prettier@2.7.3': + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + '@types/prop-types@15.7.11': resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + '@types/qrcode@1.5.5': + resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==} + '@types/react-dom@18.3.0': resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} @@ -2564,8 +2574,8 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - concurrently@8.2.1: - resolution: {integrity: sha512-nVraf3aXOpIcNud5pB9M82p1tynmZkrSGQ1p6X/VY8cJ+2LMVqAgXsJxYYefACSHbTYlm92O1xuhdGTjwoEvbQ==} + concurrently@8.2.2: + resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} engines: {node: ^14.13.0 || >=16.0.0} hasBin: true @@ -2775,10 +2785,6 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - ds-test@https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0: - resolution: {tarball: https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0} - version: 1.0.0 - duplexify@4.1.2: resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} @@ -2820,6 +2826,11 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + envfile@6.18.0: + resolution: {integrity: sha512-IsYv64dtlNXTm4huvCBpbXsdZQurYUju9WoYCkSj+SDYpO3v4/dq346QsCnNZ3JcnWw0G3E6+saVkVtmPw98Gg==} + engines: {node: '>=10'} + hasBin: true + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -2854,10 +2865,6 @@ packages: engines: {node: '>=12'} hasBin: true - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -3118,9 +3125,9 @@ packages: for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - forge-std@https://codeload.github.com/foundry-rs/forge-std/tar.gz/74cfb77e308dd188d2f58864aaf44963ae6b88b1: - resolution: {tarball: https://codeload.github.com/foundry-rs/forge-std/tar.gz/74cfb77e308dd188d2f58864aaf44963ae6b88b1} - version: 1.6.0 + forge-std@https://codeload.github.com/foundry-rs/forge-std/tar.gz/bb4ceea94d6f10eeb5b41dc2391c6c8bf8e734ef: + resolution: {tarball: https://codeload.github.com/foundry-rs/forge-std/tar.gz/bb4ceea94d6f10eeb5b41dc2391c6c8bf8e734ef} + version: 1.7.6 form-data-encoder@2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} @@ -3224,6 +3231,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} @@ -3720,9 +3728,6 @@ packages: resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} engines: {node: '>=10.0.0'} - keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -4314,8 +4319,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-solidity@1.3.1: - resolution: {integrity: sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==} + prettier-plugin-solidity@1.4.0: + resolution: {integrity: sha512-XXEOjKaY4nC0Hjqv+DMo+A7ZNbS70jil0phl1mdMAbKf45pkxfhPXrNBMDSWsTYTldwSX+8JOwsUynO3enVc5A==} engines: {node: '>=16'} peerDependencies: prettier: '>=2.3.0' @@ -4325,11 +4330,6 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.0.3: - resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} - engines: {node: '>=14'} - hasBin: true - prettier@3.3.3: resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} @@ -4715,13 +4715,10 @@ packages: engines: {node: '>=8.0.0'} hasBin: true - solhint@5.0.1: - resolution: {integrity: sha512-QeQLS9HGCnIiibt+xiOa/+MuP7BWz9N7C5+Mj9pLHshdkNhuo3AzCpWmjfWVZBUuwIUO3YyCRVIcYLR3YOKGfg==} + solhint@5.0.3: + resolution: {integrity: sha512-OLCH6qm/mZTCpplTXzXTJGId1zrtNuDYP5c2e6snIv/hdRVxPfBBz/bAlL91bY/Accavkayp2Zp2BaDSrLVXTQ==} hasBin: true - solidity-comments-extractor@0.0.8: - resolution: {integrity: sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==} - solidity-coverage@0.8.12: resolution: {integrity: sha512-8cOB1PtjnjFRqOgwFiD8DaUsYJtVJ6+YdXQtSZDrLGf8cdhhh8xzTtGzVTGeBf15kTv0v7lYPJlV/az7zLEPJw==} hasBin: true @@ -4947,6 +4944,9 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -5029,8 +5029,8 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true @@ -5222,8 +5222,8 @@ packages: react: optional: true - viem@2.19.4: - resolution: {integrity: sha512-JdhK3ui3uPD2tnpqGNkJaDQV4zTfOeKXcF+VrU8RG88Dn2e0lFjv6l7m0YNmYLsHm+n5vFFfCLcUrTk6xcYv5w==} + viem@2.19.6: + resolution: {integrity: sha512-7jiuX+ZncPZE8iEzgW/iO7EaAMRJEW8hYeJy9YFTMK34Wa9aWzqOm4lrORgemlsqJ/kpQG4InzhG0jc2HY67FA==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -5415,7 +5415,6 @@ packages: workbox-google-analytics@7.0.0: resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==} - deprecated: It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained workbox-navigation-preload@7.0.0: resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==} @@ -5575,11 +5574,6 @@ snapshots: jsonpointer: 5.0.1 leven: 3.1.0 - '@babel/code-frame@7.23.5': - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 @@ -5592,7 +5586,7 @@ snapshots: '@babel/core@7.24.0': dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 '@babel/generator': 7.23.6 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) @@ -5649,7 +5643,7 @@ snapshots: '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 '@babel/helper-compilation-targets@7.23.6': dependencies: @@ -5690,8 +5684,8 @@ snapshots: '@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.6 @@ -5711,7 +5705,7 @@ snapshots: '@babel/helper-member-expression-to-functions@7.23.0': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 '@babel/helper-module-imports@7.22.15': dependencies: @@ -5733,15 +5727,6 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 - '@babel/helper-module-transforms@7.23.3(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -5754,7 +5739,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.22.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 '@babel/helper-plugin-utils@7.22.5': {} @@ -5787,7 +5772,7 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.22.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 '@babel/helper-split-export-declaration@7.22.6': dependencies: @@ -5808,8 +5793,8 @@ snapshots: '@babel/helper-wrap-function@7.22.20': dependencies: '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 '@babel/helpers@7.24.0': dependencies: @@ -5824,12 +5809,6 @@ snapshots: '@babel/template': 7.25.0 '@babel/types': 7.25.2 - '@babel/highlight@7.23.4': - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - '@babel/highlight@7.24.7': dependencies: '@babel/helper-validator-identifier': 7.24.7 @@ -5848,12 +5827,12 @@ snapshots: '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.25.2) @@ -5864,47 +5843,47 @@ snapshots: '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.0)': dependencies: @@ -5914,101 +5893,103 @@ snapshots: '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-async-generator-functions@7.22.15(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.25.2) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) '@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) '@babel/plugin-transform-classes@7.22.15(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-replace-supers': 7.22.20(@babel/core@7.25.2) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 @@ -6016,178 +5997,186 @@ snapshots: '@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.24.0 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/template': 7.25.0 '@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) '@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) '@babel/plugin-transform-for-of@7.22.15(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-function-name@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) '@babel/plugin-transform-literals@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) '@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-new-target@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) '@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) '@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.25.2)': dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.25.2 '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.25.2) '@babel/plugin-transform-object-super@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-replace-supers': 7.22.20(@babel/core@7.25.2) '@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) '@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) '@babel/plugin-transform-parameters@7.22.15(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) '@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2)': dependencies: @@ -6202,70 +6191,70 @@ snapshots: '@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 regenerator-transform: 0.15.2 '@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-spread@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@babel/preset-env@7.22.20(@babel/core@7.25.2)': dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.25.2 '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.25.2) '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.25.2) '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) @@ -6336,7 +6325,7 @@ snapshots: '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.25.2) '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.25.2) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.25.2) babel-plugin-polyfill-corejs3: 0.8.4(@babel/core@7.25.2) babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.25.2) @@ -6348,8 +6337,8 @@ snapshots: '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.24.0 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/types': 7.25.2 esutils: 2.0.3 '@babel/regjsgen@0.8.0': {} @@ -6360,7 +6349,7 @@ snapshots: '@babel/template@7.24.0': dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 '@babel/parser': 7.24.0 '@babel/types': 7.24.0 @@ -6372,7 +6361,7 @@ snapshots: '@babel/traverse@7.24.0': dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 '@babel/generator': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 @@ -6387,7 +6376,7 @@ snapshots: '@babel/traverse@7.24.0(supports-color@5.5.0)': dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 '@babel/generator': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 @@ -6545,9 +6534,9 @@ snapshots: '@eslint/object-schema@2.1.4': {} - '@ethereum-attestation-service/eas-contracts@1.4.1(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10)': + '@ethereum-attestation-service/eas-contracts@1.4.1(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10)': dependencies: - hardhat: 2.22.1(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10) + hardhat: 2.22.1(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - c-kzg @@ -6556,9 +6545,9 @@ snapshots: - typescript - utf-8-validate - '@ethereum-attestation-service/eas-contracts@1.7.1(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10)': + '@ethereum-attestation-service/eas-contracts@1.7.1(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10)': dependencies: - hardhat: 2.22.4(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10) + hardhat: 2.22.4(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - c-kzg @@ -6567,9 +6556,9 @@ snapshots: - typescript - utf-8-validate - '@ethereum-attestation-service/eas-sdk@2.5.0(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10)': + '@ethereum-attestation-service/eas-sdk@2.5.0(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10)': dependencies: - '@ethereum-attestation-service/eas-contracts': 1.4.1(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10) + '@ethereum-attestation-service/eas-contracts': 1.4.1(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10) '@openzeppelin/merkle-tree': 1.0.6 ethers: 6.13.2(bufferutil@4.0.7)(utf-8-validate@5.0.10) js-base64: 3.7.7 @@ -6903,8 +6892,8 @@ snapshots: '@jridgewell/source-map@0.3.5': dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/sourcemap-codec@1.4.15': {} @@ -7206,6 +7195,8 @@ snapshots: dependencies: '@octokit/openapi-types': 20.0.0 + '@openzeppelin/contracts-upgradeable@4.8.3': {} + '@openzeppelin/merkle-tree@1.0.6': dependencies: '@ethersproject/abi': 5.7.0 @@ -7320,7 +7311,7 @@ snapshots: - bufferutil - utf-8-validate - '@privy-io/react-auth@1.77.0(@babel/core@7.24.0)(@types/react@18.3.3)(bufferutil@4.0.7)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@privy-io/react-auth@1.77.0(@babel/core@7.24.0)(@types/react@18.3.3)(bufferutil@4.0.7)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: '@coinbase/wallet-sdk': 4.0.3 '@ethersproject/abstract-signer': 5.7.0 @@ -7351,7 +7342,7 @@ snapshots: libphonenumber-js: 1.10.47 lokijs: 1.5.12 md5: 2.3.0 - mipd: 0.0.7(typescript@5.2.2) + mipd: 0.0.7(typescript@5.5.4) ofetch: 1.3.4 pino-pretty: 10.3.1 qrcode: 1.5.3 @@ -7362,7 +7353,7 @@ snapshots: styled-components: 5.3.11(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) tinycolor2: 1.6.0 uuid: 9.0.1 - viem: 2.19.4(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.19.6(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4) web3-core: 1.10.4(encoding@0.1.13) web3-core-helpers: 1.10.3 transitivePeerDependencies: @@ -7393,11 +7384,13 @@ snapshots: '@rollup/plugin-babel@5.3.1(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@2.79.1)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.7 '@rollup/pluginutils': 3.1.0(rollup@2.79.1) rollup: 2.79.1 optionalDependencies: '@types/babel__core': 7.20.5 + transitivePeerDependencies: + - supports-color '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1)': dependencies: @@ -7478,21 +7471,19 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.20.0': optional: true - '@scure/base@1.1.3': {} - '@scure/base@1.1.7': {} '@scure/bip32@1.1.5': dependencies: '@noble/hashes': 1.2.0 '@noble/secp256k1': 1.7.1 - '@scure/base': 1.1.3 + '@scure/base': 1.1.7 '@scure/bip32@1.3.1': dependencies: '@noble/curves': 1.1.0 '@noble/hashes': 1.3.3 - '@scure/base': 1.1.3 + '@scure/base': 1.1.7 '@scure/bip32@1.4.0': dependencies: @@ -7503,12 +7494,12 @@ snapshots: '@scure/bip39@1.1.1': dependencies: '@noble/hashes': 1.2.0 - '@scure/base': 1.1.3 + '@scure/base': 1.1.7 '@scure/bip39@1.2.1': dependencies: '@noble/hashes': 1.3.3 - '@scure/base': 1.1.3 + '@scure/base': 1.1.7 '@scure/bip39@1.3.0': dependencies: @@ -7572,8 +7563,6 @@ snapshots: '@sindresorhus/is@5.6.0': {} - '@solidity-parser/parser@0.17.0': {} - '@solidity-parser/parser@0.18.0': {} '@stablelib/aead@1.0.1': {} @@ -7707,12 +7696,12 @@ snapshots: '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.24.0) '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.24.0) - '@svgr/core@8.1.0(typescript@5.2.2)': + '@svgr/core@8.1.0(typescript@5.5.4)': dependencies: '@babel/core': 7.24.0 '@svgr/babel-preset': 8.1.0(@babel/core@7.24.0) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.2.2) + cosmiconfig: 8.3.6(typescript@5.5.4) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -7723,11 +7712,11 @@ snapshots: '@babel/types': 7.24.0 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.2.2))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.5.4))': dependencies: '@babel/core': 7.24.0 '@svgr/babel-preset': 8.1.0(@babel/core@7.24.0) - '@svgr/core': 8.1.0(typescript@5.2.2) + '@svgr/core': 8.1.0(typescript@5.5.4) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: @@ -7807,8 +7796,14 @@ snapshots: dependencies: '@types/node': 22.1.0 + '@types/prettier@2.7.3': {} + '@types/prop-types@15.7.11': {} + '@types/qrcode@1.5.5': + dependencies: + '@types/node': 22.1.0 + '@types/react-dom@18.3.0': dependencies: '@types/react': 18.3.3 @@ -7828,34 +7823,34 @@ snapshots: '@types/trusted-types@2.0.4': {} - '@typescript-eslint/eslint-plugin@8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.2.2))(eslint@9.9.0(jiti@1.21.0))(typescript@5.2.2)': + '@typescript-eslint/eslint-plugin@8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.2.2) + '@typescript-eslint/parser': 8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4) '@typescript-eslint/scope-manager': 8.1.0 - '@typescript-eslint/type-utils': 8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.2.2) - '@typescript-eslint/utils': 8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.2.2) + '@typescript-eslint/type-utils': 8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4) + '@typescript-eslint/utils': 8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4) '@typescript-eslint/visitor-keys': 8.1.0 eslint: 9.9.0(jiti@1.21.0) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.2.2) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.2.2)': + '@typescript-eslint/parser@8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4)': dependencies: '@typescript-eslint/scope-manager': 8.1.0 '@typescript-eslint/types': 8.1.0 - '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 8.1.0 debug: 4.3.4 eslint: 9.9.0(jiti@1.21.0) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -7864,21 +7859,21 @@ snapshots: '@typescript-eslint/types': 8.1.0 '@typescript-eslint/visitor-keys': 8.1.0 - '@typescript-eslint/type-utils@8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.2.2)': + '@typescript-eslint/type-utils@8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4)': dependencies: - '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.2.2) - '@typescript-eslint/utils': 8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4) debug: 4.3.4 - ts-api-utils: 1.3.0(typescript@5.2.2) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - eslint - supports-color '@typescript-eslint/types@8.1.0': {} - '@typescript-eslint/typescript-estree@8.1.0(typescript@5.2.2)': + '@typescript-eslint/typescript-estree@8.1.0(typescript@5.5.4)': dependencies: '@typescript-eslint/types': 8.1.0 '@typescript-eslint/visitor-keys': 8.1.0 @@ -7887,18 +7882,18 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.2.2) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.2.2)': + '@typescript-eslint/utils@8.1.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0(jiti@1.21.0)) '@typescript-eslint/scope-manager': 8.1.0 '@typescript-eslint/types': 8.1.0 - '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.5.4) eslint: 9.9.0(jiti@1.21.0) transitivePeerDependencies: - supports-color @@ -8250,9 +8245,9 @@ snapshots: abbrev@1.0.9: {} - abitype@1.0.5(typescript@5.2.2)(zod@3.22.4): + abitype@1.0.5(typescript@5.5.4)(zod@3.22.4): optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 zod: 3.22.4 abort-controller@3.0.0: @@ -8397,7 +8392,7 @@ snapshots: babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.25.2): dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.25.2 '@babel/core': 7.25.2 '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.25.2) semver: 6.3.1 @@ -8539,7 +8534,7 @@ snapshots: '@types/http-cache-semantics': 4.0.4 get-stream: 6.0.1 http-cache-semantics: 4.1.1 - keyv: 4.5.3 + keyv: 4.5.4 mimic-response: 4.0.0 normalize-url: 8.0.1 responselike: 3.0.0 @@ -8667,7 +8662,7 @@ snapshots: concat-map@0.0.1: {} - concurrently@8.2.1: + concurrently@8.2.2: dependencies: chalk: 4.1.2 date-fns: 2.30.0 @@ -8694,16 +8689,16 @@ snapshots: core-js-compat@3.33.0: dependencies: - browserslist: 4.23.0 + browserslist: 4.23.3 - cosmiconfig@8.3.6(typescript@5.2.2): + cosmiconfig@8.3.6(typescript@5.5.4): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 crc-32@1.2.2: {} @@ -8862,8 +8857,6 @@ snapshots: dotenv@16.4.5: {} - ds-test@https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0: {} - duplexify@4.1.2: dependencies: end-of-stream: 1.4.4 @@ -8910,6 +8903,8 @@ snapshots: env-paths@2.2.1: {} + envfile@6.18.0: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -9014,8 +9009,6 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - escalade@3.1.1: {} - escalade@3.1.2: {} escape-string-regexp@1.0.5: {} @@ -9355,7 +9348,7 @@ snapshots: dependencies: is-callable: 1.2.7 - forge-std@https://codeload.github.com/foundry-rs/forge-std/tar.gz/74cfb77e308dd188d2f58864aaf44963ae6b88b1: {} + forge-std@https://codeload.github.com/foundry-rs/forge-std/tar.gz/bb4ceea94d6f10eeb5b41dc2391c6c8bf8e734ef: {} form-data-encoder@2.1.4: {} @@ -9517,7 +9510,7 @@ snapshots: dir-glob: 3.0.1 fast-glob: 3.3.2 glob: 7.2.3 - ignore: 5.2.4 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -9526,7 +9519,7 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.2.4 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -9584,7 +9577,7 @@ snapshots: optionalDependencies: uglify-js: 3.17.4 - hardhat@2.22.1(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10): + hardhat@2.22.1(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 @@ -9630,14 +9623,14 @@ snapshots: uuid: 8.3.2 ws: 7.5.9(bufferutil@4.0.7)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - bufferutil - c-kzg - supports-color - utf-8-validate - hardhat@2.22.4(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10): + hardhat@2.22.4(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 @@ -9683,7 +9676,7 @@ snapshots: uuid: 8.3.2 ws: 7.5.9(bufferutil@4.0.7)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - bufferutil - c-kzg @@ -10049,10 +10042,6 @@ snapshots: node-gyp-build: 4.6.1 readable-stream: 3.6.2 - keyv@4.5.3: - dependencies: - json-buffer: 3.0.1 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -10253,9 +10242,9 @@ snapshots: minimist@1.2.8: {} - mipd@0.0.7(typescript@5.2.2): + mipd@0.0.7(typescript@5.5.4): optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 mkdirp@0.5.6: dependencies: @@ -10491,7 +10480,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -10520,9 +10509,9 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 - permissionless@0.1.44(viem@2.19.4(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.22.4)): + permissionless@0.1.44(viem@2.19.6(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4)): dependencies: - viem: 2.19.4(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.19.6(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4) picocolors@1.0.0: {} @@ -10638,18 +10627,15 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-solidity@1.3.1(prettier@3.3.3): + prettier-plugin-solidity@1.4.0(prettier@3.3.3): dependencies: - '@solidity-parser/parser': 0.17.0 + '@solidity-parser/parser': 0.18.0 prettier: 3.3.3 semver: 7.6.0 - solidity-comments-extractor: 0.0.8 prettier@2.8.8: optional: true - prettier@3.0.3: {} - prettier@3.3.3: {} pretty-bytes@5.6.0: {} @@ -10892,7 +10878,7 @@ snapshots: rollup-plugin-terser@7.0.2(rollup@2.79.1): dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 @@ -11070,7 +11056,7 @@ snapshots: transitivePeerDependencies: - debug - solhint@5.0.1(typescript@5.2.2): + solhint@5.0.3(typescript@5.5.4): dependencies: '@solidity-parser/parser': 0.18.0 ajv: 6.12.6 @@ -11078,10 +11064,10 @@ snapshots: ast-parents: 0.0.1 chalk: 4.1.2 commander: 10.0.1 - cosmiconfig: 8.3.6(typescript@5.2.2) + cosmiconfig: 8.3.6(typescript@5.5.4) fast-diff: 1.3.0 glob: 8.1.0 - ignore: 5.2.4 + ignore: 5.3.2 js-yaml: 4.1.0 latest-version: 7.0.0 lodash: 4.17.21 @@ -11095,9 +11081,7 @@ snapshots: transitivePeerDependencies: - typescript - solidity-comments-extractor@0.0.8: {} - - solidity-coverage@0.8.12(hardhat@2.22.4(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10)): + solidity-coverage@0.8.12(hardhat@2.22.4(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10)): dependencies: '@ethersproject/abi': 5.7.0 '@solidity-parser/parser': 0.18.0 @@ -11108,7 +11092,7 @@ snapshots: ghost-testrpc: 0.0.2 global-modules: 2.0.0 globby: 10.0.2 - hardhat: 2.22.4(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10) + hardhat: 2.22.4(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10) jsonschema: 1.4.1 lodash: 4.17.21 mocha: 10.2.0 @@ -11335,7 +11319,7 @@ snapshots: terser@5.21.0: dependencies: '@jridgewell/source-map': 0.3.5 - acorn: 8.11.3 + acorn: 8.12.1 commander: 2.20.3 source-map-support: 0.5.21 @@ -11372,6 +11356,8 @@ snapshots: toidentifier@1.0.1: {} + toml@3.0.0: {} + tr46@0.0.3: {} tr46@1.0.1: @@ -11380,9 +11366,9 @@ snapshots: tree-kill@1.2.2: {} - ts-api-utils@1.3.0(typescript@5.2.2): + ts-api-utils@1.3.0(typescript@5.5.4): dependencies: - typescript: 5.2.2 + typescript: 5.5.4 ts-interface-checker@0.1.13: {} @@ -11447,7 +11433,7 @@ snapshots: dependencies: is-typedarray: 1.0.0 - typescript@5.2.2: {} + typescript@5.5.4: {} ua-parser-js@1.0.37: {} @@ -11544,7 +11530,7 @@ snapshots: update-browserslist-db@1.0.13(browserslist@4.23.0): dependencies: browserslist: 4.23.0 - escalade: 3.1.1 + escalade: 3.1.2 picocolors: 1.0.0 update-browserslist-db@1.1.0(browserslist@4.23.3): @@ -11597,19 +11583,19 @@ snapshots: '@types/react': 18.3.3 react: 18.2.0 - viem@2.19.4(bufferutil@4.0.7)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.22.4): + viem@2.19.6(bufferutil@4.0.7)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4): dependencies: '@adraffy/ens-normalize': 1.10.0 '@noble/curves': 1.4.0 '@noble/hashes': 1.4.0 '@scure/bip32': 1.4.0 '@scure/bip39': 1.3.0 - abitype: 1.0.5(typescript@5.2.2)(zod@3.22.4) + abitype: 1.0.5(typescript@5.5.4)(zod@3.22.4) isows: 1.0.4(ws@8.17.1(bufferutil@4.0.7)(utf-8-validate@5.0.10)) webauthn-p256: 0.0.5 ws: 8.17.1(bufferutil@4.0.7)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -11636,11 +11622,11 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-svgr@4.2.0(rollup@2.79.1)(typescript@5.2.2)(vite@5.4.0(@types/node@22.1.0)(terser@5.21.0)): + vite-plugin-svgr@4.2.0(rollup@2.79.1)(typescript@5.5.4)(vite@5.4.0(@types/node@22.1.0)(terser@5.21.0)): dependencies: '@rollup/pluginutils': 5.0.5(rollup@2.79.1) - '@svgr/core': 8.1.0(typescript@5.2.2) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.2.2)) + '@svgr/core': 8.1.0(typescript@5.5.4) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.5.4)) vite: 5.4.0(@types/node@22.1.0)(terser@5.21.0) transitivePeerDependencies: - rollup @@ -12026,7 +12012,7 @@ snapshots: yargs@16.2.0: dependencies: cliui: 7.0.4 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -12036,7 +12022,7 @@ snapshots: yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3