From c47bd562040b2ee5f4997c7d0ebdbe9acdfd2a37 Mon Sep 17 00:00:00 2001 From: Big Boss Date: Thu, 11 Jul 2024 22:31:14 -0500 Subject: [PATCH] Fjord (#573) * snapshot, p256-verifier update * deploy send verifier using precompile * include fjord send verifier fixture forgot to use fork in submodule more submodules * save verifier upgrade * version base sepolia verifier deploy * add UpgradeSendVerifier script * fixup home activity spec * fix up specs * fix up tiltfiles --- .env.local.template | 2 + .github/workflows/ci.yml | 4 + .gitmodules | 20 +-- Tiltfile | 25 +-- packages/api/src/routers/sendAccount.ts | 6 +- packages/contracts/.gas-snapshot | 70 +++++++++ .../84532/run-latest.json | 70 +++++++++ .../84532/run-latest.json | 148 ++++++++++-------- packages/contracts/lib/p256-verifier | 2 +- packages/contracts/package.json | 3 +- .../script/DeployFjordSendVerifier.s.sol | 41 +++++ .../script/UpgradeSendVerifier.s.sol | 37 +++++ ...vil-deploy-fjord-send-verifier-fixtures.ts | 51 ++++++ packages/contracts/src/SendVerifier.sol | 2 - .../playwright/tests/home.onboarded.spec.ts | 6 +- .../token-details-history-url-chromium | 2 +- .../token-details-history-url-firefox | 2 +- .../playwright/tests/send.onboarded.spec.ts | 11 +- .../playwright/tests/sign-up.anon.spec.ts | 6 +- packages/wagmi/src/generated.ts | 112 ++++++------- tilt/common.Tiltfile | 18 ++- tilt/infra.Tiltfile | 13 ++ 22 files changed, 482 insertions(+), 169 deletions(-) create mode 100644 packages/contracts/.gas-snapshot create mode 100644 packages/contracts/broadcast/DeployFjordSendVerifier.s.sol/84532/run-latest.json create mode 100644 packages/contracts/script/DeployFjordSendVerifier.s.sol create mode 100644 packages/contracts/script/UpgradeSendVerifier.s.sol create mode 100644 packages/contracts/script/anvil-deploy-fjord-send-verifier-fixtures.ts diff --git a/.env.local.template b/.env.local.template index 5156f297b..04ebf0f92 100644 --- a/.env.local.template +++ b/.env.local.template @@ -18,3 +18,5 @@ SUPABASE_DB_URL=postgresql://postgres:postgres@localhost:54322/postgres SUPABASE_JWT_SECRET=super-secret-jwt-token-with-at-least-32-characters-long SUPABASE_SERVICE_ROLE=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImV4cCI6MTk4MzgxMjk5Nn0.EGIM96RAZx35lJzdJsyH-qQwv8Hdp7fsn3W0YpN81IU # NEXT_PUBLIC_ENABLE_QUERY_DEV_TOOLS=1 +# Enables more logging for sendapp +# DEBUG="api:*,app:*,test:*,-test:fixtures:snaplet:*" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9ab16ed50..896cfa9a4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,6 +18,8 @@ jobs: steps: - uses: actions/checkout@v4 + with: + submodules: recursive - name: Setup Environment uses: ./.github/actions/setup-env with: @@ -37,6 +39,8 @@ jobs: steps: - uses: actions/checkout@v4 + with: + submodules: recursive - name: Setup Environment uses: ./.github/actions/setup-env env: diff --git a/.gitmodules b/.gitmodules index e18960258..53287e282 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,15 @@ [submodule "packages/contracts/lib/forge-std"] - path = packages/contracts/lib/forge-std - url = https://github.com/foundry-rs/forge-std +path = packages/contracts/lib/forge-std +url = https://github.com/foundry-rs/forge-std [submodule "packages/contracts/lib/openzeppelin-contracts"] - path = packages/contracts/lib/openzeppelin-contracts - url = https://github.com/OpenZeppelin/openzeppelin-contracts +path = packages/contracts/lib/openzeppelin-contracts +url = https://github.com/OpenZeppelin/openzeppelin-contracts [submodule "packages/contracts/lib/account-abstraction"] - path = packages/contracts/lib/account-abstraction - url = https://github.com/eth-infinitism/account-abstraction +path = packages/contracts/lib/account-abstraction +url = https://github.com/eth-infinitism/account-abstraction [submodule "packages/contracts/lib/openzeppelin-contracts-upgradeable"] - path = packages/contracts/lib/openzeppelin-contracts-upgradeable - url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable +path = packages/contracts/lib/openzeppelin-contracts-upgradeable +url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable [submodule "packages/contracts/lib/p256-verifier"] - path = packages/contracts/lib/p256-verifier - url = https://github.com/daimo-eth/p256-verifier +path = packages/contracts/lib/p256-verifier +url = https://github.com/0xbigboss/p256-verifier diff --git a/Tiltfile b/Tiltfile index 3cf329f73..b1f1c1c67 100644 --- a/Tiltfile +++ b/Tiltfile @@ -26,18 +26,19 @@ if CI: if not os.path.exists(".env.local"): local("cp .env.local.template .env.local") print(color.green("📝 Created .env.local")) - if CFG.dockerize: - sed = str(local("which gsed || which sed")).strip() - if sed == "": - print(color.red("Could not find sed. Please install it and try again.")) - exit(1) - - # replace NEXT_PUBLIC_SUPABASE_URL with the dockerized supabase url - local(sed + " -i 's/localhost/host.docker.internal/' .env.local") - - # except NEXT_PUBLIC_URL - local(sed + " -i 's/NEXT_PUBLIC_URL=http:\\/\\/host.docker.internal/NEXT_PUBLIC_URL=http:\\/\\/localhost/' .env.local") - print(color.green("📝 Dockerized .env.local")) + +if CFG.dockerize: + print(color.green("📝 Dockerizing .env.local")) + sed = str(local("which gsed || which sed")).strip() + if sed == "": + print(color.red("Could not find sed. Please install it and try again.")) + exit(1) + + # replace NEXT_PUBLIC_SUPABASE_URL with the dockerized supabase url + local(sed + " -i 's/localhost/host.docker.internal/' .env.local") + + # except NEXT_PUBLIC_URL + local(sed + " -i 's/NEXT_PUBLIC_URL=http:\\/\\/host.docker.internal/NEXT_PUBLIC_URL=http:\\/\\/localhost/' .env.local") for dotfile in [ ".env", diff --git a/packages/api/src/routers/sendAccount.ts b/packages/api/src/routers/sendAccount.ts index b0f4152d5..99dc155e1 100644 --- a/packages/api/src/routers/sendAccount.ts +++ b/packages/api/src/routers/sendAccount.ts @@ -252,6 +252,8 @@ export const sendAccountRouter = createTRPCRouter({ }) } + log('createAccount', `hash=${hash}`) + await withRetry( async function waitForTransactionReceipt() { const { count, error } = await supabaseAdmin @@ -261,7 +263,7 @@ export const sendAccountRouter = createTRPCRouter({ .eq('account', hexToBytea(senderAddress)) .single() throwIf(error) - log('waitForTransactionReceipt', `count=${count}`) + log('waitForTransactionReceipt', `hash=${hash}`, `count=${count}`) return count }, { @@ -273,7 +275,7 @@ export const sendAccountRouter = createTRPCRouter({ }, shouldRetry({ count, error }) { // @todo handle other errors like balance not enough, invalid nonce, etc - console.error('waitForTransactionReceipt failed', count, error) + console.error('waitForTransactionReceipt failed', { count, error, hash }) if (error.message.includes('Failed to create send account')) { return false } diff --git a/packages/contracts/.gas-snapshot b/packages/contracts/.gas-snapshot new file mode 100644 index 000000000..d37a0ccce --- /dev/null +++ b/packages/contracts/.gas-snapshot @@ -0,0 +1,70 @@ +AccountFactoryTest:testDeploy() (gas: 240957) +AccountSendUseropTest:testETHTransferOp() (gas: 952654) +AccountSendUseropTest:testSignP256() (gas: 346060) +AccountSendUseropTest:testSimpleOp() (gas: 3135283) +AccountSendUseropTest:testValidUntil() (gas: 1174209) +AccountSigningKeysTest:testAddingAndRemovingKeys() (gas: 251599) +AccountSigningKeysTest:testGetSigningKeys() (gas: 941870) +AccountVerify1271Test:testSignatureMalleability() (gas: 500496) +AccountVerify1271Test:testVerifySig() (gas: 471635) +BaseSepoliaTokenPaymasterTest:testItDoesNotFailOOG() (gas: 2651338) +BaseSepoliaTokenPaymasterTest:testItFails() (gas: 2571863) +BaseSepoliaTokenPaymasterTest:testItFailsOOG() (gas: 2657060) +DeploySendAccountFactoryTest:testItRuns() (gas: 7951846) +DeploySendMerkleDropTest:testItRuns() (gas: 2941015) +DeploySendVerifierTest:testItRuns() (gas: 4011929) +OracleHelperTest:testCannotDeployAsTokenToNativeOracleWithNonZeroAddress() (gas: 261294) +OracleHelperTest:testPriceConversionExamples() (gas: 146743) +OracleHelperTest:testWithOneHopDirectPriceEthToToken() (gas: 107306) +OracleHelperTest:testWithOneHopReversePriceTokenToEth() (gas: 110385) +OracleHelperTest:testWithTwoHopPriceUsdToTokenAndUsdToEth() (gas: 141354) +OracleHelperTest:testWithTwoHopPriceUsdcToTokenAndUsdcToEth() (gas: 141380) +SendCheckHelper:testECDSA(address) (runs: 256, μ: 12083, ~: 12083) +SendCheckTest:testAuthorizedFlow() (gas: 184566) +SendCheckTest:testCannotClaimNonExistentCheck() (gas: 168782) +SendCheckTest:testCannotClaimRedeemedCheck() (gas: 187676) +SendCheckTest:testCannotClaimSelf() (gas: 293872) +SendCheckTest:testCannotCreateCheck() (gas: 152176) +SendCheckTest:testClaimSelf() (gas: 175527) +SendCheckTest:testCreateCheck() (gas: 155899) +SendCheckTest:testECDSA(address) (runs: 256, μ: 12083, ~: 12083) +SendCheckTest:testUnauthorizedFlow() (gas: 182451) +SendMerkleDropTest:test_AllowSingleTrancheClaim() (gas: 104486) +SendMerkleDropTest:test_DenyDoubleClaim() (gas: 35711) +TestUSDCTest:testCoin() (gas: 607178) +TokenPaymaster6Test:testCall() (gas: 154373) +TokenPaymaster6Test:testDeploy() (gas: 15084) +TokenPaymaster6Test:testFuzzTransfersCorrectAmountRewardPool(uint40,uint256) (runs: 256, μ: 303153, ~: 304920) +TokenPaymaster6Test:testFuzz_UpdateOracleConfigSuccess(uint48,uint48,uint256) (runs: 256, μ: 51124, ~: 51237) +TokenPaymaster6Test:testFuzz_UpdatePrice(uint256) (runs: 256, μ: 57659, ~: 57659) +TokenPaymaster6Test:testFuzz_UpdateTokenPaymasterConfigFailMarkupTooHigh(uint256,uint40) (runs: 256, μ: 20723, ~: 21004) +TokenPaymaster6Test:testFuzz_UpdateTokenPaymasterConfigFailMarkupTooLow(uint256,uint40) (runs: 256, μ: 20550, ~: 20289) +TokenPaymaster6Test:testFuzz_UpdateTokenPaymasterConfigSuccess(uint256,uint128,uint48,uint48,uint40,address) (runs: 256, μ: 39579, ~: 39599) +TokenPaymaster6Test:testFuzz_UpdateUniswapConfigSuccess(uint256,uint24,uint8) (runs: 256, μ: 26748, ~: 26913) +TokenPaymaster6Test:testFuzz_WithdrawNativeAsset(uint256) (runs: 256, μ: 47675, ~: 48295) +TokenPaymaster6Test:testFuzz_WithdrawToken(uint256) (runs: 256, μ: 59475, ~: 59919) +TokenPaymaster6Test:testInvalidDataLength() (gas: 100859) +TokenPaymaster6Test:testOnlyOwnerCanUpdateOracleConfig() (gas: 19668) +TokenPaymaster6Test:testOnlyOwnerCanUpdateTokenPaymasterConfig() (gas: 17156) +TokenPaymaster6Test:testOnlyOwnerCanUpdateUniswapConfig() (gas: 14354) +TokenPaymaster6Test:testOwnershipTransfer() (gas: 21890) +TokenPaymaster6Test:testPaymasterShouldRejectIfPostOpGasLimitIsTooLow() (gas: 105175) +TokenPaymaster6Test:testRewardShareTransfersCorrectAmount() (gas: 307242) +TokenPaymaster6Test:testShouldBeAbleToSponsorTheUserOpWhileChargingCorrectAmountOfERC20Tokens() (gas: 302918) +TokenPaymaster6Test:testShouldChargeTheOverdraftTokensIfThePreChargeEndedUpLowerThanTheFinalTransactionCost() (gas: 345595) +TokenPaymaster6Test:testShouldRejectIfAccountDoesNotHaveEnoughTokensOrAllowance() (gas: 151612) +TokenPaymaster6Test:testShouldRevertIfCachedTokenPriceIsExpired() (gas: 200451) +TokenPaymaster6Test:testShouldRevertInTheFirstPostOpRunIfThePreChargeEndedUpLowerThanTheFinalTransactionCostButTheClientHasNoTokensToCoverTheOverdraft() (gas: 375311) +TokenPaymaster6Test:testShouldSponserUserOperationExample() (gas: 345737) +TokenPaymaster6Test:testShouldSponsorUserOperationWithInitCode() (gas: 442183) +TokenPaymaster6Test:testShouldSwapTokensForEtherIfItFallsBelowConfiguredValueAndDepositIt() (gas: 398338) +TokenPaymaster6Test:testShouldUpdateCachedTokenPriceIfTheChangeIsAboveConfiguredPercentage() (gas: 346125) +TokenPaymaster6Test:testShouldUpdateTokenPriceIfCacheIsExpired() (gas: 321959) +TokenPaymaster6Test:testShouldUseCachedTokenPriceIfTheOneSuppliedByTheClientIsWorse() (gas: 297841) +TokenPaymaster6Test:testShouldUseTokenPriceSuppliedByTheClientIfItIsBetterThanCached() (gas: 297489) +TokenPaymaster6Test:testUpdatePrice() (gas: 56938) +TokenPaymaster6Test:testWithdrawNativeAsset() (gas: 52675) +TokenPaymaster6Test:testWithdrawToken(uint256) (runs: 256, μ: 63163, ~: 63607) +UpgradeableVerifierBrick:test() (gas: 184) +VerifierBrick:test() (gas: 120) +VerifierTest:testUpgrade() (gas: 1680407) \ No newline at end of file diff --git a/packages/contracts/broadcast/DeployFjordSendVerifier.s.sol/84532/run-latest.json b/packages/contracts/broadcast/DeployFjordSendVerifier.s.sol/84532/run-latest.json new file mode 100644 index 000000000..ddc351fdb --- /dev/null +++ b/packages/contracts/broadcast/DeployFjordSendVerifier.s.sol/84532/run-latest.json @@ -0,0 +1,70 @@ +{ + "transactions": [ + { + "hash": "0x7ccd2d7f386faf63521eb57987e3db26a729a504c54afad2d097d868f0d3f954", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x6c38612d3f645711dd080711021fc1ba998a5628", + "function": "upgradeTo(address)", + "arguments": [ + "0xe46056eBA301069A9E5a166b424b5Cb86b0Cf6E6" + ], + "transaction": { + "from": "0x647eb43401e13e995d89cf26cd87e68890ee3f89", + "to": "0x6c38612d3f645711dd080711021fc1ba998a5628", + "gas": "0xd23d", + "value": "0x0", + "input": "0x3659cfe6000000000000000000000000e46056eba301069a9e5a166b424b5cb86b0cf6e6", + "nonce": "0xc", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x5fc22", + "logs": [ + { + "address": "0x6c38612d3f645711dd080711021fc1ba998a5628", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000e46056eba301069a9e5a166b424b5cb86b0cf6e6" + ], + "data": "0x", + "blockHash": "0x2ddc8ebef959db8d081ecc4f9c82c8b148e6d76729d0bdc80dffbb96b29eb930", + "blockNumber": "0xbe69c0", + "transactionHash": "0x7ccd2d7f386faf63521eb57987e3db26a729a504c54afad2d097d868f0d3f954", + "transactionIndex": "0x3", + "logIndex": "0x6", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000004020000000000000000000000000000004000000020000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x7ccd2d7f386faf63521eb57987e3db26a729a504c54afad2d097d868f0d3f954", + "transactionIndex": "0x3", + "blockHash": "0x2ddc8ebef959db8d081ecc4f9c82c8b148e6d76729d0bdc80dffbb96b29eb930", + "blockNumber": "0xbe69c0", + "gasUsed": "0x8fc1", + "effectiveGasPrice": "0x499b6", + "from": "0x647eb43401e13e995d89cf26cd87e68890ee3f89", + "to": "0x6c38612d3f645711dd080711021fc1ba998a5628", + "contractAddress": null, + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0xbdc1dc33", + "l1GasPrice": "0x6bb7fcbd", + "l1GasUsed": "0x640" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1720726138, + "chain": 84532, + "commit": "2850a3b1" +} \ No newline at end of file diff --git a/packages/contracts/broadcast/DeploySendVerifier.s.sol/84532/run-latest.json b/packages/contracts/broadcast/DeploySendVerifier.s.sol/84532/run-latest.json index da954dbc3..219ff04a5 100644 --- a/packages/contracts/broadcast/DeploySendVerifier.s.sol/84532/run-latest.json +++ b/packages/contracts/broadcast/DeploySendVerifier.s.sol/84532/run-latest.json @@ -1,44 +1,42 @@ { "transactions": [ { - "hash": "0x0149cd76ff8cce88f4727c4f2fa601f073cbb8cca6e751e4fce717627d0a7143", + "hash": "0xad796bfbd77dc56fda537707a26128b96203af173191abd2ba531e29aa94a6e9", "transactionType": "CREATE2", "contractName": "SendVerifier", - "contractAddress": "0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B", + "contractAddress": "0xe46056eba301069a9e5a166b424b5cb86b0cf6e6", "function": null, "arguments": null, "transaction": { - "type": "0x02", - "from": "0x647eb43401e13e995d89cf26cd87e68890ee3f89", + "from": "0xfb00d9cda6dad99994849d7c66fa2631f280f64f", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "gas": "0x21785c", + "gas": "0x23e567", "value": "0x0", - "data": "0x000000000000000000000000000000000000000000000000000000000000000060a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051611b7b6100fd6000396000818161061c0152818161064501526108660152611b7b6000f3fe6080604052600436106100b15760003560e01c8063715018a611610069578063ad3cb1cc1161004e578063ad3cb1cc146101cc578063dcae042c14610222578063f2fde38b1461025257600080fd5b8063715018a61461016d5780638da5cb5b1461018257600080fd5b80634f1ef2861161009a5780634f1ef286146100f857806352d1902d1461010b5780635c60da1b1461013357600080fd5b806319ab453c146100b65780633659cfe6146100d8575b600080fd5b3480156100c257600080fd5b506100d66100d13660046115d0565b610272565b005b3480156100e457600080fd5b506100d66100f33660046115d0565b6103f2565b6100d66101063660046116ee565b61040e565b34801561011757600080fd5b5061012061042d565b6040519081526020015b60405180910390f35b34801561013f57600080fd5b5061014861045c565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012a565b34801561017957600080fd5b506100d66104a1565b34801561018e57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff16610148565b3480156101d857600080fd5b506102156040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161012a9190611760565b34801561022e57600080fd5b5061024261023d3660046117b1565b6104b5565b604051901515815260200161012a565b34801561025e57600080fd5b506100d661026d3660046115d0565b61050c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102bd5750825b905060008267ffffffffffffffff1660011480156102da5750303b155b9050811580156102e8575080155b1561031f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156103805784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6103898661056e565b83156103ea5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b61040b816040518060200160405280600081525061040e565b50565b610416610604565b61041f82610708565b6104298282610710565b5050565b600061043761084e565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600061049c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b6104a96108bd565b6104b3600061056e565b565b6000806104c58560018189611857565b8101906104d29190611881565b90506104ff878260000151600084602001518560400151866060015187608001518860a001518c8c61094b565b9150505b95945050505050565b6105146108bd565b73ffffffffffffffffffffffffffffffffffffffff8116610569576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b61040b815b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806106d157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166106b87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b156104b3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61040b6108bd565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610795575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107929181019061193d565b60015b6107e3576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610560565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461083f576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610560565b6108498383610b4b565b505050565b3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146104b3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336108fc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146104b3576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610560565b600060258a51108061099d575061099b8a60208151811061096e5761096e611956565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168a610bae565b155b156109aa57506000610b3d565b60408051808201909152601581527f2274797065223a22776562617574686e2e67657422000000000000000000000060208201526109e9818a89610ca1565b6109f7576000915050610b3d565b6000610a028d610d82565b9050600081604051602001610a179190611985565b6040516020818303038152906040529050610a33818c8c610ca1565b610a435760009350505050610b3d565b600060028c604051610a5591906119f1565b602060405180830381855afa158015610a72573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610a95919061193d565b9050600060028f83604051602001610aae929190611a0d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610ae6916119f1565b602060405180830381855afa158015610b03573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b26919061193d565b9050610b35818b8b8b8b6110c8565b955050505050505b9a9950505050505050505050565b610b5482611111565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610ba65761084982826111e0565b61042961125a565b60007f010000000000000000000000000000000000000000000000000000000000000083811614610be157506000610c9b565b818015610c1057507f040000000000000000000000000000000000000000000000000000000000000083811614155b15610c1d57506000610c9b565b7f080000000000000000000000000000000000000000000000000000000000000083811614610c97577ff0000000000000000000000000000000000000000000000000000000000000007f1000000000000000000000000000000000000000000000000000000000000000841601610c9757506000610c9b565b5060015b92915050565b825182516000918591859190845b82811015610d715781610cc28289611a5e565b10610cd557600095505050505050610d7b565b83610ce08289611a5e565b81518110610cf057610cf0611956565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916858281518110610d2f57610d2f611956565b01602001517fff000000000000000000000000000000000000000000000000000000000000001614610d6957600095505050505050610d7b565b600101610caf565b5060019450505050505b9392505050565b60606000610d8f83611292565b90506000819050600060028251118015610e0e57508160028351610db39190611a71565b81518110610dc357610dc3611956565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3d00000000000000000000000000000000000000000000000000000000000000145b15610e1b57506002610e9a565b60018251118015610e9157508160018351610e369190611a71565b81518110610e4657610e46611956565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3d00000000000000000000000000000000000000000000000000000000000000145b15610e9a575060015b6000818351610ea99190611a71565b905060008167ffffffffffffffff811115610ec657610ec66115eb565b6040519080825280601f01601f191660200182016040528015610ef0576020820181803683370190505b50905060005b828110156110bd57848181518110610f1057610f10611956565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f2b0000000000000000000000000000000000000000000000000000000000000003610fc4577f2d00000000000000000000000000000000000000000000000000000000000000828281518110610f9057610f90611956565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506110b5565b848181518110610fd657610fd6611956565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f2f0000000000000000000000000000000000000000000000000000000000000003611056577f5f00000000000000000000000000000000000000000000000000000000000000828281518110610f9057610f90611956565b84818151811061106857611068611956565b602001015160f81c60f81b82828151811061108557611085611956565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600101610ef6565b509695505050505050565b60007f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a88411156110fa57506000610503565b61110786868686866113e5565b9695505050505050565b8073ffffffffffffffffffffffffffffffffffffffff163b60000361117a576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610560565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161120a91906119f1565b600060405180830381855af49150503d8060008114611245576040519150601f19603f3d011682016040523d82523d6000602084013e61124a565b606091505b50915091506105038583836114d6565b34156104b3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081516000036112b157505060408051602081019091526000815290565b6000604051806060016040528060408152602001611b0660409139905060006003845160026112e09190611a5e565b6112ea9190611a84565b6112f5906004611abf565b67ffffffffffffffff81111561130d5761130d6115eb565b6040519080825280601f01601f191660200182016040528015611337576020820181803683370190505b509050600182016020820185865187015b808210156113a3576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250611348565b50506003865106600181146113bf57600281146113d2576113da565b603d6001830353603d60028303536113da565b603d60018303535b509195945050505050565b6040805160208101879052908101859052606081018490526080810183905260a08101829052600090819060c001604051602081830303815290604052905060008073c2b78104907f722dabac4c69f826a522b2754de473ffffffffffffffffffffffffffffffffffffffff168360405161146091906119f1565b600060405180830381855afa9150503d806000811461149b576040519150601f19603f3d011682016040523d82523d6000602084013e6114a0565b606091505b5091509150816114b2576114b2611ad6565b808060200190518101906114c6919061193d565b6001149998505050505050505050565b6060826114eb576114e682611565565b610d7b565b815115801561150f575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561155e576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610560565b5080610d7b565b8051156115755780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146115cb57600080fd5b919050565b6000602082840312156115e257600080fd5b610d7b826115a7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561163d5761163d6115eb565b60405290565b600082601f83011261165457600080fd5b813567ffffffffffffffff8082111561166f5761166f6115eb565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156116b5576116b56115eb565b816040528381528660208588010111156116ce57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561170157600080fd5b61170a836115a7565b9150602083013567ffffffffffffffff81111561172657600080fd5b61173285828601611643565b9150509250929050565b60005b8381101561175757818101518382015260200161173f565b50506000910152565b602081526000825180602084015261177f81604085016020870161173c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806000608086880312156117c957600080fd5b853567ffffffffffffffff808211156117e157600080fd5b6117ed89838a01611643565b9650602088013591508082111561180357600080fd5b818801915088601f83011261181757600080fd5b81358181111561182657600080fd5b89602082850101111561183857600080fd5b9699602092909201985095966040810135965060600135945092505050565b6000808585111561186757600080fd5b8386111561187457600080fd5b5050820193919092039150565b60006020828403121561189357600080fd5b813567ffffffffffffffff808211156118ab57600080fd5b9083019060c082860312156118bf57600080fd5b6118c761161a565b8235828111156118d657600080fd5b6118e287828601611643565b8252506020830135828111156118f757600080fd5b61190387828601611643565b60208301525060408301356040820152606083013560608201526080830135608082015260a083013560a082015280935050505092915050565b60006020828403121561194f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f226368616c6c656e6765223a22000000000000000000000000000000000000008152600082516119bd81600d85016020870161173c565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60008251611a0381846020870161173c565b9190910192915050565b60008351611a1f81846020880161173c565b9190910191825250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610c9b57610c9b611a2f565b81810381811115610c9b57610c9b611a2f565b600082611aba577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082028115828204841417610c9b57610c9b611a2f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212203968e4f1e8ae40555fd8030f88463df49896e3400a56b29bc3f87c8be848971264736f6c63430008170033", - "nonce": "0x6", - "accessList": [] + "input": "0x9725d3772f1ae3298e1e9b79af3c623373d1da1ce3dfa8cbbec431d865d88b1360a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051611bd86100fd600039600081816106120152818161063b015261085c0152611bd86000f3fe6080604052600436106100b15760003560e01c8063715018a611610069578063ad3cb1cc1161004e578063ad3cb1cc146101cc578063dcae042c14610222578063f2fde38b1461025257600080fd5b8063715018a61461016d5780638da5cb5b1461018257600080fd5b80634f1ef2861161009a5780634f1ef286146100f857806352d1902d1461010b5780635c60da1b1461013357600080fd5b806319ab453c146100b65780633659cfe6146100d8575b600080fd5b3480156100c257600080fd5b506100d66100d1366004611607565b610272565b005b3480156100e457600080fd5b506100d66100f3366004611607565b6103f2565b6100d6610106366004611725565b61040e565b34801561011757600080fd5b5061012061042d565b6040519081526020015b60405180910390f35b34801561013f57600080fd5b5061014861045c565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012a565b34801561017957600080fd5b506100d66104a1565b34801561018e57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff16610148565b3480156101d857600080fd5b506102156040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161012a9190611797565b34801561022e57600080fd5b5061024261023d3660046117e8565b6104b5565b604051901515815260200161012a565b34801561025e57600080fd5b506100d661026d366004611607565b610502565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102bd5750825b905060008267ffffffffffffffff1660011480156102da5750303b155b9050811580156102e8575080155b1561031f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156103805784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61038986610564565b83156103ea5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b61040b816040518060200160405280600081525061040e565b50565b6104166105fa565b61041f826106fe565b6104298282610706565b5050565b6000610437610844565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600061049c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b6104a96108b3565b6104b36000610564565b565b6000806104c5856001818961188e565b8101906104d291906118b8565b90506104f58782600001516000846020015185608001518660a001518a8a610941565b9150505b95945050505050565b61050a6108b3565b73ffffffffffffffffffffffffffffffffffffffff811661055f576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b61040b815b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806106c757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166106ae7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b156104b3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61040b6108b3565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561078b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261078891810190611974565b60015b6107d9576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610556565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610835576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610556565b61083f8383610aef565b505050565b3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146104b3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336108f27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146104b3576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610556565b60006025885110806109935750610991886020815181106109645761096461198d565b01602001517fff000000000000000000000000000000000000000000000000000000000000001688610b52565b155b156109a057506000610ae3565b60006109ab8a610c45565b90506000816040516020016109c091906119bc565b60405160208183030381529060405290506109db8189610f8b565b6109ea57600092505050610ae3565b60006002896040516109fc9190611a4e565b602060405180830381855afa158015610a19573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610a3c9190611974565b9050600060028c83604051602001610a55929190611a6a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610a8d91611a4e565b602060405180830381855afa158015610aaa573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610acd9190611974565b9050610adc818a8a8a8a611057565b9450505050505b98975050505050505050565b610af8826110a0565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610b4a5761083f828261116f565b6104296111e9565b60007f010000000000000000000000000000000000000000000000000000000000000083811614610b8557506000610c3f565b818015610bb457507f040000000000000000000000000000000000000000000000000000000000000083811614155b15610bc157506000610c3f565b7f080000000000000000000000000000000000000000000000000000000000000083811614610c3b577ff0000000000000000000000000000000000000000000000000000000000000007f1000000000000000000000000000000000000000000000000000000000000000841601610c3b57506000610c3f565b5060015b92915050565b60606000610c5283611221565b90506000819050600060028251118015610cd157508160028351610c769190611abb565b81518110610c8657610c8661198d565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3d00000000000000000000000000000000000000000000000000000000000000145b15610cde57506002610d5d565b60018251118015610d5457508160018351610cf99190611abb565b81518110610d0957610d0961198d565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3d00000000000000000000000000000000000000000000000000000000000000145b15610d5d575060015b6000818351610d6c9190611abb565b905060008167ffffffffffffffff811115610d8957610d89611622565b6040519080825280601f01601f191660200182016040528015610db3576020820181803683370190505b50905060005b82811015610f8057848181518110610dd357610dd361198d565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f2b0000000000000000000000000000000000000000000000000000000000000003610e87577f2d00000000000000000000000000000000000000000000000000000000000000828281518110610e5357610e5361198d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610f78565b848181518110610e9957610e9961198d565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f2f0000000000000000000000000000000000000000000000000000000000000003610f19577f5f00000000000000000000000000000000000000000000000000000000000000828281518110610e5357610e5361198d565b848181518110610f2b57610f2b61198d565b602001015160f81c60f81b828281518110610f4857610f4861198d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600101610db9565b509695505050505050565b815181516000918491849190845b8281101561104957818110610fb657600095505050505050610c3f565b838181518110610fc857610fc861198d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168582815181106110075761100761198d565b01602001517fff00000000000000000000000000000000000000000000000000000000000000161461104157600095505050505050610c3f565b600101610f99565b506001979650505050505050565b60007f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8841115611089575060006104f9565b6110968686868686611374565b9695505050505050565b8073ffffffffffffffffffffffffffffffffffffffff163b600003611109576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610556565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff16846040516111999190611a4e565b600060405180830381855af49150503d80600081146111d4576040519150601f19603f3d011682016040523d82523d6000602084013e6111d9565b606091505b50915091506104f985838361150a565b34156104b3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060815160000361124057505060408051602081019091526000815290565b6000604051806060016040528060408152602001611b63604091399050600060038451600261126f9190611ace565b6112799190611ae1565b611284906004611b1c565b67ffffffffffffffff81111561129c5761129c611622565b6040519080825280601f01601f1916602001820160405280156112c6576020820181803683370190505b509050600182016020820185865187015b80821015611332576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506112d7565b505060038651066001811461134e576002811461136157611369565b603d6001830353603d6002830353611369565b603d60018303535b509195945050505050565b6040805160208101879052908101859052606081018490526080810183905260a08101829052600090819060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff16836040516113dd9190611a4e565b600060405180830381855afa9150503d8060008114611418576040519150601f19603f3d011682016040523d82523d6000602084013e61141d565b606091505b5091509150818015611430575060008151115b1561145657808060200190518101906114499190611974565b60011493505050506104f9565b60008073c2b78104907f722dabac4c69f826a522b2754de473ffffffffffffffffffffffffffffffffffffffff16856040516114929190611a4e565b600060405180830381855afa9150503d80600081146114cd576040519150601f19603f3d011682016040523d82523d6000602084013e6114d2565b606091505b5091509150816114e4576114e4611b33565b808060200190518101906114f89190611974565b6001149b9a5050505050505050505050565b60608261151f5761151a8261159c565b611595565b8151158015611543575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611592576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610556565b50805b9392505050565b8051156115ac5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461160257600080fd5b919050565b60006020828403121561161957600080fd5b611595826115de565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561167457611674611622565b60405290565b600082601f83011261168b57600080fd5b813567ffffffffffffffff808211156116a6576116a6611622565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156116ec576116ec611622565b8160405283815286602085880101111561170557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561173857600080fd5b611741836115de565b9150602083013567ffffffffffffffff81111561175d57600080fd5b6117698582860161167a565b9150509250929050565b60005b8381101561178e578181015183820152602001611776565b50506000910152565b60208152600082518060208401526117b6816040850160208701611773565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060008060006080868803121561180057600080fd5b853567ffffffffffffffff8082111561181857600080fd5b61182489838a0161167a565b9650602088013591508082111561183a57600080fd5b818801915088601f83011261184e57600080fd5b81358181111561185d57600080fd5b89602082850101111561186f57600080fd5b9699602092909201985095966040810135965060600135945092505050565b6000808585111561189e57600080fd5b838611156118ab57600080fd5b5050820193919092039150565b6000602082840312156118ca57600080fd5b813567ffffffffffffffff808211156118e257600080fd5b9083019060c082860312156118f657600080fd5b6118fe611651565b82358281111561190d57600080fd5b6119198782860161167a565b82525060208301358281111561192e57600080fd5b61193a8782860161167a565b60208301525060408301356040820152606083013560608201526080830135608082015260a083013560a082015280935050505092915050565b60006020828403121561198657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f7b2274797065223a22776562617574686e2e676574222c226368616c6c656e6781527f65223a2200000000000000000000000000000000000000000000000000000000602082015260008251611a1a816024850160208701611773565b7f22000000000000000000000000000000000000000000000000000000000000006024939091019283015250602501919050565b60008251611a60818460208701611773565b9190910192915050565b60008351611a7c818460208801611773565b9190910191825250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610c3f57610c3f611a8c565b80820180821115610c3f57610c3f611a8c565b600082611b17577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082028115828204841417610c3f57610c3f611a8c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122024bd9613a09d6a8999d1ff1bf1d7e9978746d7983c377ed2cab557ba2c905b5364736f6c63430008170033", + "nonce": "0x3b", + "chainId": "0x14a34" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0xb345d382b9718b9a51f50c01bd7472c7a417354c654ab120e0794e938851a100", + "hash": "0x722a3ccbf9d285c60c018968c299422f2763ca971e8d99c09c247a4cac5e09ac", "transactionType": "CREATE2", "contractName": "SendVerifierProxy", - "contractAddress": "0x6c38612d3f645711dd080711021fC1bA998a5628", + "contractAddress": "0xc578475d39894163a07cb31dbb704e2c9a907c39", "function": null, "arguments": [ - "0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B", - "0x19ab453c000000000000000000000000647eb43401e13e995d89cf26cd87e68890ee3f89" + "0xe46056eBA301069A9E5a166b424b5Cb86b0Cf6E6", + "0x19ab453c000000000000000000000000fb00d9cda6dad99994849d7c66fa2631f280f64f" ], "transaction": { - "type": "0x02", - "from": "0x647eb43401e13e995d89cf26cd87e68890ee3f89", + "from": "0xfb00d9cda6dad99994849d7c66fa2631f280f64f", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", "gas": "0x4190a", "value": "0x0", - "data": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161042838038061042883398101604081905261002f91610279565b818161003b8282610044565b50505050610363565b61004d826100a3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561009757610092828261011f565b505050565b61009f610196565b5050565b806001600160a01b03163b6000036100de57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161013c9190610347565b600060405180830381855af49150503d8060008114610177576040519150601f19603f3d011682016040523d82523d6000602084013e61017c565b606091505b50909250905061018d8583836101b7565b95945050505050565b34156101b55760405163b398979f60e01b815260040160405180910390fd5b565b6060826101cc576101c782610216565b61020f565b81511580156101e357506001600160a01b0384163b155b1561020c57604051639996b31560e01b81526001600160a01b03851660048201526024016100d5565b50805b9392505050565b8051156102265780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b83811015610270578181015183820152602001610258565b50506000910152565b6000806040838503121561028c57600080fd5b82516001600160a01b03811681146102a357600080fd5b60208401519092506001600160401b03808211156102c057600080fd5b818501915085601f8301126102d457600080fd5b8151818111156102e6576102e661023f565b604051601f8201601f19908116603f0116810190838211818310171561030e5761030e61023f565b8160405282815288602084870101111561032757600080fd5b610338836020830160208801610255565b80955050505050509250929050565b60008251610359818460208701610255565b9190910192915050565b60b7806103716000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea2646970667358221220870db3e4fb0b6cdb5d4ba45ee1b267ee2617a94568ede6165263c500e845891164736f6c63430008170033000000000000000000000000e269194e41cd50e2986f82fc23a2b95d8bafed2b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002419ab453c000000000000000000000000647eb43401e13e995d89cf26cd87e68890ee3f8900000000000000000000000000000000000000000000000000000000", - "nonce": "0x7", - "accessList": [] + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161042838038061042883398101604081905261002f91610279565b818161003b8282610044565b50505050610363565b61004d826100a3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561009757610092828261011f565b505050565b61009f610196565b5050565b806001600160a01b03163b6000036100de57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161013c9190610347565b600060405180830381855af49150503d8060008114610177576040519150601f19603f3d011682016040523d82523d6000602084013e61017c565b606091505b50909250905061018d8583836101b7565b95945050505050565b34156101b55760405163b398979f60e01b815260040160405180910390fd5b565b6060826101cc576101c782610216565b61020f565b81511580156101e357506001600160a01b0384163b155b1561020c57604051639996b31560e01b81526001600160a01b03851660048201526024016100d5565b50805b9392505050565b8051156102265780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b83811015610270578181015183820152602001610258565b50506000910152565b6000806040838503121561028c57600080fd5b82516001600160a01b03811681146102a357600080fd5b60208401519092506001600160401b03808211156102c057600080fd5b818501915085601f8301126102d457600080fd5b8151818111156102e6576102e661023f565b604051601f8201601f19908116603f0116810190838211818310171561030e5761030e61023f565b8160405282815288602084870101111561032757600080fd5b610338836020830160208801610255565b80955050505050509250929050565b60008251610359818460208701610255565b9190910192915050565b60b7806103716000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea2646970667358221220440ac6d7c51acc97ba4c88561c527ca749738b89078b70bd704e3a6a10af7c0964736f6c63430008170033000000000000000000000000e46056eba301069a9e5a166b424b5cb86b0cf6e60000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002419ab453c000000000000000000000000fb00d9cda6dad99994849d7c66fa2631f280f64f00000000000000000000000000000000000000000000000000000000", + "nonce": "0x3c", + "chainId": "0x14a34" }, "additionalContracts": [], "isFixedGasLimit": false @@ -46,99 +44,111 @@ ], "receipts": [ { - "transactionHash": "0x0149cd76ff8cce88f4727c4f2fa601f073cbb8cca6e751e4fce717627d0a7143", - "transactionIndex": "0x1", - "blockHash": "0x32070eafbb15dfae90d06f678435e598178d9118c822785b6547ecf3ed3e52f8", - "blockNumber": "0x7922e3", - "from": "0x647eb43401e13e995D89Cf26cD87e68890EE3f89", - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "cumulativeGasUsed": "0x18e882", - "gasUsed": "0x183d1f", - "contractAddress": null, + "status": "0x1", + "cumulativeGasUsed": "0x3f2ed0", "logs": [ { - "address": "0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B", + "address": "0xe46056eba301069a9e5a166b424b5cb86b0cf6e6", "topics": [ "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" ], "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "blockHash": "0x32070eafbb15dfae90d06f678435e598178d9118c822785b6547ecf3ed3e52f8", - "blockNumber": "0x7922e3", - "transactionHash": "0x0149cd76ff8cce88f4727c4f2fa601f073cbb8cca6e751e4fce717627d0a7143", - "transactionIndex": "0x1", - "logIndex": "0x0", + "blockHash": "0x7bce77fea4208915d2636739287c7d13e85e0d6157faaa9e4fd8c47ce878776d", + "blockNumber": "0xbde8b3", + "transactionHash": "0xad796bfbd77dc56fda537707a26128b96203af173191abd2ba531e29aa94a6e9", + "transactionIndex": "0x5", + "logIndex": "0x36", "removed": false } ], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000800000010000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000001000000000000000000000000000", "type": "0x2", - "effectiveGasPrice": "0xb2d05f27" + "transactionHash": "0xad796bfbd77dc56fda537707a26128b96203af173191abd2ba531e29aa94a6e9", + "transactionIndex": "0x5", + "blockHash": "0x7bce77fea4208915d2636739287c7d13e85e0d6157faaa9e4fd8c47ce878776d", + "blockNumber": "0xbde8b3", + "gasUsed": "0x188d29", + "effectiveGasPrice": "0xf445d", + "from": "0xfb00d9cda6dad99994849d7c66fa2631f280f64f", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0xe46056eba301069a9e5a166b424b5cb86b0cf6e6", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x1d1dc8d4d9", + "l1GasPrice": "0x7b47aaef", + "l1GasUsed": "0xd683" }, { - "transactionHash": "0xb345d382b9718b9a51f50c01bd7472c7a417354c654ab120e0794e938851a100", - "transactionIndex": "0x2", - "blockHash": "0x32070eafbb15dfae90d06f678435e598178d9118c822785b6547ecf3ed3e52f8", - "blockNumber": "0x7922e3", - "from": "0x647eb43401e13e995D89Cf26cD87e68890EE3f89", - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "cumulativeGasUsed": "0x1bb61b", - "gasUsed": "0x2cd99", - "contractAddress": null, + "status": "0x1", + "cumulativeGasUsed": "0x41fc69", "logs": [ { - "address": "0x6c38612d3f645711dd080711021fC1bA998a5628", + "address": "0xc578475d39894163a07cb31dbb704e2c9a907c39", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x000000000000000000000000e269194e41cd50e2986f82fc23a2b95d8bafed2b" + "0x000000000000000000000000e46056eba301069a9e5a166b424b5cb86b0cf6e6" ], "data": "0x", - "blockHash": "0x32070eafbb15dfae90d06f678435e598178d9118c822785b6547ecf3ed3e52f8", - "blockNumber": "0x7922e3", - "transactionHash": "0xb345d382b9718b9a51f50c01bd7472c7a417354c654ab120e0794e938851a100", - "transactionIndex": "0x2", - "logIndex": "0x1", + "blockHash": "0x7bce77fea4208915d2636739287c7d13e85e0d6157faaa9e4fd8c47ce878776d", + "blockNumber": "0xbde8b3", + "transactionHash": "0x722a3ccbf9d285c60c018968c299422f2763ca971e8d99c09c247a4cac5e09ac", + "transactionIndex": "0x6", + "logIndex": "0x37", "removed": false }, { - "address": "0x6c38612d3f645711dd080711021fC1bA998a5628", + "address": "0xc578475d39894163a07cb31dbb704e2c9a907c39", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000647eb43401e13e995d89cf26cd87e68890ee3f89" + "0x000000000000000000000000fb00d9cda6dad99994849d7c66fa2631f280f64f" ], "data": "0x", - "blockHash": "0x32070eafbb15dfae90d06f678435e598178d9118c822785b6547ecf3ed3e52f8", - "blockNumber": "0x7922e3", - "transactionHash": "0xb345d382b9718b9a51f50c01bd7472c7a417354c654ab120e0794e938851a100", - "transactionIndex": "0x2", - "logIndex": "0x2", + "blockHash": "0x7bce77fea4208915d2636739287c7d13e85e0d6157faaa9e4fd8c47ce878776d", + "blockNumber": "0xbde8b3", + "transactionHash": "0x722a3ccbf9d285c60c018968c299422f2763ca971e8d99c09c247a4cac5e09ac", + "transactionIndex": "0x6", + "logIndex": "0x38", "removed": false }, { - "address": "0x6c38612d3f645711dd080711021fC1bA998a5628", + "address": "0xc578475d39894163a07cb31dbb704e2c9a907c39", "topics": [ "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "blockHash": "0x32070eafbb15dfae90d06f678435e598178d9118c822785b6547ecf3ed3e52f8", - "blockNumber": "0x7922e3", - "transactionHash": "0xb345d382b9718b9a51f50c01bd7472c7a417354c654ab120e0794e938851a100", - "transactionIndex": "0x2", - "logIndex": "0x3", + "blockHash": "0x7bce77fea4208915d2636739287c7d13e85e0d6157faaa9e4fd8c47ce878776d", + "blockNumber": "0xbde8b3", + "transactionHash": "0x722a3ccbf9d285c60c018968c299422f2763ca971e8d99c09c247a4cac5e09ac", + "transactionIndex": "0x6", + "logIndex": "0x39", "removed": false } ], - "status": "0x1", - "logsBloom": "0x00000000000400000000000000000000400000000000000000800000000000000000000000000000200000000000000000000000000000000200000000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000024000000000000000001000000001000000000020000000000000000010000000000000000004000000000000000020000000000000000000000000000000000000000000008000000000000000000000", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002002000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000800000000000000000000000080000000000000000000000000000000008000000000004004000000000000000000000000000000004040000020000000000000000000000000000008000004400000000000000020000000000000000000000000000000000000000000000000000000000000000001", "type": "0x2", - "effectiveGasPrice": "0xb2d05f27" + "transactionHash": "0x722a3ccbf9d285c60c018968c299422f2763ca971e8d99c09c247a4cac5e09ac", + "transactionIndex": "0x6", + "blockHash": "0x7bce77fea4208915d2636739287c7d13e85e0d6157faaa9e4fd8c47ce878776d", + "blockNumber": "0xbde8b3", + "gasUsed": "0x2cd99", + "effectiveGasPrice": "0xf445d", + "from": "0xfb00d9cda6dad99994849d7c66fa2631f280f64f", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0xc578475d39894163a07cb31dbb704e2c9a907c39", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x785ca0a08", + "l1GasPrice": "0x7b47aaef", + "l1GasUsed": "0x376c" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1711645866, + "timestamp": 1720660106, "chain": 84532, - "commit": "f65de447" + "commit": "1c05458e" } \ No newline at end of file diff --git a/packages/contracts/lib/p256-verifier b/packages/contracts/lib/p256-verifier index 59c9e2a8b..5f96fa28c 160000 --- a/packages/contracts/lib/p256-verifier +++ b/packages/contracts/lib/p256-verifier @@ -1 +1 @@ -Subproject commit 59c9e2a8bc23dc2dea827668881daab748d3aca2 +Subproject commit 5f96fa28cbf725cb4195ec5798589f23cc129d68 diff --git a/packages/contracts/package.json b/packages/contracts/package.json index db30751d3..ab3f6cdac 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -24,7 +24,8 @@ "dev:anvil-add-send-account-factory-fixtures": "bun run ./script/anvil-add-send-account-factory-fixtures.ts", "dev:anvil-add-token-paymaster-fixtures": "bun run ./script/anvil-add-token-paymaster-fixtures.ts", "dev:anvil-add-send-check-fixtures": "bun run ./script/anvil-add-send-check-fixtures.ts", - "dev:anvil-token-paymaster-deposit": "bun run ./script/anvil-token-paymaster-deposit.ts" + "dev:anvil-token-paymaster-deposit": "bun run ./script/anvil-token-paymaster-deposit.ts", + "dev:anvil-deploy-fjord-send-verifier-fixtures": "bun run ./script/anvil-deploy-fjord-send-verifier-fixtures.ts" }, "devDependencies": { "@my/supabase": "workspace:*", diff --git a/packages/contracts/script/DeployFjordSendVerifier.s.sol b/packages/contracts/script/DeployFjordSendVerifier.s.sol new file mode 100644 index 000000000..ca1f9355f --- /dev/null +++ b/packages/contracts/script/DeployFjordSendVerifier.s.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.20; + +import {Script, console2} from "forge-std/Script.sol"; +import {Helper} from "../src/Helper.sol"; + +import {SendVerifier, SendVerifierProxy} from "../src/SendVerifier.sol"; + +/** + * Deploys new p256 precompiled verifier implementation and upgrades the SendVerifierProxy to it. + */ +contract DeployFjordSendVerifierScript is Script, Helper { + function setUp() public { + this.labels(); + } + + function run() public { + address svpAddr = vm.envAddress("SVP_ADDRESS"); // send verifier proxy address + + require(svpAddr != address(0), "SVP_ADDRESS env variable not set"); + + vm.startBroadcast(); + + bytes32 salt = keccak256("fjord"); + address verifier = address(new SendVerifier{salt: salt}()); // deploy new implementation with native p256 + address owner = msg.sender; + + // solhint-disable-next-line no-console + console2.log("new verifier address:", verifier); + // solhint-disable-next-line no-console + console2.log("owner address:", owner); + + SendVerifier sv = SendVerifier(svpAddr); + sv.upgradeTo(verifier); + + // solhint-disable-next-line no-console + console2.log("Upgraded SendVerifierProxy address:", address(sv)); + + vm.stopBroadcast(); + } +} diff --git a/packages/contracts/script/UpgradeSendVerifier.s.sol b/packages/contracts/script/UpgradeSendVerifier.s.sol new file mode 100644 index 000000000..8d20dbbb6 --- /dev/null +++ b/packages/contracts/script/UpgradeSendVerifier.s.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.20; + +import {Script, console2} from "forge-std/Script.sol"; +import {Helper} from "../src/Helper.sol"; + +import {SendVerifier, SendVerifierProxy} from "../src/SendVerifier.sol"; + +/** + * Upgrades the SendVerifierProxy to a new implementation. + */ +contract UpgradeSendVerifierScript is Script, Helper { + function setUp() public { + this.labels(); + } + + function run() public { + address svpAddr = vm.envAddress("SVP_ADDRESS"); // send verifier proxy address + address newVerifier = vm.envAddress("NEW_VERIFIER_ADDRESS"); // new verifier address + require(svpAddr != address(0), "SVP_ADDRESS env variable not set"); + require(newVerifier != address(0), "NEW_VERIFIER_ADDRESS env variable not set"); + + vm.startBroadcast(); + // solhint-disable-next-line no-console + console2.log("new verifier address:", newVerifier); + + SendVerifier sv = SendVerifier(svpAddr); + // solhint-disable-next-line no-console + console2.log("SendVerifierProxy implementation before upgrade:", address(sv.implementation())); + sv.upgradeTo(newVerifier); + + // solhint-disable-next-line no-console + console2.log("Upgraded SendVerifierProxy address:", address(sv)); + + vm.stopBroadcast(); + } +} diff --git a/packages/contracts/script/anvil-deploy-fjord-send-verifier-fixtures.ts b/packages/contracts/script/anvil-deploy-fjord-send-verifier-fixtures.ts new file mode 100644 index 000000000..9dba67529 --- /dev/null +++ b/packages/contracts/script/anvil-deploy-fjord-send-verifier-fixtures.ts @@ -0,0 +1,51 @@ +import 'zx/globals' +$.verbose = true + +/** + * This script is used to deploy the SendVerifier and SendAccountFactory contracts + */ + +const RPC_URL = 'http://127.0.0.1:8546' +const baseSendMVPDeployer = '0x436454a68bef94901014e2af90f86e7355a029f3' +void (async function main() { + console.log(chalk.blue('Enable auto-mining...')) + await $`cast rpc --rpc-url ${RPC_URL} evm_setAutomine true` + + console.log(chalk.blue('Impersonating the airdrop multisig...')) + await $`cast rpc --rpc-url http://localhost:8546 \ + anvil_impersonateAccount \ + ${baseSendMVPDeployer}` + + const broadcast = JSON.parse( + await Bun.file( + `${import.meta.dir}/../broadcast/DeploySendVerifier.s.sol/8453/run-latest.json` + ).text() + ) as { + transactions: { + contractName: string + contractAddress: string + }[] + } + const svpAddress = broadcast.transactions.find( + (tx) => tx.contractName === 'SendVerifierProxy' + )?.contractAddress + console.log(chalk.blue(`Send Verifier Proxy address: ${svpAddress}`)) + + $.env.SVP_ADDRESS = svpAddress + + console.log(chalk.blue('Deploying SendVerifier contract...')) + await $`forge script DeployFjordSendVerifierScript \ + -vvvv \ + --rpc-url ${RPC_URL} \ + --unlocked \ + --sender ${baseSendMVPDeployer} \ + --broadcast` + + console.log(chalk.blue('Disable auto-mining...')) + await $`cast rpc --rpc-url ${RPC_URL} evm_setAutomine false` + + console.log(chalk.blue(`Re-enable interval mining... ${$.env.ANVIL_BLOCK_TIME ?? '2'}`)) + await $`cast rpc --rpc-url ${RPC_URL} evm_setIntervalMining ${$.env.ANVIL_BLOCK_TIME ?? '2'}` // mimics Tiltfile default + + console.log(chalk.green('Done!')) +})() diff --git a/packages/contracts/src/SendVerifier.sol b/packages/contracts/src/SendVerifier.sol index cd4cb6abf..387e2e976 100644 --- a/packages/contracts/src/SendVerifier.sol +++ b/packages/contracts/src/SendVerifier.sol @@ -63,8 +63,6 @@ contract SendVerifier is OwnableUpgradeable, UUPSUpgradeable { authenticatorData: sig.authenticatorData, requireUserVerification: false, clientDataJSON: sig.clientDataJSON, - challengeLocation: sig.challengeLocation, - responseTypeLocation: sig.responseTypeLocation, r: sig.r, s: sig.s, x: x, diff --git a/packages/playwright/tests/home.onboarded.spec.ts b/packages/playwright/tests/home.onboarded.spec.ts index f65cdf840..861075ee2 100644 --- a/packages/playwright/tests/home.onboarded.spec.ts +++ b/packages/playwright/tests/home.onboarded.spec.ts @@ -7,6 +7,7 @@ import { expect, test } from './fixtures/send-accounts' import debug from 'debug' import type { Page } from '@playwright/test' import { mockUsdcTransfers } from 'app/features/home/utils/__mocks__/mock-usdc-transfers' +import { assert } from 'app/utils/assert' let log: debug.Debugger @@ -18,17 +19,16 @@ const heading = (page: Page) => page.getByRole('heading', { name: 'Home', exact: true }).and(page.getByText('Home')) test('can visit token detail page', async ({ context, page }) => { - const req = context.route(`${SUPABASE_URL}/rest/v1/activity_feed*`, async (route) => { + await context.route(`${SUPABASE_URL}/rest/v1/activity_feed*`, async (route) => { const url = new URL(route.request().url()) - expect(`${url.pathname}${url.search}`).toMatchSnapshot('token-details-history-url') await route.fulfill({ body: JSON.stringify(mockUsdcTransfers), headers: { 'content-type': 'application/json; charset=utf-8' }, status: 200, }) + expect.soft(`${url.pathname}${url.search}`).toMatchSnapshot('token-details-history-url') }) await page.goto('/?token=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913') // usdc - await req log('beforeEach', `url=${page.url()}`) await expect(heading(page)).toBeVisible() diff --git a/packages/playwright/tests/home.onboarded.spec.ts-snapshots/token-details-history-url-chromium b/packages/playwright/tests/home.onboarded.spec.ts-snapshots/token-details-history-url-chromium index 6b6e10f68..f52a92b0c 100644 --- a/packages/playwright/tests/home.onboarded.spec.ts-snapshots/token-details-history-url-chromium +++ b/packages/playwright/tests/home.onboarded.spec.ts-snapshots/token-details-history-url-chromium @@ -1 +1 @@ -/rest/v1/activity_feed?select=*&event_name=eq.send_account_transfers&data-%3E%3Elog_addr=eq.%5Cx833589fcd6edb6e08f4c7c32d4f71b54bda02913&or=%28from_user.not.is.null%2C+to_user.not.is.null%29&order=created_at.desc&offset=0&limit=10 \ No newline at end of file +/rest/v1/activity_feed?select=*&event_name=eq.send_account_transfers&data-%3E%3Elog_addr=eq.%5Cx833589fcd6edb6e08f4c7c32d4f71b54bda02913&or=%28from_user.not.is.null%2C+to_user.not.is.null%29&or=%28data-%3Et.is.null%2C+data-%3Ef.is.null%2C+and%28data-%3E%3Et.not.in.%28%5Cx592e1224d203be4214b15e205f6081fbbacfcd2d%2C%5Cx4c99cdaab0cfe32b4ba77d30342b5c51e0444e5b%2C%5Cx592e1224d203be4214b15e205f6081fbbacfcd2d%29%2C+data-%3E%3Ef.not.in.%28%5Cx592e1224d203be4214b15e205f6081fbbacfcd2d%2C%5Cx4c99cdaab0cfe32b4ba77d30342b5c51e0444e5b%2C%5Cx592e1224d203be4214b15e205f6081fbbacfcd2d%29%29%29&order=created_at.desc&offset=0&limit=10 \ No newline at end of file diff --git a/packages/playwright/tests/home.onboarded.spec.ts-snapshots/token-details-history-url-firefox b/packages/playwright/tests/home.onboarded.spec.ts-snapshots/token-details-history-url-firefox index 6b6e10f68..f52a92b0c 100644 --- a/packages/playwright/tests/home.onboarded.spec.ts-snapshots/token-details-history-url-firefox +++ b/packages/playwright/tests/home.onboarded.spec.ts-snapshots/token-details-history-url-firefox @@ -1 +1 @@ -/rest/v1/activity_feed?select=*&event_name=eq.send_account_transfers&data-%3E%3Elog_addr=eq.%5Cx833589fcd6edb6e08f4c7c32d4f71b54bda02913&or=%28from_user.not.is.null%2C+to_user.not.is.null%29&order=created_at.desc&offset=0&limit=10 \ No newline at end of file +/rest/v1/activity_feed?select=*&event_name=eq.send_account_transfers&data-%3E%3Elog_addr=eq.%5Cx833589fcd6edb6e08f4c7c32d4f71b54bda02913&or=%28from_user.not.is.null%2C+to_user.not.is.null%29&or=%28data-%3Et.is.null%2C+data-%3Ef.is.null%2C+and%28data-%3E%3Et.not.in.%28%5Cx592e1224d203be4214b15e205f6081fbbacfcd2d%2C%5Cx4c99cdaab0cfe32b4ba77d30342b5c51e0444e5b%2C%5Cx592e1224d203be4214b15e205f6081fbbacfcd2d%29%2C+data-%3E%3Ef.not.in.%28%5Cx592e1224d203be4214b15e205f6081fbbacfcd2d%2C%5Cx4c99cdaab0cfe32b4ba77d30342b5c51e0444e5b%2C%5Cx592e1224d203be4214b15e205f6081fbbacfcd2d%29%29%29&order=created_at.desc&offset=0&limit=10 \ No newline at end of file diff --git a/packages/playwright/tests/send.onboarded.spec.ts b/packages/playwright/tests/send.onboarded.spec.ts index da8b914b2..1e2683a75 100644 --- a/packages/playwright/tests/send.onboarded.spec.ts +++ b/packages/playwright/tests/send.onboarded.spec.ts @@ -13,6 +13,7 @@ import { parseUnits, zeroAddress } from 'viem' import { ProfilePage } from './fixtures/profiles' import { SendPage } from './fixtures/send' import { sendTokenAddresses, testBaseClient, usdcAddress } from './fixtures/viem' +import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' const test = mergeTests(sendAccountTest, snapletTest) @@ -43,8 +44,6 @@ const tokens = [ const idTypes = ['tag', 'sendid', 'address'] as const -const testEOA = zeroAddress.replace('0x0', '0x1') as `0x${string}` - for (const token of tokens) { test(`can send ${token.symbol} starting from profile page`, async ({ page, seed, supabase }) => { const plan = await seed.users([userOnboarded]) @@ -96,7 +95,7 @@ for (const token of tokens) { const recvAccount: { address: `0x${string}` } = (() => { switch (idType) { case 'address': - return { address: testEOA } + return { address: privateKeyToAccount(generatePrivateKey()).address } default: assert(!!plan.sendAccounts[0], 'send account not found') return { address: plan.sendAccounts[0].address as `0x${string}` } @@ -108,7 +107,7 @@ for (const token of tokens) { case 'sendid': return profile?.sendId.toString() case 'address': - return testEOA + return recvAccount.address default: return tag?.name } @@ -176,7 +175,7 @@ for (const token of tokens) { (() => { switch (idType) { case 'address': - return shorten(testEOA, 6, 6) + return shorten(recvAccount.address, 6, 6) case 'sendid': return `#${profile.sendId}` default: @@ -189,7 +188,7 @@ for (const token of tokens) { const counterparty = (() => { switch (idType) { case 'address': - return testEOA + return recvAccount.address case 'sendid': return profile.name default: diff --git a/packages/playwright/tests/sign-up.anon.spec.ts b/packages/playwright/tests/sign-up.anon.spec.ts index d9a3430aa..d245d0faf 100644 --- a/packages/playwright/tests/sign-up.anon.spec.ts +++ b/packages/playwright/tests/sign-up.anon.spec.ts @@ -52,7 +52,7 @@ test('can sign up', async ({ page, pg }) => { await signUp(page, phone, expect) // ensure use can log in with passkey - page.context().clearCookies() + await page.context().clearCookies() await page.goto('/') await expect(page).toHaveURL('/') await expect(signInLink).toBeVisible() @@ -66,7 +66,9 @@ test('can sign up', async ({ page, pg }) => { .and(page.getByText('Home')) await expect(homeHeader).toBeVisible() } finally { - await pg.query('DELETE FROM auth.users WHERE phone = $1', [phone]) + await pg.query('DELETE FROM auth.users WHERE phone = $1', [phone]).catch((e) => { + log('delete failed', e) + }) } }) diff --git a/packages/wagmi/src/generated.ts b/packages/wagmi/src/generated.ts index 309505c0b..a52931e36 100644 --- a/packages/wagmi/src/generated.ts +++ b/packages/wagmi/src/generated.ts @@ -2967,7 +2967,7 @@ export const sendUniswapV3PoolConfig = { /** * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const sendVerifierAbi = [ { type: 'constructor', inputs: [], stateMutability: 'nonpayable' }, @@ -3104,17 +3104,17 @@ export const sendVerifierAbi = [ /** * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const sendVerifierAddress = { 8453: '0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B', - 84532: '0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B', + 84532: '0xe46056eBA301069A9E5a166b424b5Cb86b0Cf6E6', 845337: '0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B', } as const /** * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const sendVerifierConfig = { address: sendVerifierAddress, abi: sendVerifierAbi } as const @@ -3124,7 +3124,7 @@ export const sendVerifierConfig = { address: sendVerifierAddress, abi: sendVerif /** * - [__View Contract on Base Basescan__](https://basescan.org/address/0x339960716f26c318f9c28c3efc363246f274f859) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0x6c38612d3f645711dd080711021fC1bA998a5628) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xc578475d39894163a07cb31dbb704e2c9a907c39) */ export const sendVerifierProxyAbi = [ { @@ -3158,17 +3158,17 @@ export const sendVerifierProxyAbi = [ /** * - [__View Contract on Base Basescan__](https://basescan.org/address/0x339960716f26c318f9c28c3efc363246f274f859) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0x6c38612d3f645711dd080711021fC1bA998a5628) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xc578475d39894163a07cb31dbb704e2c9a907c39) */ export const sendVerifierProxyAddress = { 8453: '0x339960716f26C318F9C28C3Efc363246f274f859', - 84532: '0x6c38612d3f645711dd080711021fC1bA998a5628', + 84532: '0xc578475d39894163a07Cb31dbB704e2c9A907c39', 845337: '0x339960716f26C318F9C28C3Efc363246f274f859', } as const /** * - [__View Contract on Base Basescan__](https://basescan.org/address/0x339960716f26c318f9c28c3efc363246f274f859) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0x6c38612d3f645711dd080711021fC1bA998a5628) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xc578475d39894163a07cb31dbb704e2c9a907c39) */ export const sendVerifierProxyConfig = { address: sendVerifierProxyAddress, @@ -6989,7 +6989,7 @@ export const watchSendTokenTransferEvent = /*#__PURE__*/ createWatchContractEven * Wraps __{@link readContract}__ with `abi` set to __{@link sendVerifierAbi}__ * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const readSendVerifier = /*#__PURE__*/ createReadContract({ abi: sendVerifierAbi, @@ -7000,7 +7000,7 @@ export const readSendVerifier = /*#__PURE__*/ createReadContract({ * Wraps __{@link readContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"UPGRADE_INTERFACE_VERSION"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const readSendVerifierUpgradeInterfaceVersion = /*#__PURE__*/ createReadContract({ abi: sendVerifierAbi, @@ -7012,7 +7012,7 @@ export const readSendVerifierUpgradeInterfaceVersion = /*#__PURE__*/ createReadC * Wraps __{@link readContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"implementation"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const readSendVerifierImplementation = /*#__PURE__*/ createReadContract({ abi: sendVerifierAbi, @@ -7024,7 +7024,7 @@ export const readSendVerifierImplementation = /*#__PURE__*/ createReadContract({ * Wraps __{@link readContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"owner"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const readSendVerifierOwner = /*#__PURE__*/ createReadContract({ abi: sendVerifierAbi, @@ -7036,7 +7036,7 @@ export const readSendVerifierOwner = /*#__PURE__*/ createReadContract({ * Wraps __{@link readContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"proxiableUUID"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const readSendVerifierProxiableUuid = /*#__PURE__*/ createReadContract({ abi: sendVerifierAbi, @@ -7048,7 +7048,7 @@ export const readSendVerifierProxiableUuid = /*#__PURE__*/ createReadContract({ * Wraps __{@link readContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"verifySignature"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const readSendVerifierVerifySignature = /*#__PURE__*/ createReadContract({ abi: sendVerifierAbi, @@ -7060,7 +7060,7 @@ export const readSendVerifierVerifySignature = /*#__PURE__*/ createReadContract( * Wraps __{@link writeContract}__ with `abi` set to __{@link sendVerifierAbi}__ * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const writeSendVerifier = /*#__PURE__*/ createWriteContract({ abi: sendVerifierAbi, @@ -7071,7 +7071,7 @@ export const writeSendVerifier = /*#__PURE__*/ createWriteContract({ * Wraps __{@link writeContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"init"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const writeSendVerifierInit = /*#__PURE__*/ createWriteContract({ abi: sendVerifierAbi, @@ -7083,7 +7083,7 @@ export const writeSendVerifierInit = /*#__PURE__*/ createWriteContract({ * Wraps __{@link writeContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"renounceOwnership"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const writeSendVerifierRenounceOwnership = /*#__PURE__*/ createWriteContract({ abi: sendVerifierAbi, @@ -7095,7 +7095,7 @@ export const writeSendVerifierRenounceOwnership = /*#__PURE__*/ createWriteContr * Wraps __{@link writeContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"transferOwnership"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const writeSendVerifierTransferOwnership = /*#__PURE__*/ createWriteContract({ abi: sendVerifierAbi, @@ -7107,7 +7107,7 @@ export const writeSendVerifierTransferOwnership = /*#__PURE__*/ createWriteContr * Wraps __{@link writeContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"upgradeTo"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const writeSendVerifierUpgradeTo = /*#__PURE__*/ createWriteContract({ abi: sendVerifierAbi, @@ -7119,7 +7119,7 @@ export const writeSendVerifierUpgradeTo = /*#__PURE__*/ createWriteContract({ * Wraps __{@link writeContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"upgradeToAndCall"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const writeSendVerifierUpgradeToAndCall = /*#__PURE__*/ createWriteContract({ abi: sendVerifierAbi, @@ -7131,7 +7131,7 @@ export const writeSendVerifierUpgradeToAndCall = /*#__PURE__*/ createWriteContra * Wraps __{@link simulateContract}__ with `abi` set to __{@link sendVerifierAbi}__ * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const prepareWriteSendVerifier = /*#__PURE__*/ createSimulateContract({ abi: sendVerifierAbi, @@ -7142,7 +7142,7 @@ export const prepareWriteSendVerifier = /*#__PURE__*/ createSimulateContract({ * Wraps __{@link simulateContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"init"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const prepareWriteSendVerifierInit = /*#__PURE__*/ createSimulateContract({ abi: sendVerifierAbi, @@ -7154,7 +7154,7 @@ export const prepareWriteSendVerifierInit = /*#__PURE__*/ createSimulateContract * Wraps __{@link simulateContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"renounceOwnership"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const prepareWriteSendVerifierRenounceOwnership = /*#__PURE__*/ createSimulateContract({ abi: sendVerifierAbi, @@ -7166,7 +7166,7 @@ export const prepareWriteSendVerifierRenounceOwnership = /*#__PURE__*/ createSim * Wraps __{@link simulateContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"transferOwnership"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const prepareWriteSendVerifierTransferOwnership = /*#__PURE__*/ createSimulateContract({ abi: sendVerifierAbi, @@ -7178,7 +7178,7 @@ export const prepareWriteSendVerifierTransferOwnership = /*#__PURE__*/ createSim * Wraps __{@link simulateContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"upgradeTo"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const prepareWriteSendVerifierUpgradeTo = /*#__PURE__*/ createSimulateContract({ abi: sendVerifierAbi, @@ -7190,7 +7190,7 @@ export const prepareWriteSendVerifierUpgradeTo = /*#__PURE__*/ createSimulateCon * Wraps __{@link simulateContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"upgradeToAndCall"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const prepareWriteSendVerifierUpgradeToAndCall = /*#__PURE__*/ createSimulateContract({ abi: sendVerifierAbi, @@ -7202,7 +7202,7 @@ export const prepareWriteSendVerifierUpgradeToAndCall = /*#__PURE__*/ createSimu * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link sendVerifierAbi}__ * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const watchSendVerifierEvent = /*#__PURE__*/ createWatchContractEvent({ abi: sendVerifierAbi, @@ -7213,7 +7213,7 @@ export const watchSendVerifierEvent = /*#__PURE__*/ createWatchContractEvent({ * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link sendVerifierAbi}__ and `eventName` set to `"Initialized"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const watchSendVerifierInitializedEvent = /*#__PURE__*/ createWatchContractEvent({ abi: sendVerifierAbi, @@ -7225,7 +7225,7 @@ export const watchSendVerifierInitializedEvent = /*#__PURE__*/ createWatchContra * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link sendVerifierAbi}__ and `eventName` set to `"OwnershipTransferred"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const watchSendVerifierOwnershipTransferredEvent = /*#__PURE__*/ createWatchContractEvent({ abi: sendVerifierAbi, @@ -7237,7 +7237,7 @@ export const watchSendVerifierOwnershipTransferredEvent = /*#__PURE__*/ createWa * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link sendVerifierAbi}__ and `eventName` set to `"Upgraded"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const watchSendVerifierUpgradedEvent = /*#__PURE__*/ createWatchContractEvent({ abi: sendVerifierAbi, @@ -7249,7 +7249,7 @@ export const watchSendVerifierUpgradedEvent = /*#__PURE__*/ createWatchContractE * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link sendVerifierProxyAbi}__ * * - [__View Contract on Base Basescan__](https://basescan.org/address/0x339960716f26c318f9c28c3efc363246f274f859) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0x6c38612d3f645711dd080711021fC1bA998a5628) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xc578475d39894163a07cb31dbb704e2c9a907c39) */ export const watchSendVerifierProxyEvent = /*#__PURE__*/ createWatchContractEvent({ abi: sendVerifierProxyAbi, @@ -7260,7 +7260,7 @@ export const watchSendVerifierProxyEvent = /*#__PURE__*/ createWatchContractEven * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link sendVerifierProxyAbi}__ and `eventName` set to `"Upgraded"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0x339960716f26c318f9c28c3efc363246f274f859) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0x6c38612d3f645711dd080711021fC1bA998a5628) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xc578475d39894163a07cb31dbb704e2c9a907c39) */ export const watchSendVerifierProxyUpgradedEvent = /*#__PURE__*/ createWatchContractEvent({ abi: sendVerifierProxyAbi, @@ -11414,7 +11414,7 @@ export const useWatchSendTokenTransferEvent = /*#__PURE__*/ createUseWatchContra * Wraps __{@link useReadContract}__ with `abi` set to __{@link sendVerifierAbi}__ * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useReadSendVerifier = /*#__PURE__*/ createUseReadContract({ abi: sendVerifierAbi, @@ -11425,7 +11425,7 @@ export const useReadSendVerifier = /*#__PURE__*/ createUseReadContract({ * Wraps __{@link useReadContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"UPGRADE_INTERFACE_VERSION"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useReadSendVerifierUpgradeInterfaceVersion = /*#__PURE__*/ createUseReadContract({ abi: sendVerifierAbi, @@ -11437,7 +11437,7 @@ export const useReadSendVerifierUpgradeInterfaceVersion = /*#__PURE__*/ createUs * Wraps __{@link useReadContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"implementation"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useReadSendVerifierImplementation = /*#__PURE__*/ createUseReadContract({ abi: sendVerifierAbi, @@ -11449,7 +11449,7 @@ export const useReadSendVerifierImplementation = /*#__PURE__*/ createUseReadCont * Wraps __{@link useReadContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"owner"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useReadSendVerifierOwner = /*#__PURE__*/ createUseReadContract({ abi: sendVerifierAbi, @@ -11461,7 +11461,7 @@ export const useReadSendVerifierOwner = /*#__PURE__*/ createUseReadContract({ * Wraps __{@link useReadContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"proxiableUUID"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useReadSendVerifierProxiableUuid = /*#__PURE__*/ createUseReadContract({ abi: sendVerifierAbi, @@ -11473,7 +11473,7 @@ export const useReadSendVerifierProxiableUuid = /*#__PURE__*/ createUseReadContr * Wraps __{@link useReadContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"verifySignature"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useReadSendVerifierVerifySignature = /*#__PURE__*/ createUseReadContract({ abi: sendVerifierAbi, @@ -11485,7 +11485,7 @@ export const useReadSendVerifierVerifySignature = /*#__PURE__*/ createUseReadCon * Wraps __{@link useWriteContract}__ with `abi` set to __{@link sendVerifierAbi}__ * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useWriteSendVerifier = /*#__PURE__*/ createUseWriteContract({ abi: sendVerifierAbi, @@ -11496,7 +11496,7 @@ export const useWriteSendVerifier = /*#__PURE__*/ createUseWriteContract({ * Wraps __{@link useWriteContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"init"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useWriteSendVerifierInit = /*#__PURE__*/ createUseWriteContract({ abi: sendVerifierAbi, @@ -11508,7 +11508,7 @@ export const useWriteSendVerifierInit = /*#__PURE__*/ createUseWriteContract({ * Wraps __{@link useWriteContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"renounceOwnership"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useWriteSendVerifierRenounceOwnership = /*#__PURE__*/ createUseWriteContract({ abi: sendVerifierAbi, @@ -11520,7 +11520,7 @@ export const useWriteSendVerifierRenounceOwnership = /*#__PURE__*/ createUseWrit * Wraps __{@link useWriteContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"transferOwnership"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useWriteSendVerifierTransferOwnership = /*#__PURE__*/ createUseWriteContract({ abi: sendVerifierAbi, @@ -11532,7 +11532,7 @@ export const useWriteSendVerifierTransferOwnership = /*#__PURE__*/ createUseWrit * Wraps __{@link useWriteContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"upgradeTo"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useWriteSendVerifierUpgradeTo = /*#__PURE__*/ createUseWriteContract({ abi: sendVerifierAbi, @@ -11544,7 +11544,7 @@ export const useWriteSendVerifierUpgradeTo = /*#__PURE__*/ createUseWriteContrac * Wraps __{@link useWriteContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"upgradeToAndCall"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useWriteSendVerifierUpgradeToAndCall = /*#__PURE__*/ createUseWriteContract({ abi: sendVerifierAbi, @@ -11556,7 +11556,7 @@ export const useWriteSendVerifierUpgradeToAndCall = /*#__PURE__*/ createUseWrite * Wraps __{@link useSimulateContract}__ with `abi` set to __{@link sendVerifierAbi}__ * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useSimulateSendVerifier = /*#__PURE__*/ createUseSimulateContract({ abi: sendVerifierAbi, @@ -11567,7 +11567,7 @@ export const useSimulateSendVerifier = /*#__PURE__*/ createUseSimulateContract({ * Wraps __{@link useSimulateContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"init"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useSimulateSendVerifierInit = /*#__PURE__*/ createUseSimulateContract({ abi: sendVerifierAbi, @@ -11579,7 +11579,7 @@ export const useSimulateSendVerifierInit = /*#__PURE__*/ createUseSimulateContra * Wraps __{@link useSimulateContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"renounceOwnership"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useSimulateSendVerifierRenounceOwnership = /*#__PURE__*/ createUseSimulateContract({ abi: sendVerifierAbi, @@ -11591,7 +11591,7 @@ export const useSimulateSendVerifierRenounceOwnership = /*#__PURE__*/ createUseS * Wraps __{@link useSimulateContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"transferOwnership"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useSimulateSendVerifierTransferOwnership = /*#__PURE__*/ createUseSimulateContract({ abi: sendVerifierAbi, @@ -11603,7 +11603,7 @@ export const useSimulateSendVerifierTransferOwnership = /*#__PURE__*/ createUseS * Wraps __{@link useSimulateContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"upgradeTo"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useSimulateSendVerifierUpgradeTo = /*#__PURE__*/ createUseSimulateContract({ abi: sendVerifierAbi, @@ -11615,7 +11615,7 @@ export const useSimulateSendVerifierUpgradeTo = /*#__PURE__*/ createUseSimulateC * Wraps __{@link useSimulateContract}__ with `abi` set to __{@link sendVerifierAbi}__ and `functionName` set to `"upgradeToAndCall"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useSimulateSendVerifierUpgradeToAndCall = /*#__PURE__*/ createUseSimulateContract({ abi: sendVerifierAbi, @@ -11627,7 +11627,7 @@ export const useSimulateSendVerifierUpgradeToAndCall = /*#__PURE__*/ createUseSi * Wraps __{@link useWatchContractEvent}__ with `abi` set to __{@link sendVerifierAbi}__ * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useWatchSendVerifierEvent = /*#__PURE__*/ createUseWatchContractEvent({ abi: sendVerifierAbi, @@ -11638,7 +11638,7 @@ export const useWatchSendVerifierEvent = /*#__PURE__*/ createUseWatchContractEve * Wraps __{@link useWatchContractEvent}__ with `abi` set to __{@link sendVerifierAbi}__ and `eventName` set to `"Initialized"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useWatchSendVerifierInitializedEvent = /*#__PURE__*/ createUseWatchContractEvent({ abi: sendVerifierAbi, @@ -11650,7 +11650,7 @@ export const useWatchSendVerifierInitializedEvent = /*#__PURE__*/ createUseWatch * Wraps __{@link useWatchContractEvent}__ with `abi` set to __{@link sendVerifierAbi}__ and `eventName` set to `"OwnershipTransferred"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useWatchSendVerifierOwnershipTransferredEvent = /*#__PURE__*/ createUseWatchContractEvent({ @@ -11663,7 +11663,7 @@ export const useWatchSendVerifierOwnershipTransferredEvent = * Wraps __{@link useWatchContractEvent}__ with `abi` set to __{@link sendVerifierAbi}__ and `eventName` set to `"Upgraded"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0xe269194e41cd50e2986f82fc23a2b95d8bafed2b) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xE269194e41Cd50E2986f82Fc23A2B95D8bAFED2B) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xe46056eba301069a9e5a166b424b5cb86b0cf6e6) */ export const useWatchSendVerifierUpgradedEvent = /*#__PURE__*/ createUseWatchContractEvent({ abi: sendVerifierAbi, @@ -11675,7 +11675,7 @@ export const useWatchSendVerifierUpgradedEvent = /*#__PURE__*/ createUseWatchCon * Wraps __{@link useWatchContractEvent}__ with `abi` set to __{@link sendVerifierProxyAbi}__ * * - [__View Contract on Base Basescan__](https://basescan.org/address/0x339960716f26c318f9c28c3efc363246f274f859) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0x6c38612d3f645711dd080711021fC1bA998a5628) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xc578475d39894163a07cb31dbb704e2c9a907c39) */ export const useWatchSendVerifierProxyEvent = /*#__PURE__*/ createUseWatchContractEvent({ abi: sendVerifierProxyAbi, @@ -11686,7 +11686,7 @@ export const useWatchSendVerifierProxyEvent = /*#__PURE__*/ createUseWatchContra * Wraps __{@link useWatchContractEvent}__ with `abi` set to __{@link sendVerifierProxyAbi}__ and `eventName` set to `"Upgraded"` * * - [__View Contract on Base Basescan__](https://basescan.org/address/0x339960716f26c318f9c28c3efc363246f274f859) - * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0x6c38612d3f645711dd080711021fC1bA998a5628) + * - [__View Contract on Base Sepolia Basescan__](https://sepolia.basescan.org/address/0xc578475d39894163a07cb31dbb704e2c9a907c39) */ export const useWatchSendVerifierProxyUpgradedEvent = /*#__PURE__*/ createUseWatchContractEvent({ abi: sendVerifierProxyAbi, diff --git a/tilt/common.Tiltfile b/tilt/common.Tiltfile index b89244cdc..367d0e8ba 100644 --- a/tilt/common.Tiltfile +++ b/tilt/common.Tiltfile @@ -14,8 +14,19 @@ CI = bool(os.getenv( config.tilt_subcommand == "ci", )) +run_id = str(local( + "echo $RANDOM | shasum | head -c 10", + echo_off = True, + quiet = True, +)).strip() + def get_cfg(): - if os.getenv("TILT_CONFIGURED_PARSED") == None: + envcfg = os.getenv("TILT_CONFIGURED_PARSED") + if envcfg == None: + _cfg = None + else: + _cfg = decode_json(envcfg) + if _cfg == None or _cfg.get("run_id") != run_id: config.define_string_list( "args", args = True, @@ -25,10 +36,11 @@ def get_cfg(): _cfg = config.parse() + _cfg["run_id"] = run_id + config.set_enabled_resources(_cfg.get("args", [])) + os.putenv("TILT_CONFIGURED_PARSED", encode_json(_cfg)) - else: - _cfg = decode_json(os.getenv("TILT_CONFIGURED_PARSED")) return struct( args = _cfg.get("args", []), diff --git a/tilt/infra.Tiltfile b/tilt/infra.Tiltfile index c04ab624e..3b2ac83dd 100644 --- a/tilt/infra.Tiltfile +++ b/tilt/infra.Tiltfile @@ -184,6 +184,18 @@ local_resource( trigger_mode = TRIGGER_MODE_MANUAL, ) +local_resource( + "anvil:anvil-deploy-fjord-send-verifier-fixtures", + "yarn contracts dev:anvil-deploy-fjord-send-verifier-fixtures", + dir = _prj_root, + labels = labels, + resource_deps = _infra_resource_deps + [ + "anvil:mainnet", + "anvil:base", + "contracts:build", + ], +) + local_resource( "anvil:anvil-token-paymaster-deposit", "yarn contracts dev:anvil-token-paymaster-deposit", @@ -204,6 +216,7 @@ local_resource( "anvil:mainnet", "anvil:base", "anvil:anvil-token-paymaster-deposit", + "anvil:anvil-deploy-fjord-send-verifier-fixtures", ], )