diff --git a/.env.example b/.env.example index a099c014e..1ddf1011c 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,4 @@ -# MAINNET +# ETH MAINNET MAINNET_URL = https://eth-mainnet.g.alchemy.com/v2/1234123412341234 MAINNET_PRIVATEKEY= 12341234123412341234123412341234 @@ -14,10 +14,19 @@ TENDERLY_PRIVATEKEY = # ETHERSCAN APIY KEY ETHERSCAN_API_KEY = ETHERSCANAPIKEYETHERSCANAPIKEY -# TESTNET +# STORY MAINNET +STORY_URL_MAINNET = http:// +SAFE_MULTISIG_MAINNET = +SAFE_PROPOSER_MAINNET_ADDRESS = +SAFE_PROPOSER_MAINNET_PRIVATE_KEY = + +# STORY TESTNET STORY_URL = http:// STORY_CHAINID = 1315 STORY_PRIVATEKEY = STORY_USER1 = STORY_USER2 = STORY_ERC721 = +SAFE_MULTISIG_AENEID = +SAFE_PROPOSER_AENEID_ADDRESS = +SAFE_PROPOSER_AENEID_PRIVATE_KEY = diff --git a/hardhat.config.ts b/hardhat.config.ts index a7811b0c1..2a192431f 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -13,6 +13,7 @@ import "hardhat-contract-sizer" // npx hardhat size-contracts import "solidity-coverage" import "solidity-docgen" import "@nomicfoundation/hardhat-chai-matchers" +import "./script/hardhat/utils/safePropose" require("dotenv").config() diff --git a/package.json b/package.json index 25697844b..8a1c2c45a 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,9 @@ "dependencies": { "@openzeppelin/contracts": "5.2.0", "@openzeppelin/contracts-upgradeable": "5.2.0", + "@safe-global/api-kit": "^3.0.1", + "@safe-global/protocol-kit": "^6.0.3", + "@safe-global/types-kit": "^2.0.1", "erc6551": "^0.3.1", "solady": "^0.0.281" } diff --git a/script/foundry/utils/JsonBatchTxHelper.s.sol b/script/foundry/utils/JsonBatchTxHelper.s.sol index e89c7fc85..282e32937 100644 --- a/script/foundry/utils/JsonBatchTxHelper.s.sol +++ b/script/foundry/utils/JsonBatchTxHelper.s.sol @@ -16,6 +16,7 @@ contract JsonBatchTxHelper is Script { uint256 value; bytes data; uint8 operation; + string txType; // schedule, execute, cancel } Transaction[] private transactions; @@ -25,12 +26,13 @@ contract JsonBatchTxHelper is Script { chainId = (block.chainid).toString(); } - function _writeTx(address _to, uint256 _value, bytes memory _data) internal { + function _writeTx(address _to, uint256 _value, bytes memory _data, string memory _type) internal { transactions.push(Transaction({ to: _to, value: _value, data: _data, - operation: 0 + operation: 0, + txType: _type })); console2.log("Added tx to ", _to); console2.log("Value: ", _value); @@ -39,18 +41,19 @@ contract JsonBatchTxHelper is Script { console2.log("Operation: 0"); } - function _writeBatchTxsOutput(string memory _action) internal { + function _writeBatchTxsOutput(string memory _action, string memory _type) internal { + uint256 txCounter; string memory json = "["; for (uint i = 0; i < transactions.length; i++) { - if (i > 0) { - json = string(abi.encodePacked(json, ",")); - } + if (keccak256(abi.encodePacked(transactions[i].txType)) != keccak256(abi.encodePacked(_type))) continue; + if (txCounter > 0) json = string(abi.encodePacked(json, ",")); json = string(abi.encodePacked(json, "{")); json = string(abi.encodePacked(json, '"to":"', vm.toString(transactions[i].to), '",')); json = string(abi.encodePacked(json, '"value":', vm.toString(transactions[i].value), ',')); json = string(abi.encodePacked(json, '"data":"', vm.toString(transactions[i].data), '",')); json = string(abi.encodePacked(json, '"operation":', vm.toString(transactions[i].operation))); json = string(abi.encodePacked(json, "}")); + txCounter++; } json = string(abi.encodePacked(json, "]")); diff --git a/script/foundry/utils/upgrades/TxGenerator.s.sol b/script/foundry/utils/upgrades/TxGenerator.s.sol index 877d6c62a..d9a4953d7 100644 --- a/script/foundry/utils/upgrades/TxGenerator.s.sol +++ b/script/foundry/utils/upgrades/TxGenerator.s.sol @@ -72,9 +72,9 @@ abstract contract TxGenerator is Script, JsonDeploymentHandler, JsonBatchTxHelpe _generateActions(); - _writeBatchTxsOutput(string.concat("schedule", "-", fromVersion, "-to-", toVersion)); // JsonBatchTxHelper.s.sol - _writeBatchTxsOutput(string.concat("execute", "-", fromVersion, "-to-", toVersion)); // JsonBatchTxHelper.s.sol - _writeBatchTxsOutput(string.concat("cancel", "-", fromVersion, "-to-", toVersion)); // JsonBatchTxHelper.s.sol + _writeBatchTxsOutput(string.concat("schedule", "-", fromVersion, "-to-", toVersion), "schedule"); // JsonBatchTxHelper.s.sol + _writeBatchTxsOutput(string.concat("execute", "-", fromVersion, "-to-", toVersion), "execute"); // JsonBatchTxHelper.s.sol + _writeBatchTxsOutput(string.concat("cancel", "-", fromVersion, "-to-", toVersion), "cancel"); // JsonBatchTxHelper.s.sol } function _generateActions() internal virtual; @@ -96,7 +96,7 @@ abstract contract TxGenerator is Script, JsonDeploymentHandler, JsonBatchTxHelpe bytes memory data = _getExecutionData(key, p); if (data.length == 0) revert("No data to schedule"); - _writeTx(address(accessManager), 0, abi.encodeCall(AccessManager.schedule, (p.proxy, data, 0))); + _writeTx(address(accessManager), 0, abi.encodeCall(AccessManager.schedule, (p.proxy, data, 0)), "schedule"); console2.log("--------------------"); } @@ -116,7 +116,7 @@ abstract contract TxGenerator is Script, JsonDeploymentHandler, JsonBatchTxHelpe console2.log("Execute scheduled tx"); console2.logBytes(data); - _writeTx(address(accessManager), 0, abi.encodeCall(AccessManager.execute, (p.proxy, data))); + _writeTx(address(accessManager), 0, abi.encodeCall(AccessManager.execute, (p.proxy, data)), "execute"); } function _generateCancelTx(string memory key) internal { @@ -130,7 +130,7 @@ abstract contract TxGenerator is Script, JsonDeploymentHandler, JsonBatchTxHelpe bytes memory data = _getExecutionData(key, p); if (data.length == 0) revert("No data to schedule"); - _writeTx(address(accessManager), 0, abi.encodeCall(AccessManager.cancel, (deployer, p.proxy, data))); + _writeTx(address(accessManager), 0, abi.encodeCall(AccessManager.cancel, (deployer, p.proxy, data)), "cancel"); console2.log("--------------------"); } diff --git a/script/hardhat/utils/safePropose.ts b/script/hardhat/utils/safePropose.ts new file mode 100644 index 000000000..db1f6b7cb --- /dev/null +++ b/script/hardhat/utils/safePropose.ts @@ -0,0 +1,58 @@ +import SafeApiKit from '@safe-global/api-kit' +import Safe from '@safe-global/protocol-kit' +import { + MetaTransactionData, + OperationType +} from '@safe-global/types-kit' + +require("dotenv").config() + +task("safe-propose", "Propose a Safe transaction") + .addParam("chainid", "The chainId of the Safe") + .addParam("operation", "The operation type: schedule, execute or cancel") + .addParam("previousversion", "The previous version") + .addParam("newversion", "The next version") + .setAction(async (taskArgs, hre) => { + const chainId = parseInt(taskArgs.chainid) + if (chainId !== Number(process.env.STORY_CHAINID) && chainId !== Number(process.env.STORY_CHAINID_MAINNET)) { + throw new Error('Invalid chainId') + } + + const RPC_URL = chainId === Number(process.env.STORY_CHAINID_MAINNET) ? process.env.STORY_URL_MAINNET : process.env.STORY_URL + const SAFE_ADDRESS = chainId === Number(process.env.STORY_CHAINID_MAINNET) ? process.env.SAFE_MULTISIG_MAINNET_ADDRESS : process.env.SAFE_MULTISIG_AENEID_ADDRESS + const SAFE_PROPOSER_ADDRESS = chainId === Number(process.env.STORY_CHAINID_MAINNET) ? process.env.SAFE_PROPOSER_MAINNET_ADDRESS : process.env.SAFE_PROPOSER_AENEID_ADDRESS + const SAFE_PROPOSER_PRIVATE_KEY = chainId === Number(process.env.STORY_CHAINID_MAINNET) ? process.env.SAFE_PROPOSER_MAINNET_PRIVATE_KEY : process.env.SAFE_PROPOSER_AENEID_PRIVATE_KEY + const TX_SERVICE_URL = chainId === Number(process.env.STORY_CHAINID_MAINNET) ? 'https://transaction.safe.story.foundation/api' : 'https://transaction-testnet.safe.story.foundation/api' + + const apiKit = new SafeApiKit({ + chainId: BigInt(chainId), + txServiceUrl: TX_SERVICE_URL + }) + + const protocolKitOwner1 = await Safe.init({ + provider: RPC_URL, + signer: SAFE_PROPOSER_PRIVATE_KEY, + safeAddress: SAFE_ADDRESS + }) + + // Import the txs file + const safeTransactionData: MetaTransactionData[] = require(`../../../deploy-out/${taskArgs.operation}-v${taskArgs.previousversion}-to-v${taskArgs.newversion}-${chainId}.json`) + + const safeTransaction = await protocolKitOwner1.createTransaction({ + transactions: safeTransactionData + }) + + const safeTxHash = await protocolKitOwner1.getTransactionHash(safeTransaction) + const signature = await protocolKitOwner1.signHash(safeTxHash) + + // Propose transaction to the service + await apiKit.proposeTransaction({ + safeAddress: SAFE_ADDRESS, + safeTransactionData: safeTransaction.data, + safeTxHash, + senderAddress: SAFE_PROPOSER_ADDRESS, + senderSignature: signature.data + }) + + console.log('Transaction successfully proposed') +}) diff --git a/yarn.lock b/yarn.lock index b01eb4529..88e464fba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,11 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== +"@adraffy/ens-normalize@^1.10.1": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz#42cc67c5baa407ac25059fcd7d405cc5ecdb0c33" + integrity sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg== + "@aws-crypto/sha256-js@1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz#02acd1a1fda92896fc5a28ec7c6e164644ea32fc" @@ -570,6 +575,20 @@ dependencies: "@noble/hashes" "1.3.3" +"@noble/curves@1.8.2", "@noble/curves@~1.8.1": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.2.tgz#8f24c037795e22b90ae29e222a856294c1d9ffc7" + integrity sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g== + dependencies: + "@noble/hashes" "1.7.2" + +"@noble/curves@^1.6.0", "@noble/curves@~1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.0.tgz#13e0ca8be4a0ce66c113693a94514e5599f40cfc" + integrity sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg== + dependencies: + "@noble/hashes" "1.8.0" + "@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" @@ -585,6 +604,16 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== +"@noble/hashes@1.7.2", "@noble/hashes@~1.7.1": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.2.tgz#d53c65a21658fb02f3303e7ee3ba89d6754c64b4" + integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== + +"@noble/hashes@1.8.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== + "@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" @@ -931,6 +960,15 @@ proper-lockfile "^4.1.1" solidity-ast "^0.4.51" +"@peculiar/asn1-schema@^2.3.13": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.15.tgz#e926bfdeed51945a06f38be703499e7d8341a5d3" + integrity sha512-QPeD8UA8axQREpgR5UTAfu2mqQmm97oUqahDtNdBcfj3qAnoXzFdQW+aNf/tD2WVXF8Fhmftxoj0eMIT++gX2w== + dependencies: + asn1js "^3.0.5" + pvtsutils "^1.3.6" + tslib "^2.8.1" + "@pkgr/core@^0.1.0": version "0.1.1" resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" @@ -962,11 +1000,60 @@ resolved "https://registry.yarnpkg.com/@prettier/sync/-/sync-0.3.0.tgz#91f2cfc23490a21586d1cf89c6f72157c000ca1e" integrity sha512-3dcmCyAxIcxy036h1I7MQU/uEEBq8oLwf1CE3xeze+MPlgkdlb/+w6rGR/1dhp6Hqi17fRS6nvwnOzkESxEkOw== +"@safe-global/api-kit@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@safe-global/api-kit/-/api-kit-3.0.1.tgz#cea6eb27b33a34568b29ac0507e62714445e35e5" + integrity sha512-ks7vFMU3l/xl1TWKL2c+a8l5aQRCtOtSMMpxfJIMsJvtvPSTAUx/WDFKqtVlMhVP/QrqaL7YiTw8hM2vhkTdDQ== + dependencies: + "@safe-global/protocol-kit" "^6.0.1" + "@safe-global/types-kit" "^2.0.0" + node-fetch "^2.7.0" + viem "^2.21.8" + +"@safe-global/protocol-kit@^6.0.1", "@safe-global/protocol-kit@^6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@safe-global/protocol-kit/-/protocol-kit-6.0.3.tgz#7f84531bbfa9a1e2ea7bee859927a64666dee242" + integrity sha512-2FLDWgbKSxq1hZAY9qj7hqyPQLxPq7sWn9+uuJz0tkZZLccvcCvxA/sHagBj+6GAZR4qhrnHIJPahyFRA9cZug== + dependencies: + "@safe-global/safe-deployments" "^1.37.32" + "@safe-global/safe-modules-deployments" "^2.2.7" + "@safe-global/types-kit" "^2.0.1" + abitype "^1.0.2" + semver "^7.7.1" + viem "^2.21.8" + optionalDependencies: + "@noble/curves" "^1.6.0" + "@peculiar/asn1-schema" "^2.3.13" + +"@safe-global/safe-deployments@^1.37.32": + version "1.37.32" + resolved "https://registry.yarnpkg.com/@safe-global/safe-deployments/-/safe-deployments-1.37.32.tgz#7a1dcd6358aa0f4917004426d7e2428e7eef0391" + integrity sha512-3XRy6TnVz0uymPxMNo7WkaK88sL12ZpIMKOfrNHkODUZCxCO4GFA0FFfjByAPS1LAXfmV7Mulk9Zx1n9vqR8Cg== + dependencies: + semver "^7.6.2" + +"@safe-global/safe-modules-deployments@^2.2.7": + version "2.2.8" + resolved "https://registry.yarnpkg.com/@safe-global/safe-modules-deployments/-/safe-modules-deployments-2.2.8.tgz#444bd078d8d04f2cac6427ed82608e8e9db314eb" + integrity sha512-XqRhEUzO8PNs5kCXztlPmQJBZO+YTDCRbiumCr5JBuS8RhU0pRSkG5Gs8qjKlZicxZvy3IdXZ14APVwb6+dj/Q== + +"@safe-global/types-kit@^2.0.0", "@safe-global/types-kit@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@safe-global/types-kit/-/types-kit-2.0.1.tgz#f2334a33fa430beceba017bd7dbb112269f61f30" + integrity sha512-4xKjTBlyFSIKziqvjrGMBAgs7Z2+s/5A2wjAXg2gBA1BuvV6w1THk1Y/WMZg8+6/PlRaVMVo4LoSNMRSsZZhjw== + dependencies: + abitype "^1.0.2" + "@scure/base@~1.1.0", "@scure/base@~1.1.4": version "1.1.5" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== +"@scure/base@~1.2.2", "@scure/base@~1.2.4", "@scure/base@~1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.5.tgz#f9d1b232425b367d0dcb81c96611dcc651d58671" + integrity sha512-9rE6EOVeIQzt5TSu4v+K523F8u6DhBsoZWPGKlnCshhlDhy0kJzUX4V+tr2dWmzF1GdekvThABoEQBGBQI7xZw== + "@scure/bip32@1.1.5": version "1.1.5" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" @@ -985,6 +1072,24 @@ "@noble/hashes" "~1.3.2" "@scure/base" "~1.1.4" +"@scure/bip32@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.2.tgz#093caa94961619927659ed0e711a6e4bf35bffd0" + integrity sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw== + dependencies: + "@noble/curves" "~1.8.1" + "@noble/hashes" "~1.7.1" + "@scure/base" "~1.2.2" + +"@scure/bip32@^1.5.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.7.0.tgz#b8683bab172369f988f1589640e53c4606984219" + integrity sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw== + dependencies: + "@noble/curves" "~1.9.0" + "@noble/hashes" "~1.8.0" + "@scure/base" "~1.2.5" + "@scure/bip39@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" @@ -1001,6 +1106,22 @@ "@noble/hashes" "~1.3.2" "@scure/base" "~1.1.4" +"@scure/bip39@1.5.4": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.4.tgz#07fd920423aa671be4540d59bdd344cc1461db51" + integrity sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA== + dependencies: + "@noble/hashes" "~1.7.1" + "@scure/base" "~1.2.4" + +"@scure/bip39@^1.4.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.6.0.tgz#475970ace440d7be87a6086cbee77cb8f1a684f9" + integrity sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A== + dependencies: + "@noble/hashes" "~1.8.0" + "@scure/base" "~1.2.5" + "@sentry/core@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" @@ -1321,6 +1442,11 @@ abbrev@1.0.x: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== +abitype@1.0.8, abitype@^1.0.2, abitype@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" + integrity sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg== + abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" @@ -1561,6 +1687,15 @@ asap@~2.0.6: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +asn1js@^3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.6.tgz#53e002ebe00c5f7fd77c1c047c3557d7c04dce25" + integrity sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA== + dependencies: + pvtsutils "^1.3.6" + pvutils "^1.1.3" + tslib "^2.8.1" + assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" @@ -2763,6 +2898,11 @@ ethjs-util@0.1.6, ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" +eventemitter3@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -3762,6 +3902,11 @@ isomorphic-unfetch@^3.0.0: node-fetch "^2.6.1" unfetch "^4.2.0" +isows@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" + integrity sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw== + js-cookie@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" @@ -4311,7 +4456,7 @@ node-emoji@^1.10.0: dependencies: lodash "^4.17.21" -node-fetch@^2.6.0, node-fetch@^2.6.1: +node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -4438,6 +4583,19 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +ox@0.6.9: + version "0.6.9" + resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.9.tgz#da1ee04fa10de30c8d04c15bfb80fe58b1f554bd" + integrity sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug== + dependencies: + "@adraffy/ens-normalize" "^1.10.1" + "@noble/curves" "^1.6.0" + "@noble/hashes" "^1.5.0" + "@scure/bip32" "^1.5.0" + "@scure/bip39" "^1.4.0" + abitype "^1.0.6" + eventemitter3 "5.0.1" + p-cancelable@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" @@ -4665,6 +4823,18 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== +pvtsutils@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.6.tgz#ec46e34db7422b9e4fdc5490578c1883657d6001" + integrity sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg== + dependencies: + tslib "^2.8.1" + +pvutils@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" + integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== + qs@^6.4.0, qs@^6.9.4: version "6.11.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" @@ -5000,6 +5170,11 @@ semver@^7.3.4, semver@^7.3.7, semver@^7.5.2, semver@^7.5.4: dependencies: lru-cache "^6.0.0" +semver@^7.6.2, semver@^7.7.1: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -5563,6 +5738,11 @@ tslib@^2.3.1, tslib@^2.5.0, tslib@^2.6.2: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tslog@^4.3.1, tslog@^4.4.0: version "4.9.2" resolved "https://registry.yarnpkg.com/tslog/-/tslog-4.9.2.tgz#35de3a073784dfe3849caeaa028010c7a62b7f4a" @@ -5781,6 +5961,20 @@ validator@^13.6.0: resolved "https://registry.yarnpkg.com/validator/-/validator-13.12.0.tgz#7d78e76ba85504da3fee4fd1922b385914d4b35f" integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg== +viem@^2.21.8: + version "2.29.1" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.29.1.tgz#92b59c00242cf07bbb98a6893cad148c26645205" + integrity sha512-mhLn0vDdsxZ4taB7XYgnIVNvXASm60KyPAkvw4k8uNCQ+HLH+5jUgKvLg4AP3y6VJxsgiVPwqUt0dJANDF5DZA== + dependencies: + "@noble/curves" "1.8.2" + "@noble/hashes" "1.7.2" + "@scure/bip32" "1.6.2" + "@scure/bip39" "1.5.4" + abitype "1.0.8" + isows "1.0.6" + ox "0.6.9" + ws "8.18.1" + web3-utils@^1.3.6: version "1.10.4" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" @@ -5893,6 +6087,11 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.18.1: + version "8.18.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" + integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== + ws@8.5.0: version "8.5.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f"