diff --git a/.env.sample b/.env.sample index e6aebb40..7baff038 100644 --- a/.env.sample +++ b/.env.sample @@ -1,5 +1,5 @@ # RPCs -EVMX_RPC="https://rpc-socket-composer-testnet.t.conduit.xyz" +EVMX_RPC="https://rpc-evmx-devnet.socket.tech/" SEPOLIA_RPC="https://rpc.ankr.com/eth_sepolia/" ARBITRUM_SEPOLIA_RPC="https://rpc.ankr.com/arbitrum_sepolia" OPTIMISM_SEPOLIA_RPC="https://rpc.ankr.com/optimism_sepolia" @@ -7,18 +7,17 @@ BASE_SEPOLIA_RPC="https://rpc.ankr.com/base_sepolia" # EVMx key addresses # Find the most up to date addresses in deployments/dev_addresses.json -ADDRESS_RESOLVER="0x1307b0cDCA91e969D5885D0332bD34688E9f6E39" -AUCTION_MANAGER="0xA8016fad20367D9De8B21d4c16BB677bc7a265cE" -ARBITRUM_FEES_PLUG="0xFDd8beaDb07cB224971fD311F9218addC14443fb" +ADDRESS_RESOLVER="0xf3046B22F98C25305E8040286fB1b33378BA10a1" +FEES_MANAGER="0x603723100172D30171B7Fd9870ba80F8baf6FaD4" +ARBITRUM_FEES_PLUG="0x89324F93d852cB4fcDC4Ee202456be466ce096bb" # Add your deployer private key here # or remove it from this file if it is already an env var PRIVATE_KEY="0x" # Set app related values after deployment on EVMx -DEPLOYER="0x" APP_GATEWAY="0x" # FOR INFRASTRUCTURE DEPLOYMENT ONLY # Removes hardhat issues related to linting and syntax checking -SOCKET_SIGNER_KEY="0000dead0000dead0000dead0000dead0000dead0000dead0000dead0000dead" \ No newline at end of file +SOCKET_SIGNER_KEY="0000dead0000dead0000dead0000dead0000dead0000dead0000dead0000dead" diff --git a/.github/workflows/forge-test.yml b/.github/workflows/forge-test.yml index fb0ba844..bd4002dc 100644 --- a/.github/workflows/forge-test.yml +++ b/.github/workflows/forge-test.yml @@ -2,7 +2,7 @@ name: PR Checks on: pull_request: - branches: [ master ] + branches: [ master, staging ] env: FOUNDRY_PROFILE: ci diff --git a/ERROR.md b/ERROR.md deleted file mode 100644 index 8329313b..00000000 --- a/ERROR.md +++ /dev/null @@ -1,28 +0,0 @@ -# List of Errors in Socket Protocol - -| Error Name | Selector | -| --------------------------------------------- | ---------- | -| AppGatewayContractAlreadySetByDifferentSender | 0x6c0f1f28 | -| FeesAlreadyPaid | 0x0a6cc8e7 | -| AllPayloadsExecuted | 0x8c9b6d30 | -| NotFromForwarder | 0x7c307758 | -| CallFailed | 0x3b9a49a0 | -| BurnLimitExceeded | 0x1d1d5c1a | -| MintLimitExceeded | 0x8f05c4b9 | -| NotController | 0x75b238fc | -| NotAuthorized | 0x7a18c059 | -| NotBridge | 0x9d9c2c1c | -| NotSocket | 0x8d0c1f96 | -| ConnectorUnavailable | 0x8c1f1e42 | -| InvalidTokenContract | 0x2ee6fd0b | -| ZeroAddressReceiver | 0x9f9a4f4e | -| ZeroAddress | 0xd92e233d | -| ZeroAmount | 0x1087e3eb | -| InsufficientFunds | 0x356680b7 | -| InvalidSigner | 0x815e1d64 | -| InvalidFunction | 0x8436aa02 | -| InvalidTokenAddress | 0x8149c6aa | -| NoPermit | 0x4e831acb | -| OnlyOwner | 0x5fc483c5 | -| OnlyNominee | 0x4e2d3edf | -| InvalidGateway | 0x0b0e8fed | diff --git a/Errors.md b/Errors.md index 6ed5971b..fe4496c6 100644 --- a/Errors.md +++ b/Errors.md @@ -1,35 +1,74 @@ # Custom Error Codes -## AddressResolver.sol +## apps/super-token-lockable/LimitHook.sol -| Error | Signature | -| -------------------------------------------------------- | ------------ | -| `AppGatewayContractAlreadySetByDifferentSender(address)` | `0xbe1ef5f1` | +| Error | Signature | +| --------------------- | ------------ | +| `BurnLimitExceeded()` | `0x85e72fd4` | +| `MintLimitExceeded()` | `0xb643bfa6` | -## AsyncPromise.sol +## apps/super-token-lockable/SuperTokenLockable.sol + +| Error | Signature | +| ---------------------------- | ------------ | +| `InsufficientBalance()` | `0xf4d678b8` | +| `InsufficientLockedTokens()` | `0x4f6d2a3e` | + +## base/PlugBase.sol + +| Error | Signature | +| ---------------------------- | ------------ | +| `SocketAlreadyInitialized()` | `0xc9500b00` | + +## mock/MockSocket.sol + +| Error | Signature | +| -------------------------- | ------------ | +| `PayloadAlreadyExecuted()` | `0xe17bd578` | +| `VerificationFailed()` | `0x439cc0cd` | +| `LowGasLimit()` | `0xd38edae0` | +| `InvalidSlug()` | `0x290a8315` | + +## mock/MockWatcherPrecompile.sol + +| Error | Signature | +| ---------------------- | ------------ | +| `InvalidChainSlug()` | `0xbff6b106` | +| `InvalidTransmitter()` | `0x58a70a0a` | + +## protocol/AddressResolver.sol + +| Error | Signature | +| ---------------------------- | ------------ | +| `InvalidAppGateway(address)` | `0x0e66940d` | + +## protocol/AsyncPromise.sol | Error | Signature | | ------------------------------- | ------------ | | `PromiseAlreadyResolved()` | `0x56b63537` | | `OnlyForwarderOrLocalInvoker()` | `0xa9fb0b28` | | `PromiseAlreadySetUp()` | `0x927c53d5` | +| `PromiseRevertFailed()` | `0x0175b9de` | -## apps/payload-delivery/ContractFactoryPlug.sol +## protocol/payload-delivery/ContractFactoryPlug.sol -| Error | Signature | -| -------------------- | ------------ | -| `DeploymentFailed()` | `0x30116425` | +| Error | Signature | +| ------------------------- | ------------ | +| `DeploymentFailed()` | `0x30116425` | +| `ExecutionFailed()` | `0xacfdb444` | +| `information(bool,bytes)` | `0x1a5c6d63` | -## apps/payload-delivery/FeesPlug.sol +## protocol/payload-delivery/FeesPlug.sol | Error | Signature | | ----------------------------------- | ------------ | | `FeesAlreadyPaid()` | `0xd3b1ad69` | | `InsufficientTokenBalance(address)` | `0x642faafa` | | `InvalidDepositAmount()` | `0xfe9ba5cd` | -| `InvalidTokenAddress()` | `0x1eb00b06` | +| `TokenNotWhitelisted(address)` | `0xea3bff2e` | -## apps/payload-delivery/app-gateway/AuctionManager.sol +## protocol/payload-delivery/app-gateway/AuctionManager.sol | Error | Signature | | ------------------------- | ------------ | @@ -37,8 +76,9 @@ | `AuctionAlreadyStarted()` | `0x628e3883` | | `BidExceedsMaxFees()` | `0x4c923f3c` | | `InvalidTransmitter()` | `0x58a70a0a` | +| `LowerBidAlreadyExists()` | `0xaaa1f709` | -## apps/payload-delivery/app-gateway/BatchAsync.sol +## protocol/payload-delivery/app-gateway/BatchAsync.sol | Error | Signature | | ----------------------- | ------------ | @@ -47,30 +87,71 @@ | `CallFailed(bytes32)` | `0xe22e3683` | | `PayloadTooLarge()` | `0x492f620d` | | `OnlyAppGateway()` | `0xfec944ea` | +| `WinningBidExists()` | `0xe8733654` | +| `InsufficientFees()` | `0x8d53e553` | -## apps/payload-delivery/app-gateway/FeesManager.sol +## protocol/payload-delivery/app-gateway/FeesManager.sol | Error | Signature | | ----------------------------- | ------------ | | `InsufficientFeesAvailable()` | `0x51488f54` | | `NoFeesForTransmitter()` | `0x248bac55` | | `NoFeesBlocked()` | `0x116d68f9` | +| `InvalidWatcherSignature()` | `0x5029f14f` | +| `NonceUsed()` | `0x1f6d5aef` | -## apps/super-token-lockable/LimitHook.sol +## protocol/socket/Socket.sol -| Error | Signature | -| --------------------- | ------------ | -| `BurnLimitExceeded()` | `0x85e72fd4` | -| `MintLimitExceeded()` | `0xb643bfa6` | +| Error | Signature | +| ----------------------------------------- | ------------ | +| `PayloadAlreadyExecuted(ExecutionStatus)` | `0xf4c54edd` | +| `VerificationFailed()` | `0x439cc0cd` | +| `LowGasLimit()` | `0xd38edae0` | +| `InvalidSlug()` | `0x290a8315` | +| `DeadlinePassed()` | `0x70f65caa` | -## apps/super-token-lockable/SuperTokenLockable.sol +## protocol/socket/SocketConfig.sol -| Error | Signature | -| ---------------------------- | ------------ | -| `InsufficientBalance()` | `0xf4d678b8` | -| `InsufficientLockedTokens()` | `0x4f6d2a3e` | +| Error | Signature | +| ------------------------------- | ------------ | +| `SwitchboardExists()` | `0x2dff8555` | +| `InvalidConnection()` | `0x63228f29` | +| `InvalidSwitchboard()` | `0xf63c9e4d` | +| `SwitchboardExistsOrDisabled()` | `0x1c7d2487` | + +## protocol/socket/SocketUtils.sol + +| Error | Signature | +| ---------------------- | ------------ | +| `InvalidTransmitter()` | `0x58a70a0a` | -## common/Errors.sol +## protocol/socket/switchboard/FastSwitchboard.sol + +| Error | Signature | +| ------------------- | ------------ | +| `AlreadyAttested()` | `0x35d90805` | +| `WatcherNotFound()` | `0xa278e4ad` | + +## protocol/socket/switchboard/SwitchboardBase.sol + +| Error | Signature | +| ---------------- | ------------ | +| `InvalidNonce()` | `0x756688fe` | + +## protocol/utils/AccessControl.sol + +| Error | Signature | +| ------------------- | ------------ | +| `NoPermit(bytes32)` | `0x962f6333` | + +## protocol/utils/AddressResolverUtil.sol + +| Error | Signature | +| ------------------------- | ------------ | +| `OnlyPayloadDelivery()` | `0x7ccc3a43` | +| `OnlyWatcherPrecompile()` | `0x663a892a` | + +## protocol/utils/common/Errors.sol | Error | Signature | | ---------------------------- | ------------ | @@ -99,111 +180,24 @@ | `PromisesNotResolved()` | `0xb91dbe7d` | | `InvalidPromise()` | `0x45f2d176` | | `InvalidIndex()` | `0x63df8171` | +| `InvalidTransmitter()` | `0x58a70a0a` | | `FeesNotSet()` | `0x2a831034` | +| `InvalidTokenAddress()` | `0x1eb00b06` | +| `InvalidWatcherSignature()` | `0x5029f14f` | +| `NonceUsed()` | `0x1f6d5aef` | -## libraries/ECDSA.sol - -| Error | Signature | -| -------------------------------------- | ------------ | -| `ECDSAInvalidSignature()` | `0xf645eedf` | -| `ECDSAInvalidSignatureLength(uint256)` | `0xfce698f7` | -| `ECDSAInvalidSignatureS(bytes32)` | `0xd78bce0c` | - -## libraries/RescueFundsLib.sol - -| Error | Signature | -| ----------------------- | ------------ | -| `InvalidTokenAddress()` | `0x1eb00b06` | - -## mock/MockSocket.sol - -| Error | Signature | -| -------------------------- | ------------ | -| `PayloadAlreadyExecuted()` | `0xe17bd578` | -| `VerificationFailed()` | `0x439cc0cd` | -| `LowGasLimit()` | `0xd38edae0` | -| `InvalidSlug()` | `0x290a8315` | -| `ExecutionFailed()` | `0xacfdb444` | - -## mock/MockWatcherPrecompile.sol - -| Error | Signature | -| ---------------------- | ------------ | -| `InvalidChainSlug()` | `0xbff6b106` | -| `InvalidTransmitter()` | `0x58a70a0a` | - -## socket/Socket.sol - -| Error | Signature | -| -------------------------- | ------------ | -| `PayloadAlreadyExecuted()` | `0xe17bd578` | -| `VerificationFailed()` | `0x439cc0cd` | -| `LowGasLimit()` | `0xd38edae0` | -| `InvalidSlug()` | `0x290a8315` | -| `ExecutionFailed()` | `0xacfdb444` | - -## socket/SocketBase.sol - -| Error | Signature | -| ---------------------- | ------------ | -| `InvalidTransmitter()` | `0x58a70a0a` | - -## socket/SocketConfig.sol - -| Error | Signature | -| ---------------------- | ------------ | -| `SwitchboardExists()` | `0x2dff8555` | -| `InvalidConnection()` | `0x63228f29` | -| `InvalidSwitchboard()` | `0xf63c9e4d` | - -## socket/switchboard/FastSwitchboard.sol - -| Error | Signature | -| ------------------- | ------------ | -| `AlreadyAttested()` | `0x35d90805` | -| `WatcherNotFound()` | `0xa278e4ad` | - -## socket/switchboard/SwitchboardBase.sol - -| Error | Signature | -| ---------------- | ------------ | -| `InvalidNonce()` | `0x756688fe` | - -## socket/utils/AccessControl.sol - -| Error | Signature | -| ------------------- | ------------ | -| `NoPermit(bytes32)` | `0x962f6333` | - -## socket/utils/SignatureVerifier.sol - -| Error | Signature | -| -------------------- | ------------ | -| `InvalidSigLength()` | `0xd2453293` | - -## utils/AddressResolverUtil.sol +## protocol/watcherPrecompile/WatcherPrecompile.sol | Error | Signature | | ------------------------- | ------------ | -| `OnlyPayloadDelivery()` | `0x7ccc3a43` | -| `OnlyWatcherPrecompile()` | `0x663a892a` | - -## utils/OwnableTwoStep.sol - -| Error | Signature | -| --------------- | ------------ | -| `OnlyOwner()` | `0x5fc483c5` | -| `OnlyNominee()` | `0x7c91ccdd` | - -## watcherPrecompile/WatcherPrecompile.sol - -| Error | Signature | -| ---------------------- | ------------ | -| `InvalidChainSlug()` | `0xbff6b106` | -| `InvalidConnection()` | `0x63228f29` | -| `InvalidTransmitter()` | `0x58a70a0a` | +| `InvalidChainSlug()` | `0xbff6b106` | +| `InvalidConnection()` | `0x63228f29` | +| `InvalidTransmitter()` | `0x58a70a0a` | +| `InvalidTimeoutRequest()` | `0x600ca372` | +| `InvalidPayloadId()` | `0xfa0b8c86` | +| `InvalidCaller()` | `0x48f5c3ed` | -## watcherPrecompile/WatcherPrecompileLimits.sol +## protocol/watcherPrecompile/WatcherPrecompileLimits.sol | Error | Signature | | ------------------------------------------------ | ------------ | diff --git a/EventTopics.md b/EventTopics.md new file mode 100644 index 00000000..fd91d9d2 --- /dev/null +++ b/EventTopics.md @@ -0,0 +1,185 @@ +# Event Topics + +## AddressResolver.sol + +| Event | Topic | +| ----------------------- | -------------------------------------------------------------------- | +| `PlugAdded` | `0x2cb8d865028f9abf3dc064724043264907615fadc8615a3699a85edb66472273` | +| `ForwarderDeployed` | `0x4dbbecb9cf9c8b93da9743a2b48ea52efe68d69230ab1c1b711891d9d223b29f` | +| `AsyncPromiseDeployed` | `0xb6c5491cf83e09749b1a4dd6a9f07b0e925fcb0a915ac8c2b40e8ab28191c270` | +| `ImplementationUpdated` | `0xa1e41aa2c2f3f20d9b63ac06b634d2788768d6034f3d9192cdf7d07374bb16f4` | + +## apps/cron/CronAppGateway.sol + +| Event | Topic | +| ----------------- | -------------------------------------------------------------------- | +| `TimeoutResolved` | `0x21f74fe97870cde3cfbde7addf2b9343c27ca433b826801e63b3d6153699ec3f` | + +## apps/payload-delivery/ContractFactoryPlug.sol + +| Event | Topic | +| ---------- | -------------------------------------------------------------------- | +| `Deployed` | `0x94bfd9af14ef450884c8a7ddb5734e2e1e14e70a1c84f0801cc5a29e34d26428` | + +## apps/payload-delivery/FeesPlug.sol + +| Event | Topic | +| --------------- | -------------------------------------------------------------------- | +| `FeesDeposited` | `0x0fd38537e815732117cfdab41ba9b6d3eb2c5799d44039c100c05fc9c112f235` | +| `FeesWithdrawn` | `0x87044da2612407bc001bb0985725dcc651a0dc71eaabfd1d7e8617ca85a8c19c` | + +## apps/payload-delivery/app-gateway/AuctionManager.sol + +| Event | Topic | +| ---------------- | -------------------------------------------------------------------- | +| `AuctionStarted` | `0x884055d82c091219e252c5c2acca6051c823fcba97cecb3ba07d5f06c1628e6c` | +| `AuctionEnded` | `0xefa02d67c6f01c72b191e6c5076e63d9a4941f9037bf1c4aa4ccc613340e1571` | +| `BidPlaced` | `0xaf5c23b337289338f72cec2fdec2c736d419c7607e4c840ee4d28176477d4e08` | + +## apps/payload-delivery/app-gateway/BatchAsync.sol + +| Event | Topic | +| ----------------------- | -------------------------------------------------------------------- | +| `PayloadSubmitted` | `0xaab415570fdc7fb2a70601b49667178ab5f887c7901dc5e84b853c5bad514106` | +| `FeesIncreased` | `0xf1a5d6adcecf6c2be482b515e9564a9898cd629b54c57ede69295dffbf16bb1d` | +| `PayloadAsyncRequested` | `0x71c5226e31c1ad0fb69f89c62225760ba7c06c4ebdd284dfc71fd61603120d95` | +| `BatchCancelled` | `0xac01c50ce693d1fe783ba60ec0f82ab99f65e62446fffb028e3bd639cd5684d4` | + +## apps/payload-delivery/app-gateway/DeliveryHelper.sol + +| Event | Topic | +| ------------------ | -------------------------------------------------------------------- | +| `CallBackReverted` | `0xb793657774d4efcce6746ecc3d896279387c392fe6f6f2932daf35d5a1d65be6` | + +## apps/payload-delivery/app-gateway/FeesManager.sol + +| Event | Topic | +| -------------------------- | -------------------------------------------------------------------- | +| `FeesBlocked` | `0xc1639cc709c1b397fa20d3a1ece33aee2eb5c29573fe9e1e06d2364d40cdf2f7` | +| `TransmitterFeesUpdated` | `0x409067fdd2f9c474161a5b1f96399f2d24c45cfc4a93f4b1c27c9bf351f1e2bb` | +| `FeesDepositedUpdated` | `0xe82dece33ef85114446a366b7d94538d641968e3ec87bf9f2f5a957ace1086e7` | +| `FeesUnblockedAndAssigned` | `0x09a0f93a20f672833eeac3a1c9d63495cfcbee2e32f968e947a6124054b44a79` | +| `FeesUnblocked` | `0x5290de2b93b8542dc233ee9f02c346e94a47254ed50e00738e6d7ec4a54bcb3a` | + +## apps/payload-delivery/app-gateway/QueueAsync.sol + +| Event | Topic | +| ----------------------- | -------------------------------------------------------------------- | +| `PayloadBatchCancelled` | `0xae2e532ea00438ec2fc3e806f19c85f21334853d16c32107c75ff8d176af7633` | + +## apps/super-token/SuperTokenAppGateway.sol + +| Event | Topic | +| ------------- | -------------------------------------------------------------------- | +| `Transferred` | `0xd729be146db2a3467d5eaf1eed3f1afcdd5cc05d1b3b14d27675e36844fb3aba` | + +## apps/super-token-lockable/SuperTokenLockableAppGateway.sol + +| Event | Topic | +| --------- | -------------------------------------------------------------------- | +| `Bridged` | `0x19138f4129b378a375fc2f5ca3b1be3fea2f048ef2b1884a1d0fff5dca83e0ac` | + +## base/PlugBase.sol + +| Event | Topic | +| --------------------------- | -------------------------------------------------------------------- | +| `ConnectorPlugDisconnected` | `0xc2af098c82dba3c4b00be8bda596d62d13b98a87b42626fefa67e0bb0e198fdd` | + +## interfaces/IAddressResolver.sol + +| Event | Topic | +| ------------ | -------------------------------------------------------------------- | +| `AddressSet` | `0x9ef0e8c8e52743bb38b83b17d9429141d494b8041ca6d616a6c77cebae9cd8b7` | + +## interfaces/IDeliveryHelper.sol + +| Event | Topic | +| -------------- | -------------------------------------------------------------------- | +| `BidPlaced` | `0xaf5c23b337289338f72cec2fdec2c736d419c7607e4c840ee4d28176477d4e08` | +| `AuctionEnded` | `0xefa02d67c6f01c72b191e6c5076e63d9a4941f9037bf1c4aa4ccc613340e1571` | + +## interfaces/IERC20.sol + +| Event | Topic | +| ---------- | -------------------------------------------------------------------- | +| `Transfer` | `0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef` | +| `Approval` | `0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925` | + +## interfaces/ISocket.sol + +| Event | Topic | +| ------------------------- | -------------------------------------------------------------------- | +| `ExecutionSuccess` | `0xc54787fbe087097b182e713f16d3443ad2e67cbe6732628451dd3695a11814c2` | +| `PlugConnected` | `0x99c37c6da3bd69c6d59967915f8339f11a0a17fed28c615efb19457fdec0d7db` | +| `AppGatewayCallRequested` | `0x392cb36fae7bd0470268c65b15c32a745b37168c4ccd13348c59bd9170f3b3e8` | + +## mock/MockWatcherPrecompile.sol + +| Event | Topic | +| ------------------- | -------------------------------------------------------------------- | +| `CalledAppGateway` | `0x255bcf22d238fe60f6611670cd7919d2bc890283be2fdaf6d2ad3411e777e33c` | +| `QueryRequested` | `0x19a4898a6390d795c9d86362d12853f4f6515b41b95a57f9b28774b4b36fc916` | +| `FinalizeRequested` | `0x17e763b469fcd8535794b9c8c1452d90597be1eeb0eb0367662e18c067fe9656` | +| `Finalized` | `0x8ee21307ed5b839a691d488e11de81bee61525893865b7ae106cc712ef42376e` | +| `PromiseResolved` | `0x2e6de63938bd94bb20d9aa80f8bc4b07be2d8fbd4525664156351836588ed365` | +| `TimeoutRequested` | `0xdf94fed77e41734b8a17815476bbbf88e2db15d762f42a30ddb9d7870f2fb858` | +| `TimeoutResolved` | `0x221462ec065e22637f794ec3a7edb17b2f04bec88f0546dda308bc37a83801b8` | + +## socket/SocketBase.sol + +| Event | Topic | +| ---------------------- | -------------------------------------------------------------------- | +| `HasherSet` | `0xc7238b23787eb9f8aa74c79b27083bb4b8f0db527df90366b487c40fa0ba2d3a` | +| `SignatureVerifierSet` | `0xcb341def955dbf73920141be056568edde30b1dbc56a29396945e5596a03c68c` | + +## socket/SocketConfig.sol + +| Event | Topic | +| ------------------ | -------------------------------------------------------------------- | +| `SwitchboardAdded` | `0x1595852923edfbbf906f09fc8523e4cfb022a194773c4d1509446b614146ee88` | + +## socket/switchboard/FastSwitchboard.sol + +| Event | Topic | +| ---------- | -------------------------------------------------------------------- | +| `Attested` | `0x2f8e66b1207a4b70274a2a3da88ffb5737c8214576490da1b35acc38b2d62db6` | + +## socket/utils/AccessControl.sol + +| Event | Topic | +| ------------- | -------------------------------------------------------------------- | +| `RoleGranted` | `0x2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f3` | +| `RoleRevoked` | `0x155aaafb6329a2098580462df33ec4b7441b19729b9601c5fc17ae1cf99a8a52` | + +## utils/OwnableTwoStep.sol + +| Event | Topic | +| ---------------- | -------------------------------------------------------------------- | +| `OwnerNominated` | `0x906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22` | +| `OwnerClaimed` | `0xfbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f87` | + +## watcherPrecompile/WatcherPrecompile.sol + +| Event | Topic | +| ------------------- | -------------------------------------------------------------------- | +| `CalledAppGateway` | `0x255bcf22d238fe60f6611670cd7919d2bc890283be2fdaf6d2ad3411e777e33c` | +| `QueryRequested` | `0x19a4898a6390d795c9d86362d12853f4f6515b41b95a57f9b28774b4b36fc916` | +| `FinalizeRequested` | `0x17e763b469fcd8535794b9c8c1452d90597be1eeb0eb0367662e18c067fe9656` | +| `Finalized` | `0x8ee21307ed5b839a691d488e11de81bee61525893865b7ae106cc712ef42376e` | +| `PromiseResolved` | `0x3f1120f34271f52a541dfc8a71efbe6123ab80730562e8948fa7275514c41bda` | +| `TimeoutRequested` | `0xdf94fed77e41734b8a17815476bbbf88e2db15d762f42a30ddb9d7870f2fb858` | +| `TimeoutResolved` | `0x221462ec065e22637f794ec3a7edb17b2f04bec88f0546dda308bc37a83801b8` | + +## watcherPrecompile/WatcherPrecompileConfig.sol + +| Event | Topic | +| ---------------- | -------------------------------------------------------------------- | +| `PlugAdded` | `0x2cb8d865028f9abf3dc064724043264907615fadc8615a3699a85edb66472273` | +| `SwitchboardSet` | `0x6273f161f4a795e66ef3585d9b4442ef3796b32337157fdfb420b5281e4cf2e3` | + +## watcherPrecompile/WatcherPrecompileLimits.sol + +| Event | Topic | +| --------------------- | -------------------------------------------------------------------- | +| `LimitParamsUpdated` | `0x76b76501b1f65d80b7de6c1a42b2245466c1c80504052e7ad48e86b6038d39a1` | +| `AppGatewayActivated` | `0x44628d7d5628b9fbc2c84ea9bf3bd3987fa9cde8d2b28e2d5ceb451f916cb8b9` | diff --git a/README.md b/README.md index 8dd5efee..7807e036 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,15 @@ SOCKET Protocol is the first chain-abstraction protocol, enabling developers to SOCKET is a chain-abstraction protocol, not a network(chain/rollup). Using a combination of offchain agents(watchers, transmitters) and onchain contracts(switchboards) it enables application-builders to build truly chain-abstracted protocols. Find more information at [docs](https://docs.socket.tech) + +# Code Guidelines: + +- always inherit at the end +- always add storage to Storage contracts +- Storage contracts should have gaps before and after +- update gaps after every change +- update version after every change +- never remove code +- inherited contracts should have gaps at the end to avoid storage collision +- write tests for migration checking slots after the change +- diff --git a/contracts/apps/counter-inbox/CounterInbox.sol b/contracts/apps/counter-inbox/CounterInbox.sol deleted file mode 100644 index 458b2aa4..00000000 --- a/contracts/apps/counter-inbox/CounterInbox.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity >=0.7.0 <0.9.0; - -import "../../utils/OwnableTwoStep.sol"; -import "../../base/PlugBase.sol"; - -contract CounterInbox is OwnableTwoStep, PlugBase { - constructor() PlugBase(msg.sender) { - _claimOwner(msg.sender); - } - - function increaseOnGateway(uint256 value_) external returns (bytes32) { - return _callAppGateway(abi.encode(value_), bytes32(0)); - } - - function connectSocket(address appGateway_, address socket_, address switchboard_) external { - _claimOwner(socket_); - _connectSocket(appGateway_, socket_, switchboard_); - } -} diff --git a/contracts/apps/counter-inbox/CounterInboxAppGateway.sol b/contracts/apps/counter-inbox/CounterInboxAppGateway.sol deleted file mode 100644 index 9193eadb..00000000 --- a/contracts/apps/counter-inbox/CounterInboxAppGateway.sol +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity >=0.7.0 <0.9.0; - -import "../../base/AppGatewayBase.sol"; - -contract CounterInboxAppGateway is AppGatewayBase { - uint256 public counter; - - constructor( - address addressResolver_, - address auctionManager_, - address counterInbox_, - uint32 chainSlug_, - Fees memory fees_ - ) AppGatewayBase(addressResolver_, auctionManager_) { - watcherPrecompile__().setIsValidInboxCaller(chainSlug_, address(counterInbox_), true); - _setFees(fees_); - } - - function callFromInbox( - uint32, - address, - bytes calldata payload_, - bytes32 - ) external override onlyWatcherPrecompile { - uint256 value = abi.decode(payload_, (uint256)); - counter += value; - } -} diff --git a/contracts/apps/counter/Counter.sol b/contracts/apps/counter/Counter.sol deleted file mode 100644 index 2e8f3a71..00000000 --- a/contracts/apps/counter/Counter.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity >=0.7.0 <0.9.0; - -import "../../utils/OwnableTwoStep.sol"; -import "../../base/PlugBase.sol"; - -contract Counter is OwnableTwoStep, PlugBase { - uint256 public counter; - - constructor() PlugBase(msg.sender) { - _claimOwner(msg.sender); - } - - function increase() external onlySocket { - counter++; - } - - function connectSocket( - address appGateway_, - address socket_, - address switchboard_ - ) external onlyOwner { - _claimOwner(socket_); - _connectSocket(appGateway_, socket_, switchboard_); - } - - function getCounter() external view returns (uint256) { - return counter; - } -} diff --git a/contracts/apps/counter/CounterAppGateway.sol b/contracts/apps/counter/CounterAppGateway.sol deleted file mode 100644 index ffeb3100..00000000 --- a/contracts/apps/counter/CounterAppGateway.sol +++ /dev/null @@ -1,69 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity >=0.7.0 <0.9.0; - -import "../../base/AppGatewayBase.sol"; -import "./Counter.sol"; -import "./ICounter.sol"; -import "../../interfaces/IForwarder.sol"; -import "../../interfaces/IPromise.sol"; - -contract CounterAppGateway is AppGatewayBase { - uint256 arbCounter; - uint256 optCounter; - - constructor( - address addressResolver_, - address deployerContract_, - address auctionManager_, - Fees memory fees_ - ) AppGatewayBase(addressResolver_, auctionManager_) { - addressResolver__.setContractsToGateways(deployerContract_); - _setFees(fees_); - } - - function incrementCounters(address[] memory instances_) public async { - // the increase function is called on given list of instances - // this - for (uint256 i = 0; i < instances_.length; i++) { - ICounter(instances_[i]).increase(); - } - } - - function readCounters(address[] memory instances_) public async { - // the increase function is called on given list of instances - // this - _readCallOn(); - _setIsCallSequential(false); - for (uint256 i = 0; i < instances_.length; i++) { - uint32 chainSlug = IForwarder(instances_[i]).getChainSlug(); - ICounter(instances_[i]).getCounter(); - IPromise(instances_[i]).then(this.setCounterValues.selector, abi.encode(chainSlug)); - } - _readCallOff(); - _setIsCallSequential(true); - ICounter(instances_[0]).increase(); - } - - function setCounterValues(bytes memory data, bytes memory returnData) external onlyPromises { - uint256 counterValue = abi.decode(returnData, (uint256)); - uint32 chainSlug = abi.decode(data, (uint32)); - if (chainSlug == 421614) { - arbCounter = counterValue; - } else if (chainSlug == 11155420) { - optCounter = counterValue; - } - } - - function setFees(Fees memory fees_) public { - fees = fees_; - } - - function withdrawFeeTokens( - uint32 chainSlug_, - address token_, - uint256 amount_, - address receiver_ - ) external { - _withdrawFeeTokens(chainSlug_, token_, amount_, receiver_); - } -} diff --git a/contracts/apps/counter/CounterDeployer.sol b/contracts/apps/counter/CounterDeployer.sol deleted file mode 100644 index 18bef28a..00000000 --- a/contracts/apps/counter/CounterDeployer.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity >=0.7.0 <0.9.0; - -import "./Counter.sol"; -import "../../base/AppDeployerBase.sol"; -import "../../utils/OwnableTwoStep.sol"; - -contract CounterDeployer is AppDeployerBase, OwnableTwoStep { - bytes32 public counter = _createContractId("counter"); - - constructor( - address addressResolver_, - address auctionManager_, - bytes32 sbType_, - Fees memory fees_ - ) AppDeployerBase(addressResolver_, auctionManager_, sbType_) { - creationCodeWithArgs[counter] = abi.encodePacked(type(Counter).creationCode); - _setFees(fees_); - _claimOwner(msg.sender); - } - - function deployContracts(uint32 chainSlug_) external async { - _deploy(counter, chainSlug_); - } - - function initialize(uint32) public pure override { - return; - } - - function setFees(Fees memory fees_) public { - fees = fees_; - } -} diff --git a/contracts/apps/cron/CronAppGateway.sol b/contracts/apps/cron/CronAppGateway.sol deleted file mode 100644 index 2a649e5c..00000000 --- a/contracts/apps/cron/CronAppGateway.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity >=0.7.0 <0.9.0; - -import "../../base/AppGatewayBase.sol"; - -contract CronAppGateway is AppGatewayBase { - event TimeoutResolved(uint256 creationTimestamp, uint256 executionTimestamp); - - constructor( - address addressResolver_, - address deployerContract_, - address auctionManager_, - Fees memory fees_ - ) AppGatewayBase(addressResolver_, auctionManager_) { - addressResolver__.setContractsToGateways(deployerContract_); - _setFees(fees_); - } - - function setTimeout(uint256 delayInSeconds_) public { - bytes memory payload = abi.encodeWithSelector( - this.resolveTimeout.selector, - block.timestamp - ); - watcherPrecompile__().setTimeout(address(this), payload, delayInSeconds_); - } - - function resolveTimeout(uint256 creationTimestamp_) external onlyWatcherPrecompile { - emit TimeoutResolved(creationTimestamp_, block.timestamp); - } -} diff --git a/contracts/apps/parallel-counter/ParallelCounterAppGateway.sol b/contracts/apps/parallel-counter/ParallelCounterAppGateway.sol deleted file mode 100644 index 1f42d779..00000000 --- a/contracts/apps/parallel-counter/ParallelCounterAppGateway.sol +++ /dev/null @@ -1,39 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity >=0.7.0 <0.9.0; - -import "../../base/AppGatewayBase.sol"; -import "../counter/Counter.sol"; - -contract ParallelCounterAppGateway is AppGatewayBase { - constructor( - address addressResolver_, - address deployerContract_, - address auctionManager_, - Fees memory fees_ - ) AppGatewayBase(addressResolver_, auctionManager_) { - addressResolver__.setContractsToGateways(deployerContract_); - _setFees(fees_); - _setIsCallSequential(false); - } - - function incrementCounters(address[] memory instances_) public async { - // the increase function is called on given list of instances - // this - for (uint256 i = 0; i < instances_.length; i++) { - Counter(instances_[i]).increase(); - } - } - - function setFees(Fees memory fees_) public { - fees = fees_; - } - - function withdrawFeeTokens( - uint32 chainSlug_, - address token_, - uint256 amount_, - address receiver_ - ) external { - _withdrawFeeTokens(chainSlug_, token_, amount_, receiver_); - } -} diff --git a/contracts/apps/parallel-counter/ParallelCounterDeployer.sol b/contracts/apps/parallel-counter/ParallelCounterDeployer.sol deleted file mode 100644 index eeca0663..00000000 --- a/contracts/apps/parallel-counter/ParallelCounterDeployer.sol +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity >=0.7.0 <0.9.0; - -import "../counter/Counter.sol"; -import "../../base/AppDeployerBase.sol"; -import "../../utils/OwnableTwoStep.sol"; - -contract ParallelCounterDeployer is AppDeployerBase, OwnableTwoStep { - bytes32 public counter1 = _createContractId("counter1"); - bytes32 public counter2 = _createContractId("counter2"); - - constructor( - address addressResolver_, - address auctionManager_, - bytes32 sbType_, - Fees memory fees_ - ) AppDeployerBase(addressResolver_, auctionManager_, sbType_) { - creationCodeWithArgs[counter1] = abi.encodePacked(type(Counter).creationCode); - creationCodeWithArgs[counter2] = abi.encodePacked(type(Counter).creationCode); - _setFees(fees_); - _setIsCallSequential(false); - _claimOwner(msg.sender); - } - - function deployContracts(uint32 chainSlug_) external async { - _deploy(counter1, chainSlug_); - _deploy(counter2, chainSlug_); - } - - function deployMultiChainContracts(uint32[] memory chainSlugs_) external async { - for (uint32 i = 0; i < chainSlugs_.length; i++) { - _deploy(counter1, chainSlugs_[i]); - _deploy(counter2, chainSlugs_[i]); - } - } - - function initialize(uint32) public pure override { - return; - } - - function setFees(Fees memory fees_) public { - fees = fees_; - } -} diff --git a/contracts/apps/payload-delivery/ContractFactoryPlug.sol b/contracts/apps/payload-delivery/ContractFactoryPlug.sol deleted file mode 100644 index 0f7a3742..00000000 --- a/contracts/apps/payload-delivery/ContractFactoryPlug.sol +++ /dev/null @@ -1,63 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -import "../../base/PlugBase.sol"; -import {OwnableTwoStep} from "../../utils/OwnableTwoStep.sol"; -import {NotSocket} from "../../common/Errors.sol"; - -/// @title ContractFactory -/// @notice Abstract contract for deploying contracts -contract ContractFactoryPlug is PlugBase, OwnableTwoStep { - event Deployed(address addr, bytes32 salt); - - /// @notice Error thrown if it failed to deploy the create2 contract - error DeploymentFailed(); - - constructor(address socket_, address owner_) PlugBase(socket_) { - _claimOwner(owner_); - } - - function deployContract( - bytes memory creationCode_, - bytes32 salt_, - address appGateway_, - address switchboard_ - ) public returns (address) { - if (msg.sender != address(socket__)) { - revert NotSocket(); - } - - address addr; - assembly { - addr := create2(callvalue(), add(creationCode_, 0x20), mload(creationCode_), salt_) - if iszero(addr) { - mstore(0, 0x30116425) // Error selector for DeploymentFailed - revert(0x1C, 0x04) // reverting with just 4 bytes - } - } - - IPlug(addr).connectSocket(appGateway_, msg.sender, switchboard_); - emit Deployed(addr, salt_); - return addr; - } - - /// @notice Gets the address for a deployed contract - /// @param creationCode_ The creation code - /// @param salt_ The salt - /// @return address The deployed address - function getAddress(bytes memory creationCode_, uint256 salt_) public view returns (address) { - bytes32 hash = keccak256( - abi.encodePacked(bytes1(0xff), address(this), salt_, keccak256(creationCode_)) - ); - - return address(uint160(uint256(hash))); - } - - function connectSocket( - address appGateway_, - address socket_, - address switchboard_ - ) external onlyOwner { - _connectSocket(appGateway_, socket_, switchboard_); - } -} diff --git a/contracts/apps/super-token-lockable/SuperTokenLockableAppGateway.sol b/contracts/apps/super-token-lockable/SuperTokenLockableAppGateway.sol deleted file mode 100644 index 133541be..00000000 --- a/contracts/apps/super-token-lockable/SuperTokenLockableAppGateway.sol +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-License-Identifier: Unlicense -pragma solidity ^0.8.21; - -import "../../base/AppGatewayBase.sol"; -import {ISuperToken} from "../../interfaces/ISuperToken.sol"; -import "../../utils/OwnableTwoStep.sol"; - -contract SuperTokenLockableAppGateway is AppGatewayBase, OwnableTwoStep { - uint256 public idCounter; - - event Bridged(bytes32 asyncId); - - struct UserOrder { - address srcToken; - address dstToken; - address user; - uint256 srcAmount; - uint256 deadline; - } - - constructor( - address addressResolver_, - address deployerContract_, - address auctionManager_, - Fees memory fees_ - ) AppGatewayBase(addressResolver_, auctionManager_) { - addressResolver__.setContractsToGateways(deployerContract_); - _setFees(fees_); - _claimOwner(msg.sender); - } - - function checkBalance(bytes memory data_, bytes memory returnData_) external onlyPromises { - (UserOrder memory order, bytes32 asyncId) = abi.decode(data_, (UserOrder, bytes32)); - - uint256 balance = abi.decode(returnData_, (uint256)); - if (balance < order.srcAmount) { - _revertTx(asyncId); - return; - } - _unlockTokens(order.srcToken, order.user, order.srcAmount); - } - - function _unlockTokens(address srcToken_, address user_, uint256 amount_) internal async { - ISuperToken(srcToken_).unlockTokens(user_, amount_); - } - - function bridge(bytes memory order_) external async returns (bytes32 asyncId_) { - UserOrder memory order = abi.decode(order_, (UserOrder)); - asyncId_ = _getCurrentAsyncId(); - ISuperToken(order.srcToken).lockTokens(order.user, order.srcAmount); - - _readCallOn(); - // goes to forwarder and deploys promise and stores it - ISuperToken(order.srcToken).balanceOf(order.user); - IPromise(order.srcToken).then(this.checkBalance.selector, abi.encode(order, asyncId_)); - - _readCallOff(); - ISuperToken(order.dstToken).mint(order.user, order.srcAmount); - ISuperToken(order.srcToken).burn(order.user, order.srcAmount); - - emit Bridged(asyncId_); - } - - function withdrawFeeTokens( - uint32 chainSlug_, - address token_, - uint256 amount_, - address receiver_ - ) external onlyOwner { - _withdrawFeeTokens(chainSlug_, token_, amount_, receiver_); - } -} diff --git a/contracts/apps/super-token-lockable/SuperTokenLockableDeployer.sol b/contracts/apps/super-token-lockable/SuperTokenLockableDeployer.sol deleted file mode 100644 index d9bd242e..00000000 --- a/contracts/apps/super-token-lockable/SuperTokenLockableDeployer.sol +++ /dev/null @@ -1,64 +0,0 @@ -// SPDX-License-Identifier: Unlicense -pragma solidity ^0.8.21; - -import "./SuperTokenLockable.sol"; -import "./LimitHook.sol"; -import "../../base/AppDeployerBase.sol"; -import "../../utils/OwnableTwoStep.sol"; - -contract SuperTokenLockableDeployer is AppDeployerBase, OwnableTwoStep { - bytes32 public superTokenLockable = _createContractId("superTokenLockable"); - bytes32 public limitHook = _createContractId("limitHook"); - - struct ConstructorParams { - uint256 _burnLimit; - uint256 _mintLimit; - string name_; - string symbol_; - uint8 decimals_; - address initialSupplyHolder_; - uint256 initialSupply_; - } - - constructor( - address addressResolver_, - address owner_, - address auctionManager_, - bytes32 sbType_, - ConstructorParams memory params, - Fees memory fees_ - ) AppDeployerBase(addressResolver_, auctionManager_, sbType_) { - creationCodeWithArgs[superTokenLockable] = abi.encodePacked( - type(SuperTokenLockable).creationCode, - abi.encode( - params.name_, - params.symbol_, - params.decimals_, - params.initialSupplyHolder_, - params.initialSupply_ - ) - ); - - creationCodeWithArgs[limitHook] = abi.encodePacked( - type(LimitHook).creationCode, - abi.encode(params._burnLimit, params._mintLimit) - ); - - _setFees(fees_); - _claimOwner(owner_); - } - - function deployContracts(uint32 chainSlug_) external async { - _deploy(superTokenLockable, chainSlug_); - _deploy(limitHook, chainSlug_); - } - - // don't need to call this directly, will be called automatically after all contracts are deployed. - // check AppDeployerBase.allPayloadsExecuted and AppGateway.queueAndDeploy - function initialize(uint32 chainSlug_) public override async { - address limitHookContract = getOnChainAddress(limitHook, chainSlug_); - SuperTokenLockable(forwarderAddresses[superTokenLockable][chainSlug_]).setLimitHook( - limitHookContract - ); - } -} diff --git a/contracts/apps/super-token/SuperTokenAppGateway.sol b/contracts/apps/super-token/SuperTokenAppGateway.sol deleted file mode 100644 index fa5f5e14..00000000 --- a/contracts/apps/super-token/SuperTokenAppGateway.sol +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-License-Identifier: Unlicense -pragma solidity ^0.8.21; - -import "../../base/AppGatewayBase.sol"; -import "../../interfaces/ISuperToken.sol"; -import "../../utils/OwnableTwoStep.sol"; - -contract SuperTokenAppGateway is AppGatewayBase, OwnableTwoStep { - event Transferred(bytes32 asyncId); - - struct TransferOrder { - address srcToken; - address dstToken; - address user; - uint256 srcAmount; - uint256 deadline; - } - - constructor( - address addressResolver_, - address deployerContract_, - Fees memory fees_, - address auctionManager_ - ) AppGatewayBase(addressResolver_, auctionManager_) { - // called to connect the deployer contract with this app - addressResolver__.setContractsToGateways(deployerContract_); - - // sets the fees data like max fees, chain and token for all transfers - // they can be updated for each transfer as well - _setFees(fees_); - _claimOwner(msg.sender); - } - - function transfer(bytes memory order_) external async { - TransferOrder memory order = abi.decode(order_, (TransferOrder)); - ISuperToken(order.srcToken).burn(order.user, order.srcAmount); - ISuperToken(order.dstToken).mint(order.user, order.srcAmount); - - emit Transferred(_getCurrentAsyncId()); - } -} diff --git a/contracts/apps/super-token/SuperTokenDeployer.sol b/contracts/apps/super-token/SuperTokenDeployer.sol deleted file mode 100644 index 0e814dcd..00000000 --- a/contracts/apps/super-token/SuperTokenDeployer.sol +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: Unlicense -pragma solidity ^0.8.21; - -import "./SuperToken.sol"; -import "../../base/AppDeployerBase.sol"; -import "../../utils/OwnableTwoStep.sol"; - -contract SuperTokenDeployer is AppDeployerBase, OwnableTwoStep { - bytes32 public superToken = _createContractId("superToken"); - struct ConstructorParams { - string name_; - string symbol_; - uint8 decimals_; - address initialSupplyHolder_; - uint256 initialSupply_; - } - - constructor( - address addressResolver_, - address owner_, - address auctionManager_, - bytes32 sbType_, - ConstructorParams memory params_, - Fees memory fees_ - ) AppDeployerBase(addressResolver_, auctionManager_, sbType_) { - _claimOwner(owner_); - creationCodeWithArgs[superToken] = abi.encodePacked( - type(SuperToken).creationCode, - abi.encode( - params_.name_, - params_.symbol_, - params_.decimals_, - params_.initialSupplyHolder_, - params_.initialSupply_ - ) - ); - _setFees(fees_); - } - - function deployContracts(uint32 chainSlug_) external async { - _deploy(superToken, chainSlug_); - } - - // no need to call this directly, will be called automatically after all contracts are deployed. - // check AppDeployerBase._deploy and AppDeployerBase.onBatchComplete - function initialize(uint32) public pure override { - return; - } -} diff --git a/contracts/base/AppDeployerBase.sol b/contracts/base/AppDeployerBase.sol deleted file mode 100644 index ce88c123..00000000 --- a/contracts/base/AppDeployerBase.sol +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-License-Identifier: Unlicense -pragma solidity ^0.8.21; - -import {DeployParams, Fees, CallType, PayloadBatch} from "../common/Structs.sol"; -import {AppGatewayBase} from "./AppGatewayBase.sol"; -import {IForwarder} from "../interfaces/IForwarder.sol"; -import {IPromise} from "../interfaces/IPromise.sol"; -import {IAppDeployer} from "../interfaces/IAppDeployer.sol"; -import {IDeliveryHelper} from "../interfaces/IDeliveryHelper.sol"; - -/// @title AppDeployerBase -/// @notice Abstract contract for deploying applications -abstract contract AppDeployerBase is AppGatewayBase, IAppDeployer { - mapping(bytes32 => mapping(uint32 => address)) public override forwarderAddresses; - mapping(bytes32 => bytes) public creationCodeWithArgs; - - constructor( - address addressResolver_, - address auctionManager_, - bytes32 sbType_ - ) AppGatewayBase(addressResolver_, auctionManager_) { - sbType = sbType_; - } - - /// @notice Deploys a contract - /// @param contractId_ The contract ID - /// @param chainSlug_ The chain slug - function _deploy(bytes32 contractId_, uint32 chainSlug_) internal { - address asyncPromise = addressResolver__.deployAsyncPromiseContract(address(this)); - isValidPromise[asyncPromise] = true; - IPromise(asyncPromise).then(this.setAddress.selector, abi.encode(chainSlug_, contractId_)); - - onCompleteData = abi.encode(chainSlug_); - IDeliveryHelper(deliveryHelper()).queue( - isCallSequential, - chainSlug_, - address(0), - asyncPromise, - CallType.DEPLOY, - creationCodeWithArgs[contractId_] - ); - } - - /// @notice Sets the address for a deployed contract - /// @param data_ The data - /// @param returnData_ The return data - function setAddress(bytes memory data_, bytes memory returnData_) external onlyPromises { - (uint32 chainSlug, bytes32 contractId) = abi.decode(data_, (uint32, bytes32)); - - address forwarderContractAddress = addressResolver__.getOrDeployForwarderContract( - address(this), - abi.decode(returnData_, (address)), - chainSlug - ); - - forwarderAddresses[contractId][chainSlug] = forwarderContractAddress; - } - - /// @notice Gets the on-chain address - /// @param contractId_ The contract ID - /// @param chainSlug_ The chain slug - /// @return onChainAddress The on-chain address - function getOnChainAddress( - bytes32 contractId_, - uint32 chainSlug_ - ) public view returns (address onChainAddress) { - if (forwarderAddresses[contractId_][chainSlug_] == address(0)) { - return address(0); - } - - onChainAddress = IForwarder(forwarderAddresses[contractId_][chainSlug_]) - .getOnChainAddress(); - } - - /// @notice Callback in pd promise to be called after all contracts are deployed - /// @param payloadBatch_ The payload batch - /// @dev only payload delivery can call this - /// @dev callback in pd promise to be called after all contracts are deployed - function onBatchComplete( - bytes32, - PayloadBatch memory payloadBatch_ - ) external override onlyDeliveryHelper { - uint32 chainSlug = abi.decode(payloadBatch_.onCompleteData, (uint32)); - initialize(chainSlug); - } - - /// @notice Gets the socket address - /// @param chainSlug_ The chain slug - /// @return socketAddress_ The socket address - function getSocketAddress(uint32 chainSlug_) public view returns (address) { - return - watcherPrecompile__().appGatewayPlugs(addressResolver__.deliveryHelper(), chainSlug_); - } - - /// @notice Initializes the contract - /// @param chainSlug_ The chain slug - function initialize(uint32 chainSlug_) public virtual {} -} diff --git a/contracts/base/AppGatewayBase.sol b/contracts/base/AppGatewayBase.sol index 85b3f6ee..156f98bd 100644 --- a/contracts/base/AppGatewayBase.sol +++ b/contracts/base/AppGatewayBase.sol @@ -1,33 +1,44 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.3; -import "../utils/AddressResolverUtil.sol"; -import "../interfaces/IDeliveryHelper.sol"; +import "../protocol/utils/AddressResolverUtil.sol"; import "../interfaces/IAppGateway.sol"; +import "../interfaces/IForwarder.sol"; +import "../interfaces/IDeliveryHelper.sol"; import "../interfaces/IPromise.sol"; -import {Fees} from "../common/Structs.sol"; -import {FeesPlugin} from "../utils/FeesPlugin.sol"; -import {InvalidPromise, FeesNotSet} from "../common/Errors.sol"; + +import {FeesPlugin} from "../protocol/utils/FeesPlugin.sol"; +import {InvalidPromise, FeesNotSet} from "../protocol/utils/common/Errors.sol"; +import {FAST} from "../protocol/utils/common/Constants.sol"; /// @title AppGatewayBase /// @notice Abstract contract for the app gateway abstract contract AppGatewayBase is AddressResolverUtil, IAppGateway, FeesPlugin { - bool public override isReadCall; - bool public override isCallSequential; + Read public override isReadCall; + Parallel public override isParallelCall; + uint256 public override gasLimit; + address public auctionManager; bytes public onCompleteData; bytes32 public sbType; + bool public isAsyncModifierSet; + mapping(address => bool) public isValidPromise; + mapping(bytes32 => mapping(uint32 => address)) public override forwarderAddresses; + mapping(bytes32 => bytes) public creationCodeWithArgs; /// @notice Modifier to treat functions async modifier async() { if (fees.feePoolChain == 0) revert FeesNotSet(); + isAsyncModifierSet = true; deliveryHelper().clearQueue(); addressResolver__.clearPromises(); _; + isAsyncModifierSet = false; deliveryHelper().batch(fees, auctionManager, onCompleteData, sbType); _markValidPromises(); + onCompleteData = bytes(""); } /// @notice Modifier to ensure only valid promises can call the function @@ -41,16 +52,15 @@ abstract contract AppGatewayBase is AddressResolverUtil, IAppGateway, FeesPlugin /// @notice Constructor for AppGatewayBase /// @param addressResolver_ The address resolver address - constructor(address addressResolver_, address auctionManager_) { + constructor(address addressResolver_) { _setAddressResolver(addressResolver_); - auctionManager = auctionManager_; - isCallSequential = true; + sbType = FAST; } - - function _setIsCallSequential(bool isCallSequential_) internal { - isCallSequential = isCallSequential_; + /// @notice Sets the switchboard type + /// @param sbType_ The switchboard type + function _setSbType(bytes32 sbType_) internal { + sbType = sbType_; } - /// @notice Creates a contract ID /// @param contractName_ The contract name /// @return bytes32 The contract ID @@ -58,22 +68,18 @@ abstract contract AppGatewayBase is AddressResolverUtil, IAppGateway, FeesPlugin return keccak256(abi.encode(contractName_)); } + /// @notice Gets the current async ID + /// @return bytes32 The current async ID + function _getCurrentAsyncId() internal view returns (bytes32) { + return deliveryHelper().getCurrentAsyncId(); + } + /// @notice Sets the auction manager /// @param auctionManager_ The auction manager function _setAuctionManager(address auctionManager_) internal { auctionManager = auctionManager_; } - /// @notice Sets the read call flag - function _readCallOn() internal { - isReadCall = true; - } - - /// @notice Turns off the read call flag - function _readCallOff() internal { - isReadCall = false; - } - /// @notice Marks the promises as valid function _markValidPromises() internal { address[] memory promises = addressResolver__.getPromises(); @@ -82,12 +88,149 @@ abstract contract AppGatewayBase is AddressResolverUtil, IAppGateway, FeesPlugin } } - /// @notice Gets the current async ID - /// @return bytes32 The current async ID - function _getCurrentAsyncId() internal view returns (bytes32) { - return deliveryHelper().getCurrentAsyncId(); + /// @notice Gets the socket address + /// @param chainSlug_ The chain slug + /// @return socketAddress_ The socket address + function getSocketAddress(uint32 chainSlug_) public view returns (address) { + return watcherPrecompile__().sockets(chainSlug_); + } + + //////////////////////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////// DEPLOY HELPERS /////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////// + + /// @notice Deploys a contract + /// @param contractId_ The contract ID + /// @param chainSlug_ The chain slug + function _deploy(bytes32 contractId_, uint32 chainSlug_, IsPlug isPlug_) internal { + _deploy(contractId_, chainSlug_, isPlug_, new bytes(0)); + } + + /// @notice Deploys a contract + /// @param contractId_ The contract ID + /// @param chainSlug_ The chain slug + function _deploy( + bytes32 contractId_, + uint32 chainSlug_, + IsPlug isPlug_, + bytes memory initCallData_ + ) internal { + address asyncPromise = addressResolver__.deployAsyncPromiseContract(address(this)); + isValidPromise[asyncPromise] = true; + IPromise(asyncPromise).then(this.setAddress.selector, abi.encode(chainSlug_, contractId_)); + + onCompleteData = abi.encode(chainSlug_, true); + IDeliveryHelper(deliveryHelper()).queue( + isPlug_, + isParallelCall, + chainSlug_, + address(0), + asyncPromise, + 0, + CallType.DEPLOY, + creationCodeWithArgs[contractId_], + initCallData_ + ); + } + + /// @notice Sets the address for a deployed contract + /// @param data_ The data + /// @param returnData_ The return data + function setAddress(bytes memory data_, bytes memory returnData_) external onlyPromises { + (uint32 chainSlug, bytes32 contractId) = abi.decode(data_, (uint32, bytes32)); + + address forwarderContractAddress = addressResolver__.getOrDeployForwarderContract( + address(this), + abi.decode(returnData_, (address)), + chainSlug + ); + + forwarderAddresses[contractId][chainSlug] = forwarderContractAddress; + } + + /// @notice Gets the on-chain address + /// @param contractId_ The contract ID + /// @param chainSlug_ The chain slug + /// @return onChainAddress The on-chain address + function getOnChainAddress( + bytes32 contractId_, + uint32 chainSlug_ + ) public view returns (address onChainAddress) { + if (forwarderAddresses[contractId_][chainSlug_] == address(0)) { + return address(0); + } + + onChainAddress = IForwarder(forwarderAddresses[contractId_][chainSlug_]) + .getOnChainAddress(); + } + + //////////////////////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////// TX OVERRIDE HELPERS /////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////// + + /// @notice Sets multiple overrides in one call + /// @param isReadCall_ The read call flag + /// @param fees_ The fees configuration + /// @param gasLimit_ The gas limit + /// @param isParallelCall_ The sequential call flag + function _setOverrides( + Read isReadCall_, + Parallel isParallelCall_, + uint256 gasLimit_, + Fees memory fees_ + ) internal { + isReadCall = isReadCall_; + isParallelCall = isParallelCall_; + gasLimit = gasLimit_; + fees = fees_; + } + + /// @notice Sets isReadCall, fees and gasLimit overrides + /// @param isReadCall_ The read call flag + /// @param isParallelCall_ The sequential call flag + /// @param gasLimit_ The gas limit + function _setOverrides(Read isReadCall_, Parallel isParallelCall_, uint256 gasLimit_) internal { + isReadCall = isReadCall_; + isParallelCall = isParallelCall_; + gasLimit = gasLimit_; + } + + /// @notice Sets isReadCall and isParallelCall overrides + /// @param isReadCall_ The read call flag + /// @param isParallelCall_ The sequential call flag + function _setOverrides(Read isReadCall_, Parallel isParallelCall_) internal { + isReadCall = isReadCall_; + isParallelCall = isParallelCall_; + } + + /// @notice Sets isParallelCall overrides + /// @param isParallelCall_ The sequential call flag + function _setOverrides(Parallel isParallelCall_) internal { + isParallelCall = isParallelCall_; + } + + /// @notice Sets isReadCall overrides + /// @param isReadCall_ The read call flag + function _setOverrides(Read isReadCall_) internal { + isReadCall = isReadCall_; } + /// @notice Sets gasLimit overrides + /// @param gasLimit_ The gas limit + function _setOverrides(uint256 gasLimit_) internal { + gasLimit = gasLimit_; + } + + /// @notice Sets fees overrides + /// @param fees_ The fees configuration + function _setOverrides(Fees memory fees_) internal { + fees = fees_; + } + + //////////////////////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////// ASYNC BATCH HELPERS ///////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////// + /// @notice Reverts the transaction /// @param asyncId_ The async ID function _revertTx(bytes32 asyncId_) internal { @@ -96,16 +239,10 @@ abstract contract AppGatewayBase is AddressResolverUtil, IAppGateway, FeesPlugin /// @notice increases the transaction fees /// @param asyncId_ The async ID - function increaseFees(bytes32 asyncId_, uint256 newMaxFees_) internal { + function _increaseFees(bytes32 asyncId_, uint256 newMaxFees_) internal { deliveryHelper().increaseFees(asyncId_, newMaxFees_); } - /// @notice hook to handle the revert in callbacks or onchain executions - /// @dev can be overridden by the app gateway to add custom logic - /// @param asyncId_ The async ID - /// @param payloadId_ The payload ID - function handleRevert(bytes32 asyncId_, bytes32 payloadId_) external override onlyPromises {} - /// @notice Withdraws fee tokens /// @param chainSlug_ The chain slug /// @param token_ The token address @@ -120,18 +257,43 @@ abstract contract AppGatewayBase is AddressResolverUtil, IAppGateway, FeesPlugin deliveryHelper().withdrawTo(chainSlug_, token_, amount_, receiver_, auctionManager, fees); } + //////////////////////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////// HOOKS ///////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////// + /// @notice Callback in pd promise to be called after all contracts are deployed - /// @param asyncId_ The async ID /// @param payloadBatch_ The payload batch + /// @dev only payload delivery can call this + /// @dev callback in pd promise to be called after all contracts are deployed function onBatchComplete( - bytes32 asyncId_, + bytes32, PayloadBatch memory payloadBatch_ - ) external virtual onlyDeliveryHelper {} + ) external override onlyDeliveryHelper { + if (payloadBatch_.onCompleteData.length == 0) return; - function callFromInbox( + (uint32 chainSlug, bool isDeploy) = abi.decode( + payloadBatch_.onCompleteData, + (uint32, bool) + ); + if (isDeploy) { + initialize(chainSlug); + } + } + + function callFromChain( uint32 chainSlug_, address plug_, bytes calldata payload_, bytes32 params_ ) external virtual onlyWatcherPrecompile {} + + /// @notice Initializes the contract + /// @param chainSlug_ The chain slug + function initialize(uint32 chainSlug_) public virtual {} + + /// @notice hook to handle the revert in callbacks or onchain executions + /// @dev can be overridden by the app gateway to add custom logic + /// @param asyncId_ The async ID + /// @param payloadId_ The payload ID + function handleRevert(bytes32 asyncId_, bytes32 payloadId_) external override onlyPromises {} } diff --git a/contracts/base/PlugBase.sol b/contracts/base/PlugBase.sol index 9b23d366..66a1e943 100644 --- a/contracts/base/PlugBase.sol +++ b/contracts/base/PlugBase.sol @@ -4,14 +4,15 @@ pragma solidity ^0.8.21; import {SafeTransferLib} from "solmate/utils/SafeTransferLib.sol"; import {ISocket} from "../interfaces/ISocket.sol"; import {IPlug} from "../interfaces/IPlug.sol"; -import {NotSocket} from "../common/Errors.sol"; - +import {NotSocket} from "../protocol/utils/common/Errors.sol"; /// @title PlugBase /// @notice Abstract contract for plugs abstract contract PlugBase is IPlug { ISocket public socket__; address public appGateway; + uint256 public isSocketInitialized; + error SocketAlreadyInitialized(); event ConnectorPlugDisconnected(); /// @notice Modifier to ensure only the socket can call the function @@ -21,8 +22,11 @@ abstract contract PlugBase is IPlug { _; } - constructor(address socket_) { - socket__ = ISocket(socket_); + /// @notice Modifier to ensure the socket is initialized + modifier socketInitializer() { + if (isSocketInitialized == 1) revert SocketAlreadyInitialized(); + isSocketInitialized = 1; + _; } /// @notice Connects the plug to the app gateway and switchboard @@ -51,4 +55,12 @@ abstract contract PlugBase is IPlug { function _callAppGateway(bytes memory payload_, bytes32 params_) internal returns (bytes32) { return socket__.callAppGateway(payload_, params_); } + + function initSocket( + address appGateway_, + address socket_, + address switchboard_ + ) external virtual socketInitializer { + _connectSocket(appGateway_, socket_, switchboard_); + } } diff --git a/contracts/base/ProxyFactory.sol b/contracts/base/ProxyFactory.sol new file mode 100644 index 00000000..0f903337 --- /dev/null +++ b/contracts/base/ProxyFactory.sol @@ -0,0 +1,7 @@ +pragma solidity ^0.8.0; + +import {ERC1967Factory} from "solady/utils/ERC1967Factory.sol"; + +contract ProxyFactory is ERC1967Factory { + constructor() {} +} diff --git a/contracts/interfaces/IAddressResolver.sol b/contracts/interfaces/IAddressResolver.sol index 8d062286..a495af5d 100644 --- a/contracts/interfaces/IAddressResolver.sol +++ b/contracts/interfaces/IAddressResolver.sol @@ -22,6 +22,11 @@ interface IAddressResolver { /// @dev Returns interface pointing to zero address if not configured function feesManager() external view returns (address); + /// @notice Gets the address of the default auction manager contract + /// @return IAuctionManager The auction manager interface + /// @dev Returns interface pointing to zero address if not configured + function defaultAuctionManager() external view returns (address); + /// @notice Gets the watcher precompile contract interface /// @return IWatcherPrecompile The watcher precompile interface /// @dev Returns interface pointing to zero address if not configured @@ -32,11 +37,6 @@ interface IAddressResolver { /// @return The gateway address associated with the contract function contractsToGateways(address contractAddress_) external view returns (address); - /// @notice Maps gateway addresses to their corresponding contract addresses - /// @param gatewayAddress_ The address of the gateway to lookup - /// @return The contract address associated with the gateway - function gatewaysToContracts(address gatewayAddress_) external view returns (address); - /// @notice Gets the list of all deployed async promise contracts /// @return Array of async promise contract addresses function getPromises() external view returns (address[] memory); @@ -66,7 +66,7 @@ interface IAddressResolver { /// @param chainSlug_ The identifier of the destination chain /// @return The address of the newly deployed forwarder contract function getOrDeployForwarderContract( - address appDeployer_, + address appGateway_, address chainContractAddress_, uint32 chainSlug_ ) external returns (address); diff --git a/contracts/interfaces/IAppDeployer.sol b/contracts/interfaces/IAppDeployer.sol deleted file mode 100644 index 14b6e8f4..00000000 --- a/contracts/interfaces/IAppDeployer.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -/// @title IAppDeployer -/// @notice Interface for the app deployer -interface IAppDeployer { - /// @notice initialize the contracts on chain - function initialize(uint32 chainSlug_) external; - - /// @notice deploy contracts to chain - function deployContracts(uint32 chainSlug_) external; - - /// @notice get the on-chain address of a contract - function getOnChainAddress( - bytes32 contractId_, - uint32 chainSlug_ - ) external view returns (address onChainAddress); - - /// @notice get the forwarder address of a contract - function forwarderAddresses( - bytes32 contractId_, - uint32 chainSlug_ - ) external view returns (address forwarderAddress); -} diff --git a/contracts/interfaces/IAppGateway.sol b/contracts/interfaces/IAppGateway.sol index e4c6fcd0..38e68fee 100644 --- a/contracts/interfaces/IAppGateway.sol +++ b/contracts/interfaces/IAppGateway.sol @@ -1,16 +1,20 @@ // SPDX-License-Identifier: Unlicense pragma solidity ^0.8.21; -import {PayloadBatch} from "../common/Structs.sol"; +import {Fees, Read, Parallel, DeployParams, CallType, PayloadBatch} from "../protocol/utils/common/Structs.sol"; interface IAppGateway { - function isReadCall() external view returns (bool); + function isReadCall() external view returns (Read); - function isCallSequential() external view returns (bool); + function isParallelCall() external view returns (Parallel); + + function gasLimit() external view returns (uint256); + + function isAsyncModifierSet() external view returns (bool); function onBatchComplete(bytes32 asyncId_, PayloadBatch memory payloadBatch_) external; - function callFromInbox( + function callFromChain( uint32 chainSlug_, address plug_, bytes calldata payload_, @@ -18,4 +22,22 @@ interface IAppGateway { ) external; function handleRevert(bytes32 asyncId_, bytes32 payloadId_) external; + + /// @notice initialize the contracts on chain + function initialize(uint32 chainSlug_) external; + + /// @notice deploy contracts to chain + function deployContracts(uint32 chainSlug_) external; + + /// @notice get the on-chain address of a contract + function getOnChainAddress( + bytes32 contractId_, + uint32 chainSlug_ + ) external view returns (address onChainAddress); + + /// @notice get the forwarder address of a contract + function forwarderAddresses( + bytes32 contractId_, + uint32 chainSlug_ + ) external view returns (address forwarderAddress); } diff --git a/contracts/interfaces/IAuctionManager.sol b/contracts/interfaces/IAuctionManager.sol index eeb3a8a8..69b38a72 100644 --- a/contracts/interfaces/IAuctionManager.sol +++ b/contracts/interfaces/IAuctionManager.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.3; -import {Bid, Fees} from "../common/Structs.sol"; +import {Bid, Fees} from "../protocol/utils/common/Structs.sol"; interface IAuctionManager { function bid( diff --git a/contracts/interfaces/IContractFactoryPlug.sol b/contracts/interfaces/IContractFactoryPlug.sol index a7fe29ad..a3b5bac0 100644 --- a/contracts/interfaces/IContractFactoryPlug.sol +++ b/contracts/interfaces/IContractFactoryPlug.sol @@ -1,18 +1,23 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.21; +import {IsPlug} from "../protocol/utils/common/Structs.sol"; + /// @title IContractFactory /// @notice Interface for contract factory functionality interface IContractFactoryPlug { /// @notice Deploys a contract using CREATE2 + /// @param isPlug_ Whether the contract is a plug /// @param creationCode_ The contract creation code /// @param salt_ The salt value for CREATE2 /// @return address The deployed contract address function deployContract( - bytes memory creationCode_, + IsPlug isPlug_, bytes32 salt_, address appGateway_, - address switchboard_ + address switchboard_, + bytes memory creationCode_, + bytes memory initCallData_ ) external returns (address); /// @notice Gets the deterministic address for a contract deployment diff --git a/contracts/interfaces/IDeliveryHelper.sol b/contracts/interfaces/IDeliveryHelper.sol index 15830cd3..2f9d15ae 100644 --- a/contracts/interfaces/IDeliveryHelper.sol +++ b/contracts/interfaces/IDeliveryHelper.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.3; -import {PayloadDetails, Bid, Fees, DeployParams, CallType, PayloadBatch} from "../common/Structs.sol"; +import {PayloadDetails, Bid, Fees, DeployParams, CallType, PayloadBatch, Parallel, IsPlug} from "../protocol/utils/common/Structs.sol"; interface IDeliveryHelper { event BidPlaced( @@ -13,19 +13,22 @@ interface IDeliveryHelper { Bid winningBid // Replaced winningTransmitter and winningBid with Bid struct ); - function bidTimeout() external view returns (uint256); + function bidTimeout() external view returns (uint128); function payloadBatches(bytes32) external view returns (PayloadBatch memory); function clearQueue() external; function queue( - bool isSequential_, + IsPlug isPlug_, + Parallel isParallel_, uint32 chainSlug_, address target_, address asyncPromise_, + uint256 value_, CallType callType_, - bytes memory payload_ + bytes memory payload_, + bytes memory initCallData_ ) external; function batch( diff --git a/contracts/interfaces/IERC20.sol b/contracts/interfaces/IERC20.sol deleted file mode 100644 index 8810365c..00000000 --- a/contracts/interfaces/IERC20.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.8.0; - -/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. -interface IERC20 { - /*////////////////////////////////////////////////////////////// - EVENTS - //////////////////////////////////////////////////////////////*/ - - event Transfer(address indexed from, address indexed to, uint256 amount); - - event Approval(address indexed owner, address indexed spender, uint256 amount); - - /*////////////////////////////////////////////////////////////// - ERC20 STORAGE - //////////////////////////////////////////////////////////////*/ - - function totalSupply() external view returns (uint256); - - function balanceOf(address account_) external view returns (uint256); - - function allowance(address owner_, address spender_) external view returns (uint256); - - /*////////////////////////////////////////////////////////////// - ERC20 LOGIC - //////////////////////////////////////////////////////////////*/ - - function approve(address spender_, uint256 amount_) external returns (bool); - - function transfer(address to_, uint256 amount_) external returns (bool); - - function transferFrom(address from_, address to_, uint256 amount_) external returns (bool); -} diff --git a/contracts/interfaces/IFeesManager.sol b/contracts/interfaces/IFeesManager.sol index 4e135fec..906e9ea5 100644 --- a/contracts/interfaces/IFeesManager.sol +++ b/contracts/interfaces/IFeesManager.sol @@ -1,22 +1,20 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.3; -import {Fees, Bid, PayloadDetails} from "../common/Structs.sol"; +import {Fees, Bid, PayloadDetails} from "../protocol/utils/common/Structs.sol"; interface IFeesManager { - function blockFees(address appGateway_, Fees memory fees_, bytes32 asyncId_) external; - - function updateTransmitterFees( + function blockFees( + address appGateway_, + Fees memory fees_, Bid memory winningBid_, - bytes32 asyncId_, - address appGateway_ + bytes32 asyncId_ ) external; - function updateBlockedFees(bytes32 asyncId_, uint256 feesUsed_) external; - function unblockFees(bytes32 asyncId_, address appGateway_) external; function isFeesEnough(address appGateway_, Fees memory fees_) external view returns (bool); + function unblockAndAssignFees( bytes32 asyncId_, address transmitter_, diff --git a/contracts/interfaces/IHasher.sol b/contracts/interfaces/IHasher.sol deleted file mode 100644 index ffec5195..00000000 --- a/contracts/interfaces/IHasher.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.21; - -import "./ISocket.sol"; - -/** - * @title IHasher - * @notice Interface for hasher contract that calculates the packed payload - */ -interface IHasher { - /** - * @notice returns the bytes32 hash of the payload packed - */ - function packPayload( - bytes32 payloadId_, - address appGateway_, - address transmitter_, - address target_, - uint256 executionGasLimit_, - bytes memory payload_ - ) external returns (bytes32); -} diff --git a/contracts/interfaces/IMultiChainAppDeployer.sol b/contracts/interfaces/IMultiChainAppDeployer.sol deleted file mode 100644 index e36020c1..00000000 --- a/contracts/interfaces/IMultiChainAppDeployer.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -import "./IAppDeployer.sol"; - -/// @title IMultiChainAppDeployer -/// @notice Interface for the multi-chain app deployer -interface IMultiChainAppDeployer is IAppDeployer { - /// @notice deploy contracts to multiple chains - function deployMultiChainContracts(uint32[] memory chainSlugs_) external; -} diff --git a/contracts/interfaces/IPlug.sol b/contracts/interfaces/IPlug.sol index 204cadb6..1e738f09 100644 --- a/contracts/interfaces/IPlug.sol +++ b/contracts/interfaces/IPlug.sol @@ -6,5 +6,5 @@ pragma solidity ^0.8.21; * @notice Interface for a plug contract that executes the payload received from a source chain. */ interface IPlug { - function connectSocket(address appGateway_, address socket_, address switchboard_) external; + function initSocket(address appGateway_, address socket_, address switchboard_) external; } diff --git a/contracts/interfaces/ISignatureVerifier.sol b/contracts/interfaces/ISignatureVerifier.sol deleted file mode 100644 index 8a878851..00000000 --- a/contracts/interfaces/ISignatureVerifier.sol +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.21; - -/** - * @title Signature Verifier - * @notice Verifies the signatures and returns the address of signer recovered from the input signature or digest. - */ -interface ISignatureVerifier { - /** - * @notice returns the address of signer recovered from input signature and digest - */ - function recoverSigner( - bytes32 digest_, - bytes memory signature_ - ) external pure returns (address signer); -} diff --git a/contracts/interfaces/ISocket.sol b/contracts/interfaces/ISocket.sol index 0e0b371b..d46f6eca 100644 --- a/contracts/interfaces/ISocket.sol +++ b/contracts/interfaces/ISocket.sol @@ -16,6 +16,12 @@ interface ISocket { */ event ExecutionSuccess(bytes32 payloadId, bytes returnData); + /** + * @notice emits the status of payload after external call + * @param payloadId msg id which is executed + */ + event ExecutionFailed(bytes32 payloadId, bytes returnData); + /** * @notice emits the config set by a plug for a remoteChainSlug * @param plug address of plug on current chain @@ -43,8 +49,24 @@ interface ISocket { ); /** - * @notice To call the appGateway on offChainVM. Should only be called by a plug. - * @param payload_ bytes to be delivered to the Plug on offChainVM + * @notice params for executing a payload + * @param payloadId the id of the payload + * @param target the address of the contract to call + * @param executionGasLimit the gas limit for the execution + * @param deadline the deadline for the execution + * @param payload the data to be executed + */ + struct ExecuteParams { + bytes32 payloadId; + address target; + uint256 executionGasLimit; + uint256 deadline; + bytes payload; + } + + /** + * @notice To call the appGateway on EVMx. Should only be called by a plug. + * @param payload_ bytes to be delivered to the Plug on EVMx * @param params_ a 32 bytes param to add details for execution. */ function callAppGateway( @@ -56,12 +78,9 @@ interface ISocket { * @notice executes a payload */ function execute( - bytes32 payloadId_, address appGateway_, - address target_, - uint256 executionGasLimit_, - bytes memory transmitterSignature_, - bytes memory payload_ + ExecuteParams memory params_, + bytes memory transmitterSignature_ ) external payable returns (bytes memory); /** diff --git a/contracts/interfaces/ISocketBatcher.sol b/contracts/interfaces/ISocketBatcher.sol index fdb90a6e..1626e0ae 100644 --- a/contracts/interfaces/ISocketBatcher.sol +++ b/contracts/interfaces/ISocketBatcher.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import "../common/Structs.sol"; +import "../protocol/utils/common/Structs.sol"; interface ISocketBatcher { function attestAndExecute( - ExecutePayloadParams calldata params_ + AttestAndExecutePayloadParams calldata params_ ) external returns (bytes memory); } diff --git a/contracts/interfaces/ISwitchboard.sol b/contracts/interfaces/ISwitchboard.sol index ac822b4f..394d4044 100644 --- a/contracts/interfaces/ISwitchboard.sol +++ b/contracts/interfaces/ISwitchboard.sol @@ -9,11 +9,11 @@ pragma solidity ^0.8.21; interface ISwitchboard { /** * @notice Checks if a packet can be allowed to go through the switchboard. - * @param root_ the packet root. + * @param digest_ the packet digest. * @param packetId_ The unique identifier for the packet. * @return A boolean indicating whether the packet is allowed to go through the switchboard or not. */ - function allowPacket(bytes32 root_, bytes32 packetId_) external view returns (bool); + function allowPacket(bytes32 digest_, bytes32 packetId_) external view returns (bool); - function attest(bytes32 payloadId_, bytes32 root_, bytes calldata signature_) external; + function attest(bytes32 payloadId_, bytes32 digest_, bytes calldata proof_) external; } diff --git a/contracts/interfaces/IWatcherPrecompile.sol b/contracts/interfaces/IWatcherPrecompile.sol index acb59c7b..0a54fa6a 100644 --- a/contracts/interfaces/IWatcherPrecompile.sol +++ b/contracts/interfaces/IWatcherPrecompile.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Unlicense pragma solidity ^0.8.21; -import {PayloadDetails, AsyncRequest, FinalizeParams, PayloadRootParams, AppGatewayConfig, PlugConfig, ResolvedPromises} from "../common/Structs.sol"; +import {PayloadDetails, AsyncRequest, FinalizeParams, PayloadDigestParams, AppGatewayConfig, PlugConfig, ResolvedPromises} from "../protocol/utils/common/Structs.sol"; /// @title IWatcherPrecompile /// @notice Interface for the Watcher Precompile system that handles payload verification and execution @@ -9,8 +9,25 @@ import {PayloadDetails, AsyncRequest, FinalizeParams, PayloadRootParams, AppGate interface IWatcherPrecompile { /// @notice Sets up app gateway configurations /// @param configs_ Array of app gateway configurations + /// @param signatureNonce_ The nonce of the signature + /// @param signature_ The signature of the watcher /// @dev Only callable by authorized addresses - function setAppGateways(AppGatewayConfig[] calldata configs_) external; + function setAppGateways( + AppGatewayConfig[] calldata configs_, + uint256 signatureNonce_, + bytes calldata signature_ + ) external; + + /// @notice Sets up on-chain contract configurations + /// @dev Only callable by authorized addresses + function setOnChainContracts( + uint32 chainSlug_, + bytes32 sbType_, + address switchboard_, + address socket_, + address contractFactoryPlug_, + address feesPlug_ + ) external; /// @notice Retrieves plug configuration for a specific network and plug /// @param chainSlug_ The identifier of the network @@ -25,11 +42,11 @@ interface IWatcherPrecompile { /// @notice Finalizes a payload execution request /// @param params_ Parameters needed for finalization /// @return payloadId The unique identifier for the request - /// @return root The merkle root of the payload parameters + /// @return digest The digest of the payload parameters function finalize( - FinalizeParams memory params_, - address originAppGateway_ - ) external returns (bytes32 payloadId, bytes32 root); + address originAppGateway_, + FinalizeParams memory params_ + ) external returns (bytes32 payloadId, bytes32 digest); /// @notice Creates a new query request /// @param chainSlug_ The identifier of the destination network @@ -45,14 +62,28 @@ interface IWatcherPrecompile { bytes memory payload_ ) external returns (bytes32 payloadId); - /// @notice Marks a request as finalized with a signature + /// @notice Marks a request as finalized with a proof + /// @param payloadId_ The unique identifier of the request + /// @param proof_ The watcher's proof + function finalized( + bytes32 payloadId_, + bytes calldata proof_, + uint256 signatureNonce_, + bytes calldata signature_ + ) external; + + /// @notice Finalizes multiple payload execution requests with a new transmitter /// @param payloadId_ The unique identifier of the request - /// @param signature_ The watcher's signature - function finalized(bytes32 payloadId_, bytes calldata signature_) external; + /// @param params_ The parameters for finalization + function refinalize(bytes32 payloadId_, FinalizeParams memory params_) external; /// @notice Resolves multiple promises with their return data /// @param resolvedPromises_ Array of resolved promises and their return data - function resolvePromises(ResolvedPromises[] calldata resolvedPromises_) external; + function resolvePromises( + ResolvedPromises[] calldata resolvedPromises_, + uint256 signatureNonce_, + bytes calldata signature_ + ) external; /// @notice Sets a timeout for payload execution /// @param payload_ The payload data @@ -65,29 +96,30 @@ interface IWatcherPrecompile { /// @notice Resolves a timeout by executing the payload /// @param timeoutId_ The unique identifier for the timeout - function resolveTimeout(bytes32 timeoutId_) external; - - /// @notice Calculates the root hash for payload parameters - /// @param params_ The payload parameters used to calculate the root - /// @return root The calculated merkle root hash - function getRoot(PayloadRootParams memory params_) external pure returns (bytes32 root); - - /// @notice Gets the plug address for a given app gateway and chain - /// @param appGateway_ The address of the app gateway contract - /// @param chainSlug_ The identifier of the destination chain - /// @return The plug address for the given app gateway and chain - function appGatewayPlugs( - address appGateway_, - uint32 chainSlug_ - ) external view returns (address); + function resolveTimeout( + bytes32 timeoutId_, + uint256 signatureNonce_, + bytes calldata signature_ + ) external; + + /// @notice Calculates the Digest hash for payload parameters + /// @param params_ The payload parameters used to calculate the digest + /// @return digest The calculated digest hash + function getDigest(PayloadDigestParams memory params_) external pure returns (bytes32 digest); function setMaxTimeoutDelayInSeconds(uint256 maxTimeoutDelayInSeconds_) external; function switchboards(uint32 chainSlug_, bytes32 sbType_) external view returns (address); - function setIsValidInboxCaller(uint32 chainSlug_, address plug_, bool isValid_) external; + function sockets(uint32 chainSlug_) external view returns (address); + + function contractFactoryPlug(uint32 chainSlug_) external view returns (address); + + function feesPlug(uint32 chainSlug_) external view returns (address); + + function setIsValidPlug(uint32 chainSlug_, address plug_, bool isValid_) external; - function checkAndUpdateLimit( + function checkAndConsumeLimit( address appGateway_, bytes32 limitType_, uint256 consumeLimit_ diff --git a/contracts/libraries/ECDSA.sol b/contracts/libraries/ECDSA.sol deleted file mode 100644 index b5295cf4..00000000 --- a/contracts/libraries/ECDSA.sol +++ /dev/null @@ -1,192 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol) - -pragma solidity ^0.8.21; - -/** - * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. - * - * These functions can be used to verify that a payload was signed by the holder - * of the private keys of a given address. - */ -library ECDSA { - enum RecoverError { - NoError, - InvalidSignature, - InvalidSignatureLength, - InvalidSignatureS - } - - /** - * @dev The signature derives the `address(0)`. - */ - error ECDSAInvalidSignature(); - - /** - * @dev The signature has an invalid length. - */ - error ECDSAInvalidSignatureLength(uint256 length); - - /** - * @dev The signature has an S value that is in the upper half order. - */ - error ECDSAInvalidSignatureS(bytes32 s); - - /** - * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not - * return address(0) without also returning an error description. Errors are documented using an enum (error type) - * and a bytes32 providing additional information about the error. - * - * If no error is returned, then the address can be used for verification purposes. - * - * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures: - * this function rejects them by requiring the `s` value to be in the lower - * half order, and the `v` value to be either 27 or 28. - * - * IMPORTANT: `hash` _must_ be the result of a hash operation for the - * verification to be secure: it is possible to craft signatures that - * recover to arbitrary addresses for non-hashed data. A safe way to ensure - * this is by receiving a hash of the original message (which may otherwise - * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it. - * - * Documentation for signature generation: - * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] - * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] - */ - function _tryRecover( - bytes32 hash_, - bytes memory signature_ - ) internal pure returns (address, RecoverError, bytes32) { - if (signature_.length == 65) { - bytes32 r; - bytes32 s; - uint8 v; - // ecrecover takes the signature parameters, and the only way to get them - // currently is to use assembly. - /// @solidity memory-safe-assembly - assembly { - r := mload(add(signature_, 0x20)) - s := mload(add(signature_, 0x40)) - v := byte(0, mload(add(signature_, 0x60))) - } - return _tryRecover(hash_, v, r, s); - } else { - return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature_.length)); - } - } - - /** - * @dev Returns the address that signed a hashed message (`hash`) with - * `signature`. This address can then be used for verification purposes. - * - * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures: - * this function rejects them by requiring the `s` value to be in the lower - * half order, and the `v` value to be either 27 or 28. - * - * IMPORTANT: `hash` _must_ be the result of a hash operation for the - * verification to be secure: it is possible to craft signatures that - * recover to arbitrary addresses for non-hashed data. A safe way to ensure - * this is by receiving a hash of the original message (which may otherwise - * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it. - */ - function _recover(bytes32 hash_, bytes memory signature_) internal pure returns (address) { - (address recovered, RecoverError error, bytes32 errorArg) = _tryRecover(hash_, signature_); - _throwError(error, errorArg); - return recovered; - } - - /** - * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. - * - * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] - */ - function _tryRecover( - bytes32 hash_, - bytes32 r_, - bytes32 vs_ - ) internal pure returns (address, RecoverError, bytes32) { - unchecked { - bytes32 s_ = vs_ & - bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); - // We do not check for an overflow here since the shift operation results in 0 or 1. - uint8 v_ = uint8((uint256(vs_) >> 255) + 27); - return _tryRecover(hash_, v_, r_, s_); - } - } - - /** - * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. - */ - function _recover(bytes32 hash_, bytes32 r_, bytes32 vs_) internal pure returns (address) { - (address recovered, RecoverError error, bytes32 errorArg) = _tryRecover(hash_, r_, vs_); - _throwError(error, errorArg); - return recovered; - } - - /** - * @dev Overload of {ECDSA-tryRecover} that receives the `v`, - * `r` and `s` signature fields separately. - */ - function _tryRecover( - bytes32 hash_, - uint8 v_, - bytes32 r_, - bytes32 s_ - ) internal pure returns (address, RecoverError, bytes32) { - // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature - // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines - // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most - // signatures from current libraries generate a unique signature with an s-value in the lower half order. - // - // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value - // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or - // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept - // these malleable signatures as well. - if (uint256(s_) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { - return (address(0), RecoverError.InvalidSignatureS, s_); - } - - // If the signature is valid (and not malleable), return the signer address - address signer_ = ecrecover(hash_, v_, r_, s_); - if (signer_ == address(0)) { - return (address(0), RecoverError.InvalidSignature, bytes32(0)); - } - - return (signer_, RecoverError.NoError, bytes32(0)); - } - - /** - * @dev Overload of {ECDSA-recover} that receives the `v`, - * `r` and `s` signature fields separately. - */ - function _recover( - bytes32 hash_, - uint8 v_, - bytes32 r_, - bytes32 s_ - ) internal pure returns (address) { - (address recovered_, RecoverError error_, bytes32 errorArg_) = _tryRecover( - hash_, - v_, - r_, - s_ - ); - _throwError(error_, errorArg_); - return recovered_; - } - - /** - * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided. - */ - function _throwError(RecoverError error_, bytes32 errorArg_) private pure { - if (error_ == RecoverError.NoError) { - return; // no error: do nothing - } else if (error_ == RecoverError.InvalidSignature) { - revert ECDSAInvalidSignature(); - } else if (error_ == RecoverError.InvalidSignatureLength) { - revert ECDSAInvalidSignatureLength(uint256(errorArg_)); - } else if (error_ == RecoverError.InvalidSignatureS) { - revert ECDSAInvalidSignatureS(errorArg_); - } - } -} diff --git a/contracts/AddressResolver.sol b/contracts/protocol/AddressResolver.sol similarity index 85% rename from contracts/AddressResolver.sol rename to contracts/protocol/AddressResolver.sol index d1356a44..82c329f4 100644 --- a/contracts/AddressResolver.sol +++ b/contracts/protocol/AddressResolver.sol @@ -1,41 +1,64 @@ // SPDX-License-Identifier: Unlicense pragma solidity ^0.8.21; -import "./interfaces/IAddressResolver.sol"; -import {Forwarder} from "./Forwarder.sol"; -import {AsyncPromise} from "./AsyncPromise.sol"; -import {OwnableTwoStep} from "./utils/OwnableTwoStep.sol"; +import {Ownable} from "solady/auth/Ownable.sol"; import {LibClone} from "solady/utils/LibClone.sol"; import {UpgradeableBeacon} from "solady/utils/UpgradeableBeacon.sol"; import {Initializable} from "solady/utils/Initializable.sol"; +import "../interfaces/IAddressResolver.sol"; +import {Forwarder} from "./Forwarder.sol"; +import {AsyncPromise} from "./AsyncPromise.sol"; -/// @title AddressResolver Contract -/// @notice This contract is responsible for fetching latest core addresses and deploying Forwarder and AsyncPromise contracts. -/// @dev Inherits the OwnableTwoStep contract and implements the IAddressResolver interface. -contract AddressResolver is OwnableTwoStep, IAddressResolver, Initializable { +abstract contract AddressResolverStorage is IAddressResolver { + // slots [0-49] reserved for gap + uint256[50] _gap_before; + + // slot 50 IWatcherPrecompile public override watcherPrecompile__; + + // slot 51 address public override deliveryHelper; + + // slot 52 address public override feesManager; - // Beacons for managing upgrades + // slot 53 UpgradeableBeacon public forwarderBeacon; + + // slot 54 UpgradeableBeacon public asyncPromiseBeacon; + // slot 55 address public forwarderImplementation; + + // slot 56 address public asyncPromiseImplementation; - // Array to store promises + // slot 57 address[] internal _promises; + // slot 58 uint256 public asyncPromiseCounter; - // contracts to gateway map + // slot 59 + uint64 public version; + + // slot 60 mapping(address => address) public override contractsToGateways; - // gateway to contract map - mapping(address => address) public override gatewaysToContracts; + // slot 61 + address public override defaultAuctionManager; + + // slots [62-110] reserved for gap + uint256[49] _gap_after; +} + +/// @title AddressResolver Contract +/// @notice This contract is responsible for fetching latest core addresses and deploying Forwarder and AsyncPromise contracts. +/// @dev Inherits the Ownable contract and implements the IAddressResolver interface. +contract AddressResolver is AddressResolverStorage, Initializable, Ownable { /// @notice Error thrown if AppGateway contract was already set by a different address - error AppGatewayContractAlreadySetByDifferentSender(address contractAddress_); + error InvalidAppGateway(address contractAddress_); event PlugAdded(address appGateway, uint32 chainSlug, address plug); event ForwarderDeployed(address newForwarder, bytes32 salt); @@ -49,7 +72,8 @@ contract AddressResolver is OwnableTwoStep, IAddressResolver, Initializable { /// @notice Initializer to replace constructor for upgradeable contracts /// @param owner_ The address of the contract owner function initialize(address owner_) public reinitializer(1) { - _claimOwner(owner_); + version = 1; + _initializeOwner(owner_); forwarderImplementation = address(new Forwarder()); asyncPromiseImplementation = address(new AsyncPromise()); @@ -64,7 +88,7 @@ contract AddressResolver is OwnableTwoStep, IAddressResolver, Initializable { /// @param chainSlug_ The chain slug /// @return newForwarder The address of the deployed Forwarder proxy contract function getOrDeployForwarderContract( - address appDeployer_, + address appGateway_, address chainContractAddress_, uint32 chainSlug_ ) public returns (address newForwarder) { @@ -81,7 +105,7 @@ contract AddressResolver is OwnableTwoStep, IAddressResolver, Initializable { ); newForwarder = _deployProxy(salt, address(forwarderBeacon), initData); - _setConfig(appDeployer_, newForwarder); + _setConfig(appGateway_, newForwarder); emit ForwarderDeployed(newForwarder, salt); } @@ -94,7 +118,8 @@ contract AddressResolver is OwnableTwoStep, IAddressResolver, Initializable { Forwarder.initialize.selector, chainSlug_, chainContractAddress_, - address(this) + address(this), + version ); salt = keccak256(constructorArgs); } @@ -107,7 +132,8 @@ contract AddressResolver is OwnableTwoStep, IAddressResolver, Initializable { AsyncPromise.initialize.selector, invoker_, msg.sender, - address(this) + address(this), + version ); salt = keccak256(abi.encodePacked(constructorArgs, asyncPromiseCounter)); @@ -162,7 +188,7 @@ contract AddressResolver is OwnableTwoStep, IAddressResolver, Initializable { contractsToGateways[contractAddress_] != address(0) && contractsToGateways[contractAddress_] != msg.sender ) { - revert AppGatewayContractAlreadySetByDifferentSender(contractAddress_); + revert InvalidAppGateway(contractAddress_); } contractsToGateways[contractAddress_] = msg.sender; } @@ -196,9 +222,8 @@ contract AddressResolver is OwnableTwoStep, IAddressResolver, Initializable { LibClone.predictDeterministicAddressERC1967BeaconProxy(beacon_, salt_, address(this)); } - function _setConfig(address appDeployer_, address newForwarder_) internal { - address gateway = contractsToGateways[appDeployer_]; - gatewaysToContracts[gateway] = newForwarder_; + function _setConfig(address appGateway_, address newForwarder_) internal { + address gateway = contractsToGateways[appGateway_]; contractsToGateways[newForwarder_] = gateway; } @@ -228,6 +253,12 @@ contract AddressResolver is OwnableTwoStep, IAddressResolver, Initializable { feesManager = feesManager_; } + /// @notice Updates the address of the default auction manager + /// @param defaultAuctionManager_ The address of the default auction manager + function setDefaultAuctionManager(address defaultAuctionManager_) external onlyOwner { + defaultAuctionManager = defaultAuctionManager_; + } + /// @notice Updates the address of the watcher precompile contract /// @param watcherPrecompile_ The address of the watcher precompile contract function setWatcherPrecompile(address watcherPrecompile_) external onlyOwner { diff --git a/contracts/AsyncPromise.sol b/contracts/protocol/AsyncPromise.sol similarity index 89% rename from contracts/AsyncPromise.sol rename to contracts/protocol/AsyncPromise.sol index a3f45114..4f5b0664 100644 --- a/contracts/AsyncPromise.sol +++ b/contracts/protocol/AsyncPromise.sol @@ -2,8 +2,8 @@ pragma solidity ^0.8.21; import {AddressResolverUtil} from "./utils/AddressResolverUtil.sol"; -import {IPromise} from "./interfaces/IPromise.sol"; -import {IAppGateway} from "./interfaces/IAppGateway.sol"; +import {IPromise} from "../interfaces/IPromise.sol"; +import {IAppGateway} from "../interfaces/IAppGateway.sol"; import {Initializable} from "solady/utils/Initializable.sol"; /// @notice The state of the async promise @@ -15,29 +15,43 @@ enum AsyncPromiseState { RESOLVED } -/// @title AsyncPromise -/// @notice this contract stores the callback address and data to be executed once the previous call is executed -/// This promise expires once the callback is executed -contract AsyncPromise is IPromise, Initializable, AddressResolverUtil { +abstract contract AsyncPromiseStorage is IPromise { + // slots [0-49] reserved for gap + uint256[50] _gap_before; + + // slot 50 + // bytes1 /// @notice The callback selector to be called on the invoker. bytes4 public callbackSelector; - + // bytes4 /// @notice Indicates whether the promise has been resolved. bool public override resolved; - + // bytes8 /// @notice The current state of the async promise. AsyncPromiseState public state; - + // bytes20 /// @notice The local contract which initiated the async call. /// @dev The callback will be executed on this address address public localInvoker; + // slot 51 /// @notice The forwarder address which can call the callback address public forwarder; + // slot 52 /// @notice The callback data to be used when the promise is resolved. bytes public callbackData; + // slots [53-102] reserved for gap + uint256[50] _gap_after; + + // slots 103-154 reserved for addr resolver util +} + +/// @title AsyncPromise +/// @notice this contract stores the callback address and data to be executed once the previous call is executed +/// This promise expires once the callback is executed +contract AsyncPromise is AsyncPromiseStorage, Initializable, AddressResolverUtil { /// @notice Error thrown when attempting to resolve an already resolved promise. error PromiseAlreadyResolved(); /// @notice Only the forwarder or local invoker can set then's promise callback @@ -59,7 +73,7 @@ contract AsyncPromise is IPromise, Initializable, AddressResolverUtil { address invoker_, address forwarder_, address addressResolver_ - ) public reinitializer(1) { + ) public initializer { _setAddressResolver(addressResolver_); localInvoker = invoker_; forwarder = forwarder_; diff --git a/contracts/Forwarder.sol b/contracts/protocol/Forwarder.sol similarity index 75% rename from contracts/Forwarder.sol rename to contracts/protocol/Forwarder.sol index d1993af0..13785b7b 100644 --- a/contracts/Forwarder.sol +++ b/contracts/protocol/Forwarder.sol @@ -1,29 +1,42 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.21; -import "./interfaces/IAddressResolver.sol"; -import "./interfaces/IDeliveryHelper.sol"; -import "./interfaces/IAppGateway.sol"; -import "./interfaces/IPromise.sol"; -import "./AsyncPromise.sol"; -import "./interfaces/IForwarder.sol"; +import "../interfaces/IAddressResolver.sol"; +import "../interfaces/IDeliveryHelper.sol"; +import "../interfaces/IAppGateway.sol"; +import "../interfaces/IPromise.sol"; +import "../interfaces/IForwarder.sol"; import "solady/utils/Initializable.sol"; -/// @title Forwarder Contract -/// @notice This contract acts as a forwarder for async calls to the on-chain contracts. -contract Forwarder is IForwarder, Initializable { +abstract contract ForwarderStorage is IForwarder { + // slots [0-49] reserved for gap + uint256[50] _gap_before; + + // slot 50 /// @notice chain id uint32 public chainSlug; + // slot 51 /// @notice on-chain address associated with this forwarder address public onChainAddress; + // slot 52 /// @notice address resolver contract address for imp addresses address public addressResolver; + // slot 53 /// @notice caches the latest async promise address for the last call address public latestAsyncPromise; + // slots [54-103] reserved for gap + uint256[50] _gap_after; +} + +/// @title Forwarder Contract +/// @notice This contract acts as a forwarder for async calls to the on-chain contracts. +contract Forwarder is ForwarderStorage, Initializable { + error AsyncModifierNotUsed(); + constructor() { _disableInitializers(); // disable for implementation } @@ -36,7 +49,7 @@ contract Forwarder is IForwarder, Initializable { uint32 chainSlug_, address onChainAddress_, address addressResolver_ - ) public reinitializer(1) { + ) public initializer { chainSlug = chainSlug_; onChainAddress = onChainAddress_; addressResolver = addressResolver_; @@ -74,23 +87,29 @@ contract Forwarder is IForwarder, Initializable { revert("Forwarder: deliveryHelper not found"); } + bool isAsyncModifierSet = IAppGateway(msg.sender).isAsyncModifierSet(); + if (!isAsyncModifierSet) revert AsyncModifierNotUsed(); + // Deploy a new async promise contract. latestAsyncPromise = IAddressResolver(addressResolver).deployAsyncPromiseContract( msg.sender ); // Determine if the call is a read or write operation. - bool isReadCall = IAppGateway(msg.sender).isReadCall(); - bool isCallSequential = IAppGateway(msg.sender).isCallSequential(); + Read isReadCall = IAppGateway(msg.sender).isReadCall(); + Parallel isParallelCall = IAppGateway(msg.sender).isParallelCall(); // Queue the call in the auction house. IDeliveryHelper(deliveryHelper).queue( - isCallSequential, + IsPlug.NO, + isParallelCall, chainSlug, onChainAddress, latestAsyncPromise, - isReadCall ? CallType.READ : CallType.WRITE, - msg.data + 0, + isReadCall == Read.ON ? CallType.READ : CallType.WRITE, + msg.data, + bytes("") ); } diff --git a/contracts/apps/payload-delivery/app-gateway/AuctionManager.sol b/contracts/protocol/payload-delivery/AuctionManager.sol similarity index 68% rename from contracts/apps/payload-delivery/app-gateway/AuctionManager.sol rename to contracts/protocol/payload-delivery/AuctionManager.sol index 484e0add..dd12f475 100644 --- a/contracts/apps/payload-delivery/app-gateway/AuctionManager.sol +++ b/contracts/protocol/payload-delivery/AuctionManager.sol @@ -1,64 +1,73 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {OwnableTwoStep} from "../../../utils/OwnableTwoStep.sol"; -import {SignatureVerifier} from "../../../socket/utils/SignatureVerifier.sol"; -import {AddressResolverUtil} from "../../../utils/AddressResolverUtil.sol"; -import {Fees, Bid, PayloadBatch} from "../../../common/Structs.sol"; -import {IDeliveryHelper} from "../../../interfaces/IDeliveryHelper.sol"; -import {IFeesManager} from "../../../interfaces/IFeesManager.sol"; -import "../../../interfaces/IAuctionManager.sol"; +import {ECDSA} from "solady/utils/ECDSA.sol"; import "solady/utils/Initializable.sol"; +import {Ownable} from "solady/auth/Ownable.sol"; -/// @title AuctionManager -/// @notice Contract for managing auctions and placing bids -contract AuctionManager is AddressResolverUtil, OwnableTwoStep, IAuctionManager, Initializable { - SignatureVerifier public signatureVerifier; - uint32 public vmChainSlug; +import {IDeliveryHelper} from "../../interfaces/IDeliveryHelper.sol"; +import {IFeesManager} from "../../interfaces/IFeesManager.sol"; +import {IAuctionManager} from "../../interfaces/IAuctionManager.sol"; + +import {AddressResolverUtil} from "../utils/AddressResolverUtil.sol"; +import {Fees, Bid, PayloadBatch} from "../utils/common/Structs.sol"; +import {AuctionClosed, AuctionAlreadyStarted, BidExceedsMaxFees, LowerBidAlreadyExists, InvalidTransmitter} from "../utils/common/Errors.sol"; + +abstract contract AuctionManagerStorage is IAuctionManager { + // slots [0-49] reserved for gap + uint256[50] _gap_before; + + // slot 50 + uint32 public evmxSlug; + + // slot 51 mapping(bytes32 => Bid) public winningBids; + + // slot 52 // asyncId => auction status mapping(bytes32 => bool) public override auctionClosed; + + // slot 53 mapping(bytes32 => bool) public override auctionStarted; + // slot 54 uint256 public auctionEndDelaySeconds; - /// @notice Error thrown when trying to start or bid a closed auction - error AuctionClosed(); - /// @notice Error thrown when trying to start an ongoing auction - error AuctionAlreadyStarted(); - /// @notice Error thrown if fees exceed the maximum set fees - error BidExceedsMaxFees(); - /// @notice Error thrown if winning bid is assigned to an invalid transmitter - error InvalidTransmitter(); + // slots [55-104] reserved for gap + uint256[50] _gap_after; + + // slots 105-155 reserved for addr resolver util +} + +/// @title AuctionManager +/// @notice Contract for managing auctions and placing bids +contract AuctionManager is AuctionManagerStorage, Initializable, Ownable, AddressResolverUtil { + event AuctionRestarted(bytes32 asyncId); + event AuctionStarted(bytes32 asyncId); + event AuctionEnded(bytes32 asyncId, Bid winningBid); + event BidPlaced(bytes32 asyncId, Bid bid); constructor() { _disableInitializers(); // disable for implementation } /// @notice Initializer function to replace constructor - /// @param vmChainSlug_ The chain slug for the VM + /// @param evmxSlug_ The chain slug for the VM /// @param auctionEndDelaySeconds_ The delay in seconds before an auction can end /// @param addressResolver_ The address of the address resolver - /// @param signatureVerifier_ The address of the signature verifier /// @param owner_ The address of the contract owner function initialize( - uint32 vmChainSlug_, + uint32 evmxSlug_, uint256 auctionEndDelaySeconds_, address addressResolver_, - SignatureVerifier signatureVerifier_, address owner_ ) public reinitializer(1) { _setAddressResolver(addressResolver_); - _claimOwner(owner_); - vmChainSlug = vmChainSlug_; - signatureVerifier = signatureVerifier_; + _initializeOwner(owner_); + evmxSlug = evmxSlug_; auctionEndDelaySeconds = auctionEndDelaySeconds_; } - event AuctionStarted(bytes32 asyncId); - event AuctionEnded(bytes32 asyncId, Bid winningBid); - event BidPlaced(bytes32 asyncId, Bid bid); - function setAuctionEndDelaySeconds(uint256 auctionEndDelaySeconds_) external onlyOwner { auctionEndDelaySeconds = auctionEndDelaySeconds_; } @@ -83,8 +92,8 @@ contract AuctionManager is AddressResolverUtil, OwnableTwoStep, IAuctionManager, ) external { if (auctionClosed[asyncId_]) revert AuctionClosed(); - address transmitter = signatureVerifier.recoverSigner( - keccak256(abi.encode(address(this), vmChainSlug, asyncId_, fee, extraData)), + address transmitter = _recoverSigner( + keccak256(abi.encode(address(this), evmxSlug, asyncId_, fee, extraData)), transmitterSignature ); @@ -93,12 +102,16 @@ contract AuctionManager is AddressResolverUtil, OwnableTwoStep, IAuctionManager, PayloadBatch memory payloadBatch = IDeliveryHelper(addressResolver__.deliveryHelper()) .payloadBatches(asyncId_); if (fee > payloadBatch.fees.amount) revert BidExceedsMaxFees(); - if (fee < winningBids[asyncId_].fee) return; + + if (winningBids[asyncId_].transmitter != address(0) && fee >= winningBids[asyncId_].fee) + revert LowerBidAlreadyExists(); winningBids[asyncId_] = newBid; + IFeesManager(addressResolver__.feesManager()).blockFees( payloadBatch.appGateway, payloadBatch.fees, + newBid, asyncId_ ); @@ -115,13 +128,11 @@ contract AuctionManager is AddressResolverUtil, OwnableTwoStep, IAuctionManager, emit BidPlaced(asyncId_, newBid); auctionClosed[asyncId_] = true; - - emit AuctionEnded(asyncId_, newBid); } /// @notice Ends an auction /// @param asyncId_ The ID of the auction - function endAuction(bytes32 asyncId_) external onlyDeliveryHelper { + function endAuction(bytes32 asyncId_) external onlyWatcherPrecompile { _endAuction(asyncId_); } @@ -145,19 +156,28 @@ contract AuctionManager is AddressResolverUtil, OwnableTwoStep, IAuctionManager, asyncId_, winningBid ); - - // todo: add scheduler for a time to retry auction } function expireBid(bytes32 asyncId_) external onlyWatcherPrecompile { PayloadBatch memory batch = IDeliveryHelper(addressResolver__.deliveryHelper()) .payloadBatches(asyncId_); + // if executed, bid is not expired - // todo: should be less than total payloads in batch or zero? - if (batch.totalPayloadsRemaining == 0) return; + if (batch.totalPayloadsRemaining == 0 || batch.isBatchCancelled) return; IFeesManager(addressResolver__.feesManager()).unblockFees(asyncId_, batch.appGateway); winningBids[asyncId_] = Bid({fee: 0, transmitter: address(0), extraData: ""}); auctionClosed[asyncId_] = false; + + emit AuctionRestarted(asyncId_); + } + + function _recoverSigner( + bytes32 digest_, + bytes memory signature_ + ) internal view returns (address signer) { + bytes32 digest = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", digest_)); + // recovered signer is checked for the valid roles later + signer = ECDSA.recover(digest, signature_); } } diff --git a/contracts/protocol/payload-delivery/ContractFactoryPlug.sol b/contracts/protocol/payload-delivery/ContractFactoryPlug.sol new file mode 100644 index 00000000..6e137162 --- /dev/null +++ b/contracts/protocol/payload-delivery/ContractFactoryPlug.sol @@ -0,0 +1,104 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.21; + +import "../utils/AccessControl.sol"; +import {RESCUE_ROLE} from "../utils/common/AccessRoles.sol"; +import "../utils/RescueFundsLib.sol"; +import {NotSocket} from "../utils/common/Errors.sol"; +import "../../base/PlugBase.sol"; +import "../../interfaces/IContractFactoryPlug.sol"; + +/// @title ContractFactory +/// @notice Abstract contract for deploying contracts +contract ContractFactoryPlug is PlugBase, AccessControl, IContractFactoryPlug { + event Deployed(address addr, bytes32 salt, bytes returnData); + + /// @notice Error thrown if it failed to deploy the create2 contract + error DeploymentFailed(); + error ExecutionFailed(); + + constructor(address socket_, address owner_) { + _initializeOwner(owner_); + _setSocket(socket_); + } + + function deployContract( + IsPlug isPlug_, + bytes32 salt_, + address appGateway_, + address switchboard_, + bytes memory creationCode_, + bytes memory initCallData_ + ) public override returns (address) { + if (msg.sender != address(socket__)) { + revert NotSocket(); + } + + address addr; + assembly { + addr := create2(callvalue(), add(creationCode_, 0x20), mload(creationCode_), salt_) + if iszero(addr) { + mstore(0, 0x30116425) // Error selector for DeploymentFailed + revert(0x1C, 0x04) // reverting with just 4 bytes + } + } + + if (isPlug_ == IsPlug.YES) IPlug(addr).initSocket(appGateway_, msg.sender, switchboard_); + + bytes memory returnData; + if (initCallData_.length > 0) { + // Capture more detailed error information + (bool success, bytes memory returnData_) = addr.call(initCallData_); + + if (!success) { + // Additional error logging + assembly { + let ptr := mload(0x40) + returndatacopy(ptr, 0, returndatasize()) + log0(ptr, returndatasize()) + } + + revert ExecutionFailed(); + } + returnData = returnData_; + } + + emit Deployed(addr, salt_, returnData); + return addr; + } + + /// @notice Gets the address for a deployed contract + /// @param creationCode_ The creation code + /// @param salt_ The salt + /// @return address The deployed address + function getAddress(bytes memory creationCode_, uint256 salt_) public view returns (address) { + bytes32 hash = keccak256( + abi.encodePacked(bytes1(0xff), address(this), salt_, keccak256(creationCode_)) + ); + + return address(uint160(uint256(hash))); + } + + function connectSocket( + address appGateway_, + address socket_, + address switchboard_ + ) external onlyOwner { + _connectSocket(appGateway_, socket_, switchboard_); + } + + /** + * @notice Rescues funds from the contract if they are locked by mistake. This contract does not + * theoretically need this function but it is added for safety. + * @param token_ The address of the token contract. + * @param rescueTo_ The address where rescued tokens need to be sent. + * @param amount_ The amount of tokens to be rescued. + */ + function rescueFunds( + address token_, + address rescueTo_, + uint256 amount_ + ) external onlyRole(RESCUE_ROLE) { + RescueFundsLib._rescueFunds(token_, rescueTo_, amount_); + } +} diff --git a/contracts/apps/payload-delivery/app-gateway/FeesManager.sol b/contracts/protocol/payload-delivery/FeesManager.sol similarity index 66% rename from contracts/apps/payload-delivery/app-gateway/FeesManager.sol rename to contracts/protocol/payload-delivery/FeesManager.sol index 193730e2..58a9323f 100644 --- a/contracts/apps/payload-delivery/app-gateway/FeesManager.sol +++ b/contracts/protocol/payload-delivery/FeesManager.sol @@ -1,21 +1,27 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {OwnableTwoStep} from "../../../utils/OwnableTwoStep.sol"; -import {SignatureVerifier} from "../../../socket/utils/SignatureVerifier.sol"; -import {AddressResolverUtil} from "../../../utils/AddressResolverUtil.sol"; -import {Bid, Fees, PayloadDetails, CallType, FinalizeParams, PayloadBatch} from "../../../common/Structs.sol"; -import {IDeliveryHelper} from "../../../interfaces/IDeliveryHelper.sol"; -import {FORWARD_CALL, DISTRIBUTE_FEE, DEPLOY, WITHDRAW} from "../../../common/Constants.sol"; -import {IFeesPlug} from "../../../interfaces/IFeesPlug.sol"; -import {IFeesManager} from "../../../interfaces/IFeesManager.sol"; +import {Ownable} from "solady/auth/Ownable.sol"; import "solady/utils/Initializable.sol"; +import "solady/utils/ECDSA.sol"; -/// @title FeesManager -/// @notice Contract for managing fees -contract FeesManager is IFeesManager, AddressResolverUtil, OwnableTwoStep, Initializable { +import {IFeesPlug} from "../../interfaces/IFeesPlug.sol"; +import {IFeesManager} from "../../interfaces/IFeesManager.sol"; + +import {AddressResolverUtil} from "../utils/AddressResolverUtil.sol"; +import {WITHDRAW} from "../utils/common/Constants.sol"; +import {NotAuctionManager} from "../utils/common/Errors.sol"; +import {Bid, Fees, PayloadDetails, CallType, FinalizeParams, Parallel} from "../utils/common/Structs.sol"; + +abstract contract FeesManagerStorage is IFeesManager { + // slots [0-49] reserved for gap + uint256[50] _gap_before; + + // slot 50 uint256 public feesCounter; - mapping(uint32 => uint256) public feeCollectionGasLimit; + + // slot 51 + uint32 public evmxSlug; /// @notice Struct containing fee amounts and status struct TokenBalance { @@ -23,19 +29,36 @@ contract FeesManager is IFeesManager, AddressResolverUtil, OwnableTwoStep, Initi uint256 blocked; // Amount blocked } + // slot 52 /// @notice Master mapping tracking all fee information /// @dev appGateway => chainSlug => token => TokenBalance mapping(address => mapping(uint32 => mapping(address => TokenBalance))) public appGatewayFeeBalances; + // slot 53 /// @notice Mapping to track blocked fees for each async id /// @dev asyncId => Fees mapping(bytes32 => Fees) public asyncIdBlockedFees; + // slot 54 /// @notice Mapping to track fees to be distributed to transmitters /// @dev transmitter => chainSlug => token => amount mapping(address => mapping(uint32 => mapping(address => uint256))) public transmitterFees; + // slot 55 + /// @notice Mapping to track nonce to whether it has been used + /// @dev signatureNonce => isNonceUsed + mapping(uint256 => bool) public isNonceUsed; + + // slots [56-105] reserved for gap + uint256[50] _gap_after; + + // slots 106-156 reserved for addr resolver util +} + +/// @title FeesManager +/// @notice Contract for managing fees +contract FeesManager is FeesManagerStorage, Initializable, Ownable, AddressResolverUtil { /// @notice Emitted when fees are blocked for a batch /// @param asyncId The batch identifier /// @param chainSlug The chain identifier @@ -91,6 +114,10 @@ contract FeesManager is IFeesManager, AddressResolverUtil, OwnableTwoStep, Initi error NoFeesForTransmitter(); /// @notice Error thrown when no fees was blocked error NoFeesBlocked(); + /// @notice Error thrown when watcher signature is invalid + error InvalidWatcherSignature(); + /// @notice Error thrown when nonce is used + error NonceUsed(); constructor() { _disableInitializers(); // disable for implementation @@ -99,9 +126,15 @@ contract FeesManager is IFeesManager, AddressResolverUtil, OwnableTwoStep, Initi /// @notice Initializer function to replace constructor /// @param addressResolver_ The address of the address resolver /// @param owner_ The address of the owner - function initialize(address addressResolver_, address owner_) public reinitializer(1) { + /// @param evmxSlug_ The evmx chain slug + function initialize( + address addressResolver_, + address owner_, + uint32 evmxSlug_ + ) public reinitializer(1) { + evmxSlug = evmxSlug_; _setAddressResolver(addressResolver_); - _claimOwner(owner_); + _initializeOwner(owner_); } /// @notice Returns available (unblocked) fees for a gateway @@ -121,24 +154,35 @@ contract FeesManager is IFeesManager, AddressResolverUtil, OwnableTwoStep, Initi /// @notice Adds the fees deposited for an app gateway on a chain /// @param chainSlug_ The chain identifier - /// @param appGateway_ The app gateway address + /// @param originAppGateway_ The app gateway address /// @param token_ The token address /// @param amount_ The amount deposited function incrementFeesDeposited( uint32 chainSlug_, - address appGateway_, + address originAppGateway_, address token_, - uint256 amount_ - ) external onlyOwner { - address appGateway = _getCoreAppGateway(appGateway_); + uint256 amount_, + uint256 signatureNonce_, + bytes memory signature_ + ) external { + _isWatcherSignatureValid( + abi.encode(chainSlug_, originAppGateway_, token_, amount_), + signatureNonce_, + signature_ + ); + + address appGateway = _getCoreAppGateway(originAppGateway_); TokenBalance storage tokenBalance = appGatewayFeeBalances[appGateway][chainSlug_][token_]; tokenBalance.deposited += amount_; emit FeesDepositedUpdated(chainSlug_, appGateway, token_, amount_); } - function isFeesEnough(address appGateway_, Fees memory fees_) external view returns (bool) { - address appGateway = _getCoreAppGateway(appGateway_); + function isFeesEnough( + address originAppGateway_, + Fees memory fees_ + ) external view returns (bool) { + address appGateway = _getCoreAppGateway(originAppGateway_); uint256 availableFees = getAvailableFees( fees_.feePoolChain, appGateway, @@ -148,54 +192,52 @@ contract FeesManager is IFeesManager, AddressResolverUtil, OwnableTwoStep, Initi } /// @notice Blocks fees for transmitter - /// @param appGateway_ The app gateway address - /// @param fees_ The fees data struct + /// @param originAppGateway_ The app gateway address + /// @param feesGivenByApp_ The fees data struct given by the app gateway /// @param asyncId_ The batch identifier /// @dev Only callable by delivery helper - function blockFees(address appGateway_, Fees memory fees_, bytes32 asyncId_) external { - // todo: only auction manager can call this - address appGateway = _getCoreAppGateway(appGateway_); + function blockFees( + address originAppGateway_, + Fees memory feesGivenByApp_, + Bid memory winningBid_, + bytes32 asyncId_ + ) external { + if (msg.sender != deliveryHelper().getAsyncBatchDetails(asyncId_).auctionManager) + revert NotAuctionManager(); + + address appGateway = _getCoreAppGateway(originAppGateway_); // Block fees uint256 availableFees = getAvailableFees( - fees_.feePoolChain, + feesGivenByApp_.feePoolChain, appGateway, - fees_.feePoolToken + feesGivenByApp_.feePoolToken ); - if (availableFees < fees_.amount) revert InsufficientFeesAvailable(); - - TokenBalance storage tokenBalance = appGatewayFeeBalances[appGateway][fees_.feePoolChain][ - fees_.feePoolToken - ]; - tokenBalance.blocked += fees_.amount; - - asyncIdBlockedFees[asyncId_] = fees_; - emit FeesBlocked(asyncId_, fees_.feePoolChain, fees_.feePoolToken, fees_.amount); - } - function updateTransmitterFees( - Bid memory winningBid_, - bytes32 asyncId_, - address appGateway_ - ) external onlyDeliveryHelper { - address appGateway = _getCoreAppGateway(appGateway_); + if (asyncIdBlockedFees[asyncId_].amount > 0) + availableFees += asyncIdBlockedFees[asyncId_].amount; - Fees storage fees = asyncIdBlockedFees[asyncId_]; - TokenBalance storage tokenBalance = appGatewayFeeBalances[appGateway][fees.feePoolChain][ - fees.feePoolToken - ]; + if (availableFees < winningBid_.fee) revert InsufficientFeesAvailable(); + TokenBalance storage tokenBalance = appGatewayFeeBalances[appGateway][ + feesGivenByApp_.feePoolChain + ][feesGivenByApp_.feePoolToken]; - // if no transmitter assigned after auction, unblock fees - if (winningBid_.transmitter == address(0)) { - tokenBalance.blocked -= fees.amount; - delete asyncIdBlockedFees[asyncId_]; - return; - } + tokenBalance.blocked = + tokenBalance.blocked + + winningBid_.fee - + asyncIdBlockedFees[asyncId_].amount; - // update new amount - fees.amount = winningBid_.fee; - tokenBalance.blocked = tokenBalance.blocked - fees.amount + winningBid_.fee; + asyncIdBlockedFees[asyncId_] = Fees({ + feePoolChain: feesGivenByApp_.feePoolChain, + feePoolToken: feesGivenByApp_.feePoolToken, + amount: winningBid_.fee + }); - emit TransmitterFeesUpdated(asyncId_, winningBid_.transmitter, winningBid_.fee); + emit FeesBlocked( + asyncId_, + feesGivenByApp_.feePoolChain, + feesGivenByApp_.feePoolToken, + winningBid_.fee + ); } /// @notice Unblocks fees after successful execution and assigns them to the transmitter @@ -204,12 +246,12 @@ contract FeesManager is IFeesManager, AddressResolverUtil, OwnableTwoStep, Initi function unblockAndAssignFees( bytes32 asyncId_, address transmitter_, - address appGateway_ + address originAppGateway_ ) external override onlyDeliveryHelper { Fees memory fees = asyncIdBlockedFees[asyncId_]; if (fees.amount == 0) revert NoFeesBlocked(); - address appGateway = _getCoreAppGateway(appGateway_); + address appGateway = _getCoreAppGateway(originAppGateway_); TokenBalance storage tokenBalance = appGatewayFeeBalances[appGateway][fees.feePoolChain][ fees.feePoolToken ]; @@ -226,11 +268,11 @@ contract FeesManager is IFeesManager, AddressResolverUtil, OwnableTwoStep, Initi emit FeesUnblockedAndAssigned(asyncId_, transmitter_, fees.amount); } - function unblockFees(bytes32 asyncId_, address appGateway_) external onlyDeliveryHelper { + function unblockFees(bytes32 asyncId_, address originAppGateway_) external onlyDeliveryHelper { Fees memory fees = asyncIdBlockedFees[asyncId_]; if (fees.amount == 0) revert NoFeesBlocked(); - address appGateway = _getCoreAppGateway(appGateway_); + address appGateway = _getCoreAppGateway(originAppGateway_); TokenBalance storage tokenBalance = appGatewayFeeBalances[appGateway][fees.feePoolChain][ fees.feePoolToken ]; @@ -251,7 +293,7 @@ contract FeesManager is IFeesManager, AddressResolverUtil, OwnableTwoStep, Initi uint32 chainSlug_, address token_, address receiver_ - ) external returns (bytes32 payloadId, bytes32 root, PayloadDetails memory payloadDetails) { + ) external returns (bytes32 payloadId, bytes32 digest, PayloadDetails memory payloadDetails) { address transmitter = msg.sender; // Get all asyncIds for the transmitter uint256 totalFees = transmitterFees[transmitter][chainSlug_][token_]; @@ -268,15 +310,13 @@ contract FeesManager is IFeesManager, AddressResolverUtil, OwnableTwoStep, Initi // Create payload for plug contract payloadDetails = _createPayloadDetails(CallType.WRITE, chainSlug_, payload); - - // todo: revisit FinalizeParams memory finalizeParams = FinalizeParams({ payloadDetails: payloadDetails, asyncId: bytes32(0), transmitter: transmitter }); - (payloadId, root) = watcherPrecompile__().finalize(finalizeParams, address(this)); + (payloadId, digest) = watcherPrecompile__().finalize(address(this), finalizeParams); } function _createPayloadDetails( @@ -291,50 +331,28 @@ contract FeesManager is IFeesManager, AddressResolverUtil, OwnableTwoStep, Initi target: _getFeesPlugAddress(chainSlug_), payload: payload_, callType: callType_, + value: 0, executionGasLimit: 1000000, next: new address[](2), - isSequential: true + isParallel: Parallel.OFF }); } - /// @notice Updates blocked fees in case of failed execution - /// @param asyncId_ The batch identifier - /// @dev Only callable by delivery helper - function updateBlockedFees(bytes32 asyncId_, uint256 feesUsed_) external onlyOwner { - PayloadBatch memory batch = IDeliveryHelper(deliveryHelper()).getAsyncBatchDetails( - asyncId_ - ); - - Fees storage fees = asyncIdBlockedFees[asyncId_]; - TokenBalance storage tokenBalance = appGatewayFeeBalances[batch.appGateway][ - batch.fees.feePoolChain - ][batch.fees.feePoolToken]; - - // todo how to settle fees here? - // Unblock unused fees - uint256 unusedFees = fees.amount - feesUsed_; - tokenBalance.blocked -= unusedFees; - - // Update fees with actual fees used - fees.amount = feesUsed_; - asyncIdBlockedFees[asyncId_] = fees; - } - /// @notice Withdraws funds to a specified receiver /// @dev This function is used to withdraw fees from the fees plug - /// @param appGateway_ The address of the app gateway + /// @param originAppGateway_ The address of the app gateway /// @param chainSlug_ The chain identifier /// @param token_ The address of the token /// @param amount_ The amount of tokens to withdraw /// @param receiver_ The address of the receiver function getWithdrawToPayload( - address appGateway_, + address originAppGateway_, uint32 chainSlug_, address token_, uint256 amount_, address receiver_ ) public returns (PayloadDetails memory) { - address appGateway = _getCoreAppGateway(appGateway_); + address appGateway = _getCoreAppGateway(originAppGateway_); // Check if amount is available in fees plug uint256 availableAmount = getAvailableFees(chainSlug_, appGateway, token_); @@ -358,6 +376,21 @@ contract FeesManager is IFeesManager, AddressResolverUtil, OwnableTwoStep, Initi } function _getFeesPlugAddress(uint32 chainSlug_) internal view returns (address) { - return watcherPrecompile__().appGatewayPlugs(address(this), chainSlug_); + return watcherPrecompile__().feesPlug(chainSlug_); + } + + function _isWatcherSignatureValid( + bytes memory digest_, + uint256 signatureNonce_, + bytes memory signature_ + ) internal { + if (isNonceUsed[signatureNonce_]) revert NonceUsed(); + isNonceUsed[signatureNonce_] = true; + + bytes32 digest = keccak256(abi.encode(address(this), evmxSlug, signatureNonce_, digest_)); + digest = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", digest)); + // recovered signer is checked for the valid roles later + address signer = ECDSA.recover(digest, signature_); + if (signer != owner()) revert InvalidWatcherSignature(); } } diff --git a/contracts/apps/payload-delivery/FeesPlug.sol b/contracts/protocol/payload-delivery/FeesPlug.sol similarity index 60% rename from contracts/apps/payload-delivery/FeesPlug.sol rename to contracts/protocol/payload-delivery/FeesPlug.sol index 040a0930..a6a1afdf 100644 --- a/contracts/apps/payload-delivery/FeesPlug.sol +++ b/contracts/protocol/payload-delivery/FeesPlug.sol @@ -3,13 +3,18 @@ pragma solidity ^0.8.21; import "solmate/utils/SafeTransferLib.sol"; import "../../base/PlugBase.sol"; -import {OwnableTwoStep} from "../../utils/OwnableTwoStep.sol"; -import {ETH_ADDRESS} from "../../common/Constants.sol"; +import "../utils/AccessControl.sol"; +import {RESCUE_ROLE} from "../utils/common/AccessRoles.sol"; +import "../utils/RescueFundsLib.sol"; +import {ETH_ADDRESS} from "../utils/common/Constants.sol"; +import {InvalidTokenAddress} from "../utils/common/Errors.sol"; + /// @title FeesManager /// @notice Abstract contract for managing fees -contract FeesPlug is PlugBase, OwnableTwoStep { +contract FeesPlug is PlugBase, AccessControl { mapping(address => uint256) public balanceOf; mapping(bytes32 => bool) public feesRedeemed; + mapping(address => bool) public whitelistedTokens; /// @notice Error thrown when attempting to pay fees again error FeesAlreadyPaid(); @@ -17,20 +22,26 @@ contract FeesPlug is PlugBase, OwnableTwoStep { error InsufficientTokenBalance(address token_); /// @notice Error thrown when deposit amount does not match msg.value error InvalidDepositAmount(); - error InvalidTokenAddress(); + error TokenNotWhitelisted(address token_); /// @notice Event emitted when fees are deposited event FeesDeposited(address appGateway, address token, uint256 amount); /// @notice Event emitted when fees are withdrawn event FeesWithdrawn(address token, uint256 amount, address receiver); + /// @notice Event emitted when a token is whitelisted + event TokenWhitelisted(address token); + /// @notice Event emitted when a token is removed from whitelist + event TokenRemovedFromWhitelist(address token); modifier isFeesEnough(uint256 fee_, address feeToken_) { if (balanceOf[feeToken_] < fee_) revert InsufficientTokenBalance(feeToken_); _; } - constructor(address socket_, address owner_) PlugBase(socket_) { - _claimOwner(owner_); + constructor(address socket_, address owner_) { + _setSocket(socket_); + _initializeOwner(owner_); + whitelistedTokens[ETH_ADDRESS] = true; // ETH is whitelisted by default } function distributeFee( @@ -62,6 +73,8 @@ contract FeesPlug is PlugBase, OwnableTwoStep { /// @param amount_ The amount /// @param appGateway_ The app gateway address function deposit(address token_, address appGateway_, uint256 amount_) external payable { + if (!whitelistedTokens[token_]) revert TokenNotWhitelisted(token_); + if (token_ == ETH_ADDRESS) { if (msg.value != amount_) revert InvalidDepositAmount(); } else { @@ -97,6 +110,36 @@ contract FeesPlug is PlugBase, OwnableTwoStep { _connectSocket(appGateway_, socket_, switchboard_); } + /// @notice Adds a token to the whitelist + /// @param token_ The token address to whitelist + function whitelistToken(address token_) external onlyOwner { + whitelistedTokens[token_] = true; + emit TokenWhitelisted(token_); + } + + /// @notice Removes a token from the whitelist + /// @param token_ The token address to remove + function removeTokenFromWhitelist(address token_) external onlyOwner { + if (token_ == ETH_ADDRESS) revert(); // Cannot remove ETH from whitelist + whitelistedTokens[token_] = false; + emit TokenRemovedFromWhitelist(token_); + } + + /** + * @notice Rescues funds from the contract if they are locked by mistake. This contract does not + * theoretically need this function but it is added for safety. + * @param token_ The address of the token contract. + * @param rescueTo_ The address where rescued tokens need to be sent. + * @param amount_ The amount of tokens to be rescued. + */ + function rescueFunds( + address token_, + address rescueTo_, + uint256 amount_ + ) external onlyRole(RESCUE_ROLE) { + RescueFundsLib._rescueFunds(token_, rescueTo_, amount_); + } + fallback() external payable {} receive() external payable {} diff --git a/contracts/apps/payload-delivery/app-gateway/BatchAsync.sol b/contracts/protocol/payload-delivery/app-gateway/BatchAsync.sol similarity index 85% rename from contracts/apps/payload-delivery/app-gateway/BatchAsync.sol rename to contracts/protocol/payload-delivery/app-gateway/BatchAsync.sol index 4cd0529d..825a3149 100644 --- a/contracts/apps/payload-delivery/app-gateway/BatchAsync.sol +++ b/contracts/protocol/payload-delivery/app-gateway/BatchAsync.sol @@ -3,18 +3,12 @@ pragma solidity ^0.8.21; import "./QueueAsync.sol"; -import {IDeliveryHelper} from "../../../interfaces/IDeliveryHelper.sol"; -import {IAppGateway} from "../../../interfaces/IAppGateway.sol"; -import {IAddressResolver} from "../../../interfaces/IAddressResolver.sol"; -import {IAuctionManager} from "../../../interfaces/IAuctionManager.sol"; -import {IFeesManager} from "../../../interfaces/IFeesManager.sol"; - -import {Bid, PayloadBatch, Fees, PayloadDetails} from "../../../common/Structs.sol"; -import {FORWARD_CALL, DISTRIBUTE_FEE, DEPLOY, WITHDRAW, QUERY, FINALIZE} from "../../../common/Constants.sol"; - /// @title BatchAsync /// @notice Abstract contract for managing asynchronous payload batches abstract contract BatchAsync is QueueAsync { + // slots [210-259] reserved for gap + uint256[50] _gap_batch_async; + /// @notice Error thrown when attempting to executed payloads after all have been executed error AllPayloadsExecuted(); /// @notice Error thrown request did not come from Forwarder address @@ -45,7 +39,7 @@ abstract contract BatchAsync is QueueAsync { event PayloadAsyncRequested( bytes32 indexed asyncId, bytes32 indexed payloadId, - bytes32 indexed root, + bytes32 indexed digest, PayloadDetails payloadDetails ); @@ -69,6 +63,9 @@ abstract contract BatchAsync is QueueAsync { } // Default flow for other cases (including mixed read/write) + if (auctionManager_ == address(0)) { + auctionManager_ = IAddressResolver(addressResolver__).defaultAuctionManager(); + } return _deliverPayload(payloadDetailsArray, fees_, auctionManager_, onCompleteData_); } @@ -91,12 +88,13 @@ abstract contract BatchAsync is QueueAsync { bytes32 asyncId = getCurrentAsyncId(); asyncCounter++; - if (!IFeesManager(feesManager).isFeesEnough(msg.sender, fees_)) revert InsufficientFees(); + if (!IFeesManager(addressResolver__.feesManager()).isFeesEnough(msg.sender, fees_)) + revert InsufficientFees(); // Handle initial read operations first uint256 readEndIndex = _processReadOperations(payloadDetails_, asyncId); - watcherPrecompile__().checkAndUpdateLimit( + watcherPrecompile__().checkAndConsumeLimit( payloadDetails_[0].appGateway, QUERY, readEndIndex @@ -104,6 +102,13 @@ abstract contract BatchAsync is QueueAsync { // If only reads, return early if (readEndIndex == payloadDetails_.length) { + emit PayloadSubmitted( + asyncId, + _getCoreAppGateway(msg.sender), + payloadDetails_, + fees_, + auctionManager_ + ); return asyncId; } @@ -133,7 +138,7 @@ abstract contract BatchAsync is QueueAsync { while ( readEndIndex < payloadDetails_.length && payloadDetails_[readEndIndex].callType == CallType.READ && - !payloadDetails_[readEndIndex].isSequential + payloadDetails_[readEndIndex].isParallel == Parallel.ON ) { readEndIndex++; } @@ -174,6 +179,7 @@ abstract contract BatchAsync is QueueAsync { uint256 readEndIndex, bytes32 asyncId ) internal returns (address) { + // later changed to main app gateway if its a write call address appGateway = msg.sender; uint256 writes = 0; @@ -182,8 +188,7 @@ abstract contract BatchAsync is QueueAsync { if (payloadDetails_[i].callType == CallType.DEPLOY) { // contract factory plug deploys new contracts - payloadDetails_[i].target = getPlugAddress( - address(this), + payloadDetails_[i].target = getDeliveryHelperPlugAddress( payloadDetails_[i].chainSlug ); writes++; @@ -196,13 +201,13 @@ abstract contract BatchAsync is QueueAsync { payloadBatchDetails[asyncId].push(payloadDetails_[i]); } - watcherPrecompile__().checkAndUpdateLimit( + watcherPrecompile__().checkAndConsumeLimit( appGateway, QUERY, // remaining reads payloadDetails_.length - writes - readEndIndex ); - watcherPrecompile__().checkAndUpdateLimit(appGateway, FINALIZE, writes); + watcherPrecompile__().checkAndConsumeLimit(appGateway, FINALIZE, writes); return appGateway; } @@ -225,6 +230,7 @@ abstract contract BatchAsync is QueueAsync { isBatchCancelled: false, totalPayloadsRemaining: _payloadBatches[asyncId].totalPayloadsRemaining, lastBatchPromises: _payloadBatches[asyncId].lastBatchPromises, + lastBatchOfPayloads: new bytes32[](0), onCompleteData: onCompleteData_ }); @@ -245,13 +251,16 @@ abstract contract BatchAsync is QueueAsync { _payloadBatches[asyncId_].isBatchCancelled = true; if (_payloadBatches[asyncId_].winningBid.transmitter != address(0)) { - IFeesManager(feesManager).unblockAndAssignFees( + IFeesManager(addressResolver__.feesManager()).unblockAndAssignFees( asyncId_, _payloadBatches[asyncId_].winningBid.transmitter, _payloadBatches[asyncId_].appGateway ); } else { - IFeesManager(feesManager).unblockFees(asyncId_, _payloadBatches[asyncId_].appGateway); + IFeesManager(addressResolver__.feesManager()).unblockFees( + asyncId_, + _payloadBatches[asyncId_].appGateway + ); } emit BatchCancelled(asyncId_); @@ -273,8 +282,8 @@ abstract contract BatchAsync is QueueAsync { /// @notice Gets the payload delivery plug address /// @param chainSlug_ The chain identifier /// @return address The address of the payload delivery plug - function getPlugAddress(address appGateway_, uint32 chainSlug_) public view returns (address) { - return watcherPrecompile__().appGatewayPlugs(appGateway_, chainSlug_); + function getDeliveryHelperPlugAddress(uint32 chainSlug_) public view returns (address) { + return watcherPrecompile__().contractFactoryPlug(chainSlug_); } /// @notice Gets the current async ID @@ -298,13 +307,16 @@ abstract contract BatchAsync is QueueAsync { Fees memory fees_ ) external { PayloadDetails[] memory payloadDetailsArray = new PayloadDetails[](1); - payloadDetailsArray[0] = IFeesManager(feesManager).getWithdrawToPayload( + payloadDetailsArray[0] = IFeesManager(addressResolver__.feesManager()).getWithdrawToPayload( msg.sender, chainSlug_, token_, amount_, receiver_ ); + if (auctionManager_ == address(0)) { + auctionManager_ = IAddressResolver(addressResolver__).defaultAuctionManager(); + } _deliverPayload(payloadDetailsArray, fees_, auctionManager_, new bytes(0)); } } diff --git a/contracts/apps/payload-delivery/app-gateway/DeliveryHelper.sol b/contracts/protocol/payload-delivery/app-gateway/DeliveryHelper.sol similarity index 76% rename from contracts/apps/payload-delivery/app-gateway/DeliveryHelper.sol rename to contracts/protocol/payload-delivery/app-gateway/DeliveryHelper.sol index 59e44cf9..c3e5de15 100644 --- a/contracts/apps/payload-delivery/app-gateway/DeliveryHelper.sol +++ b/contracts/protocol/payload-delivery/app-gateway/DeliveryHelper.sol @@ -1,15 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {IAppGateway} from "../../../interfaces/IAppGateway.sol"; -import {OwnableTwoStep} from "../../../utils/OwnableTwoStep.sol"; -import {Bid, PayloadBatch, Fees, PayloadDetails, FinalizeParams} from "../../../common/Structs.sol"; -import {DISTRIBUTE_FEE, DEPLOY} from "../../../common/Constants.sol"; -import {PromisesNotResolved} from "../../../common/Errors.sol"; import "./BatchAsync.sol"; -import "solady/utils/Initializable.sol"; -contract DeliveryHelper is BatchAsync, OwnableTwoStep, Initializable { +contract DeliveryHelper is BatchAsync { event CallBackReverted(bytes32 asyncId_, bytes32 payloadId_); constructor() { @@ -18,50 +12,48 @@ contract DeliveryHelper is BatchAsync, OwnableTwoStep, Initializable { /// @notice Initializer function to replace constructor /// @param addressResolver_ The address resolver contract - /// @param feesManager_ The fees manager contract /// @param owner_ The owner address function initialize( address addressResolver_, - address feesManager_, address owner_, - uint256 bidTimeout_ + uint128 bidTimeout_ ) public reinitializer(1) { _setAddressResolver(addressResolver_); - feesManager = feesManager_; bidTimeout = bidTimeout_; - _claimOwner(owner_); + _initializeOwner(owner_); } function startBatchProcessing( bytes32 asyncId_, Bid memory winningBid_ ) external onlyAuctionManager(asyncId_) { - _payloadBatches[asyncId_].winningBid = winningBid_; + if (winningBid_.transmitter == address(0)) revert InvalidTransmitter(); - // update fees - IFeesManager(feesManager).updateTransmitterFees( - winningBid_, - asyncId_, - _payloadBatches[asyncId_].appGateway - ); + bool isRestarted = _payloadBatches[asyncId_].winningBid.transmitter != address(0); + _payloadBatches[asyncId_].winningBid = winningBid_; - if (winningBid_.transmitter != address(0)) { - // process batch - _process(asyncId_); - } else { - // todo: check if this is correct? - // cancel batch - _payloadBatches[asyncId_].isBatchCancelled = true; - emit BatchCancelled(asyncId_); + if (!isRestarted) return _process(asyncId_, false); + + // Re-finalize all payloads in the batch if a new transmitter is assigned + bytes32[] memory payloadIds = _payloadBatches[asyncId_].lastBatchOfPayloads; + for (uint256 i = 0; i < payloadIds.length; i++) { + watcherPrecompile__().refinalize( + payloadIds[i], + FinalizeParams({ + payloadDetails: payloadIdToPayloadDetails[payloadIds[i]], + asyncId: asyncId_, + transmitter: winningBid_.transmitter + }) + ); } } function callback(bytes memory asyncId_, bytes memory) external override onlyPromises { bytes32 asyncId = abi.decode(asyncId_, (bytes32)); - _process(asyncId); + _process(asyncId, true); } - function _process(bytes32 asyncId_) internal { + function _process(bytes32 asyncId_, bool isCallback_) internal { PayloadBatch storage payloadBatch = _payloadBatches[asyncId_]; if (payloadBatch.isBatchCancelled) return; @@ -70,17 +62,23 @@ contract DeliveryHelper is BatchAsync, OwnableTwoStep, Initializable { if (payloadBatch.lastBatchPromises.length > 0) { // Check if all promises are resolved for (uint256 i = 0; i < payloadBatch.lastBatchPromises.length; i++) { + if (payloadBatch.lastBatchPromises[i] == address(0)) continue; if (!IPromise(payloadBatch.lastBatchPromises[i]).resolved()) { - revert PromisesNotResolved(); + if (isCallback_) revert PromisesNotResolved(); } } // Clear promises array after all are resolved - delete payloadBatch.lastBatchPromises; + if (isCallback_) { + delete payloadBatch.lastBatchPromises; + } } if (payloadBatch.totalPayloadsRemaining > 0) { + delete tempPayloadIds; + // Proceed with next payload only if all promises are resolved _finalizeNextPayload(asyncId_); + payloadBatch.lastBatchOfPayloads = tempPayloadIds; } else { _finishBatch(asyncId_, payloadBatch); } @@ -89,7 +87,7 @@ contract DeliveryHelper is BatchAsync, OwnableTwoStep, Initializable { } function _finishBatch(bytes32 asyncId_, PayloadBatch storage payloadBatch_) internal { - IFeesManager(feesManager).unblockAndAssignFees( + IFeesManager(addressResolver__.feesManager()).unblockAndAssignFees( asyncId_, payloadBatch_.winningBid.transmitter, payloadBatch_.appGateway @@ -103,10 +101,8 @@ contract DeliveryHelper is BatchAsync, OwnableTwoStep, Initializable { PayloadDetails[] storage payloads = payloadBatchDetails[asyncId_]; // Check for empty payloads or index out of bounds - // todo: should revert if (payloads.length == 0 || currentIndex >= payloads.length) { - _finishBatch(asyncId_, payloadBatch_); - return; + revert InvalidIndex(); } // Deploy single promise for the next batch of operations @@ -118,7 +114,7 @@ contract DeliveryHelper is BatchAsync, OwnableTwoStep, Initializable { IPromise(batchPromise).then(this.callback.selector, abi.encode(asyncId_)); // Handle batch processing based on type - if (!payloads[currentIndex].isSequential) { + if (payloads[currentIndex].isParallel == Parallel.ON) { _processParallelCalls(asyncId_, payloadBatch_, payloads, currentIndex, batchPromise); } else { _processSequentialCall( @@ -138,7 +134,7 @@ contract DeliveryHelper is BatchAsync, OwnableTwoStep, Initializable { PayloadBatch storage payloadBatch_, address batchPromise_, bool isRead_ - ) internal returns (bytes32 payloadId, bytes32 root) { + ) internal returns (bytes32 payloadId, bytes32 digest) { payloadDetails_.next[1] = batchPromise_; if (isRead_) { payloadId = watcherPrecompile__().query( @@ -148,23 +144,24 @@ contract DeliveryHelper is BatchAsync, OwnableTwoStep, Initializable { payloadDetails_.next, payloadDetails_.payload ); - root = bytes32(0); + digest = bytes32(0); } else { FinalizeParams memory finalizeParams = FinalizeParams({ payloadDetails: payloadDetails_, asyncId: asyncId_, transmitter: payloadBatch_.winningBid.transmitter }); - (payloadId, root) = watcherPrecompile__().finalize( - finalizeParams, - payloadBatch_.appGateway + (payloadId, digest) = watcherPrecompile__().finalize( + payloadBatch_.appGateway, + finalizeParams ); } + tempPayloadIds.push(payloadId); payloadIdToBatchHash[payloadId] = asyncId_; payloadIdToPayloadDetails[payloadId] = payloadDetails_; - emit PayloadAsyncRequested(asyncId_, payloadId, root, payloadDetails_); + emit PayloadAsyncRequested(asyncId_, payloadId, digest, payloadDetails_); } function _processParallelCalls( @@ -178,7 +175,9 @@ contract DeliveryHelper is BatchAsync, OwnableTwoStep, Initializable { if (startIndex_ >= payloads_.length) revert InvalidIndex(); uint256 endIndex = startIndex_; - while (endIndex + 1 < payloads_.length && !payloads_[endIndex + 1].isSequential) { + while ( + endIndex + 1 < payloads_.length && payloads_[endIndex + 1].isParallel == Parallel.ON + ) { endIndex++; } diff --git a/contracts/protocol/payload-delivery/app-gateway/DeliveryHelperStorage.sol b/contracts/protocol/payload-delivery/app-gateway/DeliveryHelperStorage.sol new file mode 100644 index 00000000..1801385a --- /dev/null +++ b/contracts/protocol/payload-delivery/app-gateway/DeliveryHelperStorage.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.21; + +import {IDeliveryHelper} from "../../../interfaces/IDeliveryHelper.sol"; +import {IPromise} from "../../../interfaces/IPromise.sol"; +import {IAddressResolver} from "../../../interfaces/IAddressResolver.sol"; +import {IContractFactoryPlug} from "../../../interfaces/IContractFactoryPlug.sol"; +import {IAppGateway} from "../../../interfaces/IAppGateway.sol"; +import {IAppGateway} from "../../../interfaces/IAppGateway.sol"; +import {IAddressResolver} from "../../../interfaces/IAddressResolver.sol"; +import {IAuctionManager} from "../../../interfaces/IAuctionManager.sol"; +import {IFeesManager} from "../../../interfaces/IFeesManager.sol"; + +import {CallParams, Fees, PayloadDetails, CallType, Bid, PayloadBatch, Parallel, IsPlug, FinalizeParams} from "../../utils/common/Structs.sol"; +import {NotAuctionManager, InvalidPromise, InvalidIndex, PromisesNotResolved, InvalidTransmitter} from "../../utils/common/Errors.sol"; +import {FORWARD_CALL, DISTRIBUTE_FEE, DEPLOY, WITHDRAW, QUERY, FINALIZE} from "../../utils/common/Constants.sol"; + +/// @title DeliveryHelperStorage +/// @notice Storage contract for DeliveryHelper +abstract contract DeliveryHelperStorage is IDeliveryHelper { + // slots [0-49] reserved for gap + uint256[50] _gap_before; + + // slot 50 + uint256 public saltCounter; + + // slot 51 + uint128 public asyncCounter; + uint128 public bidTimeout; + + // slot 52 + bytes32[] public tempPayloadIds; + + // slot 53 + /// @notice The call parameters array + CallParams[] public callParamsArray; + + // slot 54 + /// @notice The mapping of valid promises + mapping(address => bool) public isValidPromise; + + // slot 55 - payloadIdToBatchHash + mapping(bytes32 => bytes32) public payloadIdToBatchHash; + // slot 56 - payloadIdToPayloadDetails + mapping(bytes32 => PayloadDetails) public payloadIdToPayloadDetails; + + // slot 57 + // asyncId => PayloadDetails[] + mapping(bytes32 => PayloadDetails[]) public payloadBatchDetails; + + // slot 58 + // asyncId => PayloadBatch + mapping(bytes32 => PayloadBatch) internal _payloadBatches; + + // slots [59-108] reserved for gap + uint256[50] _gap_after; +} diff --git a/contracts/apps/payload-delivery/app-gateway/QueueAsync.sol b/contracts/protocol/payload-delivery/app-gateway/QueueAsync.sol similarity index 73% rename from contracts/apps/payload-delivery/app-gateway/QueueAsync.sol rename to contracts/protocol/payload-delivery/app-gateway/QueueAsync.sol index 9bfa2890..c08b0f93 100644 --- a/contracts/apps/payload-delivery/app-gateway/QueueAsync.sol +++ b/contracts/protocol/payload-delivery/app-gateway/QueueAsync.sol @@ -1,48 +1,21 @@ // SPDX-License-Identifier: Unlicense pragma solidity ^0.8.21; -import {AddressResolverUtil} from "../../../utils/AddressResolverUtil.sol"; -import {CallParams, Fees, PayloadDetails, CallType, Bid, PayloadBatch} from "../../../common/Structs.sol"; -import {NotAuctionManager, InvalidPromise, InvalidIndex} from "../../../common/Errors.sol"; -import {AsyncPromise} from "../../../AsyncPromise.sol"; -import {IPromise} from "../../../interfaces/IPromise.sol"; -import {IAppDeployer} from "../../../interfaces/IAppDeployer.sol"; -import {IAddressResolver} from "../../../interfaces/IAddressResolver.sol"; -import {IContractFactoryPlug} from "../../../interfaces/IContractFactoryPlug.sol"; -import {IDeliveryHelper} from "../../../interfaces/IDeliveryHelper.sol"; +import {Ownable} from "solady/auth/Ownable.sol"; +import "solady/utils/Initializable.sol"; -/// @notice Abstract contract for managing asynchronous payloads -abstract contract QueueAsync is AddressResolverUtil, IDeliveryHelper { - uint256 public saltCounter; - uint256 public asyncCounter; - address public feesManager; - - uint256 public bidTimeout; - - /// @notice The call parameters array - CallParams[] public callParamsArray; - /// @notice The mapping of valid promises - mapping(address => bool) public isValidPromise; - - // payloadId => asyncId - mapping(bytes32 => bytes32) public payloadIdToBatchHash; - mapping(bytes32 => PayloadDetails) public payloadIdToPayloadDetails; +import {AddressResolverUtil} from "../../utils/AddressResolverUtil.sol"; - // asyncId => PayloadBatch - mapping(bytes32 => PayloadBatch) internal _payloadBatches; - - event PayloadBatchCancelled(bytes32 asyncId_); - - function payloadBatches(bytes32 asyncId_) external view override returns (PayloadBatch memory) { - return _payloadBatches[asyncId_]; - } +import "./DeliveryHelperStorage.sol"; - function getPayloadDetails(bytes32 payloadId_) external view returns (PayloadDetails memory) { - return payloadIdToPayloadDetails[payloadId_]; - } +/// @notice Abstract contract for managing asynchronous payloads +abstract contract QueueAsync is DeliveryHelperStorage, Initializable, Ownable, AddressResolverUtil { + // slots [0-108] reserved for delivery helper storage and [109-159] reserved for addr resolver util + // slots [160-209] reserved for gap + uint256[50] _gap_queue_async; - // asyncId => PayloadDetails[] - mapping(bytes32 => PayloadDetails[]) public payloadBatchDetails; + event PayloadBatchCancelled(bytes32 asyncId); + event BidTimeoutUpdated(uint256 newBidTimeout); modifier onlyPromises() { if (!isValidPromise[msg.sender]) revert InvalidPromise(); @@ -54,6 +27,14 @@ abstract contract QueueAsync is AddressResolverUtil, IDeliveryHelper { _; } + function payloadBatches(bytes32 asyncId_) external view override returns (PayloadBatch memory) { + return _payloadBatches[asyncId_]; + } + + function getPayloadDetails(bytes32 payloadId_) external view returns (PayloadDetails memory) { + return payloadIdToPayloadDetails[payloadId_]; + } + /// @notice Clears the call parameters array function clearQueue() public { delete callParamsArray; @@ -66,23 +47,29 @@ abstract contract QueueAsync is AddressResolverUtil, IDeliveryHelper { /// @param callType_ The call type /// @param payload_ The payload function queue( - bool isSequential_, + IsPlug isPlug_, + Parallel isParallel_, uint32 chainSlug_, address target_, address asyncPromise_, + uint256 value_, CallType callType_, - bytes memory payload_ + bytes memory payload_, + bytes memory initCallData_ ) external { // todo: sb related details callParamsArray.push( CallParams({ + isPlug: isPlug_, callType: callType_, asyncPromise: asyncPromise_, chainSlug: chainSlug_, target: target_, payload: payload_, + value: value_, gasLimit: 10000000, - isSequential: isSequential_ + isParallel: isParallel_, + initCallData: initCallData_ }) ); } @@ -92,6 +79,8 @@ abstract contract QueueAsync is AddressResolverUtil, IDeliveryHelper { function _createPayloadDetailsArray( bytes32 sbType_ ) internal returns (PayloadDetails[] memory payloadDetailsArray) { + if (callParamsArray.length == 0) return payloadDetailsArray; + payloadDetailsArray = new PayloadDetails[](callParamsArray.length); for (uint256 i = 0; i < callParamsArray.length; i++) { CallParams memory params = callParamsArray[i]; @@ -129,10 +118,12 @@ abstract contract QueueAsync is AddressResolverUtil, IDeliveryHelper { // app gateway is set in the plug deployed on chain payload_ = abi.encodeWithSelector( IContractFactoryPlug.deployContract.selector, - payload_, + params_.isPlug, salt_, appGatewayForPlug_, - switchboard_ + switchboard_, + payload_, + params_.initCallData ); // for deploy, we set delivery helper as app gateway of contract factory plug @@ -144,14 +135,22 @@ abstract contract QueueAsync is AddressResolverUtil, IDeliveryHelper { appGateway: appGateway_, chainSlug: params_.chainSlug, target: params_.target, + value: params_.value, payload: payload_, callType: params_.callType, executionGasLimit: params_.gasLimit == 0 ? 1_000_000 : params_.gasLimit, next: next, - isSequential: params_.isSequential + isParallel: params_.isParallel }); } + /// @notice Updates the bid timeout + /// @param newBidTimeout_ The new bid timeout value + function updateBidTimeout(uint128 newBidTimeout_) external onlyOwner { + bidTimeout = newBidTimeout_; + emit BidTimeoutUpdated(newBidTimeout_); + } + function getPayloadIndexDetails( bytes32 asyncId_, uint256 index_ @@ -167,6 +166,4 @@ abstract contract QueueAsync is AddressResolverUtil, IDeliveryHelper { function getAsyncBatchDetails(bytes32 asyncId_) external view returns (PayloadBatch memory) { return _payloadBatches[asyncId_]; } - - uint256[49] __gap; } diff --git a/contracts/socket/Socket.sol b/contracts/protocol/socket/Socket.sol similarity index 74% rename from contracts/socket/Socket.sol rename to contracts/protocol/socket/Socket.sol index 31726da5..bd70a175 100644 --- a/contracts/socket/Socket.sol +++ b/contracts/protocol/socket/Socket.sol @@ -1,18 +1,18 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import "../interfaces/IPlug.sol"; -import "./SocketBase.sol"; -import {PlugDisconnected, InvalidAppGateway} from "../common/Errors.sol"; +import "./SocketUtils.sol"; +import {PlugDisconnected, InvalidAppGateway} from "../utils/common/Errors.sol"; + /** * @title SocketDst - * @dev SocketDst is an abstract contract that inherits from SocketBase and + * @dev SocketDst is an abstract contract that inherits from SocketUtils and * provides functionality for payload execution, verification. * It manages the mapping of payload execution status * timestamps * It also includes functions for payload execution and verification */ -contract Socket is SocketBase { +contract Socket is SocketUtils { //////////////////////////////////////////////////////// ////////////////////// ERRORS ////////////////////////// //////////////////////////////////////////////////////// @@ -23,7 +23,7 @@ contract Socket is SocketBase { /** * @dev Error emitted when a payload has already been executed */ - error PayloadAlreadyExecuted(); + error PayloadAlreadyExecuted(ExecutionStatus status); /** * @dev Error emitted when the executor is not valid */ @@ -39,30 +39,33 @@ contract Socket is SocketBase { */ error LowGasLimit(); error InvalidSlug(); - error ExecutionFailed(); + error DeadlinePassed(); //////////////////////////////////////////////////////////// ////////////////////// State Vars ////////////////////////// //////////////////////////////////////////////////////////// uint64 public callCounter; + enum ExecutionStatus { + NotExecuted, + Executed, + Reverted + } + /** * @dev keeps track of whether a payload has been executed or not using payload id */ - mapping(bytes32 => bool) public payloadExecuted; + mapping(bytes32 => ExecutionStatus) public payloadExecuted; constructor( uint32 chainSlug_, - address hasher_, - address signatureVerifier_, address owner_, string memory version_ - ) SocketBase(chainSlug_, hasher_, signatureVerifier_, owner_, version_) {} + ) SocketUtils(chainSlug_, owner_, version_) {} //////////////////////////////////////////////////////// ////////////////////// OPERATIONS ////////////////////////// //////////////////////////////////////////////////////// - /** * @notice To send message to a connected remote chain. Should only be called by a plug. * @param payload bytes to be delivered to the Plug on the siblingChainSlug_ @@ -93,58 +96,64 @@ contract Socket is SocketBase { * @notice Executes a payload that has been delivered by transmitters and authenticated by switchboards */ function execute( - bytes32 payloadId_, address appGateway_, - address target_, - uint256 executionGasLimit_, - bytes memory transmitterSignature_, - bytes memory payload_ + ExecuteParams memory params_, + bytes memory transmitterSignature_ ) external payable returns (bytes memory) { // make sure payload is not executed already - if (payloadExecuted[payloadId_]) revert PayloadAlreadyExecuted(); + if (payloadExecuted[params_.payloadId] != ExecutionStatus.NotExecuted) + revert PayloadAlreadyExecuted(payloadExecuted[params_.payloadId]); // update state to make sure no reentrancy - payloadExecuted[payloadId_] = true; + payloadExecuted[params_.payloadId] = ExecutionStatus.Executed; + + if (params_.deadline < block.timestamp) revert DeadlinePassed(); // extract plug address from msgID - address switchboard = _decodeSwitchboard(payloadId_); - uint32 localSlug = _decodeChainSlug(payloadId_); + address switchboard = _decodeSwitchboard(params_.payloadId); + uint32 localSlug = _decodeChainSlug(params_.payloadId); - PlugConfig memory plugConfig = _plugConfigs[target_]; + PlugConfig memory plugConfig = _plugConfigs[params_.target]; if (switchboard != address(plugConfig.switchboard__)) revert InvalidSwitchboard(); - if (localSlug != chainSlug) revert InvalidSlug(); - address transmitter = signatureVerifier__.recoverSigner( - keccak256(abi.encode(address(this), payloadId_)), + address transmitter = _recoverSigner( + keccak256(abi.encode(address(this), params_.payloadId)), transmitterSignature_ ); // create packed payload - bytes32 root = hasher__.packPayload( - payloadId_, + bytes32 digest = _packPayload( + params_.payloadId, appGateway_, transmitter, - target_, - executionGasLimit_, - payload_ + params_.target, + msg.value, + params_.deadline, + params_.executionGasLimit, + params_.payload ); // verify payload was part of the packet and // authenticated by respective switchboard - _verify(root, payloadId_, ISwitchboard(switchboard)); + _verify(digest, params_.payloadId, ISwitchboard(switchboard)); // execute payload - return _execute(target_, payloadId_, executionGasLimit_, payload_); + return + _execute(params_.target, params_.payloadId, params_.executionGasLimit, params_.payload); } //////////////////////////////////////////////////////// ////////////////// INTERNAL FUNCS ////////////////////// //////////////////////////////////////////////////////// - function _verify(bytes32 root_, bytes32 payloadId_, ISwitchboard switchboard__) internal view { + function _verify( + bytes32 digest_, + bytes32 payloadId_, + ISwitchboard switchboard__ + ) internal view { // NOTE: is the the first un-trusted call in the system, another one is Plug.call - if (!switchboard__.allowPacket(root_, payloadId_)) revert VerificationFailed(); + if (!switchboard__.allowPacket(digest_, payloadId_)) revert VerificationFailed(); } /** @@ -159,14 +168,20 @@ contract Socket is SocketBase { bytes memory payload_ ) internal returns (bytes memory) { if (gasleft() < executionGasLimit_) revert LowGasLimit(); + // NOTE: external un-trusted call (bool success, bytes memory returnData) = localPlug_.call{ gas: executionGasLimit_, value: msg.value }(payload_); - if (!success) revert ExecutionFailed(); - emit ExecutionSuccess(payloadId_, returnData); + if (!success) { + payloadExecuted[payloadId_] = ExecutionStatus.Reverted; + emit ExecutionFailed(payloadId_, returnData); + } else { + emit ExecutionSuccess(payloadId_, returnData); + } + return returnData; } diff --git a/contracts/protocol/socket/SocketBatcher.sol b/contracts/protocol/socket/SocketBatcher.sol new file mode 100644 index 00000000..726101e8 --- /dev/null +++ b/contracts/protocol/socket/SocketBatcher.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import "solady/auth/Ownable.sol"; +import "../../interfaces/ISocket.sol"; +import "../../interfaces/ISwitchboard.sol"; +import "../utils/RescueFundsLib.sol"; +import {AttestAndExecutePayloadParams} from "../../protocol/utils/common/Structs.sol"; + +/** + * @title SocketBatcher + * @notice The SocketBatcher contract is responsible for batching payloads and transmitting them to the destination chain + */ +contract SocketBatcher is Ownable { + // socket contract + ISocket public immutable socket__; + + /** + * @notice Initializes the TransmitManager contract + * @param socket_ The address of socket contract + * @param owner_ The owner of the contract with GOVERNANCE_ROLE + */ + constructor(address owner_, ISocket socket_) { + socket__ = socket_; + _initializeOwner(owner_); + } + + function attestAndExecute( + AttestAndExecutePayloadParams calldata params_ + ) external payable returns (bytes memory) { + ISwitchboard(params_.switchboard).attest(params_.payloadId, params_.digest, params_.proof); + + ISocket.ExecuteParams memory executeParams = ISocket.ExecuteParams({ + payloadId: params_.payloadId, + target: params_.target, + executionGasLimit: params_.executionGasLimit, + deadline: params_.deadline, + payload: params_.payload + }); + return + socket__.execute{value: msg.value}( + params_.appGateway, + executeParams, + params_.transmitterSignature + ); + } + + function rescueFunds(address token_, address to_, uint256 amount_) external onlyOwner { + RescueFundsLib._rescueFunds(token_, to_, amount_); + } +} diff --git a/contracts/socket/SocketConfig.sol b/contracts/protocol/socket/SocketConfig.sol similarity index 68% rename from contracts/socket/SocketConfig.sol rename to contracts/protocol/socket/SocketConfig.sol index 2eb5f8e7..4ff8a904 100644 --- a/contracts/socket/SocketConfig.sol +++ b/contracts/protocol/socket/SocketConfig.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import "../interfaces/ISocket.sol"; -import "../interfaces/ISwitchboard.sol"; -import "./utils/AccessControl.sol"; -import "./utils/AccessRoles.sol"; +import "../../interfaces/ISocket.sol"; +import "../../interfaces/ISwitchboard.sol"; +import "../utils/AccessControl.sol"; +import {GOVERNANCE_ROLE, RESCUE_ROLE} from "../utils/common/AccessRoles.sol"; /** * @title SocketConfig @@ -23,8 +23,14 @@ abstract contract SocketConfig is ISocket, AccessControl { ISwitchboard switchboard__; } + enum SwitchboardStatus { + NOT_REGISTERED, + REGISTERED, + DISABLED + } + // Error triggered when a switchboard already exists - mapping(address => bool) public isValidSwitchboard; + mapping(address => SwitchboardStatus) public isValidSwitchboard; // plug => (appGateway, switchboard__) mapping(address => PlugConfig) internal _plugConfigs; @@ -33,21 +39,32 @@ abstract contract SocketConfig is ISocket, AccessControl { // Error triggered when a connection is invalid error InvalidConnection(); error InvalidSwitchboard(); + error SwitchboardExistsOrDisabled(); // Event triggered when a new switchboard is added event SwitchboardAdded(address switchboard); + event SwitchboardDisabled(address switchboard); function registerSwitchboard() external { - if (isValidSwitchboard[msg.sender]) revert SwitchboardExists(); - isValidSwitchboard[msg.sender] = true; + if (isValidSwitchboard[msg.sender] != SwitchboardStatus.NOT_REGISTERED) + revert SwitchboardExistsOrDisabled(); + + isValidSwitchboard[msg.sender] = SwitchboardStatus.REGISTERED; emit SwitchboardAdded(msg.sender); } + function disableSwitchboard() external onlyRole(GOVERNANCE_ROLE) { + isValidSwitchboard[msg.sender] = SwitchboardStatus.DISABLED; + emit SwitchboardDisabled(msg.sender); + } + /** * @notice connects Plug to Socket and sets the config for given `siblingChainSlug_` */ function connect(address appGateway_, address switchboard_) external override { - if (!isValidSwitchboard[switchboard_]) revert InvalidSwitchboard(); + if (isValidSwitchboard[switchboard_] != SwitchboardStatus.REGISTERED) + revert InvalidSwitchboard(); + PlugConfig storage _plugConfig = _plugConfigs[msg.sender]; _plugConfig.appGateway = appGateway_; diff --git a/contracts/protocol/socket/SocketUtils.sol b/contracts/protocol/socket/SocketUtils.sol new file mode 100644 index 00000000..e46dd0fb --- /dev/null +++ b/contracts/protocol/socket/SocketUtils.sol @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import "../utils/RescueFundsLib.sol"; +import "./SocketConfig.sol"; +import {ECDSA} from "solady/utils/ECDSA.sol"; + +/** + * @title SocketUtils + * @notice A contract that is responsible for common storage for src and dest contracts, governance + * setters and inherits SocketConfig + */ +abstract contract SocketUtils is SocketConfig { + // Version string for this socket instance + bytes32 public immutable version; + // ChainSlug for this deployed socket instance + uint32 public immutable chainSlug; + + /* + * @notice constructor for creating a new Socket contract instance. + * @param chainSlug_ The unique identifier of the chain this socket is deployed on. + * @param owner_ The address of the owner who has the initial admin role. + * @param version_ The version string which is hashed and stored in socket. + */ + constructor(uint32 chainSlug_, address owner_, string memory version_) { + chainSlug = chainSlug_; + version = keccak256(bytes(version_)); + _initializeOwner(owner_); + } + + //////////////////////////////////////////////////////// + ////////////////////// ERRORS ////////////////////////// + //////////////////////////////////////////////////////// + + /** + * @dev Error thrown when non-transmitter tries to execute + */ + error InvalidTransmitter(); + + /** + * @notice Packs the payload into a bytes32 hash + * @param payloadId_ The ID of the payload + * @param appGateway_ The address of the application gateway + * @param transmitter_ The address of the transmitter + * @param target_ The address of the target contract + * @param executionGasLimit_ The gas limit for the execution + * @param payload_ The payload to be packed + * @return The packed payload as a bytes32 hash + */ + function _packPayload( + bytes32 payloadId_, + address appGateway_, + address transmitter_, + address target_, + uint256 value_, + uint256 deadline_, + uint256 executionGasLimit_, + bytes memory payload_ + ) internal pure returns (bytes32) { + return + keccak256( + abi.encode( + payloadId_, + appGateway_, + transmitter_, + target_, + value_, + deadline_, + executionGasLimit_, + payload_ + ) + ); + } + + function _recoverSigner( + bytes32 digest_, + bytes memory signature_ + ) internal view returns (address signer) { + bytes32 digest = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", digest_)); + // recovered signer is checked for the valid roles later + signer = ECDSA.recover(digest, signature_); + } + + ////////////////////////////////////////////// + //////////// Rescue role actions //////////// + ///////////////////////////////////////////// + + /** + * @notice Rescues funds from the contract if they are locked by mistake. This contract does not + * theoretically need this function but it is added for safety. + * @param token_ The address of the token contract. + * @param rescueTo_ The address where rescued tokens need to be sent. + * @param amount_ The amount of tokens to be rescued. + */ + function rescueFunds( + address token_, + address rescueTo_, + uint256 amount_ + ) external onlyRole(RESCUE_ROLE) { + RescueFundsLib._rescueFunds(token_, rescueTo_, amount_); + } +} diff --git a/contracts/socket/switchboard/FastSwitchboard.sol b/contracts/protocol/socket/switchboard/FastSwitchboard.sol similarity index 53% rename from contracts/socket/switchboard/FastSwitchboard.sol rename to contracts/protocol/socket/switchboard/FastSwitchboard.sol index fa49bbcd..874e7d19 100644 --- a/contracts/socket/switchboard/FastSwitchboard.sol +++ b/contracts/protocol/socket/switchboard/FastSwitchboard.sol @@ -9,56 +9,51 @@ import "./SwitchboardBase.sol"; * that enables packet attestations and watchers registration. */ contract FastSwitchboard is SwitchboardBase { - // used to track which watcher have attested a root - // watcher => root => isAttested + // used to track which watcher have attested a digest + // watcher => digest => isAttested mapping(bytes32 => bool) public isAttested; - // Error emitted when a root is already attested by a specific watcher. - // This is hit even if they are attesting a new proposalCount with same root. + // Error emitted when a digest is already attested by a specific watcher. + // This is hit even if they are attesting a new proposalCount with same digest. error AlreadyAttested(); error WatcherNotFound(); - event Attested(bytes32 payloadId, bytes32 root_, address watcher); + event Attested(bytes32 payloadId, bytes32 digest_, address watcher); /** * @dev Constructor function for the FastSwitchboard contract * @param chainSlug_ Chain slug of the chain where the contract is deployed - * @param signatureVerifier_ The address of the signature verifier contract */ constructor( uint32 chainSlug_, ISocket socket_, - ISignatureVerifier signatureVerifier_, address owner_ - ) SwitchboardBase(chainSlug_, socket_, signatureVerifier_, owner_) {} + ) SwitchboardBase(chainSlug_, socket_, owner_) {} /** * @dev Function to attest a packet * @param payloadId_ Packet ID - * @param root_ Root of the packet - * @param signature_ Signature of the watcher - * @notice we are attesting a root uniquely identified with packetId and proposalCount. However, - * there can be multiple proposals for same root. To avoid need to re-attest for different proposals - * with same root, we are storing attestations against root instead of packetId and proposalCount. + * @param digest_ Digest of the packet + * @param proof_ Proof of the watcher + * @notice we are attesting a digest uniquely identified with packetId and proposalCount. However, + * there can be multiple proposals for same digest. To avoid need to re-attest for different proposals + * with same digest, we are storing attestations against digest instead of packetId and proposalCount. */ - function attest(bytes32 payloadId_, bytes32 root_, bytes calldata signature_) external { - address watcher = signatureVerifier__.recoverSigner( - keccak256(abi.encode(address(this), root_)), - signature_ - ); + function attest(bytes32 payloadId_, bytes32 digest_, bytes calldata proof_) external { + address watcher = _recoverSigner(keccak256(abi.encode(address(this), digest_)), proof_); - if (isAttested[root_]) revert AlreadyAttested(); + if (isAttested[digest_]) revert AlreadyAttested(); if (!_hasRole(WATCHER_ROLE, watcher)) revert WatcherNotFound(); - isAttested[root_] = true; - emit Attested(payloadId_, root_, watcher); + isAttested[digest_] = true; + emit Attested(payloadId_, digest_, watcher); } /** * @inheritdoc ISwitchboard */ - function allowPacket(bytes32 root_, bytes32) external view returns (bool) { - // root has enough attestations - if (isAttested[root_]) return true; + function allowPacket(bytes32 digest_, bytes32) external view returns (bool) { + // digest has enough attestations + if (isAttested[digest_]) return true; // not enough attestations and timeout not hit return false; diff --git a/contracts/protocol/socket/switchboard/SwitchboardBase.sol b/contracts/protocol/socket/switchboard/SwitchboardBase.sol new file mode 100644 index 00000000..e628bb20 --- /dev/null +++ b/contracts/protocol/socket/switchboard/SwitchboardBase.sol @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import "../../../interfaces/ISwitchboard.sol"; +import "../../../interfaces/ISocket.sol"; +import "../../utils/AccessControl.sol"; +import {RESCUE_ROLE} from "../../utils/common/AccessRoles.sol"; +import "../../utils/RescueFundsLib.sol"; +import {ECDSA} from "solady/utils/ECDSA.sol"; + +abstract contract SwitchboardBase is ISwitchboard, AccessControl { + ISocket public immutable socket__; + + // chain slug of deployed chain + uint32 public immutable chainSlug; + + // incrementing nonce for each signer + // watcher => nextNonce + mapping(address => uint256) public nextNonce; + + // destinationChainSlug => initialPacketCount - packets with packetCount after this will be accepted at the switchboard. + // This is to prevent attacks with sending payloads for chain slugs before the switchboard is registered for them. + mapping(uint32 => uint256) public initialPacketCount; + + // Error hit when a signature with unexpected nonce is received + error InvalidNonce(); + + bytes32 constant WATCHER_ROLE = keccak256("WATCHER_ROLE"); + + /** + * @dev Constructor of SwitchboardBase + * @param chainSlug_ Chain slug of deployment chain + * @param socket_ socket_ contract + */ + constructor(uint32 chainSlug_, ISocket socket_, address owner_) { + chainSlug = chainSlug_; + socket__ = socket_; + _initializeOwner(owner_); + } + + function _recoverSigner( + bytes32 digest_, + bytes memory signature_ + ) internal view returns (address signer) { + bytes32 digest = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", digest_)); + // recovered signer is checked for the valid roles later + signer = ECDSA.recover(digest, signature_); + } + + ////////////////////////////////////////////// + //////////// Rescue role actions //////////// + ///////////////////////////////////////////// + + /** + * @notice Rescues funds from the contract if they are locked by mistake. This contract does not + * theoretically need this function but it is added for safety. + * @param token_ The address of the token contract. + * @param rescueTo_ The address where rescued tokens need to be sent. + * @param amount_ The amount of tokens to be rescued. + */ + function rescueFunds( + address token_, + address rescueTo_, + uint256 amount_ + ) external onlyRole(RESCUE_ROLE) { + RescueFundsLib._rescueFunds(token_, rescueTo_, amount_); + } +} diff --git a/contracts/socket/utils/AccessControl.sol b/contracts/protocol/utils/AccessControl.sol similarity index 95% rename from contracts/socket/utils/AccessControl.sol rename to contracts/protocol/utils/AccessControl.sol index 72c42c8f..c25f0645 100644 --- a/contracts/socket/utils/AccessControl.sol +++ b/contracts/protocol/utils/AccessControl.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import "../../utils/OwnableTwoStep.sol"; +import "solady/auth/Ownable.sol"; /** * @title AccessControl @@ -9,12 +9,16 @@ import "../../utils/OwnableTwoStep.sol"; * Each role can have one or more addresses associated with it, which are granted * permission to execute functions with the onlyRole modifier. */ -abstract contract AccessControl is OwnableTwoStep { +abstract contract AccessControl is Ownable { /** * @dev A mapping of roles to a mapping of addresses to boolean values indicating whether or not they have the role. + * @dev slot 0 */ mapping(bytes32 => mapping(address => bool)) private _permits; + // slots 1-50: gap for future storage variables + uint256[50] _gap_access_control; + /** * @dev Emitted when a role is granted to an address. */ diff --git a/contracts/utils/AddressResolverUtil.sol b/contracts/protocol/utils/AddressResolverUtil.sol similarity index 83% rename from contracts/utils/AddressResolverUtil.sol rename to contracts/protocol/utils/AddressResolverUtil.sol index 92fced3e..38005e15 100644 --- a/contracts/utils/AddressResolverUtil.sol +++ b/contracts/protocol/utils/AddressResolverUtil.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Unlicense pragma solidity ^0.8.21; -import "../interfaces/IAddressResolver.sol"; -import "../interfaces/IDeliveryHelper.sol"; -import "../interfaces/IWatcherPrecompile.sol"; +import "../../interfaces/IAddressResolver.sol"; +import "../../interfaces/IDeliveryHelper.sol"; +import "../../interfaces/IWatcherPrecompile.sol"; /// @title AddressResolverUtil /// @notice Utility contract for resolving system contract addresses @@ -11,8 +11,12 @@ import "../interfaces/IWatcherPrecompile.sol"; abstract contract AddressResolverUtil { /// @notice The address resolver contract reference /// @dev Used to look up system contract addresses + // slot 0 IAddressResolver public addressResolver__; + // slots 1-50 reserved for future use + uint256[50] __gap_resolver_util; + /// @notice Error thrown when an invalid address attempts to call the Payload Delivery only function error OnlyPayloadDelivery(); /// @notice Error thrown when an invalid address attempts to call the Watcher only function @@ -59,11 +63,10 @@ abstract contract AddressResolverUtil { addressResolver__ = IAddressResolver(_addressResolver); } - function _getCoreAppGateway(address appGateway_) internal view returns (address appGateway) { - appGateway = addressResolver__.contractsToGateways(appGateway_); - if (appGateway == address(0)) appGateway = appGateway_; + function _getCoreAppGateway( + address originAppGateway_ + ) internal view returns (address appGateway) { + appGateway = addressResolver__.contractsToGateways(originAppGateway_); + if (appGateway == address(0)) appGateway = originAppGateway_; } - - // for proxy contracts - uint256[49] __gap_resolver_util; } diff --git a/contracts/utils/FeesPlugin.sol b/contracts/protocol/utils/FeesPlugin.sol similarity index 62% rename from contracts/utils/FeesPlugin.sol rename to contracts/protocol/utils/FeesPlugin.sol index 943187ac..a5320f38 100644 --- a/contracts/utils/FeesPlugin.sol +++ b/contracts/protocol/utils/FeesPlugin.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.21; -import {Fees} from "../common/Structs.sol"; +import {Fees} from "../utils/common/Structs.sol"; /// @title FeesPlugin /// @notice Abstract contract for managing fee configurations @@ -11,15 +11,6 @@ abstract contract FeesPlugin { /// @dev Contains fee parameters like rates, limits, and recipient addresses Fees public fees; - /// @notice Updates the fee configuration - /// @param fees_ New fee configuration to be set - /// @dev Internal function to be called by inheriting contracts - /// @dev Should be protected with appropriate access control in implementing contracts - function _setFees(Fees memory fees_) internal { - // Update the fee configuration with new parameters - fees = fees_; - } - /// @notice Retrieves the current fee configuration /// @return Current fee configuration struct /// @dev Public view function accessible to any caller diff --git a/contracts/utils/Gauge.sol b/contracts/protocol/utils/Gauge.sol similarity index 88% rename from contracts/utils/Gauge.sol rename to contracts/protocol/utils/Gauge.sol index 80a2bf6d..0a0d7b59 100644 --- a/contracts/utils/Gauge.sol +++ b/contracts/protocol/utils/Gauge.sol @@ -1,9 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.21; -import {LimitParams} from "../common/Structs.sol"; -import {LimitReached} from "../common/Errors.sol"; +import {LimitParams} from "../utils/common/Structs.sol"; +import {LimitReached} from "../utils/common/Errors.sol"; abstract contract Gauge { + // slot 0-49: gap for future storage variables + uint256[50] _gap_gauge; + function _getCurrentLimit(LimitParams storage params_) internal view returns (uint256 _limit) { uint256 timeElapsed = block.timestamp - params_.lastUpdateTimestamp; uint256 limitIncrease = timeElapsed * params_.ratePerSecond; diff --git a/contracts/libraries/RescueFundsLib.sol b/contracts/protocol/utils/RescueFundsLib.sol similarity index 80% rename from contracts/libraries/RescueFundsLib.sol rename to contracts/protocol/utils/RescueFundsLib.sol index 7a633ae0..a6319036 100644 --- a/contracts/libraries/RescueFundsLib.sol +++ b/contracts/protocol/utils/RescueFundsLib.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.21; import "solmate/utils/SafeTransferLib.sol"; import "solmate/tokens/ERC20.sol"; -import {ZeroAddress} from "../common/Errors.sol"; -import {ETH_ADDRESS} from "../common/Constants.sol"; +import {ZeroAddress, InvalidTokenAddress} from "./common/Errors.sol"; +import {ETH_ADDRESS} from "./common/Constants.sol"; /** * @title RescueFundsLib @@ -12,11 +12,6 @@ import {ETH_ADDRESS} from "../common/Constants.sol"; */ library RescueFundsLib { - /** - * @dev thrown when the given token address don't have any code - */ - error InvalidTokenAddress(); - /** * @dev Rescues funds from a contract. * @param token_ The address of the token contract. diff --git a/contracts/socket/utils/AccessRoles.sol b/contracts/protocol/utils/common/AccessRoles.sol similarity index 100% rename from contracts/socket/utils/AccessRoles.sol rename to contracts/protocol/utils/common/AccessRoles.sol diff --git a/contracts/common/Constants.sol b/contracts/protocol/utils/common/Constants.sol similarity index 100% rename from contracts/common/Constants.sol rename to contracts/protocol/utils/common/Constants.sol diff --git a/contracts/common/Errors.sol b/contracts/protocol/utils/common/Errors.sol similarity index 60% rename from contracts/common/Errors.sol rename to contracts/protocol/utils/common/Errors.sol index 54724da0..9a1fe4ca 100644 --- a/contracts/common/Errors.sol +++ b/contracts/protocol/utils/common/Errors.sol @@ -26,4 +26,16 @@ error InvalidInboxCaller(); error PromisesNotResolved(); error InvalidPromise(); error InvalidIndex(); +error InvalidTransmitter(); error FeesNotSet(); +error InvalidTokenAddress(); +error InvalidWatcherSignature(); +error NonceUsed(); +/// @notice Error thrown when trying to start or bid a closed auction +error AuctionClosed(); +/// @notice Error thrown when trying to start an ongoing auction +error AuctionAlreadyStarted(); +/// @notice Error thrown if fees exceed the maximum set fees +error BidExceedsMaxFees(); +/// @notice Error thrown if a lower bid already exists +error LowerBidAlreadyExists(); diff --git a/contracts/common/Structs.sol b/contracts/protocol/utils/common/Structs.sol similarity index 82% rename from contracts/common/Structs.sol rename to contracts/protocol/utils/common/Structs.sol index f32318b6..3774291b 100644 --- a/contracts/common/Structs.sol +++ b/contracts/protocol/utils/common/Structs.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.21; +//// ENUMS //// + enum CallType { READ, WRITE, @@ -8,6 +10,23 @@ enum CallType { WITHDRAW } +enum IsPlug { + YES, + NO +} + +enum Parallel { + OFF, + ON +} + +enum Read { + OFF, + ON +} + +//// STRUCTS //// + struct AppGatewayConfig { address plug; address appGateway; @@ -16,39 +35,57 @@ struct AppGatewayConfig { } struct AsyncRequest { + address finalizedBy; address appGateway; address transmitter; address target; address switchboard; uint256 executionGasLimit; + uint256 deadline; bytes32 asyncId; - bytes32 root; + bytes32 digest; bytes payload; address[] next; } +struct AttestAndExecutePayloadParams { + bytes32 payloadId; + bytes32 digest; + address switchboard; + address appGateway; + address target; + uint256 executionGasLimit; + uint256 deadline; + bytes proof; + bytes transmitterSignature; + bytes payload; +} + struct Bid { address transmitter; uint256 fee; bytes extraData; } -struct CallFromInboxParams { - bytes32 callId; - bytes32 params; - address plug; - address appGateway; - uint32 chainSlug; - bytes payload; -} - struct CallParams { + IsPlug isPlug; address asyncPromise; address target; uint32 chainSlug; CallType callType; - bool isSequential; + Parallel isParallel; uint256 gasLimit; + uint256 value; + bytes payload; + bytes initCallData; +} + +struct CallFromChainParams { + bytes32 callId; + bytes32 params; + address plug; + address appGateway; + uint32 chainSlug; bytes payload; } @@ -57,18 +94,6 @@ struct DeployParams { bytes bytecode; } -struct ExecutePayloadParams { - bytes32 payloadId; - bytes32 root; - address switchboard; - address appGateway; - address target; - uint256 executionGasLimit; - bytes watcherSignature; - bytes transmitterSignature; - bytes payload; -} - struct Fees { uint32 feePoolChain; address feePoolToken; @@ -97,6 +122,7 @@ struct PayloadBatch { Fees fees; Bid winningBid; address[] lastBatchPromises; + bytes32[] lastBatchOfPayloads; bytes onCompleteData; } @@ -104,20 +130,22 @@ struct PayloadDetails { address appGateway; address target; uint32 chainSlug; - bool isSequential; + Parallel isParallel; CallType callType; + uint256 value; uint256 executionGasLimit; bytes payload; address[] next; } -struct PayloadRootParams { +struct PayloadDigestParams { address appGateway; address transmitter; address target; bytes32 payloadId; + uint256 value; uint256 executionGasLimit; - uint256 expiryTime; + uint256 deadline; bytes payload; } diff --git a/contracts/watcherPrecompile/WatcherPrecompile.sol b/contracts/protocol/watcherPrecompile/WatcherPrecompile.sol similarity index 66% rename from contracts/watcherPrecompile/WatcherPrecompile.sol rename to contracts/protocol/watcherPrecompile/WatcherPrecompile.sol index 263b87c6..d9c55f32 100644 --- a/contracts/watcherPrecompile/WatcherPrecompile.sol +++ b/contracts/protocol/watcherPrecompile/WatcherPrecompile.sol @@ -2,47 +2,22 @@ pragma solidity ^0.8.21; import "./WatcherPrecompileConfig.sol"; -import "../interfaces/IAppGateway.sol"; -import "../interfaces/IPromise.sol"; -import "../interfaces/IFeesManager.sol"; -import "solady/utils/Initializable.sol"; - -import {PayloadRootParams, AsyncRequest, FinalizeParams, TimeoutRequest, CallFromInboxParams} from "../common/Structs.sol"; -import {TimeoutDelayTooLarge, TimeoutAlreadyResolved, InvalidInboxCaller, ResolvingTimeoutTooEarly, CallFailed, AppGatewayAlreadyCalled} from "../common/Errors.sol"; /// @title WatcherPrecompile /// @notice Contract that handles payload verification, execution and app configurations -contract WatcherPrecompile is WatcherPrecompileConfig, Initializable { - uint256 public maxTimeoutDelayInSeconds; - /// @notice Counter for tracking query requests - uint256 public queryCounter; - /// @notice Counter for tracking payload execution requests - uint256 public payloadCounter; - /// @notice Counter for tracking timeout requests - uint256 public timeoutCounter; - /// @notice The expiry time for the payload - uint256 public expiryTime; - - /// @notice Mapping to store async requests - /// @dev payloadId => AsyncRequest struct - mapping(bytes32 => AsyncRequest) public asyncRequests; - /// @notice Mapping to store timeout requests - /// @dev timeoutId => TimeoutRequest struct - mapping(bytes32 => TimeoutRequest) public timeoutRequests; - /// @notice Mapping to store watcher signatures - /// @dev payloadId => signature bytes - mapping(bytes32 => bytes) public watcherSignatures; - - /// @notice Mapping to store if appGateway has been called with trigger from on-chain Inbox - /// @dev callId => bool - mapping(bytes32 => bool) public appGatewayCalled; - +contract WatcherPrecompile is WatcherPrecompileConfig { /// @notice Error thrown when an invalid chain slug is provided error InvalidChainSlug(); /// @notice Error thrown when an invalid app gateway reaches a plug error InvalidConnection(); /// @notice Error thrown if winning bid is assigned to an invalid transmitter error InvalidTransmitter(); + /// @notice Error thrown when a timeout request is invalid + error InvalidTimeoutRequest(); + /// @notice Error thrown when a payload id is invalid + error InvalidPayloadId(); + /// @notice Error thrown when a caller is invalid + error InvalidCaller(); event CalledAppGateway( bytes32 callId, @@ -68,13 +43,17 @@ contract WatcherPrecompile is WatcherPrecompileConfig, Initializable { /// @notice Emitted when a request is finalized /// @param payloadId The unique identifier for the request /// @param asyncRequest The async request details - /// @param watcherSignature The signature from the watcher - event Finalized(bytes32 indexed payloadId, AsyncRequest asyncRequest, bytes watcherSignature); + /// @param proof The proof from the watcher + event Finalized(bytes32 indexed payloadId, AsyncRequest asyncRequest, bytes proof); /// @notice Emitted when a promise is resolved /// @param payloadId The unique identifier for the resolved promise event PromiseResolved(bytes32 indexed payloadId, bool success, address asyncPromise); + /// @notice Emitted when a promise is not resolved + /// @param payloadId The unique identifier for the not resolved promise + event PromiseNotResolved(bytes32 indexed payloadId, bool success, address asyncPromise); + event TimeoutRequested( bytes32 timeoutId, address target, @@ -97,18 +76,21 @@ contract WatcherPrecompile is WatcherPrecompileConfig, Initializable { function initialize( address owner_, address addressResolver_, - uint256 maxLimit_ + uint256 defaultLimit_, + uint256 expiryTime_, + uint32 evmxSlug_ ) public reinitializer(1) { _setAddressResolver(addressResolver_); - _claimOwner(owner_); + _initializeOwner(owner_); maxTimeoutDelayInSeconds = 24 * 60 * 60; // 24 hours - - LIMIT_DECIMALS = 18; + expiryTime = expiryTime_; // limit per day - maxLimit = maxLimit_ * 10 ** LIMIT_DECIMALS; + defaultLimit = defaultLimit_ * 10 ** LIMIT_DECIMALS; // limit per second - ratePerSecond = maxLimit / (24 * 60 * 60); + defaultRatePerSecond = defaultLimit / (24 * 60 * 60); + + evmxSlug = evmxSlug_; } // ================== Timeout functions ================== @@ -126,7 +108,7 @@ contract WatcherPrecompile is WatcherPrecompileConfig, Initializable { // from auction manager _consumeLimit(appGateway_, SCHEDULE, 1); uint256 executeAt = block.timestamp + delayInSeconds_; - bytes32 timeoutId = _encodeTimeoutId(timeoutCounter++); + bytes32 timeoutId = _encodeId(evmxSlug, address(this)); timeoutRequests[timeoutId] = TimeoutRequest( timeoutId, msg.sender, @@ -142,14 +124,28 @@ contract WatcherPrecompile is WatcherPrecompileConfig, Initializable { /// @notice Ends the timeouts and calls the target address with the callback payload /// @param timeoutId_ The unique identifier for the timeout /// @dev Only callable by the contract owner - function resolveTimeout(bytes32 timeoutId_) external onlyOwner { + function resolveTimeout( + bytes32 timeoutId_, + uint256 signatureNonce_, + bytes calldata signature_ + ) external { + _isWatcherSignatureValid( + abi.encode(this.resolveTimeout.selector, timeoutId_), + signatureNonce_, + signature_ + ); + TimeoutRequest storage timeoutRequest_ = timeoutRequests[timeoutId_]; + if (timeoutRequest_.target == address(0)) revert InvalidTimeoutRequest(); if (timeoutRequest_.isResolved) revert TimeoutAlreadyResolved(); if (block.timestamp < timeoutRequest_.executeAt) revert ResolvingTimeoutTooEarly(); + (bool success, ) = address(timeoutRequest_.target).call(timeoutRequest_.payload); if (!success) revert CallFailed(); + timeoutRequest_.isResolved = true; timeoutRequest_.executedAt = block.timestamp; + emit TimeoutResolved( timeoutId_, timeoutRequest_.target, @@ -160,14 +156,35 @@ contract WatcherPrecompile is WatcherPrecompileConfig, Initializable { // ================== Finalize functions ================== - /// @notice Finalizes a payload request, requests the watcher to release the signatures to execute on chain + /// @notice Finalizes a payload request, requests the watcher to release the proofs to execute on chain /// @param params_ The finalization parameters /// @return payloadId The unique identifier for the finalized request - /// @return root The merkle root of the payload parameters + /// @return digest The digest of the payload parameters function finalize( - FinalizeParams memory params_, - address originAppGateway_ - ) external returns (bytes32 payloadId, bytes32 root) { + address originAppGateway_, + FinalizeParams memory params_ + ) external returns (bytes32 payloadId, bytes32 digest) { + // Generate a unique payload ID by combining chain, target, and counter + payloadId = _encodeWritePayloadId( + params_.payloadDetails.chainSlug, + params_.payloadDetails.target + ); + + digest = _finalize(payloadId, originAppGateway_, params_); + } + + function refinalize(bytes32 payloadId_, FinalizeParams memory params_) external { + if (asyncRequests[payloadId_].appGateway == address(0)) revert InvalidPayloadId(); + if (asyncRequests[payloadId_].finalizedBy != msg.sender) revert InvalidCaller(); + + _finalize(payloadId_, asyncRequests[payloadId_].appGateway, params_); + } + + function _finalize( + bytes32 payloadId_, + address originAppGateway_, + FinalizeParams memory params_ + ) internal returns (bytes32 digest) { if (params_.transmitter == address(0)) revert InvalidTransmitter(); // The app gateway is the caller of this function @@ -180,47 +197,43 @@ contract WatcherPrecompile is WatcherPrecompileConfig, Initializable { params_.payloadDetails.appGateway ); - // Generate a unique payload ID by combining chain, target, and counter - payloadId = _encodePayloadId( + // Get the switchboard address from plug configurations + (, address switchboard) = getPlugConfigs( params_.payloadDetails.chainSlug, - params_.payloadDetails.target, - payloadCounter++ + params_.payloadDetails.target ); - // Construct parameters for root calculation - PayloadRootParams memory rootParams_ = PayloadRootParams( + // Construct parameters for digest calculation + PayloadDigestParams memory digestParams_ = PayloadDigestParams( params_.payloadDetails.appGateway, params_.transmitter, params_.payloadDetails.target, - payloadId, + payloadId_, + params_.payloadDetails.value, params_.payloadDetails.executionGasLimit, - expiryTime, + block.timestamp + expiryTime, params_.payloadDetails.payload ); - // Calculate merkle root from payload parameters - root = getRoot(rootParams_); - - // Get the switchboard address from plug configurations - (, address switchboard) = getPlugConfigs( - params_.payloadDetails.chainSlug, - params_.payloadDetails.target - ); + // Calculate digest from payload parameters + digest = getDigest(digestParams_); // Create and store the async request with all necessary details AsyncRequest memory asyncRequest = AsyncRequest( + msg.sender, params_.payloadDetails.appGateway, params_.transmitter, params_.payloadDetails.target, switchboard, params_.payloadDetails.executionGasLimit, + block.timestamp + expiryTime, params_.asyncId, - root, + digest, params_.payloadDetails.payload, params_.payloadDetails.next ); - asyncRequests[payloadId] = asyncRequest; - emit FinalizeRequested(payloadId, asyncRequest); + asyncRequests[payloadId_] = asyncRequest; + emit FinalizeRequested(payloadId_, asyncRequest); } // ================== Query functions ================== @@ -240,16 +253,18 @@ contract WatcherPrecompile is WatcherPrecompileConfig, Initializable { // from payload delivery _consumeLimit(appGateway_, QUERY, 1); // Generate unique payload ID from query counter - payloadId = bytes32(queryCounter++); + payloadId = _encodeId(evmxSlug, address(this)); // Create async request with minimal information for queries // Note: addresses set to 0 as they're not needed for queries AsyncRequest memory asyncRequest_ = AsyncRequest( + msg.sender, address(0), address(0), targetAddress_, address(0), 0, + block.timestamp + expiryTime, bytes32(0), bytes32(0), payload_, @@ -259,19 +274,42 @@ contract WatcherPrecompile is WatcherPrecompileConfig, Initializable { emit QueryRequested(chainSlug_, targetAddress_, payloadId, payload_); } - /// @notice Marks a request as finalized with a signature on root + /// @notice Marks a request as finalized with a proof on digest /// @param payloadId_ The unique identifier of the request - /// @param signature_ The watcher's signature + /// @param proof_ The watcher's proof /// @dev Only callable by the contract owner - function finalized(bytes32 payloadId_, bytes calldata signature_) external onlyOwner { - watcherSignatures[payloadId_] = signature_; - emit Finalized(payloadId_, asyncRequests[payloadId_], signature_); + /// @dev Watcher signs on following digest for validation on switchboard: + /// @dev keccak256(abi.encode(switchboard, digest)) + function finalized( + bytes32 payloadId_, + bytes calldata proof_, + uint256 signatureNonce_, + bytes calldata signature_ + ) external { + _isWatcherSignatureValid( + abi.encode(this.finalized.selector, payloadId_, proof_), + signatureNonce_, + signature_ + ); + + watcherProofs[payloadId_] = proof_; + emit Finalized(payloadId_, asyncRequests[payloadId_], proof_); } /// @notice Resolves multiple promises with their return data /// @param resolvedPromises_ Array of resolved promises and their return data /// @dev Only callable by the contract owner - function resolvePromises(ResolvedPromises[] calldata resolvedPromises_) external onlyOwner { + function resolvePromises( + ResolvedPromises[] calldata resolvedPromises_, + uint256 signatureNonce_, + bytes calldata signature_ + ) external { + _isWatcherSignatureValid( + abi.encode(this.resolvePromises.selector, resolvedPromises_), + signatureNonce_, + signature_ + ); + for (uint256 i = 0; i < resolvedPromises_.length; i++) { // Get the array of promise addresses for this payload AsyncRequest memory asyncRequest_ = asyncRequests[resolvedPromises_[i].payloadId]; @@ -280,20 +318,36 @@ contract WatcherPrecompile is WatcherPrecompileConfig, Initializable { // Resolve each promise with its corresponding return data bool success; for (uint256 j = 0; j < next.length; j++) { + if (next[j] == address(0)) continue; success = IPromise(next[j]).markResolved( asyncRequest_.asyncId, resolvedPromises_[i].payloadId, resolvedPromises_[i].returnData[j] ); - if (!success) continue; - emit PromiseResolved(resolvedPromises_[i].payloadId, success, next[j]); + if (!success) { + emit PromiseNotResolved(resolvedPromises_[i].payloadId, success, next[j]); + break; + } else { + emit PromiseResolved(resolvedPromises_[i].payloadId, success, next[j]); + } } } } // wait till expiry time to assign fees - function markRevert(bytes32 payloadId_, bool isRevertingOnchain_) external onlyOwner { + function markRevert( + bool isRevertingOnchain_, + bytes32 payloadId_, + uint256 signatureNonce_, + bytes calldata signature_ + ) external { + _isWatcherSignatureValid( + abi.encode(this.markRevert.selector, isRevertingOnchain_, payloadId_), + signatureNonce_, + signature_ + ); + AsyncRequest memory asyncRequest_ = asyncRequests[payloadId_]; address[] memory next = asyncRequest_.next; @@ -307,19 +361,23 @@ contract WatcherPrecompile is WatcherPrecompileConfig, Initializable { asyncRequest_.transmitter, asyncRequest_.appGateway ); + + // batch.isBatchCancelled } } - /// @notice Calculates the root hash of payload parameters + /// @notice Calculates the digest hash of payload parameters /// @param params_ The payload parameters - /// @return root The calculated merkle root - function getRoot(PayloadRootParams memory params_) public pure returns (bytes32 root) { - root = keccak256( + /// @return digest The calculated digest + function getDigest(PayloadDigestParams memory params_) public pure returns (bytes32 digest) { + digest = keccak256( abi.encode( params_.payloadId, params_.appGateway, params_.transmitter, params_.target, + params_.value, + params_.deadline, params_.executionGasLimit, params_.payload ) @@ -332,13 +390,23 @@ contract WatcherPrecompile is WatcherPrecompileConfig, Initializable { // ================== On-Chain Inbox ================== - function callAppGateways(CallFromInboxParams[] calldata params_) external onlyOwner { + function callAppGateways( + CallFromChainParams[] calldata params_, + uint256 signatureNonce_, + bytes calldata signature_ + ) external { + _isWatcherSignatureValid( + abi.encode(this.callAppGateways.selector, params_), + signatureNonce_, + signature_ + ); + for (uint256 i = 0; i < params_.length; i++) { if (appGatewayCalled[params_[i].callId]) revert AppGatewayAlreadyCalled(); - if (!isValidInboxCaller[params_[i].appGateway][params_[i].chainSlug][params_[i].plug]) + if (!isValidPlug[params_[i].appGateway][params_[i].chainSlug][params_[i].plug]) revert InvalidInboxCaller(); appGatewayCalled[params_[i].callId] = true; - IAppGateway(params_[i].appGateway).callFromInbox( + IAppGateway(params_[i].appGateway).callFromChain( params_[i].chainSlug, params_[i].plug, params_[i].payload, @@ -374,30 +442,28 @@ contract WatcherPrecompile is WatcherPrecompileConfig, Initializable { /// @notice Encodes a unique payload ID from chain slug, plug address, and counter /// @param chainSlug_ The identifier of the chain /// @param plug_ The plug address - /// @param counter_ The current counter value /// @return The encoded payload ID as bytes32 /// @dev Reverts if chainSlug is 0 - function _encodePayloadId( - uint32 chainSlug_, - address plug_, - uint256 counter_ - ) internal view returns (bytes32) { + function _encodeWritePayloadId(uint32 chainSlug_, address plug_) internal returns (bytes32) { if (chainSlug_ == 0) revert InvalidChainSlug(); (, address switchboard) = getPlugConfigs(chainSlug_, plug_); - // Encode payload ID by bit-shifting and combining: - // chainSlug (32 bits) | switchboard address (160 bits) | counter (64 bits) + return _encodeId(chainSlug_, switchboard); + } + function _encodeId( + uint32 chainSlug_, + address switchboardOrWatcher_ + ) internal returns (bytes32) { + // Encode payload ID by bit-shifting and combining: + // chainSlug (32 bits) | switchboard or watcher precompile address (160 bits) | counter (64 bits) return bytes32( - (uint256(chainSlug_) << 224) | (uint256(uint160(switchboard)) << 64) | counter_ + (uint256(chainSlug_) << 224) | + (uint256(uint160(switchboardOrWatcher_)) << 64) | + payloadCounter++ ); } - function _encodeTimeoutId(uint256 timeoutCounter_) internal view returns (bytes32) { - // watcher address (160 bits) | counter (64 bits) - return bytes32((uint256(uint160(address(this))) << 64) | timeoutCounter_); - } - function setExpiryTime(uint256 expiryTime_) external onlyOwner { expiryTime = expiryTime_; } diff --git a/contracts/watcherPrecompile/WatcherPrecompileConfig.sol b/contracts/protocol/watcherPrecompile/WatcherPrecompileConfig.sol similarity index 53% rename from contracts/watcherPrecompile/WatcherPrecompileConfig.sol rename to contracts/protocol/watcherPrecompile/WatcherPrecompileConfig.sol index 8bc3b90f..ca5e6fac 100644 --- a/contracts/watcherPrecompile/WatcherPrecompileConfig.sol +++ b/contracts/protocol/watcherPrecompile/WatcherPrecompileConfig.sol @@ -2,25 +2,14 @@ pragma solidity ^0.8.21; import "./WatcherPrecompileLimits.sol"; +import {ECDSA} from "solady/utils/ECDSA.sol"; /// @title WatcherPrecompileConfig /// @notice Configuration contract for the Watcher Precompile system /// @dev Handles the mapping between networks, plugs, and app gateways for payload execution abstract contract WatcherPrecompileConfig is WatcherPrecompileLimits { - /// @notice Maps network and plug to their configuration - /// @dev chainSlug => plug => PlugConfig - mapping(uint32 => mapping(address => PlugConfig)) internal _plugConfigs; - - /// @notice Maps app gateway to their associated plugs per network - /// @dev appGateway => chainSlug => plug - mapping(address => mapping(uint32 => address)) public appGatewayPlugs; - - /// @notice Maps chain slug to their associated switchboard - /// @dev chainSlug => sb type => switchboard address - mapping(uint32 => mapping(bytes32 => address)) public switchboards; - - // appGateway => chainSlug => plug => isValid - mapping(address => mapping(uint32 => mapping(address => bool))) public isValidInboxCaller; + // slot 322-371: gap for future storage variables + uint256[50] _gap_watcher_precompile_config; /// @notice Emitted when a new plug is configured for an app gateway /// @param appGateway The address of the app gateway @@ -34,11 +23,37 @@ abstract contract WatcherPrecompileConfig is WatcherPrecompileLimits { /// @param switchboard The address of the switchboard event SwitchboardSet(uint32 chainSlug, bytes32 sbType, address switchboard); + /// @notice Emitted when contracts are set for a network + /// @param chainSlug The identifier of the network + /// @param sbType The type of switchboard + /// @param switchboard The address of the switchboard + /// @param socket The address of the socket + /// @param contractFactoryPlug The address of the contract factory plug + /// @param feesPlug The address of the fees plug + event OnChainContractSet( + uint32 chainSlug, + bytes32 sbType, + address switchboard, + address socket, + address contractFactoryPlug, + address feesPlug + ); + /// @notice Configures app gateways with their respective plugs and switchboards /// @param configs_ Array of configurations containing app gateway, network, plug, and switchboard details /// @dev Only callable by the contract owner /// @dev This helps in verifying that plugs are called by respective app gateways - function setAppGateways(AppGatewayConfig[] calldata configs_) external onlyOwner { + function setAppGateways( + AppGatewayConfig[] calldata configs_, + uint256 signatureNonce_, + bytes calldata signature_ + ) external { + _isWatcherSignatureValid( + abi.encode(this.setAppGateways.selector, configs_), + signatureNonce_, + signature_ + ); + for (uint256 i = 0; i < configs_.length; i++) { // Store the plug configuration for this network and plug _plugConfigs[configs_[i].chainSlug][configs_[i].plug] = PlugConfig({ @@ -46,9 +61,6 @@ abstract contract WatcherPrecompileConfig is WatcherPrecompileLimits { switchboard: configs_[i].switchboard }); - // Create reverse mapping from app gateway to plug for easy lookup - appGatewayPlugs[configs_[i].appGateway][configs_[i].chainSlug] = configs_[i].plug; - emit PlugAdded(configs_[i].appGateway, configs_[i].chainSlug, configs_[i].plug); } } @@ -56,18 +68,32 @@ abstract contract WatcherPrecompileConfig is WatcherPrecompileLimits { /// @notice Sets the switchboard for a network /// @param chainSlug_ The identifier of the network /// @param switchboard_ The address of the switchboard - function setSwitchboard( + function setOnChainContracts( uint32 chainSlug_, bytes32 sbType_, - address switchboard_ - ) external onlyOwner { + address switchboard_, + address socket_, + address contractFactoryPlug_, + address feesPlug_ + ) external override onlyOwner { switchboards[chainSlug_][sbType_] = switchboard_; - emit SwitchboardSet(chainSlug_, sbType_, switchboard_); + sockets[chainSlug_] = socket_; + contractFactoryPlug[chainSlug_] = contractFactoryPlug_; + feesPlug[chainSlug_] = feesPlug_; + + emit OnChainContractSet( + chainSlug_, + sbType_, + switchboard_, + socket_, + contractFactoryPlug_, + feesPlug_ + ); } // @dev app gateway can set the valid plugs for each chain slug - function setIsValidInboxCaller(uint32 chainSlug_, address plug_, bool isValid_) external { - isValidInboxCaller[msg.sender][chainSlug_][plug_] = isValid_; + function setIsValidPlug(uint32 chainSlug_, address plug_, bool isValid_) external { + isValidPlug[msg.sender][chainSlug_][plug_] = isValid_; } /// @notice Retrieves the configuration for a specific plug on a network @@ -85,5 +111,19 @@ abstract contract WatcherPrecompileConfig is WatcherPrecompileLimits { ); } - uint256[49] __gap_config; + function _isWatcherSignatureValid( + bytes memory digest_, + uint256 signatureNonce_, + bytes memory signature_ + ) internal { + if (isNonceUsed[signatureNonce_]) revert NonceUsed(); + isNonceUsed[signatureNonce_] = true; + + bytes32 digest = keccak256(abi.encode(address(this), evmxSlug, signatureNonce_, digest_)); + digest = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", digest)); + + // recovered signer is checked for the valid roles later + address signer = ECDSA.recover(digest, signature_); + if (signer != owner()) revert InvalidWatcherSignature(); + } } diff --git a/contracts/watcherPrecompile/WatcherPrecompileLimits.sol b/contracts/protocol/watcherPrecompile/WatcherPrecompileLimits.sol similarity index 73% rename from contracts/watcherPrecompile/WatcherPrecompileLimits.sol rename to contracts/protocol/watcherPrecompile/WatcherPrecompileLimits.sol index 0dc0cc68..7f62d344 100644 --- a/contracts/watcherPrecompile/WatcherPrecompileLimits.sol +++ b/contracts/protocol/watcherPrecompile/WatcherPrecompileLimits.sol @@ -1,31 +1,28 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.21; +import {AccessControl} from "../utils/AccessControl.sol"; import {Gauge} from "../utils/Gauge.sol"; -import {LimitParams, UpdateLimitParams} from "../common/Structs.sol"; import {AddressResolverUtil} from "../utils/AddressResolverUtil.sol"; -import "../interfaces/IWatcherPrecompile.sol"; -import {OwnableTwoStep} from "../utils/OwnableTwoStep.sol"; -import {QUERY, FINALIZE, SCHEDULE} from "../common/Constants.sol"; +import {WATCHER_ROLE} from "../utils/common/AccessRoles.sol"; +import "./WatcherPrecompileStorage.sol"; +import "solady/utils/Initializable.sol"; abstract contract WatcherPrecompileLimits is + WatcherPrecompileStorage, + Initializable, + AccessControl, Gauge, - AddressResolverUtil, - OwnableTwoStep, - IWatcherPrecompile + AddressResolverUtil { - /// @notice Maximum limit value for any app gateway - uint256 public maxLimit; - /// @notice Rate at which limit replenishes per second - uint256 public ratePerSecond; - /// @notice Number of decimals used in limit calculations - uint256 public LIMIT_DECIMALS; - - // appGateway => limitType => receivingLimitParams - mapping(address => mapping(bytes32 => LimitParams)) internal _limitParams; - - // Mapping to track active app gateways - mapping(address => bool) private _activeAppGateways; + // Slots from parent contracts: + // slot 0-118: watcher precompile storage + // 0 slots for initializable and ownable + // slots 119-169: access control (gap + 1) + // slots 170-219: gauge (gap) + // slots 220-270: address resolver util (gap + 1) + // slots 271-320: gap for future storage variables + uint256[50] _gap_watcher_precompile_limits; //////////////////////////////////////////////////////// ////////////////////// EVENTS ////////////////////////// @@ -77,7 +74,7 @@ abstract contract WatcherPrecompileLimits is * @param limitType_ The type of limit to check * @param consumeLimit_ The amount of limit to consume */ - function checkAndUpdateLimit( + function checkAndConsumeLimit( address appGateway_, bytes32 limitType_, uint256 consumeLimit_ @@ -131,10 +128,10 @@ abstract contract WatcherPrecompileLimits is // Initialize limit if not active if (!_activeAppGateways[appGateway]) { LimitParams memory limitParam = LimitParams({ - maxLimit: maxLimit, - ratePerSecond: ratePerSecond, + maxLimit: defaultLimit, + ratePerSecond: defaultRatePerSecond, lastUpdateTimestamp: block.timestamp, - lastUpdateLimit: maxLimit + lastUpdateLimit: defaultLimit }); _limitParams[appGateway][QUERY] = limitParam; @@ -142,7 +139,7 @@ abstract contract WatcherPrecompileLimits is _limitParams[appGateway][SCHEDULE] = limitParam; _activeAppGateways[appGateway] = true; - emit AppGatewayActivated(appGateway, maxLimit, ratePerSecond); + emit AppGatewayActivated(appGateway, defaultLimit, defaultRatePerSecond); } // Update the limit @@ -151,32 +148,30 @@ abstract contract WatcherPrecompileLimits is /** * @notice Internal function to get the core app gateway address - * @param appGateway_ The input app gateway address + * @param originAppGateway_ The input app gateway address * @return appGateway The resolved core app gateway address */ - function _getAppGateway(address appGateway_) internal view returns (address appGateway) { - address resolverAddress = msg.sender == addressResolver__.deliveryHelper() - ? appGateway_ + function _getAppGateway(address originAppGateway_) internal view returns (address appGateway) { + address originAppGateway = msg.sender == addressResolver__.deliveryHelper() + ? originAppGateway_ : msg.sender; - appGateway = _getCoreAppGateway(resolverAddress); + appGateway = _getCoreAppGateway(originAppGateway); } /** - * @notice Set the maximum limit value - * @param maxLimit_ The new maximum limit value + * @notice Set the default limit value + * @param defaultLimit_ The new default limit value */ - function setMaxLimit(uint256 maxLimit_) external onlyOwner { - maxLimit = maxLimit_; + function setDefaultLimit(uint256 defaultLimit_) external onlyOwner { + defaultLimit = defaultLimit_; } /** * @notice Set the rate at which limit replenishes - * @param ratePerSecond_ The new rate per second + * @param defaultRatePerSecond_ The new rate per second */ - function setRatePerSecond(uint256 ratePerSecond_) external onlyOwner { - ratePerSecond = ratePerSecond_; + function setDefaultRatePerSecond(uint256 defaultRatePerSecond_) external onlyOwner { + defaultRatePerSecond = defaultRatePerSecond_; } - - uint256[49] __gap; } diff --git a/contracts/protocol/watcherPrecompile/WatcherPrecompileStorage.sol b/contracts/protocol/watcherPrecompile/WatcherPrecompileStorage.sol new file mode 100644 index 00000000..e5142824 --- /dev/null +++ b/contracts/protocol/watcherPrecompile/WatcherPrecompileStorage.sol @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IWatcherPrecompile} from "../../interfaces/IWatcherPrecompile.sol"; +import {IAppGateway} from "../../interfaces/IAppGateway.sol"; +import {IFeesManager} from "../../interfaces/IFeesManager.sol"; +import {IPromise} from "../../interfaces/IPromise.sol"; + +import {QUERY, FINALIZE, SCHEDULE} from "../utils/common/Constants.sol"; +import {TimeoutDelayTooLarge, TimeoutAlreadyResolved, InvalidInboxCaller, ResolvingTimeoutTooEarly, CallFailed, AppGatewayAlreadyCalled, InvalidWatcherSignature, NonceUsed} from "../utils/common/Errors.sol"; +import {ResolvedPromises, AppGatewayConfig, LimitParams, UpdateLimitParams, PlugConfig, PayloadDigestParams, AsyncRequest, FinalizeParams, TimeoutRequest, CallFromChainParams} from "../utils/common/Structs.sol"; + +abstract contract WatcherPrecompileStorage is IWatcherPrecompile { + // slot 0-49: gap for future storage variables + uint256[50] _gap_before; + + /// @notice Number of decimals used in limit calculations + uint256 public constant LIMIT_DECIMALS = 18; + + // slot 50: defaultLimit + /// @notice Default limit value for any app gateway + uint256 public defaultLimit; + // slot 51: defaultRatePerSecond + /// @notice Rate at which limit replenishes per second + uint256 public defaultRatePerSecond; + + // slot 52: evmxSlug + /// @notice The chain slug of the watcher precompile + uint32 public evmxSlug; + + // slot 53: _limitParams + // appGateway => limitType => receivingLimitParams + mapping(address => mapping(bytes32 => LimitParams)) internal _limitParams; + + // slot 54: _activeAppGateways + // Mapping to track active app gateways + mapping(address => bool) internal _activeAppGateways; + + // slot 55: _plugConfigs + /// @notice Maps network and plug to their configuration + /// @dev chainSlug => plug => PlugConfig + mapping(uint32 => mapping(address => PlugConfig)) internal _plugConfigs; + + // slot 56: switchboards + /// @notice Maps chain slug to their associated switchboard + /// @dev chainSlug => sb type => switchboard address + mapping(uint32 => mapping(bytes32 => address)) public switchboards; + + // slot 57: sockets + /// @notice Maps chain slug to their associated socket + /// @dev chainSlug => socket address + mapping(uint32 => address) public sockets; + + // slot 58: contractFactoryPlug + /// @notice Maps chain slug to their associated contract factory plug + /// @dev chainSlug => contract factory plug address + mapping(uint32 => address) public contractFactoryPlug; + + // slot 59: feesPlug + /// @notice Maps chain slug to their associated fees plug + /// @dev chainSlug => fees plug address + mapping(uint32 => address) public feesPlug; + + // slot 60: isNonceUsed + /// @notice Maps nonce to whether it has been used + /// @dev signatureNonce => isValid + mapping(uint256 => bool) public isNonceUsed; + + // slot 61: isValidPlug + // appGateway => chainSlug => plug => isValid + mapping(address => mapping(uint32 => mapping(address => bool))) public isValidPlug; + + // slot 62: maxTimeoutDelayInSeconds + uint256 public maxTimeoutDelayInSeconds; + // slot 63: payloadCounter + /// @notice Counter for tracking payload requests + uint256 public payloadCounter; + // slot 64: expiryTime + /// @notice The expiry time for the payload + uint256 public expiryTime; + + // slot 65: asyncRequests + /// @notice Mapping to store async requests + /// @dev payloadId => AsyncRequest struct + mapping(bytes32 => AsyncRequest) public asyncRequests; + // slot 66: timeoutRequests + /// @notice Mapping to store timeout requests + /// @dev timeoutId => TimeoutRequest struct + mapping(bytes32 => TimeoutRequest) public timeoutRequests; + // slot 67: watcherProofs + /// @notice Mapping to store watcher proofs + /// @dev payloadId => proof bytes + mapping(bytes32 => bytes) public watcherProofs; + + // slot 68: appGatewayCalled + /// @notice Mapping to store if appGateway has been called with trigger from on-chain Inbox + /// @dev callId => bool + mapping(bytes32 => bool) public appGatewayCalled; + + // slots 69-118: gap for future storage variables + uint256[50] _gap_after; +} diff --git a/contracts/socket/SocketBase.sol b/contracts/socket/SocketBase.sol deleted file mode 100644 index cbd6b809..00000000 --- a/contracts/socket/SocketBase.sol +++ /dev/null @@ -1,117 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.21; - -import "../interfaces/IHasher.sol"; -import "../interfaces/ISignatureVerifier.sol"; - -import "../libraries/RescueFundsLib.sol"; -import "./SocketConfig.sol"; - -/** - * @title SocketBase - * @notice A contract that is responsible for common storage for src and dest contracts, governance - * setters and inherits SocketConfig - */ -abstract contract SocketBase is SocketConfig { - // Version string for this socket instance - bytes32 public immutable version; - // ChainSlug for this deployed socket instance - uint32 public immutable chainSlug; - - /* - * @notice constructor for creating a new Socket contract instance. - * @param chainSlug_ The unique identifier of the chain this socket is deployed on. - * @param hasher_ The address of the Hasher contract used to pack the payload before executing them. - * @param owner_ The address of the owner who has the initial admin role. - * @param version_ The version string which is hashed and stored in socket. - */ - constructor( - uint32 chainSlug_, - address hasher_, - address signatureVerifier_, - address owner_, - string memory version_ - ) { - hasher__ = IHasher(hasher_); - signatureVerifier__ = ISignatureVerifier(signatureVerifier_); - chainSlug = chainSlug_; - version = keccak256(bytes(version_)); - _claimOwner(owner_); - } - - //////////////////////////////////////////////////////// - //////////// PERIPHERY CONTRACT CONNECTORS //////////// - //////////////////////////////////////////////////////// - - // Hasher contract - IHasher public hasher__; - // Signature Verifier contract - ISignatureVerifier public signatureVerifier__; - - //////////////////////////////////////////////////////// - ////////////////////// ERRORS ////////////////////////// - //////////////////////////////////////////////////////// - - /** - * @dev Error thrown when non-transmitter tries to execute - */ - error InvalidTransmitter(); - - //////////////////////////////////////////////////////// - ////////////////////// EVENTS ////////////////////////// - //////////////////////////////////////////////////////// - /** - * @notice An event that is emitted when the hasher is updated. - * @param hasher The address of the new hasher. - */ - event HasherSet(address hasher); - - /** - * @notice An event that is emitted when a new signatureVerifier contract is set - * @param signatureVerifier address of new signatureVerifier contract - */ - event SignatureVerifierSet(address signatureVerifier); - - ////////////////////////////////////////////////// - //////////// GOV Permissioned setters //////////// - ////////////////////////////////////////////////// - - /** - * @notice updates hasher__ - * @dev Only governance can call this function - * @param hasher_ address of hasher - */ - function setHasher(address hasher_) external onlyRole(GOVERNANCE_ROLE) { - hasher__ = IHasher(hasher_); - emit HasherSet(hasher_); - } - - /** - * @notice updates hasher__ - * @dev Only governance can call this function - * @param signatureVerifier_ address of signatureVerifier - */ - function setSignatureVerifier(address signatureVerifier_) external onlyRole(GOVERNANCE_ROLE) { - signatureVerifier__ = ISignatureVerifier(signatureVerifier_); - emit SignatureVerifierSet(signatureVerifier_); - } - - ////////////////////////////////////////////// - //////////// Rescue role actions //////////// - ///////////////////////////////////////////// - - /** - * @notice Rescues funds from the contract if they are locked by mistake. This contract does not - * theoretically need this function but it is added for safety. - * @param token_ The address of the token contract. - * @param rescueTo_ The address where rescued tokens need to be sent. - * @param amount_ The amount of tokens to be rescued. - */ - function rescueFunds( - address token_, - address rescueTo_, - uint256 amount_ - ) external onlyRole(RESCUE_ROLE) { - RescueFundsLib._rescueFunds(token_, rescueTo_, amount_); - } -} diff --git a/contracts/socket/SocketBatcher.sol b/contracts/socket/SocketBatcher.sol deleted file mode 100644 index 7e21baf9..00000000 --- a/contracts/socket/SocketBatcher.sol +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.21; - -import "../interfaces/ISocket.sol"; -import "../interfaces/ISwitchboard.sol"; -import "../utils/OwnableTwoStep.sol"; -import "../libraries/RescueFundsLib.sol"; -import {ExecutePayloadParams} from "../common/Structs.sol"; - -/** - * @title SocketBatcher - * @notice The SocketBatcher contract is responsible for batching payloads and transmitting them to the destination chain - */ -contract SocketBatcher is OwnableTwoStep { - // socket contract - ISocket public immutable socket__; - - /** - * @notice Initializes the TransmitManager contract - * @param socket_ The address of socket contract - * @param owner_ The owner of the contract with GOVERNANCE_ROLE - */ - constructor(address owner_, ISocket socket_) { - socket__ = socket_; - _claimOwner(owner_); - } - - function attestAndExecute( - ExecutePayloadParams calldata params_ - ) external returns (bytes memory) { - ISwitchboard(params_.switchboard).attest( - params_.payloadId, - params_.root, - params_.watcherSignature - ); - return - socket__.execute( - params_.payloadId, - params_.appGateway, - params_.target, - params_.executionGasLimit, - params_.transmitterSignature, - params_.payload - ); - } - - function rescueFunds(address token_, address to_, uint256 amount_) external onlyOwner { - RescueFundsLib._rescueFunds(token_, to_, amount_); - } -} diff --git a/contracts/socket/switchboard/SwitchboardBase.sol b/contracts/socket/switchboard/SwitchboardBase.sol deleted file mode 100644 index db0160e7..00000000 --- a/contracts/socket/switchboard/SwitchboardBase.sol +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.21; - -import "../../interfaces/ISwitchboard.sol"; -import "../../interfaces/ISignatureVerifier.sol"; -import "../../interfaces/ISocket.sol"; -import "../utils/AccessControl.sol"; - -abstract contract SwitchboardBase is ISwitchboard, AccessControl { - // signature verifier contract - ISignatureVerifier public immutable signatureVerifier__; - - ISocket public immutable socket__; - - // chain slug of deployed chain - uint32 public immutable chainSlug; - - // incrementing nonce for each signer - // watcher => nextNonce - mapping(address => uint256) public nextNonce; - - // destinationChainSlug => initialPacketCount - packets with packetCount after this will be accepted at the switchboard. - // This is to prevent attacks with sending payloads for chain slugs before the switchboard is registered for them. - mapping(uint32 => uint256) public initialPacketCount; - - // Error hit when a signature with unexpected nonce is received - error InvalidNonce(); - - bytes32 constant WATCHER_ROLE = keccak256("WATCHER_ROLE"); - - /** - * @dev Constructor of SwitchboardBase - * @param chainSlug_ Chain slug of deployment chain - * @param signatureVerifier_ signatureVerifier_ contract - */ - constructor( - uint32 chainSlug_, - ISocket socket_, - ISignatureVerifier signatureVerifier_, - address owner_ - ) { - chainSlug = chainSlug_; - socket__ = socket_; - signatureVerifier__ = signatureVerifier_; - _claimOwner(owner_); - } -} diff --git a/contracts/socket/utils/Hasher.sol b/contracts/socket/utils/Hasher.sol deleted file mode 100644 index d6c82bf2..00000000 --- a/contracts/socket/utils/Hasher.sol +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.21; - -import "../../interfaces/IHasher.sol"; -import "../../interfaces/ISocket.sol"; -import "../../libraries/RescueFundsLib.sol"; - -import "./AccessControl.sol"; -import {RESCUE_ROLE} from "./AccessRoles.sol"; - -/** - * @title Hasher - * @notice contract for hasher contract that calculates the packed payload - * @dev This contract is modular component in socket to support different payload packing algorithms in case of blockchains - * not supporting this type of packing. - */ -contract Hasher is IHasher, AccessControl { - /** - * @notice initializes and grants RESCUE_ROLE to owner. - * @param owner_ The address of the owner of the contract. - */ - constructor(address owner_) { - _claimOwner(owner_); - _grantRole(RESCUE_ROLE, owner_); - } - - /// @inheritdoc IHasher - function packPayload( - bytes32 payloadId_, - address appGateway_, - address transmitter_, - address target_, - uint256 executionGasLimit_, - bytes memory payload_ - ) external pure override returns (bytes32) { - return - keccak256( - abi.encode( - payloadId_, - appGateway_, - transmitter_, - target_, - executionGasLimit_, - payload_ - ) - ); - } - - /** - * @notice Rescues funds from the contract if they are locked by mistake. - * @param token_ The address of the token contract. - * @param rescueTo_ The address where rescued tokens need to be sent. - * @param amount_ The amount of tokens to be rescued. - */ - function rescueFunds( - address token_, - address rescueTo_, - uint256 amount_ - ) external onlyRole(RESCUE_ROLE) { - RescueFundsLib._rescueFunds(token_, rescueTo_, amount_); - } -} diff --git a/contracts/socket/utils/SignatureVerifier.sol b/contracts/socket/utils/SignatureVerifier.sol deleted file mode 100644 index 1ed682c0..00000000 --- a/contracts/socket/utils/SignatureVerifier.sol +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.21; - -import "../../libraries/ECDSA.sol"; -import "../../interfaces/ISignatureVerifier.sol"; -import "../../libraries/RescueFundsLib.sol"; -import "../utils/AccessControl.sol"; -import {RESCUE_ROLE} from "../utils/AccessRoles.sol"; -import "solady/utils/Initializable.sol"; - -/** - * @title Signature Verifier - * @notice Verifies the signatures and returns the address of signer recovered from the input signature or digest. - * @dev This contract is modular component in socket to support different signing algorithms. - */ -contract SignatureVerifier is ISignatureVerifier, AccessControl, Initializable { - /* - * @dev Error thrown when signature length is invalid - */ - error InvalidSigLength(); - - /** - * @notice initializes and grants RESCUE_ROLE to owner. - * @param owner_ The address of the owner of the contract. - */ - function initialize(address owner_) public reinitializer(1) { - _claimOwner(owner_); - _grantRole(RESCUE_ROLE, owner_); - } - - /** - * @notice returns the address of signer recovered from input signature and digest - * @param digest_ The payload digest to be signed - * @param signature_ The signature to be verified - * @return signer The address of the signer - */ - function recoverSigner( - bytes32 digest_, - bytes memory signature_ - ) public pure override returns (address signer) { - bytes32 digest = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", digest_)); - // recovered signer is checked for the valid roles later - signer = ECDSA._recover(digest, signature_); - } - - /** - * @notice Rescues funds from the contract if they are locked by mistake. - * @param token_ The address of the token contract. - * @param rescueTo_ The address where rescued tokens need to be sent. - * @param amount_ The amount of tokens to be rescued. - */ - function rescueFunds( - address token_, - address rescueTo_, - uint256 amount_ - ) external onlyRole(RESCUE_ROLE) { - RescueFundsLib._rescueFunds(token_, rescueTo_, amount_); - } -} diff --git a/contracts/utils/OwnableTwoStep.sol b/contracts/utils/OwnableTwoStep.sol deleted file mode 100644 index 78e9eb95..00000000 --- a/contracts/utils/OwnableTwoStep.sol +++ /dev/null @@ -1,73 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.21; - -/** - * @title OwnableTwoStep - * @dev The OwnableTwoStep contract provides a simple way to manage ownership of a contract - * and allows for ownership to be transferred to a nominated address. - */ -abstract contract OwnableTwoStep { - address private _owner; - address private _nominee; - - error OnlyOwner(); - error OnlyNominee(); - - event OwnerNominated(address indexed nominee); - event OwnerClaimed(address indexed claimer); - - /** - * @dev Modifier that restricts access to only the contract's owner. - * Throws an error if the caller is not the owner. - */ - modifier onlyOwner() { - if (msg.sender != _owner) revert OnlyOwner(); - _; - } - - /** - * @dev Returns the current owner of the contract. - */ - function owner() external view returns (address) { - return _owner; - } - - /** - * @dev Returns the current nominee for ownership of the contract. - */ - function nominee() external view returns (address) { - return _nominee; - } - - /** - * @dev Allows the current owner to nominate a new owner for the contract. - * Throws an error if the caller is not the owner. - * Emits an `OwnerNominated` event with the address of the nominee. - */ - function nominateOwner(address nominee_) external { - if (msg.sender != _owner) revert OnlyOwner(); - _nominee = nominee_; - emit OwnerNominated(_nominee); - } - - /** - * @dev Allows the nominated owner to claim ownership of the contract. - * Throws an error if the caller is not the nominee. - * Sets the nominated owner as the new owner of the contract. - * Emits an `OwnerClaimed` event with the address of the new owner. - */ - function claimOwner() external { - if (msg.sender != _nominee) revert OnlyNominee(); - _claimOwner(msg.sender); - } - - /** - * @dev Internal function that sets the owner of the contract to the specified address - * and sets the nominee to address(0). - */ - function _claimOwner(address claimer_) internal { - _owner = claimer_; - _nominee = address(0); - emit OwnerClaimed(claimer_); - } -} diff --git a/deployments/dev_addresses.json b/deployments/dev_addresses.json index e9b64f59..242369d1 100644 --- a/deployments/dev_addresses.json +++ b/deployments/dev_addresses.json @@ -1,38 +1,32 @@ { "421614": { - "SignatureVerifier": "0x5e5CF700c97BC8B3F6215D98E65f85D4A44d7D06", - "Hasher": "0x6A8e801B3299FeB96D0607A01a62Db8A9239Bdc0", - "Socket": "0xa09217Cfc47F399C382E982778f6128685e13aD4", - "SocketBatcher": "0x80568677f2B092bd974657FE47Fc8531bfE5DBDC", - "FastSwitchboard": "0x5aA84ffE5eCCB5263d1AE6aEd5682EAb39Bc7036", - "FeesPlug": "0x63d3F60Db6a7Eb2fa730F850dA247C73aD162656", - "ContractFactoryPlug": "0x87cC19AedD434ebD3B74FfdC073CAeC7dC1E92EA", - "startBlock": 123791225 + "ContractFactoryPlug": "0xCE9aF7Fb0Ee31276Ea64Cd7414d54eC57dA9b675", + "FastSwitchboard": "0x772088727d003f5A6Cf816E745ba6B8F8dEBbCe9", + "FeesPlug": "0xcc38176545fa5f6c2aB970F6d2D62b2D90bBA3Ba", + "Socket": "0xdE177c392Ad47377BA944215A944f530F79E1d87", + "SocketBatcher": "0x6BF08F11bDA6CD571Bc942F23ec38b8652FFfB2D", + "startBlock": 127798344 }, "7625382": { - "SignatureVerifierImpl": "0xCd44A8068117d888fb44Eb4fDe49bc9B7085189E", - "AddressResolverImpl": "0xBCF275473fdECEf5AFe22D1c771Cb79317be58dB", - "ERC1967Factory": "0xaAF245274e877795B01671602a753AafAc459297", - "SignatureVerifier": "0x2eF8A7768c42342927B9e41E468CC2984835DC58", - "AddressResolver": "0xF2bb0cA7Eab6a2c4ed64793959Ac4401159D5D13", - "WatcherPrecompileImpl": "0x345c85aCc495E6FeDCf52987BDc0636A12F8AEd7", - "WatcherPrecompile": "0x376AdA81749a64e9C2439025f475D1a7E004fcC1", - "FeesManagerImpl": "0x3Ee25f844976888B29A921443b34374d9eCC466d", - "FeesManager": "0x4D29076a0590909F3Bda7f85466cd8Ee291A1247", - "DeliveryHelperImpl": "0xAEE7D460fD1d8c4be069443a65187BC50A0BA89A", - "DeliveryHelper": "0xc0560207cBDBc5301E8343C51f8A7da339596969", - "AuctionManagerImpl": "0x6B94BfF71631f21166946e80967774F3f45e9A0b", - "AuctionManager": "0xE5A00A99C5C8E40d1C6Ec817bc808d71b1d4369b", - "startBlock": 5424 + "AddressResolver": "0x403eCBcC4d4bB8Fad09034bf0d197dDC626C832f", + "AddressResolverImpl": "0xbAeF84edEae864Ff22Bd9c9912AdfF84aD490d82", + "AuctionManager": "0x7dc45C49650e2914e3fA6E194e2080775c58256E", + "AuctionManagerImpl": "0xa07e38cAB46eAA358C3653C63219f1009e8F7789", + "DeliveryHelper": "0x0861f0888125e5A243C7af2c3E0F80C357c4c0C0", + "DeliveryHelperImpl": "0x9F10A0c71178dbD4d049f2C04fD0e34966134b9e", + "ERC1967Factory": "0x945e9ab4c08c225C10F178a0bd600BcC2bA7Cc78", + "FeesManager": "0x777fAAf1c30Ce8E68262b1cbF0a752d4f1bA652C", + "FeesManagerImpl": "0xB423eE3bffc3604F96B59cF419C48AE05b8E9d0b", + "startBlock": 73062, + "WatcherPrecompile": "0xadA397123A6E80F67b1887895A62B2D9273E50b4", + "WatcherPrecompileImpl": "0x71956F006Ec5434581D3Fd5E7224BB3bae231907" }, "11155420": { - "SignatureVerifier": "0x36AC527afA283c95EA7dD11c8E93225d9F139028", - "Hasher": "0xd36C1Dcb65CB09b7fCFABf153D7cdd42312C782E", - "Socket": "0xB0e1D8536ed769860f344Cf795f2B4fAaa41F0C8", - "SocketBatcher": "0x5fef21aD7Dc13CB1b7Cb9EAD404e3EA38d153348", - "FastSwitchboard": "0x688cf2744cd66F00E34f8BbAd15C8fb2438D62be", - "FeesPlug": "0xc13eb89675c12efF5faf5bE9B4773F9ed9192107", - "ContractFactoryPlug": "0x0E0F673C9b34d08b99407F1947A10Fe73aa17928", - "startBlock": 23870487 + "ContractFactoryPlug": "0x289A0413420f812a7b05F931FB0726168121ae5a", + "FastSwitchboard": "0x59D9c8C5515cF9C8A9c83458E3D78C2a246E3e7C", + "FeesPlug": "0x285d1b2e93c1c74E141dC37f759B8aFAcD479b2b", + "Socket": "0xa347A8475d4d218b22e8b0cc90FF76B3e6c8043c", + "SocketBatcher": "0x4a7Ccf2845222172A8B7Fc6E132eDb64cCB4E4a4", + "startBlock": 24425961 } } diff --git a/deployments/dev_verification.json b/deployments/dev_verification.json index ac69d1ce..4c11da30 100644 --- a/deployments/dev_verification.json +++ b/deployments/dev_verification.json @@ -1,196 +1,228 @@ { - "421614": [ + "84532": [ [ - "0x87cC19AedD434ebD3B74FfdC073CAeC7dC1E92EA", + "0xA557EBE094F939ae6eE8F18c8F88D06182168786", "ContractFactoryPlug", - "contracts/apps/payload-delivery/ContractFactoryPlug.sol", + "contracts/protocol/payload-delivery/ContractFactoryPlug.sol", [ - "0xa09217Cfc47F399C382E982778f6128685e13aD4", + "0x6c40Fb39B03e32EC4D23e31DdE6D10283F2C7b4F", "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18" ] ], [ - "0x63d3F60Db6a7Eb2fa730F850dA247C73aD162656", + "0xD78f99D62BeaF0918bB0601C68EB537b6703Ce63", "FeesPlug", - "contracts/apps/payload-delivery/FeesPlug.sol", + "contracts/protocol/payload-delivery/FeesPlug.sol", [ - "0xa09217Cfc47F399C382E982778f6128685e13aD4", + "0x6c40Fb39B03e32EC4D23e31DdE6D10283F2C7b4F", "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18" ] ], [ - "0x5aA84ffE5eCCB5263d1AE6aEd5682EAb39Bc7036", + "0x06234dB2D69Ac158793a3ce59c3764422028E964", "FastSwitchboard", - "contracts/socket/switchboard/FastSwitchboard.sol", + "contracts/protocol/socket/switchboard/FastSwitchboard.sol", [ - 421614, - "0xa09217Cfc47F399C382E982778f6128685e13aD4", - "0x5e5CF700c97BC8B3F6215D98E65f85D4A44d7D06", + 84532, + "0x6c40Fb39B03e32EC4D23e31DdE6D10283F2C7b4F", "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18" ] ], [ - "0x80568677f2B092bd974657FE47Fc8531bfE5DBDC", + "0xA944BBe5D4F67a242C9e92d539fF2d55616283a7", "SocketBatcher", - "contracts/socket/SocketBatcher.sol", + "contracts/protocol/socket/SocketBatcher.sol", [ "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18", - "0xa09217Cfc47F399C382E982778f6128685e13aD4" + "0x6c40Fb39B03e32EC4D23e31DdE6D10283F2C7b4F" ] ], [ - "0xa09217Cfc47F399C382E982778f6128685e13aD4", + "0x6c40Fb39B03e32EC4D23e31DdE6D10283F2C7b4F", "Socket", - "contracts/socket/Socket.sol", + "contracts/protocol/socket/Socket.sol", + [84532, "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18", "EVMX"] + ] + ], + "421614": [ + [ + "0x29E632aE79107A82C637016CA21030d922De5375", + "FastSwitchboard", + "contracts/protocol/socket/switchboard/FastSwitchboard.sol", [ 421614, - "0x6A8e801B3299FeB96D0607A01a62Db8A9239Bdc0", - "0x5e5CF700c97BC8B3F6215D98E65f85D4A44d7D06", - "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18", - "OFF_CHAIN_VM" + "0xa0E1738a9Fc0698789866e09d7A335d30128C5C5", + "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18" ] + ] + ], + "7625382": [ + [ + "0xa07e38cAB46eAA358C3653C63219f1009e8F7789", + "AuctionManager", + "contracts/protocol/payload-delivery/AuctionManager.sol", + [] ], [ - "0x6A8e801B3299FeB96D0607A01a62Db8A9239Bdc0", - "Hasher", - "contracts/socket/utils/Hasher.sol", - [ - "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18" - ] + "0x9F10A0c71178dbD4d049f2C04fD0e34966134b9e", + "DeliveryHelper", + "contracts/protocol/payload-delivery/app-gateway/DeliveryHelper.sol", + [] ], [ - "0x5e5CF700c97BC8B3F6215D98E65f85D4A44d7D06", - "SignatureVerifier", - "contracts/socket/utils/SignatureVerifier.sol", + "0xB423eE3bffc3604F96B59cF419C48AE05b8E9d0b", + "FeesManager", + "contracts/protocol/payload-delivery/FeesManager.sol", [] ], [ - "0xBB4Bca54f566fc04b7A7489fF00265a1cE38b929", - "SignatureVerifier", - "contracts/socket/utils/SignatureVerifier.sol", + "0x71956F006Ec5434581D3Fd5E7224BB3bae231907", + "WatcherPrecompile", + "contracts/protocol/watcherPrecompile/WatcherPrecompile.sol", [] - ] - ], - "7625382": [ + ], + [ + "0xbAeF84edEae864Ff22Bd9c9912AdfF84aD490d82", + "AddressResolver", + "contracts/protocol/AddressResolver.sol", + [] + ], + [ + "0x945e9ab4c08c225C10F178a0bd600BcC2bA7Cc78", + "ERC1967Factory", + "lib/solady/src/utils/ERC1967Factory.sol", + [] + ], + [ + "0x09B503e744DCB2cA2827ce5AF08Fd49Ba06D17e4", + "WatcherPrecompile", + "contracts/protocol/watcherPrecompile/WatcherPrecompile.sol", + [] + ], + [ + "0x6c73961Bfaa2c9c1d0D7F4C213aa85af15b7CB54", + "WatcherPrecompile", + "contracts/protocol/watcherPrecompile/WatcherPrecompile.sol", + [] + ], + [ + "0xd151bD217704F72f717C2111207e6Bb33B609f61", + "WatcherPrecompile", + "contracts/protocol/watcherPrecompile/WatcherPrecompile.sol", + [] + ], + [ + "0x8dcEE196AFECe27545687426914d2830ff2dbc35", + "FeesManager", + "contracts/protocol/payload-delivery/app-gateway/FeesManager.sol", + [] + ], [ - "0x6B94BfF71631f21166946e80967774F3f45e9A0b", + "0xb1F4CbFCE786aA8B553796Fb06c04Dd461967A16", + "WatcherPrecompile", + "contracts/protocol/watcherPrecompile/WatcherPrecompile.sol", + [] + ], + [ + "0x23EF7Af3bC1009EA6f95c3389921d5cB19950182", "AuctionManager", - "contracts/apps/payload-delivery/app-gateway/AuctionManager.sol", + "contracts/protocol/payload-delivery/app-gateway/AuctionManager.sol", [] ], [ - "0xAEE7D460fD1d8c4be069443a65187BC50A0BA89A", + "0x4CCF8F511A364827E5e6749b196BB26Ea00bF512", "DeliveryHelper", - "contracts/apps/payload-delivery/app-gateway/DeliveryHelper.sol", + "contracts/protocol/payload-delivery/app-gateway/DeliveryHelper.sol", [] ], [ - "0x3Ee25f844976888B29A921443b34374d9eCC466d", + "0x39f9b492695375F703450c5653c9D80CFa38e6eD", "FeesManager", - "contracts/apps/payload-delivery/app-gateway/FeesManager.sol", + "contracts/protocol/payload-delivery/app-gateway/FeesManager.sol", [] ], [ - "0x345c85aCc495E6FeDCf52987BDc0636A12F8AEd7", + "0x234cA13f5dC4a2467c81E515F57238BF9f53156E", "WatcherPrecompile", - "contracts/watcherPrecompile/WatcherPrecompile.sol", + "contracts/protocol/watcherPrecompile/WatcherPrecompile.sol", [] ], [ - "0xaAF245274e877795B01671602a753AafAc459297", - "ERC1967Factory", - "lib/solady/src/utils/ERC1967Factory.sol", + "0xbBfb525ADc6eC38Ef0D4b807d327c2Dd1C286de1", + "AddressResolver", + "contracts/protocol/AddressResolver.sol", [] ], [ - "0x8AAE7259Fd08cb555076A384bc228c8B20BcC4a7", + "0x208dC31cd6042a09bbFDdB31614A337a51b870ba", "ERC1967Factory", "lib/solady/src/utils/ERC1967Factory.sol", [] ], [ - "0xBCF275473fdECEf5AFe22D1c771Cb79317be58dB", - "AddressResolver", - "contracts/AddressResolver.sol", + "0x4C68058509d754Cc0dE474eBC20aE94e4787E704", + "AuctionManager", + "contracts/protocol/payload-delivery/app-gateway/AuctionManager.sol", [] ], [ - "0xCd44A8068117d888fb44Eb4fDe49bc9B7085189E", - "SignatureVerifier", - "contracts/socket/utils/SignatureVerifier.sol", + "0x3c9f5172feb0dDfC06176cE67B566EFbb01CCe98", + "DeliveryHelper", + "contracts/protocol/payload-delivery/app-gateway/DeliveryHelper.sol", [] ], [ - "0xa93B1119677f02445DAb5034841FC6C937340900", + "0xF4D3BDe438416938217d4624c82AEbEb46CeD371", + "FeesManager", + "contracts/protocol/payload-delivery/app-gateway/FeesManager.sol", + [] + ], + [ + "0x8F18fC10a8b40b548C6F04Fb252481c783A9ace0", + "WatcherPrecompile", + "contracts/protocol/watcherPrecompile/WatcherPrecompile.sol", + [] + ], + [ + "0x8662FC08dEC7c61Dd3432fAF45a5bC024BB60B00", + "AddressResolver", + "contracts/protocol/AddressResolver.sol", + [] + ], + [ + "0x234cA13f5dC4a2467c81E515F57238BF9f53156E", "ERC1967Factory", "lib/solady/src/utils/ERC1967Factory.sol", [] ] ], + "11155111": [], "11155420": [ [ - "0x0E0F673C9b34d08b99407F1947A10Fe73aa17928", - "ContractFactoryPlug", - "contracts/apps/payload-delivery/ContractFactoryPlug.sol", - [ - "0xB0e1D8536ed769860f344Cf795f2B4fAaa41F0C8", - "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18" - ] - ], - [ - "0xc13eb89675c12efF5faf5bE9B4773F9ed9192107", - "FeesPlug", - "contracts/apps/payload-delivery/FeesPlug.sol", - [ - "0xB0e1D8536ed769860f344Cf795f2B4fAaa41F0C8", - "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18" - ] - ], - [ - "0x688cf2744cd66F00E34f8BbAd15C8fb2438D62be", + "0x245C0DCF8eF6e52b4d03c96b563C83a5f78A1E14", "FastSwitchboard", - "contracts/socket/switchboard/FastSwitchboard.sol", + "contracts/protocol/socket/switchboard/FastSwitchboard.sol", [ 11155420, - "0xB0e1D8536ed769860f344Cf795f2B4fAaa41F0C8", - "0x36AC527afA283c95EA7dD11c8E93225d9F139028", + "0x79Ac996De9333956f4980397ED5Bd91f77f10b01", "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18" ] ], [ - "0x5fef21aD7Dc13CB1b7Cb9EAD404e3EA38d153348", - "SocketBatcher", - "contracts/socket/SocketBatcher.sol", - [ - "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18", - "0xB0e1D8536ed769860f344Cf795f2B4fAaa41F0C8" - ] - ], - [ - "0xB0e1D8536ed769860f344Cf795f2B4fAaa41F0C8", - "Socket", - "contracts/socket/Socket.sol", + "0xBf9Ec2b0441eeEA9bEb89C6638921c37c15A13E4", + "FastSwitchboard", + "contracts/protocol/socket/switchboard/FastSwitchboard.sol", [ 11155420, - "0xd36C1Dcb65CB09b7fCFABf153D7cdd42312C782E", - "0x36AC527afA283c95EA7dD11c8E93225d9F139028", - "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18", - "OFF_CHAIN_VM" - ] - ], - [ - "0xd36C1Dcb65CB09b7fCFABf153D7cdd42312C782E", - "Hasher", - "contracts/socket/utils/Hasher.sol", - [ + "0x79Ac996De9333956f4980397ED5Bd91f77f10b01", "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18" ] ], [ - "0x36AC527afA283c95EA7dD11c8E93225d9F139028", - "SignatureVerifier", - "contracts/socket/utils/SignatureVerifier.sol", - [] + "0x79Ac996De9333956f4980397ED5Bd91f77f10b01", + "Socket", + "contracts/protocol/socket/Socket.sol", + [11155420, "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18", "EVMX"] ] ] } diff --git a/deployments/stage_addresses.json b/deployments/stage_addresses.json new file mode 100644 index 00000000..103ae35c --- /dev/null +++ b/deployments/stage_addresses.json @@ -0,0 +1,48 @@ +{ + "43": { + "AddressResolver": "0xf3046B22F98C25305E8040286fB1b33378BA10a1", + "AddressResolverImpl": "0x208dC31cd6042a09bbFDdB31614A337a51b870ba", + "AuctionManager": "0x5d6d4DCb0F719F01441377F633F3EdD186e19360", + "AuctionManagerImpl": "0xF4D3BDe438416938217d4624c82AEbEb46CeD371", + "DeliveryHelper": "0x39bC71cC9AfeeA50B0638532e45b0462A5e62111", + "DeliveryHelperImpl": "0x8F18fC10a8b40b548C6F04Fb252481c783A9ace0", + "ERC1967Factory": "0x47116C0E101C4c1b5f21f0A57A86c0aa3F14D994", + "FeesManager": "0x603723100172D30171B7Fd9870ba80F8baf6FaD4", + "FeesManagerImpl": "0x8662FC08dEC7c61Dd3432fAF45a5bC024BB60B00", + "startBlock": 157, + "WatcherPrecompile": "0x4b5BcB38014cBdf852Ae6429871E0b1Ac0a05Df8", + "WatcherPrecompileImpl": "0x3cf47Ad0F040dFF1208E649C8f8e23e6B5A08916" + }, + "84532": { + "ContractFactoryPlug": "0x693bcDb114a57302Cd687b8Af1bD7583ee56748C", + "FastSwitchboard": "0xf0f51Ba62284A98AbB5D447487d5E6B536DB9B72", + "FeesPlug": "0xe3332D21b49d9347913cca2316FcC1b34fa16914", + "Socket": "0x6D54668ba18B425a1DbFC0BD720145c0aeE97f65", + "SocketBatcher": "0xC559BABEbcD92278E91a545308190E4761efc347", + "startBlock": 22449147 + }, + "421614": { + "ContractFactoryPlug": "0x78E3A5d21d0dB60bf0A585Cc2105043F919A404b", + "FastSwitchboard": "0x1448E643AbA68a0F1E4C5a3996bA2a355ce3EA8B", + "FeesPlug": "0x89324F93d852cB4fcDC4Ee202456be466ce096bb", + "Socket": "0xaFBD45A4D8378Bd2893F46d2f42e912F653B8777", + "SocketBatcher": "0x5966fc2e475Ddd0a098c3eCF1A3A1EF5036eCF7e", + "startBlock": 127843398 + }, + "11155111": { + "ContractFactoryPlug": "0xfaf8a3f8f4221398F3eC765836e8BF4A3d975962", + "FastSwitchboard": "0x0d7994B4aAc7cbdFAFEAED0B9B51E7de0586ec6f", + "FeesPlug": "0x7E33B305e12aD0E73B3aedBE67A53B7818732d7d", + "Socket": "0xe3332D21b49d9347913cca2316FcC1b34fa16914", + "SocketBatcher": "0x693bcDb114a57302Cd687b8Af1bD7583ee56748C", + "startBlock": 7797136 + }, + "11155420": { + "ContractFactoryPlug": "0xaD2b8b14DaF98555A0BFC43e70E3AFD6C0743701", + "FastSwitchboard": "0x19618cB6C20b2512dFC5E207301Af0514B9533FD", + "FeesPlug": "0x09FfC007E730fbfEA6e09dC19396CddB7d329FC1", + "Socket": "0x89366513CA2eAc43B9E7a825D69BE8Fee495Ece5", + "SocketBatcher": "0xC8db322fD39D5c6F30Ca925C32a7986c4eA0c421", + "startBlock": 24431972 + } +} diff --git a/deployments/stage_verification.json b/deployments/stage_verification.json new file mode 100644 index 00000000..030eaa6b --- /dev/null +++ b/deployments/stage_verification.json @@ -0,0 +1,166 @@ +{ + "43": [ + [ + "0xF4D3BDe438416938217d4624c82AEbEb46CeD371", + "AuctionManager", + "contracts/protocol/payload-delivery/AuctionManager.sol", + [] + ], + [ + "0x8F18fC10a8b40b548C6F04Fb252481c783A9ace0", + "DeliveryHelper", + "contracts/protocol/payload-delivery/app-gateway/DeliveryHelper.sol", + [] + ], + [ + "0x8662FC08dEC7c61Dd3432fAF45a5bC024BB60B00", + "FeesManager", + "contracts/protocol/payload-delivery/FeesManager.sol", + [] + ], + [ + "0x3cf47Ad0F040dFF1208E649C8f8e23e6B5A08916", + "WatcherPrecompile", + "contracts/protocol/watcherPrecompile/WatcherPrecompile.sol", + [] + ], + [ + "0x208dC31cd6042a09bbFDdB31614A337a51b870ba", + "AddressResolver", + "contracts/protocol/AddressResolver.sol", + [] + ], + [ + "0x47116C0E101C4c1b5f21f0A57A86c0aa3F14D994", + "ERC1967Factory", + "lib/solady/src/utils/ERC1967Factory.sol", + [] + ], + [ + "0x12103e799d8887034d4560A960C2410ceE751004", + "AuctionManager", + "contracts/protocol/payload-delivery/AuctionManager.sol", + [] + ], + [ + "0xB08306a7D8733CB027dD679AdbfdF64cD52670eb", + "DeliveryHelper", + "contracts/protocol/payload-delivery/app-gateway/DeliveryHelper.sol", + [] + ], + [ + "0xE3A4c7Fb21196425C635B2b12e90F010BCD12Fec", + "FeesManager", + "contracts/protocol/payload-delivery/FeesManager.sol", + [] + ], + [ + "0x279284d399cFB4cF91f2ebe461f43C6DF020148f", + "WatcherPrecompile", + "contracts/protocol/watcherPrecompile/WatcherPrecompile.sol", + [] + ], + [ + "0x82c52D85543029C618B1F0E2fA5f194D2c4DfA2A", + "AddressResolver", + "contracts/protocol/AddressResolver.sol", + [] + ], + [ + "0xC3a6C7Ae16831b86C084CeC8192A14b6c3b53649", + "ERC1967Factory", + "lib/solady/src/utils/ERC1967Factory.sol", + [] + ] + ], + "84532": [ + [ + "0x693bcDb114a57302Cd687b8Af1bD7583ee56748C", + "ContractFactoryPlug", + "contracts/protocol/payload-delivery/ContractFactoryPlug.sol", + [ + "0x6D54668ba18B425a1DbFC0BD720145c0aeE97f65", + "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18" + ] + ], + [ + "0xe3332D21b49d9347913cca2316FcC1b34fa16914", + "FeesPlug", + "contracts/protocol/payload-delivery/FeesPlug.sol", + [ + "0x6D54668ba18B425a1DbFC0BD720145c0aeE97f65", + "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18" + ] + ], + [ + "0xf0f51Ba62284A98AbB5D447487d5E6B536DB9B72", + "FastSwitchboard", + "contracts/protocol/socket/switchboard/FastSwitchboard.sol", + [ + 84532, + "0x6D54668ba18B425a1DbFC0BD720145c0aeE97f65", + "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18" + ] + ], + [ + "0xC559BABEbcD92278E91a545308190E4761efc347", + "SocketBatcher", + "contracts/protocol/socket/SocketBatcher.sol", + [ + "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18", + "0x6D54668ba18B425a1DbFC0BD720145c0aeE97f65" + ] + ], + [ + "0x6D54668ba18B425a1DbFC0BD720145c0aeE97f65", + "Socket", + "contracts/protocol/socket/Socket.sol", + [ + 84532, + "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18", + "EVMX" + ] + ] + ], + "421614": [], + "7625382": [ + [ + "0xF4D3BDe438416938217d4624c82AEbEb46CeD371", + "AuctionManager", + "contracts/protocol/payload-delivery/AuctionManager.sol", + [] + ], + [ + "0x8F18fC10a8b40b548C6F04Fb252481c783A9ace0", + "DeliveryHelper", + "contracts/protocol/payload-delivery/app-gateway/DeliveryHelper.sol", + [] + ], + [ + "0x8662FC08dEC7c61Dd3432fAF45a5bC024BB60B00", + "FeesManager", + "contracts/protocol/payload-delivery/FeesManager.sol", + [] + ], + [ + "0x3cf47Ad0F040dFF1208E649C8f8e23e6B5A08916", + "WatcherPrecompile", + "contracts/protocol/watcherPrecompile/WatcherPrecompile.sol", + [] + ], + [ + "0x208dC31cd6042a09bbFDdB31614A337a51b870ba", + "AddressResolver", + "contracts/protocol/AddressResolver.sol", + [] + ], + [ + "0x47116C0E101C4c1b5f21f0A57A86c0aa3F14D994", + "ERC1967Factory", + "lib/solady/src/utils/ERC1967Factory.sol", + [] + ] + ], + "11155111": [], + "11155420": [] +} diff --git a/foundry.toml b/foundry.toml index 3c9d312f..6af74ab3 100644 --- a/foundry.toml +++ b/foundry.toml @@ -6,10 +6,4 @@ libs = ["node_modules", "lib"] ffi = true optimizer = true optimizer_runs = 200 -evm_version = 'shanghai' - -# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options -[etherscan] -3605 = { key = "none", url = "https://explorer-cloud-broken-leg-7uu20euqoj.t.conduit.xyz/api" } -421614 = { key = "${ARBISCAN_API_KEY}", url = "https://api-sepolia.arbiscan.io/api?" } -11155420 = { key = "${OPTIMISM_API_KEY}", url = "https://optimism-sepolia.blockscout.com/api?" } +evm_version = 'paris' \ No newline at end of file diff --git a/hardhat-scripts/config/config.ts b/hardhat-scripts/config/config.ts new file mode 100644 index 00000000..6cea0d30 --- /dev/null +++ b/hardhat-scripts/config/config.ts @@ -0,0 +1,45 @@ +import { config as dotenvConfig } from "dotenv"; +dotenvConfig(); +import { ethers } from "ethers"; +import { ChainSlug, DeploymentMode } from "@socket.tech/socket-protocol-common"; + +export const mode = process.env.DEPLOYMENT_MODE as + | DeploymentMode + | DeploymentMode.DEV; + +export const logConfig = () => { + console.log( + "================================================================================================================" + ); + console.log(""); + console.log(`Mode: ${mode}`); + console.log(""); + console.log( + `Make sure ${mode}_addresses.json and ${mode}_verification.json is cleared for given networks if redeploying!!` + ); + console.log(""); + console.log( + "================================================================================================================" + ); +}; + +export const chains: Array = [ + ChainSlug.ARBITRUM_SEPOLIA, + ChainSlug.OPTIMISM_SEPOLIA, + // ChainSlug.SEPOLIA, + ChainSlug.BASE_SEPOLIA, +]; +export const EVM_CHAIN_ID_MAP: Record = { + [DeploymentMode.LOCAL]: 7625382, + [DeploymentMode.DEV]: 7625382, + [DeploymentMode.STAGE]: 43, + [DeploymentMode.PROD]: 3605, +} +export const auctionEndDelaySeconds = 0; +export const watcher = "0xb62505feacC486e809392c65614Ce4d7b051923b"; +export const MAX_FEES = ethers.utils.parseEther("0.001"); +export const EVMX_CHAIN_ID = EVM_CHAIN_ID_MAP[mode]; +export const MAX_LIMIT = 100; +export const BID_TIMEOUT = 600; +export const EXPIRY_TIME = 300; +export const UPGRADE_VERSION = 1; diff --git a/hardhat-scripts/config/index.ts b/hardhat-scripts/config/index.ts new file mode 100644 index 00000000..5c62e04f --- /dev/null +++ b/hardhat-scripts/config/index.ts @@ -0,0 +1 @@ +export * from "./config"; diff --git a/hardhat-scripts/constants/config.ts b/hardhat-scripts/constants/config.ts deleted file mode 100644 index 5ccef6a3..00000000 --- a/hardhat-scripts/constants/config.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { - ChainSlug, - IntegrationTypes, - NativeSwitchboard, -} from "@socket.tech/dl-core"; - -const TIMEOUT = 7200; -export const maxAllowedPacketLength = 10; - -// return chain specific timeout if present else default value -export const timeout = (chain: number): number => { - return TIMEOUT; -}; - -export const getDefaultIntegrationType = ( - chain: ChainSlug, - sibling: ChainSlug -): IntegrationTypes => { - return switchboards?.[chain]?.[sibling] - ? IntegrationTypes.native - : IntegrationTypes.fast; -}; - -export const switchboards = { - [ChainSlug.ARBITRUM_SEPOLIA]: { - [ChainSlug.SEPOLIA]: { - switchboard: NativeSwitchboard.ARBITRUM_L2, - }, - }, - [ChainSlug.ARBITRUM]: { - [ChainSlug.MAINNET]: { - switchboard: NativeSwitchboard.ARBITRUM_L2, - }, - }, - [ChainSlug.OPTIMISM]: { - [ChainSlug.MAINNET]: { - switchboard: NativeSwitchboard.OPTIMISM, - }, - }, - [ChainSlug.OPTIMISM_SEPOLIA]: { - [ChainSlug.SEPOLIA]: { - switchboard: NativeSwitchboard.OPTIMISM, - }, - }, - [ChainSlug.LYRA_TESTNET]: { - [ChainSlug.SEPOLIA]: { - switchboard: NativeSwitchboard.OPTIMISM, - }, - }, - // [ChainSlug.LYRA]: { - // [ChainSlug.MAINNET]: { - // switchboard: NativeSwitchboard.OPTIMISM, - // }, - // }, - [ChainSlug.POLYGON_MAINNET]: { - [ChainSlug.MAINNET]: { - switchboard: NativeSwitchboard.POLYGON_L2, - }, - }, - [ChainSlug.SEPOLIA]: { - [ChainSlug.ARBITRUM_SEPOLIA]: { - switchboard: NativeSwitchboard.ARBITRUM_L1, - }, - [ChainSlug.OPTIMISM_SEPOLIA]: { - switchboard: NativeSwitchboard.OPTIMISM, - }, - [ChainSlug.LYRA_TESTNET]: { - switchboard: NativeSwitchboard.OPTIMISM, - }, - }, - [ChainSlug.MAINNET]: { - [ChainSlug.ARBITRUM]: { - switchboard: NativeSwitchboard.ARBITRUM_L1, - }, - [ChainSlug.OPTIMISM]: { - switchboard: NativeSwitchboard.OPTIMISM, - }, - [ChainSlug.POLYGON_MAINNET]: { - switchboard: NativeSwitchboard.POLYGON_L1, - }, - [ChainSlug.LYRA]: { - switchboard: NativeSwitchboard.OPTIMISM, - }, - }, -}; diff --git a/hardhat-scripts/constants/constants.ts b/hardhat-scripts/constants/constants.ts index b908f2ea..1ae8e8f5 100644 --- a/hardhat-scripts/constants/constants.ts +++ b/hardhat-scripts/constants/constants.ts @@ -1,16 +1 @@ -import { ethers } from "ethers"; - export const ETH_ADDRESS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; -export const MAX_FEES = ethers.utils.parseEther("0.001"); - -export const fees = { - // fees - feePoolChain: 421614, // example chain ID - feePoolToken: ETH_ADDRESS, // example token address - amount: MAX_FEES, // example max fees -}; - -export const BASE_SEPOLIA_CHAIN_ID = 84532; -export const EVMX_CHAIN_ID = 7625382; -export const MAX_LIMIT = 100; -export const BID_TIMEOUT = 1000; diff --git a/src/index.ts b/hardhat-scripts/constants/enums.ts similarity index 63% rename from src/index.ts rename to hardhat-scripts/constants/enums.ts index d96eafbe..371023e1 100644 --- a/src/index.ts +++ b/hardhat-scripts/constants/enums.ts @@ -1,6 +1,4 @@ export enum CORE_CONTRACTS { - Hasher = "Hasher", - SignatureVerifier = "SignatureVerifier", Socket = "Socket", SocketBatcher = "SocketBatcher", FastSwitchboard = "FastSwitchboard", @@ -8,8 +6,7 @@ export enum CORE_CONTRACTS { ContractFactoryPlug = "ContractFactoryPlug", } -export enum OffChainVMCoreContracts { - SignatureVerifier = "SignatureVerifier", +export enum EVMxCoreContracts { WatcherPrecompile = "WatcherPrecompile", AuctionManager = "AuctionManager", FeesManager = "FeesManager", @@ -18,8 +15,3 @@ export enum OffChainVMCoreContracts { AsyncPromise = "AsyncPromise", AddressResolver = "AddressResolver", } - -export enum AppContracts { - SuperTokenApp = "SuperTokenApp", - SuperTokenDeployer = "SuperTokenDeployer", -} diff --git a/hardhat-scripts/constants/index.ts b/hardhat-scripts/constants/index.ts index 5297f967..e42be831 100644 --- a/hardhat-scripts/constants/index.ts +++ b/hardhat-scripts/constants/index.ts @@ -1,2 +1,3 @@ -export * from "./networks"; -export * from "./config"; +export * from "./constants"; +export * from "./enums"; +export * from "./types"; diff --git a/hardhat-scripts/constants/relayers.ts b/hardhat-scripts/constants/relayers.ts new file mode 100644 index 00000000..589291d9 --- /dev/null +++ b/hardhat-scripts/constants/relayers.ts @@ -0,0 +1,22 @@ +export const relayerAddressList = [ + "0x59D24CD3A0b2b646F980A62DCb0aA4115506FFc9", + "0x762783712FD12231601d6d8591F3a5718812D534", + "0x9f5C9941306E7B57583E99033BedB7eA7889EEA4", + "0xd35F262d6f2D3F6D610bAf6635dE57c349ca83A1", + "0xce6b9c352f864515d7E8BBEA67d80d18245937F2", + "0xE651eDb3F16D9e6b1145ae5eee388f0e48D2d44b", + "0xc176E88dE45747743699fAeA58814Ce98a2faC2D", + "0x88220692264EEc280Bd5AaF9278CdE0737Feb2D6", + "0x2d68551354226c7321130f122055F049F8F67791", + "0xA7C89619ceaC009a23c6C3bC5F74d41BBaC68fD1", + "0x7893D79718860DF30e5Fd21AAA6Be05edD22465D", + "0x6386c83e994331c6a41A4420294D130930AEDF9e", + "0xfF33A0afc88CbF48C9DB31Fc2D2EC2F36D598184", + "0xB756B6D986eE448433542A60A1f590EE3B0DFCda", + "0x76943F947D5622624444aeFF135a5121d6732299", + "0x049B750045fdE15F347aF9E86FB80dD879C848ea", + "0x9c653569C32473F40210495128BB5A40ef10c65B", + "0x0291a40beF28E3606b8208a665F900d141E9A8B3", + "0x2e498dFB44CC79D2ef80Afd7C4439BEC8822E216", + "0x049E701A690E885467E54A1B0595f90BDc8324B0", +]; diff --git a/hardhat-scripts/constants/roles.ts b/hardhat-scripts/constants/roles.ts new file mode 100644 index 00000000..5faeb8c1 --- /dev/null +++ b/hardhat-scripts/constants/roles.ts @@ -0,0 +1,6 @@ +export enum ROLES { + RESCUE_ROLE = "RESCUE_ROLE", + WITHDRAW_ROLE = "WITHDRAW_ROLE", + GOVERNANCE_ROLE = "GOVERNANCE_ROLE", + WATCHER_ROLE = "WATCHER_ROLE", +} diff --git a/hardhat-scripts/constants/types.ts b/hardhat-scripts/constants/types.ts new file mode 100644 index 00000000..97603b2c --- /dev/null +++ b/hardhat-scripts/constants/types.ts @@ -0,0 +1,8 @@ +import { + ChainAddressesObj, + ChainSlug, +} from "@socket.tech/socket-protocol-common"; + +export type DeploymentAddresses = { + [chainSlug in ChainSlug]?: ChainAddressesObj; +}; diff --git a/hardhat-scripts/deploy/1.deploy.ts b/hardhat-scripts/deploy/1.deploy.ts index 44cfbb34..645e82f7 100644 --- a/hardhat-scripts/deploy/1.deploy.ts +++ b/hardhat-scripts/deploy/1.deploy.ts @@ -1,187 +1,73 @@ +import { + ChainAddressesObj, + ChainSlug +} from "@socket.tech/socket-protocol-common"; import { config } from "dotenv"; -config(); - import { Contract, Signer, Wallet, providers } from "ethers"; -import { DeployParams, getOrDeploy, storeAddresses } from "./utils"; +import { formatEther } from "ethers/lib/utils"; +import { ethers } from "hardhat"; +import { BID_TIMEOUT, EVMX_CHAIN_ID, EXPIRY_TIME, MAX_LIMIT } from "../config"; +import { + auctionEndDelaySeconds, + chains, + logConfig, + mode, +} from "../config/config"; import { - ChainSlug, - ChainSocketAddresses, + CORE_CONTRACTS, DeploymentAddresses, - DeploymentMode, -} from "@socket.tech/dl-core"; -import { getProviderFromChainSlug } from "../constants"; -import { ethers } from "hardhat"; -import dev_addresses from "../../deployments/dev_addresses.json"; -import { auctionEndDelaySeconds, chains } from "./config"; -import { MAX_LIMIT, EVMX_CHAIN_ID, BID_TIMEOUT } from "../constants/constants"; -import { CORE_CONTRACTS, OffChainVMCoreContracts } from "../../src"; + EVMxCoreContracts, +} from "../constants"; +import { getImplementationAddress } from "../migration/migrate-proxies"; +import { + DeployParams, + getAddresses, + getOrDeploy, + getProviderFromChainSlug, + storeAddresses, +} from "../utils"; +config(); + +let EVMxOwner: string; -let offChainVMOwner: string; const main = async () => { - try { - let addresses: DeploymentAddresses; - let deployUtils: DeployParams = { - addresses: {} as ChainSocketAddresses, - mode: DeploymentMode.DEV, - signer: new ethers.Wallet(process.env.SOCKET_SIGNER_KEY as string), - currentChainSlug: EVMX_CHAIN_ID as ChainSlug, - }; - try { - await deployWatcherVMContracts(); - - console.log("Deploying Socket contracts"); - addresses = dev_addresses as unknown as DeploymentAddresses; - for (const chain of chains) { - try { - let chainAddresses: ChainSocketAddresses = addresses[chain] - ? (addresses[chain] as ChainSocketAddresses) - : ({} as ChainSocketAddresses); - - const providerInstance = getProviderFromChainSlug(chain); - const signer: Wallet = new ethers.Wallet( - process.env.SOCKET_SIGNER_KEY as string, - providerInstance - ); - const socketOwner = signer.address; - - deployUtils = { - addresses: chainAddresses, - mode: DeploymentMode.DEV, - signer: signer, - currentChainSlug: chain as ChainSlug, - }; - - let contractName: string = CORE_CONTRACTS.SignatureVerifier; - const signatureVerifier: Contract = await getOrDeploy( - contractName, - contractName, - `contracts/socket/utils/${contractName}.sol`, - [], - deployUtils - ); - deployUtils.addresses[contractName] = signatureVerifier.address; - - await updateContractSettings( - signatureVerifier, - "owner", - "initialize", - socketOwner, - deployUtils.signer - ); - - contractName = CORE_CONTRACTS.Hasher; - const hasher: Contract = await getOrDeploy( - contractName, - contractName, - `contracts/socket/utils/${contractName}.sol`, - [socketOwner], - deployUtils - ); - deployUtils.addresses[contractName] = hasher.address; - - contractName = CORE_CONTRACTS.Socket; - const socket: Contract = await getOrDeploy( - contractName, - contractName, - `contracts/socket/${contractName}.sol`, - [ - chain as ChainSlug, - hasher.address, - signatureVerifier.address, - socketOwner, - "EVMX", - ], - deployUtils - ); - deployUtils.addresses[contractName] = socket.address; - - contractName = CORE_CONTRACTS.SocketBatcher; - const batcher: Contract = await getOrDeploy( - contractName, - contractName, - `contracts/socket/${contractName}.sol`, - [socketOwner, socket.address], - deployUtils - ); - deployUtils.addresses[contractName] = batcher.address; - - contractName = CORE_CONTRACTS.FastSwitchboard; - const sb: Contract = await getOrDeploy( - contractName, - contractName, - `contracts/socket/switchboard/${contractName}.sol`, - [ - chain as ChainSlug, - socket.address, - signatureVerifier.address, - socketOwner, - ], - deployUtils - ); - deployUtils.addresses[contractName] = sb.address; - - contractName = CORE_CONTRACTS.FeesPlug; - const feesPlug: Contract = await getOrDeploy( - contractName, - contractName, - `contracts/apps/payload-delivery/${contractName}.sol`, - [socket.address, socketOwner], - deployUtils - ); - deployUtils.addresses[contractName] = feesPlug.address; - - contractName = CORE_CONTRACTS.ContractFactoryPlug; - const contractFactoryPlug: Contract = await getOrDeploy( - contractName, - contractName, - `contracts/apps/payload-delivery/${contractName}.sol`, - [socket.address, socketOwner], - deployUtils - ); - deployUtils.addresses[contractName] = contractFactoryPlug.address; - - deployUtils.addresses.startBlock = deployUtils.addresses.startBlock - ? deployUtils.addresses.startBlock - : await deployUtils.signer.provider?.getBlockNumber(); - - await storeAddresses( - deployUtils.addresses, - chain, - DeploymentMode.DEV - ); - } catch (error) { - await storeAddresses( - deployUtils.addresses, - chain, - DeploymentMode.DEV - ); - console.log("Error:", error); - } - } - } catch (error) { - console.error("Error in main deployment:", error); - } - } catch (error) { - console.error("Error in overall deployment process:", error); - } + logConfig(); + await logBalances(); + await deployEVMxContracts(); + await deploySocketContracts(); }; -const deployWatcherVMContracts = async () => { +const logBalances = async () => { + const evmxDeployer = new ethers.Wallet(process.env.WATCHER_PRIVATE_KEY as string); + const socketDeployer = new ethers.Wallet(process.env.SOCKET_SIGNER_KEY as string); + let provider = getProviderFromChainSlug(EVMX_CHAIN_ID as ChainSlug); + const evmxBalance = await provider.getBalance(evmxDeployer.address); + console.log(`EVMx Deployer ${evmxDeployer.address} balance on ${EVMX_CHAIN_ID}:`, formatEther(evmxBalance)); + await Promise.all(chains.map(async (chain) => { + const provider = getProviderFromChainSlug(chain); + const socketBalance = await provider.getBalance(socketDeployer.address); + console.log(`Socket Deployer ${socketDeployer.address} balance on ${chain}:`, formatEther(socketBalance)); + })); +}; + + + +const deployEVMxContracts = async () => { try { let addresses: DeploymentAddresses; let deployUtils: DeployParams = { - addresses: {} as ChainSocketAddresses, - mode: DeploymentMode.DEV, + addresses: {} as ChainAddressesObj, + mode, signer: new ethers.Wallet(process.env.WATCHER_PRIVATE_KEY as string), currentChainSlug: EVMX_CHAIN_ID as ChainSlug, }; const chain = EVMX_CHAIN_ID; try { - console.log("Deploying OffChainVM contracts"); - addresses = dev_addresses as unknown as DeploymentAddresses; - let chainAddresses: ChainSocketAddresses = addresses[chain] - ? (addresses[chain] as ChainSocketAddresses) - : ({} as ChainSocketAddresses); + console.log("Deploying EVMx contracts"); + addresses = getAddresses(mode) as unknown as DeploymentAddresses; + let chainAddresses: ChainAddressesObj = addresses[chain] + ? (addresses[chain] as ChainAddressesObj) + : ({} as ChainAddressesObj); const providerInstance = new providers.StaticJsonRpcProvider( process.env.EVMX_RPC as string @@ -190,11 +76,11 @@ const deployWatcherVMContracts = async () => { process.env.WATCHER_PRIVATE_KEY as string, providerInstance ); - offChainVMOwner = signer.address; + EVMxOwner = signer.address; deployUtils = { addresses: chainAddresses, - mode: DeploymentMode.DEV, + mode, signer: signer, currentChainSlug: chain as ChainSlug, }; @@ -211,66 +97,60 @@ const deployWatcherVMContracts = async () => { deployUtils.addresses[contractName] = proxyFactory.address; deployUtils = await deployContractWithProxy( - OffChainVMCoreContracts.SignatureVerifier, - `contracts/socket/utils/SignatureVerifier.sol`, - [offChainVMOwner], - proxyFactory, - deployUtils - ); - - deployUtils = await deployContractWithProxy( - OffChainVMCoreContracts.AddressResolver, - `contracts/AddressResolver.sol`, - [offChainVMOwner], + EVMxCoreContracts.AddressResolver, + `contracts/protocol/AddressResolver.sol`, + [EVMxOwner], proxyFactory, deployUtils ); const addressResolver = await ethers.getContractAt( - OffChainVMCoreContracts.AddressResolver, - deployUtils.addresses[OffChainVMCoreContracts.AddressResolver] + EVMxCoreContracts.AddressResolver, + deployUtils.addresses[EVMxCoreContracts.AddressResolver] ); deployUtils = await deployContractWithProxy( - OffChainVMCoreContracts.WatcherPrecompile, - `contracts/watcherPrecompile/WatcherPrecompile.sol`, - [offChainVMOwner, addressResolver.address, MAX_LIMIT], + EVMxCoreContracts.WatcherPrecompile, + `contracts/protocol/watcherPrecompile/WatcherPrecompile.sol`, + [ + EVMxOwner, + addressResolver.address, + MAX_LIMIT, + EXPIRY_TIME, + EVMX_CHAIN_ID, + ], proxyFactory, deployUtils ); deployUtils = await deployContractWithProxy( - OffChainVMCoreContracts.FeesManager, - `contracts/apps/payload-delivery/app-gateway/FeesManager.sol`, - [addressResolver.address, offChainVMOwner], + EVMxCoreContracts.FeesManager, + `contracts/protocol/payload-delivery/FeesManager.sol`, + [addressResolver.address, EVMxOwner, EVMX_CHAIN_ID], proxyFactory, deployUtils ); const feesManagerAddress = - deployUtils.addresses[OffChainVMCoreContracts.FeesManager]; + deployUtils.addresses[EVMxCoreContracts.FeesManager]; + + console.log("Deploying DeliveryHelper"); deployUtils = await deployContractWithProxy( - OffChainVMCoreContracts.DeliveryHelper, - `contracts/apps/payload-delivery/app-gateway/DeliveryHelper.sol`, - [ - addressResolver.address, - feesManagerAddress, - offChainVMOwner, - BID_TIMEOUT, - ], + EVMxCoreContracts.DeliveryHelper, + `contracts/protocol/payload-delivery/app-gateway/DeliveryHelper.sol`, + [addressResolver.address, EVMxOwner, BID_TIMEOUT], proxyFactory, deployUtils ); deployUtils = await deployContractWithProxy( - OffChainVMCoreContracts.AuctionManager, - `contracts/apps/payload-delivery/app-gateway/AuctionManager.sol`, + EVMxCoreContracts.AuctionManager, + `contracts/protocol/payload-delivery/AuctionManager.sol`, [ EVMX_CHAIN_ID, auctionEndDelaySeconds, addressResolver.address, - deployUtils.addresses[OffChainVMCoreContracts.SignatureVerifier], - offChainVMOwner, + EVMxOwner, ], proxyFactory, deployUtils @@ -280,7 +160,7 @@ const deployWatcherVMContracts = async () => { addressResolver, "deliveryHelper", "setDeliveryHelper", - deployUtils.addresses[OffChainVMCoreContracts.DeliveryHelper], + deployUtils.addresses[EVMxCoreContracts.DeliveryHelper], deployUtils.signer ); @@ -292,29 +172,30 @@ const deployWatcherVMContracts = async () => { deployUtils.signer ); + await updateContractSettings( + addressResolver, + "defaultAuctionManager", + "setDefaultAuctionManager", + deployUtils.addresses[EVMxCoreContracts.AuctionManager], + deployUtils.signer + ); + await updateContractSettings( addressResolver, "watcherPrecompile__", "setWatcherPrecompile", - deployUtils.addresses[OffChainVMCoreContracts.WatcherPrecompile], + deployUtils.addresses[EVMxCoreContracts.WatcherPrecompile], deployUtils.signer ); - deployUtils.addresses.startBlock = deployUtils.addresses.startBlock - ? deployUtils.addresses.startBlock - : await deployUtils.signer.provider?.getBlockNumber(); + deployUtils.addresses.startBlock = + (deployUtils.addresses.startBlock + ? deployUtils.addresses.startBlock + : await deployUtils.signer.provider?.getBlockNumber()) || 0; - await storeAddresses( - deployUtils.addresses, - chain as ChainSlug, - DeploymentMode.DEV - ); + await storeAddresses(deployUtils.addresses, chain as ChainSlug, mode); } catch (error) { - await storeAddresses( - deployUtils.addresses, - chain as ChainSlug, - DeploymentMode.DEV - ); + await storeAddresses(deployUtils.addresses, chain as ChainSlug, mode); console.log("Error:", error); } } catch (error) { @@ -322,6 +203,130 @@ const deployWatcherVMContracts = async () => { } }; +const deploySocketContracts = async () => { + try { + let addresses: DeploymentAddresses; + let deployUtils: DeployParams = { + addresses: {} as ChainAddressesObj, + mode, + signer: new ethers.Wallet(process.env.SOCKET_SIGNER_KEY as string), + currentChainSlug: EVMX_CHAIN_ID as ChainSlug, + }; + console.log("Deploying Socket contracts"); + addresses = getAddresses(mode) as unknown as DeploymentAddresses; + + for (const chain of chains) { + try { + let chainAddresses: ChainAddressesObj = addresses[chain] + ? (addresses[chain] as ChainAddressesObj) + : ({} as ChainAddressesObj); + + const providerInstance = getProviderFromChainSlug(chain); + const signer: Wallet = new ethers.Wallet( + process.env.SOCKET_SIGNER_KEY as string, + providerInstance + ); + const socketOwner = signer.address; + + deployUtils = { + addresses: chainAddresses, + mode, + signer: signer, + currentChainSlug: chain as ChainSlug, + }; + + let contractName = CORE_CONTRACTS.Socket; + const socket: Contract = await getOrDeploy( + contractName, + contractName, + `contracts/protocol/socket/${contractName}.sol`, + [chain as ChainSlug, socketOwner, "EVMX"], + deployUtils + ); + deployUtils.addresses[contractName] = socket.address; + + contractName = CORE_CONTRACTS.SocketBatcher; + const batcher: Contract = await getOrDeploy( + contractName, + contractName, + `contracts/protocol/socket/${contractName}.sol`, + [socketOwner, socket.address], + deployUtils + ); + deployUtils.addresses[contractName] = batcher.address; + + contractName = CORE_CONTRACTS.FastSwitchboard; + const sb: Contract = await getOrDeploy( + contractName, + contractName, + `contracts/protocol/socket/switchboard/${contractName}.sol`, + [chain as ChainSlug, socket.address, socketOwner], + deployUtils + ); + deployUtils.addresses[contractName] = sb.address; + + contractName = CORE_CONTRACTS.FeesPlug; + const feesPlug: Contract = await getOrDeploy( + contractName, + contractName, + `contracts/protocol/payload-delivery/${contractName}.sol`, + [socket.address, socketOwner], + deployUtils + ); + deployUtils.addresses[contractName] = feesPlug.address; + + contractName = CORE_CONTRACTS.ContractFactoryPlug; + const contractFactoryPlug: Contract = await getOrDeploy( + contractName, + contractName, + `contracts/protocol/payload-delivery/${contractName}.sol`, + [socket.address, socketOwner], + deployUtils + ); + deployUtils.addresses[contractName] = contractFactoryPlug.address; + + deployUtils.addresses.startBlock = + (deployUtils.addresses.startBlock + ? deployUtils.addresses.startBlock + : await deployUtils.signer.provider?.getBlockNumber()) || 0; + + await storeAddresses(deployUtils.addresses, chain, mode); + } catch (error) { + await storeAddresses(deployUtils.addresses, chain, mode); + console.log( + "Error while deploying socket contracts on chain", + chain, + error + ); + } + } + } catch (error) { + console.error("Error in socket deployment:", error); + } +}; + +async function initializeSigVerifier( + contract: Contract, + getterMethod: string, + setterMethod: string, + requiredAddress: string, + initParams: any[], + signer: Signer +) { + const currentValue = await contract.connect(signer)[getterMethod](); + + if (currentValue.toLowerCase() !== requiredAddress.toLowerCase()) { + console.log({ + setterMethod, + current: currentValue, + required: requiredAddress, + }); + const tx = await contract.connect(signer)[setterMethod](...initParams); + console.log(`Setting ${getterMethod} for ${contract.address} to`, tx.hash); + await tx.wait(); + } +} + async function updateContractSettings( contract: Contract, getterMethod: string, @@ -369,24 +374,45 @@ const deployContractWithProxy = async ( ); deployUtils.addresses[keyName] = implementation.address; + if (deployUtils.addresses[contractName] !== undefined) { + const currentImplAddress = await getImplementationAddress( + deployUtils.addresses[contractName] + ); + const newImplementation = implementation.address; + + console.log("Current implementation:", currentImplAddress); + console.log("New implementation:", newImplementation); + + if (currentImplAddress.toLowerCase() === newImplementation.toLowerCase()) + return deployUtils; + + console.log("Upgrading contract"); + + const tx = await proxyFactory + .connect(deployUtils.signer) + .upgrade(deployUtils.addresses[contractName], newImplementation); + + console.log("Upgraded contract", tx.hash); + + await tx.wait(); + + return deployUtils; + } + // Create initialization data const initializeFn = implementation.interface.getFunction("initialize"); const initData = implementation.interface.encodeFunctionData( initializeFn, initParams ); - if (deployUtils.addresses[contractName] !== undefined) return deployUtils; // Deploy transparent proxy - const tx = await proxyFactory.connect(deployUtils.signer).deployAndCall( - implementation.address, - offChainVMOwner, - initData - ); + const tx = await proxyFactory + .connect(deployUtils.signer) + .deployAndCall(implementation.address, EVMxOwner, initData); const receipt = await tx.wait(); - const proxyAddress = receipt.events?.find( - (e) => e.event === "Deployed" - )?.args?.proxy; + const proxyAddress = receipt.events?.find((e) => e.event === "Deployed")?.args + ?.proxy; deployUtils.addresses[contractName] = proxyAddress; return deployUtils; diff --git a/hardhat-scripts/deploy/2.roles.ts b/hardhat-scripts/deploy/2.roles.ts index d276adbe..8aa12732 100644 --- a/hardhat-scripts/deploy/2.roles.ts +++ b/hardhat-scripts/deploy/2.roles.ts @@ -1,84 +1,138 @@ -import { - ChainSocketAddresses, - CORE_CONTRACTS, - DeploymentAddresses, - ROLES, -} from "@socket.tech/dl-core"; - import { config as dotenvConfig } from "dotenv"; dotenvConfig(); -import { ethers } from "hardhat"; -import dev_addresses from "../../deployments/dev_addresses.json"; -import { chains, watcher } from "./config"; -import { getProviderFromChainSlug } from "../constants"; import { Wallet } from "ethers"; -import { getInstance, getRoleHash } from "./utils"; +import { ethers } from "hardhat"; +import { chains, EVMX_CHAIN_ID, mode, watcher } from "../config"; +import { + CORE_CONTRACTS, + DeploymentAddresses, + EVMxCoreContracts, +} from "../constants"; +import { + getAddresses, + getInstance, + getProviderFromChainSlug, + getRoleHash, + overrides, +} from "../utils"; +import { relayerAddressList } from "../constants/relayers"; +import { ChainAddressesObj } from "@socket.tech/socket-protocol-common"; +import { ROLES } from "../constants/roles"; export const REQUIRED_ROLES = { - FastSwitchboard: ROLES.WATCHER_ROLE, - Socket: ROLES.GOVERNANCE_ROLE, + FastSwitchboard: [ROLES.WATCHER_ROLE, ROLES.RESCUE_ROLE], + Socket: [ROLES.GOVERNANCE_ROLE, ROLES.RESCUE_ROLE], + FeesPlug: [ROLES.RESCUE_ROLE], + ContractFactoryPlug: [ROLES.RESCUE_ROLE], }; -export const main = async () => { - let addresses: DeploymentAddresses; - try { - console.log("Setting Roles"); - addresses = dev_addresses as unknown as DeploymentAddresses; +async function setRoleForContract( + contractName: CORE_CONTRACTS | EVMxCoreContracts, + contractAddress: string | number, + targetAddress: string, + roleName: string, + signer: Wallet, + chain: number +) { + let contract = await getInstance(contractName, contractAddress.toString()); + contract = contract.connect(signer); - for (const chain of chains) { - let chainAddresses: ChainSocketAddresses = addresses[chain] - ? (addresses[chain] as ChainSocketAddresses) - : ({} as ChainSocketAddresses); + console.log(`checking ${roleName} role for ${contractName} on ${chain}`); + const roleHash = getRoleHash(roleName); + const hasRole = await contract.callStatic["hasRole(bytes32,address)"]( + roleHash, + targetAddress, + { + from: signer.address, + } + ); - const providerInstance = getProviderFromChainSlug(chain); - const signer: Wallet = new ethers.Wallet( - process.env.SOCKET_SIGNER_KEY as string, - providerInstance - ); + if (!hasRole) { + let tx = await contract.grantRole(roleHash, targetAddress, { + ...overrides(chain), + }); + console.log( + `granting ${roleName} role to ${targetAddress} for ${contractName}`, + chain, + "txHash: ", + tx.hash + ); + await tx.wait(); + } +} - let socket = await getInstance( - CORE_CONTRACTS.Socket, - chainAddresses[CORE_CONTRACTS.Socket]! - ); - socket = socket.connect(signer); +async function getSigner(chain: number, isWatcher: boolean = false) { + const providerInstance = getProviderFromChainSlug(chain); + const signer: Wallet = new ethers.Wallet( + isWatcher + ? (process.env.WATCHER_PRIVATE_KEY as string) + : (process.env.SOCKET_SIGNER_KEY as string), + providerInstance + ); + return signer; +} - const hasGovRole = await socket.callStatic["hasRole(bytes32,address)"]( - getRoleHash(REQUIRED_ROLES.Socket), - signer.address, - { - from: signer.address, - } - ); +async function setRolesForOnChain( + chain: number, + addresses: DeploymentAddresses +) { + const chainAddresses: ChainAddressesObj = (addresses[chain] ?? + {}) as ChainAddressesObj; + const signer = await getSigner(chain); - if (!hasGovRole) { - const tx = await socket.grantRole( - getRoleHash(REQUIRED_ROLES.Socket), - signer.address - ); - console.log("granting gov role", chain, tx.hash); - await tx.wait(); - } + for (const [contractName, roles] of Object.entries(REQUIRED_ROLES)) { + const contractAddress = + chainAddresses[contractName as keyof ChainAddressesObj]; + if (!contractAddress) continue; - let sb = await getInstance( - CORE_CONTRACTS.FastSwitchboard, - chainAddresses[CORE_CONTRACTS.FastSwitchboard]! - ); - sb = sb.connect(signer); + for (const roleName of roles) { + const targetAddress = + contractName === CORE_CONTRACTS.FastSwitchboard && + roleName === ROLES.WATCHER_ROLE + ? watcher + : signer.address; - const hasRole = await sb.callStatic["hasRole(bytes32,address)"]( - getRoleHash(REQUIRED_ROLES.FastSwitchboard), - watcher, - { - from: signer.address, - } + await setRoleForContract( + contractName as CORE_CONTRACTS, + contractAddress, + targetAddress, + roleName, + signer, + chain ); + } + } +} + +async function setRolesForEVMx(addresses: DeploymentAddresses) { + const chainAddresses: ChainAddressesObj = (addresses[EVMX_CHAIN_ID] ?? + {}) as ChainAddressesObj; + const signer = await getSigner(EVMX_CHAIN_ID, true); - if (!hasRole) { - const tx = await sb.grantWatcherRole(watcher); - console.log("granting role to watcher", chain, tx.hash); - await tx.wait(); - } + const contractAddress = chainAddresses[EVMxCoreContracts.WatcherPrecompile]; + if (!contractAddress) return; + + for (const relayerAddress of [...relayerAddressList, signer.address]) { + console.log(`setting WATCHER_ROLE for ${relayerAddress} on EVMX`); + await setRoleForContract( + EVMxCoreContracts.WatcherPrecompile, + contractAddress, + relayerAddress, + ROLES.WATCHER_ROLE, + signer, + EVMX_CHAIN_ID + ); + } +} + +export const main = async () => { + try { + console.log("Setting Roles"); + const addresses = getAddresses(mode) as unknown as DeploymentAddresses; + console.log("Setting Roles for On Chain"); + for (const chain of chains) { + await setRolesForOnChain(chain, addresses); } } catch (error) { console.log("Error:", error); diff --git a/hardhat-scripts/deploy/3.upgradeManagers.ts b/hardhat-scripts/deploy/3.upgradeManagers.ts index 23371d40..eaf3592f 100644 --- a/hardhat-scripts/deploy/3.upgradeManagers.ts +++ b/hardhat-scripts/deploy/3.upgradeManagers.ts @@ -1,33 +1,37 @@ import { ChainSlug, - ChainSocketAddresses, - CORE_CONTRACTS, - DeploymentAddresses, + ChainAddressesObj, DeploymentMode, -} from "@socket.tech/dl-core"; +} from "@socket.tech/socket-protocol-common"; import { config as dotenvConfig } from "dotenv"; dotenvConfig(); -import { ethers } from "hardhat"; -import dev_addresses from "../../deployments/dev_addresses.json"; -import { chains } from "./config"; -import { getProviderFromChainSlug } from "../constants"; import { Wallet } from "ethers"; -import { getInstance, storeAddresses } from "./utils"; -import { OffChainVMCoreContracts } from "../../src"; -import { EVMX_CHAIN_ID } from "../constants/constants"; +import { ethers } from "hardhat"; +import { chains, EVMX_CHAIN_ID, mode } from "../config"; +import { + CORE_CONTRACTS, + DeploymentAddresses, + EVMxCoreContracts, +} from "../constants"; +import { + getAddresses, + getInstance, + getProviderFromChainSlug, + storeAddresses, +} from "../utils"; export const main = async () => { let addresses: DeploymentAddresses; try { console.log("Upgrading Managers"); - addresses = dev_addresses as unknown as DeploymentAddresses; + addresses = getAddresses(mode) as unknown as DeploymentAddresses; for (const chain of chains) { - let chainAddresses: ChainSocketAddresses = addresses[chain] - ? (addresses[chain] as ChainSocketAddresses) - : ({} as ChainSocketAddresses); + let chainAddresses: ChainAddressesObj = addresses[chain] + ? (addresses[chain] as ChainAddressesObj) + : ({} as ChainAddressesObj); const providerInstance = getProviderFromChainSlug(chain); const signer: Wallet = new ethers.Wallet( @@ -37,7 +41,7 @@ export const main = async () => { const socketContract = ( await getInstance( - "contracts/socket/Socket.sol:Socket", + CORE_CONTRACTS.Socket, chainAddresses[CORE_CONTRACTS.Socket] ) ).connect(signer); @@ -48,45 +52,64 @@ export const main = async () => { socketContract ); - await setSwitchboard( - chainAddresses[CORE_CONTRACTS.FastSwitchboard], - chain, - addresses - ); + await setOnchainContracts(chain, addresses); - await storeAddresses(chainAddresses, chain, DeploymentMode.DEV); + await storeAddresses(chainAddresses, chain, mode); } } catch (error) { console.log("Error:", error); } }; -async function setSwitchboard(sbAddress, chain, addresses) { - const providerInstance = getProviderFromChainSlug( - EVMX_CHAIN_ID as ChainSlug - ); +async function setOnchainContracts(chain, addresses) { + const providerInstance = getProviderFromChainSlug(EVMX_CHAIN_ID as ChainSlug); const signer: Wallet = new ethers.Wallet( process.env.WATCHER_PRIVATE_KEY as string, providerInstance ); - const watcherVMaddr = addresses[EVMX_CHAIN_ID]!; + const EVMxAddresses = addresses[EVMX_CHAIN_ID]!; const watcherPrecompile = ( await getInstance( - "contracts/watcherPrecompile/WatcherPrecompile.sol:WatcherPrecompile", - watcherVMaddr[OffChainVMCoreContracts.WatcherPrecompile] + EVMxCoreContracts.WatcherPrecompile, + EVMxAddresses[EVMxCoreContracts.WatcherPrecompile] ) ).connect(signer); const fastSBtype = ethers.utils.keccak256(ethers.utils.toUtf8Bytes("FAST")); - const currentValue = await watcherPrecompile.switchboards(chain, fastSBtype); - console.log({ current: currentValue, required: sbAddress }); - - if (currentValue.toLowerCase() !== sbAddress.toLowerCase()) { + const sbAddress = addresses[chain][CORE_CONTRACTS.FastSwitchboard]; + const socketAddress = addresses[chain][CORE_CONTRACTS.Socket]; + const contractFactoryPlugAddress = + addresses[chain][CORE_CONTRACTS.ContractFactoryPlug]; + const feesPlugAddress = addresses[chain][CORE_CONTRACTS.FeesPlug]; + + const currentSbAddress = await watcherPrecompile.switchboards( + chain, + fastSBtype + ); + const currentSocket = await watcherPrecompile.sockets(chain); + const currentContractFactoryPlug = + await watcherPrecompile.contractFactoryPlug(chain); + const currentFeesPlug = await watcherPrecompile.feesPlug(chain); + + if ( + currentSbAddress.toLowerCase() !== sbAddress.toLowerCase() || + currentSocket.toLowerCase() !== socketAddress.toLowerCase() || + currentContractFactoryPlug.toLowerCase() !== + contractFactoryPlugAddress.toLowerCase() || + currentFeesPlug.toLowerCase() !== feesPlugAddress.toLowerCase() + ) { const tx = await watcherPrecompile .connect(signer) - .setSwitchboard(chain, fastSBtype, sbAddress); + .setOnChainContracts( + chain, + fastSBtype, + sbAddress, + socketAddress, + contractFactoryPlugAddress, + feesPlugAddress + ); - console.log(`Setting sb for ${chain} to`, tx.hash); + console.log(`Setting onchain contracts for ${chain}, txHash: `, tx.hash); await tx.wait(); } } @@ -95,10 +118,7 @@ const registerSb = async (sbAddress, signer, socket) => { try { // used fast switchboard here as all have same function signature const switchboard = ( - await getInstance( - "contracts/socket/switchboard/FastSwitchboard.sol:FastSwitchboard", - sbAddress - ) + await getInstance(CORE_CONTRACTS.FastSwitchboard, sbAddress) ).connect(signer); // send overrides while reading capacitor to avoid errors on mantle chain @@ -108,7 +128,7 @@ const registerSb = async (sbAddress, signer, socket) => { from: signer.address, }); - if (!sb) { + if (Number(sb) == 0) { const registerTx = await switchboard.registerSwitchboard(); console.log(`Registering Switchboard ${sbAddress}: ${registerTx.hash}`); await registerTx.wait(); diff --git a/hardhat-scripts/deploy/4.connect.ts b/hardhat-scripts/deploy/4.connect.ts index e66da43c..0de5a503 100644 --- a/hardhat-scripts/deploy/4.connect.ts +++ b/hardhat-scripts/deploy/4.connect.ts @@ -1,15 +1,18 @@ +import { ChainAddressesObj } from "@socket.tech/socket-protocol-common"; +import { Contract, ethers, providers, Wallet } from "ethers"; +import { chains, EVMX_CHAIN_ID, mode } from "../config"; import { - ChainSocketAddresses, + CORE_CONTRACTS, DeploymentAddresses, -} from "@socket.tech/dl-core"; -import { getProviderFromChainSlug } from "../constants"; -import { Contract, ethers, providers, Wallet } from "ethers"; -import { getInstance } from "./utils"; -import { chains } from "./config"; -import dev_addresses from "../../deployments/dev_addresses.json"; -import { EVMX_CHAIN_ID } from "../constants/constants"; -import { CORE_CONTRACTS, OffChainVMCoreContracts } from "../../src"; - + EVMxCoreContracts, +} from "../constants"; +import { + getAddresses, + getInstance, + getProviderFromChainSlug, + overrides, +} from "../utils"; +import { signWatcherMessage } from "../utils/sign"; const plugs = [CORE_CONTRACTS.ContractFactoryPlug, CORE_CONTRACTS.FeesPlug]; export type AppGatewayConfig = { plug: string; @@ -19,15 +22,16 @@ export type AppGatewayConfig = { }; // Maps plug contracts to their corresponding app gateways export const getAppGateway = (plug: string, addresses: DeploymentAddresses) => { + let address: string = ""; switch (plug) { case CORE_CONTRACTS.ContractFactoryPlug: - return addresses?.[EVMX_CHAIN_ID]?.[ - OffChainVMCoreContracts.DeliveryHelper - ]; + address = addresses?.[EVMX_CHAIN_ID]?.[EVMxCoreContracts.DeliveryHelper]; + if (!address) throw new Error(`DeliveryHelper not found on EVMX`); + return address; case CORE_CONTRACTS.FeesPlug: - return addresses?.[EVMX_CHAIN_ID]?.[ - OffChainVMCoreContracts.FeesManager - ]; + address = addresses?.[EVMX_CHAIN_ID]?.[EVMxCoreContracts.FeesManager]; + if (!address) throw new Error(`FeesManager not found on EVMX`); + return address; default: throw new Error(`Unknown plug: ${plug}`); } @@ -66,7 +70,7 @@ async function connectPlug( plugContract: string, socketSigner: Wallet, addresses: DeploymentAddresses, - addr: ChainSocketAddresses + addr: ChainAddressesObj ) { console.log(`Connecting ${plugContract} on ${chain}`); @@ -103,7 +107,7 @@ async function connectPlug( export const connectPlugsOnSocket = async () => { console.log("Connecting plugs"); - const addresses = dev_addresses as unknown as DeploymentAddresses; + const addresses = getAddresses(mode) as unknown as DeploymentAddresses; // Connect plugs on each chain await Promise.all( chains.map(async (chain) => { @@ -123,7 +127,7 @@ export const connectPlugsOnSocket = async () => { ); }; -export const isConfigSetOnWatcherVM = async ( +export const isConfigSetOnEVMx = async ( watcher: Contract, chain: number, plug: string, @@ -138,10 +142,10 @@ export const isConfigSetOnWatcherVM = async ( }; // Configure plugs on the Watcher VM -export const updateConfigWatcherVM = async () => { +export const updateConfigEVMx = async () => { try { - console.log("Connecting plugs on OffChainVM"); - const addresses = dev_addresses as unknown as DeploymentAddresses; + console.log("Connecting plugs on EVMx"); + const addresses = getAddresses(mode) as unknown as DeploymentAddresses; const appConfigs: AppGatewayConfig[] = []; // Set up Watcher contract @@ -152,11 +156,11 @@ export const updateConfigWatcherVM = async () => { process.env.WATCHER_PRIVATE_KEY as string, providerInstance ); - const watcherVMaddr = addresses[EVMX_CHAIN_ID]!; + const EVMxAddresses = addresses[EVMX_CHAIN_ID]!; const watcher = ( await getInstance( - OffChainVMCoreContracts.WatcherPrecompile, - watcherVMaddr[OffChainVMCoreContracts.WatcherPrecompile] + EVMxCoreContracts.WatcherPrecompile, + EVMxAddresses[EVMxCoreContracts.WatcherPrecompile] ) ).connect(signer); @@ -173,7 +177,7 @@ export const updateConfigWatcherVM = async () => { checkIfAddressExists(appGateway, "AppGateway"); if ( - await isConfigSetOnWatcherVM( + await isConfigSetOnEVMx( watcher, chain, addr[plugContract], @@ -197,8 +201,18 @@ export const updateConfigWatcherVM = async () => { // Update configs if any changes needed if (appConfigs.length > 0) { console.log({ appConfigs }); - const tx = await watcher.setAppGateways(appConfigs); - console.log(`Updating OffChainVM Config tx hash: ${tx.hash}`); + const encodedMessage = ethers.utils.defaultAbiCoder.encode( + [ + "bytes4", + "tuple(address plug,address appGateway,address switchboard,uint32 chainSlug)[]", + ], + [watcher.interface.getSighash("setAppGateways"), appConfigs] + ); + const { nonce, signature } = await signWatcherMessage(encodedMessage); + const tx = await watcher.setAppGateways(appConfigs, nonce, signature, { + ...overrides(EVMX_CHAIN_ID), + }); + console.log(`Updating EVMx Config tx hash: ${tx.hash}`); await tx.wait(); } } catch (error) { @@ -210,7 +224,7 @@ export const updateConfigWatcherVM = async () => { export const main = async () => { try { await connectPlugsOnSocket(); - await updateConfigWatcherVM(); + await updateConfigEVMx(); } catch (error) { console.log("Error while sending transaction", error); } diff --git a/hardhat-scripts/deploy/5.upload.ts b/hardhat-scripts/deploy/5.upload.ts index 00be4c95..b6d5aebb 100644 --- a/hardhat-scripts/deploy/5.upload.ts +++ b/hardhat-scripts/deploy/5.upload.ts @@ -1,117 +1,102 @@ +import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3"; +import { + ChainAddressesObj, + DeploymentMode, + EVMxAddressesObj, + chainSlugToHardhatChainName, + ChainSlug +} from "@socket.tech/socket-protocol-common"; +import { config as dotenvConfig } from "dotenv"; import fs from "fs"; import path from "path"; -import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; -import { config as dotenvConfig } from "dotenv"; -import { - BASE_SEPOLIA_CHAIN_ID, - EVMX_CHAIN_ID, -} from "../constants/constants"; -import { ChainSlug } from "@socket.tech/dl-core"; - -// import applicationGateway from "../../artifacts/abi/SuperTokenApp.json"; -// import socketBatcher from "../../artifacts/abi/SocketBatcher.json"; -// import deliveryHelperPlug from "../../artifacts/abi/PayloadDeliveryPlug.json"; -// import socket from "../../artifacts/abi/Socket.json"; -// import watcherVM from "../../artifacts/abi/WatcherPrecompile.json"; +import { EVMX_CHAIN_ID, mode, chains } from "../config/config"; -// export const applicationGatewayABI = applicationGateway; -// export const socketBatcherABI = socketBatcher; -// export const ERC20ABI = ERC20; -// export const deliveryHelperABI = deliveryHelper; -// export const socketABI = socket; -// export const watcherVMABI = watcherVM; -// export const deliveryHelperPlugABI = deliveryHelperPlug; +dotenvConfig(); -// const abis = { -// applicationGatewayABI, -// socketBatcherABI, -// ERC20ABI, -// deliveryHelperABI, -// socketABI, -// watcherVMABI, -// deliveryHelperPlugABI, -// }; +const getBucketName = () => { + switch (mode) { + case DeploymentMode.DEV: + return "socketpoc"; + case DeploymentMode.STAGE: + return "socket-stage"; + case DeploymentMode.PROD: + return "socket-prod"; + default: + throw new Error(`Invalid deployment mode: ${mode}`); + } +}; -dotenvConfig(); +const getFileName = () => { + switch (mode) { + case DeploymentMode.DEV: + return "devConfig.json"; + case DeploymentMode.STAGE: + return "stageConfig.json"; + case DeploymentMode.PROD: + return "prodConfig.json"; + default: + throw new Error(`Invalid deployment mode: ${mode}`); + } +}; +const getAddressesPath = () => { + switch (mode) { + case DeploymentMode.DEV: + return "../../deployments/dev_addresses.json"; + case DeploymentMode.STAGE: + return "../../deployments/stage_addresses.json"; + case DeploymentMode.PROD: + return "../../deployments/prod_addresses.json"; + default: + throw new Error(`Invalid deployment mode: ${mode}`); + } +}; type ConfigEntry = { eventBlockRangePerCron: number; rpc: string | undefined; wssRpc: string | undefined; confirmations: number; eventBlockRange: number; - addresses?: { - SignatureVerifier: string; - Hasher: string; - Socket: string; - FastSwitchboard: string; - SocketBatcher: string; - ContractFactoryPlug: string; - FeesPlug: string; - startBlock: number; - }; + addresses?: ChainAddressesObj | EVMxAddressesObj; }; - type S3Config = { [chainId: string]: ConfigEntry; }; + +const supportedChainSlugs = [EVMX_CHAIN_ID as ChainSlug, ...chains]; + export let config: S3Config = { - [ChainSlug.ARBITRUM_SEPOLIA]: { - eventBlockRangePerCron: 5000, - rpc: process.env.ARBITRUM_SEPOLIA_RPC, - wssRpc: process.env.ARBITRUM_SEPOLIA_WSS_RPC, - confirmations: 0, - eventBlockRange: 5000, - }, - [ChainSlug.OPTIMISM_SEPOLIA]: { - eventBlockRangePerCron: 5000, - rpc: process.env.OPTIMISM_SEPOLIA_RPC, - wssRpc: process.env.OPTIMISM_SEPOLIA_WSS_RPC, - confirmations: 0, - eventBlockRange: 5000, - }, - [ChainSlug.SEPOLIA]: { - eventBlockRangePerCron: 5000, - rpc: process.env.SEPOLIA_RPC, - wssRpc: process.env.SEPOLIA_WSS_RPC, - confirmations: 0, - eventBlockRange: 5000, - }, - [EVMX_CHAIN_ID]: { - eventBlockRangePerCron: 5000, - rpc: process.env.EVMX_RPC, - wssRpc: process.env.EVMX_WSS_RPC, - confirmations: 0, - eventBlockRange: 5000, - }, - [BASE_SEPOLIA_CHAIN_ID]: { + //@ts-ignore + supportedChainSlugs, +}; + +// Add config for each supported chain +supportedChainSlugs.forEach(chainSlug => { + let chainName = + chainSlug === EVMX_CHAIN_ID ? "EVMX" : chainSlugToHardhatChainName[chainSlug].toString().replace("-", "_"); + let rpcKey = `${chainName.toUpperCase()}_RPC`; + let wssRpcKey = `${chainName.toUpperCase()}_WSS_RPC`; + if (!process.env[rpcKey] || !process.env[wssRpcKey]) { + console.log(`Missing RPC or WSS RPC for chain ${chainName}`); + return; + } + config[chainSlug] = { eventBlockRangePerCron: 5000, - rpc: process.env.BASE_SEPOLIA_RPC, - wssRpc: process.env.BASE_SEPOLIA_WSS_RPC, + rpc: process.env[rpcKey], + wssRpc: process.env[wssRpcKey], confirmations: 0, eventBlockRange: 5000, - }, - //@ts-ignore - supportedChainSlugs: [ - ChainSlug.ARBITRUM_SEPOLIA, - ChainSlug.OPTIMISM_SEPOLIA, - // ChainSlug.SEPOLIA, - EVMX_CHAIN_ID, - // BASE_SEPOLIA_CHAIN_ID, - ], -}; -// Read the dev_addresses.json file -const devAddressesPath = path.join( - __dirname, - "../../deployments/dev_addresses.json" -); -const devAddresses = JSON.parse(fs.readFileSync(devAddressesPath, "utf8")); + }; +}); +// Read the addresses.json file +const addressesPath = path.join(__dirname, getAddressesPath()); +const addresses = JSON.parse(fs.readFileSync(addressesPath, "utf8")); // Update config with addresses for (const chainId in config) { - if (devAddresses[chainId]) { + if (addresses[chainId]) { console.log(`Updating addresses for chainId ${chainId}`); - config[chainId].addresses = devAddresses[chainId]; + config[chainId].addresses = addresses[chainId]; } } console.log(JSON.stringify(config, null, 2)); @@ -119,9 +104,9 @@ console.log(JSON.stringify(config, null, 2)); const s3Client = new S3Client({ region: "us-east-1" }); // Replace with your preferred region // Function to upload to S3 -async function uploadToS3(data: any, fileName: string) { +async function uploadToS3(data: any, fileName: string = getFileName()) { const params = { - Bucket: "socketpoc", + Bucket: getBucketName(), Key: fileName, Body: JSON.stringify(data, null, 2), ContentType: "application/json", @@ -137,5 +122,5 @@ async function uploadToS3(data: any, fileName: string) { } // Upload config to S3 -uploadToS3(config, "pocConfig.json"); -// uploadToS3(abis, "pocABIs.json"); +// uploadToS3(config, "pocConfig.json"); +uploadToS3(config); diff --git a/hardhat-scripts/deploy/6.setupEnv.ts b/hardhat-scripts/deploy/6.setupEnv.ts index 92e52dda..17707fed 100644 --- a/hardhat-scripts/deploy/6.setupEnv.ts +++ b/hardhat-scripts/deploy/6.setupEnv.ts @@ -1,8 +1,8 @@ +import { ChainSlug } from "@socket.tech/socket-protocol-common"; import fs from "fs"; -import dev_addresses from "../../deployments/dev_addresses.json"; -import { EVMX_CHAIN_ID } from "../constants/constants"; import path from "path"; -import { ChainSlug } from "@socket.tech/dl-core"; +import { EVMX_CHAIN_ID, mode } from "../config/config"; +import { getAddresses } from "../utils"; const envFilePath = path.join(__dirname, "../../.env"); const encoding = "utf8"; @@ -13,27 +13,32 @@ const envContent = fs.readFileSync(envFilePath, encoding); // Parse the .env content into an array of lines const lines = envContent.split("\n"); -// Get the latest addresses from dev_addresses -const latestAddresses = dev_addresses[EVMX_CHAIN_ID]; +// Get the latest addresses +const latestAddresses = getAddresses(mode); +const latestEVMxAddresses = latestAddresses[EVMX_CHAIN_ID]; // Create a new array to hold the updated lines const updatedLines = lines.map((line) => { if (line.startsWith("ADDRESS_RESOLVER=")) { - return `ADDRESS_RESOLVER=${latestAddresses["AddressResolver"]}`; + return `ADDRESS_RESOLVER=${latestEVMxAddresses["AddressResolver"]}`; } else if (line.startsWith("WATCHER_PRECOMPILE=")) { - return `WATCHER_PRECOMPILE=${latestAddresses["WatcherPrecompile"]}`; + return `WATCHER_PRECOMPILE=${latestEVMxAddresses["WatcherPrecompile"]}`; } else if (line.startsWith("AUCTION_MANAGER=")) { - return `AUCTION_MANAGER=${latestAddresses["AuctionManager"]}`; - } else if (line.startsWith("ARBITRUM_FEES_PLUG=")) { - return `ARBITRUM_FEES_PLUG=${latestAddresses["FeesManager"]}`; - } else if (line.startsWith("SOCKET=")) { - return `SOCKET=${dev_addresses[ChainSlug.ARBITRUM_SEPOLIA]["Socket"]}`; - } else if (line.startsWith("SWITCHBOARD=")) { - return `SWITCHBOARD=${ - dev_addresses[ChainSlug.ARBITRUM_SEPOLIA]["FastSwitchboard"] + return `AUCTION_MANAGER=${latestEVMxAddresses["AuctionManager"]}`; + } else if (line.startsWith("FEES_MANAGER=")) { + return `FEES_MANAGER=${latestEVMxAddresses["FeesManager"]}`; + } else if (line.startsWith("ARBITRUM_SOCKET=")) { + return `ARBITRUM_SOCKET=${ + latestAddresses[ChainSlug.ARBITRUM_SEPOLIA]["Socket"] + }`; + } else if (line.startsWith("ARBITRUM_SWITCHBOARD=")) { + return `ARBITRUM_SWITCHBOARD=${ + latestAddresses[ChainSlug.ARBITRUM_SEPOLIA]["FastSwitchboard"] }`; } else if (line.startsWith("ARBITRUM_FEES_PLUG=")) { - return `ARBITRUM_FEES_PLUG=${dev_addresses[ChainSlug.ARBITRUM_SEPOLIA]["FeesPlug"]}`; + return `ARBITRUM_FEES_PLUG=${ + latestAddresses[ChainSlug.ARBITRUM_SEPOLIA]["FeesPlug"] + }`; } return line; // Return the line unchanged if it doesn't match any of the above }); diff --git a/hardhat-scripts/deploy/config.ts b/hardhat-scripts/deploy/config.ts deleted file mode 100644 index ad00e942..00000000 --- a/hardhat-scripts/deploy/config.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { config as dotenvConfig } from "dotenv"; -dotenvConfig(); - -import { ChainSlug, DeploymentMode, version } from "@socket.tech/dl-core"; -import { BigNumberish, utils } from "ethers"; -import { getOverrides } from "../constants/overrides"; -import { getProviderFromChainSlug } from "../constants"; - -export const mode = process.env.DEPLOYMENT_MODE as - | DeploymentMode - | DeploymentMode.DEV; - -console.log( - "================================================================================================================" -); -console.log(""); -console.log(`Mode: ${mode}`); -console.log(`Version: ${version[mode]}`); -console.log(""); -console.log( - `Make sure ${mode}_addresses.json and ${mode}_verification.json is cleared for given networks if redeploying!!` -); -console.log(""); -console.log( - "================================================================================================================" -); - -export const chains: Array = [ - ChainSlug.ARBITRUM_SEPOLIA, - ChainSlug.OPTIMISM_SEPOLIA, - // ChainSlug.SEPOLIA, - // BASE_SEPOLIA_CHAIN_ID as ChainSlug, -]; - -export const capacitorType = 1; -export const maxPacketLength = 1; -export const initialPacketCount = 0; -export const auctionEndDelaySeconds = 5; - -const MSG_VALUE_MAX_THRESHOLD = utils.parseEther("0.001"); -export const msgValueMaxThreshold = (chain: ChainSlug): BigNumberish => { - return MSG_VALUE_MAX_THRESHOLD; -}; - -export const overrides = async ( - chain: ChainSlug | number -): Promise<{ - type?: number | undefined; - gasLimit?: BigNumberish | undefined; - gasPrice?: BigNumberish | undefined; -}> => { - return await getOverrides(chain, getProviderFromChainSlug(chain)); -}; - -export const watcher = "0xb62505feacC486e809392c65614Ce4d7b051923b"; diff --git a/hardhat-scripts/deploy/migrate-proxies.ts b/hardhat-scripts/deploy/migrate-proxies.ts deleted file mode 100644 index 3c31c7d3..00000000 --- a/hardhat-scripts/deploy/migrate-proxies.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { ethers, upgrades } from "hardhat"; -import * as fs from "fs"; -import * as path from "path"; -import { EVMX_CHAIN_ID } from "../constants/constants"; - -const upgradeableContracts = [ - "SignatureVerifier", - "AddressResolver", - "WatcherPrecompile", - "FeesManager", - "DeliveryHelper", - "AuctionManager", -]; - -async function main() { - // Read addresses from JSON file - const addressesPath = path.join( - __dirname, - "../../deployments/dev_addresses.json" - ); - const addresses = JSON.parse(fs.readFileSync(addressesPath, "utf8")); - - if (!addresses[EVMX_CHAIN_ID]) { - throw new Error(`No addresses found for chain ID ${EVMX_CHAIN_ID}`); - } - - // Loop through each upgradeable contract - for (const contractName of upgradeableContracts) { - console.log(`\nProcessing ${contractName}...`); - - // Get the new implementation contract factory - const NewImplementation = await ethers.getContractFactory(contractName); - - // Get proxy address from JSON - const PROXY_ADDRESS = addresses[EVMX_CHAIN_ID][contractName]; - if (!PROXY_ADDRESS) { - console.log(`Contract address not found for ${contractName}`); - continue; - } - - try { - // Try to get current implementation address - const currentImplAddress = - await upgrades.erc1967.getImplementationAddress(PROXY_ADDRESS); - console.log( - `Current implementation address for ${contractName}: ${currentImplAddress}` - ); - - // Get the implementation address from JSON - const newImplementation = - addresses[EVMX_CHAIN_ID][`${contractName}Impl`]; - if (!newImplementation) { - console.log(`No implementation address found for ${contractName}`); - continue; - } - - if ( - currentImplAddress.toLowerCase() === newImplementation.toLowerCase() - ) { - console.log("Implementation is already up to date"); - continue; - } - - // Upgrade the proxy to point to the new implementation - console.log("Upgrading proxy..."); - const upgraded = await upgrades.upgradeProxy( - PROXY_ADDRESS, - NewImplementation - ); - await upgraded.deployed(); - - console.log("Proxy upgraded successfully"); - - // Verify the new implementation address - const updatedImplAddress = - await upgrades.erc1967.getImplementationAddress(PROXY_ADDRESS); - console.log("Updated implementation address:", updatedImplAddress); - } catch (error) { - if (error.message.includes("doesn't look like an ERC 1967 proxy")) { - console.log( - `${contractName} at ${PROXY_ADDRESS} is not a proxy contract, skipping...` - ); - continue; - } - throw error; - } - } -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/hardhat-scripts/deploy/sendToken.ts b/hardhat-scripts/deploy/sendToken.ts deleted file mode 100644 index 1c855e5d..00000000 --- a/hardhat-scripts/deploy/sendToken.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - ChainSlug, - ChainSocketAddresses, - DeploymentAddresses, -} from "@socket.tech/dl-core"; -import { getProviderFromChainSlug } from "../constants"; -import { Contract, Wallet } from "ethers"; -import { getInstance } from "./utils"; -import dev_addresses from "../../deployments/dev_addresses.json"; - -const chain = ChainSlug.ARBITRUM_SEPOLIA; -const to = "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC"; -const amount = "1000000000000000000"; - -export const main = async () => { - let addresses: DeploymentAddresses; - try { - addresses = dev_addresses as unknown as DeploymentAddresses; - - if (!addresses[chain]) return; - - const providerInstance = getProviderFromChainSlug(chain); - const socketSigner: Wallet = new Wallet( - process.env.SOCKET_SIGNER_KEY as string, - providerInstance - ); - - const addr: ChainSocketAddresses = addresses[chain]!; - if (!addr["integrations"]) return; - - const token: Contract = ( - await getInstance("SuperToken", addr["SuperToken"]) - ).connect(socketSigner); - - const tx = await token.transfer(to, amount); - - console.log( - `tokens transferred from ${socketSigner.address} to ${to} on ${chain} at tx hash: ${tx.hash}` - ); - await tx.wait(); - } catch (error) { - console.log("Error while sending transaction", error); - } -}; - -main() - .then(() => process.exit(0)) - .catch((error: Error) => { - console.error(error); - process.exit(1); - }); diff --git a/hardhat-scripts/deploy/utils/address.ts b/hardhat-scripts/deploy/utils/address.ts deleted file mode 100644 index 4fb2e634..00000000 --- a/hardhat-scripts/deploy/utils/address.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { ChainSlug, IntegrationTypes } from "@socket.tech/dl-core"; - -function getSwitchboardAddress( - chainSlug: ChainSlug | string, - integrationType: IntegrationTypes, - config: any -) { - if (integrationType === IntegrationTypes.fast) { - return config?.["FastSwitchboard"]; - } else if (integrationType === IntegrationTypes.fast2) { - return config?.["FastSwitchboard2"]; - } else if (integrationType === IntegrationTypes.optimistic) { - return config?.["OptimisticSwitchboard"]; - } else - return config?.["integrations"]?.[chainSlug]?.[integrationType]?.[ - "switchboard" - ]; -} - -function getCapacitorAddress( - chainSlug: ChainSlug, - integrationType: IntegrationTypes, - config: any -) { - return config?.["integrations"]?.[chainSlug]?.[integrationType]?.[ - "capacitor" - ]; -} - -function getDecapacitorAddress( - chainSlug: ChainSlug, - integrationType: IntegrationTypes, - config: any -) { - return config?.["integrations"]?.[chainSlug]?.[integrationType]?.[ - "decapacitor" - ]; -} - -export { getSwitchboardAddress, getCapacitorAddress, getDecapacitorAddress }; diff --git a/hardhat-scripts/deploy/utils/index.ts b/hardhat-scripts/deploy/utils/index.ts deleted file mode 100644 index e9b2ec3e..00000000 --- a/hardhat-scripts/deploy/utils/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./address"; -export * from "./utils"; diff --git a/hardhat-scripts/migration/migrate-proxies.ts b/hardhat-scripts/migration/migrate-proxies.ts new file mode 100644 index 00000000..ca8068c1 --- /dev/null +++ b/hardhat-scripts/migration/migrate-proxies.ts @@ -0,0 +1,220 @@ +import { ethers } from "hardhat"; +import { Contract, utils, Wallet } from "ethers"; +import { EVMX_CHAIN_ID, UPGRADE_VERSION } from "../config/config"; +import { getProviderFromChainSlug } from "../utils"; +import { ChainSlug } from "@socket.tech/socket-protocol-common"; +import { getAddresses } from "../utils"; +import { mode } from "../config/config"; +// Implementation slot from ERC1967 +const IMPLEMENTATION_SLOT = + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; + +const upgradeableContracts = [ + "AddressResolver", + "WatcherPrecompile", + "FeesManager", + "DeliveryHelper", + "AuctionManager", +]; + +export async function getImplementationAddress( + proxyAddress: string +): Promise { + const customProvider = new ethers.providers.JsonRpcProvider( + process.env.EVMX_RPC as string + ); + + // Fallback to standard storage slot for other proxy types + const implHex = await customProvider.getStorageAt( + proxyAddress, + IMPLEMENTATION_SLOT + ); + + return utils.getAddress("0x" + implHex.slice(-40)); +} + +async function setupSigner() { + const providerInstance = getProviderFromChainSlug(EVMX_CHAIN_ID as ChainSlug); + return new ethers.Wallet( + process.env.WATCHER_PRIVATE_KEY as string, + providerInstance + ); +} + +async function setupProxyFactory(addresses: any, signer: Wallet) { + let proxyFactory = await ethers.getContractAt( + "ERC1967Factory", + addresses[EVMX_CHAIN_ID].ERC1967Factory + ); + return proxyFactory.connect(signer); +} + +async function upgradeContract( + contractName: string, + addresses: any, + proxyFactory: Contract, + signer: Wallet +) { + console.log(`\nProcessing ${contractName}...`); + + const PROXY_ADDRESS = addresses[EVMX_CHAIN_ID][contractName]; + if (!PROXY_ADDRESS) { + console.log(`Contract address not found for ${contractName}`); + return; + } + + try { + const currentImplAddress = await getImplementationAddress(PROXY_ADDRESS); + console.log( + `Current implementation for ${contractName}: ${currentImplAddress}` + ); + + const newImplementation = addresses[EVMX_CHAIN_ID][`${contractName}Impl`]; + if (!newImplementation) { + console.log(`No implementation address found for ${contractName}`); + return; + } + + let contract = await ethers.getContractAt(contractName, PROXY_ADDRESS); + contract = contract.connect(signer); + + await verifyAndUpgradeContract( + contract, + contractName, + currentImplAddress, + newImplementation, + proxyFactory, + signer + ); + } catch (error) { + console.error(`Error upgrading ${contractName}:`, error); + process.exit(1); + } +} + +async function verifyAndUpgradeContract( + contract: Contract, + contractName: string, + currentImplAddress: string, + newImplementation: string, + proxyFactory: Contract, + signer: Wallet +) { + let version; + try { + version = await contract.version(); + console.log("Version on contract before upgrade:", version); + } catch (error) { + console.log("version variable not found"); + } + + if (contractName === "AddressResolver") + await verifyBeaconImplementation(contract, signer); + + if (currentImplAddress.toLowerCase() === newImplementation.toLowerCase()) { + console.log("Implementation is already up to date"); + return; + } + + await performUpgrade(contract, proxyFactory, newImplementation); + await verifyUpgrade(contract, newImplementation, contractName, signer); +} + +async function performUpgrade( + contract: Contract, + proxyFactory: Contract, + newImplementation: string +) { + console.log("Upgrading proxy..."); + const initializeFn = contract.interface.getFunction("initialize"); + const initData = contract.interface.encodeFunctionData(initializeFn, [ + UPGRADE_VERSION, + ]); + + const tx = await proxyFactory.upgradeAndCall( + contract.address, + newImplementation, + initData + ); + console.log("tx", tx.hash); + await tx.wait(); +} + +async function verifyUpgrade( + contract: Contract, + newImplementation: string, + contractName: string, + signer: Wallet +) { + const updatedImplAddress = await getImplementationAddress(contract.address); + console.log("New implementation:", updatedImplAddress); + + if (updatedImplAddress.toLowerCase() !== newImplementation.toLowerCase()) { + throw new Error("Upgrade verification failed - implementation mismatch"); + } + + const version = await contract.version(); + console.log("Version on contract after upgrade:", version); + + if (contractName === "AddressResolver") { + await verifyBeaconImplementation(contract, signer); + } + + console.log("Upgrade successful and verified"); +} + +async function verifyBeaconImplementation(contract: Contract, signer: Wallet) { + console.log("Verifying beacon implementations..."); + const forwarderBeaconAddress = await contract.forwarderBeacon(); + const forwarderImplementationAddress = + await contract.forwarderImplementation(); + const asyncPromiseBeaconAddress = await contract.asyncPromiseBeacon(); + const asyncPromiseImplementationAddress = + await contract.asyncPromiseImplementation(); + + const upgradeableBeaconAbi = [ + "function implementation() view returns (address)", + ]; + + const forwarderBeacon = new ethers.Contract( + forwarderBeaconAddress, + upgradeableBeaconAbi + ); + const asyncPromiseBeacon = new ethers.Contract( + asyncPromiseBeaconAddress, + upgradeableBeaconAbi + ); + + // Verify forwarder beacon implementation + const forwarderBeaconImplementation = await forwarderBeacon + .connect(signer) + .implementation(); + if ( + forwarderBeaconImplementation.toLowerCase() !== + forwarderImplementationAddress.toLowerCase() + ) { + throw new Error("Forwarder beacon implementation mismatch"); + } + + // Verify async promise beacon implementation + const asyncPromiseBeaconImplementation = await asyncPromiseBeacon + .connect(signer) + .implementation(); + if ( + asyncPromiseBeaconImplementation.toLowerCase() !== + asyncPromiseImplementationAddress.toLowerCase() + ) { + throw new Error("Async promise beacon implementation mismatch"); + } +} + +async function main() { + // @ts-ignore - Hardhat Runtime Environment will be injected by hardhat + const addresses = getAddresses(mode); + const signer = await setupSigner(); + const proxyFactory = await setupProxyFactory(addresses, signer); + + for (const contractName of upgradeableContracts) { + await upgradeContract(contractName, addresses, proxyFactory, signer); + } +} diff --git a/hardhat-scripts/utils/getErrorCodes.ts b/hardhat-scripts/misc-scripts/getErrorCodes.ts similarity index 100% rename from hardhat-scripts/utils/getErrorCodes.ts rename to hardhat-scripts/misc-scripts/getErrorCodes.ts diff --git a/hardhat-scripts/misc-scripts/getEventTopics.ts b/hardhat-scripts/misc-scripts/getEventTopics.ts new file mode 100644 index 00000000..09339479 --- /dev/null +++ b/hardhat-scripts/misc-scripts/getEventTopics.ts @@ -0,0 +1,78 @@ +import fs from "fs"; +import path from "path"; +import { ethers } from "ethers"; + +// Function to recursively get all .sol files +function getSolFiles(dir: string, fileList: string[] = []): string[] { + const files = fs.readdirSync(dir); + + files.forEach((file) => { + const filePath = path.join(dir, file); + if (fs.statSync(filePath).isDirectory()) { + fileList = getSolFiles(filePath, fileList); + } else if (path.extname(file) === ".sol") { + fileList.push(filePath); + } + }); + + return fileList; +} + +// Function to extract event topics from contract file +function extractEventTopics(filePath: string): string[] { + const content = fs.readFileSync(filePath, "utf8"); + const eventRegex = /event\s+(\w+)\s*\(([\s\S]*?)\);/g; + const topics: string[] = []; + + let match; + while ((match = eventRegex.exec(content)) !== null) { + const eventName = match[1]; + const params = match[2] + .split(",") + .map((param) => param.trim().split(" ")[0]) // Extract only the type + .join(","); + const topic = ethers.utils.id(`${eventName}(${params})`); + topics.push(`${eventName} -> ${topic}`); + } + + return topics; +} + +// Main function +async function main() { + const contractsDir = path.join(__dirname, "../../contracts"); + const topicsDir = path.join(__dirname, "../../EventTopics.md"); + const solFiles = getSolFiles(contractsDir); + + console.log("Event Topics Found:"); + console.log("-------------------"); + + let mdContent = "# Event Topics\n\n"; + + for (const file of solFiles) { + const topics = extractEventTopics(file); + if (topics.length > 0) { + console.log(`\nIn ${path.relative(contractsDir, file)}:`); + mdContent += `\n## ${path.relative(contractsDir, file)}\n\n`; + mdContent += "| Event | Topic |\n|-------|-------|"; + + for (const topic of topics) { + console.log(topic); + const [eventName, topicHash] = topic.split(" -> "); + mdContent += `\n| \`${eventName}\` | \`${topicHash}\` |`; + } + mdContent += "\n"; + } + } + + // Write to EventTopics.md file + fs.writeFileSync(topicsDir, mdContent); + console.log("\nEvent topics have been written to EventTopics.md"); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/hardhat-scripts/utils/updateLastBlocks.ts b/hardhat-scripts/misc-scripts/updateLastBlocks.ts similarity index 77% rename from hardhat-scripts/utils/updateLastBlocks.ts rename to hardhat-scripts/misc-scripts/updateLastBlocks.ts index 6a071319..e4b36946 100644 --- a/hardhat-scripts/utils/updateLastBlocks.ts +++ b/hardhat-scripts/misc-scripts/updateLastBlocks.ts @@ -1,17 +1,13 @@ -import fs from "fs"; import dotenv from "dotenv"; -dotenv.config(); -import { getProviderFromChainSlug } from "../constants/networks"; +import fs from "fs"; import path from "path"; -import { ethers } from "ethers"; -const DEPLOYMENT_FILE = path.join( - __dirname, - "../../deployments/dev_addresses.json" -); - +import { getProviderFromChainSlug } from "../utils"; +import { getAddresses } from "../utils"; +import { mode } from "../config/config"; +dotenv.config(); async function updateLastBlocks() { // Read deployment addresses - const addresses = JSON.parse(fs.readFileSync(DEPLOYMENT_FILE, "utf8")); + const addresses = getAddresses(mode); const chains = Object.keys(addresses).map((chainSlug) => Number(chainSlug)); // Update each chain's start block @@ -36,7 +32,10 @@ async function updateLastBlocks() { } // Write updated data back to file - fs.writeFileSync(DEPLOYMENT_FILE, JSON.stringify(addresses, null, 2)); + fs.writeFileSync( + path.join(__dirname, `../../deployments/${mode}_addresses.json`), + JSON.stringify(addresses, null, 2) + ); console.log("Successfully updated start blocks in deployment file"); } diff --git a/tasks/accounts.ts b/hardhat-scripts/utils/accounts.ts similarity index 100% rename from tasks/accounts.ts rename to hardhat-scripts/utils/accounts.ts diff --git a/hardhat-scripts/utils/address.ts b/hardhat-scripts/utils/address.ts new file mode 100644 index 00000000..d74f1313 --- /dev/null +++ b/hardhat-scripts/utils/address.ts @@ -0,0 +1,17 @@ +import dev_addresses from "../../deployments/dev_addresses.json"; +import stage_addresses from "../../deployments/stage_addresses.json"; +import prod_addresses from "../../deployments/prod_addresses.json"; +import { DeploymentMode } from "@socket.tech/socket-protocol-common"; + +export const getAddresses = (mode: DeploymentMode) => { + switch (mode) { + case DeploymentMode.DEV: + return dev_addresses; + case DeploymentMode.STAGE: + return stage_addresses; + case DeploymentMode.PROD: + return prod_addresses; + default: + throw new Error(`Invalid deployment mode: ${mode}`); + } +}; diff --git a/hardhat-scripts/deploy/utils/utils.ts b/hardhat-scripts/utils/deployUtils.ts similarity index 87% rename from hardhat-scripts/deploy/utils/utils.ts rename to hardhat-scripts/utils/deployUtils.ts index d952e5c6..a3accdf2 100644 --- a/hardhat-scripts/deploy/utils/utils.ts +++ b/hardhat-scripts/utils/deployUtils.ts @@ -6,16 +6,16 @@ import { Address } from "hardhat-deploy/dist/types"; import path from "path"; import fs from "fs"; import { + ChainAddressesObj, ChainSlug, - ChainSocketAddresses, - DeploymentAddresses, DeploymentMode, -} from "@socket.tech/dl-core"; +} from "@socket.tech/socket-protocol-common"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; -import { overrides } from "../config"; +import { overrides } from "../utils"; import { VerifyArgs } from "../verify"; +import { DeploymentAddresses } from "../constants"; -export const deploymentsPath = path.join(__dirname, `/../../../deployments/`); +export const deploymentsPath = path.join(__dirname, `/../../deployments/`); export const deployedAddressPath = (mode: DeploymentMode) => deploymentsPath + `${mode}_addresses.json`; @@ -32,7 +32,7 @@ export const getChainRoleHash = (role: string, chainSlug: number) => ); export interface DeployParams { - addresses: ChainSocketAddresses; + addresses: ChainAddressesObj; mode: DeploymentMode; signer: SignerWithAddress | Wallet; currentChainSlug: number; @@ -140,7 +140,7 @@ export const integrationType = (integrationName: string) => ); export const storeAddresses = async ( - addresses: ChainSocketAddresses, + addresses: ChainAddressesObj, chainSlug: ChainSlug, mode: DeploymentMode ) => { @@ -159,7 +159,7 @@ export const storeAddresses = async ( // Sort addresses object by key name for readability const sortedAddresses = Object.fromEntries( Object.entries(addresses).sort(([keyA], [keyB]) => keyA.localeCompare(keyB)) - ) as ChainSocketAddresses; + ) as ChainAddressesObj; deploymentAddresses[chainSlug] = sortedAddresses; fs.writeFileSync( @@ -239,7 +239,7 @@ export const storeVerificationParams = async ( }; export const getChainSlugsFromDeployedAddresses = async ( - mode = DeploymentMode.DEV + mode: DeploymentMode ) => { if (!fs.existsSync(deploymentsPath)) { await fs.promises.mkdir(deploymentsPath); @@ -258,8 +258,8 @@ export const getChainSlugsFromDeployedAddresses = async ( export const getRelayUrl = async (mode: DeploymentMode) => { switch (mode) { - case DeploymentMode.SURGE: - return process.env.RELAYER_URL_SURGE; + case DeploymentMode.STAGE: + return process.env.RELAYER_URL_STAGE; case DeploymentMode.PROD: return process.env.RELAYER_URL_PROD; default: @@ -269,8 +269,8 @@ export const getRelayUrl = async (mode: DeploymentMode) => { export const getRelayAPIKEY = (mode: DeploymentMode) => { switch (mode) { - case DeploymentMode.SURGE: - return process.env.RELAYER_API_KEY_SURGE; + case DeploymentMode.STAGE: + return process.env.RELAYER_API_KEY_STAGE; case DeploymentMode.PROD: return process.env.RELAYER_API_KEY_PROD; default: @@ -287,30 +287,11 @@ export const getAPIBaseURL = (mode: DeploymentMode) => { } }; -export const getAddresses = async ( - chainSlug: ChainSlug, - mode = DeploymentMode.DEV -) => { - if (!fs.existsSync(deploymentsPath)) { - await fs.promises.mkdir(deploymentsPath); - } - - const addressesPath = deploymentsPath + `${mode}_addresses.json`; - const outputExists = fs.existsSync(addressesPath); - let deploymentAddresses: DeploymentAddresses = {}; - if (outputExists) { - const deploymentAddressesString = fs.readFileSync(addressesPath, "utf-8"); - deploymentAddresses = JSON.parse(deploymentAddressesString); - } - - return deploymentAddresses[chainSlug]; -}; - -export const createObj = function( - obj: ChainSocketAddresses, +export const createObj = function ( + obj: ChainAddressesObj, keys: string[], value: any -): ChainSocketAddresses { +): ChainAddressesObj { if (keys.length === 1) { obj[keys[0]] = value; } else { diff --git a/hardhat-scripts/utils/index.ts b/hardhat-scripts/utils/index.ts new file mode 100644 index 00000000..b0ec6153 --- /dev/null +++ b/hardhat-scripts/utils/index.ts @@ -0,0 +1,5 @@ +export * from "./address"; +export * from "./networks"; +export * from "./overrides"; +export * from "./accounts"; +export * from "./deployUtils"; diff --git a/hardhat-scripts/constants/networks.ts b/hardhat-scripts/utils/networks.ts similarity index 84% rename from hardhat-scripts/constants/networks.ts rename to hardhat-scripts/utils/networks.ts index f5be446d..b2f55ebe 100644 --- a/hardhat-scripts/constants/networks.ts +++ b/hardhat-scripts/utils/networks.ts @@ -6,8 +6,8 @@ import { hardhatChainNameToSlug, HardhatChainName, chainSlugToHardhatChainName, -} from "@socket.tech/dl-core"; -import { BASE_SEPOLIA_CHAIN_ID, EVMX_CHAIN_ID } from "./constants"; +} from "@socket.tech/socket-protocol-common"; +import { EVMX_CHAIN_ID } from "../config/config"; const dotenvConfigPath: string = process.env.DOTENV_CONFIG_PATH || "./.env"; dotenvConfig({ path: resolve(__dirname, dotenvConfigPath) }); @@ -22,13 +22,10 @@ function createReverseEnumMap(enumObj: any) { } export const rpcKeys = (chainSlug: ChainSlug) => { - if (chainSlug == (BASE_SEPOLIA_CHAIN_ID as ChainSlug)) { - return "BASE_SEPOLIA_RPC"; - } else if (chainSlug == (EVMX_CHAIN_ID as ChainSlug)) { + if (chainSlug == (EVMX_CHAIN_ID as ChainSlug)) { return "EVMX_RPC"; } let chainName = chainSlugToHardhatChainName[chainSlug].toString(); - // console.log("chainName", chainName); chainName = chainName.replace("-", "_"); return `${chainName.toUpperCase()}_RPC`; }; diff --git a/hardhat-scripts/constants/overrides.ts b/hardhat-scripts/utils/overrides.ts similarity index 73% rename from hardhat-scripts/constants/overrides.ts rename to hardhat-scripts/utils/overrides.ts index 63159ee8..7d9ccc96 100644 --- a/hardhat-scripts/constants/overrides.ts +++ b/hardhat-scripts/utils/overrides.ts @@ -1,6 +1,7 @@ -import { ChainSlug } from "@socket.tech/dl-core"; -import { BigNumber, providers } from "ethers"; -import { EVMX_CHAIN_ID } from "./constants"; +import { ChainSlug } from "@socket.tech/socket-protocol-common"; +import { BigNumber, BigNumberish, providers } from "ethers"; +import { EVMX_CHAIN_ID } from "../config/config"; +import { getProviderFromChainSlug } from "./networks"; const defaultType = 0; @@ -27,12 +28,22 @@ export const chainOverrides: { // gasPrice: 212_000_000_000, }, [EVMX_CHAIN_ID as ChainSlug]: { - // type: 1, - gasLimit: 1_000_000_000, - // gasPrice: 212_000_000_000, + type: 0, + // gasLimit: 1_000_000_000, + gasPrice: 0, }, }; +export const overrides = async ( + chain: ChainSlug | number +): Promise<{ + type?: number | undefined; + gasLimit?: BigNumberish | undefined; + gasPrice?: BigNumberish | undefined; +}> => { + return await getOverrides(chain, getProviderFromChainSlug(chain)); +}; + export const getOverrides = async ( chainSlug: ChainSlug, provider: providers.StaticJsonRpcProvider diff --git a/hardhat-scripts/utils/sign.ts b/hardhat-scripts/utils/sign.ts new file mode 100644 index 00000000..2bd67a08 --- /dev/null +++ b/hardhat-scripts/utils/sign.ts @@ -0,0 +1,19 @@ +import { ethers, Wallet } from "ethers"; +import { EVMX_CHAIN_ID, mode } from "../config/config"; +import { EVMxCoreContracts } from "../constants"; +import { getAddresses } from "./address"; + +export const signWatcherMessage = async (encodedMessage: string) => { + const signatureNonce = Date.now(); + const signer = new Wallet(process.env.WATCHER_PRIVATE_KEY!); + const watcherPrecompileAddress = + getAddresses(mode)[EVMX_CHAIN_ID][EVMxCoreContracts.WatcherPrecompile]; + const digest = ethers.utils.keccak256( + ethers.utils.defaultAbiCoder.encode( + ["address", "uint32", "uint256", "bytes"], + [watcherPrecompileAddress, EVMX_CHAIN_ID, signatureNonce, encodedMessage] + ) + ); + const signature = await signer.signMessage(ethers.utils.arrayify(digest)); + return { nonce: signatureNonce, signature }; +}; diff --git a/hardhat-scripts/verify/index.ts b/hardhat-scripts/verify/index.ts new file mode 100644 index 00000000..641f493c --- /dev/null +++ b/hardhat-scripts/verify/index.ts @@ -0,0 +1 @@ +export * from "./verify"; diff --git a/hardhat-scripts/deploy/verify.ts b/hardhat-scripts/verify/verify.ts similarity index 61% rename from hardhat-scripts/deploy/verify.ts rename to hardhat-scripts/verify/verify.ts index b43a67d5..4afabe63 100644 --- a/hardhat-scripts/deploy/verify.ts +++ b/hardhat-scripts/verify/verify.ts @@ -1,37 +1,41 @@ -import hre from "hardhat"; -import { storeUnVerifiedParams, verify } from "./utils/utils"; import { - HardhatChainName, - ChainSlugToKey, ChainSlug, + ChainSlugToKey, DeploymentMode, -} from "@socket.tech/dl-core"; -import path from "path"; -import fs from "fs"; -import { - BASE_SEPOLIA_CHAIN_ID, - EVMX_CHAIN_ID, -} from "../constants/constants"; + HardhatChainName, +} from "@socket.tech/socket-protocol-common"; +import hre from "hardhat"; +import { EVMX_CHAIN_ID, mode } from "../config/config"; +import { storeUnVerifiedParams, verify } from "../utils"; + +import dev_verification from "../../deployments/dev_verification.json"; +import prod_verification from "../../deployments/prod_verification.json"; +import stage_verification from "../../deployments/stage_verification.json"; + +const getVerificationParams = (mode: DeploymentMode) => { + switch (mode) { + case DeploymentMode.DEV: + return dev_verification; + case DeploymentMode.STAGE: + return stage_verification; + case DeploymentMode.PROD: + return prod_verification; + default: + throw new Error(`Invalid deployment mode: ${mode}`); + } +}; export type VerifyParams = { [chain in HardhatChainName]?: VerifyArgs[]; }; export type VerifyArgs = [string, string, string, any[]]; -const deploymentsPath = path.join(__dirname, `/../../deployments/`); /** * Deploys network-independent socket contracts */ export const main = async () => { try { - const path = deploymentsPath + `dev_verification.json`; - if (!fs.existsSync(path)) { - throw new Error("addresses.json not found"); - } - let verificationParams: VerifyParams = JSON.parse( - fs.readFileSync(path, "utf-8") - ); - + const verificationParams = getVerificationParams(mode); const chains = Object.keys(verificationParams); if (!chains) return; @@ -39,9 +43,7 @@ export const main = async () => { const chain = parseInt(chains[chainIndex]) as ChainSlug; let chainName: string; console.log({ chain }); - if (chain == (BASE_SEPOLIA_CHAIN_ID as ChainSlug)) { - chainName = "base_sepolia"; - } else if (chain == (EVMX_CHAIN_ID as ChainSlug)) { + if (chain == (EVMX_CHAIN_ID as ChainSlug)) { chainName = "EVMX"; } else { chainName = ChainSlugToKey[chain]; @@ -62,11 +64,7 @@ export const main = async () => { } } - await storeUnVerifiedParams( - unverifiedChainParams, - chain, - DeploymentMode.DEV - ); + await storeUnVerifiedParams(unverifiedChainParams, chain, mode); } } catch (error) { console.log("Error in verifying contracts", error); diff --git a/hardhat.config.ts b/hardhat.config.ts index 02f369b9..72ce85e8 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -14,19 +14,17 @@ import type { import { resolve } from "path"; import fs from "fs"; -import "./tasks/accounts"; -import { getJsonRpcUrl } from "./hardhat-scripts/constants/networks"; +import "./hardhat-scripts/utils/accounts"; +import { getJsonRpcUrl } from "./hardhat-scripts/utils/networks"; import { ChainId, ChainSlug, ChainSlugToId, HardhatChainName, hardhatChainNameToSlug, -} from "@socket.tech/dl-core"; -import { - BASE_SEPOLIA_CHAIN_ID, - EVMX_CHAIN_ID, -} from "./hardhat-scripts/constants/constants"; +} from "@socket.tech/socket-protocol-common"; +import { EVMX_CHAIN_ID } from "./hardhat-scripts/config/config"; +import { BASE_SEPOLIA_CHAIN_ID } from "./hardhat-scripts/constants"; const dotenvConfigPath: string = process.env.DOTENV_CONFIG_PATH || "./.env"; dotenvConfig({ path: resolve(__dirname, dotenvConfigPath) }); @@ -102,7 +100,7 @@ const config: HardhatUserConfig = { sepolia: process.env.ETHERSCAN_API_KEY || "", optimisticEthereum: process.env.OPTIMISM_API_KEY || "", optimisticTestnet: process.env.OPTIMISM_API_KEY || "", - offChainVM: "none", + evmx: "none", }, customChains: [ { @@ -130,11 +128,11 @@ const config: HardhatUserConfig = { }, }, { - network: "offChainVM", + network: "evmx", chainId: EVMX_CHAIN_ID, urls: { - apiURL: "https://explorer-socket-composer-testnet.t.conduit.xyz/api", - browserURL: "https://explorer-socket-composer-testnet.t.conduit.xyz", + apiURL: "", + browserURL: "", }, }, ], @@ -162,9 +160,10 @@ const config: HardhatUserConfig = { solidity: { version: "0.8.22", settings: { + evmVersion: "paris", optimizer: { enabled: true, - runs: 999999, + runs: 999, details: { yul: true, yulDetails: { diff --git a/images/architecture.png b/images/architecture.png deleted file mode 100644 index 60f1cf5c..00000000 Binary files a/images/architecture.png and /dev/null differ diff --git a/impAddresses.json b/impAddresses.json deleted file mode 100644 index 3ca3b357..00000000 --- a/impAddresses.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "watcher": "0xb62505feacC486e809392c65614Ce4d7b051923b", - "socketContractsDeployer": "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18", - "transmitter": "0x138e9840861c983dc0bb9b3e941fb7c0e9ade320" -} diff --git a/lib.tsconfig.json b/lib.tsconfig.json index c918562d..ba2f6b86 100644 --- a/lib.tsconfig.json +++ b/lib.tsconfig.json @@ -6,7 +6,10 @@ "esModuleInterop": true, "declaration": true, "resolveJsonModule": true, - "skipLibCheck": true + "skipLibCheck": true, + "moduleResolution": "node", + "allowJs": true }, - "include": ["./src", "./deployments"] + "include": ["src/**/*.ts", "lib/**/*.ts", "deployments/"], + "exclude": ["node_modules", "dist"] } diff --git a/package.json b/package.json index 04c54997..aee7ad7e 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "publishConfig": { "access": "public" }, - "version": "1.0.8", + "version": "1.0.15", "description": "socket protocol", "scripts": { "build": "hardhat export-abi && tsc --project lib.tsconfig.json", @@ -20,22 +20,25 @@ "compile": "forge build", "deploy": "bash setupInfraContracts.sh" }, + "pre-commit": [], "author": "", "license": "ISC", "devDependencies": { - "@nomiclabs/hardhat-ethers": "2.2.3", + "@aws-sdk/client-s3": "^3.670.0", "@nomicfoundation/hardhat-verify": "^2.0.12", - "@openzeppelin/hardhat-upgrades": "1.22.1", - "@socket.tech/dl-core": "^2.35.0", + "@nomiclabs/hardhat-ethers": "2.2.3", + "@socket.tech/socket-protocol-common": "1.1.31", "@typechain/ethers-v5": "^10.0.0", "@typechain/hardhat": "6.0.0", "dotenv": "^16.0.3", "ethers": "5.6.6", + "forge-std": "^1.1.2", "hardhat": "2.12.2", "hardhat-abi-exporter": "2.10.1", "hardhat-change-network": "^0.0.7", "hardhat-deploy": "0.11.20", "hardhat-preprocessor": "0.1.4", + "http-server": "^14.1.1", "pre-commit": "^1.2.2", "prettier": "^2.3.1", "prettier-plugin-solidity": "^1.4.1", @@ -43,9 +46,5 @@ "typechain": "^8.0.0", "typescript": "^4.6.4" }, - "dependencies": { - "@aws-sdk/client-s3": "^3.670.0", - "forge-std": "^1.1.2", - "http-server": "^14.1.1" - } + "dependencies": {} } diff --git a/remappings.txt b/remappings.txt index ab585aad..1cf3bb7d 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,5 +1,4 @@ ds-test/=lib/forge-std/lib/ds-test/src/ forge-std/=lib/forge-std/src/ solmate/=lib/solmate/src/ -openzeppelin-contracts/=lib/openzeppelin-contracts/ solady/=lib/solady/src/ \ No newline at end of file diff --git a/script/admin/UpdateAppEVMxLimits.s.sol b/script/admin/UpdateAppEVMxLimits.s.sol index a3e005b9..94b52c09 100644 --- a/script/admin/UpdateAppEVMxLimits.s.sol +++ b/script/admin/UpdateAppEVMxLimits.s.sol @@ -2,9 +2,9 @@ pragma solidity ^0.8.13; import "forge-std/Script.sol"; -import {WatcherPrecompile} from "../../contracts/watcherPrecompile/WatcherPrecompile.sol"; -import {UpdateLimitParams} from "../../contracts/common/Structs.sol"; -import {SCHEDULE, QUERY, FINALIZE} from "../../contracts/common/Constants.sol"; +import {WatcherPrecompile} from "../../contracts/protocol/watcherPrecompile/WatcherPrecompile.sol"; +import {UpdateLimitParams} from "../../contracts/protocol/utils/common/Structs.sol"; +import {SCHEDULE, QUERY, FINALIZE} from "../../contracts/protocol/utils/common/Constants.sol"; contract UpdateLimitsScript is Script { function run() external { diff --git a/script/mock/DeployVM.s.sol b/script/admin/mock/DeployEVMx.s.sol similarity index 75% rename from script/mock/DeployVM.s.sol rename to script/admin/mock/DeployEVMx.s.sol index 31ecee3f..e3f71807 100644 --- a/script/mock/DeployVM.s.sol +++ b/script/admin/mock/DeployEVMx.s.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.0; import {Script} from "forge-std/Script.sol"; import {console} from "forge-std/console.sol"; -import {MockWatcherPrecompile} from "../../contracts/mock/MockWatcherPrecompile.sol"; -import {MockSocket} from "../../contracts/mock/MockSocket.sol"; -contract DeployVM is Script { +import {MockWatcherPrecompile} from "../../../test/mock/MockWatcherPrecompile.sol"; + +contract DeployEVMx is Script { function run() external { string memory rpc = vm.envString("EVMX_RPC"); vm.createSelectFork(rpc); diff --git a/script/mock/DeploySocket.s.sol b/script/admin/mock/DeploySocket.s.sol similarity index 79% rename from script/mock/DeploySocket.s.sol rename to script/admin/mock/DeploySocket.s.sol index d69bad3a..603d8eea 100644 --- a/script/mock/DeploySocket.s.sol +++ b/script/admin/mock/DeploySocket.s.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.0; import {Script} from "forge-std/Script.sol"; import {console} from "forge-std/console.sol"; -import {MockWatcherPrecompile} from "../../contracts/mock/MockWatcherPrecompile.sol"; -import {MockSocket} from "../../contracts/mock/MockSocket.sol"; +import {MockSocket} from "../../../test/mock/MockSocket.sol"; + contract DeploySocket is Script { function run() external { string memory rpc = vm.envString("ARBITRUM_SEPOLIA_RPC"); diff --git a/script/counter-inbox/CheckGatewayCounter.s.sol b/script/counter-inbox/CheckGatewayCounter.s.sol deleted file mode 100644 index c9855b7d..00000000 --- a/script/counter-inbox/CheckGatewayCounter.s.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {CounterInboxAppGateway} from "../../contracts/apps/counter-inbox/CounterInboxAppGateway.sol"; - -contract CheckGatewayCounter is Script { - function run() external { - string memory rpc = vm.envString("EVMX_RPC"); - vm.createSelectFork(rpc); - - address gatewayAddress = vm.envAddress("APP_GATEWAY"); - CounterInboxAppGateway gateway = CounterInboxAppGateway(gatewayAddress); - - // Log the value of the counter variable on CounterInboxAppGateway - uint256 counterValue = gateway.counter(); - console.log("Counter value on CounterInboxAppGateway:"); - console.log(counterValue); - } -} diff --git a/script/counter-inbox/DeployCounterAndGateway.s.sol b/script/counter-inbox/DeployCounterAndGateway.s.sol deleted file mode 100644 index d18d6987..00000000 --- a/script/counter-inbox/DeployCounterAndGateway.s.sol +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {CounterInbox} from "../../contracts/apps/counter-inbox/CounterInbox.sol"; -import {CounterInboxAppGateway} from "../../contracts/apps/counter-inbox/CounterInboxAppGateway.sol"; -import {Fees} from "../../contracts/common/Structs.sol"; -import {ETH_ADDRESS, FAST} from "../../contracts/common/Constants.sol"; - -contract DeployCounterAndGateway is Script { - function run() external { - address addressResolver = vm.envAddress("ADDRESS_RESOLVER"); - address auctionManager = vm.envAddress("AUCTION_MANAGER"); - - string memory arbRpc = vm.envString("ARBITRUM_SEPOLIA_RPC"); - vm.createSelectFork(arbRpc); - uint256 arbDeployerPrivateKey = vm.envUint("SPONSOR_KEY"); - vm.startBroadcast(arbDeployerPrivateKey); - - CounterInbox inbox = new CounterInbox(); - console.log("CounterInbox:", address(inbox)); - - vm.stopBroadcast(); - - string memory offChainRpc = vm.envString("EVMX_RPC"); - vm.createSelectFork(offChainRpc); - uint256 offChainDeployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(offChainDeployerPrivateKey); - - Fees memory fees = Fees({ - feePoolChain: 421614, - feePoolToken: ETH_ADDRESS, - amount: 0.001 ether - }); - - CounterInboxAppGateway gateway = new CounterInboxAppGateway( - addressResolver, - auctionManager, - address(inbox), - 421614, - fees - ); - - console.log("CounterInboxAppGateway:", address(gateway)); - - vm.stopBroadcast(); - } -} diff --git a/script/counter-inbox/Increment.s.sol b/script/counter-inbox/Increment.s.sol deleted file mode 100644 index 537ac5d6..00000000 --- a/script/counter-inbox/Increment.s.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {CounterInbox} from "../../contracts/apps/counter-inbox/CounterInbox.sol"; -import {CounterInboxAppGateway} from "../../contracts/apps/counter-inbox/CounterInboxAppGateway.sol"; -import {Fees} from "../../contracts/common/Structs.sol"; -import {ETH_ADDRESS, FAST} from "../../contracts/common/Constants.sol"; - -contract Increment is Script { - function run() external { - address gateway = vm.envAddress("APP_GATEWAY"); - address socket = vm.envAddress("SOCKET"); - address switchboard = vm.envAddress("SWITCHBOARD"); - string memory arbRpc = vm.envString("ARBITRUM_SEPOLIA_RPC"); - vm.createSelectFork(arbRpc); - uint256 arbDeployerPrivateKey = vm.envUint("SPONSOR_KEY"); - vm.startBroadcast(arbDeployerPrivateKey); - address counterInbox = vm.envAddress("COUNTER_INBOX"); - - CounterInbox inbox = CounterInbox(counterInbox); - inbox.connectSocket(address(gateway), socket, switchboard); - inbox.increaseOnGateway(100); - - vm.stopBroadcast(); - } -} diff --git a/script/counter/deployEVMxCounterApp.s.sol b/script/counter/DeployEVMxCounterApp.s.sol similarity index 60% rename from script/counter/deployEVMxCounterApp.s.sol rename to script/counter/DeployEVMxCounterApp.s.sol index 656a74e2..05d9af02 100644 --- a/script/counter/deployEVMxCounterApp.s.sol +++ b/script/counter/DeployEVMxCounterApp.s.sol @@ -3,15 +3,13 @@ pragma solidity ^0.8.0; import {Script} from "forge-std/Script.sol"; import {console} from "forge-std/console.sol"; -import {CounterAppGateway} from "../../contracts/apps//counter/CounterAppGateway.sol"; -import {CounterDeployer} from "../../contracts/apps//counter/CounterDeployer.sol"; -import {Fees} from "../../contracts/common/Structs.sol"; -import {ETH_ADDRESS, FAST} from "../../contracts/common/Constants.sol"; +import {CounterAppGateway} from "../../test/apps/app-gateways/counter/CounterAppGateway.sol"; +import {Fees} from "../../contracts/protocol/utils/common/Structs.sol"; +import {ETH_ADDRESS} from "../../contracts/protocol/utils/common/Constants.sol"; contract CounterDeploy is Script { function run() external { address addressResolver = vm.envAddress("ADDRESS_RESOLVER"); - address auctionManager = vm.envAddress("AUCTION_MANAGER"); string memory rpc = vm.envString("EVMX_RPC"); vm.createSelectFork(rpc); @@ -25,19 +23,14 @@ contract CounterDeploy is Script { amount: 0.001 ether }); - CounterDeployer deployer = new CounterDeployer(addressResolver, auctionManager, FAST, fees); - CounterAppGateway gateway = new CounterAppGateway( addressResolver, - address(deployer), - auctionManager, fees ); console.log("Contracts deployed:"); - console.log("CounterDeployer:", address(deployer)); console.log("CounterAppGateway:", address(gateway)); console.log("counterId:"); - console.logBytes32(deployer.counter()); + console.logBytes32(gateway.counter()); } } diff --git a/script/parallel-counter/deployOnchain.s.sol b/script/counter/DeployOnchainCounters.s.sol similarity index 50% rename from script/parallel-counter/deployOnchain.s.sol rename to script/counter/DeployOnchainCounters.s.sol index ed8dd9c0..65b00d4c 100644 --- a/script/parallel-counter/deployOnchain.s.sol +++ b/script/counter/DeployOnchainCounters.s.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.0; import {Script} from "forge-std/Script.sol"; import {console} from "forge-std/console.sol"; -import {ParallelCounterDeployer} from "../../contracts/apps/parallel-counter/ParallelCounterDeployer.sol"; -import {ETH_ADDRESS} from "../../contracts/common/Constants.sol"; +import {ETH_ADDRESS} from "../../contracts/protocol/utils/common/Constants.sol"; +import {CounterAppGateway} from "../../test/apps/app-gateways/counter/CounterAppGateway.sol"; contract CounterDeployOnchain is Script { function run() external { @@ -15,15 +15,11 @@ contract CounterDeployOnchain is Script { uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); vm.startBroadcast(deployerPrivateKey); - ParallelCounterDeployer deployer = ParallelCounterDeployer(vm.envAddress("DEPLOYER")); + CounterAppGateway appGateway = CounterAppGateway(vm.envAddress("APP_GATEWAY")); - console.log("Counter Deployer:", address(deployer)); + console.log("Counter Gateway:", address(appGateway)); console.log("Deploying contracts on Arbitrum Sepolia..."); - - uint32[] memory chainSlugs = new uint32[](2); - chainSlugs[0] = 421614; - chainSlugs[1] = 11155420; - deployer.deployMultiChainContracts(chainSlugs); + appGateway.deployContracts(421614); } } diff --git a/script/counter/IncrementCountersFromApp.s.sol b/script/counter/IncrementCountersFromApp.s.sol index 70036545..60a90fd2 100644 --- a/script/counter/IncrementCountersFromApp.s.sol +++ b/script/counter/IncrementCountersFromApp.s.sol @@ -3,8 +3,7 @@ pragma solidity ^0.8.0; import {Script} from "forge-std/Script.sol"; import {console} from "forge-std/console.sol"; -import {CounterDeployer} from "../../contracts/apps//counter/CounterDeployer.sol"; -import {CounterAppGateway} from "../../contracts/apps//counter/CounterAppGateway.sol"; +import {CounterAppGateway} from "../../test/apps/app-gateways/counter/CounterAppGateway.sol"; contract IncrementCounters is Script { function run() external { @@ -13,32 +12,23 @@ contract IncrementCounters is Script { vm.createSelectFork(socketRPC); - CounterDeployer deployer = CounterDeployer(vm.envAddress("COUNTER_DEPLOYER")); - CounterAppGateway gateway = CounterAppGateway(vm.envAddress("COUNTER_APP_GATEWAY")); + CounterAppGateway gateway = CounterAppGateway(vm.envAddress("APP_GATEWAY")); - address counterForwarderArbitrumSepolia = deployer.forwarderAddresses( - deployer.counter(), + address counterForwarderArbitrumSepolia = gateway.forwarderAddresses( + gateway.counter(), 421614 ); - address counterForwarderOptimismSepolia = deployer.forwarderAddresses( - deployer.counter(), + address counterForwarderOptimismSepolia = gateway.forwarderAddresses( + gateway.counter(), 11155420 ); - address counterForwarderBaseSepolia = deployer.forwarderAddresses( - deployer.counter(), - 84532 - ); - //address counterForwarderSepolia = deployer.forwarderAddresses( - // deployer.counter(), - // 11155111 - //); + address counterForwarderBaseSepolia = gateway.forwarderAddresses(gateway.counter(), 84532); // Count non-zero addresses uint256 nonZeroCount = 0; if (counterForwarderArbitrumSepolia != address(0)) nonZeroCount++; if (counterForwarderOptimismSepolia != address(0)) nonZeroCount++; if (counterForwarderBaseSepolia != address(0)) nonZeroCount++; - //if (counterForwarderSepolia != address(0)) nonZeroCount++; address[] memory instances = new address[](nonZeroCount); uint256 index = 0; @@ -60,22 +50,8 @@ contract IncrementCounters is Script { } else { console.log("Base Sepolia forwarder not yet deployed"); } - //if (counterForwarderSepolia != address(0)) { - // instances[index] = counterForwarderSepolia; - // index++; - //} else { - // console.log("Ethereum Sepolia forwarder not yet deployed"); - //} - // vm.startBroadcast(deployerPrivateKey); - bytes memory data = abi.encodeWithSelector( - CounterAppGateway.incrementCounters.selector, - instances - ); - console.log("to"); - console.log(address(gateway)); - console.log("data"); - console.logBytes(data); - // gateway.incrementCounters(instances); + vm.startBroadcast(deployerPrivateKey); + gateway.incrementCounters(instances); } } diff --git a/script/counter/ReadOnchainCounters.s.sol b/script/counter/ReadOnchainCounters.s.sol index 56a91796..534acd66 100644 --- a/script/counter/ReadOnchainCounters.s.sol +++ b/script/counter/ReadOnchainCounters.s.sol @@ -3,27 +3,23 @@ pragma solidity ^0.8.0; import {Script} from "forge-std/Script.sol"; import {console} from "forge-std/console.sol"; -import {CounterDeployer} from "../../contracts/apps/counter/CounterDeployer.sol"; -import {Counter} from "../../contracts/apps//counter/Counter.sol"; +import {Counter} from "../../test/apps/app-gateways/counter/Counter.sol"; +import {CounterAppGateway} from "../../test/apps/app-gateways/counter/CounterAppGateway.sol"; contract CheckCounters is Script { function run() external { - CounterDeployer deployer = CounterDeployer(vm.envAddress("DEPLOYER")); + CounterAppGateway gateway = CounterAppGateway(vm.envAddress("APP_GATEWAY")); vm.createSelectFork(vm.envString("EVMX_RPC")); - address counterInstanceArbitrumSepolia = deployer.getOnChainAddress( - deployer.counter(), + address counterInstanceArbitrumSepolia = gateway.getOnChainAddress( + gateway.counter(), 421614 ); - address counterInstanceOptimismSepolia = deployer.getOnChainAddress( - deployer.counter(), + address counterInstanceOptimismSepolia = gateway.getOnChainAddress( + gateway.counter(), 11155420 ); - address counterInstanceBaseSepolia = deployer.getOnChainAddress(deployer.counter(), 84532); - //address counterInstanceSepolia = deployer.getOnChainAddress( - // deployer.counter(), - // 11155111 - //); + address counterInstanceBaseSepolia = gateway.getOnChainAddress(gateway.counter(), 84532); if (counterInstanceArbitrumSepolia != address(0)) { vm.createSelectFork(vm.envString("ARBITRUM_SEPOLIA_RPC")); @@ -48,18 +44,5 @@ contract CheckCounters is Script { } else { console.log("Counter not yet deployed on Base Sepolia"); } - - //if (counterInstanceSepolia != address(0)) { - // vm.createSelectFork(vm.envString("SEPOLIA_RPC")); - // uint256 counterValueOptimismSepolia = Counter( - // counterInstanceOptimismSepolia - // ).counter(); - // console.log( - // "Counter value on Ethereum Sepolia: ", - // counterValueOptimismSepolia - // ); - //} else { - // console.log("Counter not yet deployed on Ethereum Sepolia"); - //} } } diff --git a/script/counter/WithdrawFeesArbitrumFeesPlug.s.sol b/script/counter/WithdrawFeesArbitrumFeesPlug.s.sol index ff9af7bc..fc954d26 100644 --- a/script/counter/WithdrawFeesArbitrumFeesPlug.s.sol +++ b/script/counter/WithdrawFeesArbitrumFeesPlug.s.sol @@ -3,30 +3,61 @@ pragma solidity ^0.8.0; import {Script} from "forge-std/Script.sol"; import {console} from "forge-std/console.sol"; -import {FeesPlug} from "../../contracts/apps/payload-delivery/FeesPlug.sol"; -import {ETH_ADDRESS} from "../../contracts/common/Constants.sol"; -import {CounterAppGateway} from "../../contracts/apps/counter/CounterAppGateway.sol"; +import {FeesManager} from "../../contracts/protocol/payload-delivery/FeesManager.sol"; +import {ETH_ADDRESS} from "../../contracts/protocol/utils/common/Constants.sol"; +import {CounterAppGateway} from "../../test/apps/app-gateways/counter/CounterAppGateway.sol"; +// @notice This script is used to withdraw fees from EVMX to Arbitrum Sepolia +// @dev Make sure your app has withdrawFeeTokens() function implemented. You can check its implementation in CounterAppGateway.sol contract WithdrawFees is Script { function run() external { - vm.createSelectFork(vm.envString("ARBITRUM_SEPOLIA_RPC")); - - uint256 privateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(privateKey); - FeesPlug feesPlug = FeesPlug(payable(vm.envAddress("ARBITRUM_FEES_PLUG"))); + // EVMX Check available fees + vm.createSelectFork(vm.envString("EVMX_RPC")); + FeesManager feesManager = FeesManager(payable(vm.envAddress("FEES_MANAGER"))); address appGatewayAddress = vm.envAddress("APP_GATEWAY"); + CounterAppGateway appGateway = CounterAppGateway(appGatewayAddress); + uint256 availableFees = feesManager.getAvailableFees( + 421614, + appGatewayAddress, + ETH_ADDRESS + ); + console.log("Available fees:", availableFees); + + if (availableFees > 0) { + // Switch to Arbitrum Sepolia to get gas price + vm.createSelectFork(vm.envString("ARBITRUM_SEPOLIA_RPC")); + uint256 privateKey = vm.envUint("PRIVATE_KEY"); + address sender = vm.addr(privateKey); + + // Gas price from Arbitrum + uint256 arbitrumGasPrice = block.basefee + 0.1 gwei; // With buffer + uint256 gasLimit = 5_000_000; // Estimate + uint256 estimatedGasCost = gasLimit * arbitrumGasPrice; + + console.log("Arbitrum gas price (wei):", arbitrumGasPrice); + console.log("Gas limit:", gasLimit); + console.log("Estimated gas cost:", estimatedGasCost); + + // Calculate amount to withdraw + uint256 amountToWithdraw = availableFees > estimatedGasCost + ? availableFees - estimatedGasCost + : 0; - address sender = vm.addr(privateKey); - console.log("Sender address:", sender); - uint256 balance = sender.balance; - console.log("Sender balance:", balance); + if (amountToWithdraw > 0) { + // Switch back to EVMX to perform withdrawal + vm.createSelectFork(vm.envString("EVMX_RPC")); + vm.startBroadcast(privateKey); + console.log("Withdrawing amount:", amountToWithdraw); + appGateway.withdrawFeeTokens(421614, ETH_ADDRESS, amountToWithdraw, sender); + vm.stopBroadcast(); - uint256 appBalance = feesPlug.balanceOf(appGatewayAddress); - console.log("AppBalance:", appBalance); - if (appBalance > 0) { - appGateway.withdrawFeeTokens(421614, ETH_ADDRESS, appBalance, sender); - console.log("Withdrew:", appBalance); + // Switch back to Arbitrum Sepolia to check final balance + vm.createSelectFork(vm.envString("ARBITRUM_SEPOLIA_RPC")); + console.log("Final sender balance:", sender.balance); + } else { + console.log("Available fees less than estimated gas cost"); + } } } } diff --git a/script/counter/deployOnchainCounters.s.sol b/script/counter/deployOnchainCounters.s.sol deleted file mode 100644 index 6989bdbe..00000000 --- a/script/counter/deployOnchainCounters.s.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {CounterDeployer} from "../../contracts/apps//counter/CounterDeployer.sol"; -import {ETH_ADDRESS} from "../../contracts/common/Constants.sol"; - -contract CounterDeployOnchain is Script { - function run() external { - string memory rpc = vm.envString("EVMX_RPC"); - console.log(rpc); - vm.createSelectFork(rpc); - - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - - CounterDeployer deployer = CounterDeployer(vm.envAddress("DEPLOYER")); - - console.log("Counter Deployer:", address(deployer)); - - console.log("Deploying contracts on Arbitrum Sepolia..."); - deployer.deployContracts(421614); - // console.log("Deploying contracts on Optimism Sepolia..."); - // deployer.deployContracts(11155420); - // console.log("Deploying contracts on Base Sepolia..."); - // deployer.deployContracts(84532); - //console.log("Deploying contracts on Ethereum Sepolia..."); - //deployer.deployContracts(11155111); - } -} diff --git a/script/cron/DeployGateway.s.sol b/script/cron/DeployGateway.s.sol deleted file mode 100644 index 624703db..00000000 --- a/script/cron/DeployGateway.s.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {CronAppGateway} from "../../contracts/apps/cron/CronAppGateway.sol"; -import {Fees} from "../../contracts/common/Structs.sol"; -import {ETH_ADDRESS} from "../../contracts/common/Constants.sol"; - -contract DeployGateway is Script { - function run() external { - address addressResolver = vm.envAddress("ADDRESS_RESOLVER"); - address auctionManager = vm.envAddress("AUCTION_MANAGER"); - - string memory rpc = vm.envString("EVMX_RPC"); - vm.createSelectFork(rpc); - - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - - // Setting fee payment on Arbitrum Sepolia - Fees memory fees = Fees({ - feePoolChain: 421614, - feePoolToken: ETH_ADDRESS, - amount: 0.01 ether - }); - CronAppGateway gateway = new CronAppGateway( - addressResolver, - address(uint160(uint256(keccak256(abi.encodePacked(block.timestamp))))), - auctionManager, - fees - ); - - console.log("Contracts deployed:"); - console.log("CronAppGateway:", address(gateway)); - } -} diff --git a/script/cron/SetTimeout.s.sol b/script/cron/SetTimeout.s.sol deleted file mode 100644 index 29ed632a..00000000 --- a/script/cron/SetTimeout.s.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {CronAppGateway} from "../../contracts/apps/cron/CronAppGateway.sol"; - -contract SetTimeoutScript is Script { - function run() external { - string memory socketRPC = vm.envString("EVMX_RPC"); - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.createSelectFork(socketRPC); - address gatewayAddress = vm.envAddress("APP_GATEWAY"); - console.log("Gateway address:", gatewayAddress); - CronAppGateway gateway = CronAppGateway(gatewayAddress); - vm.startBroadcast(deployerPrivateKey); - gateway.setTimeout(0); - // vm.stopBroadcast(); - } -} diff --git a/script/helpers/AppGatewayFeeBalance.s.sol b/script/helpers/AppGatewayFeeBalance.s.sol new file mode 100644 index 00000000..6637a83b --- /dev/null +++ b/script/helpers/AppGatewayFeeBalance.s.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {FeesManager} from "../../contracts/protocol/payload-delivery/FeesManager.sol"; +import {Fees} from "../../contracts/protocol/utils/common/Structs.sol"; +import {ETH_ADDRESS} from "../../contracts/protocol/utils/common/Constants.sol"; + +contract CheckDepositedFees is Script { + function run() external { + vm.createSelectFork(vm.envString("EVMX_RPC")); + FeesManager feesManager = FeesManager(payable(vm.envAddress("FEES_MANAGER"))); + address appGateway = vm.envAddress("APP_GATEWAY"); + + (uint256 deposited, uint256 blocked) = feesManager.appGatewayFeeBalances( + appGateway, + 421614, + ETH_ADDRESS + ); + console.log("App Gateway:", appGateway); + console.log("Deposited fees:", deposited); + console.log("Blocked fees:", blocked); + + uint256 availableFees = feesManager.getAvailableFees(421614, appGateway, ETH_ADDRESS); + console.log("Available fees:", availableFees); + } +} diff --git a/script/admin/CheckAppEVMxLimits.s.sol b/script/helpers/CheckAppEVMxLimits.s.sol similarity index 87% rename from script/admin/CheckAppEVMxLimits.s.sol rename to script/helpers/CheckAppEVMxLimits.s.sol index aa69a949..c61f0719 100644 --- a/script/admin/CheckAppEVMxLimits.s.sol +++ b/script/helpers/CheckAppEVMxLimits.s.sol @@ -2,9 +2,9 @@ pragma solidity ^0.8.13; import "forge-std/Script.sol"; -import {WatcherPrecompile} from "../../contracts/watcherPrecompile/WatcherPrecompile.sol"; -import {LimitParams} from "../../contracts/common/Structs.sol"; -import {SCHEDULE, QUERY, FINALIZE} from "../../contracts/common/Constants.sol"; +import {WatcherPrecompile} from "../../contracts/protocol/watcherPrecompile/WatcherPrecompile.sol"; +import {LimitParams} from "../../contracts/protocol/utils/common/Structs.sol"; +import {SCHEDULE, QUERY, FINALIZE} from "../../contracts/protocol/utils/common/Constants.sol"; contract CheckLimitsScript is Script { function run() external { diff --git a/script/PayFeesInArbitrumETH.s.sol b/script/helpers/PayFeesInArbitrumETH.s.sol similarity index 74% rename from script/PayFeesInArbitrumETH.s.sol rename to script/helpers/PayFeesInArbitrumETH.s.sol index 70858dc5..50da4fc1 100644 --- a/script/PayFeesInArbitrumETH.s.sol +++ b/script/helpers/PayFeesInArbitrumETH.s.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.0; import {Script} from "forge-std/Script.sol"; import {console} from "forge-std/console.sol"; -import {FeesPlug} from "../contracts/apps/payload-delivery/FeesPlug.sol"; -import {Fees} from "../contracts/common/Structs.sol"; -import {ETH_ADDRESS} from "../contracts/common/Constants.sol"; +import {FeesPlug} from "../../contracts/protocol/payload-delivery/FeesPlug.sol"; +import {Fees} from "../../contracts/protocol/utils/common/Structs.sol"; +import {ETH_ADDRESS} from "../../contracts/protocol/utils/common/Constants.sol"; contract DepositFees is Script { function run() external { @@ -21,7 +21,7 @@ contract DepositFees is Script { uint256 balance = sender.balance; console.log("Sender balance in wei:", balance); - uint feesAmount = 0.01 ether; + uint feesAmount = 0.001 ether; feesPlug.deposit{value: feesAmount}(ETH_ADDRESS, appGateway, feesAmount); } } diff --git a/script/mock/FinalizeAndExecution.s.sol b/script/mock/FinalizeAndExecution.s.sol deleted file mode 100644 index 042daadc..00000000 --- a/script/mock/FinalizeAndExecution.s.sol +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {MockWatcherPrecompile} from "../../contracts/mock/MockWatcherPrecompile.sol"; -import {MockSocket} from "../../contracts/mock/MockSocket.sol"; -import {CallType, FinalizeParams, PayloadDetails} from "../../contracts/common/Structs.sol"; -contract InboxTest is Script { - function run() external { - string memory arbRpc = vm.envString("ARBITRUM_SEPOLIA_RPC"); - string memory offChainRpc = vm.envString("EVMX_RPC"); - uint256 offChainDeployerPrivateKey = vm.envUint("PRIVATE_KEY"); - uint256 arbDeployerPrivateKey = vm.envUint("SOCKET_SIGNER_KEY"); - - vm.createSelectFork(offChainRpc); - vm.startBroadcast(offChainDeployerPrivateKey); - address watcher = vm.envAddress("WATCHER_PRECOMPILE"); - MockWatcherPrecompile watcherInstance = MockWatcherPrecompile(watcher); - PayloadDetails memory payloadDetails = PayloadDetails({ - chainSlug: 421614, - appGateway: address(0), // usdc contract - target: 0x6402c4c08C1F752Ac8c91beEAF226018ec1a27f2, // usdc contract - payload: abi.encodeWithSignature( - "transfer(address,uint256)", - address(0), - 1000000000000000000 - ), - callType: CallType.WRITE, - executionGasLimit: 1000000, - next: new address[](0), - isSequential: true - }); - FinalizeParams memory finalizeParams = FinalizeParams({ - payloadDetails: payloadDetails, - asyncId: bytes32(0), - transmitter: address(0) - }); - (bytes32 payloadId, ) = watcherInstance.finalize(finalizeParams); - - vm.stopBroadcast(); - - vm.createSelectFork(arbRpc); - vm.startBroadcast(arbDeployerPrivateKey); - address socket = vm.envAddress("SOCKET"); - MockSocket socketInstance = MockSocket(socket); - socketInstance.execute(payloadId, address(0), address(0), 10000000, bytes(""), bytes("")); - vm.stopBroadcast(); - } -} diff --git a/script/mock/Inbox.s.sol b/script/mock/Inbox.s.sol deleted file mode 100644 index 178825ad..00000000 --- a/script/mock/Inbox.s.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {MockWatcherPrecompile} from "../../contracts/mock/MockWatcherPrecompile.sol"; -import {MockSocket} from "../../contracts/mock/MockSocket.sol"; - -contract InboxTest is Script { - function run() external { - string memory rpc = vm.envString("ARBITRUM_SEPOLIA_RPC"); - vm.createSelectFork(rpc); - uint256 deployerPrivateKey = vm.envUint("SOCKET_SIGNER_KEY"); - vm.startBroadcast(deployerPrivateKey); - address socket = vm.envAddress("SOCKET"); - MockSocket socketInstance = MockSocket(socket); - bytes memory payload = hex"00010203"; - bytes32 params = bytes32(0); - socketInstance.callAppGateway(payload, params); - } -} diff --git a/script/mock/Query.s.sol b/script/mock/Query.s.sol deleted file mode 100644 index 1909509c..00000000 --- a/script/mock/Query.s.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {MockWatcherPrecompile} from "../../contracts/mock/MockWatcherPrecompile.sol"; - -contract QueryTest is Script { - function run() external { - string memory rpc = vm.envString("EVMX_RPC"); - vm.createSelectFork(rpc); - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - address watcher = vm.envAddress("WATCHER_PRECOMPILE"); - MockWatcherPrecompile watcherInstance = MockWatcherPrecompile(watcher); - - address[] memory asyncPromises = new address[](1); - asyncPromises[0] = address(0); - bytes memory payload = abi.encodeWithSignature("balanceOf(address)", address(0)); - watcherInstance.query( - 421614, - 0x6402c4c08C1F752Ac8c91beEAF226018ec1a27f2, // usdc contract - asyncPromises, - payload - ); - } -} diff --git a/script/mock/Timeout.s.sol b/script/mock/Timeout.s.sol deleted file mode 100644 index 68ae3a10..00000000 --- a/script/mock/Timeout.s.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {MockWatcherPrecompile} from "../../contracts/mock/MockWatcherPrecompile.sol"; - -contract TimeoutTest is Script { - function run() external { - string memory rpc = vm.envString("EVMX_RPC"); - vm.createSelectFork(rpc); - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - address watcher = vm.envAddress("WATCHER_PRECOMPILE"); - MockWatcherPrecompile watcherInstance = MockWatcherPrecompile(watcher); - watcherInstance.setTimeout("", 10); - } -} diff --git a/script/parallel-counter/checkCounters.s.sol b/script/parallel-counter/checkCounters.s.sol deleted file mode 100644 index 55b7e29d..00000000 --- a/script/parallel-counter/checkCounters.s.sol +++ /dev/null @@ -1,82 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {ParallelCounterDeployer} from "../../contracts/apps/parallel-counter/ParallelCounterDeployer.sol"; -import {Counter} from "../../contracts/apps/counter/Counter.sol"; - -contract CheckCounters is Script { - function run() external { - ParallelCounterDeployer deployer = ParallelCounterDeployer(vm.envAddress("DEPLOYER")); - - vm.createSelectFork(vm.envString("EVMX_RPC")); - address counter1InstanceArbitrumSepolia = deployer.getOnChainAddress( - deployer.counter1(), - 421614 - ); - address counter2InstanceArbitrumSepolia = deployer.getOnChainAddress( - deployer.counter2(), - 421614 - ); - address counter1InstanceOptimismSepolia = deployer.getOnChainAddress( - deployer.counter1(), - 11155420 - ); - address counter2InstanceOptimismSepolia = deployer.getOnChainAddress( - deployer.counter2(), - 11155420 - ); - - if (counter1InstanceArbitrumSepolia != address(0)) { - vm.createSelectFork(vm.envString("ARBITRUM_SEPOLIA_RPC")); - console.log("Counter 1 instance on Arbitrum Sepolia:", counter1InstanceArbitrumSepolia); - uint256 counterValueArbitrumSepolia = Counter(counter1InstanceArbitrumSepolia) - .counter(); - console.log("Counter1 value on Arbitrum Sepolia: ", counterValueArbitrumSepolia); - } else { - console.log("Counter1 not yet deployed on Arbitrum Sepolia"); - } - - if (counter2InstanceArbitrumSepolia != address(0)) { - vm.createSelectFork(vm.envString("ARBITRUM_SEPOLIA_RPC")); - console.log("Counter 2 instance on Arbitrum Sepolia:", counter2InstanceArbitrumSepolia); - uint256 counterValueArbitrumSepolia = Counter(counter2InstanceArbitrumSepolia) - .counter(); - console.log("Counter2 value on Arbitrum Sepolia: ", counterValueArbitrumSepolia); - } else { - console.log("Counter2 not yet deployed on Arbitrum Sepolia"); - } - - if (counter1InstanceOptimismSepolia != address(0)) { - vm.createSelectFork(vm.envString("OPTIMISM_SEPOLIA_RPC")); - console.log("Counter 1 instance on Optimism Sepolia:", counter1InstanceOptimismSepolia); - uint256 counterValueOptimismSepolia = Counter(counter1InstanceOptimismSepolia) - .counter(); - console.log("Counter1 value on Optimism Sepolia: ", counterValueOptimismSepolia); - } else { - console.log("Counter1 not yet deployed on Optimism Sepolia"); - } - - if (counter2InstanceOptimismSepolia != address(0)) { - vm.createSelectFork(vm.envString("OPTIMISM_SEPOLIA_RPC")); - console.log("Counter 2 instance on Optimism Sepolia:", counter2InstanceOptimismSepolia); - uint256 counterValueOptimismSepolia = Counter(counter2InstanceOptimismSepolia) - .counter(); - console.log("Counter2 value on Optimism Sepolia: ", counterValueOptimismSepolia); - } else { - console.log("Counter2 not yet deployed on Optimism Sepolia"); - } - - vm.createSelectFork(vm.envString("EVMX_RPC")); - address forwarderArb1 = deployer.forwarderAddresses(deployer.counter1(), 421614); - address forwarderArb2 = deployer.forwarderAddresses(deployer.counter2(), 421614); - address forwarderOpt1 = deployer.forwarderAddresses(deployer.counter1(), 11155420); - address forwarderOpt2 = deployer.forwarderAddresses(deployer.counter2(), 11155420); - - console.log("Forwarder 1 on Arbitrum Sepolia:", forwarderArb1); - console.log("Forwarder 2 on Arbitrum Sepolia:", forwarderArb2); - console.log("Forwarder 1 on Optimism Sepolia:", forwarderOpt1); - console.log("Forwarder 2 on Optimism Sepolia:", forwarderOpt2); - } -} diff --git a/script/parallel-counter/deployOffchain.s.sol b/script/parallel-counter/deployOffchain.s.sol deleted file mode 100644 index d18348fe..00000000 --- a/script/parallel-counter/deployOffchain.s.sol +++ /dev/null @@ -1,46 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {ParallelCounterAppGateway} from "../../contracts/apps/parallel-counter/ParallelCounterAppGateway.sol"; -import {ParallelCounterDeployer} from "../../contracts/apps/parallel-counter/ParallelCounterDeployer.sol"; -import {Fees} from "../../contracts/common/Structs.sol"; -import {ETH_ADDRESS, FAST} from "../../contracts/common/Constants.sol"; - -contract CounterDeploy is Script { - function run() external { - address addressResolver = vm.envAddress("ADDRESS_RESOLVER"); - address auctionManager = vm.envAddress("AUCTION_MANAGER"); - string memory rpc = vm.envString("EVMX_RPC"); - vm.createSelectFork(rpc); - - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - - // Setting fee payment on Arbitrum Sepolia - Fees memory fees = Fees({ - feePoolChain: 421614, - feePoolToken: ETH_ADDRESS, - amount: 0.01 ether - }); - - ParallelCounterDeployer deployer = new ParallelCounterDeployer( - addressResolver, - auctionManager, - FAST, - fees - ); - - ParallelCounterAppGateway gateway = new ParallelCounterAppGateway( - addressResolver, - address(deployer), - auctionManager, - fees - ); - - console.log("Contracts deployed:"); - console.log("ParallelCounterDeployer:", address(deployer)); - console.log("ParallelCounterAppGateway:", address(gateway)); - } -} diff --git a/script/parallel-counter/incrementCounters.s.sol b/script/parallel-counter/incrementCounters.s.sol deleted file mode 100644 index 70036545..00000000 --- a/script/parallel-counter/incrementCounters.s.sol +++ /dev/null @@ -1,81 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {CounterDeployer} from "../../contracts/apps//counter/CounterDeployer.sol"; -import {CounterAppGateway} from "../../contracts/apps//counter/CounterAppGateway.sol"; - -contract IncrementCounters is Script { - function run() external { - string memory socketRPC = vm.envString("EVMX_RPC"); - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - - vm.createSelectFork(socketRPC); - - CounterDeployer deployer = CounterDeployer(vm.envAddress("COUNTER_DEPLOYER")); - CounterAppGateway gateway = CounterAppGateway(vm.envAddress("COUNTER_APP_GATEWAY")); - - address counterForwarderArbitrumSepolia = deployer.forwarderAddresses( - deployer.counter(), - 421614 - ); - address counterForwarderOptimismSepolia = deployer.forwarderAddresses( - deployer.counter(), - 11155420 - ); - address counterForwarderBaseSepolia = deployer.forwarderAddresses( - deployer.counter(), - 84532 - ); - //address counterForwarderSepolia = deployer.forwarderAddresses( - // deployer.counter(), - // 11155111 - //); - - // Count non-zero addresses - uint256 nonZeroCount = 0; - if (counterForwarderArbitrumSepolia != address(0)) nonZeroCount++; - if (counterForwarderOptimismSepolia != address(0)) nonZeroCount++; - if (counterForwarderBaseSepolia != address(0)) nonZeroCount++; - //if (counterForwarderSepolia != address(0)) nonZeroCount++; - - address[] memory instances = new address[](nonZeroCount); - uint256 index = 0; - if (counterForwarderArbitrumSepolia != address(0)) { - instances[index] = counterForwarderArbitrumSepolia; - index++; - } else { - console.log("Arbitrum Sepolia forwarder not yet deployed"); - } - if (counterForwarderOptimismSepolia != address(0)) { - instances[index] = counterForwarderOptimismSepolia; - index++; - } else { - console.log("Optimism Sepolia forwarder not yet deployed"); - } - if (counterForwarderBaseSepolia != address(0)) { - instances[index] = counterForwarderBaseSepolia; - index++; - } else { - console.log("Base Sepolia forwarder not yet deployed"); - } - //if (counterForwarderSepolia != address(0)) { - // instances[index] = counterForwarderSepolia; - // index++; - //} else { - // console.log("Ethereum Sepolia forwarder not yet deployed"); - //} - - // vm.startBroadcast(deployerPrivateKey); - bytes memory data = abi.encodeWithSelector( - CounterAppGateway.incrementCounters.selector, - instances - ); - console.log("to"); - console.log(address(gateway)); - console.log("data"); - console.logBytes(data); - // gateway.incrementCounters(instances); - } -} diff --git a/script/super-token-lockable/Bridge.s.sol b/script/super-token-lockable/Bridge.s.sol deleted file mode 100644 index 9fa30d5b..00000000 --- a/script/super-token-lockable/Bridge.s.sol +++ /dev/null @@ -1,87 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; - -import {SuperTokenLockableAppGateway} from "../../contracts/apps/super-token-lockable/SuperTokenLockableAppGateway.sol"; -import {SuperTokenLockableDeployer} from "../../contracts/apps/super-token-lockable/SuperTokenLockableDeployer.sol"; - -contract Bridge is Script { - function run() external { - address owner = vm.envAddress("SUPERTOKEN_OWNER"); - address deployer = vm.envAddress("SUPERTOKEN_DEPLOYER"); - address gateway = vm.envAddress("SUPERTOKEN_APP_GATEWAY"); - SuperTokenLockableAppGateway gatewayContract = SuperTokenLockableAppGateway(gateway); - SuperTokenLockableDeployer deployerContract = SuperTokenLockableDeployer(deployer); - string memory rpc = vm.envString("EVMX_RPC"); - vm.createSelectFork(rpc); - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - - address arbTokenForwarder = deployerContract.forwarderAddresses( - deployerContract.superTokenLockable(), - 421614 - ); - address arbHookForwarder = deployerContract.forwarderAddresses( - deployerContract.limitHook(), - 421614 - ); - address optTokenForwarder = deployerContract.forwarderAddresses( - deployerContract.superTokenLockable(), - 11155420 - ); - address optHookForwarder = deployerContract.forwarderAddresses( - deployerContract.limitHook(), - 11155420 - ); - address arbOnChainToken = deployerContract.getOnChainAddress( - deployerContract.superTokenLockable(), - 421614 - ); - address optOnChainToken = deployerContract.getOnChainAddress( - deployerContract.superTokenLockable(), - 11155420 - ); - console.log("arbTokenForwarder"); - console.logAddress(arbTokenForwarder); - console.log("arbHookForwarder"); - console.logAddress(arbHookForwarder); - console.log("arbOnChainToken"); - console.logAddress(arbOnChainToken); - console.log("optTokenForwarder"); - console.logAddress(optTokenForwarder); - console.log("optHookForwarder"); - console.logAddress(optHookForwarder); - console.log("optOnChainToken"); - console.logAddress(optOnChainToken); - if ( - arbTokenForwarder == address(0) || - optTokenForwarder == address(0) || - arbHookForwarder == address(0) || - optHookForwarder == address(0) - ) { - revert("Forwarder not found"); - } - SuperTokenLockableAppGateway.UserOrder memory order = SuperTokenLockableAppGateway - .UserOrder({ - srcToken: arbTokenForwarder, - dstToken: optTokenForwarder, - user: owner, - srcAmount: 1000, - deadline: block.timestamp + 1 days - }); - console.log(order.srcToken); - console.log(order.dstToken); - console.log(order.user); - console.log(order.srcAmount); - console.log(order.deadline); - - // bytes memory payload = abi.encodeWithSelector( - // bytes4(keccak256("bridge(UserOrder)")), - // order - // ); - // console.logBytes(payload); - gatewayContract.bridge(abi.encode(order)); - } -} diff --git a/script/super-token-lockable/DeployContracts.s.sol b/script/super-token-lockable/DeployContracts.s.sol deleted file mode 100644 index be463a84..00000000 --- a/script/super-token-lockable/DeployContracts.s.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {SuperTokenLockableAppGateway} from "../../contracts/apps/super-token-lockable/SuperTokenLockableAppGateway.sol"; -import {SuperTokenLockableDeployer} from "../../contracts/apps/super-token-lockable/SuperTokenLockableDeployer.sol"; -import {SuperTokenLockable} from "../../contracts/apps/super-token-lockable/SuperTokenLockable.sol"; -import {Fees} from "../../contracts/common/Structs.sol"; -import {ETH_ADDRESS} from "../../contracts/common/Constants.sol"; - -contract DeployContracts is Script { - function run() external { - SuperTokenLockableDeployer deployer = SuperTokenLockableDeployer( - vm.envAddress("SUPERTOKEN_DEPLOYER") - ); - string memory rpc = vm.envString("EVMX_RPC"); - vm.createSelectFork(rpc); - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - deployer.deployContracts(84532); - deployer.deployContracts(11155111); - } -} diff --git a/script/super-token-lockable/DeployGateway.s.sol b/script/super-token-lockable/DeployGateway.s.sol deleted file mode 100644 index 8032264a..00000000 --- a/script/super-token-lockable/DeployGateway.s.sol +++ /dev/null @@ -1,63 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {SuperTokenLockableAppGateway} from "../../contracts/apps/super-token-lockable/SuperTokenLockableAppGateway.sol"; -import {SuperTokenLockableDeployer} from "../../contracts/apps/super-token-lockable/SuperTokenLockableDeployer.sol"; -import {SuperTokenLockable} from "../../contracts/apps/super-token-lockable/SuperTokenLockable.sol"; -import {Fees} from "../../contracts/common/Structs.sol"; -import {ETH_ADDRESS, FAST} from "../../contracts/common/Constants.sol"; - -contract DeployGateway is Script { - function run() external { - address addressResolver = vm.envAddress("ADDRESS_RESOLVER"); - address auctionManager = vm.envAddress("AUCTION_MANAGER"); - address owner = vm.envAddress("SUPERTOKEN_OWNER"); - string memory rpc = vm.envString("EVMX_RPC"); - vm.createSelectFork(rpc); - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - - Fees memory fees = Fees({ - feePoolChain: 421614, - feePoolToken: ETH_ADDRESS, - amount: 0.001 ether - }); - - SuperTokenLockableDeployer deployer = new SuperTokenLockableDeployer( - addressResolver, - owner, - address(auctionManager), - FAST, - SuperTokenLockableDeployer.ConstructorParams({ - _burnLimit: 1000000000 ether, - _mintLimit: 1000000000 ether, - name_: "SUPER TOKEN", - symbol_: "SUPER", - decimals_: 18, - initialSupplyHolder_: owner, - initialSupply_: 1000000000 ether - }), - fees - ); - - SuperTokenLockableAppGateway gateway = new SuperTokenLockableAppGateway( - addressResolver, - address(deployer), - address(auctionManager), - fees - ); - - bytes32 superToken = deployer.superTokenLockable(); - bytes32 limitHook = deployer.limitHook(); - - console.log("Contracts deployed:"); - console.log("SuperTokenLockableAppGateway:", address(gateway)); - console.log("SuperTokenLockableDeployer:", address(deployer)); - console.log("SuperTokenLockableId:"); - console.logBytes32(superToken); - console.log("LimitHookId:"); - console.logBytes32(limitHook); - } -} diff --git a/script/super-token/Bridge.s.sol b/script/super-token/Bridge.s.sol deleted file mode 100644 index 2f83e781..00000000 --- a/script/super-token/Bridge.s.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {SuperTokenAppGateway} from "../../contracts/apps/super-token/SuperTokenAppGateway.sol"; - -contract Bridge is Script { - struct UserOrder { - address srcToken; - address dstToken; - address user; - uint256 srcAmount; - uint256 deadline; - } - - function run() external { - vm.startBroadcast(); - - UserOrder memory order = UserOrder({ - srcToken: 0x047Db07E30809f87CABA2E552585F9A727a074ED, - dstToken: 0x4545C7bc6347945e7bfda082a2A0033cE4C7CEae, - user: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266, - srcAmount: 1000, - deadline: block.timestamp + 1 days - }); - - SuperTokenAppGateway gateway = SuperTokenAppGateway( - 0xb1F4CbFCE786aA8B553796Fb06c04Dd461967A16 - ); - gateway.transfer(abi.encode(order)); - } -} diff --git a/script/super-token/DeployContracts.s.sol b/script/super-token/DeployContracts.s.sol deleted file mode 100644 index 30ad5d88..00000000 --- a/script/super-token/DeployContracts.s.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {SuperTokenAppGateway} from "../../contracts/apps/super-token/SuperTokenAppGateway.sol"; -import {SuperTokenDeployer} from "../../contracts/apps/super-token/SuperTokenDeployer.sol"; -import {SuperToken} from "../../contracts/apps/super-token/SuperToken.sol"; -import {Fees} from "../../contracts/common/Structs.sol"; -import {ETH_ADDRESS} from "../../contracts/common/Constants.sol"; - -contract DeployContracts is Script { - function run() external { - vm.startBroadcast(); - SuperTokenDeployer deployer = SuperTokenDeployer( - 0x02520426a04D2943d817A60ABa37ab25bA10e630 - ); - deployer.deployContracts(84532); - deployer.deployContracts(11155111); - } -} diff --git a/script/super-token/DeployGateway.s.sol b/script/super-token/DeployGateway.s.sol deleted file mode 100644 index f57a841d..00000000 --- a/script/super-token/DeployGateway.s.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; -import {console} from "forge-std/console.sol"; -import {SuperTokenAppGateway} from "../../contracts/apps/super-token/SuperTokenAppGateway.sol"; -import {SuperTokenDeployer} from "../../contracts/apps/super-token/SuperTokenDeployer.sol"; -import {SuperToken} from "../../contracts/apps/super-token/SuperToken.sol"; -import {Fees} from "../../contracts/common/Structs.sol"; -import {ETH_ADDRESS, FAST} from "../../contracts/common/Constants.sol"; - -contract DeployGateway is Script { - function run() external { - vm.startBroadcast(); - - address addressResolver = vm.envAddress("ADDRESS_RESOLVER"); - address auctionManager = vm.envAddress("AUCTION_MANAGER"); - address owner = vm.envAddress("OWNER"); - - Fees memory fees = Fees({ - feePoolChain: 421614, - feePoolToken: ETH_ADDRESS, - amount: 0.001 ether - }); - - SuperTokenDeployer deployer = new SuperTokenDeployer( - addressResolver, - owner, - address(auctionManager), - FAST, - SuperTokenDeployer.ConstructorParams({ - name_: "SUPER TOKEN", - symbol_: "SUPER", - decimals_: 18, - initialSupplyHolder_: owner, - initialSupply_: 1000000000 ether - }), - fees - ); - - SuperTokenAppGateway gateway = new SuperTokenAppGateway( - addressResolver, - address(deployer), - fees, - address(auctionManager) - ); - - bytes32 superToken = deployer.superToken(); - - console.log("Contracts deployed:"); - console.log("SuperTokenApp:", address(gateway)); - console.log("SuperTokenDeployer:", address(deployer)); - console.log("SuperTokenId:"); - console.logBytes32(superToken); - } -} diff --git a/script/transactionStatus.js b/script/transactionStatus.js deleted file mode 100644 index ca27bb7c..00000000 --- a/script/transactionStatus.js +++ /dev/null @@ -1,138 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -// Read script name from command-line arguments -const scriptName = process.argv[2]; // The argument passed to the script -if (!scriptName) { - console.error('Usage: node checkTransactions.js '); - console.error('Example: node checkTransactions.js deployOnchain'); - process.exit(1); -} - -// Construct the JSON file path dynamically -const jsonFilePath = path.join('broadcast', `${scriptName}.s.sol`, '7625382', 'run-latest.json'); - -// Validate that the file exists -if (!fs.existsSync(jsonFilePath)) { - console.error(`Error: File not found at path '${jsonFilePath}'.`); - process.exit(1); -} - -// Load JSON file -const jsonData = JSON.parse(fs.readFileSync(jsonFilePath, 'utf-8')); - -// Extract transaction hashes -const transactions = jsonData.transactions.map((tx) => tx.hash); -console.log(`Found ${transactions.length} transactions to process.`); - -const apiUrl = 'https://apiv2.dev.socket.tech/getDetailsByTxHash?txHash='; -let intervalId; - -// Track statuses for each hash -let statusTracker = transactions.map((hash) => ({ - hash, - status: 'PENDING', - printed: false, - printedPayloads: new Set(), -})); -let allDonePrinted = false; // Prevent multiple prints of the final message - -// Function to perform API requests -const fetchTransactionStatus = async (hash) => { - try { - const response = await fetch(`${apiUrl}${hash}`); - if (!response.ok) throw new Error(`HTTP Error: ${response.status}`); - const data = await response.json(); - return data; - } catch (error) { - console.error(`Error fetching status for hash ${hash}: ${error.message}`); - return null; // Handle errors gracefully - } -}; - -const processMultiplePayloads = (payloads, tx) => { - if (payloads.length > 1) { - payloads.forEach((payload) => { - // Create a unique key for the payload to track printed status - const payloadKey = `${payload.executeDetails.executeTxHash}-${payload.callBackDetails.callbackStatus}`; - - if ( - payload.callBackDetails.callbackStatus === 'PROMISE_RESOLVED' && - payload.executeDetails.executeTxHash && - !tx.printedPayloads.has(payloadKey) - ) { - console.log( - `Hash: ${payload.executeDetails.executeTxHash}, Status: ${payload.callBackDetails.callbackStatus}, ChainId: ${payload.chainSlug}`, - ); - - tx.printedPayloads.add(payloadKey); - } - }); - } -}; - -// Function to check transaction status -const checkTransactionStatus = async () => { - let allCompleted = true; - for (let i = 0; i < statusTracker.length; i++) { - const tx = statusTracker[i]; - - // Skip already printed transactions - if (tx.status === 'COMPLETED' && tx.printed) continue; - - const data = await fetchTransactionStatus(tx.hash); - - if (data && data.status === 'SUCCESS') { - if (data.response.length === 0) { - if (tx.printed === false) { - console.log(`Hash: ${tx.hash}, There are no logs for this transaction hash.`); - tx.status = 'NO_LOGS'; - tx.printed = true; - continue; - } else { - continue; - } - } - - const transactionResponse = data.response[0]; // First response object - const status = transactionResponse.status || 'UNKNOWN'; - const payloads = transactionResponse.payloads || []; - - // Update tracker - tx.status = status; - if (status === 'COMPLETED' && !tx.printed) { - processMultiplePayloads(payloads, tx); - - const deployerDetails = payloads[0].deployerDetails || {}; - - if (Object.keys(deployerDetails).length !== 0) { - console.log(`Hash: ${tx.hash}, Status: ${status}, ChainId: ${payloads[0].chainSlug}`); - console.log(`OnChainAddress: ${deployerDetails.onChainAddress}`); - console.log(`ForwarderAddress: ${deployerDetails.forwarderAddress}`); - } else { - console.log(`Hash: ${tx.hash}, Status: ${status}, ChainId: 7625382`); - } - - tx.printed = true; - } else if (status === 'IN_PROGRESS') { - processMultiplePayloads(payloads, tx); - } - } else { - console.error(`Invalid or empty response for hash: ${tx.hash}`); - } - - // Check if any are still pending - if (tx.status !== 'COMPLETED' && tx.status !== 'NO_LOGS') allCompleted = false; - } - - // Stop script and print final message if all transactions are COMPLETED - if (allCompleted && !allDonePrinted) { - console.log('All transactions are COMPLETED. Stopping script.'); - allDonePrinted = true; // Prevent duplicate final messages - clearInterval(intervalId); - } -}; - -// Start periodic polling every second -console.log('Starting to monitor transaction statuses...'); -intervalId = setInterval(checkTransactionStatus, 2000); diff --git a/setupInfraContracts.sh b/setupInfraContracts.sh index f3bd4dca..19d7adb8 100644 --- a/setupInfraContracts.sh +++ b/setupInfraContracts.sh @@ -1,7 +1,11 @@ -npx hardhat run hardhat-scripts/deploy/1.deploy.ts -npx hardhat run hardhat-scripts/deploy/2.roles.ts --no-compile -npx hardhat run hardhat-scripts/deploy/3.upgradeManagers.ts --no-compile -npx hardhat run hardhat-scripts/deploy/4.connect.ts --no-compile -export AWS_PROFILE=lldev && npx ts-node hardhat-scripts/deploy/5.upload.ts --resolveJsonModule -npx hardhat run hardhat-scripts/deploy/6.setupEnv.ts --no-compile -npx hardhat run hardhat-scripts/deploy/verify.ts --no-compile +if [ "$1" = "compile" ]; then + time npx hardhat run hardhat-scripts/deploy/1.deploy.ts +else + time npx hardhat run hardhat-scripts/deploy/1.deploy.ts --no-compile +fi +time npx hardhat run hardhat-scripts/deploy/2.roles.ts --no-compile +time npx hardhat run hardhat-scripts/deploy/3.upgradeManagers.ts --no-compile +time npx hardhat run hardhat-scripts/deploy/4.connect.ts --no-compile +time npx ts-node hardhat-scripts/deploy/5.upload.ts --resolveJsonModule +time npx hardhat run hardhat-scripts/deploy/6.setupEnv.ts --no-compile +time npx hardhat run hardhat-scripts/verify/verify.ts --no-compile & disown diff --git a/test/DeliveryHelper.t.sol b/test/DeliveryHelper.t.sol index 5532d35f..597c113f 100644 --- a/test/DeliveryHelper.t.sol +++ b/test/DeliveryHelper.t.sol @@ -1,13 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "../contracts/apps/payload-delivery/app-gateway/DeliveryHelper.sol"; -import "../contracts/apps/payload-delivery/app-gateway/FeesManager.sol"; -import "../contracts/apps/payload-delivery/app-gateway/AuctionManager.sol"; +import "../contracts/protocol/payload-delivery/app-gateway/DeliveryHelper.sol"; +import "../contracts/protocol/payload-delivery/FeesManager.sol"; +import "../contracts/protocol/payload-delivery/AuctionManager.sol"; -import "../contracts/Forwarder.sol"; -import "../contracts/interfaces/IAppDeployer.sol"; -import "../contracts/interfaces/IMultiChainAppDeployer.sol"; +import "../contracts/protocol/Forwarder.sol"; +import "../contracts/interfaces/IAppGateway.sol"; import "./SetupTest.t.sol"; @@ -39,7 +38,7 @@ contract DeliveryHelperTest is SetupTest { function setUpDeliveryHelper() internal { // core - deployOffChainVMCore(); + deployEVMxCore(); // Deploy implementations FeesManager feesManagerImpl = new FeesManager(); DeliveryHelper deliveryHelperImpl = new DeliveryHelper(); @@ -49,59 +48,59 @@ contract DeliveryHelperTest is SetupTest { bytes memory feesManagerData = abi.encodeWithSelector( FeesManager.initialize.selector, address(addressResolver), - owner + watcherEOA, + evmxSlug ); vm.expectEmit(true, true, true, false); - emit Initialized(1); + emit Initialized(version); address feesManagerProxy = proxyFactory.deployAndCall( address(feesManagerImpl), watcherEOA, feesManagerData ); + bytes memory auctionManagerData = abi.encodeWithSelector( + AuctionManager.initialize.selector, + evmxSlug, + auctionEndDelaySeconds, + address(addressResolver), + owner, + version + ); + vm.expectEmit(true, true, true, false); + emit Initialized(version); + address auctionManagerProxy = proxyFactory.deployAndCall( + address(auctionManagerImpl), + watcherEOA, + auctionManagerData + ); + bytes memory deliveryHelperData = abi.encodeWithSelector( DeliveryHelper.initialize.selector, address(addressResolver), - address(feesManagerProxy), owner, bidTimeout ); vm.expectEmit(true, true, true, false); - emit Initialized(1); + emit Initialized(version); address deliveryHelperProxy = proxyFactory.deployAndCall( address(deliveryHelperImpl), watcherEOA, deliveryHelperData ); - bytes memory auctionManagerData = abi.encodeWithSelector( - AuctionManager.initialize.selector, - vmChainSlug, - auctionEndDelaySeconds, - address(addressResolver), - signatureVerifier, - owner - ); - vm.expectEmit(true, true, true, false); - emit Initialized(1); - address auctionManagerProxy = proxyFactory.deployAndCall( - address(auctionManagerImpl), - watcherEOA, - auctionManagerData - ); - // Assign proxy addresses to contract variables feesManager = FeesManager(address(feesManagerProxy)); deliveryHelper = DeliveryHelper(address(deliveryHelperProxy)); auctionManager = AuctionManager(address(auctionManagerProxy)); - hoax(watcherEOA); + vm.startPrank(watcherEOA); addressResolver.setDeliveryHelper(address(deliveryHelper)); - - hoax(watcherEOA); + addressResolver.setDefaultAuctionManager(address(auctionManager)); addressResolver.setFeesManager(address(feesManager)); + vm.stopPrank(); // chain core contracts arbConfig = deploySocket(arbChainSlug); @@ -112,23 +111,23 @@ contract DeliveryHelperTest is SetupTest { function connectDeliveryHelper() internal { vm.startPrank(owner); - arbConfig.contractFactoryPlug.connectSocket( + arbConfig.contractFactoryPlug.initSocket( address(deliveryHelper), address(arbConfig.socket), address(arbConfig.switchboard) ); - optConfig.contractFactoryPlug.connectSocket( + optConfig.contractFactoryPlug.initSocket( address(deliveryHelper), address(optConfig.socket), address(optConfig.switchboard) ); - arbConfig.feesPlug.connectSocket( + arbConfig.feesPlug.initSocket( address(feesManager), address(arbConfig.socket), address(arbConfig.switchboard) ); - optConfig.feesPlug.connectSocket( + optConfig.feesPlug.initSocket( address(feesManager), address(optConfig.socket), address(optConfig.switchboard) @@ -161,8 +160,11 @@ contract DeliveryHelperTest is SetupTest { switchboard: address(optConfig.switchboard) }); - hoax(watcherEOA); - watcherPrecompile.setAppGateways(gateways); + bytes memory watcherSignature = _createWatcherSignature( + abi.encode(IWatcherPrecompile.setAppGateways.selector, gateways) + ); + + watcherPrecompile.setAppGateways(gateways, signatureNonce++, watcherSignature); } function setLimit(address appGateway_) internal { @@ -200,13 +202,34 @@ contract DeliveryHelperTest is SetupTest { fees_.amount ); - hoax(owner); - feesManager.incrementFeesDeposited( + bytes memory bytesInput = abi.encode( fees_.feePoolChain, appGateway_, fees_.feePoolToken, fees_.amount ); + bytes32 digest = keccak256( + abi.encode(address(feesManager), evmxSlug, signatureNonce, bytesInput) + ); + + digest = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", digest)); + (uint8 sigV, bytes32 sigR, bytes32 sigS) = vm.sign(watcherPrivateKey, digest); + bytes memory sig = new bytes(65); + bytes1 v32 = bytes1(sigV); + + assembly { + mstore(add(sig, 96), v32) + mstore(add(sig, 32), sigR) + mstore(add(sig, 64), sigS) + } + feesManager.incrementFeesDeposited( + fees_.feePoolChain, + appGateway_, + fees_.feePoolToken, + fees_.amount, + signatureNonce++, + sig + ); } //// BATCH DEPLOY AND EXECUTE HELPERS //// @@ -261,15 +284,13 @@ contract DeliveryHelperTest is SetupTest { function bidAndEndAuction(bytes32 asyncId) internal { placeBid(asyncId); - - bytes32 timeoutId = encodeTimeoutId(timeoutPayloadIdCounter++); - endAuction(timeoutId); + endAuction(); } function bidAndExecute(bytes32[] memory payloadIds, bytes32 asyncId_) internal { bidAndEndAuction(asyncId_); for (uint i = 0; i < payloadIds.length; i++) { - finalizeAndExecute(payloadIds[i], false); + finalizeAndExecute(payloadIds[i]); } } @@ -289,91 +310,60 @@ contract DeliveryHelperTest is SetupTest { bytes32[] memory contractIds, uint32 chainSlug_, uint256 totalPayloads, - IAppDeployer appDeployer_, - address appGateway_ + IAppGateway appGateway_ ) internal returns (bytes32 asyncId) { SocketContracts memory socketConfig = getSocketConfig(chainSlug_); + + asyncId = getNextAsyncId(); bytes32[] memory payloadIds = getWritePayloadIds( chainSlug_, address(socketConfig.switchboard), totalPayloads ); - asyncId = getCurrentAsyncId(); - appDeployer_.deployContracts(chainSlug_); + appGateway_.deployContracts(chainSlug_); bidAndExecute(payloadIds, asyncId); - setupGatewayAndPlugs(chainSlug_, appDeployer_, appGateway_, contractIds); - } - - function _deployParallel( - bytes32[] memory contractIds, - uint32[] memory chainSlugs_, - IMultiChainAppDeployer appDeployer_, - address appGateway_ - ) internal returns (bytes32 asyncId) { - asyncId = getCurrentAsyncId(); - bytes32[] memory payloadIds = new bytes32[](contractIds.length * chainSlugs_.length); - for (uint32 i = 0; i < chainSlugs_.length; i++) { - for (uint j = 0; j < contractIds.length; j++) { - payloadIds[i * contractIds.length + j] = getWritePayloadId( - chainSlugs_[i], - address(getSocketConfig(chainSlugs_[i]).switchboard), - i * contractIds.length + j + writePayloadIdCounter - ); - } - } - // for fees - writePayloadIdCounter += chainSlugs_.length * contractIds.length + 1; - - appDeployer_.deployMultiChainContracts(chainSlugs_); - bidAndExecute(payloadIds, asyncId); - for (uint i = 0; i < chainSlugs_.length; i++) { - setupGatewayAndPlugs(chainSlugs_[i], appDeployer_, appGateway_, contractIds); - } + setupGatewayAndPlugs(chainSlug_, appGateway_, contractIds); } function setupGatewayAndPlugs( uint32 chainSlug_, - IAppDeployer appDeployer_, - address appGateway_, + IAppGateway appGateway_, bytes32[] memory contractIds ) internal { AppGatewayConfig[] memory gateways = new AppGatewayConfig[](contractIds.length); SocketContracts memory socketConfig = getSocketConfig(chainSlug_); for (uint i = 0; i < contractIds.length; i++) { - address plug = appDeployer_.getOnChainAddress(contractIds[i], chainSlug_); + address plug = appGateway_.getOnChainAddress(contractIds[i], chainSlug_); gateways[i] = AppGatewayConfig({ plug: plug, chainSlug: chainSlug_, - appGateway: appGateway_, + appGateway: address(appGateway_), switchboard: address(socketConfig.switchboard) }); } - hoax(watcherEOA); - watcherPrecompile.setAppGateways(gateways); + bytes memory watcherSignature = _createWatcherSignature( + abi.encode(IWatcherPrecompile.setAppGateways.selector, gateways) + ); + watcherPrecompile.setAppGateways(gateways, signatureNonce++, watcherSignature); } - function _executeReadBatchSingleChain( - uint32 chainSlug_, - uint256 totalPayloads - ) internal returns (bytes32 asyncId) { - asyncId = getCurrentAsyncId(); + function _executeReadBatchSingleChain() internal returns (bytes32 asyncId) { + asyncId = getNextAsyncId(); } - function _executeReadBatchMultiChain( - uint32[] memory chainSlugs_ - ) internal returns (bytes32 asyncId) { - asyncId = getCurrentAsyncId(); + function _executeReadBatchMultiChain() internal returns (bytes32 asyncId) { + asyncId = getNextAsyncId(); } function _executeWriteBatchSingleChain( uint32 chainSlug_, uint256 totalPayloads ) internal returns (bytes32 asyncId) { - asyncId = getCurrentAsyncId(); + asyncId = getNextAsyncId(); bytes32[] memory payloadIds = getWritePayloadIds( chainSlug_, @@ -386,19 +376,16 @@ contract DeliveryHelperTest is SetupTest { function _executeWriteBatchMultiChain( uint32[] memory chainSlugs_ ) internal returns (bytes32 asyncId) { - asyncId = getCurrentAsyncId(); - + asyncId = getNextAsyncId(); bidAndEndAuction(asyncId); for (uint i = 0; i < chainSlugs_.length; i++) { bytes32 payloadId = getWritePayloadId( chainSlugs_[i], address(getSocketConfig(chainSlugs_[i]).switchboard), - i + writePayloadIdCounter + payloadIdCounter++ ); - finalizeAndExecute(payloadId, false); + finalizeAndExecute(payloadId); } - - writePayloadIdCounter += chainSlugs_.length; } function createDeployPayloadDetail( @@ -409,8 +396,12 @@ contract DeliveryHelperTest is SetupTest { bytes32 salt = keccak256(abi.encode(appDeployer_, chainSlug_, deployCounter++)); bytes memory payload = abi.encodeWithSelector( IContractFactoryPlug.deployContract.selector, + true, + salt, + address(appDeployer_), + address(0), bytecode_, - salt + "" ); address asyncPromise = predictAsyncPromiseAddress( @@ -452,8 +443,9 @@ contract DeliveryHelperTest is SetupTest { payload: payload_, callType: callType_, executionGasLimit: executionGasLimit_, + value: 0, next: next_, - isSequential: false + isParallel: Parallel.ON }); } @@ -468,13 +460,14 @@ contract DeliveryHelperTest is SetupTest { vm.prank(transmitterEOA); bytes memory transmitterSignature = _createSignature( - keccak256(abi.encode(address(auctionManager), vmChainSlug, asyncId, bidAmount, "")), + keccak256(abi.encode(address(auctionManager), evmxSlug, asyncId, bidAmount, "")), transmitterPrivateKey ); + auctionManager.bid(asyncId, bidAmount, transmitterSignature, ""); } - function endAuction(bytes32 timeoutId) internal { + function endAuction() internal { // todo: // vm.expectEmit(true, false, false, true); // emit AuctionEnded( @@ -483,8 +476,12 @@ contract DeliveryHelperTest is SetupTest { // ); if (auctionEndDelaySeconds == 0) return; - hoax(watcherEOA); - watcherPrecompile.resolveTimeout(timeoutId); + bytes32 timeoutId = _encodeId(evmxSlug, address(watcherPrecompile), payloadIdCounter++); + + bytes memory watcherSignature = _createWatcherSignature( + abi.encode(IWatcherPrecompile.resolveTimeout.selector, timeoutId) + ); + watcherPrecompile.resolveTimeout(timeoutId, signatureNonce++, watcherSignature); } function finalize( @@ -492,21 +489,23 @@ contract DeliveryHelperTest is SetupTest { PayloadDetails memory payloadDetails ) internal view returns (bytes memory, bytes32) { SocketContracts memory socketConfig = getSocketConfig(payloadDetails.chainSlug); + (, , , , , , uint256 deadline, , , ) = watcherPrecompile.asyncRequests(payloadId); - PayloadRootParams memory rootParams_ = PayloadRootParams( + PayloadDigestParams memory digestParams_ = PayloadDigestParams( payloadDetails.appGateway, transmitterEOA, payloadDetails.target, payloadId, + payloadDetails.value, payloadDetails.executionGasLimit, - block.timestamp + 1000, + deadline, payloadDetails.payload ); - bytes32 root = watcherPrecompile.getRoot(rootParams_); + bytes32 digest = watcherPrecompile.getDigest(digestParams_); - bytes32 digest = keccak256(abi.encode(address(socketConfig.switchboard), root)); - bytes memory watcherSig = _createSignature(digest, watcherPrivateKey); - return (watcherSig, root); + bytes32 sigDigest = keccak256(abi.encode(address(socketConfig.switchboard), digest)); + bytes memory proof = _createSignature(sigDigest, watcherPrivateKey); + return (proof, digest); } function createWithdrawPayloadDetail( @@ -598,32 +597,22 @@ contract DeliveryHelperTest is SetupTest { resolvePromise(payloadId, returnData_); } - function finalizeAndExecute(bytes32 payloadId, bool isWithdraw) internal { + function finalizeAndExecute(bytes32 payloadId) internal { PayloadDetails memory payloadDetails = deliveryHelper.getPayloadDetails(payloadId); - finalizeAndExecute(payloadId, isWithdraw, payloadDetails); - } - - function finalizeAndExecute( - bytes32 payloadId, - bool isWithdraw, - PayloadDetails memory payloadDetails - ) internal { bytes memory returnData = finalizeAndRelay(payloadId, payloadDetails); - if (!isWithdraw) { - resolvePromise(payloadId, returnData); - } + resolvePromise(payloadId, returnData); } function finalizeAndRelay( bytes32 payloadId_, PayloadDetails memory payloadDetails ) internal returns (bytes memory returnData) { - (bytes memory watcherSig, bytes32 root) = finalize(payloadId_, payloadDetails); + (bytes memory watcherSig, bytes32 digest) = finalize(payloadId_, payloadDetails); returnData = relayTx( payloadDetails.chainSlug, payloadId_, - root, + digest, payloadDetails, watcherSig ); @@ -650,25 +639,18 @@ contract DeliveryHelperTest is SetupTest { return address(uint160(uint256(hash))); } - function getCurrentAsyncId() public returns (bytes32) { + function getNextAsyncId() public returns (bytes32) { + payloadIdCounter++; return bytes32((uint256(uint160(address(deliveryHelper))) << 64) | asyncCounterTest++); } - function getLatestAsyncId() public view returns (bytes32) { - return bytes32((uint256(uint160(address(deliveryHelper))) << 64) | asyncCounterTest); - } - - function getTimeoutPayloadId(uint256 counter_) internal view returns (bytes32) { - return bytes32((uint256(uint160(address(deliveryHelper))) << 64) | counter_); - } - function getOnChainAndForwarderAddresses( uint32 chainSlug_, bytes32 contractId_, - IAppDeployer deployer_ + IAppGateway appGateway_ ) internal view returns (address, address) { - address app = deployer_.getOnChainAddress(contractId_, chainSlug_); - address forwarder = deployer_.forwarderAddresses(contractId_, chainSlug_); + address app = appGateway_.getOnChainAddress(contractId_, chainSlug_); + address forwarder = appGateway_.forwarderAddresses(contractId_, chainSlug_); return (app, forwarder); } } diff --git a/test/FeesTest.t.sol b/test/FeesTest.t.sol index 98035397..793b4622 100644 --- a/test/FeesTest.t.sol +++ b/test/FeesTest.t.sol @@ -2,9 +2,8 @@ pragma solidity ^0.8.3; import "./DeliveryHelper.t.sol"; -import {CounterDeployer} from "../contracts/apps/counter/CounterDeployer.sol"; -import {Counter} from "../contracts/apps/counter/Counter.sol"; -import {CounterAppGateway} from "../contracts/apps/counter/CounterAppGateway.sol"; +import {Counter} from "./apps/app-gateways/counter/Counter.sol"; +import {CounterAppGateway} from "./apps/app-gateways/counter/CounterAppGateway.sol"; contract FeesTest is DeliveryHelperTest { uint256 constant depositAmount = 1 ether; @@ -16,36 +15,20 @@ contract FeesTest is DeliveryHelperTest { bytes32 asyncId; CounterAppGateway counterGateway; - CounterDeployer counterDeployer; function setUp() public { setUpDeliveryHelper(); feesConfig = getSocketConfig(feesChainSlug); - counterDeployer = new CounterDeployer( - address(addressResolver), - address(auctionManager), - FAST, - createFees(feesAmount) - ); - counterGateway = new CounterAppGateway( address(addressResolver), - address(counterDeployer), - address(auctionManager), createFees(feesAmount) ); depositFees(address(counterGateway), createFees(depositAmount)); bytes32[] memory contractIds = new bytes32[](1); - contractIds[0] = counterDeployer.counter(); - asyncId = _deploy( - contractIds, - feesChainSlug, - 1, - IAppDeployer(counterDeployer), - address(counterGateway) - ); + contractIds[0] = counterGateway.counter(); + asyncId = _deploy(contractIds, feesChainSlug, 1, IAppGateway(counterGateway)); } function testDistributeFee() public { @@ -68,9 +51,9 @@ contract FeesTest is DeliveryHelperTest { hoax(transmitterEOA); (bytes32 payloadId, , PayloadDetails memory payloadDetails) = feesManager .withdrawTransmitterFees(feesChainSlug, ETH_ADDRESS, address(receiver)); - writePayloadIdCounter++; + payloadIdCounter++; + finalizeAndRelay(payloadId, payloadDetails); - finalizeAndExecute(payloadId, true, payloadDetails); assertEq( transmitterReceiverBalanceBefore + bidAmount, address(receiver).balance, @@ -92,16 +75,19 @@ contract FeesTest is DeliveryHelperTest { uint256 receiverBalanceBefore = receiver.balance; uint256 withdrawAmount = 0.5 ether; + counterGateway.withdrawFeeTokens(feesChainSlug, ETH_ADDRESS, withdrawAmount, receiver); - asyncId = getCurrentAsyncId(); + asyncId = getNextAsyncId(); bytes32[] memory payloadIds = getWritePayloadIds( feesChainSlug, address(getSocketConfig(feesChainSlug).switchboard), 1 ); bidAndEndAuction(asyncId); - finalizeAndExecute(payloadIds[0], true); + + PayloadDetails memory payloadDetails = deliveryHelper.getPayloadDetails(payloadIds[0]); + finalizeAndRelay(payloadIds[0], payloadDetails); assertEq( depositAmount - withdrawAmount, address(feesConfig.feesPlug).balance, diff --git a/test/Inbox.t.sol b/test/Inbox.t.sol index b9de3de5..07bad0a5 100644 --- a/test/Inbox.t.sol +++ b/test/Inbox.t.sol @@ -1,33 +1,31 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {CounterInboxAppGateway} from "../contracts/apps/counter-inbox/CounterInboxAppGateway.sol"; -import {CounterInbox} from "../contracts/apps/counter-inbox/CounterInbox.sol"; +import {CounterAppGateway} from "./apps/app-gateways/counter/CounterAppGateway.sol"; +import {Counter} from "./apps/app-gateways/counter/Counter.sol"; import "./DeliveryHelper.t.sol"; contract InboxTest is DeliveryHelperTest { uint256 constant feesAmount = 0.01 ether; - CounterInboxAppGateway public gateway; - CounterInbox public inbox; + CounterAppGateway public gateway; + Counter public inbox; function setUp() public { // Setup core test infrastructure setUpDeliveryHelper(); // Deploy the inbox contract - inbox = new CounterInbox(); + inbox = new Counter(); // Deploy the gateway with fees - gateway = new CounterInboxAppGateway( + gateway = new CounterAppGateway( address(addressResolver), - address(auctionManager), - address(inbox), - arbChainSlug, createFees(feesAmount) ); + gateway.setIsValidPlug(arbChainSlug, address(inbox)); // Connect the inbox to the gateway and socket - inbox.connectSocket( + inbox.initSocket( address(gateway), address(arbConfig.socket), address(arbConfig.switchboard) @@ -42,25 +40,25 @@ contract InboxTest is DeliveryHelperTest { switchboard: address(arbConfig.switchboard) }); - hoax(watcherEOA); - watcherPrecompile.setAppGateways(gateways); + bytes memory watcherSignature = _createWatcherSignature( + abi.encode(IWatcherPrecompile.setAppGateways.selector, gateways) + ); + watcherPrecompile.setAppGateways(gateways, signatureNonce++, watcherSignature); hoax(watcherEOA); - watcherPrecompile.setIsValidInboxCaller(arbChainSlug, address(inbox), true); + watcherPrecompile.setIsValidPlug(arbChainSlug, address(inbox), true); } function testInboxIncrement() public { // Initial counter value should be 0 - assertEq(gateway.counter(), 0, "Initial gateway counter should be 0"); + assertEq(gateway.counterVal(), 0, "Initial gateway counter should be 0"); // Simulate a message from another chain through the watcher uint256 incrementValue = 5; bytes32 callId = inbox.increaseOnGateway(incrementValue); - - hoax(watcherEOA); - CallFromInboxParams[] memory params = new CallFromInboxParams[](1); - params[0] = CallFromInboxParams({ + CallFromChainParams[] memory params = new CallFromChainParams[](1); + params[0] = CallFromChainParams({ callId: callId, chainSlug: arbChainSlug, appGateway: address(gateway), @@ -68,8 +66,12 @@ contract InboxTest is DeliveryHelperTest { payload: abi.encode(incrementValue), params: bytes32(0) }); - watcherPrecompile.callAppGateways(params); + + bytes memory watcherSignature = _createWatcherSignature( + abi.encode(WatcherPrecompile.callAppGateways.selector, params) + ); + watcherPrecompile.callAppGateways(params, signatureNonce++, watcherSignature); // Check counter was incremented - assertEq(gateway.counter(), incrementValue, "Gateway counter should be incremented"); + assertEq(gateway.counterVal(), incrementValue, "Gateway counter should be incremented"); } } diff --git a/test/Migration.t.sol b/test/Migration.t.sol index 1b495f40..17ffb944 100644 --- a/test/Migration.t.sol +++ b/test/Migration.t.sol @@ -2,24 +2,33 @@ pragma solidity ^0.8.0; import "./SetupTest.t.sol"; -import "../contracts/socket/utils/SignatureVerifier.sol"; -import "../contracts/AddressResolver.sol"; -import "../contracts/watcherPrecompile/WatcherPrecompile.sol"; -import "./MockWatcherPrecompileImpl.sol"; +import "../contracts/protocol/AddressResolver.sol"; +import "../contracts/protocol/watcherPrecompile/WatcherPrecompile.sol"; +import "../contracts/protocol/Forwarder.sol"; +import "../contracts/protocol/AsyncPromise.sol"; +import "./mock/MockWatcherPrecompileImpl.sol"; contract MigrationTest is SetupTest { // ERC1967Factory emits this event with both proxy and implementation addresses event Upgraded(address indexed proxy, address indexed implementation); + event ImplementationUpdated(string contractName, address newImplementation); // ERC1967 implementation slot bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + // Beacon implementation slot + uint256 internal constant _BEACON_IMPLEMENTATION_SLOT = 0x911c5a209f08d5ec5e; + + // Beacon slot in ERC1967 + bytes32 internal constant _BEACON_SLOT = + 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; + // Error selector for Unauthorized error bytes4 internal constant UNAUTHORIZED_SELECTOR = 0x82b42900; // bytes4(keccak256("Unauthorized()")) function setUp() public { - deployOffChainVMCore(); + deployEVMxCore(); } function getImplementation(address proxy) internal view returns (address) { @@ -27,24 +36,14 @@ contract MigrationTest is SetupTest { return address(uint160(uint256(value))); } - function testSignatureVerifierUpgrade() public { - // Deploy new implementation - SignatureVerifier newImpl = new SignatureVerifier(); - - // Store old implementation address - address oldImpl = getImplementation(address(signatureVerifier)); - - // Upgrade proxy to new implementation - vm.startPrank(watcherEOA); - vm.expectEmit(true, true, true, true, address(proxyFactory)); - emit Upgraded(address(signatureVerifier), address(newImpl)); - proxyFactory.upgradeAndCall(address(signatureVerifier), address(newImpl), ""); - vm.stopPrank(); + function getBeaconImplementation(address beacon) internal view returns (address) { + bytes32 value = vm.load(beacon, bytes32(_BEACON_IMPLEMENTATION_SLOT)); + return address(uint160(uint256(value))); + } - // Verify upgrade was successful - address newImplAddr = getImplementation(address(signatureVerifier)); - assertNotEq(oldImpl, newImplAddr, "Implementation should have changed"); - assertEq(newImplAddr, address(newImpl), "New implementation not set correctly"); + function getBeacon(address proxy) internal view returns (address) { + bytes32 value = vm.load(proxy, _BEACON_SLOT); + return address(uint160(uint256(value))); } function testAddressResolverUpgrade() public { @@ -101,7 +100,11 @@ contract MigrationTest is SetupTest { address(addressResolver), "AddressResolver should be preserved" ); - assertEq(watcherPrecompile.maxLimit(), maxLimit * 10 ** 18, "MaxLimit should be preserved"); + assertEq( + watcherPrecompile.defaultLimit(), + defaultLimit * 10 ** 18, + "DefaultLimit should be preserved" + ); } function testUpgradeWithInitializationData() public { @@ -111,13 +114,13 @@ contract MigrationTest is SetupTest { // Store old implementation address for verification address oldImpl = getImplementation(address(watcherPrecompile)); - // Prepare initialization data with new maxLimit - uint256 newMaxLimit = 2000; + // Prepare initialization data with new defaultLimit + uint256 newDefaultLimit = 2000; bytes memory initData = abi.encodeWithSelector( MockWatcherPrecompileImpl.mockReinitialize.selector, watcherEOA, address(addressResolver), - newMaxLimit + newDefaultLimit ); // Upgrade proxy with initialization data @@ -132,28 +135,140 @@ contract MigrationTest is SetupTest { assertNotEq(oldImpl, newImplAddr, "Implementation should have changed"); assertEq(newImplAddr, address(newImpl), "New implementation not set correctly"); assertEq( - watcherPrecompile.maxLimit(), - newMaxLimit * 10 ** 18, - "MaxLimit should be updated" + watcherPrecompile.defaultLimit(), + newDefaultLimit * 10 ** 18, + "DefaultLimit should be updated" ); } function testUnauthorizedUpgrade() public { // Deploy new implementation - SignatureVerifier newImpl = new SignatureVerifier(); + WatcherPrecompile newImpl = new WatcherPrecompile(); // Try to upgrade from unauthorized account address unauthorizedUser = address(0xBEEF); vm.startPrank(unauthorizedUser); vm.expectRevert(UNAUTHORIZED_SELECTOR); - proxyFactory.upgradeAndCall(address(signatureVerifier), address(newImpl), ""); + proxyFactory.upgradeAndCall(address(watcherPrecompile), address(newImpl), ""); vm.stopPrank(); // Verify implementation was not changed assertEq( - getImplementation(address(signatureVerifier)), - address(signatureVerifierImpl), + getImplementation(address(watcherPrecompile)), + address(watcherPrecompileImpl), "Implementation should not have changed" ); } + + function testForwarderBeaconUpgrade() public { + // Deploy new implementation + Forwarder newImpl = new Forwarder(); + + // Get current implementation from beacon + address oldImpl = getBeaconImplementation(address(addressResolver.forwarderBeacon())); + + // Upgrade beacon to new implementation + vm.startPrank(watcherEOA); + vm.expectEmit(true, true, true, true, address(addressResolver)); + emit ImplementationUpdated("Forwarder", address(newImpl)); + addressResolver.setForwarderImplementation(address(newImpl)); + vm.stopPrank(); + + // Verify upgrade was successful + address newImplAddr = getBeaconImplementation(address(addressResolver.forwarderBeacon())); + assertNotEq(oldImpl, newImplAddr, "Implementation should have changed"); + assertEq(newImplAddr, address(newImpl), "New implementation not set correctly"); + + // Deploy a new forwarder and verify it uses the correct beacon + address newForwarder = addressResolver.getOrDeployForwarderContract( + address(this), + address(0x123), + 1 + ); + address beacon = getBeacon(newForwarder); + assertEq( + beacon, + address(addressResolver.forwarderBeacon()), + "Beacon address not set correctly" + ); + + // Get implementation from beacon and verify it matches + address implFromBeacon = getBeaconImplementation(beacon); + assertEq( + implFromBeacon, + address(newImpl), + "Beacon implementation should match new implementation" + ); + } + + function testAsyncPromiseBeaconUpgrade() public { + // Deploy new implementation + AsyncPromise newImpl = new AsyncPromise(); + + // Get current implementation from beacon + address oldImpl = getBeaconImplementation(address(addressResolver.asyncPromiseBeacon())); + + // Upgrade beacon to new implementation + vm.startPrank(watcherEOA); + vm.expectEmit(true, true, true, true, address(addressResolver)); + emit ImplementationUpdated("AsyncPromise", address(newImpl)); + addressResolver.setAsyncPromiseImplementation(address(newImpl)); + vm.stopPrank(); + + // Verify upgrade was successful + address newImplAddr = getBeaconImplementation( + address(addressResolver.asyncPromiseBeacon()) + ); + assertNotEq(oldImpl, newImplAddr, "Implementation should have changed"); + assertEq(newImplAddr, address(newImpl), "New implementation not set correctly"); + + // Deploy a new async promise and verify it uses the correct beacon + address newPromise = addressResolver.deployAsyncPromiseContract(address(this)); + address beacon = getBeacon(newPromise); + assertEq( + beacon, + address(addressResolver.asyncPromiseBeacon()), + "Beacon address not set correctly" + ); + + // Get implementation from beacon and verify it matches + address implFromBeacon = getBeaconImplementation(beacon); + assertEq( + implFromBeacon, + address(newImpl), + "Beacon implementation should match new implementation" + ); + } + + function testUnauthorizedBeaconUpgrade() public { + // Deploy new implementations + Forwarder newForwarderImpl = new Forwarder(); + AsyncPromise newAsyncPromiseImpl = new AsyncPromise(); + + // Try to upgrade from unauthorized account + address unauthorizedUser = address(0xBEEF); + + vm.startPrank(unauthorizedUser); + // Try upgrading forwarder beacon + vm.expectRevert(abi.encodeWithSelector(Ownable.Unauthorized.selector)); + addressResolver.setForwarderImplementation(address(newForwarderImpl)); + + // Try upgrading async promise beacon + vm.expectRevert(abi.encodeWithSelector(Ownable.Unauthorized.selector)); + addressResolver.setAsyncPromiseImplementation(address(newAsyncPromiseImpl)); + + vm.stopPrank(); + + // Verify implementations were not changed + assertNotEq( + getBeaconImplementation(address(addressResolver.forwarderBeacon())), + address(newForwarderImpl), + "Forwarder implementation should not have changed" + ); + assertNotEq( + getBeaconImplementation(address(addressResolver.asyncPromiseBeacon())), + address(newAsyncPromiseImpl), + "AsyncPromise implementation should not have changed" + ); + } } diff --git a/test/SetupTest.t.sol b/test/SetupTest.t.sol index 99f0c851..fa419020 100644 --- a/test/SetupTest.t.sol +++ b/test/SetupTest.t.sol @@ -2,22 +2,20 @@ pragma solidity ^0.8.0; import "forge-std/Test.sol"; -import "../contracts/common/Structs.sol"; -import "../contracts/common/Constants.sol"; -import "../contracts/watcherPrecompile/WatcherPrecompile.sol"; +import "../contracts/protocol/utils/common/Structs.sol"; +import "../contracts/protocol/utils/common/Constants.sol"; +import "../contracts/protocol/watcherPrecompile/WatcherPrecompile.sol"; import "../contracts/interfaces/IForwarder.sol"; -import "../contracts/socket/utils/AccessRoles.sol"; -import {Socket} from "../contracts/socket/Socket.sol"; -import {SignatureVerifier} from "../contracts/socket/utils/SignatureVerifier.sol"; -import {Hasher} from "../contracts/socket/utils/Hasher.sol"; -import "../contracts/socket/switchboard/FastSwitchboard.sol"; -import "../contracts/socket/SocketBatcher.sol"; -import "../contracts/AddressResolver.sol"; -import {ContractFactoryPlug} from "../contracts/apps/payload-delivery/ContractFactoryPlug.sol"; -import {FeesPlug} from "../contracts/apps/payload-delivery/FeesPlug.sol"; - -import {ETH_ADDRESS} from "../contracts/common/Constants.sol"; -import {ResolvedPromises} from "../contracts/common/Structs.sol"; +import "../contracts/protocol/utils/common/AccessRoles.sol"; +import {Socket} from "../contracts/protocol/socket/Socket.sol"; +import "../contracts/protocol/socket/switchboard/FastSwitchboard.sol"; +import "../contracts/protocol/socket/SocketBatcher.sol"; +import "../contracts/protocol/AddressResolver.sol"; +import {ContractFactoryPlug} from "../contracts/protocol/payload-delivery/ContractFactoryPlug.sol"; +import {FeesPlug} from "../contracts/protocol/payload-delivery/FeesPlug.sol"; + +import {ETH_ADDRESS} from "../contracts/protocol/utils/common/Constants.sol"; +import {ResolvedPromises} from "../contracts/protocol/utils/common/Structs.sol"; import "solady/utils/ERC1967Factory.sol"; @@ -34,15 +32,15 @@ contract SetupTest is Test { uint32 arbChainSlug = 421614; uint32 optChainSlug = 11155420; - uint32 vmChainSlug = 1; - - uint256 public writePayloadIdCounter = 0; - uint256 public readPayloadIdCounter = 0; - uint256 public timeoutPayloadIdCounter = 0; + uint32 evmxSlug = 1; + uint256 expiryTime = 10000000; - uint256 public maxLimit = 1000; + uint256 public signatureNonce = 0; + uint256 public payloadIdCounter = 0; + uint256 public defaultLimit = 1000; bytes public asyncPromiseBytecode = type(AsyncPromise).creationCode; + uint64 public version = 1; struct SocketContracts { uint32 chainSlug; @@ -55,26 +53,20 @@ contract SetupTest is Test { AddressResolver public addressResolver; WatcherPrecompile public watcherPrecompile; - SignatureVerifier public signatureVerifier; SocketContracts public arbConfig; SocketContracts public optConfig; // Add new variables for proxy admin and implementation contracts WatcherPrecompile public watcherPrecompileImpl; AddressResolver public addressResolverImpl; - SignatureVerifier public signatureVerifierImpl; ERC1967Factory public proxyFactory; event Initialized(uint64 version); function deploySocket(uint32 chainSlug_) internal returns (SocketContracts memory) { - SignatureVerifier verifier = new SignatureVerifier(); - verifier.initialize(owner); - - Hasher hasher = new Hasher(owner); - Socket socket = new Socket(chainSlug_, address(hasher), address(verifier), owner, "test"); + Socket socket = new Socket(chainSlug_, owner, "test"); SocketBatcher socketBatcher = new SocketBatcher(owner, socket); - FastSwitchboard switchboard = new FastSwitchboard(chainSlug_, socket, verifier, owner); + FastSwitchboard switchboard = new FastSwitchboard(chainSlug_, socket, owner); FeesPlug feesPlug = new FeesPlug(address(socket), owner); ContractFactoryPlug contractFactoryPlug = new ContractFactoryPlug(address(socket), owner); @@ -89,7 +81,14 @@ contract SetupTest is Test { vm.stopPrank(); hoax(watcherEOA); - watcherPrecompile.setSwitchboard(chainSlug_, FAST, address(switchboard)); + watcherPrecompile.setOnChainContracts( + chainSlug_, + FAST, + address(switchboard), + address(socket), + address(contractFactoryPlug), + address(feesPlug) + ); return SocketContracts({ @@ -102,33 +101,19 @@ contract SetupTest is Test { }); } - function deployOffChainVMCore() internal { + function deployEVMxCore() internal { // Deploy implementations - signatureVerifierImpl = new SignatureVerifier(); addressResolverImpl = new AddressResolver(); watcherPrecompileImpl = new WatcherPrecompile(); proxyFactory = new ERC1967Factory(); // Deploy and initialize proxies - bytes memory signatureVerifierData = abi.encodeWithSelector( - SignatureVerifier.initialize.selector, - owner - ); - - vm.expectEmit(true, true, true, false); - emit Initialized(1); - address signatureVerifierProxy = proxyFactory.deployAndCall( - address(signatureVerifierImpl), - watcherEOA, - signatureVerifierData - ); - bytes memory addressResolverData = abi.encodeWithSelector( AddressResolver.initialize.selector, watcherEOA ); vm.expectEmit(true, true, true, false); - emit Initialized(1); + emit Initialized(version); address addressResolverProxy = proxyFactory.deployAndCall( address(addressResolverImpl), watcherEOA, @@ -139,10 +124,12 @@ contract SetupTest is Test { WatcherPrecompile.initialize.selector, watcherEOA, address(addressResolverProxy), - maxLimit + defaultLimit, + expiryTime, + evmxSlug ); vm.expectEmit(true, true, true, false); - emit Initialized(1); + emit Initialized(version); address watcherPrecompileProxy = proxyFactory.deployAndCall( address(watcherPrecompileImpl), watcherEOA, @@ -150,12 +137,13 @@ contract SetupTest is Test { ); // Assign proxy addresses to public variables - signatureVerifier = SignatureVerifier(address(signatureVerifierProxy)); addressResolver = AddressResolver(address(addressResolverProxy)); watcherPrecompile = WatcherPrecompile(address(watcherPrecompileProxy)); - hoax(watcherEOA); + vm.startPrank(watcherEOA); + watcherPrecompile.grantRole(WATCHER_ROLE, watcherEOA); addressResolver.setWatcherPrecompile(address(watcherPrecompile)); + vm.stopPrank(); } function _createSignature( @@ -185,25 +173,28 @@ contract SetupTest is Test { function relayTx( uint32 chainSlug_, bytes32 payloadId, - bytes32 root, + bytes32 digest, PayloadDetails memory payloadDetails, - bytes memory watcherSignature + bytes memory watcherProof ) internal returns (bytes memory) { SocketContracts memory socketConfig = getSocketConfig(chainSlug_); bytes32 transmitterDigest = keccak256(abi.encode(address(socketConfig.socket), payloadId)); bytes memory transmitterSig = _createSignature(transmitterDigest, transmitterPrivateKey); + (, , , , , , uint256 deadline, , , ) = watcherPrecompile.asyncRequests(payloadId); + vm.startPrank(transmitterEOA); - ExecutePayloadParams memory params = ExecutePayloadParams({ + AttestAndExecutePayloadParams memory params = AttestAndExecutePayloadParams({ switchboard: address(socketConfig.switchboard), - root: root, - watcherSignature: watcherSignature, + digest: digest, + proof: watcherProof, payloadId: payloadId, appGateway: payloadDetails.appGateway, executionGasLimit: payloadDetails.executionGasLimit, transmitterSignature: transmitterSig, payload: payloadDetails.payload, - target: payloadDetails.target + target: payloadDetails.target, + deadline: deadline }); bytes memory returnData = socketConfig.socketBatcher.attestAndExecute(params); @@ -224,8 +215,29 @@ contract SetupTest is Test { returnDatas[0] = returnData; resolvedPromises[0] = ResolvedPromises({payloadId: payloadId, returnData: returnDatas}); - vm.prank(watcherEOA); - watcherPrecompile.resolvePromises(resolvedPromises); + + bytes memory watcherSignature = _createWatcherSignature( + abi.encode(WatcherPrecompile.resolvePromises.selector, resolvedPromises) + ); + watcherPrecompile.resolvePromises(resolvedPromises, signatureNonce++, watcherSignature); + } + + function _createWatcherSignature( + bytes memory params_ + ) internal view returns (bytes memory sig) { + bytes32 digest = keccak256( + abi.encode(address(watcherPrecompile), evmxSlug, signatureNonce, params_) + ); + digest = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", digest)); + (uint8 sigV, bytes32 sigR, bytes32 sigS) = vm.sign(watcherPrivateKey, digest); + sig = new bytes(65); + bytes1 v32 = bytes1(sigV); + + assembly { + mstore(add(sig, 96), v32) + mstore(add(sig, 32), sigR) + mstore(add(sig, 64), sigS) + } } function getWritePayloadId( @@ -233,10 +245,7 @@ contract SetupTest is Test { address switchboard_, uint256 counter_ ) internal pure returns (bytes32) { - return - bytes32( - (uint256(chainSlug_) << 224) | (uint256(uint160(switchboard_)) << 64) | counter_ - ); + return _encodeId(chainSlug_, switchboard_, counter_); } function getWritePayloadIds( @@ -246,15 +255,19 @@ contract SetupTest is Test { ) internal returns (bytes32[] memory) { bytes32[] memory payloadIds = new bytes32[](numPayloads); for (uint256 i = 0; i < numPayloads; i++) { - payloadIds[i] = getWritePayloadId(chainSlug_, switchboard_, i + writePayloadIdCounter); + payloadIds[i] = _encodeId(chainSlug_, switchboard_, payloadIdCounter++); } - - writePayloadIdCounter += numPayloads; return payloadIds; } - function encodeTimeoutId(uint256 timeoutCounter_) internal view returns (bytes32) { - // watcher address (160 bits) | counter (64 bits) - return bytes32((uint256(uint160(address(watcherPrecompile))) << 64) | timeoutCounter_); + function _encodeId( + uint32 chainSlug_, + address sbOrWatcher_, + uint256 counter_ + ) internal pure returns (bytes32) { + return + bytes32( + (uint256(chainSlug_) << 224) | (uint256(uint160(sbOrWatcher_)) << 64) | counter_ + ); } } diff --git a/test/Storage.t.sol b/test/Storage.t.sol new file mode 100644 index 00000000..89b5b3b9 --- /dev/null +++ b/test/Storage.t.sol @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "./DeliveryHelper.t.sol"; + +contract StorageTest is DeliveryHelperTest { + DeliveryHelper public deliveryHelperImpl; + + function setUp() public { + setUpDeliveryHelper(); + } + + function testAddressResolverSlot() public view { + // Test AddressResolver version at slot 59 + bytes32 versionSlot = vm.load(address(addressResolver), bytes32(uint256(59))); + assertEq(uint64(uint256(versionSlot)), 1); + + // Test auction manager address at slot 61 in AddressResolver + bytes32 slotValue = vm.load(address(addressResolver), bytes32(uint256(61))); + assertEq(address(uint160(uint256(slotValue))), address(auctionManager)); + } + + function testWatcherPrecompileSlot() public view { + // Test AddressResolver address at slot 109 in WatcherPrecompile + bytes32 slotValue = vm.load(address(watcherPrecompile), bytes32(uint256(52))); + assertEq(uint256(slotValue), evmxSlug); + + slotValue = vm.load(address(watcherPrecompile), bytes32(uint256(220))); + assertEq(address(uint160(uint256(slotValue))), address(addressResolver)); + } + + function testFeesManagerSlot() public view { + bytes32 slotValue = vm.load(address(feesManager), bytes32(uint256(51))); + assertEq(uint32(uint256(slotValue)), evmxSlug); + + slotValue = vm.load(address(feesManager), bytes32(uint256(106))); + assertEq(address(uint160(uint256(slotValue))), address(addressResolver)); + } + + function testAuctionManagerSlot() public view { + bytes32 slotValue = vm.load(address(auctionManager), bytes32(uint256(50))); + assertEq(uint32(uint256(slotValue)), evmxSlug); + + slotValue = vm.load(address(auctionManager), bytes32(uint256(105))); + assertEq(address(uint160(uint256(slotValue))), address(addressResolver)); + } + + function testForwarderSlot() public { + address forwarder = addressResolver.getOrDeployForwarderContract( + address(this), + address(this), + evmxSlug + ); + + bytes32 slotValue = vm.load(address(forwarder), bytes32(uint256(50))); + assertEq(uint32(uint256(slotValue)), evmxSlug); + + slotValue = vm.load(address(forwarder), bytes32(uint256(53))); + assertEq(address(uint160(uint256(slotValue))), address(0)); + } + + function testAsyncPromiseSlot() public { + address asyncPromise = addressResolver.deployAsyncPromiseContract(address(this)); + + bytes32 slotValue = vm.load(address(asyncPromise), bytes32(uint256(51))); + assertEq(address(uint160(uint256(slotValue))), address(this)); + + slotValue = vm.load(address(asyncPromise), bytes32(uint256(103))); + assertEq(address(uint160(uint256(slotValue))), address(addressResolver)); + } + + function testDeliveryHelperSlot() public view { + bytes32 slotValue = vm.load(address(deliveryHelper), bytes32(uint256(50))); + assertEq(uint256(uint256(slotValue)), 0); + + slotValue = vm.load(address(deliveryHelper), bytes32(uint256(109))); + assertEq(address(uint160(uint256(slotValue))), address(addressResolver)); + } +} diff --git a/test/apps/Counter.t.sol b/test/apps/Counter.t.sol index c35c471e..cd029d40 100644 --- a/test/apps/Counter.t.sol +++ b/test/apps/Counter.t.sol @@ -1,9 +1,8 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.21; -import {CounterAppGateway} from "../../contracts/apps/counter/CounterAppGateway.sol"; -import {CounterDeployer} from "../../contracts/apps/counter/CounterDeployer.sol"; -import {Counter} from "../../contracts/apps/counter/Counter.sol"; +import {CounterAppGateway} from "./app-gateways/counter/CounterAppGateway.sol"; +import {Counter} from "./app-gateways/counter/Counter.sol"; import "../DeliveryHelper.t.sol"; contract CounterTest is DeliveryHelperTest { @@ -13,38 +12,22 @@ contract CounterTest is DeliveryHelperTest { bytes32[] contractIds = new bytes32[](1); CounterAppGateway counterGateway; - CounterDeployer counterDeployer; function deploySetup() internal { setUpDeliveryHelper(); - counterDeployer = new CounterDeployer( - address(addressResolver), - address(auctionManager), - FAST, - createFees(feesAmount) - ); - counterGateway = new CounterAppGateway( address(addressResolver), - address(counterDeployer), - address(auctionManager), createFees(feesAmount) ); depositFees(address(counterGateway), createFees(1 ether)); - counterId = counterDeployer.counter(); + counterId = counterGateway.counter(); contractIds[0] = counterId; } function deployCounterApp(uint32 chainSlug) internal returns (bytes32 asyncId) { - asyncId = _deploy( - contractIds, - chainSlug, - 1, - IAppDeployer(counterDeployer), - address(counterGateway) - ); + asyncId = _deploy(contractIds, chainSlug, 1, IAppGateway(counterGateway)); } function testCounterDeployment() external { @@ -54,7 +37,7 @@ contract CounterTest is DeliveryHelperTest { (address onChain, address forwarder) = getOnChainAndForwarderAddresses( arbChainSlug, counterId, - counterDeployer + counterGateway ); assertEq( @@ -76,7 +59,7 @@ contract CounterTest is DeliveryHelperTest { (address arbCounter, address arbCounterForwarder) = getOnChainAndForwarderAddresses( arbChainSlug, counterId, - counterDeployer + counterGateway ); uint256 arbCounterBefore = Counter(arbCounter).counter(); @@ -97,12 +80,12 @@ contract CounterTest is DeliveryHelperTest { (address arbCounter, address arbCounterForwarder) = getOnChainAndForwarderAddresses( arbChainSlug, counterId, - counterDeployer + counterGateway ); (address optCounter, address optCounterForwarder) = getOnChainAndForwarderAddresses( optChainSlug, counterId, - counterDeployer + counterGateway ); uint256 arbCounterBefore = Counter(arbCounter).counter(); @@ -117,42 +100,46 @@ contract CounterTest is DeliveryHelperTest { chains[0] = arbChainSlug; chains[1] = optChainSlug; _executeWriteBatchMultiChain(chains); + assertEq(Counter(arbCounter).counter(), arbCounterBefore + 1); assertEq(Counter(optCounter).counter(), optCounterBefore + 1); } function testCounterReadMultipleChains() external { testCounterIncrementMultipleChains(); + (address arbCounter, address arbCounterForwarder) = getOnChainAndForwarderAddresses( arbChainSlug, counterId, - counterDeployer + counterGateway ); (address optCounter, address optCounterForwarder) = getOnChainAndForwarderAddresses( optChainSlug, counterId, - counterDeployer + counterGateway ); address[] memory instances = new address[](2); instances[0] = arbCounterForwarder; instances[1] = optCounterForwarder; + + bytes32 bridgeAsyncId = getNextAsyncId(); + bytes32[] memory payloadIds = new bytes32[](3); - payloadIds[0] = bytes32(readPayloadIdCounter++); - payloadIds[1] = bytes32(readPayloadIdCounter++); + payloadIds[0] = _encodeId(evmxSlug, address(watcherPrecompile), payloadIdCounter++); + payloadIds[1] = _encodeId(evmxSlug, address(watcherPrecompile), payloadIdCounter++); payloadIds[2] = getWritePayloadId( arbChainSlug, address(getSocketConfig(arbChainSlug).switchboard), - writePayloadIdCounter++ + payloadIdCounter++ ); - bytes32 bridgeAsyncId = getCurrentAsyncId(); counterGateway.readCounters(instances); - finalizeQuery(payloadIds[0], abi.encode(Counter(arbCounter).counter())); - finalizeQuery(payloadIds[1], abi.encode(Counter(optCounter).counter())); bidAndEndAuction(bridgeAsyncId); - finalizeAndExecute(payloadIds[2], false); + finalizeQuery(payloadIds[0], abi.encode(Counter(arbCounter).counter())); + finalizeQuery(payloadIds[1], abi.encode(Counter(optCounter).counter())); + finalizeAndExecute(payloadIds[2]); } } diff --git a/test/apps/ParallelCounter.t.sol b/test/apps/ParallelCounter.t.sol index 7460cfc7..56261031 100644 --- a/test/apps/ParallelCounter.t.sol +++ b/test/apps/ParallelCounter.t.sol @@ -1,9 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.21; -import {ParallelCounterAppGateway} from "../../contracts/apps/parallel-counter/ParallelCounterAppGateway.sol"; -import {ParallelCounterDeployer} from "../../contracts/apps/parallel-counter/ParallelCounterDeployer.sol"; -import {Counter} from "../../contracts/apps/counter/Counter.sol"; +import {CounterAppGateway} from "./app-gateways/counter/CounterAppGateway.sol"; import "../DeliveryHelper.t.sol"; contract ParallelCounterTest is DeliveryHelperTest { @@ -13,39 +11,46 @@ contract ParallelCounterTest is DeliveryHelperTest { bytes32 counterId2; bytes32[] contractIds = new bytes32[](2); - ParallelCounterAppGateway parallelCounterGateway; - ParallelCounterDeployer parallelCounterDeployer; + CounterAppGateway parallelCounterGateway; function deploySetup() internal { setUpDeliveryHelper(); - parallelCounterDeployer = new ParallelCounterDeployer( + parallelCounterGateway = new CounterAppGateway( address(addressResolver), - address(auctionManager), - FAST, - createFees(feesAmount) - ); - - parallelCounterGateway = new ParallelCounterAppGateway( - address(addressResolver), - address(parallelCounterDeployer), - address(auctionManager), createFees(feesAmount) ); depositFees(address(parallelCounterGateway), createFees(1 ether)); - counterId1 = parallelCounterDeployer.counter1(); - counterId2 = parallelCounterDeployer.counter2(); + counterId1 = parallelCounterGateway.counter1(); + counterId2 = parallelCounterGateway.counter(); contractIds[0] = counterId1; contractIds[1] = counterId2; } + function _deployParallel(uint32[] memory chainSlugs_) internal returns (bytes32 asyncId) { + asyncId = getNextAsyncId(); + bytes32[] memory payloadIds = new bytes32[](contractIds.length * chainSlugs_.length); + for (uint32 i = 0; i < chainSlugs_.length; i++) { + for (uint j = 0; j < contractIds.length; j++) { + payloadIds[i * contractIds.length + j] = getWritePayloadId( + chainSlugs_[i], + address(getSocketConfig(chainSlugs_[i]).switchboard), + i * contractIds.length + j + payloadIdCounter + ); + } + } + // for fees + payloadIdCounter += chainSlugs_.length * contractIds.length + 1; + + parallelCounterGateway.deployMultiChainContracts(chainSlugs_); + bidAndExecute(payloadIds, asyncId); + for (uint i = 0; i < chainSlugs_.length; i++) { + setupGatewayAndPlugs(chainSlugs_[i], parallelCounterGateway, contractIds); + } + } + function deployCounterApps(uint32[] memory chainSlugs) internal returns (bytes32 asyncId) { - asyncId = _deployParallel( - contractIds, - chainSlugs, - IMultiChainAppDeployer(address(parallelCounterDeployer)), - address(parallelCounterGateway) - ); + asyncId = _deployParallel(chainSlugs); } function testParallelCounterDeployment() external { @@ -58,23 +63,23 @@ contract ParallelCounterTest is DeliveryHelperTest { (address onChainArb1, address forwarderArb1) = getOnChainAndForwarderAddresses( arbChainSlug, counterId1, - parallelCounterDeployer + parallelCounterGateway ); (address onChainArb2, address forwarderArb2) = getOnChainAndForwarderAddresses( arbChainSlug, counterId2, - parallelCounterDeployer + parallelCounterGateway ); (address onChainOpt1, address forwarderOpt1) = getOnChainAndForwarderAddresses( optChainSlug, counterId1, - parallelCounterDeployer + parallelCounterGateway ); (address onChainOpt2, address forwarderOpt2) = getOnChainAndForwarderAddresses( optChainSlug, counterId2, - parallelCounterDeployer + parallelCounterGateway ); assertEq( @@ -119,6 +124,26 @@ contract ParallelCounterTest is DeliveryHelperTest { ); } + function testAsyncModifierNotSet() external { + deploySetup(); + uint32[] memory chainSlugs = new uint32[](1); + chainSlugs[0] = arbChainSlug; + deployCounterApps(chainSlugs); + + (, address arbCounterForwarder) = getOnChainAndForwarderAddresses( + arbChainSlug, + counterId1, + parallelCounterGateway + ); + + address[] memory instances = new address[](1); + instances[0] = arbCounterForwarder; + + // Should revert with AsyncModifierNotUsed error + vm.expectRevert(abi.encodeWithSignature("AsyncModifierNotUsed()")); + parallelCounterGateway.incrementCountersWithoutAsync(instances); + } + // function testCounterIncrement() external { // deploySetup(); // deployCounterApp(arbChainSlug); diff --git a/test/apps/SuperToken.t.sol b/test/apps/SuperToken.t.sol index 50448a31..34b438ac 100644 --- a/test/apps/SuperToken.t.sol +++ b/test/apps/SuperToken.t.sol @@ -1,11 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {SuperTokenDeployer} from "../../contracts/apps/super-token/SuperTokenDeployer.sol"; -import {SuperTokenAppGateway} from "../../contracts/apps/super-token/SuperTokenAppGateway.sol"; -import {SuperToken} from "../../contracts/apps/super-token/SuperToken.sol"; +import {SuperTokenAppGateway} from "./app-gateways/super-token/SuperTokenAppGateway.sol"; +import {SuperToken} from "./app-gateways/super-token/SuperToken.sol"; import "../DeliveryHelper.t.sol"; -import {QUERY, FINALIZE, SCHEDULE} from "../../contracts/common/Constants.sol"; +import {QUERY, FINALIZE, SCHEDULE} from "../../contracts/protocol/utils/common/Constants.sol"; /** * @title SuperToken Test @@ -28,7 +27,6 @@ contract SuperTokenTest is DeliveryHelperTest { */ struct AppContracts { SuperTokenAppGateway superTokenApp; - SuperTokenDeployer superTokenDeployer; bytes32 superToken; } @@ -64,34 +62,25 @@ contract SuperTokenTest is DeliveryHelperTest { * - Sets up fee structure and auction manager integration */ function deploySuperTokenApp() internal { - SuperTokenDeployer superTokenDeployer = new SuperTokenDeployer( + SuperTokenAppGateway superTokenApp = new SuperTokenAppGateway( address(addressResolver), owner, - address(auctionManager), - FAST, - SuperTokenDeployer.ConstructorParams({ + createFees(maxFees), + SuperTokenAppGateway.ConstructorParams({ name_: "SUPER TOKEN", symbol_: "SUPER", decimals_: 18, initialSupplyHolder_: owner, initialSupply_: 1000000000 ether - }), - createFees(maxFees) + }) ); - SuperTokenAppGateway superTokenApp = new SuperTokenAppGateway( - address(addressResolver), - address(superTokenDeployer), - createFees(maxFees), - address(auctionManager) - ); - // Enable app gateways to do all operations in the Watcher: Read, Write and Schedule on VM + // Enable app gateways to do all operations in the Watcher: Read, Write and Schedule on EVMx // Watcher sets the limits for apps in this SOCKET protocol version depositFees(address(superTokenApp), createFees(1 ether)); appContracts = AppContracts({ superTokenApp: superTokenApp, - superTokenDeployer: superTokenDeployer, - superToken: superTokenDeployer.superToken() + superToken: superTokenApp.superToken() }); } @@ -103,18 +92,12 @@ contract SuperTokenTest is DeliveryHelperTest { * - Correct setup of forwarder contracts for multi-chain communication */ function testContractDeployment() public { - _deploy( - contractIds, - arbChainSlug, - 1, - appContracts.superTokenDeployer, - address(appContracts.superTokenApp) - ); + _deploy(contractIds, arbChainSlug, 1, IAppGateway(appContracts.superTokenApp)); (address onChain, address forwarder) = getOnChainAndForwarderAddresses( arbChainSlug, appContracts.superToken, - appContracts.superTokenDeployer + IAppGateway(appContracts.superTokenApp) ); assertEq( @@ -132,6 +115,7 @@ contract SuperTokenTest is DeliveryHelperTest { onChain, "Forwarder SuperToken onChainAddress should be correct" ); + assertEq(SuperToken(onChain).owner(), owner, "SuperToken owner should be correct"); } /** @@ -139,21 +123,8 @@ contract SuperTokenTest is DeliveryHelperTest { * @dev Deploys necessary contracts on both Arbitrum and Optimism chains */ function beforeTransfer() internal { - _deploy( - contractIds, - arbChainSlug, - 1, - appContracts.superTokenDeployer, - address(appContracts.superTokenApp) - ); - - _deploy( - contractIds, - optChainSlug, - 1, - appContracts.superTokenDeployer, - address(appContracts.superTokenApp) - ); + _deploy(contractIds, arbChainSlug, 1, IAppGateway(appContracts.superTokenApp)); + _deploy(contractIds, optChainSlug, 1, IAppGateway(appContracts.superTokenApp)); } /** @@ -170,13 +141,13 @@ contract SuperTokenTest is DeliveryHelperTest { (address onChainArb, address forwarderArb) = getOnChainAndForwarderAddresses( arbChainSlug, appContracts.superToken, - appContracts.superTokenDeployer + IAppGateway(appContracts.superTokenApp) ); (address onChainOpt, address forwarderOpt) = getOnChainAndForwarderAddresses( optChainSlug, appContracts.superToken, - appContracts.superTokenDeployer + IAppGateway(appContracts.superTokenApp) ); uint256 arbBalanceBefore = SuperToken(onChainArb).balanceOf(owner); diff --git a/test/apps/SuperTokenLockable.t.sol b/test/apps/SuperTokenLockable.t.sol index 12811795..b1161169 100644 --- a/test/apps/SuperTokenLockable.t.sol +++ b/test/apps/SuperTokenLockable.t.sol @@ -1,17 +1,16 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {SuperTokenLockableDeployer} from "../../contracts/apps/super-token-lockable/SuperTokenLockableDeployer.sol"; -import {SuperTokenLockableAppGateway} from "../../contracts/apps/super-token-lockable/SuperTokenLockableAppGateway.sol"; -import {SuperTokenLockable} from "../../contracts/apps/super-token-lockable/SuperTokenLockable.sol"; -import {QUERY, FINALIZE, SCHEDULE} from "../../contracts/common/Constants.sol"; +import {SuperTokenLockableAppGateway} from "./app-gateways/super-token-lockable/SuperTokenLockableAppGateway.sol"; +import {SuperTokenLockable} from "./app-gateways/super-token-lockable/SuperTokenLockable.sol"; +import {LimitHook} from "./app-gateways/super-token-lockable/LimitHook.sol"; +import {QUERY, FINALIZE, SCHEDULE} from "../../contracts/protocol/utils/common/Constants.sol"; import "../DeliveryHelper.t.sol"; contract SuperTokenLockableTest is DeliveryHelperTest { struct AppContracts { SuperTokenLockableAppGateway superTokenLockableApp; - SuperTokenLockableDeployer superTokenLockableDeployer; bytes32 superTokenLockable; bytes32 limitHook; } @@ -33,12 +32,11 @@ contract SuperTokenLockableTest is DeliveryHelperTest { } function deploySuperTokenApp() internal { - SuperTokenLockableDeployer superTokenLockableDeployer = new SuperTokenLockableDeployer( + SuperTokenLockableAppGateway superTokenLockableApp = new SuperTokenLockableAppGateway( address(addressResolver), owner, - address(auctionManager), - FAST, - SuperTokenLockableDeployer.ConstructorParams({ + createFees(maxFees), + SuperTokenLockableAppGateway.ConstructorParams({ _burnLimit: 10000000000000000000000, _mintLimit: 10000000000000000000000, name_: "SUPER TOKEN", @@ -46,22 +44,14 @@ contract SuperTokenLockableTest is DeliveryHelperTest { decimals_: 18, initialSupplyHolder_: owner, initialSupply_: 1000000000 ether - }), - createFees(maxFees) - ); - SuperTokenLockableAppGateway superTokenLockableApp = new SuperTokenLockableAppGateway( - address(addressResolver), - address(superTokenLockableDeployer), - address(auctionManager), - createFees(maxFees) + }) ); depositFees(address(superTokenLockableApp), createFees(1 ether)); appContracts = AppContracts({ superTokenLockableApp: superTokenLockableApp, - superTokenLockableDeployer: superTokenLockableDeployer, - superTokenLockable: superTokenLockableDeployer.superTokenLockable(), - limitHook: superTokenLockableDeployer.limitHook() + superTokenLockable: superTokenLockableApp.superTokenLockable(), + limitHook: superTokenLockableApp.limitHook() }); } @@ -71,15 +61,13 @@ contract SuperTokenLockableTest is DeliveryHelperTest { PayloadDetails[] memory payloadDetails = new PayloadDetails[](2); payloadDetails[0] = createDeployPayloadDetail( chainSlug_, - address(appContracts.superTokenLockableDeployer), - appContracts.superTokenLockableDeployer.creationCodeWithArgs( - appContracts.superTokenLockable - ) + address(appContracts.superTokenLockableApp), + appContracts.superTokenLockableApp.creationCodeWithArgs(appContracts.superTokenLockable) ); payloadDetails[1] = createDeployPayloadDetail( chainSlug_, - address(appContracts.superTokenLockableDeployer), - appContracts.superTokenLockableDeployer.creationCodeWithArgs(appContracts.limitHook) + address(appContracts.superTokenLockableApp), + appContracts.superTokenLockableApp.creationCodeWithArgs(appContracts.limitHook) ); return payloadDetails; @@ -88,11 +76,11 @@ contract SuperTokenLockableTest is DeliveryHelperTest { function createConfigurePayloadDetailsArray( uint32 chainSlug_ ) internal returns (PayloadDetails[] memory) { - address superTokenForwarder = appContracts.superTokenLockableDeployer.forwarderAddresses( + address superTokenForwarder = appContracts.superTokenLockableApp.forwarderAddresses( appContracts.superTokenLockable, chainSlug_ ); - address limitHookForwarder = appContracts.superTokenLockableDeployer.forwarderAddresses( + address limitHookForwarder = appContracts.superTokenLockableApp.forwarderAddresses( appContracts.limitHook, chainSlug_ ); @@ -104,7 +92,7 @@ contract SuperTokenLockableTest is DeliveryHelperTest { payloadDetails[0] = createExecutePayloadDetail( chainSlug_, deployedToken, - address(appContracts.superTokenLockableDeployer), + address(appContracts.superTokenLockableApp), superTokenForwarder, abi.encodeWithSignature("setLimitHook(address)", deployedLimitHook) ); @@ -116,11 +104,11 @@ contract SuperTokenLockableTest is DeliveryHelperTest { address appDeployer = address(uint160(c++)); address chainContractAddress = address(uint160(c++)); - address predicted = addressResolver.getForwarderAddress(chainContractAddress, vmChainSlug); + address predicted = addressResolver.getForwarderAddress(chainContractAddress, evmxSlug); address forwarder = addressResolver.getOrDeployForwarderContract( appDeployer, chainContractAddress, - vmChainSlug + evmxSlug ); assertEq(forwarder, predicted); @@ -140,20 +128,19 @@ contract SuperTokenLockableTest is DeliveryHelperTest { contractIds, arbChainSlug, 2, - appContracts.superTokenLockableDeployer, - address(appContracts.superTokenLockableApp) + IAppGateway(appContracts.superTokenLockableApp) ); (address onChainSuperToken, address forwarderSuperToken) = getOnChainAndForwarderAddresses( arbChainSlug, appContracts.superTokenLockable, - appContracts.superTokenLockableDeployer + IAppGateway(appContracts.superTokenLockableApp) ); (address onChainLimitHook, address forwarderLimitHook) = getOnChainAndForwarderAddresses( arbChainSlug, appContracts.limitHook, - appContracts.superTokenLockableDeployer + IAppGateway(appContracts.superTokenLockableApp) ); assertEq( @@ -193,35 +180,35 @@ contract SuperTokenLockableTest is DeliveryHelperTest { onChainLimitHook, "Forwarder onChainAddress should be correct" ); + assertEq( + SuperTokenLockable(onChainSuperToken).owner(), + owner, + "SuperToken owner should be correct" + ); + assertEq(LimitHook(onChainLimitHook).owner(), owner, "LimitHook owner should be correct"); PayloadDetails[] memory payloadDetails = createDeployPayloadDetailsArray(arbChainSlug); checkPayloadBatchAndDetails( payloadDetails, asyncId, - address(appContracts.superTokenLockableDeployer) + address(appContracts.superTokenLockableApp) ); } function testConfigure() public { - _deploy( - contractIds, - arbChainSlug, - 2, - appContracts.superTokenLockableDeployer, - address(appContracts.superTokenLockableApp) - ); + _deploy(contractIds, arbChainSlug, 2, IAppGateway(appContracts.superTokenLockableApp)); bytes32 asyncId = _executeWriteBatchSingleChain(arbChainSlug, 1); (address onChainSuperToken, ) = getOnChainAndForwarderAddresses( arbChainSlug, appContracts.superTokenLockable, - appContracts.superTokenLockableDeployer + IAppGateway(appContracts.superTokenLockableApp) ); (address onChainLimitHook, ) = getOnChainAndForwarderAddresses( arbChainSlug, appContracts.limitHook, - appContracts.superTokenLockableDeployer + IAppGateway(appContracts.superTokenLockableApp) ); assertEq( address(SuperTokenLockable(onChainSuperToken).limitHook__()), @@ -238,23 +225,11 @@ contract SuperTokenLockableTest is DeliveryHelperTest { } function _deployBridge() internal { - _deploy( - contractIds, - arbChainSlug, - 2, - appContracts.superTokenLockableDeployer, - address(appContracts.superTokenLockableApp) - ); + _deploy(contractIds, arbChainSlug, 2, IAppGateway(appContracts.superTokenLockableApp)); _executeWriteBatchSingleChain(arbChainSlug, 1); - _deploy( - contractIds, - optChainSlug, - 2, - appContracts.superTokenLockableDeployer, - address(appContracts.superTokenLockableApp) - ); + _deploy(contractIds, optChainSlug, 2, IAppGateway(appContracts.superTokenLockableApp)); _executeWriteBatchSingleChain(optChainSlug, 1); } @@ -263,11 +238,11 @@ contract SuperTokenLockableTest is DeliveryHelperTest { _deployBridge(); userOrder = SuperTokenLockableAppGateway.UserOrder({ - srcToken: appContracts.superTokenLockableDeployer.forwarderAddresses( + srcToken: appContracts.superTokenLockableApp.forwarderAddresses( appContracts.superTokenLockable, arbChainSlug ), - dstToken: appContracts.superTokenLockableDeployer.forwarderAddresses( + dstToken: appContracts.superTokenLockableApp.forwarderAddresses( appContracts.superTokenLockable, optChainSlug ), @@ -277,27 +252,26 @@ contract SuperTokenLockableTest is DeliveryHelperTest { }); uint32 srcChainSlug = IForwarder(userOrder.srcToken).getChainSlug(); uint32 dstChainSlug = IForwarder(userOrder.dstToken).getChainSlug(); + bytes32 bridgeAsyncId = getNextAsyncId(); bytes32[] memory payloadIds = new bytes32[](4); payloadIds[0] = getWritePayloadId( srcChainSlug, address(getSocketConfig(srcChainSlug).switchboard), - writePayloadIdCounter++ + payloadIdCounter++ ); - payloadIds[1] = bytes32(readPayloadIdCounter++); + payloadIds[1] = _encodeId(evmxSlug, address(watcherPrecompile), payloadIdCounter++); payloadIds[2] = getWritePayloadId( dstChainSlug, address(getSocketConfig(dstChainSlug).switchboard), - writePayloadIdCounter++ + payloadIdCounter++ ); payloadIds[3] = getWritePayloadId( srcChainSlug, address(getSocketConfig(srcChainSlug).switchboard), - writePayloadIdCounter++ + payloadIdCounter++ ); - writePayloadIdCounter++; - - bytes32 bridgeAsyncId = getCurrentAsyncId(); + payloadIdCounter++; bytes memory encodedOrder = abi.encode(userOrder); appContracts.superTokenLockableApp.bridge(encodedOrder); @@ -312,18 +286,20 @@ contract SuperTokenLockableTest is DeliveryHelperTest { bridgeAsyncId, 0 ); - finalizeAndExecute(payloadIds[0], false); + finalizeAndExecute(payloadIds[0]); payloadDetails = deliveryHelper.getPayloadIndexDetails(bridgeAsyncId, 2); vm.expectEmit(true, false, false, false); emit FinalizeRequested( payloadIds[2], AsyncRequest( + address(deliveryHelper), address(0), transmitterEOA, payloadDetails.target, address(0), payloadDetails.executionGasLimit, + 0, bridgeAsyncId, bytes32(0), payloadDetails.payload, @@ -331,16 +307,16 @@ contract SuperTokenLockableTest is DeliveryHelperTest { ) ); finalizeQuery(payloadIds[1], abi.encode(srcAmount)); - finalizeAndExecute(payloadIds[2], false); + finalizeAndExecute(payloadIds[2]); payloadDetails = deliveryHelper.getPayloadIndexDetails(bridgeAsyncId, 3); - finalizeAndExecute(payloadIds[3], false); + finalizeAndExecute(payloadIds[3]); } function testCancel() public { (bytes32 bridgeAsyncId, bytes32[] memory payloadIds) = _bridge(); - finalizeAndExecute(payloadIds[0], false); + finalizeAndExecute(payloadIds[0]); vm.expectEmit(true, true, false, true); emit BatchCancelled(bridgeAsyncId); @@ -352,11 +328,10 @@ contract SuperTokenLockableTest is DeliveryHelperTest { cancelPayloadIds[0] = getWritePayloadId( srcChainSlug, address(getSocketConfig(srcChainSlug).switchboard), - writePayloadIdCounter++ + payloadIdCounter++ ); - bytes32 cancelAsyncId = getCurrentAsyncId(); - + // bytes32 cancelAsyncId = getNextAsyncId(); // bidAndEndAuction(cancelAsyncId); // finalizeAndExecute( // cancelPayloadIds[0], @@ -538,27 +513,27 @@ contract SuperTokenLockableTest is DeliveryHelperTest { // payloadIds[0] = getWritePayloadId( // srcChainSlug, // address(getSocketConfig(srcChainSlug).contractFactoryPlug), - // writePayloadIdCounter++ + // payloadIdCounter++ // ); - // payloadIds[1] = bytes32(readPayloadIdCounter++); + // payloadIds[1] = _encodeId(evmxSlug, address(watcherPrecompile), payloadIdCounter++); // payloadIds[2] = getWritePayloadId( // dstChainSlug, // address(getSocketConfig(dstChainSlug).contractFactoryPlug), - // writePayloadIdCounter++ + // payloadIdCounter++ // ); // payloadIds[3] = getWritePayloadId( // srcChainSlug, // address(getSocketConfig(srcChainSlug).contractFactoryPlug), - // writePayloadIdCounter++ + // payloadIdCounter++ // ); - // writePayloadIdCounter++; + // payloadIdCounter++; // PayloadDetails[] // memory payloadDetails = createBridgePayloadDetailsArray( // srcChainSlug, // dstChainSlug // ); - // bytes32 bridgeAsyncId = getCurrentAsyncId(); + // bytes32 bridgeAsyncId = getNextAsyncId(); // asyncCounterTest++; // bytes memory encodedOrder = abi.encode(userOrder); @@ -635,7 +610,7 @@ contract SuperTokenLockableTest is DeliveryHelperTest { // cancelPayloadIds[0] = getWritePayloadId( // srcChainSlug, // address(getSocketConfig(srcChainSlug).contractFactoryPlug), - // writePayloadIdCounter++ + // payloadIdCounter++ // ); // PayloadDetails[] @@ -643,7 +618,7 @@ contract SuperTokenLockableTest is DeliveryHelperTest { // srcChainSlug // ); - // bytes32 cancelAsyncId = getCurrentAsyncId(); + // bytes32 cancelAsyncId = getNextAsyncId(); // asyncCounterTest++; // bidAndValidate( diff --git a/test/apps/app-gateways/counter/Counter.sol b/test/apps/app-gateways/counter/Counter.sol new file mode 100644 index 00000000..b4d585ef --- /dev/null +++ b/test/apps/app-gateways/counter/Counter.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.7.0 <0.9.0; + +import "solady/auth/Ownable.sol"; +import "../../../../contracts/base/PlugBase.sol"; + +contract Counter is Ownable, PlugBase { + uint256 public counter; + + function increase() external onlySocket { + counter++; + } + + function getCounter() external view returns (uint256) { + return counter; + } + + function increaseOnGateway(uint256 value_) external returns (bytes32) { + return _callAppGateway(abi.encode(value_), bytes32(0)); + } +} diff --git a/test/apps/app-gateways/counter/CounterAppGateway.sol b/test/apps/app-gateways/counter/CounterAppGateway.sol new file mode 100644 index 00000000..bb415e70 --- /dev/null +++ b/test/apps/app-gateways/counter/CounterAppGateway.sol @@ -0,0 +1,135 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.7.0 <0.9.0; + +import "../../../../contracts/base/AppGatewayBase.sol"; +import "../../../../contracts/interfaces/IForwarder.sol"; +import "../../../../contracts/interfaces/IPromise.sol"; +import "./Counter.sol"; +import "./ICounter.sol"; + +contract CounterAppGateway is AppGatewayBase, Ownable { + bytes32 public counter = _createContractId("counter"); + bytes32 public counter1 = _createContractId("counter1"); + + uint256 public counterVal; + + uint256 arbCounter; + uint256 optCounter; + event TimeoutResolved(uint256 creationTimestamp, uint256 executionTimestamp); + + constructor( + address addressResolver_, + Fees memory fees_ + ) AppGatewayBase(addressResolver_) { + creationCodeWithArgs[counter] = abi.encodePacked(type(Counter).creationCode); + creationCodeWithArgs[counter1] = abi.encodePacked(type(Counter).creationCode); + _setOverrides(fees_); + _initializeOwner(msg.sender); + } + + // deploy contracts + function deployContracts(uint32 chainSlug_) external async { + _deploy(counter, chainSlug_, IsPlug.YES); + } + + function deployParallelContracts(uint32 chainSlug_) external async { + _setOverrides(Parallel.ON); + _deploy(counter, chainSlug_, IsPlug.YES); + _deploy(counter1, chainSlug_, IsPlug.YES); + _setOverrides(Parallel.OFF); + } + + function deployMultiChainContracts(uint32[] memory chainSlugs_) external async { + _setOverrides(Parallel.ON); + for (uint32 i = 0; i < chainSlugs_.length; i++) { + _deploy(counter, chainSlugs_[i], IsPlug.YES); + _deploy(counter1, chainSlugs_[i], IsPlug.YES); + } + _setOverrides(Parallel.OFF); + } + + function initialize(uint32) public pure override { + return; + } + + function incrementCounters(address[] memory instances_) public async { + // the increase function is called on given list of instances + // this + for (uint256 i = 0; i < instances_.length; i++) { + ICounter(instances_[i]).increase(); + } + } + + // for testing purposes + function incrementCountersWithoutAsync(address[] memory instances_) public { + // the increase function is called on given list of instances + for (uint256 i = 0; i < instances_.length; i++) { + Counter(instances_[i]).increase(); + } + } + + function readCounters(address[] memory instances_) public async { + // the increase function is called on given list of instances + _setOverrides(Read.ON, Parallel.ON); + for (uint256 i = 0; i < instances_.length; i++) { + uint32 chainSlug = IForwarder(instances_[i]).getChainSlug(); + ICounter(instances_[i]).getCounter(); + IPromise(instances_[i]).then(this.setCounterValues.selector, abi.encode(chainSlug)); + } + _setOverrides(Read.OFF, Parallel.OFF); + ICounter(instances_[0]).increase(); + } + + function setCounterValues(bytes memory data, bytes memory returnData) external onlyPromises { + uint256 counterValue = abi.decode(returnData, (uint256)); + uint32 chainSlug = abi.decode(data, (uint32)); + if (chainSlug == 421614) { + arbCounter = counterValue; + } else if (chainSlug == 11155420) { + optCounter = counterValue; + } + } + + // INBOX + function setIsValidPlug(uint32 chainSlug_, address plug_) public { + watcherPrecompile__().setIsValidPlug(chainSlug_, plug_, true); + } + + function callFromChain( + uint32, + address, + bytes calldata payload_, + bytes32 + ) external override onlyWatcherPrecompile { + uint256 value = abi.decode(payload_, (uint256)); + counterVal += value; + } + + // TIMEOUT + function setTimeout(uint256 delayInSeconds_) public { + bytes memory payload = abi.encodeWithSelector( + this.resolveTimeout.selector, + block.timestamp + ); + watcherPrecompile__().setTimeout(address(this), payload, delayInSeconds_); + } + + function resolveTimeout(uint256 creationTimestamp_) external onlyWatcherPrecompile { + emit TimeoutResolved(creationTimestamp_, block.timestamp); + } + + // UTILS + + function setFees(Fees memory fees_) public { + fees = fees_; + } + + function withdrawFeeTokens( + uint32 chainSlug_, + address token_, + uint256 amount_, + address receiver_ + ) external { + _withdrawFeeTokens(chainSlug_, token_, amount_, receiver_); + } +} diff --git a/contracts/apps/counter/ICounter.sol b/test/apps/app-gateways/counter/ICounter.sol similarity index 100% rename from contracts/apps/counter/ICounter.sol rename to test/apps/app-gateways/counter/ICounter.sol diff --git a/contracts/apps/super-token-lockable/LimitHook.sol b/test/apps/app-gateways/super-token-lockable/LimitHook.sol similarity index 70% rename from contracts/apps/super-token-lockable/LimitHook.sol rename to test/apps/app-gateways/super-token-lockable/LimitHook.sol index aaa2dcff..d2ac0939 100644 --- a/contracts/apps/super-token-lockable/LimitHook.sol +++ b/test/apps/app-gateways/super-token-lockable/LimitHook.sol @@ -1,21 +1,21 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {OwnableTwoStep} from "../../utils/OwnableTwoStep.sol"; -import "../../base/PlugBase.sol"; +import {Ownable} from "solady/auth/Ownable.sol"; +import "../../../../contracts/base/PlugBase.sol"; -contract LimitHook is OwnableTwoStep, PlugBase { +contract LimitHook is Ownable, PlugBase { // Define any state variables or functions for the LimitHook contract here uint256 public burnLimit; uint256 public mintLimit; error BurnLimitExceeded(); error MintLimitExceeded(); + error InvalidSender(); - constructor(uint256 _burnLimit_, uint256 _mintLimit_) PlugBase(msg.sender) { + constructor(uint256 _burnLimit_, uint256 _mintLimit_) { burnLimit = _burnLimit_; mintLimit = _mintLimit_; - _claimOwner(msg.sender); } function setLimits(uint256 _burnLimit_, uint256 _mintLimit_) external onlyOwner { @@ -31,12 +31,16 @@ contract LimitHook is OwnableTwoStep, PlugBase { if (amount_ > mintLimit) revert MintLimitExceeded(); } + function setOwner(address owner_) external { + if (owner() != address(0) && owner() != msg.sender) revert InvalidSender(); + _initializeOwner(owner_); + } + function connectSocket( address appGateway_, address socket_, address switchboard_ ) external onlyOwner { - _claimOwner(socket_); _connectSocket(appGateway_, socket_, switchboard_); } } diff --git a/contracts/apps/super-token-lockable/SuperTokenLockable.sol b/test/apps/app-gateways/super-token-lockable/SuperTokenLockable.sol similarity index 74% rename from contracts/apps/super-token-lockable/SuperTokenLockable.sol rename to test/apps/app-gateways/super-token-lockable/SuperTokenLockable.sol index 1f95666b..5aec4aec 100644 --- a/contracts/apps/super-token-lockable/SuperTokenLockable.sol +++ b/test/apps/app-gateways/super-token-lockable/SuperTokenLockable.sol @@ -2,20 +2,21 @@ pragma solidity ^0.8.21; import "solmate/tokens/ERC20.sol"; -import {OwnableTwoStep} from "../../utils/OwnableTwoStep.sol"; +import {Ownable} from "solady/auth/Ownable.sol"; import {LimitHook} from "./LimitHook.sol"; -import "../../base/PlugBase.sol"; +import "../../../../contracts/base/PlugBase.sol"; /** * @title SuperToken * @notice An ERC20 contract which enables bridging a token to its sibling chains. */ -contract SuperTokenLockable is ERC20, OwnableTwoStep, PlugBase { +contract SuperTokenLockable is ERC20, Ownable, PlugBase { LimitHook public limitHook__; mapping(address => uint256) public lockedTokens; error InsufficientBalance(); error InsufficientLockedTokens(); + error InvalidSender(); constructor( string memory name_, @@ -23,9 +24,8 @@ contract SuperTokenLockable is ERC20, OwnableTwoStep, PlugBase { uint8 decimals_, address initialSupplyHolder_, uint256 initialSupply_ - ) ERC20(name_, symbol_, decimals_) PlugBase(msg.sender) { + ) ERC20(name_, symbol_, decimals_) { _mint(initialSupplyHolder_, initialSupply_); - _claimOwner(msg.sender); } function lockTokens(address user_, uint256 amount_) external onlySocket { @@ -55,16 +55,12 @@ contract SuperTokenLockable is ERC20, OwnableTwoStep, PlugBase { _setSocket(newSocket_); } - function setLimitHook(address limitHook_) external onlyOwner { + function setLimitHook(address limitHook_) external onlySocket { limitHook__ = LimitHook(limitHook_); } - function connectSocket( - address appGateway_, - address socket_, - address switchboard_ - ) external onlyOwner { - _claimOwner(socket_); - _connectSocket(appGateway_, socket_, switchboard_); + function setOwner(address owner_) external { + if (owner() != address(0) && owner() != msg.sender) revert InvalidSender(); + _initializeOwner(owner_); } } diff --git a/test/apps/app-gateways/super-token-lockable/SuperTokenLockableAppGateway.sol b/test/apps/app-gateways/super-token-lockable/SuperTokenLockableAppGateway.sol new file mode 100644 index 00000000..e20bca57 --- /dev/null +++ b/test/apps/app-gateways/super-token-lockable/SuperTokenLockableAppGateway.sol @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.21; + +import "solady/auth/Ownable.sol"; +import {ISuperToken} from "../super-token/ISuperToken.sol"; +import "../../../../contracts/base/AppGatewayBase.sol"; +import "./SuperTokenLockable.sol"; +import "./LimitHook.sol"; + +contract SuperTokenLockableAppGateway is AppGatewayBase, Ownable { + bytes32 public superTokenLockable = _createContractId("superTokenLockable"); + bytes32 public limitHook = _createContractId("limitHook"); + + event Bridged(bytes32 asyncId); + + struct UserOrder { + address srcToken; + address dstToken; + address user; + uint256 srcAmount; + uint256 deadline; + } + + struct ConstructorParams { + uint256 _burnLimit; + uint256 _mintLimit; + string name_; + string symbol_; + uint8 decimals_; + address initialSupplyHolder_; + uint256 initialSupply_; + } + + constructor( + address addressResolver_, + address owner_, + Fees memory fees_, + ConstructorParams memory params + ) AppGatewayBase(addressResolver_) { + creationCodeWithArgs[superTokenLockable] = abi.encodePacked( + type(SuperTokenLockable).creationCode, + abi.encode( + params.name_, + params.symbol_, + params.decimals_, + params.initialSupplyHolder_, + params.initialSupply_ + ) + ); + + creationCodeWithArgs[limitHook] = abi.encodePacked( + type(LimitHook).creationCode, + abi.encode(params._burnLimit, params._mintLimit) + ); + + _setOverrides(fees_); + _initializeOwner(owner_); + } + + function deployContracts(uint32 chainSlug_) external async { + bytes memory initData = abi.encodeWithSelector( + SuperTokenLockable.setOwner.selector, + owner() + ); + _deploy(superTokenLockable, chainSlug_, IsPlug.YES, initData); + _deploy(limitHook, chainSlug_, IsPlug.YES, initData); + } + + // don't need to call this directly, will be called automatically after all contracts are deployed. + // check AppGatewayBase.onBatchComplete + function initialize(uint32 chainSlug_) public override async { + address limitHookContract = getOnChainAddress(limitHook, chainSlug_); + SuperTokenLockable(forwarderAddresses[superTokenLockable][chainSlug_]).setLimitHook( + limitHookContract + ); + } + + function checkBalance(bytes memory data_, bytes memory returnData_) external onlyPromises { + (UserOrder memory order, bytes32 asyncId) = abi.decode(data_, (UserOrder, bytes32)); + + uint256 balance = abi.decode(returnData_, (uint256)); + if (balance < order.srcAmount) { + _revertTx(asyncId); + return; + } + _unlockTokens(order.srcToken, order.user, order.srcAmount); + } + + function _unlockTokens(address srcToken_, address user_, uint256 amount_) internal async { + ISuperToken(srcToken_).unlockTokens(user_, amount_); + } + + function bridge(bytes memory order_) external async returns (bytes32 asyncId_) { + UserOrder memory order = abi.decode(order_, (UserOrder)); + asyncId_ = _getCurrentAsyncId(); + ISuperToken(order.srcToken).lockTokens(order.user, order.srcAmount); + + _setOverrides(Read.ON); + // goes to forwarder and deploys promise and stores it + ISuperToken(order.srcToken).balanceOf(order.user); + IPromise(order.srcToken).then(this.checkBalance.selector, abi.encode(order, asyncId_)); + + _setOverrides(Read.OFF); + ISuperToken(order.dstToken).mint(order.user, order.srcAmount); + ISuperToken(order.srcToken).burn(order.user, order.srcAmount); + + emit Bridged(asyncId_); + } + + function withdrawFeeTokens( + uint32 chainSlug_, + address token_, + uint256 amount_, + address receiver_ + ) external onlyOwner { + _withdrawFeeTokens(chainSlug_, token_, amount_, receiver_); + } +} diff --git a/contracts/interfaces/ISuperToken.sol b/test/apps/app-gateways/super-token/ISuperToken.sol similarity index 100% rename from contracts/interfaces/ISuperToken.sol rename to test/apps/app-gateways/super-token/ISuperToken.sol diff --git a/contracts/apps/super-token/SuperToken.sol b/test/apps/app-gateways/super-token/SuperToken.sol similarity index 63% rename from contracts/apps/super-token/SuperToken.sol rename to test/apps/app-gateways/super-token/SuperToken.sol index 53882d81..4d7dfe05 100644 --- a/contracts/apps/super-token/SuperToken.sol +++ b/test/apps/app-gateways/super-token/SuperToken.sol @@ -2,25 +2,25 @@ pragma solidity ^0.8.21; import "solmate/tokens/ERC20.sol"; -import {OwnableTwoStep} from "../../utils/OwnableTwoStep.sol"; -import "../../base/PlugBase.sol"; +import {Ownable} from "solady/auth/Ownable.sol"; +import "../../../../contracts/base/PlugBase.sol"; /** * @title SuperToken * @notice An ERC20 contract which enables bridging a token to its sibling chains. */ -contract SuperToken is ERC20, OwnableTwoStep, PlugBase { +contract SuperToken is ERC20, Ownable, PlugBase { mapping(address => uint256) public lockedTokens; + error InvalidSender(); constructor( string memory name_, string memory symbol_, uint8 decimals_, address initialSupplyHolder_, uint256 initialSupply_ - ) ERC20(name_, symbol_, decimals_) PlugBase(msg.sender) { + ) ERC20(name_, symbol_, decimals_) { _mint(initialSupplyHolder_, initialSupply_); - _claimOwner(msg.sender); } function mint(address receiver_, uint256 amount_) external onlySocket { @@ -35,12 +35,8 @@ contract SuperToken is ERC20, OwnableTwoStep, PlugBase { _setSocket(newSocket_); } - function connectSocket( - address appGateway_, - address socket_, - address switchboard_ - ) external onlyOwner { - _claimOwner(socket_); - _connectSocket(appGateway_, socket_, switchboard_); + function setOwner(address owner_) external { + if (owner() != address(0) && owner() != msg.sender) revert InvalidSender(); + _initializeOwner(owner_); } } diff --git a/test/apps/app-gateways/super-token/SuperTokenAppGateway.sol b/test/apps/app-gateways/super-token/SuperTokenAppGateway.sol new file mode 100644 index 00000000..08fd2eac --- /dev/null +++ b/test/apps/app-gateways/super-token/SuperTokenAppGateway.sol @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.21; + +import "solady/auth/Ownable.sol"; +import "../../../../contracts/base/AppGatewayBase.sol"; +import "./ISuperToken.sol"; +import "./SuperToken.sol"; + +contract SuperTokenAppGateway is AppGatewayBase, Ownable { + bytes32 public superToken = _createContractId("superToken"); + + event Transferred(bytes32 asyncId); + + struct ConstructorParams { + string name_; + string symbol_; + uint8 decimals_; + address initialSupplyHolder_; + uint256 initialSupply_; + } + + struct TransferOrder { + address srcToken; + address dstToken; + address user; + uint256 srcAmount; + uint256 deadline; + } + + constructor( + address addressResolver_, + address owner_, + Fees memory fees_, + ConstructorParams memory params_ + ) AppGatewayBase(addressResolver_) { + creationCodeWithArgs[superToken] = abi.encodePacked( + type(SuperToken).creationCode, + abi.encode( + params_.name_, + params_.symbol_, + params_.decimals_, + params_.initialSupplyHolder_, + params_.initialSupply_ + ) + ); + + // sets the fees data like max fees, chain and token for all transfers + // they can be updated for each transfer as well + _setOverrides(fees_); + _initializeOwner(owner_); + } + + function deployContracts(uint32 chainSlug_) external async { + bytes memory initData = abi.encodeWithSelector(SuperToken.setOwner.selector, owner()); + _deploy(superToken, chainSlug_, IsPlug.YES, initData); + } + + // no need to call this directly, will be called automatically after all contracts are deployed. + // check AppGatewayBase._deploy and AppGatewayBase.onBatchComplete + function initialize(uint32) public pure override { + return; + } + + function transfer(bytes memory order_) external async { + TransferOrder memory order = abi.decode(order_, (TransferOrder)); + ISuperToken(order.srcToken).burn(order.user, order.srcAmount); + ISuperToken(order.dstToken).mint(order.user, order.srcAmount); + + emit Transferred(_getCurrentAsyncId()); + } +} diff --git a/contracts/mock/MockSocket.sol b/test/mock/MockSocket.sol similarity index 88% rename from contracts/mock/MockSocket.sol rename to test/mock/MockSocket.sol index b087d9d1..98c87f09 100644 --- a/contracts/mock/MockSocket.sol +++ b/test/mock/MockSocket.sol @@ -1,14 +1,13 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import "../interfaces/IPlug.sol"; -import {PlugDisconnected, InvalidAppGateway} from "../common/Errors.sol"; -import "../interfaces/ISwitchboard.sol"; -import "../interfaces/ISocket.sol"; +import {PlugDisconnected, InvalidAppGateway} from "../../contracts/protocol/utils/common/Errors.sol"; +import "../../contracts/interfaces/ISwitchboard.sol"; +import "../../contracts/interfaces/ISocket.sol"; /** * @title SocketDst - * @dev SocketDst is an abstract contract that inherits from SocketBase and + * @dev SocketDst is an abstract contract that inherits from SocketUtils and * provides functionality for payload execution, verification. * It manages the mapping of payload execution status * timestamps @@ -62,17 +61,23 @@ contract MockSocket is ISocket { */ error LowGasLimit(); error InvalidSlug(); - error ExecutionFailed(); //////////////////////////////////////////////////////////// ////////////////////// State Vars ////////////////////////// //////////////////////////////////////////////////////////// uint64 public callCounter; uint32 public chainSlug; + + enum ExecutionStatus { + NotExecuted, + Executed, + Reverted + } + /** * @dev keeps track of whether a payload has been executed or not using payload id */ - mapping(bytes32 => bool) public payloadExecuted; + mapping(bytes32 => ExecutionStatus) public payloadExecuted; constructor(uint32 chainSlug_, address, address, address, string memory) { chainSlug = chainSlug_; @@ -108,24 +113,26 @@ contract MockSocket is ISocket { * @notice Executes a payload that has been delivered by transmitters and authenticated by switchboards */ function execute( - bytes32 payloadId_, address, - address target_, - uint256 executionGasLimit_, - bytes memory, - bytes memory payload_ + ExecuteParams memory params_, + bytes memory ) external payable returns (bytes memory) { // execute payload - return _execute(target_, payloadId_, executionGasLimit_, payload_); + return + _execute(params_.target, params_.payloadId, params_.executionGasLimit, params_.payload); } //////////////////////////////////////////////////////// ////////////////// INTERNAL FUNCS ////////////////////// //////////////////////////////////////////////////////// - function _verify(bytes32 root_, bytes32 payloadId_, ISwitchboard switchboard__) internal view { + function _verify( + bytes32 digest_, + bytes32 payloadId_, + ISwitchboard switchboard__ + ) internal view { // NOTE: is the the first un-trusted call in the system, another one is Plug.call - if (!switchboard__.allowPacket(root_, payloadId_)) revert VerificationFailed(); + if (!switchboard__.allowPacket(digest_, payloadId_)) revert VerificationFailed(); } /** diff --git a/contracts/mock/MockWatcherPrecompile.sol b/test/mock/MockWatcherPrecompile.sol similarity index 82% rename from contracts/mock/MockWatcherPrecompile.sol rename to test/mock/MockWatcherPrecompile.sol index 80da10e6..d1886b89 100644 --- a/contracts/mock/MockWatcherPrecompile.sol +++ b/test/mock/MockWatcherPrecompile.sol @@ -1,13 +1,13 @@ // SPDX-License-Identifier: Unlicense pragma solidity ^0.8.21; -import "../interfaces/IAppGateway.sol"; -import "../interfaces/IWatcherPrecompile.sol"; -import "../interfaces/IPromise.sol"; +import "../../contracts/interfaces/IAppGateway.sol"; +import "../../contracts/interfaces/IWatcherPrecompile.sol"; +import "../../contracts/interfaces/IPromise.sol"; -import {PayloadRootParams, AsyncRequest, FinalizeParams, TimeoutRequest, CallFromInboxParams, PlugConfig, ResolvedPromises, AppGatewayConfig} from "../common/Structs.sol"; -import {QUERY, FINALIZE, SCHEDULE} from "../common/Constants.sol"; -import {TimeoutDelayTooLarge, TimeoutAlreadyResolved, InvalidInboxCaller, ResolvingTimeoutTooEarly, CallFailed, AppGatewayAlreadyCalled} from "../common/Errors.sol"; +import {PayloadDigestParams, AsyncRequest, FinalizeParams, TimeoutRequest, CallFromChainParams, PlugConfig, ResolvedPromises, AppGatewayConfig} from "../../contracts/protocol/utils/common/Structs.sol"; +import {QUERY, FINALIZE, SCHEDULE} from "../../contracts/protocol/utils/common/Constants.sol"; +import {TimeoutDelayTooLarge, TimeoutAlreadyResolved, InvalidInboxCaller, ResolvingTimeoutTooEarly, CallFailed, AppGatewayAlreadyCalled} from "../../contracts/protocol/utils/common/Errors.sol"; import "solady/utils/ERC1967Factory.sol"; /// @title WatcherPrecompile @@ -29,9 +29,6 @@ contract MockWatcherPrecompile { mapping(uint32 => mapping(address => PlugConfig)) internal _plugConfigs; - /// @notice Maps app gateway to their associated plugs per network - /// @dev appGateway => chainSlug => plug - mapping(address => mapping(uint32 => address)) public appGatewayPlugs; /// @notice Error thrown when an invalid chain slug is provided error InvalidChainSlug(); error InvalidTransmitter(); @@ -60,8 +57,8 @@ contract MockWatcherPrecompile { /// @notice Emitted when a request is finalized /// @param payloadId The unique identifier for the request /// @param asyncRequest The async request details - /// @param watcherSignature The signature from the watcher - event Finalized(bytes32 indexed payloadId, AsyncRequest asyncRequest, bytes watcherSignature); + /// @param proof The proof from the watcher + event Finalized(bytes32 indexed payloadId, AsyncRequest asyncRequest, bytes proof); /// @notice Emitted when a promise is resolved /// @param payloadId The unique identifier for the resolved promise @@ -123,14 +120,14 @@ contract MockWatcherPrecompile { // ================== Finalize functions ================== - /// @notice Finalizes a payload request, requests the watcher to release the signatures to execute on chain + /// @notice Finalizes a payload request, requests the watcher to release the proofs to execute on chain /// @param params_ The finalization parameters /// @return payloadId The unique identifier for the finalized request - /// @return root The merkle root of the payload parameters + /// @return digest The digest of the payload parameters function finalize( FinalizeParams memory params_ - ) external returns (bytes32 payloadId, bytes32 root) { - root = keccak256(abi.encode(block.timestamp)); + ) external returns (bytes32 payloadId, bytes32 digest) { + digest = keccak256(abi.encode(block.timestamp)); // Generate a unique payload ID by combining chain, target, and counter payloadId = encodePayloadId( params_.payloadDetails.chainSlug, @@ -141,11 +138,13 @@ contract MockWatcherPrecompile { emit FinalizeRequested( payloadId, AsyncRequest( + msg.sender, address(0), address(0), params_.payloadDetails.target, address(0), 0, + block.timestamp + 1000, params_.asyncId, bytes32(0), bytes(""), @@ -170,12 +169,12 @@ contract MockWatcherPrecompile { emit QueryRequested(chainSlug, targetAddress, payloadId, payload); } - /// @notice Marks a request as finalized with a signature + /// @notice Marks a request as finalized with a proof /// @param payloadId_ The unique identifier of the request - /// @param signature_ The watcher's signature + /// @param proof_ The watcher's proof /// @dev Only callable by the contract owner - function finalized(bytes32 payloadId_, bytes calldata signature_) external { - emit Finalized(payloadId_, asyncRequests[payloadId_], signature_); + function finalized(bytes32 payloadId_, bytes calldata proof_) external { + emit Finalized(payloadId_, asyncRequests[payloadId_], proof_); } /// @notice Resolves multiple promises with their return data @@ -189,7 +188,7 @@ contract MockWatcherPrecompile { // ================== On-Chain Inbox ================== - function callAppGateways(CallFromInboxParams[] calldata params_) external { + function callAppGateways(CallFromChainParams[] calldata params_) external { for (uint256 i = 0; i < params_.length; i++) { emit CalledAppGateway( params_[i].callId, @@ -229,19 +228,6 @@ contract MockWatcherPrecompile { return bytes32((uint256(uint160(address(this))) << 64) | timeoutCounter_); } - function setAppGateways(AppGatewayConfig[] calldata configs) external { - for (uint256 i = 0; i < configs.length; i++) { - // Store the plug configuration for this network and plug - _plugConfigs[configs[i].chainSlug][configs[i].plug] = PlugConfig({ - appGateway: configs[i].appGateway, - switchboard: configs[i].switchboard - }); - - // Create reverse mapping from app gateway to plug for easy lookup - appGatewayPlugs[configs[i].appGateway][configs[i].chainSlug] = configs[i].plug; - } - } - /// @notice Retrieves the configuration for a specific plug on a network /// @param chainSlug_ The identifier of the network /// @param plug_ The address of the plug diff --git a/test/MockWatcherPrecompileImpl.sol b/test/mock/MockWatcherPrecompileImpl.sol similarity index 60% rename from test/MockWatcherPrecompileImpl.sol rename to test/mock/MockWatcherPrecompileImpl.sol index feddf807..0298e103 100644 --- a/test/MockWatcherPrecompileImpl.sol +++ b/test/mock/MockWatcherPrecompileImpl.sol @@ -1,25 +1,22 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "../contracts/watcherPrecompile/WatcherPrecompile.sol"; +import "../../contracts/protocol/watcherPrecompile/WatcherPrecompile.sol"; contract MockWatcherPrecompileImpl is WatcherPrecompile { // Mock function to test reinitialization with version 2 function mockReinitialize( address owner_, address addressResolver_, - uint256 maxLimit_ + uint256 defaultLimit_ ) external reinitializer(2) { _setAddressResolver(addressResolver_); - _claimOwner(owner_); + _initializeOwner(owner_); maxTimeoutDelayInSeconds = 24 * 60 * 60; // 24 hours - LIMIT_DECIMALS = 18; - // limit per day - maxLimit = maxLimit_ * 10 ** LIMIT_DECIMALS; - // limit per second - ratePerSecond = maxLimit / (24 * 60 * 60); + defaultLimit = defaultLimit_ * 10 ** LIMIT_DECIMALS; + // limit per second + defaultRatePerSecond = defaultLimit / (24 * 60 * 60); } } - diff --git a/testScript.sh b/testScript.sh index 90929365..c3a1f30c 100644 --- a/testScript.sh +++ b/testScript.sh @@ -1,22 +1,26 @@ ## Parallel Counter -source .env && forge script script/parallel-counter/deployOffchain.s.sol --broadcast --skip-simulation +source .env && forge script script/parallel-counter/deployOnEVMx.s.sol --broadcast --skip-simulation ## set limits for the app gateway using API -source .env && cast send $DEPLOYER "deployMultiChainContracts(uint32[])" '[421614, 11155420]' --private-key $PRIVATE_KEY +source .env && cast send $APP_GATEWAY "deployMultiChainContracts(uint32[])" '[421614, 11155420]' --private-key $PRIVATE_KEY source .env && forge script script/parallel-counter/checkCounters.s.sol --broadcast --skip-simulation ## Counter -source .env && forge script script/counter/DeployCounterOffchain.s.sol --broadcast --skip-simulation +source .env && forge script script/counter/deployEVMxCounterApp.s.sol --broadcast --skip-simulation --legacy --gas-price 0 source .env && forge script script/counter/DeployCounterOnchain.s.sol --broadcast --skip-simulation ## set limits for the app gateway using API -source .env && cast send $DEPLOYER "deployContracts(uint32)" 421614 --private-key $PRIVATE_KEY -source .env && cast send $APP_GATEWAY "incrementCounters(address[])" '[0x4507f726d8ca980e3a1800a8d972792d7ff46f65]' --private-key $PRIVATE_KEY +source .env && cast send $APP_GATEWAY "deployContracts(uint32)" 421614 --private-key $PRIVATE_KEY --legacy --gas-price 0 +cast call $APP_GATEWAY "getOnChainAddress(bytes32,uint32)(address)" 0x5ab1536adcb0c297300e651c684f844c311727059d17eb2be15c313b5839b9eb 421614 +cast call $APP_GATEWAY "forwarderAddresses(bytes32,uint32)(address)" 0x5ab1536adcb0c297300e651c684f844c311727059d17eb2be15c313b5839b9eb 421614 +source .env && cast send $APP_GATEWAY "incrementCounters(address[])" '[0xB491b4b9343471d79d33A7c45Dc4d0a7EA818F93]' --private-key $PRIVATE_KEY --legacy --gas-price 0 +source .env && cast send $APP_GATEWAY "readCounters(address[])" '[0x18a93d520879524e0c215b64f05914da5883540f]' --private-key $PRIVATE_KEY --legacy --gas-price 0 +source .env && cast send $APP_GATEWAY "withdrawFeeTokens(uint32,address,uint256,address)" 421614 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE 987793576908782 0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18 --private-key $PRIVATE_KEY --legacy --gas-price 0 + forge script script/counter/incrementCounters.s.sol --broadcast --skip-simulation forge script script/counter/checkCounters.s.sol --broadcast --skip-simulation - ## Cron source .env && forge script script/cron/DeployGateway.s.sol:DeployGateway --broadcast --skip-simulation source .env && forge script script/cron/SetTimeout.s.sol:SetTimeoutScript --broadcast --skip-simulation @@ -24,8 +28,8 @@ source .env && cast send $APP_GATEWAY "setTimeout(uint256)" 0 --private-key $PRI ## Super Token Lockable forge script script/super-token-lockable/DeployGateway.s.sol --broadcast --skip-simulation -source .env && cast send $DEPLOYER "deployContracts(uint32)" 421614 --private-key $PRIVATE_KEY -source .env && cast send $DEPLOYER "deployContracts(uint32)" 11155420 --private-key $PRIVATE_KEY +source .env && cast send $APP_GATEWAY "deployContracts(uint32)" 421614 --private-key $PRIVATE_KEY +source .env && cast send $APP_GATEWAY "deployContracts(uint32)" 11155420 --private-key $PRIVATE_KEY forge script script/super-token-lockable/Bridge.s.sol --broadcast --skip-simulation source .env && cast send $APP_GATEWAY $data --private-key $PRIVATE_KEY @@ -39,7 +43,7 @@ source .env && forge script script/counter-inbox/CheckGatewayCounter.s.sol --bro ## Mock Testing -source .env && forge script script/mock/DeployVM.s.sol --broadcast --skip-simulation +source .env && forge script script/mock/DeployEVMx.s.sol --broadcast --skip-simulation source .env && forge script script/mock/DeploySocket.s.sol --broadcast --skip-simulation source .env && forge script script/mock/Timeout.s.sol --broadcast --skip-simulation source .env && forge script script/mock/Query.s.sol --broadcast --skip-simulation @@ -53,4 +57,5 @@ source .env && forge script script/admin/UpdateLimits.s.sol --broadcast --skip-s # add fees -source .env && forge script script/DepositFees.s.sol --broadcast --skip-simulation +source .env && forge script script/helpers/PayFeesInArbitrumETH.s.sol --broadcast --skip-simulation +source .env && forge script script/helpers/AppGatewayFeeBalance.s.sol diff --git a/yarn.lock b/yarn.lock index 1bc37561..3cf308a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@aws-crypto/crc32@5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== dependencies: "@aws-crypto/util" "^5.2.0" @@ -13,7 +13,7 @@ "@aws-crypto/crc32c@5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz#4e34aab7f419307821509a98b9b08e84e0c1917e" integrity sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag== dependencies: "@aws-crypto/util" "^5.2.0" @@ -22,7 +22,7 @@ "@aws-crypto/sha1-browser@5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz#b0ee2d2821d3861f017e965ef3b4cb38e3b6a0f4" integrity sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg== dependencies: "@aws-crypto/supports-web-crypto" "^5.2.0" @@ -34,7 +34,7 @@ "@aws-crypto/sha256-browser@5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== dependencies: "@aws-crypto/sha256-js" "^5.2.0" @@ -47,7 +47,7 @@ "@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== dependencies: "@aws-crypto/util" "^5.2.0" @@ -56,14 +56,14 @@ "@aws-crypto/supports-web-crypto@^5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== dependencies: tslib "^2.6.2" -"@aws-crypto/util@^5.2.0": +"@aws-crypto/util@5.2.0", "@aws-crypto/util@^5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== dependencies: "@aws-sdk/types" "^3.222.0" @@ -71,552 +71,503 @@ tslib "^2.6.2" "@aws-sdk/client-s3@^3.670.0": - version "3.670.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.670.0.tgz" - integrity sha512-8Pwu1K+PgbYpXDaGKNy5hEbRH5FXHlfXJOhtV4oEDroL7ngix3ZUVWN9oIVVSDK02y1oQS1jCSEGUiUiauzb0g== + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.750.0.tgz#54bbbb930bcc275c9c928d2eb4590c3ee2030d52" + integrity sha512-S9G9noCeBxchoMVkHYrRi1A1xW/VOTP2W7X34lP+Y7Wpl32yMA7IJo0fAGAuTc0q1Nu6/pXDm+oDG7rhTCA1tg== dependencies: "@aws-crypto/sha1-browser" "5.2.0" "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.670.0" - "@aws-sdk/client-sts" "3.670.0" - "@aws-sdk/core" "3.667.0" - "@aws-sdk/credential-provider-node" "3.670.0" - "@aws-sdk/middleware-bucket-endpoint" "3.667.0" - "@aws-sdk/middleware-expect-continue" "3.667.0" - "@aws-sdk/middleware-flexible-checksums" "3.669.0" - "@aws-sdk/middleware-host-header" "3.667.0" - "@aws-sdk/middleware-location-constraint" "3.667.0" - "@aws-sdk/middleware-logger" "3.667.0" - "@aws-sdk/middleware-recursion-detection" "3.667.0" - "@aws-sdk/middleware-sdk-s3" "3.669.0" - "@aws-sdk/middleware-ssec" "3.667.0" - "@aws-sdk/middleware-user-agent" "3.669.0" - "@aws-sdk/region-config-resolver" "3.667.0" - "@aws-sdk/signature-v4-multi-region" "3.669.0" - "@aws-sdk/types" "3.667.0" - "@aws-sdk/util-endpoints" "3.667.0" - "@aws-sdk/util-user-agent-browser" "3.670.0" - "@aws-sdk/util-user-agent-node" "3.669.0" - "@aws-sdk/xml-builder" "3.662.0" - "@smithy/config-resolver" "^3.0.9" - "@smithy/core" "^2.4.8" - "@smithy/eventstream-serde-browser" "^3.0.10" - "@smithy/eventstream-serde-config-resolver" "^3.0.7" - "@smithy/eventstream-serde-node" "^3.0.9" - "@smithy/fetch-http-handler" "^3.2.9" - "@smithy/hash-blob-browser" "^3.1.6" - "@smithy/hash-node" "^3.0.7" - "@smithy/hash-stream-node" "^3.1.6" - "@smithy/invalid-dependency" "^3.0.7" - "@smithy/md5-js" "^3.0.7" - "@smithy/middleware-content-length" "^3.0.9" - "@smithy/middleware-endpoint" "^3.1.4" - "@smithy/middleware-retry" "^3.0.23" - "@smithy/middleware-serde" "^3.0.7" - "@smithy/middleware-stack" "^3.0.7" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/node-http-handler" "^3.2.4" - "@smithy/protocol-http" "^4.1.4" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/url-parser" "^3.0.7" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.23" - "@smithy/util-defaults-mode-node" "^3.0.23" - "@smithy/util-endpoints" "^2.1.3" - "@smithy/util-middleware" "^3.0.7" - "@smithy/util-retry" "^3.0.7" - "@smithy/util-stream" "^3.1.9" - "@smithy/util-utf8" "^3.0.0" - "@smithy/util-waiter" "^3.1.6" + "@aws-sdk/core" "3.750.0" + "@aws-sdk/credential-provider-node" "3.750.0" + "@aws-sdk/middleware-bucket-endpoint" "3.734.0" + "@aws-sdk/middleware-expect-continue" "3.734.0" + "@aws-sdk/middleware-flexible-checksums" "3.750.0" + "@aws-sdk/middleware-host-header" "3.734.0" + "@aws-sdk/middleware-location-constraint" "3.734.0" + "@aws-sdk/middleware-logger" "3.734.0" + "@aws-sdk/middleware-recursion-detection" "3.734.0" + "@aws-sdk/middleware-sdk-s3" "3.750.0" + "@aws-sdk/middleware-ssec" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.750.0" + "@aws-sdk/region-config-resolver" "3.734.0" + "@aws-sdk/signature-v4-multi-region" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-endpoints" "3.743.0" + "@aws-sdk/util-user-agent-browser" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.750.0" + "@aws-sdk/xml-builder" "3.734.0" + "@smithy/config-resolver" "^4.0.1" + "@smithy/core" "^3.1.4" + "@smithy/eventstream-serde-browser" "^4.0.1" + "@smithy/eventstream-serde-config-resolver" "^4.0.1" + "@smithy/eventstream-serde-node" "^4.0.1" + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/hash-blob-browser" "^4.0.1" + "@smithy/hash-node" "^4.0.1" + "@smithy/hash-stream-node" "^4.0.1" + "@smithy/invalid-dependency" "^4.0.1" + "@smithy/md5-js" "^4.0.1" + "@smithy/middleware-content-length" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.5" + "@smithy/middleware-retry" "^4.0.6" + "@smithy/middleware-serde" "^4.0.2" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/smithy-client" "^4.1.5" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.6" + "@smithy/util-defaults-mode-node" "^4.0.6" + "@smithy/util-endpoints" "^3.0.1" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" + "@smithy/util-stream" "^4.1.1" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.2" tslib "^2.6.2" -"@aws-sdk/client-sso-oidc@3.670.0": - version "3.670.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.670.0.tgz" - integrity sha512-4qDK2L36Q4J1lfemaHHd9ZxqKRaos3STp44qPAHf/8QyX6Uk5sXgZNVO2yWM7SIEtVKwwBh/fZAsdBkGPBfZcw== +"@aws-sdk/client-sso@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.750.0.tgz#b45864b78057504f823b2927535ac60b7c5583b2" + integrity sha512-y0Rx6pTQXw0E61CaptpZF65qNggjqOgymq/RYZU5vWba5DGQ+iqGt8Yq8s+jfBoBBNXshxq8l8Dl5Uq/JTY1wg== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.667.0" - "@aws-sdk/credential-provider-node" "3.670.0" - "@aws-sdk/middleware-host-header" "3.667.0" - "@aws-sdk/middleware-logger" "3.667.0" - "@aws-sdk/middleware-recursion-detection" "3.667.0" - "@aws-sdk/middleware-user-agent" "3.669.0" - "@aws-sdk/region-config-resolver" "3.667.0" - "@aws-sdk/types" "3.667.0" - "@aws-sdk/util-endpoints" "3.667.0" - "@aws-sdk/util-user-agent-browser" "3.670.0" - "@aws-sdk/util-user-agent-node" "3.669.0" - "@smithy/config-resolver" "^3.0.9" - "@smithy/core" "^2.4.8" - "@smithy/fetch-http-handler" "^3.2.9" - "@smithy/hash-node" "^3.0.7" - "@smithy/invalid-dependency" "^3.0.7" - "@smithy/middleware-content-length" "^3.0.9" - "@smithy/middleware-endpoint" "^3.1.4" - "@smithy/middleware-retry" "^3.0.23" - "@smithy/middleware-serde" "^3.0.7" - "@smithy/middleware-stack" "^3.0.7" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/node-http-handler" "^3.2.4" - "@smithy/protocol-http" "^4.1.4" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/url-parser" "^3.0.7" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.23" - "@smithy/util-defaults-mode-node" "^3.0.23" - "@smithy/util-endpoints" "^2.1.3" - "@smithy/util-middleware" "^3.0.7" - "@smithy/util-retry" "^3.0.7" - "@smithy/util-utf8" "^3.0.0" + "@aws-sdk/core" "3.750.0" + "@aws-sdk/middleware-host-header" "3.734.0" + "@aws-sdk/middleware-logger" "3.734.0" + "@aws-sdk/middleware-recursion-detection" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.750.0" + "@aws-sdk/region-config-resolver" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-endpoints" "3.743.0" + "@aws-sdk/util-user-agent-browser" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.750.0" + "@smithy/config-resolver" "^4.0.1" + "@smithy/core" "^3.1.4" + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/hash-node" "^4.0.1" + "@smithy/invalid-dependency" "^4.0.1" + "@smithy/middleware-content-length" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.5" + "@smithy/middleware-retry" "^4.0.6" + "@smithy/middleware-serde" "^4.0.2" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/smithy-client" "^4.1.5" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.6" + "@smithy/util-defaults-mode-node" "^4.0.6" + "@smithy/util-endpoints" "^3.0.1" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/client-sso@3.670.0": - version "3.670.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.670.0.tgz" - integrity sha512-J+oz6uSsDvk4pimMDnKJb1wsV216zTrejvMTIL4RhUD1QPIVVOpteTdUShcjZUIZnkcJZGI+cym/SFK0kuzTpg== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.667.0" - "@aws-sdk/middleware-host-header" "3.667.0" - "@aws-sdk/middleware-logger" "3.667.0" - "@aws-sdk/middleware-recursion-detection" "3.667.0" - "@aws-sdk/middleware-user-agent" "3.669.0" - "@aws-sdk/region-config-resolver" "3.667.0" - "@aws-sdk/types" "3.667.0" - "@aws-sdk/util-endpoints" "3.667.0" - "@aws-sdk/util-user-agent-browser" "3.670.0" - "@aws-sdk/util-user-agent-node" "3.669.0" - "@smithy/config-resolver" "^3.0.9" - "@smithy/core" "^2.4.8" - "@smithy/fetch-http-handler" "^3.2.9" - "@smithy/hash-node" "^3.0.7" - "@smithy/invalid-dependency" "^3.0.7" - "@smithy/middleware-content-length" "^3.0.9" - "@smithy/middleware-endpoint" "^3.1.4" - "@smithy/middleware-retry" "^3.0.23" - "@smithy/middleware-serde" "^3.0.7" - "@smithy/middleware-stack" "^3.0.7" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/node-http-handler" "^3.2.4" - "@smithy/protocol-http" "^4.1.4" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/url-parser" "^3.0.7" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.23" - "@smithy/util-defaults-mode-node" "^3.0.23" - "@smithy/util-endpoints" "^2.1.3" - "@smithy/util-middleware" "^3.0.7" - "@smithy/util-retry" "^3.0.7" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.670.0": - version "3.670.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.670.0.tgz" - integrity sha512-bExrNo8ZVWorS3cjMZKQnA2HWqDmAzcZoSN/cPVoPFNkHwdl1lzPxvcLzmhpIr48JHgKfybBjrbluDZfIYeEog== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.670.0" - "@aws-sdk/core" "3.667.0" - "@aws-sdk/credential-provider-node" "3.670.0" - "@aws-sdk/middleware-host-header" "3.667.0" - "@aws-sdk/middleware-logger" "3.667.0" - "@aws-sdk/middleware-recursion-detection" "3.667.0" - "@aws-sdk/middleware-user-agent" "3.669.0" - "@aws-sdk/region-config-resolver" "3.667.0" - "@aws-sdk/types" "3.667.0" - "@aws-sdk/util-endpoints" "3.667.0" - "@aws-sdk/util-user-agent-browser" "3.670.0" - "@aws-sdk/util-user-agent-node" "3.669.0" - "@smithy/config-resolver" "^3.0.9" - "@smithy/core" "^2.4.8" - "@smithy/fetch-http-handler" "^3.2.9" - "@smithy/hash-node" "^3.0.7" - "@smithy/invalid-dependency" "^3.0.7" - "@smithy/middleware-content-length" "^3.0.9" - "@smithy/middleware-endpoint" "^3.1.4" - "@smithy/middleware-retry" "^3.0.23" - "@smithy/middleware-serde" "^3.0.7" - "@smithy/middleware-stack" "^3.0.7" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/node-http-handler" "^3.2.4" - "@smithy/protocol-http" "^4.1.4" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/url-parser" "^3.0.7" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.23" - "@smithy/util-defaults-mode-node" "^3.0.23" - "@smithy/util-endpoints" "^2.1.3" - "@smithy/util-middleware" "^3.0.7" - "@smithy/util-retry" "^3.0.7" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.667.0.tgz" - integrity sha512-pMcDVI7Tmdsc8R3sDv0Omj/4iRParGY+uJtAfF669WnZfDfaBQaix2Mq7+Mu08vdjqO9K3gicFvjk9S1VLmOKA== - dependencies: - "@aws-sdk/types" "3.667.0" - "@smithy/core" "^2.4.8" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/property-provider" "^3.1.7" - "@smithy/protocol-http" "^4.1.4" - "@smithy/signature-v4" "^4.2.0" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/util-middleware" "^3.0.7" +"@aws-sdk/core@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.750.0.tgz#087ce3dd86e2e94e9a2828506a82223ae9f364ff" + integrity sha512-bZ5K7N5L4+Pa2epbVpUQqd1XLG2uU8BGs/Sd+2nbgTf+lNQJyIxAg/Qsrjz9MzmY8zzQIeRQEkNmR6yVAfCmmQ== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/core" "^3.1.4" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/signature-v4" "^5.0.1" + "@smithy/smithy-client" "^4.1.5" + "@smithy/types" "^4.1.0" + "@smithy/util-middleware" "^4.0.1" fast-xml-parser "4.4.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-env@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.667.0.tgz" - integrity sha512-zZbrkkaPc54WXm+QAnpuv0LPNfsts0HPPd+oCECGs7IQRaFsGj187cwvPg9RMWDFZqpm64MdBDoA8OQHsqzYCw== +"@aws-sdk/credential-provider-env@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.750.0.tgz#adfa47d24bb9ea0d87993c6998b1ddc38fd3444f" + integrity sha512-In6bsG0p/P31HcH4DBRKBbcDS/3SHvEPjfXV8ODPWZO/l3/p7IRoYBdQ07C9R+VMZU2D0+/Sc/DWK/TUNDk1+Q== dependencies: - "@aws-sdk/core" "3.667.0" - "@aws-sdk/types" "3.667.0" - "@smithy/property-provider" "^3.1.7" - "@smithy/types" "^3.5.0" + "@aws-sdk/core" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-http@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.667.0.tgz" - integrity sha512-sjtybFfERZWiqTY7fswBxKQLvUkiCucOWyqh3IaPo/4nE1PXRnaZCVG0+kRBPrYIxWqiVwytvZzMJy8sVZcG0A== - dependencies: - "@aws-sdk/core" "3.667.0" - "@aws-sdk/types" "3.667.0" - "@smithy/fetch-http-handler" "^3.2.9" - "@smithy/node-http-handler" "^3.2.4" - "@smithy/property-provider" "^3.1.7" - "@smithy/protocol-http" "^4.1.4" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/util-stream" "^3.1.9" +"@aws-sdk/credential-provider-http@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.750.0.tgz#2879dde158dfccb21165aab95c90b7286bcdd5cf" + integrity sha512-wFB9qqfa20AB0dElsQz5ZlZT5o+a+XzpEpmg0erylmGYqEOvh8NQWfDUVpRmQuGq9VbvW/8cIbxPoNqEbPtuWQ== + dependencies: + "@aws-sdk/core" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/property-provider" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/smithy-client" "^4.1.5" + "@smithy/types" "^4.1.0" + "@smithy/util-stream" "^4.1.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@3.670.0": - version "3.670.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.670.0.tgz" - integrity sha512-TB1gacUj75leaTt2JsCTzygDSIk4ksv9uZoR7VenlgFPRktyOeT+fapwIVBeB2Qg7b9uxAY2K5XkKstDZyBEEw== - dependencies: - "@aws-sdk/core" "3.667.0" - "@aws-sdk/credential-provider-env" "3.667.0" - "@aws-sdk/credential-provider-http" "3.667.0" - "@aws-sdk/credential-provider-process" "3.667.0" - "@aws-sdk/credential-provider-sso" "3.670.0" - "@aws-sdk/credential-provider-web-identity" "3.667.0" - "@aws-sdk/types" "3.667.0" - "@smithy/credential-provider-imds" "^3.2.4" - "@smithy/property-provider" "^3.1.7" - "@smithy/shared-ini-file-loader" "^3.1.8" - "@smithy/types" "^3.5.0" +"@aws-sdk/credential-provider-ini@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.750.0.tgz#5079c5732ac886d72f357c0da532749d0c7487fd" + integrity sha512-2YIZmyEr5RUd3uxXpxOLD9G67Bibm4I/65M6vKFP17jVMUT+R1nL7mKqmhEVO2p+BoeV+bwMyJ/jpTYG368PCg== + dependencies: + "@aws-sdk/core" "3.750.0" + "@aws-sdk/credential-provider-env" "3.750.0" + "@aws-sdk/credential-provider-http" "3.750.0" + "@aws-sdk/credential-provider-process" "3.750.0" + "@aws-sdk/credential-provider-sso" "3.750.0" + "@aws-sdk/credential-provider-web-identity" "3.750.0" + "@aws-sdk/nested-clients" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@smithy/credential-provider-imds" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@3.670.0": - version "3.670.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.670.0.tgz" - integrity sha512-zwNrRYzubk4CaZ7zebeDhxsm8QtNWkbGKopZPOaZSnd5uqUGRcmx4ccVRngWUK68XDP44aEUWC8iU5Pc7btpHQ== - dependencies: - "@aws-sdk/credential-provider-env" "3.667.0" - "@aws-sdk/credential-provider-http" "3.667.0" - "@aws-sdk/credential-provider-ini" "3.670.0" - "@aws-sdk/credential-provider-process" "3.667.0" - "@aws-sdk/credential-provider-sso" "3.670.0" - "@aws-sdk/credential-provider-web-identity" "3.667.0" - "@aws-sdk/types" "3.667.0" - "@smithy/credential-provider-imds" "^3.2.4" - "@smithy/property-provider" "^3.1.7" - "@smithy/shared-ini-file-loader" "^3.1.8" - "@smithy/types" "^3.5.0" +"@aws-sdk/credential-provider-node@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.750.0.tgz#0eb117a287dac34040fb8cdf65d7d239b703b2ff" + integrity sha512-THWHHAceLwsOiowPEmKyhWVDlEUxH07GHSw5AQFDvNQtGKOQl0HSIFO1mKObT2Q2Vqzji9Bq8H58SO5BFtNPRw== + dependencies: + "@aws-sdk/credential-provider-env" "3.750.0" + "@aws-sdk/credential-provider-http" "3.750.0" + "@aws-sdk/credential-provider-ini" "3.750.0" + "@aws-sdk/credential-provider-process" "3.750.0" + "@aws-sdk/credential-provider-sso" "3.750.0" + "@aws-sdk/credential-provider-web-identity" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@smithy/credential-provider-imds" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-process@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.667.0.tgz" - integrity sha512-HZHnvop32fKgsNHkdhVaul7UzQ25sEc0j9yqA4bjhtbk0ECl42kj3f1pJ+ZU/YD9ut8lMJs/vVqiOdNThVdeBw== +"@aws-sdk/credential-provider-process@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.750.0.tgz#04ecf72fb30dbe6b360ea9371446f13183701b5e" + integrity sha512-Q78SCH1n0m7tpu36sJwfrUSxI8l611OyysjQeMiIOliVfZICEoHcLHLcLkiR+tnIpZ3rk7d2EQ6R1jwlXnalMQ== dependencies: - "@aws-sdk/core" "3.667.0" - "@aws-sdk/types" "3.667.0" - "@smithy/property-provider" "^3.1.7" - "@smithy/shared-ini-file-loader" "^3.1.8" - "@smithy/types" "^3.5.0" + "@aws-sdk/core" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.670.0": - version "3.670.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.670.0.tgz" - integrity sha512-5PkA8BOy4q57Vhe9AESoHKZ7vjRbElNPKjXA4qC01xY+DitClRFz4O3B9sMzFp0PHlz9nDVSXXKgq0yzF/nAag== - dependencies: - "@aws-sdk/client-sso" "3.670.0" - "@aws-sdk/core" "3.667.0" - "@aws-sdk/token-providers" "3.667.0" - "@aws-sdk/types" "3.667.0" - "@smithy/property-provider" "^3.1.7" - "@smithy/shared-ini-file-loader" "^3.1.8" - "@smithy/types" "^3.5.0" +"@aws-sdk/credential-provider-sso@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.750.0.tgz#a96afc83cfd63a957c5b9ed7913d60830c5b1f57" + integrity sha512-FGYrDjXN/FOQVi/t8fHSv8zCk+NEvtFnuc4cZUj5OIbM4vrfFc5VaPyn41Uza3iv6Qq9rZg0QOwWnqK8lNrqUw== + dependencies: + "@aws-sdk/client-sso" "3.750.0" + "@aws-sdk/core" "3.750.0" + "@aws-sdk/token-providers" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.667.0.tgz" - integrity sha512-t8CFlZMD/1p/8Cli3rvRiTJpjr/8BO64gw166AHgFZYSN2h95L2l1tcW0jpsc3PprA32nLg1iQVKYt4WGM4ugw== +"@aws-sdk/credential-provider-web-identity@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.750.0.tgz#2ab785cced1326f253c324d6ec10f74a02506c00" + integrity sha512-Nz8zs3YJ+GOTSrq+LyzbbC1Ffpt7pK38gcOyNZv76pP5MswKTUKNYBJehqwa+i7FcFQHsCk3TdhR8MT1ZR23uA== dependencies: - "@aws-sdk/core" "3.667.0" - "@aws-sdk/types" "3.667.0" - "@smithy/property-provider" "^3.1.7" - "@smithy/types" "^3.5.0" + "@aws-sdk/core" "3.750.0" + "@aws-sdk/nested-clients" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/middleware-bucket-endpoint@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.667.0.tgz" - integrity sha512-XGz4jMAkDoTyFdtLz7ZF+C05IAhCTC1PllpvTBaj821z/L0ilhbqVhrT/f2Buw8Id/K5A390csGXgusXyrFFjA== - dependencies: - "@aws-sdk/types" "3.667.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/protocol-http" "^4.1.4" - "@smithy/types" "^3.5.0" - "@smithy/util-config-provider" "^3.0.0" +"@aws-sdk/middleware-bucket-endpoint@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.734.0.tgz#af63fcaa865d3a47fd0ca3933eef04761f232677" + integrity sha512-etC7G18aF7KdZguW27GE/wpbrNmYLVT755EsFc8kXpZj8D6AFKxc7OuveinJmiy0bYXAMspJUWsF6CrGpOw6CQ== + dependencies: + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-arn-parser" "3.723.0" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-config-provider" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-expect-continue@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.667.0.tgz" - integrity sha512-0TiSL9S5DSG95NHGIz6qTMuV7GDKVn8tvvGSrSSZu/wXO3JaYSH0AElVpYfc4PtPRqVpEyNA7nnc7W56mMCLWQ== +"@aws-sdk/middleware-expect-continue@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.734.0.tgz#8159d81c3a8d9a9d60183fdeb7e8d6674f01c1cd" + integrity sha512-P38/v1l6HjuB2aFUewt7ueAW5IvKkFcv5dalPtbMGRhLeyivBOHwbCyuRKgVs7z7ClTpu9EaViEGki2jEQqEsQ== dependencies: - "@aws-sdk/types" "3.667.0" - "@smithy/protocol-http" "^4.1.4" - "@smithy/types" "^3.5.0" + "@aws-sdk/types" "3.734.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/middleware-flexible-checksums@3.669.0": - version "3.669.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.669.0.tgz" - integrity sha512-01UQLoUzVwWMf+b+AEuwJ2lluBD+Cp8AcbyEHqvEaPdjGKHIS4BCvnY70mZYnAfRtL8R2h9tt7iI61oWU3Gjkg== +"@aws-sdk/middleware-flexible-checksums@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.750.0.tgz#7ba7defd7b90b22b0aacedcc05072cb7fc50532c" + integrity sha512-ach0d2buDnX2TUausUbiXXFWFo3IegLnCrA+Rw8I9AYVpLN9lTaRwAYJwYC6zEuW9Golff8MwkYsp/OaC5tKMw== dependencies: "@aws-crypto/crc32" "5.2.0" "@aws-crypto/crc32c" "5.2.0" - "@aws-sdk/core" "3.667.0" - "@aws-sdk/types" "3.667.0" - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/protocol-http" "^4.1.4" - "@smithy/types" "^3.5.0" - "@smithy/util-middleware" "^3.0.7" - "@smithy/util-utf8" "^3.0.0" + "@aws-crypto/util" "5.2.0" + "@aws-sdk/core" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@smithy/is-array-buffer" "^4.0.0" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-stream" "^4.1.1" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-host-header@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.667.0.tgz" - integrity sha512-Z7fIAMQnPegs7JjAQvlOeWXwpMRfegh5eCoIP6VLJIeR6DLfYKbP35JBtt98R6DXslrN2RsbTogjbxPEDQfw1w== +"@aws-sdk/middleware-host-header@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.734.0.tgz#a9a02c055352f5c435cc925a4e1e79b7ba41b1b5" + integrity sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw== dependencies: - "@aws-sdk/types" "3.667.0" - "@smithy/protocol-http" "^4.1.4" - "@smithy/types" "^3.5.0" + "@aws-sdk/types" "3.734.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/middleware-location-constraint@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.667.0.tgz" - integrity sha512-ob85H3HhT3/u5O+x0o557xGZ78vSNeSSwMaSitxdsfs2hOuoUl1uk+OeLpi1hkuJnL41FPpokV7TVII2XrFfmg== +"@aws-sdk/middleware-location-constraint@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.734.0.tgz#fd1dc0e080ed85dd1feb7db3736c80689db4be07" + integrity sha512-EJEIXwCQhto/cBfHdm3ZOeLxd2NlJD+X2F+ZTOxzokuhBtY0IONfC/91hOo5tWQweerojwshSMHRCKzRv1tlwg== dependencies: - "@aws-sdk/types" "3.667.0" - "@smithy/types" "^3.5.0" + "@aws-sdk/types" "3.734.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/middleware-logger@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.667.0.tgz" - integrity sha512-PtTRNpNm/5c746jRgZCNg4X9xEJIwggkGJrF0GP9AB1ANg4pc/sF2Fvn1NtqPe9wtQ2stunJprnm5WkCHN7QiA== +"@aws-sdk/middleware-logger@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.734.0.tgz#d31e141ae7a78667e372953a3b86905bc6124664" + integrity sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w== dependencies: - "@aws-sdk/types" "3.667.0" - "@smithy/types" "^3.5.0" + "@aws-sdk/types" "3.734.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/middleware-recursion-detection@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.667.0.tgz" - integrity sha512-U5glWD3ehFohzpUpopLtmqAlDurGWo2wRGPNgi4SwhWU7UDt6LS7E/UvJjqC0CUrjlzOw+my2A+Ncf+fisMhxQ== +"@aws-sdk/middleware-recursion-detection@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.734.0.tgz#4fa1deb9887455afbb39130f7d9bc89ccee17168" + integrity sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA== dependencies: - "@aws-sdk/types" "3.667.0" - "@smithy/protocol-http" "^4.1.4" - "@smithy/types" "^3.5.0" + "@aws-sdk/types" "3.734.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/middleware-sdk-s3@3.669.0": - version "3.669.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.669.0.tgz" - integrity sha512-b2QUQ7DcIcVCUFhvmFEDI90BemvQhO0ntIajllLqQSy88PSNdLDCVx5mIzfxaaK/1tdY/UsEDRRm1kMQHJDQpg== - dependencies: - "@aws-sdk/core" "3.667.0" - "@aws-sdk/types" "3.667.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/core" "^2.4.8" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/protocol-http" "^4.1.4" - "@smithy/signature-v4" "^4.2.0" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.7" - "@smithy/util-stream" "^3.1.9" - "@smithy/util-utf8" "^3.0.0" +"@aws-sdk/middleware-sdk-s3@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.750.0.tgz#35f372310b3f2150e3ea8aee292e1b98fb40c1f0" + integrity sha512-3H6Z46cmAQCHQ0z8mm7/cftY5ifiLfCjbObrbyyp2fhQs9zk6gCKzIX8Zjhw0RMd93FZi3ebRuKJWmMglf4Itw== + dependencies: + "@aws-sdk/core" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-arn-parser" "3.723.0" + "@smithy/core" "^3.1.4" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/signature-v4" "^5.0.1" + "@smithy/smithy-client" "^4.1.5" + "@smithy/types" "^4.1.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-stream" "^4.1.1" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-ssec@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.667.0.tgz" - integrity sha512-1wuAUZIkmZIvOmGg5qNQU821CGFHhkuKioxXgNh0DpUxZ9+AeiV7yorJr+bqkb2KBFv1i1TnzGRecvKf/KvZIQ== +"@aws-sdk/middleware-ssec@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.734.0.tgz#a5863b9c5a5006dbf2f856f14030d30063a28dfa" + integrity sha512-d4yd1RrPW/sspEXizq2NSOUivnheac6LPeLSLnaeTbBG9g1KqIqvCzP1TfXEqv2CrWfHEsWtJpX7oyjySSPvDQ== dependencies: - "@aws-sdk/types" "3.667.0" - "@smithy/types" "^3.5.0" + "@aws-sdk/types" "3.734.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/middleware-user-agent@3.669.0": - version "3.669.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.669.0.tgz" - integrity sha512-K8ScPi45zjJrj5Y2gRqVsvKKQCQbvQBfYGcBw9ZOx9TTavH80bOCBjWg/GFnvs4f37tqVc1wMN2oGvcTF6HveQ== - dependencies: - "@aws-sdk/core" "3.667.0" - "@aws-sdk/types" "3.667.0" - "@aws-sdk/util-endpoints" "3.667.0" - "@smithy/core" "^2.4.8" - "@smithy/protocol-http" "^4.1.4" - "@smithy/types" "^3.5.0" +"@aws-sdk/middleware-user-agent@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.750.0.tgz#cea1d9ece724acba1369d7b4a1efa16192cbf658" + integrity sha512-YYcslDsP5+2NZoN3UwuhZGkhAHPSli7HlJHBafBrvjGV/I9f8FuOO1d1ebxGdEP4HyRXUGyh+7Ur4q+Psk0ryw== + dependencies: + "@aws-sdk/core" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-endpoints" "3.743.0" + "@smithy/core" "^3.1.4" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/region-config-resolver@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.667.0.tgz" - integrity sha512-iNr+JhhA902JMKHG9IwT9YdaEx6KGl6vjAL5BRNeOjfj4cZYMog6Lz/IlfOAltMtT0w88DAHDEFrBd2uO0l2eg== +"@aws-sdk/nested-clients@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.750.0.tgz#facfef441ad78db2f544be0eb3f1f7adb16846c1" + integrity sha512-OH68BRF0rt9nDloq4zsfeHI0G21lj11a66qosaljtEP66PWm7tQ06feKbFkXHT5E1K3QhJW3nVyK8v2fEBY5fg== dependencies: - "@aws-sdk/types" "3.667.0" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/types" "^3.5.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.7" + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.750.0" + "@aws-sdk/middleware-host-header" "3.734.0" + "@aws-sdk/middleware-logger" "3.734.0" + "@aws-sdk/middleware-recursion-detection" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.750.0" + "@aws-sdk/region-config-resolver" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-endpoints" "3.743.0" + "@aws-sdk/util-user-agent-browser" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.750.0" + "@smithy/config-resolver" "^4.0.1" + "@smithy/core" "^3.1.4" + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/hash-node" "^4.0.1" + "@smithy/invalid-dependency" "^4.0.1" + "@smithy/middleware-content-length" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.5" + "@smithy/middleware-retry" "^4.0.6" + "@smithy/middleware-serde" "^4.0.2" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/smithy-client" "^4.1.5" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.6" + "@smithy/util-defaults-mode-node" "^4.0.6" + "@smithy/util-endpoints" "^3.0.1" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/signature-v4-multi-region@3.669.0": - version "3.669.0" - resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.669.0.tgz" - integrity sha512-TVwlWAxfBHnFjnfTBQWUhzVJzjwVhkq1+KR0JZV7JrfqeyBOdZjAaV9ie3VNY9HUouecq1fDuKaSwe4JiWQsHg== +"@aws-sdk/region-config-resolver@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.734.0.tgz#45ffbc56a3e94cc5c9e0cd596b0fda60f100f70b" + integrity sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ== dependencies: - "@aws-sdk/middleware-sdk-s3" "3.669.0" - "@aws-sdk/types" "3.667.0" - "@smithy/protocol-http" "^4.1.4" - "@smithy/signature-v4" "^4.2.0" - "@smithy/types" "^3.5.0" + "@aws-sdk/types" "3.734.0" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" tslib "^2.6.2" -"@aws-sdk/token-providers@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.667.0.tgz" - integrity sha512-ZecJlG8p6D4UTYlBHwOWX6nknVtw/OBJ3yPXTSajBjhUlj9lE2xvejI8gl4rqkyLXk7z3bki+KR4tATbMaM9yg== +"@aws-sdk/signature-v4-multi-region@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.750.0.tgz#b948dfc7ab7fbcb97e0df6bdffc03b3f3cecb49a" + integrity sha512-RA9hv1Irro/CrdPcOEXKwJ0DJYJwYCsauGEdRXihrRfy8MNSR9E+mD5/Fr5Rxjaq5AHM05DYnN3mg/DU6VwzSw== dependencies: - "@aws-sdk/types" "3.667.0" - "@smithy/property-provider" "^3.1.7" - "@smithy/shared-ini-file-loader" "^3.1.8" - "@smithy/types" "^3.5.0" + "@aws-sdk/middleware-sdk-s3" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/signature-v4" "^5.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/types@3.667.0", "@aws-sdk/types@^3.222.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.667.0.tgz" - integrity sha512-gYq0xCsqFfQaSL/yT1Gl1vIUjtsg7d7RhnUfsXaHt8xTxOKRTdH9GjbesBjXOzgOvB0W0vfssfreSNGFlOOMJg== +"@aws-sdk/token-providers@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.750.0.tgz#dc72c3d71f224ee5a7df35829547966d2562aba2" + integrity sha512-X/KzqZw41iWolwNdc8e3RMcNSMR364viHv78u6AefXOO5eRM40c4/LuST1jDzq35/LpnqRhL7/MuixOetw+sFw== dependencies: - "@smithy/types" "^3.5.0" + "@aws-sdk/nested-clients" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/util-arn-parser@3.568.0": - version "3.568.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz" - integrity sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w== +"@aws-sdk/types@3.734.0", "@aws-sdk/types@^3.222.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.734.0.tgz#af5e620b0e761918282aa1c8e53cac6091d169a2" + integrity sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg== dependencies: + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/util-endpoints@3.667.0": - version "3.667.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.667.0.tgz" - integrity sha512-X22SYDAuQJWnkF1/q17pkX3nGw5XMD9YEUbmt87vUnRq7iyJ3JOpl6UKOBeUBaL838wA5yzdbinmCITJ/VZ1QA== +"@aws-sdk/util-arn-parser@3.723.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.723.0.tgz#e9bff2b13918a92d60e0012101dad60ed7db292c" + integrity sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w== dependencies: - "@aws-sdk/types" "3.667.0" - "@smithy/types" "^3.5.0" - "@smithy/util-endpoints" "^2.1.3" + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.743.0": + version "3.743.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.743.0.tgz#fba654e0c5f1c8ba2b3e175dfee8e3ba4df2394a" + integrity sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw== + dependencies: + "@aws-sdk/types" "3.734.0" + "@smithy/types" "^4.1.0" + "@smithy/util-endpoints" "^3.0.1" tslib "^2.6.2" "@aws-sdk/util-locate-window@^3.0.0": - version "3.568.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz" - integrity sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig== + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.723.0.tgz#174551bfdd2eb36d3c16e7023fd7e7ee96ad0fa9" + integrity sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw== dependencies: tslib "^2.6.2" -"@aws-sdk/util-user-agent-browser@3.670.0": - version "3.670.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.670.0.tgz" - integrity sha512-iRynWWazqEcCKwGMcQcywKTDLdLvqts1Yx474U64I9OKQXXwhOwhXbF5CAPSRta86lkVNAVYJa/0Bsv45pNn1A== +"@aws-sdk/util-user-agent-browser@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.734.0.tgz#bbf3348b14bd7783f60346e1ce86978999450fe7" + integrity sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng== dependencies: - "@aws-sdk/types" "3.667.0" - "@smithy/types" "^3.5.0" + "@aws-sdk/types" "3.734.0" + "@smithy/types" "^4.1.0" bowser "^2.11.0" tslib "^2.6.2" -"@aws-sdk/util-user-agent-node@3.669.0": - version "3.669.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.669.0.tgz" - integrity sha512-9jxCYrgggy2xd44ZASqI7AMiRVaSiFp+06Kg8BQSU0ijKpBJlwcsqIS8pDT/n6LxuOw2eV5ipvM2C0r1iKzrGA== +"@aws-sdk/util-user-agent-node@3.750.0": + version "3.750.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.750.0.tgz#a12fe898bcab26cf50b31cb70b5fc5e887edce40" + integrity sha512-84HJj9G9zbrHX2opLk9eHfDceB+UIHVrmflMzWHpsmo9fDuro/flIBqaVDlE021Osj6qIM0SJJcnL6s23j7JEw== dependencies: - "@aws-sdk/middleware-user-agent" "3.669.0" - "@aws-sdk/types" "3.667.0" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/types" "^3.5.0" + "@aws-sdk/middleware-user-agent" "3.750.0" + "@aws-sdk/types" "3.734.0" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/xml-builder@3.662.0": - version "3.662.0" - resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.662.0.tgz" - integrity sha512-ikLkXn0igUpnJu2mCZjklvmcDGWT9OaLRv3JyC/cRkTaaSrblPjPM7KKsltxdMTLQ+v7fjCN0TsJpxphMfaOPA== +"@aws-sdk/xml-builder@3.734.0": + version "3.734.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.734.0.tgz#174d3269d303919e3ebfbfa3dd9b6d5a6a7a9543" + integrity sha512-Zrjxi5qwGEcUsJ0ru7fRtW74WcTS0rbLcehoFB+rN1GRi2hbLcFaYs4PwVA5diLeAJH0gszv3x4Hr/S87MfbKQ== dependencies: - "@smithy/types" "^3.5.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@bytecodealliance/preview2-shim@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz#9bc1cadbb9f86c446c6f579d3431c08a06a6672e" - integrity sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ== - "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" "@ethersproject/abi@5.6.2": version "5.6.2" - resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.2.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.2.tgz#f2956f2ac724cd720e581759d9e3840cd9744818" integrity sha512-40Ixjhy+YzFtnvzIqFU13FW9hd1gMoLa3cJfSDnfnL4o8EnEG1qLiV8sNJo3sHYi9UYMfFeRuZ7kv5+vhzU7gQ== dependencies: "@ethersproject/address" "^5.6.0" @@ -629,24 +580,24 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.0" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.0", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" +"@ethersproject/abi@5.8.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.0", "@ethersproject/abi@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.8.0.tgz#e79bb51940ac35fe6f3262d7fe2cdb25ad5f07d9" + integrity sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q== + dependencies: + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" "@ethersproject/abstract-provider@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.0.tgz#0c4ac7054650dbd9c476cf5907f588bbb6ef3061" integrity sha512-oPMFlKLN+g+y7a79cLK3WiLcjWFnZQtXWgnLAbHZcN3s7L4v90UHpTOrLk+m3yr0gt+/h9STTM6zrr7PM8uoRw== dependencies: "@ethersproject/bignumber" "^5.6.0" @@ -657,22 +608,22 @@ "@ethersproject/transactions" "^5.6.0" "@ethersproject/web" "^5.6.0" -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.6.0", "@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== +"@ethersproject/abstract-provider@5.8.0", "@ethersproject/abstract-provider@^5.6.0", "@ethersproject/abstract-provider@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz#7581f9be601afa1d02b95d26b9d9840926a35b0c" + integrity sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg== dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/networks" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/web" "^5.8.0" "@ethersproject/abstract-signer@5.6.1": version "5.6.1" - resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.1.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.1.tgz#54df786bdf1aabe20d0ed508ec05e0aa2d06674f" integrity sha512-xhSLo6y0nGJS7NxfvOSzCaWKvWb1TLT7dQ0nnpHZrDnC67xfnWm9NXflTMFPUXXMtjr33CdV0kWDEmnbrQZ74Q== dependencies: "@ethersproject/abstract-provider" "^5.6.0" @@ -681,20 +632,20 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/properties" "^5.6.0" -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== +"@ethersproject/abstract-signer@5.8.0", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz#8d7417e95e4094c1797a9762e6789c7356db0754" + integrity sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA== dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" "@ethersproject/address@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.0.tgz#13c49836d73e7885fc148ad633afad729da25012" integrity sha512-6nvhYXjbXsHPS+30sHZ+U4VMagFC/9zAk6Gd/h3S21YW4+yfb0WfRtaAIZ4kfM4rrVwqiy284LP0GtL5HXGLxQ== dependencies: "@ethersproject/bignumber" "^5.6.0" @@ -703,96 +654,96 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/rlp" "^5.6.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.6.0", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== +"@ethersproject/address@5.8.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.6.0", "@ethersproject/address@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.8.0.tgz#3007a2c352eee566ad745dca1dbbebdb50a6a983" + integrity sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA== dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" -"@ethersproject/base64@5.6.0", "@ethersproject/base64@^5.6.0": +"@ethersproject/base64@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.0.tgz#a12c4da2a6fb86d88563216b0282308fc15907c9" integrity sha512-2Neq8wxJ9xHxCF9TUgmKeSh9BXJ6OAxWfeGWvbauPh8FuHEjamgHilllx8KkSd5ErxyHIX7Xv3Fkcud2kY9ezw== dependencies: "@ethersproject/bytes" "^5.6.0" -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== +"@ethersproject/base64@5.8.0", "@ethersproject/base64@^5.6.0", "@ethersproject/base64@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.8.0.tgz#61c669c648f6e6aad002c228465d52ac93ee83eb" + integrity sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ== dependencies: - "@ethersproject/bytes" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" "@ethersproject/basex@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.0.tgz#9ea7209bf0a1c3ddc2a90f180c3a7f0d7d2e8a69" integrity sha512-qN4T+hQd/Md32MoJpc69rOwLYRUXwjTlhHDIeUkUmiN/JyWkkLLMoG0TqvSQKNqZOMgN5stbUYN6ILC+eD7MEQ== dependencies: "@ethersproject/bytes" "^5.6.0" "@ethersproject/properties" "^5.6.0" -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.6.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== +"@ethersproject/basex@5.8.0", "@ethersproject/basex@^5.6.0", "@ethersproject/basex@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.8.0.tgz#1d279a90c4be84d1c1139114a1f844869e57d03a" + integrity sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q== dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/properties" "^5.8.0" "@ethersproject/bignumber@5.6.1": version "5.6.1" - resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.1.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.1.tgz#d5e0da518eb82ab8d08ca9db501888bbf5f0c8fb" integrity sha512-UtMeZ3GaUuF9sx2u9nPZiPP3ULcAFmXyvynR7oHl/tPrM+vldZh7ocMsoa1PqKYGnQnqUZJoqxZnGN6J0qdipA== dependencies: "@ethersproject/bytes" "^5.6.0" "@ethersproject/logger" "^5.6.0" bn.js "^4.11.9" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== +"@ethersproject/bignumber@5.8.0", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.8.0.tgz#c381d178f9eeb370923d389284efa19f69efa5d7" + integrity sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA== dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" bn.js "^5.2.1" "@ethersproject/bytes@5.6.1": version "5.6.1" - resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.6.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== +"@ethersproject/bytes@5.8.0", "@ethersproject/bytes@^5.6.0", "@ethersproject/bytes@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.8.0.tgz#9074820e1cac7507a34372cadeb035461463be34" + integrity sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A== dependencies: - "@ethersproject/logger" "^5.7.0" + "@ethersproject/logger" "^5.8.0" "@ethersproject/constants@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.0.tgz#55e3eb0918584d3acc0688e9958b0cedef297088" integrity sha512-SrdaJx2bK0WQl23nSpV/b1aq293Lh0sUaZT/yYKPDKn4tlAbkH96SPJwIhwSwTsoQQZxuh1jnqsKwyymoiBdWA== dependencies: "@ethersproject/bignumber" "^5.6.0" -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.6.0", "@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== +"@ethersproject/constants@5.8.0", "@ethersproject/constants@^5.6.0", "@ethersproject/constants@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.8.0.tgz#12f31c2f4317b113a4c19de94e50933648c90704" + integrity sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg== dependencies: - "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bignumber" "^5.8.0" "@ethersproject/contracts@5.6.1": version "5.6.1" - resolved "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.1.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.1.tgz#c0eba3f8a2226456f92251a547344fd0593281d2" integrity sha512-0fpBBDoPqJMsutE6sNjg6pvCJaIcl7tliMQTMRcoUWDACfjO68CpKOJBlsEhEhmzdnu/41KbrfAeg+sB3y35MQ== dependencies: "@ethersproject/abi" "^5.6.0" @@ -806,25 +757,25 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/transactions" "^5.6.0" -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" +"@ethersproject/contracts@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.8.0.tgz#243a38a2e4aa3e757215ea64e276f8a8c9d8ed73" + integrity sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ== + dependencies: + "@ethersproject/abi" "^5.8.0" + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" "@ethersproject/hash@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.0.tgz#d24446a5263e02492f9808baa99b6e2b4c3429a2" integrity sha512-fFd+k9gtczqlr0/BruWLAu7UAOas1uRRJvOR84uDf4lNZ+bTkGl366qvniUZHKtlqxBRU65MkOobkmvmpHU+jA== dependencies: "@ethersproject/abstract-signer" "^5.6.0" @@ -836,24 +787,24 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.0" -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.6.0", "@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@5.6.1", "@ethersproject/hdnode@^5.6.0": +"@ethersproject/hash@5.8.0", "@ethersproject/hash@^5.6.0", "@ethersproject/hash@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.8.0.tgz#b8893d4629b7f8462a90102572f8cd65a0192b4c" + integrity sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/base64" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/hdnode@5.6.1": version "5.6.1" - resolved "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.1.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.1.tgz#37fa1eb91f6e20ca39cc5fcb7acd3da263d85dab" integrity sha512-6IuYDmbH5Bv/WH/A2cUd0FjNr4qTLAvyHAECiFZhNZp69pPvU7qIDwJ7CU7VAkwm4IVBzqdYy9mpMAGhQdwCDA== dependencies: "@ethersproject/abstract-signer" "^5.6.0" @@ -869,27 +820,27 @@ "@ethersproject/transactions" "^5.6.0" "@ethersproject/wordlists" "^5.6.0" -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.6.0", "@ethersproject/json-wallets@^5.6.0": +"@ethersproject/hdnode@5.8.0", "@ethersproject/hdnode@^5.6.0", "@ethersproject/hdnode@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.8.0.tgz#a51ae2a50bcd48ef6fd108c64cbae5e6ff34a761" + integrity sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/basex" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/pbkdf2" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/wordlists" "^5.8.0" + +"@ethersproject/json-wallets@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.0.tgz#4c2fc27f17e36c583e7a252fb938bc46f98891e5" integrity sha512-fmh86jViB9r0ibWXTQipxpAGMiuxoqUf78oqJDlCAJXgnJF024hOOX7qVgqsjtbeoxmcLwpPsXNU0WEe/16qPQ== dependencies: "@ethersproject/abstract-signer" "^5.6.0" @@ -906,98 +857,98 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" +"@ethersproject/json-wallets@5.8.0", "@ethersproject/json-wallets@^5.6.0", "@ethersproject/json-wallets@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz#d18de0a4cf0f185f232eb3c17d5e0744d97eb8c9" + integrity sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hdnode" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/pbkdf2" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" aes-js "3.0.0" scrypt-js "3.0.1" "@ethersproject/keccak256@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.0.tgz#fea4bb47dbf8f131c2e1774a1cecbfeb9d606459" integrity sha512-tk56BJ96mdj/ksi7HWZVWGjCq0WVl/QvfhFQNeL8fxhBlGoP+L80uDCiQcpJPd+2XxkivS3lwRm3E0CXTfol0w== dependencies: "@ethersproject/bytes" "^5.6.0" js-sha3 "0.8.0" -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.6.0", "@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== +"@ethersproject/keccak256@5.8.0", "@ethersproject/keccak256@^5.6.0", "@ethersproject/keccak256@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.8.0.tgz#d2123a379567faf2d75d2aaea074ffd4df349e6a" + integrity sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng== dependencies: - "@ethersproject/bytes" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" js-sha3 "0.8.0" "@ethersproject/logger@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.6.0", "@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== +"@ethersproject/logger@5.8.0", "@ethersproject/logger@^5.6.0", "@ethersproject/logger@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.8.0.tgz#f0232968a4f87d29623a0481690a2732662713d6" + integrity sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA== -"@ethersproject/networks@5.6.2", "@ethersproject/networks@^5.6.0": +"@ethersproject/networks@5.6.2": version "5.6.2" - resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.2.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.2.tgz#2bacda62102c0b1fcee408315f2bed4f6fbdf336" integrity sha512-9uEzaJY7j5wpYGTojGp8U89mSsgQLc40PCMJLMCnFXTs7nhBveZ0t7dbqWUNrepWTszDbFkYD6WlL8DKx5huHA== dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== +"@ethersproject/networks@5.8.0", "@ethersproject/networks@^5.6.0", "@ethersproject/networks@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.8.0.tgz#8b4517a3139380cba9fb00b63ffad0a979671fde" + integrity sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg== dependencies: - "@ethersproject/logger" "^5.7.0" + "@ethersproject/logger" "^5.8.0" -"@ethersproject/pbkdf2@5.6.0", "@ethersproject/pbkdf2@^5.6.0": +"@ethersproject/pbkdf2@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.0.tgz#04fcc2d7c6bff88393f5b4237d906a192426685a" integrity sha512-Wu1AxTgJo3T3H6MIu/eejLFok9TYoSdgwRr5oGY1LTLfmGesDoSx05pemsbrPT2gG4cQME+baTSCp5sEo2erZQ== dependencies: "@ethersproject/bytes" "^5.6.0" "@ethersproject/sha2" "^5.6.0" -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== +"@ethersproject/pbkdf2@5.8.0", "@ethersproject/pbkdf2@^5.6.0", "@ethersproject/pbkdf2@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz#cd2621130e5dd51f6a0172e63a6e4a0c0a0ec37e" + integrity sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg== dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" "@ethersproject/properties@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.6.0", "@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== +"@ethersproject/properties@5.8.0", "@ethersproject/properties@^5.6.0", "@ethersproject/properties@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.8.0.tgz#405a8affb6311a49a91dabd96aeeae24f477020e" + integrity sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw== dependencies: - "@ethersproject/logger" "^5.7.0" + "@ethersproject/logger" "^5.8.0" "@ethersproject/providers@5.6.6": version "5.6.6" - resolved "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.6.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.6.tgz#1967149cb4557d253f8c176a44aabda155f228cd" integrity sha512-6X6agj3NeQ4tgnvBMCjHK+CjQbz+Qmn20JTxCYZ/uymrgCEOpJtY9zeRxJIDsSi0DPw8xNAxypj95JMCsapUfA== dependencies: "@ethersproject/abstract-provider" "^5.6.0" @@ -1020,85 +971,85 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/providers@5.7.2": - version "5.7.2" - resolved "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" +"@ethersproject/providers@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.8.0.tgz#6c2ae354f7f96ee150439f7de06236928bc04cb4" + integrity sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/base64" "^5.8.0" + "@ethersproject/basex" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/networks" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/web" "^5.8.0" bech32 "1.1.4" - ws "7.4.6" + ws "8.18.0" "@ethersproject/random@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.0.tgz#1505d1ab6a250e0ee92f436850fa3314b2cb5ae6" integrity sha512-si0PLcLjq+NG/XHSZz90asNf+YfKEqJGVdxoEkSukzbnBgC8rydbgbUgBbBGLeHN4kAJwUFEKsu3sCXT93YMsw== dependencies: "@ethersproject/bytes" "^5.6.0" "@ethersproject/logger" "^5.6.0" -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.6.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== +"@ethersproject/random@5.8.0", "@ethersproject/random@^5.6.0", "@ethersproject/random@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.8.0.tgz#1bced04d49449f37c6437c701735a1a022f0057a" + integrity sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A== dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" -"@ethersproject/rlp@5.6.0", "@ethersproject/rlp@^5.6.0": +"@ethersproject/rlp@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.0.tgz#55a7be01c6f5e64d6e6e7edb6061aa120962a717" integrity sha512-dz9WR1xpcTL+9DtOT/aDO+YyxSSdO8YIS0jyZwHHSlAmnxA6cKU3TrTd4Xc/bHayctxTgGLYNuVVoiXE4tTq1g== dependencies: "@ethersproject/bytes" "^5.6.0" "@ethersproject/logger" "^5.6.0" -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== +"@ethersproject/rlp@5.8.0", "@ethersproject/rlp@^5.6.0", "@ethersproject/rlp@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.8.0.tgz#5a0d49f61bc53e051532a5179472779141451de5" + integrity sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q== dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" "@ethersproject/sha2@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.0.tgz#364c4c11cc753bda36f31f001628706ebadb64d9" integrity sha512-1tNWCPFLu1n3JM9t4/kytz35DkuF9MxqkGGEHNauEbaARdm2fafnOyw1s0tIQDPKF/7bkP1u3dbrmjpn5CelyA== dependencies: "@ethersproject/bytes" "^5.6.0" "@ethersproject/logger" "^5.6.0" hash.js "1.1.7" -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.6.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== +"@ethersproject/sha2@5.8.0", "@ethersproject/sha2@^5.6.0", "@ethersproject/sha2@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.8.0.tgz#8954a613bb78dac9b46829c0a95de561ef74e5e1" + integrity sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A== dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" hash.js "1.1.7" "@ethersproject/signing-key@5.6.1": version "5.6.1" - resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.1.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.1.tgz#31b0a531520616254eb0465b9443e49515c4d457" integrity sha512-XvqQ20DH0D+bS3qlrrgh+axRMth5kD1xuvqUQUTeezxUTXBOeR6hWz2/C6FBEu39FRytyybIWrYf7YLSAKr1LQ== dependencies: "@ethersproject/bytes" "^5.6.0" @@ -1108,21 +1059,21 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.6.0", "@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== +"@ethersproject/signing-key@5.8.0", "@ethersproject/signing-key@^5.6.0", "@ethersproject/signing-key@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.8.0.tgz#9797e02c717b68239c6349394ea85febf8893119" + integrity sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w== dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" bn.js "^5.2.1" - elliptic "6.5.4" + elliptic "6.6.1" hash.js "1.1.7" "@ethersproject/solidity@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.0.tgz#64657362a596bf7f5630bdc921c07dd78df06dc3" integrity sha512-YwF52vTNd50kjDzqKaoNNbC/r9kMDPq3YzDWmsjFTRBcIF1y4JCQJ8gB30wsTfHbaxgxelI5BfxQSxD/PbJOww== dependencies: "@ethersproject/bignumber" "^5.6.0" @@ -1132,39 +1083,39 @@ "@ethersproject/sha2" "^5.6.0" "@ethersproject/strings" "^5.6.0" -"@ethersproject/solidity@5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== +"@ethersproject/solidity@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.8.0.tgz#429bb9fcf5521307a9448d7358c26b93695379b9" + integrity sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA== dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/strings" "^5.8.0" "@ethersproject/strings@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.0.tgz#9891b26709153d996bf1303d39a7f4bc047878fd" integrity sha512-uv10vTtLTZqrJuqBZR862ZQjTIa724wGPWQqZrofaPI/kUsf53TBG0I0D+hQ1qyNtllbNzaW+PDPHHUI6/65Mg== dependencies: "@ethersproject/bytes" "^5.6.0" "@ethersproject/constants" "^5.6.0" "@ethersproject/logger" "^5.6.0" -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.6.0", "@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== +"@ethersproject/strings@5.8.0", "@ethersproject/strings@^5.6.0", "@ethersproject/strings@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.8.0.tgz#ad79fafbf0bd272d9765603215ac74fd7953908f" + integrity sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg== dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" "@ethersproject/transactions@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.0.tgz#4b594d73a868ef6e1529a2f8f94a785e6791ae4e" integrity sha512-4HX+VOhNjXHZyGzER6E/LVI2i6lf9ejYeWD6l4g50AdmimyuStKc39kvKf1bXWQMg7QNVh+uC7dYwtaZ02IXeg== dependencies: "@ethersproject/address" "^5.6.0" @@ -1177,42 +1128,42 @@ "@ethersproject/rlp" "^5.6.0" "@ethersproject/signing-key" "^5.6.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.0", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" +"@ethersproject/transactions@5.8.0", "@ethersproject/transactions@^5.6.0", "@ethersproject/transactions@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.8.0.tgz#1e518822403abc99def5a043d1c6f6fe0007e46b" + integrity sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg== + dependencies: + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" "@ethersproject/units@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.0.tgz#e5cbb1906988f5740254a21b9ded6bd51e826d9c" integrity sha512-tig9x0Qmh8qbo1w8/6tmtyrm/QQRviBh389EQ+d8fP4wDsBrJBf08oZfoiz1/uenKK9M78yAP4PoR7SsVoTjsw== dependencies: "@ethersproject/bignumber" "^5.6.0" "@ethersproject/constants" "^5.6.0" "@ethersproject/logger" "^5.6.0" -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== +"@ethersproject/units@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.8.0.tgz#c12f34ba7c3a2de0e9fa0ed0ee32f3e46c5c2c6a" + integrity sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ== dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" "@ethersproject/wallet@5.6.1": version "5.6.1" - resolved "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.1.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.1.tgz#5df4f75f848ed84ca30fd6ca75d2c66b19c5552b" integrity sha512-oXWoOslEWtwZiViIMlGVjeKDQz/tI7JF9UkyzN9jaGj8z7sXt2SyFMb0Ev6vSAqjIzrCrNrJ/+MkAhtKnGOfZw== dependencies: "@ethersproject/abstract-provider" "^5.6.0" @@ -1231,30 +1182,30 @@ "@ethersproject/transactions" "^5.6.0" "@ethersproject/wordlists" "^5.6.0" -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.6.0", "@ethersproject/web@^5.6.0": +"@ethersproject/wallet@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.8.0.tgz#49c300d10872e6986d953e8310dc33d440da8127" + integrity sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/hdnode" "^5.8.0" + "@ethersproject/json-wallets" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/wordlists" "^5.8.0" + +"@ethersproject/web@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.0.tgz#4bf8b3cbc17055027e1a5dd3c357e37474eaaeb8" integrity sha512-G/XHj0hV1FxI2teHRfCGvfBUHFmU+YOSbCxlAMqJklxSa7QMiHFQfAxvwY2PFqgvdkxEKwRNr/eCjfAPEm2Ctg== dependencies: "@ethersproject/base64" "^5.6.0" @@ -1263,20 +1214,20 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.0" -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== +"@ethersproject/web@5.8.0", "@ethersproject/web@^5.6.0", "@ethersproject/web@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.8.0.tgz#3e54badc0013b7a801463a7008a87988efce8a37" + integrity sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw== dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" + "@ethersproject/base64" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" -"@ethersproject/wordlists@5.6.0", "@ethersproject/wordlists@^5.6.0": +"@ethersproject/wordlists@5.6.0": version "5.6.0" - resolved "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.0.tgz#79e62c5276e091d8575f6930ba01a29218ded032" integrity sha512-q0bxNBfIX3fUuAo9OmjlEYxP40IB8ABgb7HjEZCL5IKubzV3j30CWi2rqQbjTS2HfoyQbfINoKcTVWP4ejwR7Q== dependencies: "@ethersproject/bytes" "^5.6.0" @@ -1285,35 +1236,35 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.0" -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== +"@ethersproject/wordlists@5.8.0", "@ethersproject/wordlists@^5.6.0", "@ethersproject/wordlists@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.8.0.tgz#7a5654ee8d1bb1f4dbe43f91d217356d650ad821" + integrity sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg== dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" "@fastify/busboy@^2.0.0": version "2.1.1" - resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== "@jridgewell/resolve-uri@^3.0.3": version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/sourcemap-codec@^1.4.10": version "1.5.0" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -1321,7 +1272,7 @@ "@metamask/eth-sig-util@^4.0.0": version "4.0.1" - resolved "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== dependencies: ethereumjs-abi "^0.6.8" @@ -1332,17 +1283,17 @@ "@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": version "1.2.0" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== "@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": version "1.7.1" - resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== "@nomicfoundation/ethereumjs-block@4.2.2", "@nomicfoundation/ethereumjs-block@^4.0.0": version "4.2.2" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.2.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.2.2.tgz#f317078c810a54381c682d0c12e1e81acfc11599" integrity sha512-atjpt4gc6ZGZUPHBAQaUJsm1l/VCo7FmyQ780tMGO8QStjLdhz09dXynmhwVTy5YbRr0FOh/uX3QaEM0yIB2Zg== dependencies: "@nomicfoundation/ethereumjs-common" "3.1.2" @@ -1354,7 +1305,7 @@ "@nomicfoundation/ethereumjs-blockchain@6.2.2", "@nomicfoundation/ethereumjs-blockchain@^6.0.0": version "6.2.2" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.2.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.2.2.tgz#9f79dd2b3dc73f5d5a220f7d8a734330c4c26320" integrity sha512-6AIB2MoTEPZJLl6IRKcbd8mUmaBAQ/NMe3O7OsAOIiDjMNPPH5KaUQiLfbVlegT4wKIg/GOsFH7XlH2KDVoJNg== dependencies: "@nomicfoundation/ethereumjs-block" "4.2.2" @@ -1372,7 +1323,7 @@ "@nomicfoundation/ethereumjs-common@3.1.2", "@nomicfoundation/ethereumjs-common@^3.0.0": version "3.1.2" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.1.2.tgz#041086da66ed40f2bf2a2116a1f2f0fcf33fb80d" integrity sha512-JAEBpIua62dyObHM9KI2b4wHZcRQYYge9gxiygTWa3lNCr2zo+K0TbypDpgiNij5MCGNWP1eboNfNfx1a3vkvA== dependencies: "@nomicfoundation/ethereumjs-util" "8.0.6" @@ -1380,7 +1331,7 @@ "@nomicfoundation/ethereumjs-ethash@2.0.5": version "2.0.5" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.5.tgz#0c605812f6f4589a9f6d597db537bbf3b86469db" integrity sha512-xlLdcICGgAYyYmnI3r1t0R5fKGBJNDQSOQxXNjVO99JmxJIdXR5MgPo5CSJO1RpyzKOgzi3uIFn8agv564dZEQ== dependencies: "@nomicfoundation/ethereumjs-block" "4.2.2" @@ -1392,7 +1343,7 @@ "@nomicfoundation/ethereumjs-evm@1.3.2", "@nomicfoundation/ethereumjs-evm@^1.0.0": version "1.3.2" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.3.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.3.2.tgz#f9d6bafd5c23d07ab75b8649d589af1a43b60bfc" integrity sha512-I00d4MwXuobyoqdPe/12dxUQxTYzX8OckSaWsMcWAfQhgVDvBx6ffPyP/w1aL0NW7MjyerySPcSVfDJAMHjilw== dependencies: "@nomicfoundation/ethereumjs-common" "3.1.2" @@ -1406,12 +1357,12 @@ "@nomicfoundation/ethereumjs-rlp@4.0.3", "@nomicfoundation/ethereumjs-rlp@^4.0.0": version "4.0.3" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.3.tgz#8d9147fbd0d49e8f4c5ce729d226694a8fe03eb8" integrity sha512-DZMzB/lqPK78T6MluyXqtlRmOMcsZbTTbbEyAjo0ncaff2mqu/k8a79PBcyvpgAhWD/R59Fjq/x3ro5Lof0AtA== "@nomicfoundation/ethereumjs-statemanager@1.0.5", "@nomicfoundation/ethereumjs-statemanager@^1.0.0": version "1.0.5" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.5.tgz#951cc9ff2c421d40233d2e9d0fe033db2391ee44" integrity sha512-CAhzpzTR5toh/qOJIZUUOnWekUXuRqkkzaGAQrVcF457VhtCmr+ddZjjK50KNZ524c1XP8cISguEVNqJ6ij1sA== dependencies: "@nomicfoundation/ethereumjs-common" "3.1.2" @@ -1424,7 +1375,7 @@ "@nomicfoundation/ethereumjs-trie@5.0.5", "@nomicfoundation/ethereumjs-trie@^5.0.0": version "5.0.5" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.5.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.5.tgz#bf31c9306dcbba2007fad668e96109ddb147040c" integrity sha512-+8sNZrXkzvA1NH5F4kz5RSYl1I6iaRz7mAZRsyxOm0IVY4UaP43Ofvfp/TwOalFunurQrYB5pRO40+8FBcxFMA== dependencies: "@nomicfoundation/ethereumjs-rlp" "4.0.3" @@ -1434,7 +1385,7 @@ "@nomicfoundation/ethereumjs-tx@4.1.2", "@nomicfoundation/ethereumjs-tx@^4.0.0": version "4.1.2" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.1.2.tgz#8659fad7f9094b7eb82aa6cc3c8097cb1c42ff31" integrity sha512-emJBJZpmTdUa09cqxQqHaysbBI9Od353ZazeH7WgPb35miMgNY6mb7/3vBA98N5lUW/rgkiItjX0KZfIzihSoQ== dependencies: "@nomicfoundation/ethereumjs-common" "3.1.2" @@ -1444,7 +1395,7 @@ "@nomicfoundation/ethereumjs-util@8.0.6", "@nomicfoundation/ethereumjs-util@^8.0.0": version "8.0.6" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.6.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.6.tgz#dbce5d258b017b37aa58b3a7c330ad59d10ccf0b" integrity sha512-jOQfF44laa7xRfbfLXojdlcpkvxeHrE2Xu7tSeITsWFgoII163MzjOwFEzSNozHYieFysyoEMhCdP+NY5ikstw== dependencies: "@nomicfoundation/ethereumjs-rlp" "4.0.3" @@ -1452,7 +1403,7 @@ "@nomicfoundation/ethereumjs-vm@^6.0.0": version "6.4.2" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.4.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.4.2.tgz#af1cf62e6c0054bc2b7febc8556d032433d1b18c" integrity sha512-PRTyxZMP6kx+OdAzBhuH1LD2Yw+hrSpaytftvaK//thDy2OI07S0nrTdbrdk7b8ZVPAc9H9oTwFBl3/wJ3w15g== dependencies: "@nomicfoundation/ethereumjs-block" "4.2.2" @@ -1473,9 +1424,9 @@ rustbn.js "~0.2.0" "@nomicfoundation/hardhat-verify@^2.0.12": - version "2.0.12" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.12.tgz#480819a245a2db0b127e473c62079f7b4f16daa8" - integrity sha512-Lg3Nu7DCXASQRVI/YysjuAX2z8jwOCbS0w5tz2HalWGSTZThqA0v9N0v0psHbKNqzPJa8bNOeapIVSziyJTnAg== + version "2.0.13" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.13.tgz#41691adc32e01dc5cf6b725615f64958fba2100b" + integrity sha512-i57GX1sC0kYGyRVnbQrjjyBTpWTKgrvKC+jH8CMKV6gHp959Upb8lKaZ58WRHIU0espkulTxLnacYeUDirwJ2g== dependencies: "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" @@ -1487,51 +1438,44 @@ table "^6.8.0" undici "^5.14.0" -"@nomicfoundation/slang@^0.18.3": - version "0.18.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/slang/-/slang-0.18.3.tgz#976b6c3820081cebf050afbea434038aac9313cc" - integrity sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ== - dependencies: - "@bytecodealliance/preview2-shim" "0.17.0" - "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2": version "0.1.2" - resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz#3a9c3b20d51360b20affb8f753e756d553d49557" integrity sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw== "@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2": version "0.1.2" - resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz#74dcfabeb4ca373d95bd0d13692f44fcef133c28" integrity sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw== "@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2": version "0.1.2" - resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz#4af5849a89e5a8f511acc04f28eb5d4460ba2b6a" integrity sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA== "@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2": version "0.1.2" - resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz#54036808a9a327b2ff84446c130a6687ee702a8e" integrity sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA== "@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2": version "0.1.2" - resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz#466cda0d6e43691986c944b909fc6dbb8cfc594e" integrity sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g== "@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2": version "0.1.2" - resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz#2b35826987a6e94444140ac92310baa088ee7f94" integrity sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg== "@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2": version "0.1.2" - resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz#e6363d13b8709ca66f330562337dbc01ce8bbbd9" integrity sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA== "@nomicfoundation/solidity-analyzer@^0.1.0": version "0.1.2" - resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz#8bcea7d300157bf3a770a851d9f5c5e2db34ac55" integrity sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA== optionalDependencies: "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.2" @@ -1547,40 +1491,14 @@ resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== -"@openzeppelin/hardhat-upgrades@1.22.1": - version "1.22.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.22.1.tgz#93e2b3f870c57b00a1ae8a330a2cdd9c2d634eb8" - integrity sha512-MdoitCTLl4zwMU8MeE/bCj+7JMWBEvd38XqJkw36PkJrXlbv6FedDVCPoumMAhpmtymm0nTwTYYklYG+L6WiiQ== - dependencies: - "@openzeppelin/upgrades-core" "^1.20.0" - chalk "^4.1.0" - debug "^4.1.1" - proper-lockfile "^4.1.1" - -"@openzeppelin/upgrades-core@^1.20.0": - version "1.42.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.42.1.tgz#a2784e8d9c09f4a79b7e5cbb11933062ad709835" - integrity sha512-8qnz2XfQrco8R8u9NjV+KiSLrVn7DnWFd+3BuhTUjhVy0bzCSu2SMKCVpZLtXbxf4f2dpz8jYPQYRa6s23PhLA== - dependencies: - "@nomicfoundation/slang" "^0.18.3" - cbor "^10.0.0" - chalk "^4.1.0" - compare-versions "^6.0.0" - debug "^4.1.1" - ethereumjs-util "^7.0.3" - minimatch "^9.0.5" - minimist "^1.2.7" - proper-lockfile "^4.1.1" - solidity-ast "^0.4.51" - "@scure/base@~1.1.0": version "1.1.9" - resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== "@scure/bip32@1.1.5": version "1.1.5" - resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== dependencies: "@noble/hashes" "~1.2.0" @@ -1589,7 +1507,7 @@ "@scure/bip39@1.1.1": version "1.1.1" - resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== dependencies: "@noble/hashes" "~1.2.0" @@ -1597,7 +1515,7 @@ "@sentry/core@5.30.0": version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== dependencies: "@sentry/hub" "5.30.0" @@ -1608,7 +1526,7 @@ "@sentry/hub@5.30.0": version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== dependencies: "@sentry/types" "5.30.0" @@ -1617,7 +1535,7 @@ "@sentry/minimal@5.30.0": version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== dependencies: "@sentry/hub" "5.30.0" @@ -1626,7 +1544,7 @@ "@sentry/node@^5.18.1": version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== dependencies: "@sentry/core" "5.30.0" @@ -1641,7 +1559,7 @@ "@sentry/tracing@5.30.0": version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== dependencies: "@sentry/hub" "5.30.0" @@ -1652,544 +1570,551 @@ "@sentry/types@5.30.0": version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== "@sentry/utils@5.30.0": version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== dependencies: "@sentry/types" "5.30.0" tslib "^1.9.3" -"@smithy/abort-controller@^3.1.5": - version "3.1.5" - resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.5.tgz" - integrity sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg== +"@smithy/abort-controller@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.0.1.tgz#7c5e73690c4105ad264c2896bd1ea822450c3819" + integrity sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g== dependencies: - "@smithy/types" "^3.5.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/chunked-blob-reader-native@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz" - integrity sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg== +"@smithy/chunked-blob-reader-native@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz#33cbba6deb8a3c516f98444f65061784f7cd7f8c" + integrity sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig== dependencies: - "@smithy/util-base64" "^3.0.0" + "@smithy/util-base64" "^4.0.0" tslib "^2.6.2" -"@smithy/chunked-blob-reader@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz" - integrity sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA== +"@smithy/chunked-blob-reader@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz#3f6ea5ff4e2b2eacf74cefd737aa0ba869b2e0f6" + integrity sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw== dependencies: tslib "^2.6.2" -"@smithy/config-resolver@^3.0.9": - version "3.0.9" - resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.9.tgz" - integrity sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg== +"@smithy/config-resolver@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.0.1.tgz#3d6c78bbc51adf99c9819bb3f0ea197fe03ad363" + integrity sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ== dependencies: - "@smithy/node-config-provider" "^3.1.8" - "@smithy/types" "^3.5.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.7" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" tslib "^2.6.2" -"@smithy/core@^2.4.8": - version "2.4.8" - resolved "https://registry.npmjs.org/@smithy/core/-/core-2.4.8.tgz" - integrity sha512-x4qWk7p/a4dcf7Vxb2MODIf4OIcqNbK182WxRvZ/3oKPrf/6Fdic5sSElhO1UtXpWKBazWfqg0ZEK9xN1DsuHA== - dependencies: - "@smithy/middleware-endpoint" "^3.1.4" - "@smithy/middleware-retry" "^3.0.23" - "@smithy/middleware-serde" "^3.0.7" - "@smithy/protocol-http" "^4.1.4" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-middleware" "^3.0.7" - "@smithy/util-utf8" "^3.0.0" +"@smithy/core@^3.1.4", "@smithy/core@^3.1.5": + version "3.1.5" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.1.5.tgz#cc260229e45964d8354a3737bf3dedb56e373616" + integrity sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA== + dependencies: + "@smithy/middleware-serde" "^4.0.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-stream" "^4.1.2" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/credential-provider-imds@^3.2.4": - version "3.2.4" - resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.4.tgz" - integrity sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w== +"@smithy/credential-provider-imds@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.1.tgz#807110739982acd1588a4847b61e6edf196d004e" + integrity sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg== dependencies: - "@smithy/node-config-provider" "^3.1.8" - "@smithy/property-provider" "^3.1.7" - "@smithy/types" "^3.5.0" - "@smithy/url-parser" "^3.0.7" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" tslib "^2.6.2" -"@smithy/eventstream-codec@^3.1.6": - version "3.1.6" - resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.6.tgz" - integrity sha512-SBiOYPBH+5wOyPS7lfI150ePfGLhnp/eTu5RnV9xvhGvRiKfnl6HzRK9wehBph+il8FxS9KTeadx7Rcmf1GLPQ== +"@smithy/eventstream-codec@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.0.1.tgz#8e0beae84013eb3b497dd189470a44bac4411bae" + integrity sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A== dependencies: "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^3.5.0" - "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/types" "^4.1.0" + "@smithy/util-hex-encoding" "^4.0.0" tslib "^2.6.2" -"@smithy/eventstream-serde-browser@^3.0.10": - version "3.0.10" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.10.tgz" - integrity sha512-1i9aMY6Pl/SmA6NjvidxnfBLHMPzhKu2BP148pEt5VwhMdmXn36PE2kWKGa9Hj8b0XGtCTRucpCncylevCtI7g== +"@smithy/eventstream-serde-browser@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.1.tgz#cdbbb18b9371da363eff312d78a10f6bad82df28" + integrity sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA== dependencies: - "@smithy/eventstream-serde-universal" "^3.0.9" - "@smithy/types" "^3.5.0" + "@smithy/eventstream-serde-universal" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/eventstream-serde-config-resolver@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.7.tgz" - integrity sha512-eVzhGQBPEqXXYHvIUku0jMTxd4gDvenRzUQPTmKVWdRvp9JUCKrbAXGQRYiGxUYq9+cqQckRm0wq3kTWnNtDhw== +"@smithy/eventstream-serde-config-resolver@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.0.1.tgz#3662587f507ad7fac5bd4505c4ed6ed0ac49a010" + integrity sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA== dependencies: - "@smithy/types" "^3.5.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/eventstream-serde-node@^3.0.9": - version "3.0.9" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.9.tgz" - integrity sha512-JE0Guqvt0xsmfQ5y1EI342/qtJqznBv8cJqkHZV10PwC8GWGU5KNgFbQnsVCcX+xF+qIqwwfRmeWoJCjuOLmng== +"@smithy/eventstream-serde-node@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.1.tgz#3799c33e0148d2b923a66577d1dbc590865742ce" + integrity sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q== dependencies: - "@smithy/eventstream-serde-universal" "^3.0.9" - "@smithy/types" "^3.5.0" + "@smithy/eventstream-serde-universal" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/eventstream-serde-universal@^3.0.9": - version "3.0.9" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.9.tgz" - integrity sha512-bydfgSisfepCufw9kCEnWRxqxJFzX/o8ysXWv+W9F2FIyiaEwZ/D8bBKINbh4ONz3i05QJ1xE7A5OKYvgJsXaw== +"@smithy/eventstream-serde-universal@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.1.tgz#ddb2ab9f62b8ab60f50acd5f7c8b3ac9d27468e2" + integrity sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA== dependencies: - "@smithy/eventstream-codec" "^3.1.6" - "@smithy/types" "^3.5.0" + "@smithy/eventstream-codec" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/fetch-http-handler@^3.2.9": - version "3.2.9" - resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz" - integrity sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A== +"@smithy/fetch-http-handler@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.1.tgz#8463393442ca6a1644204849e42c386066f0df79" + integrity sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA== dependencies: - "@smithy/protocol-http" "^4.1.4" - "@smithy/querystring-builder" "^3.0.7" - "@smithy/types" "^3.5.0" - "@smithy/util-base64" "^3.0.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/querystring-builder" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-base64" "^4.0.0" tslib "^2.6.2" -"@smithy/hash-blob-browser@^3.1.6": - version "3.1.6" - resolved "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.6.tgz" - integrity sha512-BKNcMIaeZ9lB67sgo88iCF4YB35KT8X2dNJ8DqrtZNTgN6tUDYBKThzfGtos/mnZkGkW91AYHisESHmSiYQmKw== +"@smithy/hash-blob-browser@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.1.tgz#cda18d5828e8724d97441ea9cc4fd16d0db9da39" + integrity sha512-rkFIrQOKZGS6i1D3gKJ8skJ0RlXqDvb1IyAphksaFOMzkn3v3I1eJ8m7OkLj0jf1McP63rcCEoLlkAn/HjcTRw== dependencies: - "@smithy/chunked-blob-reader" "^3.0.0" - "@smithy/chunked-blob-reader-native" "^3.0.0" - "@smithy/types" "^3.5.0" + "@smithy/chunked-blob-reader" "^5.0.0" + "@smithy/chunked-blob-reader-native" "^4.0.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/hash-node@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.7.tgz" - integrity sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw== +"@smithy/hash-node@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.0.1.tgz#ce78fc11b848a4f47c2e1e7a07fb6b982d2f130c" + integrity sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w== dependencies: - "@smithy/types" "^3.5.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" + "@smithy/types" "^4.1.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/hash-stream-node@^3.1.6": - version "3.1.6" - resolved "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.6.tgz" - integrity sha512-sFSSt7cmCpFWZPfVx7k80Bgb1K2VJ27VmMxH8X+dDhp7Wv8IBgID4K2VK5ehMJROF8hQgcj4WywnkHIwX/xlwQ== +"@smithy/hash-stream-node@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-4.0.1.tgz#06126859a3cb1a11e50b61c5a097a4d9a5af2ac1" + integrity sha512-U1rAE1fxmReCIr6D2o/4ROqAQX+GffZpyMt3d7njtGDr2pUNmAKRWa49gsNVhCh2vVAuf3wXzWwNr2YN8PAXIw== dependencies: - "@smithy/types" "^3.5.0" - "@smithy/util-utf8" "^3.0.0" + "@smithy/types" "^4.1.0" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/invalid-dependency@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.7.tgz" - integrity sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA== +"@smithy/invalid-dependency@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.0.1.tgz#704d1acb6fac105558c17d53f6d55da6b0d6b6fc" + integrity sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ== dependencies: - "@smithy/types" "^3.5.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" "@smithy/is-array-buffer@^2.2.0": version "2.2.0" - resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== dependencies: tslib "^2.6.2" -"@smithy/is-array-buffer@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz" - integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ== +"@smithy/is-array-buffer@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz#55a939029321fec462bcc574890075cd63e94206" + integrity sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw== dependencies: tslib "^2.6.2" -"@smithy/md5-js@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.7.tgz" - integrity sha512-+wco9IN9uOW4tNGkZIqTR6IXyfO7Z8A+IOq82QCRn/f/xcmt7H1fXwmQVbfDSvbeFwfNnhv7s+u0G9PzPG6o2w== +"@smithy/md5-js@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-4.0.1.tgz#d7622e94dc38ecf290876fcef04369217ada8f07" + integrity sha512-HLZ647L27APi6zXkZlzSFZIjpo8po45YiyjMGJZM3gyDY8n7dPGdmxIIljLm4gPt/7rRvutLTTkYJpZVfG5r+A== dependencies: - "@smithy/types" "^3.5.0" - "@smithy/util-utf8" "^3.0.0" + "@smithy/types" "^4.1.0" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/middleware-content-length@^3.0.9": - version "3.0.9" - resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.9.tgz" - integrity sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA== +"@smithy/middleware-content-length@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.0.1.tgz#378bc94ae623f45e412fb4f164b5bb90b9de2ba3" + integrity sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ== dependencies: - "@smithy/protocol-http" "^4.1.4" - "@smithy/types" "^3.5.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/middleware-endpoint@^3.1.4": - version "3.1.4" - resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.4.tgz" - integrity sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ== - dependencies: - "@smithy/middleware-serde" "^3.0.7" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/shared-ini-file-loader" "^3.1.8" - "@smithy/types" "^3.5.0" - "@smithy/url-parser" "^3.0.7" - "@smithy/util-middleware" "^3.0.7" +"@smithy/middleware-endpoint@^4.0.5", "@smithy/middleware-endpoint@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.6.tgz#7ead08fcfda92ee470786a7f458e9b59048407eb" + integrity sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg== + dependencies: + "@smithy/core" "^3.1.5" + "@smithy/middleware-serde" "^4.0.2" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-middleware" "^4.0.1" tslib "^2.6.2" -"@smithy/middleware-retry@^3.0.23": - version "3.0.23" - resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.23.tgz" - integrity sha512-x9PbGXxkcXIpm6L26qRSCC+eaYcHwybRmqU8LO/WM2RRlW0g8lz6FIiKbKgGvHuoK3dLZRiQVSQJveiCzwnA5A== - dependencies: - "@smithy/node-config-provider" "^3.1.8" - "@smithy/protocol-http" "^4.1.4" - "@smithy/service-error-classification" "^3.0.7" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/util-middleware" "^3.0.7" - "@smithy/util-retry" "^3.0.7" +"@smithy/middleware-retry@^4.0.6": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.0.7.tgz#8bb2014842a6144f230967db502f5fe6adcd6529" + integrity sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ== + dependencies: + "@smithy/node-config-provider" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/service-error-classification" "^4.0.1" + "@smithy/smithy-client" "^4.1.6" + "@smithy/types" "^4.1.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" tslib "^2.6.2" uuid "^9.0.1" -"@smithy/middleware-serde@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.7.tgz" - integrity sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g== +"@smithy/middleware-serde@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.0.2.tgz#f792d72f6ad8fa6b172e3f19c6fe1932a856a56d" + integrity sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ== dependencies: - "@smithy/types" "^3.5.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/middleware-stack@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.7.tgz" - integrity sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA== +"@smithy/middleware-stack@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.0.1.tgz#c157653f9df07f7c26e32f49994d368e4e071d22" + integrity sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA== dependencies: - "@smithy/types" "^3.5.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/node-config-provider@^3.1.8": - version "3.1.8" - resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.8.tgz" - integrity sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q== +"@smithy/node-config-provider@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.0.1.tgz#4e84fe665c0774d5f4ebb75144994fc6ebedf86e" + integrity sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ== dependencies: - "@smithy/property-provider" "^3.1.7" - "@smithy/shared-ini-file-loader" "^3.1.8" - "@smithy/types" "^3.5.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/node-http-handler@^3.2.4": - version "3.2.4" - resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.4.tgz" - integrity sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ== +"@smithy/node-http-handler@^4.0.2", "@smithy/node-http-handler@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.0.3.tgz#363e1d453168b4e37e8dd456d0a368a4e413bc98" + integrity sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA== dependencies: - "@smithy/abort-controller" "^3.1.5" - "@smithy/protocol-http" "^4.1.4" - "@smithy/querystring-builder" "^3.0.7" - "@smithy/types" "^3.5.0" + "@smithy/abort-controller" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/querystring-builder" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/property-provider@^3.1.7": - version "3.1.7" - resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.7.tgz" - integrity sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw== +"@smithy/property-provider@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.0.1.tgz#8d35d5997af2a17cf15c5e921201ef6c5e3fc870" + integrity sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ== dependencies: - "@smithy/types" "^3.5.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/protocol-http@^4.1.4": - version "4.1.4" - resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.4.tgz" - integrity sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ== +"@smithy/protocol-http@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.0.1.tgz#37c248117b29c057a9adfad4eb1d822a67079ff1" + integrity sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ== dependencies: - "@smithy/types" "^3.5.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/querystring-builder@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.7.tgz" - integrity sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw== +"@smithy/querystring-builder@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.0.1.tgz#37e1e05d0d33c6f694088abc3e04eafb65cb6976" + integrity sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg== dependencies: - "@smithy/types" "^3.5.0" - "@smithy/util-uri-escape" "^3.0.0" + "@smithy/types" "^4.1.0" + "@smithy/util-uri-escape" "^4.0.0" tslib "^2.6.2" -"@smithy/querystring-parser@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.7.tgz" - integrity sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA== +"@smithy/querystring-parser@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.0.1.tgz#312dc62b146f8bb8a67558d82d4722bb9211af42" + integrity sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw== dependencies: - "@smithy/types" "^3.5.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/service-error-classification@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.7.tgz" - integrity sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA== +"@smithy/service-error-classification@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz#84e78579af46c7b79c900b6d6cc822c9465f3259" + integrity sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA== dependencies: - "@smithy/types" "^3.5.0" + "@smithy/types" "^4.1.0" -"@smithy/shared-ini-file-loader@^3.1.8": - version "3.1.8" - resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.8.tgz" - integrity sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw== +"@smithy/shared-ini-file-loader@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.1.tgz#d35c21c29454ca4e58914a4afdde68d3b2def1ee" + integrity sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw== dependencies: - "@smithy/types" "^3.5.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/signature-v4@^4.2.0": - version "4.2.0" - resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.0.tgz" - integrity sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.1.4" - "@smithy/types" "^3.5.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.7" - "@smithy/util-uri-escape" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" +"@smithy/signature-v4@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.0.1.tgz#f93401b176150286ba246681031b0503ec359270" + integrity sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA== + dependencies: + "@smithy/is-array-buffer" "^4.0.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-uri-escape" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/smithy-client@^3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.0.tgz" - integrity sha512-nOfJ1nVQsxiP6srKt43r2My0Gp5PLWCW2ASqUioxIiGmu6d32v4Nekidiv5qOmmtzIrmaD+ADX5SKHUuhReeBQ== - dependencies: - "@smithy/middleware-endpoint" "^3.1.4" - "@smithy/middleware-stack" "^3.0.7" - "@smithy/protocol-http" "^4.1.4" - "@smithy/types" "^3.5.0" - "@smithy/util-stream" "^3.1.9" +"@smithy/smithy-client@^4.1.5", "@smithy/smithy-client@^4.1.6": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.1.6.tgz#2183c922d086d33252012232be891f29a008d932" + integrity sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw== + dependencies: + "@smithy/core" "^3.1.5" + "@smithy/middleware-endpoint" "^4.0.6" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-stream" "^4.1.2" tslib "^2.6.2" -"@smithy/types@^3.5.0": - version "3.5.0" - resolved "https://registry.npmjs.org/@smithy/types/-/types-3.5.0.tgz" - integrity sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q== +"@smithy/types@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.1.0.tgz#19de0b6087bccdd4182a334eb5d3d2629699370f" + integrity sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw== dependencies: tslib "^2.6.2" -"@smithy/url-parser@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.7.tgz" - integrity sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA== +"@smithy/url-parser@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.0.1.tgz#b47743f785f5b8d81324878cbb1b5f834bf8d85a" + integrity sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g== dependencies: - "@smithy/querystring-parser" "^3.0.7" - "@smithy/types" "^3.5.0" + "@smithy/querystring-parser" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/util-base64@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz" - integrity sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ== +"@smithy/util-base64@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.0.0.tgz#8345f1b837e5f636e5f8470c4d1706ae0c6d0358" + integrity sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg== dependencies: - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/util-body-length-browser@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz" - integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ== +"@smithy/util-body-length-browser@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz#965d19109a4b1e5fe7a43f813522cce718036ded" + integrity sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA== dependencies: tslib "^2.6.2" -"@smithy/util-body-length-node@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz" - integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA== +"@smithy/util-body-length-node@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz#3db245f6844a9b1e218e30c93305bfe2ffa473b3" + integrity sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg== dependencies: tslib "^2.6.2" "@smithy/util-buffer-from@^2.2.0": version "2.2.0" - resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== dependencies: "@smithy/is-array-buffer" "^2.2.0" tslib "^2.6.2" -"@smithy/util-buffer-from@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz" - integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA== +"@smithy/util-buffer-from@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz#b23b7deb4f3923e84ef50c8b2c5863d0dbf6c0b9" + integrity sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug== dependencies: - "@smithy/is-array-buffer" "^3.0.0" + "@smithy/is-array-buffer" "^4.0.0" tslib "^2.6.2" -"@smithy/util-config-provider@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz" - integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ== +"@smithy/util-config-provider@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz#e0c7c8124c7fba0b696f78f0bd0ccb060997d45e" + integrity sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w== dependencies: tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^3.0.23": - version "3.0.23" - resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.23.tgz" - integrity sha512-Y07qslyRtXDP/C5aWKqxTPBl4YxplEELG3xRrz2dnAQ6Lq/FgNrcKWmV561nNaZmFH+EzeGOX3ZRMbU8p1T6Nw== +"@smithy/util-defaults-mode-browser@^4.0.6": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.7.tgz#54595ab3da6765bfb388e8e8b594276e0f485710" + integrity sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q== dependencies: - "@smithy/property-provider" "^3.1.7" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" + "@smithy/property-provider" "^4.0.1" + "@smithy/smithy-client" "^4.1.6" + "@smithy/types" "^4.1.0" bowser "^2.11.0" tslib "^2.6.2" -"@smithy/util-defaults-mode-node@^3.0.23": - version "3.0.23" - resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.23.tgz" - integrity sha512-9Y4WH7f0vnDGuHUa4lGX9e2p+sMwODibsceSV6rfkZOvMC+BY3StB2LdO1NHafpsyHJLpwAgChxQ38tFyd6vkg== - dependencies: - "@smithy/config-resolver" "^3.0.9" - "@smithy/credential-provider-imds" "^3.2.4" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/property-provider" "^3.1.7" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" +"@smithy/util-defaults-mode-node@^4.0.6": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.7.tgz#0dea136de9096a36d84416f6af5843d866621491" + integrity sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ== + dependencies: + "@smithy/config-resolver" "^4.0.1" + "@smithy/credential-provider-imds" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/smithy-client" "^4.1.6" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/util-endpoints@^2.1.3": - version "2.1.3" - resolved "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.3.tgz" - integrity sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw== +"@smithy/util-endpoints@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.0.1.tgz#44ccbf1721447966f69496c9003b87daa8f61975" + integrity sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA== dependencies: - "@smithy/node-config-provider" "^3.1.8" - "@smithy/types" "^3.5.0" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/util-hex-encoding@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz" - integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== +"@smithy/util-hex-encoding@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz#dd449a6452cffb37c5b1807ec2525bb4be551e8d" + integrity sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw== dependencies: tslib "^2.6.2" -"@smithy/util-middleware@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.7.tgz" - integrity sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA== +"@smithy/util-middleware@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.0.1.tgz#58d363dcd661219298c89fa176a28e98ccc4bf43" + integrity sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA== dependencies: - "@smithy/types" "^3.5.0" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/util-retry@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.7.tgz" - integrity sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug== +"@smithy/util-retry@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.0.1.tgz#fb5f26492383dcb9a09cc4aee23a10f839cd0769" + integrity sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw== dependencies: - "@smithy/service-error-classification" "^3.0.7" - "@smithy/types" "^3.5.0" + "@smithy/service-error-classification" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/util-stream@^3.1.9": - version "3.1.9" - resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.9.tgz" - integrity sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ== - dependencies: - "@smithy/fetch-http-handler" "^3.2.9" - "@smithy/node-http-handler" "^3.2.4" - "@smithy/types" "^3.5.0" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" +"@smithy/util-stream@^4.1.1", "@smithy/util-stream@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.1.2.tgz#b867f25bc8b016de0582810a2f4092a71c5e3244" + integrity sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw== + dependencies: + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/node-http-handler" "^4.0.3" + "@smithy/types" "^4.1.0" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/util-uri-escape@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz" - integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg== +"@smithy/util-uri-escape@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz#a96c160c76f3552458a44d8081fade519d214737" + integrity sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg== dependencies: tslib "^2.6.2" "@smithy/util-utf8@^2.0.0": version "2.3.0" - resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== dependencies: "@smithy/util-buffer-from" "^2.2.0" tslib "^2.6.2" -"@smithy/util-utf8@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz" - integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA== +"@smithy/util-utf8@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.0.0.tgz#09ca2d9965e5849e72e347c130f2a29d5c0c863c" + integrity sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow== dependencies: - "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-buffer-from" "^4.0.0" tslib "^2.6.2" -"@smithy/util-waiter@^3.1.6": - version "3.1.6" - resolved "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.6.tgz" - integrity sha512-xs/KAwWOeCklq8aMlnpk25LgxEYHKOEodfjfKclDMLcBJEVEKzDLxZxBQyztcuPJ7F54213NJS8PxoiHNMdItQ== +"@smithy/util-waiter@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.0.2.tgz#0a73a0fcd30ea7bbc3009cf98ad199f51b8eac51" + integrity sha512-piUTHyp2Axx3p/kc2CIJkYSv0BAaheBQmbACZgQSSfWUumWNW+R1lL+H9PDBxKJkvOeEX+hKYEFiwO8xagL8AQ== dependencies: - "@smithy/abort-controller" "^3.1.5" - "@smithy/types" "^3.5.0" + "@smithy/abort-controller" "^4.0.1" + "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@socket.tech/dl-core@^2.35.0": - version "2.35.0" - resolved "https://registry.yarnpkg.com/@socket.tech/dl-core/-/dl-core-2.35.0.tgz#154120d222e095db812423f3b1e748fecdeb8815" - integrity sha512-VH3I4lfCFRpF0ovaYACfd3Fhq2DAtWYcL45xUUHMNVII/EbBl3F7jB10ztWime+0l5sWXVP3o0R8bMnkrotw3w== +"@socket.tech/socket-protocol-common@1.1.31": + version "1.1.31" + resolved "https://registry.yarnpkg.com/@socket.tech/socket-protocol-common/-/socket-protocol-common-1.1.31.tgz#d95b1b6caf69a11c6bd13b18b7871c57e7d283fb" + integrity sha512-Hp1er4kRqCfeuvQFFgxooT0XBbO4nBrpL8/SYB/BNMdWfR9hk6PVE8MUnoIqTUJJTvIePKk+GOajl8MVqPD3VQ== dependencies: - axios "^1.3.6" - prompts "^2.4.2" - yargs "^17.7.1" + "@socket.tech/socket-protocol" "^1.0.15" + axios "^1.7.9" + ethers "^5.6.5" + pino "^9.6.0" + sequelize "^6.21.6" + +"@socket.tech/socket-protocol@^1.0.15": + version "1.0.15" + resolved "https://registry.yarnpkg.com/@socket.tech/socket-protocol/-/socket-protocol-1.0.15.tgz#091eaaf954a58658fa74370880a6fe54f09a7ee8" + integrity sha512-aBDYdpFkQro+NVNGUbridJQbtGSEk9ZoqMmtRPA+ti0gT0X2ZAryta0lS2TfqsL4sF2fqbmz1Vd+IuK3wb5dTg== -"@solidity-parser/parser@^0.18.0": - version "0.18.0" - resolved "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz" - integrity sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA== +"@solidity-parser/parser@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.19.0.tgz#37a8983b2725af9b14ff8c4a475fa0e98d773c3f" + integrity sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA== "@tsconfig/node10@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@typechain/ethers-v5@^10.0.0": version "10.2.1" - resolved "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz#50241e6957683281ecfa03fb5a6724d8a3ce2391" integrity sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A== dependencies: lodash "^4.17.15" @@ -2197,7 +2122,7 @@ "@typechain/hardhat@6.0.0": version "6.0.0" - resolved "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-6.0.0.tgz#5e305641de67276efbfaa8c37c78e38f22b22ef4" integrity sha512-AnhwODKHxx3+st5uc1j2NQh79Lv2OuvDQe4dKn8ZxhqYsAsTPnHTLBeI8KPZ+mfdE7v13D2QYssRTIkkGhK35A== dependencies: fs-extra "^9.1.0" @@ -2205,76 +2130,93 @@ "@types/async-eventemitter@^0.2.1": version "0.2.4" - resolved "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.4.tgz" + resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.4.tgz#2f26d81e515a30ec32aa31a53da0469948f5f00b" integrity sha512-2Bq61VD01kgLf1XkK2xPtoBcu7fgn/km5JyEX9v0BlG5VQBzA+BlF9umFk+8gR8S4+eK7MgDY2oyVZCu6ar3Jw== dependencies: "@types/events" "*" "@types/bn.js@^4.11.3": version "4.11.6" - resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== dependencies: "@types/node" "*" "@types/bn.js@^5.1.0": version "5.1.6" - resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.6.tgz#9ba818eec0c85e4d3c679518428afdf611d03203" integrity sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w== dependencies: "@types/node" "*" +"@types/debug@^4.1.8": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + "@types/events@*": version "3.0.3" - resolved "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.3.tgz#a8ef894305af28d1fc6d2dfdfc98e899591ea529" integrity sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g== "@types/lru-cache@^5.1.0": version "5.1.1" - resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== +"@types/ms@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== + "@types/node@*": - version "22.7.5" - resolved "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz" - integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + version "22.13.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.5.tgz#23add1d71acddab2c6a4d31db89c0f98d330b511" + integrity sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg== dependencies: - undici-types "~6.19.2" + undici-types "~6.20.0" "@types/pbkdf2@^3.0.0": version "3.1.2" - resolved "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== dependencies: "@types/node" "*" "@types/prettier@^2.1.1": version "2.7.3" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/qs@^6.9.7": - version "6.9.16" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz" - integrity sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A== + version "6.9.18" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.18.tgz#877292caa91f7c1b213032b34626505b746624c2" + integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA== "@types/secp256k1@^4.0.1": version "4.0.6" - resolved "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== dependencies: "@types/node" "*" +"@types/validator@^13.7.17": + version "13.12.2" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.12.2.tgz#760329e756e18a4aab82fc502b51ebdfebbe49f5" + integrity sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA== + abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== dependencies: buffer "^6.0.3" @@ -2287,36 +2229,36 @@ abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-le acorn-walk@^8.1.1: version "8.3.4" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== dependencies: acorn "^8.11.0" acorn@^8.11.0, acorn@^8.4.1: - version "8.12.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== adm-zip@^0.4.16: version "0.4.16" - resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== aes-js@3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== agent-base@6: version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -2324,7 +2266,7 @@ aggregate-error@^3.0.0: ajv@^8.0.1: version "8.17.1" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: fast-deep-equal "^3.1.3" @@ -2334,38 +2276,38 @@ ajv@^8.0.1: ansi-colors@^4.1.0, ansi-colors@^4.1.1, ansi-colors@^4.1.3: version "4.1.3" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-escapes@^4.3.0: version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -2373,64 +2315,69 @@ anymatch@~3.1.2: arg@^4.1.0: version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-back@^3.0.1, array-back@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== array-back@^4.0.1, array-back@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async-eventemitter@^0.2.4: version "0.2.4" - resolved "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== dependencies: async "^2.4.0" async@^2.4.0, async@^2.6.4: version "2.6.4" - resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +atomic-sleep@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" + integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== + axios@^0.21.1: version "0.21.4" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: follow-redirects "^1.14.0" -axios@^1.3.6: - version "1.7.7" - resolved "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz" - integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== +axios@^1.7.9: + version "1.8.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.1.tgz#7c118d2146e9ebac512b7d1128771cdd738d11e3" + integrity sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -2438,66 +2385,66 @@ axios@^1.3.6: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-x@^3.0.2: version "3.0.10" - resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.10.tgz#62de58653f8762b5d6f8d9fe30fa75f7b2585a75" integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== dependencies: safe-buffer "^5.0.1" base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== basic-auth@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== dependencies: safe-buffer "5.1.2" bech32@1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== bigint-crypto-utils@^3.0.23: version "3.3.0" - resolved "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== binary-extensions@^2.0.0: version "2.3.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== blakejs@^1.1.0: version "1.2.1" - resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + version "4.12.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.1.tgz#215741fe3c9dba2d7e12c001d0cfdbae43975ba7" + integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== -bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: +bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== bowser@^2.11.0: version "2.11.0" - resolved "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -2505,26 +2452,26 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@~3.0.2: version "3.0.3" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" brorand@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browser-level@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== dependencies: abstract-level "^1.0.2" @@ -2534,12 +2481,12 @@ browser-level@^1.0.1: browser-stdout@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== browserify-aes@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" @@ -2551,14 +2498,14 @@ browserify-aes@^1.2.0: bs58@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== dependencies: base-x "^3.0.2" bs58check@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== dependencies: bs58 "^4.0.0" @@ -2567,17 +2514,17 @@ bs58check@^2.1.2: buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-xor@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== buffer@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -2585,47 +2532,45 @@ buffer@^6.0.3: bytes@3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: - es-define-property "^1.0.0" es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" + +call-bound@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" + integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== + dependencies: + call-bind-apply-helpers "^1.0.1" + get-intrinsic "^1.2.6" camelcase@^6.0.0: version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== catering@^2.1.0, catering@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== -cbor@^10.0.0: - version "10.0.3" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-10.0.3.tgz#202d79cd696f408700af51b0c9771577048a860e" - integrity sha512-72Jnj81xMsqepqdcSdf2+fflz/UDsThOHy5hj2MW5F5xzHL8Oa0KQ6I6V9CwVUPxg5pf+W9xp6W2KilaRXWWtw== - dependencies: - nofilter "^3.0.2" - cbor@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== dependencies: nofilter "^3.1.0" chalk@^2.4.2: version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -2634,7 +2579,7 @@ chalk@^2.4.2: chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -2642,7 +2587,7 @@ chalk@^4.1.0, chalk@^4.1.2: chokidar@^3.4.0, chokidar@^3.5.2, chokidar@^3.5.3: version "3.6.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" @@ -2657,20 +2602,20 @@ chokidar@^3.4.0, chokidar@^3.5.2, chokidar@^3.5.3: ci-info@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + version "1.0.6" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.6.tgz#8fe672437d01cd6c4561af5334e0cc50ff1955f7" + integrity sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + safe-buffer "^5.2.1" classic-level@^1.2.0: version "1.4.1" - resolved "https://registry.npmjs.org/classic-level/-/classic-level-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== dependencies: abstract-level "^1.0.2" @@ -2681,66 +2626,57 @@ classic-level@^1.2.0: clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cliui@^7.0.2: version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" command-exists@^1.2.8: version "1.2.9" - resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== command-line-args@^5.1.1: version "5.2.1" - resolved "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== dependencies: array-back "^3.1.0" @@ -2750,7 +2686,7 @@ command-line-args@^5.1.1: command-line-usage@^6.1.0: version "6.1.3" - resolved "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== dependencies: array-back "^4.0.2" @@ -2760,22 +2696,17 @@ command-line-usage@^6.1.0: commander@3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -compare-versions@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" - integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== - concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.4.7: version "1.6.2" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: buffer-from "^1.0.0" @@ -2785,27 +2716,27 @@ concat-stream@^1.4.7: cookie@^0.4.1: version "0.4.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== corser@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" integrity sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ== crc-32@^1.2.0: version "1.2.2" - resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" @@ -2816,7 +2747,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" - resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" @@ -2828,59 +2759,50 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-spawn@^5.0.1: version "5.1.0" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" -debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.5: - version "4.3.7" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== +debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: ms "^2.1.3" debug@^3.2.7: version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" decamelize@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== deep-extend@~0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delete-empty@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/delete-empty/-/delete-empty-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/delete-empty/-/delete-empty-3.0.0.tgz#f8040f2669f26fa7060bc2304e9859c593b685e8" integrity sha512-ZUyiwo76W+DYnKsL3Kim6M/UOavPdBJgDYWOmuQhYaZvJH0AXAHbUNyEDtRbBra8wqqr686+63/0azfEk1ebUQ== dependencies: ansi-colors "^4.1.0" @@ -2890,27 +2812,41 @@ delete-empty@^3.0.0: depd@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== diff@^4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== diff@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== dotenv@^16.0.3: - version "16.4.5" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz" - integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + version "16.4.7" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + +dottie@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.6.tgz#34564ebfc6ec5e5772272d466424ad5b696484d4" + integrity sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA== -elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +elliptic@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== dependencies: bn.js "^4.11.9" @@ -2921,19 +2857,32 @@ elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +elliptic@6.6.1, elliptic@^6.5.2, elliptic@^6.5.7: + version "6.6.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== encode-utf8@^1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== enquirer@^2.3.0, enquirer@^2.3.6: version "2.4.1" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" @@ -2941,39 +2890,54 @@ enquirer@^2.3.0, enquirer@^2.3.6: env-paths@^2.2.0: version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + escalade@^3.1.1: version "3.2.0" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: version "0.1.3" - resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== dependencies: "@types/pbkdf2" "^3.0.0" @@ -2994,7 +2958,7 @@ ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: ethereum-cryptography@^1.0.3: version "1.2.0" - resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== dependencies: "@noble/hashes" "1.2.0" @@ -3004,7 +2968,7 @@ ethereum-cryptography@^1.0.3: ethereumjs-abi@^0.6.8: version "0.6.8" - resolved "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== dependencies: bn.js "^4.11.8" @@ -3012,7 +2976,7 @@ ethereumjs-abi@^0.6.8: ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: version "6.2.1" - resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== dependencies: "@types/bn.js" "^4.11.3" @@ -3023,20 +2987,9 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^7.0.3: - version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - ethers@5.6.6: version "5.6.6" - resolved "https://registry.npmjs.org/ethers/-/ethers-5.6.6.tgz" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.6.tgz#a37aa7e265a484a1b4d2ef91d4d89d6b43808a57" integrity sha512-2B2ZmSGvRcJpHnFMBk58mkXP50njFipUBCgLK8jUTFbomhVs501cLzyMU6+Vx8YnUDQxywC3qkZvd33xWS+2FA== dependencies: "@ethersproject/abi" "5.6.2" @@ -3070,45 +3023,45 @@ ethers@5.6.6: "@ethersproject/web" "5.6.0" "@ethersproject/wordlists" "5.6.0" -ethers@^5.5.3: - version "5.7.2" - resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" +ethers@^5.5.3, ethers@^5.6.5: + version "5.8.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.8.0.tgz#97858dc4d4c74afce83ea7562fe9493cedb4d377" + integrity sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg== + dependencies: + "@ethersproject/abi" "5.8.0" + "@ethersproject/abstract-provider" "5.8.0" + "@ethersproject/abstract-signer" "5.8.0" + "@ethersproject/address" "5.8.0" + "@ethersproject/base64" "5.8.0" + "@ethersproject/basex" "5.8.0" + "@ethersproject/bignumber" "5.8.0" + "@ethersproject/bytes" "5.8.0" + "@ethersproject/constants" "5.8.0" + "@ethersproject/contracts" "5.8.0" + "@ethersproject/hash" "5.8.0" + "@ethersproject/hdnode" "5.8.0" + "@ethersproject/json-wallets" "5.8.0" + "@ethersproject/keccak256" "5.8.0" + "@ethersproject/logger" "5.8.0" + "@ethersproject/networks" "5.8.0" + "@ethersproject/pbkdf2" "5.8.0" + "@ethersproject/properties" "5.8.0" + "@ethersproject/providers" "5.8.0" + "@ethersproject/random" "5.8.0" + "@ethersproject/rlp" "5.8.0" + "@ethersproject/sha2" "5.8.0" + "@ethersproject/signing-key" "5.8.0" + "@ethersproject/solidity" "5.8.0" + "@ethersproject/strings" "5.8.0" + "@ethersproject/transactions" "5.8.0" + "@ethersproject/units" "5.8.0" + "@ethersproject/wallet" "5.8.0" + "@ethersproject/web" "5.8.0" + "@ethersproject/wordlists" "5.8.0" ethjs-util@0.1.6, ethjs-util@^0.1.6: version "0.1.6" - resolved "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== dependencies: is-hex-prefixed "1.0.0" @@ -3116,17 +3069,17 @@ ethjs-util@0.1.6, ethjs-util@^0.1.6: event-target-shim@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== eventemitter3@^4.0.0: version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== evp_bytestokey@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" @@ -3134,45 +3087,50 @@ evp_bytestokey@^1.0.3: fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-redact@^3.1.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" + integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== + fast-uri@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz" - integrity sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row== + version "3.0.6" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== fast-xml-parser@4.4.1: version "4.4.1" - resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== dependencies: strnum "^1.0.5" fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" find-replace@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== dependencies: array-back "^3.0.1" find-up@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: locate-path "^2.0.0" find-up@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -3180,43 +3138,49 @@ find-up@^5.0.0: flat@^5.0.2: version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== fmix@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== dependencies: imul "^1.0.0" follow-redirects@^1.0.0, follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.6: version "1.15.9" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== forge-std@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/forge-std/-/forge-std-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/forge-std/-/forge-std-1.1.2.tgz#f4a0eda103538d56f9c563f3cd1fa2fd01bd9378" integrity sha512-Wfb0iAS9PcfjMKtGpWQw9mXzJxrWD62kJCUqqLcyuI0+VRtJ3j20XembjF3kS20qELYdXft1vD/SPFVWVKMFOw== form-data@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz" - integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" mime-types "^2.1.12" -fp-ts@1.19.3, fp-ts@^1.0.0: +fp-ts@1.19.3: version "1.19.3" - resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + fs-extra@^0.30.0: version "0.30.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== dependencies: graceful-fs "^4.1.2" @@ -3227,7 +3191,7 @@ fs-extra@^0.30.0: fs-extra@^10.0.0: version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" @@ -3236,7 +3200,7 @@ fs-extra@^10.0.0: fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== dependencies: graceful-fs "^4.1.2" @@ -3245,7 +3209,7 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: fs-extra@^9.1.0: version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" @@ -3255,50 +3219,63 @@ fs-extra@^9.1.0: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" es-errors "^1.3.0" + es-object-atoms "^1.1.1" function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@7.1.7: version "7.1.7" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== dependencies: fs.realpath "^1.0.0" @@ -3308,9 +3285,9 @@ glob@7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.2.0, glob@^7.1.3: +glob@7.2.0: version "7.2.0" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" @@ -3320,9 +3297,21 @@ glob@7.2.0, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" @@ -3331,21 +3320,19 @@ glob@^8.1.0: minimatch "^5.0.1" once "^1.3.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== hardhat-abi-exporter@2.10.1: version "2.10.1" - resolved "https://registry.npmjs.org/hardhat-abi-exporter/-/hardhat-abi-exporter-2.10.1.tgz" + resolved "https://registry.yarnpkg.com/hardhat-abi-exporter/-/hardhat-abi-exporter-2.10.1.tgz#b14884e233c73fe3f43360f014ad7fd6df4b6d25" integrity sha512-X8GRxUTtebMAd2k4fcPyVnCdPa6dYK4lBsrwzKP5yiSq4i+WadWPIumaLfce53TUf/o2TnLpLOduyO1ylE2NHQ== dependencies: "@ethersproject/abi" "^5.5.0" @@ -3353,12 +3340,12 @@ hardhat-abi-exporter@2.10.1: hardhat-change-network@^0.0.7: version "0.0.7" - resolved "https://registry.npmjs.org/hardhat-change-network/-/hardhat-change-network-0.0.7.tgz" + resolved "https://registry.yarnpkg.com/hardhat-change-network/-/hardhat-change-network-0.0.7.tgz#9f9b7943ff966515658b70bf5e44bc2f073af402" integrity sha512-Usp9fJan9SOJnOlVcv/jMJDchseE7bIDA5ZsBnracgVk4MiBwkvMqpmLWn5G1aDBvnUCthvS2gO3odfahgkV0Q== hardhat-deploy@0.11.20: version "0.11.20" - resolved "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.20.tgz" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.20.tgz#d95499a0d29b75f1f1d3838c9a3eb6d2d0d20f57" integrity sha512-6G2aFLW0mfZxY0ljDf8rxzEJkVh57gr3Eia5H2DeBIQNJh0dhBV2Y5LDq4E4J9K4Crq0DjpxGNTshEtAB9eWxA== dependencies: "@types/qs" "^6.9.7" @@ -3377,14 +3364,14 @@ hardhat-deploy@0.11.20: hardhat-preprocessor@0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/hardhat-preprocessor/-/hardhat-preprocessor-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/hardhat-preprocessor/-/hardhat-preprocessor-0.1.4.tgz#daa3004c3d2cca2ce1b5555c0c9b1940670fd022" integrity sha512-TeIi9y5xXf6oKa2BMqXAFQV0tAJRy9MKDElu0VrHMsEVpiUXRh47AEJqWkFpWr2lVLFweif40n1RGxGIEFOPXw== dependencies: murmur-128 "^0.2.1" hardhat@2.12.2: version "2.12.2" - resolved "https://registry.npmjs.org/hardhat/-/hardhat-2.12.2.tgz" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.12.2.tgz#6ae985007b20c1f381c6573799d66c1438c4c802" integrity sha512-f3ZhzXy1uyQv0UXnAQ8GCBOWjzv++WJNb7bnm10SsyC3dB7vlPpsMWBNhq7aoRxKrNhX9tCev81KFV3i5BTeMQ== dependencies: "@ethersproject/abi" "^5.1.2" @@ -3440,34 +3427,29 @@ hardhat@2.12.2: has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.2: +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + has-symbols "^1.0.3" hash-base@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: inherits "^2.0.4" @@ -3476,27 +3458,27 @@ hash-base@^3.0.0: hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" - resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hasown@^2.0.0: +hasown@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" he@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== hmac-drbg@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" @@ -3505,14 +3487,14 @@ hmac-drbg@^1.0.1: html-encoding-sniffer@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== dependencies: whatwg-encoding "^2.0.0" http-errors@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -3523,7 +3505,7 @@ http-errors@2.0.0: http-proxy@^1.18.1: version "1.18.1" - resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" @@ -3532,7 +3514,7 @@ http-proxy@^1.18.1: http-server@^14.1.1: version "14.1.1" - resolved "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz" + resolved "https://registry.yarnpkg.com/http-server/-/http-server-14.1.1.tgz#d60fbb37d7c2fdff0f0fbff0d0ee6670bd285e2e" integrity sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A== dependencies: basic-auth "^2.0.1" @@ -3551,7 +3533,7 @@ http-server@^14.1.1: https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -3559,41 +3541,46 @@ https-proxy-agent@^5.0.0: iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== immutable@^4.0.0-rc.12: version "4.3.7" - resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== imul@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +inflection@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.4.tgz#65aa696c4e2da6225b148d7a154c449366633a32" + integrity sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw== + inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -3601,109 +3588,109 @@ inflight@^1.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== io-ts@1.10.4: version "1.10.4" - resolved "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== dependencies: fp-ts "^1.0.0" is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-buffer@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-hex-prefixed@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-plain-obj@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== isarray@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" - resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== jsonfile@^2.1.0: version "2.4.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== optionalDependencies: graceful-fs "^4.1.6" jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -3712,7 +3699,7 @@ jsonfile@^6.0.1: keccak@^3.0.0, keccak@^3.0.2: version "3.0.4" - resolved "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== dependencies: node-addon-api "^2.0.0" @@ -3721,24 +3708,19 @@ keccak@^3.0.0, keccak@^3.0.2: klaw@^1.0.0: version "1.3.1" - resolved "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== optionalDependencies: graceful-fs "^4.1.9" -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - level-supports@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== level-transcoder@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== dependencies: buffer "^6.0.3" @@ -3746,7 +3728,7 @@ level-transcoder@^1.0.1: level@^8.0.0: version "8.0.1" - resolved "https://registry.npmjs.org/level/-/level-8.0.1.tgz" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== dependencies: abstract-level "^1.0.4" @@ -3755,7 +3737,7 @@ level@^8.0.0: locate-path@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" @@ -3763,14 +3745,14 @@ locate-path@^2.0.0: locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.camelcase@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== lodash.clonedeep@^4.5.0: @@ -3780,17 +3762,17 @@ lodash.clonedeep@^4.5.0: lodash.truncate@^4.4.2: version "4.4.2" - resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15: +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -3798,7 +3780,7 @@ log-symbols@^4.1.0: lru-cache@^4.0.1: version "4.1.5" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: pseudomap "^1.0.2" @@ -3806,34 +3788,39 @@ lru-cache@^4.0.1: lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru_map@^0.3.3: version "0.3.3" - resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== make-error@^1.1.1: version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== match-all@^1.2.6: - version "1.2.6" - resolved "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz" - integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== + version "1.2.7" + resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.7.tgz#3c03b7f7ee372ae177aac5eca08c3ad6af59633a" + integrity sha512-qSpsBKarh55r9KyXzFC3xBLRf2GlGasba2em9kbpRsSlGvdTAqjx3QD0r3FKSARiW+OE4iMHYsolM3aX9n5djw== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== mcl-wasm@^0.7.1: version "0.7.9" - resolved "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== md5.js@^1.3.4: version "1.3.5" - resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" @@ -3842,7 +3829,7 @@ md5.js@^1.3.4: memory-level@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== dependencies: abstract-level "^1.0.0" @@ -3851,85 +3838,78 @@ memory-level@^1.0.0: memorystream@^0.3.1: version "0.3.1" - resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== mime-db@1.52.0: version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12: version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@^1.6.0: version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@^3.0.4: +minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1, minimatch@^5.1.6: version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.7: +minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mkdirp@^0.5.6: version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mnemonist@^0.38.0: version "0.38.5" - resolved "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== dependencies: obliterator "^2.0.0" mocha@^10.0.0: - version "10.7.3" - resolved "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz" - integrity sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A== + version "10.8.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.8.2.tgz#8d8342d016ed411b12a429eb731b825f961afb96" + integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== dependencies: ansi-colors "^4.1.3" browser-stdout "^1.3.1" @@ -3954,17 +3934,29 @@ mocha@^10.0.0: module-error@^1.0.1, module-error@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== +moment-timezone@^0.5.43: + version "0.5.47" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.47.tgz#d4d1a21b78372d914d6d69ae285454732a429749" + integrity sha512-UbNt/JAWS0m/NJOebR0QMRHBk0hu03r5dx9GK8Cs0AS3I81yDcOc9k+DytPItgVvBP7J6Mf6U2n3BPAacAV9oA== + dependencies: + moment "^2.29.4" + +moment@^2.29.4: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + ms@^2.1.1, ms@^2.1.3: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== murmur-128@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz" + resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== dependencies: encode-utf8 "^1.0.2" @@ -3973,129 +3965,139 @@ murmur-128@^0.2.1: napi-macros@^2.2.2: version "2.2.2" - resolved "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== node-addon-api@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.8.2" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz" - integrity sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw== + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== -nofilter@^3.0.2, nofilter@^3.1.0: +nofilter@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== obliterator@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" - integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + version "2.0.5" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.5.tgz#031e0145354b0c18840336ae51d41e7d6d2c76aa" + integrity sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw== + +on-exit-leak-free@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" + integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== once@^1.3.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" opener@^1.5.1: version "1.5.2" - resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== os-shim@^0.1.2: version "0.1.3" - resolved "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz" + resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" integrity sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A== os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-limit@^1.1.0: version "1.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-map@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" p-try@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-parse@^1.0.6: version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-starts-with@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/path-starts-with/-/path-starts-with-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/path-starts-with/-/path-starts-with-2.0.1.tgz#cd8b6213c141a9f2dd86c748310acdfa6493abb1" integrity sha512-wZ3AeiRBRlNwkdUxvBANh0+esnt38DLffHDujZyRHkqkaKHTglnY2EP5UX3b8rdeiSutgO4y9NEJwXezNP5vHg== pbkdf2@^3.0.17: version "3.1.2" - resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" @@ -4104,6 +4106,11 @@ pbkdf2@^3.0.17: safe-buffer "^5.0.1" sha.js "^2.4.8" +pg-connection-string@^2.6.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.7.0.tgz#f1d3489e427c62ece022dba98d5262efcb168b37" + integrity sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA== + picocolors@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" @@ -4111,13 +4118,42 @@ picocolors@^1.1.0: picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pino-abstract-transport@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz#de241578406ac7b8a33ce0d77ae6e8a0b3b68a60" + integrity sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw== + dependencies: + split2 "^4.0.0" + +pino-std-serializers@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz#7c625038b13718dbbd84ab446bd673dc52259e3b" + integrity sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA== + +pino@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-9.6.0.tgz#6bc628159ba0cc81806d286718903b7fc6b13169" + integrity sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg== + dependencies: + atomic-sleep "^1.0.0" + fast-redact "^3.1.1" + on-exit-leak-free "^2.1.0" + pino-abstract-transport "^2.0.0" + pino-std-serializers "^7.0.0" + process-warning "^4.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.2.0" + safe-stable-stringify "^2.3.1" + sonic-boom "^4.0.1" + thread-stream "^3.0.0" + portfinder@^1.0.28: - version "1.0.32" - resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz" - integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== + version "1.0.33" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.33.tgz#03dbc51455aa8f83ad9fb86af8345e063bb51101" + integrity sha512-+2jndHT63cL5MdQOwDm9OT2dIe11zVpjV+0GGRXdtO1wpPxv260NfVqoEXtYAi/shanmm3W4+yLduIe55ektTw== dependencies: async "^2.6.4" debug "^3.2.7" @@ -4125,7 +4161,7 @@ portfinder@^1.0.28: pre-commit@^1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/pre-commit/-/pre-commit-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" integrity sha512-qokTiqxD6GjODy5ETAIgzsRgnBWWQHQH2ghy86PU7mIn/wuWeTwF3otyNQZxWBwVn8XNr8Tdzj/QfUXpH+gRZA== dependencies: cross-spawn "^5.0.1" @@ -4133,72 +4169,65 @@ pre-commit@^1.2.2: which "1.2.x" prettier-plugin-solidity@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.1.tgz#8060baf18853a9e34d2e09e47e87b4f19e15afe9" - integrity sha512-Mq8EtfacVZ/0+uDKTtHZGW3Aa7vEbX/BNx63hmVg6YTiTXSiuKP0amj0G6pGwjmLaOfymWh3QgXEZkjQbU8QRg== + version "1.4.2" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.2.tgz#d4f6173674e73a29731a8c79c45ab6f5246310df" + integrity sha512-VVD/4XlDjSzyPWWCPW8JEleFa8JNKFYac5kNlMjVXemQyQZKfpekPMhFZSePuXB6L+RixlFvWe20iacGjFYrLw== dependencies: - "@solidity-parser/parser" "^0.18.0" - semver "^7.5.4" + "@solidity-parser/parser" "^0.19.0" + semver "^7.6.3" prettier@^2.3.1: version "2.8.8" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -prompts@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -proper-lockfile@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" - integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== - dependencies: - graceful-fs "^4.2.4" - retry "^0.12.0" - signal-exit "^3.0.2" +process-warning@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-4.0.1.tgz#5c1db66007c67c756e4e09eb170cdece15da32fb" + integrity sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q== proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pseudomap@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: - version "6.13.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== dependencies: - side-channel "^1.0.6" + side-channel "^1.1.0" queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-format-unescaped@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" + integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== + randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" raw-body@^2.4.1: version "2.5.2" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" @@ -4208,7 +4237,7 @@ raw-body@^2.4.1: readable-stream@^2.2.2: version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -4221,7 +4250,7 @@ readable-stream@^2.2.2: readable-stream@^3.6.0: version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -4230,59 +4259,64 @@ readable-stream@^3.6.0: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" +real-require@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" + integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== + reduce-flatten@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.0, require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve@1.17.0: version "1.17.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== dependencies: path-parse "^1.0.6" -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== +retry-as-promised@^7.0.4: + version "7.1.1" + resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-7.1.1.tgz#3626246f04c1941ff10cebcfa3df0577fd8ab2d7" + integrity sha512-hMD7odLOt3LkTjcif8aRZqi/hybjpLNgSk5oF5FCowfCjok6LukpN2bDX7R5wDmbgBQFn7YoBxSagmtXHaJYJw== rimraf@^2.2.8, rimraf@^2.6.2: version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.2.3, rlp@^2.2.4: +rlp@^2.2.3: version "2.2.7" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== @@ -4291,97 +4325,117 @@ rlp@^2.2.3, rlp@^2.2.4: run-parallel-limit@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== dependencies: queue-microtask "^1.2.2" rustbn.js@~0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-stable-stringify@^2.3.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== scrypt-js@3.0.1, scrypt-js@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + version "4.0.4" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.4.tgz#58f0bfe1830fe777d9ca1ffc7574962a8189f8ab" + integrity sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw== dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" + elliptic "^6.5.7" + node-addon-api "^5.0.0" node-gyp-build "^4.2.0" secure-compare@3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" integrity sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw== semver@^5.5.0: version "5.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^6.3.0: version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.4: - version "7.6.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +semver@^7.5.4, semver@^7.6.3: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + +sequelize-pool@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz#210b391af4002762f823188fd6ecfc7413020768" + integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg== + +sequelize@^6.21.6: + version "6.37.5" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.5.tgz#2711ab97d0e0fe49c652368946a7312eb0f11cd7" + integrity sha512-10WA4poUb3XWnUROThqL2Apq9C2NhyV1xHPMZuybNMCucDsbbFuKg51jhmyvvAUyUqCiimwTZamc3AHhMoBr2Q== + dependencies: + "@types/debug" "^4.1.8" + "@types/validator" "^13.7.17" + debug "^4.3.4" + dottie "^2.0.6" + inflection "^1.13.4" + lodash "^4.17.21" + moment "^2.29.4" + moment-timezone "^0.5.43" + pg-connection-string "^2.6.1" + retry-as-promised "^7.0.4" + semver "^7.5.4" + sequelize-pool "^7.1.0" + toposort-class "^1.0.1" + uuid "^8.3.2" + validator "^13.9.0" + wkx "^0.5.0" serialize-javascript@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - setimmediate@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" - resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" @@ -4389,39 +4443,59 @@ sha.js@^2.4.0, sha.js@^2.4.8: shebang-command@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== -side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: - call-bind "^1.0.7" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" + object-inspect "^1.13.3" -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" slice-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" @@ -4430,7 +4504,7 @@ slice-ansi@^4.0.0: solc@0.7.3: version "0.7.3" - resolved "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== dependencies: command-exists "^1.2.8" @@ -4443,14 +4517,16 @@ solc@0.7.3: semver "^5.5.0" tmp "0.0.33" -solidity-ast@^0.4.51: - version "0.4.59" - resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.59.tgz#290a2815aef70a61092591ab3e991da080ae5931" - integrity sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g== +sonic-boom@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.2.0.tgz#e59a525f831210fa4ef1896428338641ac1c124d" + integrity sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww== + dependencies: + atomic-sleep "^1.0.0" source-map-support@^0.5.13: version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -4458,37 +4534,42 @@ source-map-support@^0.5.13: source-map@^0.6.0: version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== spawn-sync@^1.0.15: version "1.0.15" - resolved "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz" + resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" integrity sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw== dependencies: concat-stream "^1.4.7" os-shim "^0.1.2" +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + stacktrace-parser@^0.1.10: - version "0.1.10" - resolved "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" - integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + version "0.1.11" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz#c7c08f9b29ef566b9a6f7b255d7db572f66fabc4" + integrity sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg== dependencies: type-fest "^0.7.1" statuses@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== string-format@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -4497,66 +4578,66 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-hex-prefix@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== dependencies: is-hex-prefixed "1.0.0" strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" + integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.1.1: version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" table-layout@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== dependencies: array-back "^4.0.1" @@ -4565,9 +4646,9 @@ table-layout@^1.0.2: wordwrapjs "^4.0.0" table@^6.8.0: - version "6.8.2" - resolved "https://registry.npmjs.org/table/-/table-6.8.2.tgz" - integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== + version "6.9.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" + integrity sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -4575,28 +4656,40 @@ table@^6.8.0: string-width "^4.2.3" strip-ansi "^6.0.1" +thread-stream@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1" + integrity sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A== + dependencies: + real-require "^0.2.0" + tmp@0.0.33: version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +toposort-class@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" + integrity sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg== + ts-command-line-args@^2.2.0: version "2.5.1" - resolved "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== dependencies: chalk "^4.1.0" @@ -4606,12 +4699,12 @@ ts-command-line-args@^2.2.0: ts-essentials@^7.0.1: version "7.0.3" - resolved "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== ts-node@^10.7.0: version "10.9.2" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -4630,42 +4723,42 @@ ts-node@^10.7.0: tslib@^1.9.3: version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.6.2: - version "2.7.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz" - integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tsort@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== tweetnacl-util@^0.15.1: version "0.15.1" - resolved "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== tweetnacl@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.7.1: version "0.7.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== typechain@^8.0.0: version "8.3.2" - resolved "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.2.tgz#1090dd8d9c57b6ef2aed3640a516bdbf01b00d73" integrity sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q== dependencies: "@types/prettier" "^2.1.1" @@ -4681,100 +4774,119 @@ typechain@^8.0.0: typedarray@^0.0.6: version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^4.6.4: version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typical@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== typical@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== undici@^5.14.0, undici@^5.4.0: - version "5.28.4" - resolved "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz" - integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== + version "5.28.5" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.5.tgz#b2b94b6bf8f1d919bc5a6f31f2c01deb02e54d4b" + integrity sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA== dependencies: "@fastify/busboy" "^2.0.0" union@~0.5.0: version "0.5.0" - resolved "https://registry.npmjs.org/union/-/union-0.5.0.tgz" + resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== dependencies: qs "^6.4.0" universalify@^0.1.0: version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unpipe@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== url-join@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== uuid@^8.3.2: version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== uuid@^9.0.1: version "9.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +validator@^13.9.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.12.0.tgz#7d78e76ba85504da3fee4fd1922b385914d4b35f" + integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg== + whatwg-encoding@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== dependencies: iconv-lite "0.6.3" -which@1.2.x, which@^1.2.9: +which@1.2.x: version "1.2.14" - resolved "https://registry.npmjs.org/which/-/which-1.2.14.tgz" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" integrity sha512-16uPglFkRPzgiUXYMi1Jf8Z5EzN1iB4V0ZtMXcHZnwsBtQhhHeCqoWw7tsUY42hJGNDWtUsVLTjakIa5BgAxCw== dependencies: isexe "^2.0.0" +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wkx@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.5.0.tgz#c6c37019acf40e517cc6b94657a25a3d4aa33e8c" + integrity sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg== + dependencies: + "@types/node" "*" + wordwrapjs@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== dependencies: reduce-flatten "^2.0.0" @@ -4782,12 +4894,12 @@ wordwrapjs@^4.0.0: workerpool@^6.5.1: version "6.5.1" - resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -4796,42 +4908,47 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@7.4.6, ws@^7.4.6: +ws@7.4.6: version "7.4.6" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + +ws@^7.4.6: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + y18n@^5.0.5: version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - yargs-unparser@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: camelcase "^6.0.0" @@ -4841,7 +4958,7 @@ yargs-unparser@^2.0.0: yargs@^16.2.0: version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -4852,30 +4969,17 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.7.1: - version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yn@3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== zksync-web3@^0.8.1: version "0.8.1" - resolved "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.8.1.tgz" + resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.8.1.tgz#db289d8f6caf61f4d5ddc471fa3448d93208dc14" integrity sha512-1A4aHPQ3MyuGjpv5X/8pVEN+MdZqMjfVmiweQSRjOlklXYu65wT9BGEOtCmMs5d3gIvLp4ssfTeuR5OCKOD2kw==