dequanto 0.0.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.circleci/config.yml +51 -0
- package/.github/workflows/npm-publish.yml +32 -0
- package/.vscode/settings.json +42 -11
- package/actions/chains.act.ts +136 -0
- package/actions/contracts.act.ts +178 -0
- package/actions/gen.act.ts +38 -38
- package/actions/logs.act.ts +7 -0
- package/actions/rpc.act.ts +918 -0
- package/actions/safe.act.ts +7 -0
- package/actions/tokens.act.ts +41 -12
- package/configs/defi.yml +28 -0
- package/configs/dequanto.yml +377 -51
- package/data/cex/eth.csv +356 -356
- package/data/chainlink/feeds.json +3674 -0
- package/data/chains/chains.json +972 -0
- package/data/evm/eventHashes.json +19314 -0
- package/data/evm/events.json +19314 -0
- package/data/evm/functionHashes.json +121138 -0
- package/data/evm/functions.json +121140 -0
- package/data/rpc/coregeth.json +1786 -0
- package/data/rpc/eth.json +5873 -0
- package/data/rpc/flashbots.json +662 -0
- package/data/rpc/metamask.json +3673 -0
- package/data/rpc/overrides.json +104 -0
- package/data/tokens/1inch.json +11107 -4733
- package/data/tokens/arbitrum.json +1 -1
- package/data/tokens/coingecko.json +118642 -0
- package/data/tokens/sushi.json +6067 -48632
- package/exports/core.lib.ts +103 -0
- package/hardhat.config.js +41 -1
- package/importmap.json +27 -0
- package/package-bundler.json +181 -0
- package/package.json +121 -49
- package/readme.md +22 -4
- package/src/ChainAccountService.ts +216 -0
- package/src/abi/$abiCoder.ts +62 -0
- package/src/abi/$rlp.ts +126 -0
- package/src/abi/Logger.ts +24 -0
- package/src/abi/_version.ts +1 -0
- package/src/abi/abi-coder-packed.ts +90 -0
- package/src/abi/abi-coder.ts +163 -0
- package/src/abi/coders/abstract-coder.ts +455 -0
- package/src/abi/coders/address.ts +39 -0
- package/src/abi/coders/anonymous.ts +29 -0
- package/src/abi/coders/array.ts +190 -0
- package/src/abi/coders/boolean.ts +25 -0
- package/src/abi/coders/bytes.ts +41 -0
- package/src/abi/coders/fixed-bytes.ts +36 -0
- package/src/abi/coders/null.ts +28 -0
- package/src/abi/coders/number.ts +59 -0
- package/src/abi/coders/string.ts +23 -0
- package/src/abi/coders/tuple.ts +61 -0
- package/src/abi/fragments.ts +1632 -0
- package/src/blocks/BlockDateResolver.ts +159 -149
- package/src/bridges/BridgeFactory.ts +16 -16
- package/src/bridges/hop/HopAddresses.ts +1 -1
- package/src/bridges/hop/HopBridge.ts +437 -430
- package/src/bridges/hop/contracts/gen.act.ts +51 -50
- package/src/bridges/models/IBridge.ts +44 -43
- package/src/chains/PlatformFactory.ts +46 -45
- package/src/chains/arbitrum/ArbTokenProvider.ts +39 -39
- package/src/chains/arbitrum/ArbWeb3Client.ts +21 -39
- package/src/chains/arbitrum/Arbiscan.ts +21 -24
- package/src/chains/arbitrum/TokensServiceArbitrum.ts +19 -0
- package/src/chains/boba/BobaWeb3Client.ts +21 -49
- package/src/chains/boba/Bobascan.ts +22 -25
- package/src/chains/xdai/XDaiWeb3Client.ts +56 -82
- package/src/chains/xdai/XDaiscan.ts +21 -24
- package/src/class/PackedRanges.ts +213 -0
- package/src/class/PromiseEvent.ts +21 -0
- package/src/class/SubjectKind.ts +5 -0
- package/src/class/SubjectStream.ts +137 -0
- package/src/class/Subscription.ts +7 -0
- package/src/clients/BscWeb3Client.ts +21 -38
- package/src/clients/ClientEventsStream.ts +95 -33
- package/src/clients/ClientPool.ts +616 -207
- package/src/clients/ClientPoolStats.ts +70 -64
- package/src/clients/EthWeb3Client.ts +23 -36
- package/src/clients/EvmWeb3Client.ts +26 -0
- package/src/clients/PolyWeb3Client.ts +42 -91
- package/src/clients/Web3BatchRequests.ts +119 -0
- package/src/clients/Web3Client.ts +700 -134
- package/src/clients/Web3ClientFactory.ts +31 -1
- package/src/clients/compatibility/Web3.ts +186 -0
- package/src/clients/debug/ClientDebugMethods.ts +100 -0
- package/src/clients/handlers/RateLimitGuard.ts +353 -0
- package/src/clients/interfaces/IWeb3Client.ts +63 -14
- package/src/clients/interfaces/IWeb3ClientStatus.ts +21 -23
- package/src/clients/interfaces/IWeb3EndpointOptions.ts +16 -9
- package/src/clients/model/ClientStatus.ts +6 -5
- package/src/clients/model/PromiEventWrap.ts +62 -61
- package/src/clients/model/SubscriptionWrap.ts +53 -53
- package/src/clients/utils/$web3Abi.ts +29 -0
- package/src/clients/utils/ClientEndpoints.ts +32 -26
- package/src/clients/utils/ClientErrorUtil.ts +29 -26
- package/src/clients/utils/TxFactory.ts +5 -17
- package/src/config/AConfigBase.ts +35 -0
- package/src/config/Config.ts +45 -0
- package/src/config/ConfigProvider.ts +4 -0
- package/src/config/ConfigProviderBrowser.ts +21 -0
- package/src/config/ConfigProviderIsoPlatform.ts +90 -0
- package/src/config/dequanto.d.ts +5 -0
- package/src/config/interface/IConfigData.ts +63 -0
- package/src/contracts/BscContract.ts +28 -28
- package/src/contracts/Contract.ts +120 -126
- package/src/contracts/ContractAbiProvider.ts +69 -0
- package/src/contracts/ContractBase.ts +496 -60
- package/src/contracts/ContractClassFactory.ts +114 -0
- package/src/contracts/ContractCreationResolver.ts +85 -0
- package/src/contracts/ContractProvider.ts +55 -55
- package/src/contracts/ContractReader.ts +339 -87
- package/src/contracts/ContractStorageReaderBase.ts +29 -0
- package/src/contracts/ContractStream.ts +34 -18
- package/src/contracts/ContractWriter.ts +139 -97
- package/src/contracts/EthContract.ts +29 -29
- package/src/contracts/TxContract.ts +39 -43
- package/src/contracts/deploy/ContractDeployer.ts +155 -0
- package/src/contracts/deploy/ContractDeployment.ts +53 -0
- package/src/contracts/deploy/ContractSource.ts +3 -0
- package/src/contracts/deploy/Deployments.ts +672 -0
- package/src/contracts/deploy/proxy/$proxyDeploy.ts +302 -0
- package/src/contracts/deploy/proxy/ProxyDeployment.ts +401 -0
- package/src/contracts/deploy/storage/DeploymentsStorage.ts +368 -0
- package/src/contracts/utils/AbiDeserializer.ts +111 -98
- package/src/contracts/utils/ContractBaseUtils.ts +105 -0
- package/src/contracts/utils/ConvertUtils.ts +16 -16
- package/src/contracts/utils/InputDataUtils.ts +32 -93
- package/src/contracts/utils/TypeUtils.ts +21 -21
- package/src/contracts/wrappers/FnRequestWrapper.ts +15 -0
- package/src/contracts/wrappers/FnSignedWrapper.ts +42 -0
- package/src/env/BigIntSerializer.ts +19 -18
- package/src/erc4337/Erc4337Factory.ts +54 -0
- package/src/erc4337/Erc4337Service.ts +219 -0
- package/src/erc4337/Erc4337TxWriter.ts +169 -0
- package/src/erc4337/models/Erc4337Abi.ts +7 -0
- package/src/erc4337/models/IErc4337Info.ts +8 -0
- package/src/erc4337/models/UserOperation.ts +18 -0
- package/src/erc4337/utils/$erc4337.ts +31 -0
- package/src/evm/EvmBytecode.ts +298 -0
- package/src/evm/OpcodesInfo.ts +211 -0
- package/src/evm/OpcodesWalker.ts +156 -0
- package/src/evm/Stack.ts +58 -0
- package/src/evm/functions/$opcodes.ts +122 -0
- package/src/evm/functions/opcodes.spec.ts +47 -0
- package/src/evm/interfaces/IJumps.ts +3 -0
- package/src/evm/interfaces/IMemory.ts +3 -0
- package/src/evm/interfaces/IOpcode.ts +11 -0
- package/src/evm/interfaces/IStorage.ts +3 -0
- package/src/evm/opcodes/add.ts +49 -0
- package/src/evm/opcodes/addmod.ts +19 -0
- package/src/evm/opcodes/address.ts +22 -0
- package/src/evm/opcodes/and.ts +58 -0
- package/src/evm/opcodes/balance.ts +25 -0
- package/src/evm/opcodes/blockhash.ts +25 -0
- package/src/evm/opcodes/byte.ts +34 -0
- package/src/evm/opcodes/call.ts +69 -0
- package/src/evm/opcodes/callcode.ts +69 -0
- package/src/evm/opcodes/calldatacopy.ts +36 -0
- package/src/evm/opcodes/calldataload.ts +40 -0
- package/src/evm/opcodes/calldatasize.ts +21 -0
- package/src/evm/opcodes/caller.ts +22 -0
- package/src/evm/opcodes/callvalue.ts +21 -0
- package/src/evm/opcodes/codecopy.ts +37 -0
- package/src/evm/opcodes/codesize.ts +21 -0
- package/src/evm/opcodes/coinbase.ts +21 -0
- package/src/evm/opcodes/create.ts +42 -0
- package/src/evm/opcodes/create2.ts +41 -0
- package/src/evm/opcodes/delegatecall.ts +63 -0
- package/src/evm/opcodes/difficulty.ts +21 -0
- package/src/evm/opcodes/div.ts +35 -0
- package/src/evm/opcodes/dup.ts +7 -0
- package/src/evm/opcodes/eq.ts +92 -0
- package/src/evm/opcodes/exp.ts +34 -0
- package/src/evm/opcodes/extcodecopy.ts +42 -0
- package/src/evm/opcodes/extcodehash.ts +25 -0
- package/src/evm/opcodes/extcodesize.ts +25 -0
- package/src/evm/opcodes/gas.ts +21 -0
- package/src/evm/opcodes/gaslimit.ts +21 -0
- package/src/evm/opcodes/gasprice.ts +21 -0
- package/src/evm/opcodes/gt.ts +39 -0
- package/src/evm/opcodes/invalid.ts +24 -0
- package/src/evm/opcodes/iszero.ts +48 -0
- package/src/evm/opcodes/jump.ts +66 -0
- package/src/evm/opcodes/jumpdest.ts +6 -0
- package/src/evm/opcodes/jumpi.ts +367 -0
- package/src/evm/opcodes/log.ts +89 -0
- package/src/evm/opcodes/lt.ts +39 -0
- package/src/evm/opcodes/mload.ts +30 -0
- package/src/evm/opcodes/mod.ts +33 -0
- package/src/evm/opcodes/msize.ts +21 -0
- package/src/evm/opcodes/mstore.ts +33 -0
- package/src/evm/opcodes/mul.ts +38 -0
- package/src/evm/opcodes/mulmod.ts +19 -0
- package/src/evm/opcodes/not.ts +30 -0
- package/src/evm/opcodes/number.ts +21 -0
- package/src/evm/opcodes/or.ts +33 -0
- package/src/evm/opcodes/origin.ts +21 -0
- package/src/evm/opcodes/pc.ts +7 -0
- package/src/evm/opcodes/pop.ts +6 -0
- package/src/evm/opcodes/push.ts +8 -0
- package/src/evm/opcodes/return.ts +78 -0
- package/src/evm/opcodes/returndatacopy.ts +37 -0
- package/src/evm/opcodes/returndatasize.ts +21 -0
- package/src/evm/opcodes/revert.ts +64 -0
- package/src/evm/opcodes/sar.ts +33 -0
- package/src/evm/opcodes/selfdestruct.ts +26 -0
- package/src/evm/opcodes/sha3.ts +63 -0
- package/src/evm/opcodes/shl.ts +42 -0
- package/src/evm/opcodes/shr.ts +33 -0
- package/src/evm/opcodes/signextend.ts +25 -0
- package/src/evm/opcodes/sload.ts +190 -0
- package/src/evm/opcodes/sstore.ts +259 -0
- package/src/evm/opcodes/staticcall.ts +63 -0
- package/src/evm/opcodes/stop.ts +22 -0
- package/src/evm/opcodes/sub.ts +33 -0
- package/src/evm/opcodes/swap.ts +7 -0
- package/src/evm/opcodes/timestamp.ts +21 -0
- package/src/evm/opcodes/xor.ts +33 -0
- package/src/evm/utils/$bytecode.ts +76 -0
- package/src/evm/utils/BigNumber.ts +9 -0
- package/src/evm/utils/hex.ts +37 -0
- package/src/evm/utils/opcodes.ts +213 -0
- package/src/evm/utils/stringify.ts +12 -0
- package/src/evm/utils/stringifyEvents.ts +37 -0
- package/src/evm/utils/stringifyFunctions.ts +41 -0
- package/src/evm/utils/stringifyInstructions.ts +38 -0
- package/src/evm/utils/stringifyMappings.ts +65 -0
- package/src/evm/utils/stringifyStructs.ts +16 -0
- package/src/evm/utils/stringifyVariables.ts +32 -0
- package/src/explorer/BlockChainExplorerFactory.ts +644 -0
- package/src/explorer/BlockChainExplorerProvider.ts +57 -0
- package/src/explorer/BlockChainExplorerStorage.ts +124 -0
- package/src/explorer/BlockNumberCache.ts +47 -0
- package/src/explorer/Bscscan.ts +24 -0
- package/src/explorer/ContractVerifier.ts +289 -0
- package/src/explorer/ContractVerifierHtml.ts +207 -0
- package/src/explorer/Etherscan.ts +37 -0
- package/src/explorer/Evmscan.ts +8 -0
- package/src/explorer/IAbiProvider.ts +5 -0
- package/src/explorer/IBlockChainExplorer.ts +69 -0
- package/src/explorer/Polyscan.ts +24 -0
- package/src/explorer/verifiers/FsHtmlVerifier.ts +195 -0
- package/src/explorer/verifiers/IVerifier.ts +14 -0
- package/src/flashbots/FlashbotWeb3Client.ts +24 -0
- package/src/flashbots/FlashbotsProvider.ts +163 -0
- package/src/gen/Ast.ts +12 -12
- package/src/gen/ContractStorageReaderTemplate.ts +18 -0
- package/src/gen/ContractTemplate.ts +134 -36
- package/src/gen/Generator.ts +414 -227
- package/src/gen/GeneratorFromAbi.ts +451 -128
- package/src/gen/GeneratorStorageReader.ts +114 -0
- package/src/gen/utils/$gen.ts +11 -0
- package/src/gen/utils/Str.ts +40 -0
- package/src/handlers/TokenHandler.ts +77 -78
- package/src/hardhat/HardhatProvider.ts +469 -0
- package/src/hardhat/HardhatWeb3Client.ts +66 -0
- package/src/indexer/BlocksTxIndexer.ts +116 -69
- package/src/indexer/EventsIndexer.ts +379 -0
- package/src/indexer/PendingTxIndexer.ts +123 -124
- package/src/indexer/handlers/BlocksWalker.ts +420 -390
- package/src/indexer/handlers/TxQueueLoader.ts +144 -143
- package/src/indexer/storage/FsEventsIndexerStore.ts +182 -0
- package/src/indexer/storage/FsEventsMetaStore.ts +65 -0
- package/src/indexer/storage/FsEventsStoreUtils.ts +43 -0
- package/src/indexer/storage/interfaces.ts +25 -0
- package/src/json/JsonArrayMultiStore.ts +219 -0
- package/src/json/JsonArrayStore.ts +193 -310
- package/src/json/JsonObjectStore.ts +78 -239
- package/src/json/JsonStoreFs.ts +187 -0
- package/src/loggers/ILogger.ts +6 -3
- package/src/loggers/LoggerService.ts +83 -39
- package/src/loggers/TxLoggerService.ts +144 -146
- package/src/models/IContractDetails.ts +10 -8
- package/src/models/IToken.ts +35 -11
- package/src/models/ITokenGlob.ts +14 -14
- package/src/models/ITransactionDetails.ts +10 -11
- package/src/models/TAccount.ts +53 -0
- package/src/models/TAddress.ts +2 -1
- package/src/models/TBufferLike.ts +2 -2
- package/src/models/TError.ts +4 -0
- package/src/models/TEth.ts +223 -0
- package/src/models/THex.ts +1 -1
- package/src/models/TPlatform.ts +16 -1
- package/src/models/TResult.ts +6 -6
- package/src/models/TTx.ts +42 -0
- package/src/ns/NameService.ts +54 -21
- package/src/ns/providers/ANsProvider.ts +110 -0
- package/src/ns/providers/EnsProvider.ts +109 -45
- package/src/ns/providers/INsProvider.ts +31 -6
- package/src/ns/providers/SpaceIdProvider.ts +17 -0
- package/src/ns/providers/UDProvider.ts +77 -49
- package/src/ns/utils/$ns.ts +27 -15
- package/src/prebuilt/1inch/OneInchRouterContract/OneInchRouterContract.ts +313 -0
- package/src/prebuilt/amm/AmmFactoryV2Contract/AmmFactoryV2Contract.ts +298 -0
- package/src/prebuilt/amm/AmmMasterChefV2Contract/AmmMasterChefV2Contract.ts +642 -0
- package/src/prebuilt/amm/AmmPairV2Contract/AmmPairV2Contract.ts +700 -0
- package/src/prebuilt/amm/AmmPairV3Contract/AmmPairV3Contract.ts +686 -0
- package/src/prebuilt/amm/AmmRouterV2Contract/AmmRouterV2Contract.ts +404 -0
- package/src/prebuilt/amm/AmmVaultV2Contract/AmmVaultV2Contract.ts +818 -0
- package/src/prebuilt/ens/EnsBaseRegistrar/EnsBaseRegistrar.ts +711 -0
- package/src/prebuilt/ens/EnsDnsRegistrar/EnsDnsRegistrar.ts +333 -0
- package/src/prebuilt/ens/EnsEthRegistrarController/EnsEthRegistrarController.ts +477 -0
- package/src/prebuilt/ens/EnsNameWrapper/EnsNameWrapper.ts +1003 -0
- package/src/prebuilt/ens/EnsPublicResolver/EnsPublicResolver.ts +873 -0
- package/src/prebuilt/ens/EnsRegistry/EnsRegistry.ts +415 -0
- package/src/prebuilt/ens/EnsReverseRegistrar/EnsReverseRegistrar.ts +407 -0
- package/src/prebuilt/erc4337/EntryPoint/EntryPoint.ts +640 -0
- package/src/prebuilt/erc4337/SimpleAccount/SimpleAccount.ts +501 -0
- package/src/prebuilt/erc4337/SimpleAccountFactory/SimpleAccountFactory.ts +184 -0
- package/src/prebuilt/openzeppelin/AccessControl.json +206 -0
- package/src/prebuilt/openzeppelin/AccessControl.ts +257 -0
- package/src/prebuilt/openzeppelin/AccessControlCrossChain.json +219 -0
- package/src/prebuilt/openzeppelin/AccessControlCrossChain.ts +266 -0
- package/src/prebuilt/openzeppelin/AccessControlDefaultAdminRules.json +391 -0
- package/src/prebuilt/openzeppelin/AccessControlDefaultAdminRules.ts +450 -0
- package/src/prebuilt/openzeppelin/AccessControlEnumerable.json +249 -0
- package/src/prebuilt/openzeppelin/AccessControlEnumerable.ts +275 -0
- package/src/prebuilt/openzeppelin/ConditionalEscrow.json +156 -0
- package/src/prebuilt/openzeppelin/ConditionalEscrow.ts +259 -0
- package/src/prebuilt/openzeppelin/CrossChainEnabledPolygonChild.json +30 -0
- package/src/prebuilt/openzeppelin/CrossChainEnabledPolygonChild.ts +150 -0
- package/src/prebuilt/openzeppelin/EIP712.json +67 -0
- package/src/prebuilt/openzeppelin/EIP712.ts +170 -0
- package/src/prebuilt/openzeppelin/ERC1155.json +325 -0
- package/src/prebuilt/openzeppelin/ERC1155.ts +291 -0
- package/src/prebuilt/openzeppelin/ERC1155Burnable.json +360 -0
- package/src/prebuilt/openzeppelin/ERC1155Burnable.ts +309 -0
- package/src/prebuilt/openzeppelin/ERC1155Holder.json +99 -0
- package/src/prebuilt/openzeppelin/ERC1155Holder.ts +163 -0
- package/src/prebuilt/openzeppelin/ERC1155Pausable.json +353 -0
- package/src/prebuilt/openzeppelin/ERC1155Pausable.ts +338 -0
- package/src/prebuilt/openzeppelin/ERC1155PresetMinterPauser.json +734 -0
- package/src/prebuilt/openzeppelin/ERC1155PresetMinterPauser.ts +567 -0
- package/src/prebuilt/openzeppelin/ERC1155Receiver.json +99 -0
- package/src/prebuilt/openzeppelin/ERC1155Receiver.ts +163 -0
- package/src/prebuilt/openzeppelin/ERC1155Supply.json +352 -0
- package/src/prebuilt/openzeppelin/ERC1155Supply.ts +305 -0
- package/src/prebuilt/openzeppelin/ERC1155URIStorage.json +314 -0
- package/src/prebuilt/openzeppelin/ERC1155URIStorage.ts +287 -0
- package/src/prebuilt/openzeppelin/ERC165.json +21 -0
- package/src/prebuilt/openzeppelin/ERC165.ts +143 -0
- package/src/prebuilt/openzeppelin/ERC165Storage.json +21 -0
- package/src/prebuilt/openzeppelin/ERC165Storage.ts +143 -0
- package/src/prebuilt/openzeppelin/ERC1820Implementer.json +26 -0
- package/src/prebuilt/openzeppelin/ERC1820Implementer.ts +143 -0
- package/src/prebuilt/openzeppelin/ERC20.json +288 -0
- package/src/prebuilt/openzeppelin/ERC20.ts +280 -0
- package/src/prebuilt/openzeppelin/ERC20Burnable.json +303 -0
- package/src/prebuilt/openzeppelin/ERC20Burnable.ts +298 -0
- package/src/prebuilt/openzeppelin/ERC20Capped.json +285 -0
- package/src/prebuilt/openzeppelin/ERC20Capped.ts +285 -0
- package/src/prebuilt/openzeppelin/ERC20FlashMint.json +349 -0
- package/src/prebuilt/openzeppelin/ERC20FlashMint.ts +305 -0
- package/src/prebuilt/openzeppelin/ERC20Pausable.json +311 -0
- package/src/prebuilt/openzeppelin/ERC20Pausable.ts +327 -0
- package/src/prebuilt/openzeppelin/ERC20Permit.json +412 -0
- package/src/prebuilt/openzeppelin/ERC20Permit.ts +348 -0
- package/src/prebuilt/openzeppelin/ERC20PresetFixedSupply.json +329 -0
- package/src/prebuilt/openzeppelin/ERC20PresetFixedSupply.ts +302 -0
- package/src/prebuilt/openzeppelin/ERC20PresetMinterPauser.json +663 -0
- package/src/prebuilt/openzeppelin/ERC20PresetMinterPauser.ts +554 -0
- package/src/prebuilt/openzeppelin/ERC20Snapshot.json +328 -0
- package/src/prebuilt/openzeppelin/ERC20Snapshot.ts +315 -0
- package/src/prebuilt/openzeppelin/ERC20Votes.json +675 -0
- package/src/prebuilt/openzeppelin/ERC20Votes.ts +484 -0
- package/src/prebuilt/openzeppelin/ERC20VotesComp.json +718 -0
- package/src/prebuilt/openzeppelin/ERC20VotesComp.ts +502 -0
- package/src/prebuilt/openzeppelin/ERC20Wrapper.json +333 -0
- package/src/prebuilt/openzeppelin/ERC20Wrapper.ts +307 -0
- package/src/prebuilt/openzeppelin/ERC2771Context.json +21 -0
- package/src/prebuilt/openzeppelin/ERC2771Context.ts +143 -0
- package/src/prebuilt/openzeppelin/ERC2981.json +50 -0
- package/src/prebuilt/openzeppelin/ERC2981.ts +152 -0
- package/src/prebuilt/openzeppelin/ERC4626.json +662 -0
- package/src/prebuilt/openzeppelin/ERC4626.ts +470 -0
- package/src/prebuilt/openzeppelin/ERC721.json +348 -0
- package/src/prebuilt/openzeppelin/ERC721.ts +314 -0
- package/src/prebuilt/openzeppelin/ERC721Burnable.json +345 -0
- package/src/prebuilt/openzeppelin/ERC721Burnable.ts +321 -0
- package/src/prebuilt/openzeppelin/ERC721Consecutive.json +363 -0
- package/src/prebuilt/openzeppelin/ERC721Consecutive.ts +331 -0
- package/src/prebuilt/openzeppelin/ERC721Enumerable.json +388 -0
- package/src/prebuilt/openzeppelin/ERC721Enumerable.ts +337 -0
- package/src/prebuilt/openzeppelin/ERC721Holder.json +36 -0
- package/src/prebuilt/openzeppelin/ERC721Holder.ts +143 -0
- package/src/prebuilt/openzeppelin/ERC721Pausable.json +371 -0
- package/src/prebuilt/openzeppelin/ERC721Pausable.ts +361 -0
- package/src/prebuilt/openzeppelin/ERC721PresetMinterPauserAutoId.json +742 -0
- package/src/prebuilt/openzeppelin/ERC721PresetMinterPauserAutoId.ts +595 -0
- package/src/prebuilt/openzeppelin/ERC721Royalty.json +361 -0
- package/src/prebuilt/openzeppelin/ERC721Royalty.ts +319 -0
- package/src/prebuilt/openzeppelin/ERC721URIStorage.json +364 -0
- package/src/prebuilt/openzeppelin/ERC721URIStorage.ts +352 -0
- package/src/prebuilt/openzeppelin/ERC721Votes.json +637 -0
- package/src/prebuilt/openzeppelin/ERC721Votes.ts +489 -0
- package/src/prebuilt/openzeppelin/ERC721Wrapper.json +427 -0
- package/src/prebuilt/openzeppelin/ERC721Wrapper.ts +352 -0
- package/src/prebuilt/openzeppelin/ERC777.json +578 -0
- package/src/prebuilt/openzeppelin/ERC777.ts +456 -0
- package/src/prebuilt/openzeppelin/ERC777PresetFixedSupply.json +588 -0
- package/src/prebuilt/openzeppelin/ERC777PresetFixedSupply.ts +456 -0
- package/src/prebuilt/openzeppelin/Escrow.json +137 -0
- package/src/prebuilt/openzeppelin/Escrow.ts +250 -0
- package/src/prebuilt/openzeppelin/Governor.json +1010 -0
- package/src/prebuilt/openzeppelin/Governor.ts +590 -0
- package/src/prebuilt/openzeppelin/GovernorCompatibilityBravo.json +1325 -0
- package/src/prebuilt/openzeppelin/GovernorCompatibilityBravo.ts +700 -0
- package/src/prebuilt/openzeppelin/GovernorCountingSimple.json +1039 -0
- package/src/prebuilt/openzeppelin/GovernorCountingSimple.ts +599 -0
- package/src/prebuilt/openzeppelin/GovernorPreventLateQuorum.json +1074 -0
- package/src/prebuilt/openzeppelin/GovernorPreventLateQuorum.ts +652 -0
- package/src/prebuilt/openzeppelin/GovernorProposalThreshold.json +1010 -0
- package/src/prebuilt/openzeppelin/GovernorProposalThreshold.ts +590 -0
- package/src/prebuilt/openzeppelin/GovernorSettings.json +1106 -0
- package/src/prebuilt/openzeppelin/GovernorSettings.ts +686 -0
- package/src/prebuilt/openzeppelin/GovernorTimelockCompound.json +1134 -0
- package/src/prebuilt/openzeppelin/GovernorTimelockCompound.ts +683 -0
- package/src/prebuilt/openzeppelin/GovernorTimelockControl.json +1127 -0
- package/src/prebuilt/openzeppelin/GovernorTimelockControl.ts +672 -0
- package/src/prebuilt/openzeppelin/GovernorVotes.json +1023 -0
- package/src/prebuilt/openzeppelin/GovernorVotes.ts +599 -0
- package/src/prebuilt/openzeppelin/GovernorVotesComp.json +1023 -0
- package/src/prebuilt/openzeppelin/GovernorVotesComp.ts +599 -0
- package/src/prebuilt/openzeppelin/GovernorVotesQuorumFraction.json +1100 -0
- package/src/prebuilt/openzeppelin/GovernorVotesQuorumFraction.ts +653 -0
- package/src/prebuilt/openzeppelin/IAMB.json +327 -0
- package/src/prebuilt/openzeppelin/IAMB.ts +330 -0
- package/src/prebuilt/openzeppelin/IAccessControl.json +174 -0
- package/src/prebuilt/openzeppelin/IAccessControl.ts +239 -0
- package/src/prebuilt/openzeppelin/IAccessControlDefaultAdminRules.json +346 -0
- package/src/prebuilt/openzeppelin/IAccessControlDefaultAdminRules.ts +423 -0
- package/src/prebuilt/openzeppelin/IAccessControlEnumerable.json +217 -0
- package/src/prebuilt/openzeppelin/IAccessControlEnumerable.ts +257 -0
- package/src/prebuilt/openzeppelin/IArbSys.json +355 -0
- package/src/prebuilt/openzeppelin/IArbSys.ts +300 -0
- package/src/prebuilt/openzeppelin/IBeacon.json +15 -0
- package/src/prebuilt/openzeppelin/IBeacon.ts +143 -0
- package/src/prebuilt/openzeppelin/IBridge.json +529 -0
- package/src/prebuilt/openzeppelin/IBridge.ts +430 -0
- package/src/prebuilt/openzeppelin/ICompoundTimelock.json +415 -0
- package/src/prebuilt/openzeppelin/ICompoundTimelock.ts +380 -0
- package/src/prebuilt/openzeppelin/ICrossDomainMessenger.json +101 -0
- package/src/prebuilt/openzeppelin/ICrossDomainMessenger.ts +208 -0
- package/src/prebuilt/openzeppelin/IERC1155.json +295 -0
- package/src/prebuilt/openzeppelin/IERC1155.ts +278 -0
- package/src/prebuilt/openzeppelin/IERC1155MetadataURI.json +314 -0
- package/src/prebuilt/openzeppelin/IERC1155MetadataURI.ts +287 -0
- package/src/prebuilt/openzeppelin/IERC1155Receiver.json +99 -0
- package/src/prebuilt/openzeppelin/IERC1155Receiver.ts +163 -0
- package/src/prebuilt/openzeppelin/IERC1271.json +26 -0
- package/src/prebuilt/openzeppelin/IERC1271.ts +143 -0
- package/src/prebuilt/openzeppelin/IERC1363.json +373 -0
- package/src/prebuilt/openzeppelin/IERC1363.ts +287 -0
- package/src/prebuilt/openzeppelin/IERC1363Receiver.json +36 -0
- package/src/prebuilt/openzeppelin/IERC1363Receiver.ts +143 -0
- package/src/prebuilt/openzeppelin/IERC1363Spender.json +31 -0
- package/src/prebuilt/openzeppelin/IERC1363Spender.ts +143 -0
- package/src/prebuilt/openzeppelin/IERC165.json +21 -0
- package/src/prebuilt/openzeppelin/IERC165.ts +143 -0
- package/src/prebuilt/openzeppelin/IERC1820Implementer.json +26 -0
- package/src/prebuilt/openzeppelin/IERC1820Implementer.ts +143 -0
- package/src/prebuilt/openzeppelin/IERC1820Registry.json +215 -0
- package/src/prebuilt/openzeppelin/IERC1820Registry.ts +245 -0
- package/src/prebuilt/openzeppelin/IERC1822Proxiable.json +15 -0
- package/src/prebuilt/openzeppelin/IERC1822Proxiable.ts +143 -0
- package/src/prebuilt/openzeppelin/IERC20.json +185 -0
- package/src/prebuilt/openzeppelin/IERC20.ts +227 -0
- package/src/prebuilt/openzeppelin/IERC20Metadata.json +224 -0
- package/src/prebuilt/openzeppelin/IERC20Metadata.ts +254 -0
- package/src/prebuilt/openzeppelin/IERC20Permit.json +77 -0
- package/src/prebuilt/openzeppelin/IERC20Permit.ts +161 -0
- package/src/prebuilt/openzeppelin/IERC2612.json +77 -0
- package/src/prebuilt/openzeppelin/IERC2612.ts +161 -0
- package/src/prebuilt/openzeppelin/IERC2981.json +50 -0
- package/src/prebuilt/openzeppelin/IERC2981.ts +152 -0
- package/src/prebuilt/openzeppelin/IERC3156FlashBorrower.json +41 -0
- package/src/prebuilt/openzeppelin/IERC3156FlashBorrower.ts +143 -0
- package/src/prebuilt/openzeppelin/IERC3156FlashLender.json +79 -0
- package/src/prebuilt/openzeppelin/IERC3156FlashLender.ts +161 -0
- package/src/prebuilt/openzeppelin/IERC4626.json +614 -0
- package/src/prebuilt/openzeppelin/IERC4626.ts +448 -0
- package/src/prebuilt/openzeppelin/IERC4906.json +319 -0
- package/src/prebuilt/openzeppelin/IERC4906.ts +325 -0
- package/src/prebuilt/openzeppelin/IERC5267.json +51 -0
- package/src/prebuilt/openzeppelin/IERC5267.ts +157 -0
- package/src/prebuilt/openzeppelin/IERC5313.json +15 -0
- package/src/prebuilt/openzeppelin/IERC5313.ts +143 -0
- package/src/prebuilt/openzeppelin/IERC5805.json +210 -0
- package/src/prebuilt/openzeppelin/IERC5805.ts +243 -0
- package/src/prebuilt/openzeppelin/IERC6372.json +28 -0
- package/src/prebuilt/openzeppelin/IERC6372.ts +152 -0
- package/src/prebuilt/openzeppelin/IERC721.json +287 -0
- package/src/prebuilt/openzeppelin/IERC721.ts +283 -0
- package/src/prebuilt/openzeppelin/IERC721Enumerable.json +343 -0
- package/src/prebuilt/openzeppelin/IERC721Enumerable.ts +310 -0
- package/src/prebuilt/openzeppelin/IERC721Metadata.json +332 -0
- package/src/prebuilt/openzeppelin/IERC721Metadata.ts +310 -0
- package/src/prebuilt/openzeppelin/IERC721Receiver.json +36 -0
- package/src/prebuilt/openzeppelin/IERC721Receiver.ts +143 -0
- package/src/prebuilt/openzeppelin/IERC777.json +393 -0
- package/src/prebuilt/openzeppelin/IERC777.ts +359 -0
- package/src/prebuilt/openzeppelin/IERC777Recipient.json +40 -0
- package/src/prebuilt/openzeppelin/IERC777Recipient.ts +143 -0
- package/src/prebuilt/openzeppelin/IERC777Sender.json +40 -0
- package/src/prebuilt/openzeppelin/IERC777Sender.ts +143 -0
- package/src/prebuilt/openzeppelin/IFxMessageProcessor.json +25 -0
- package/src/prebuilt/openzeppelin/IFxMessageProcessor.ts +143 -0
- package/src/prebuilt/openzeppelin/IGovernor.json +762 -0
- package/src/prebuilt/openzeppelin/IGovernor.ts +471 -0
- package/src/prebuilt/openzeppelin/IGovernorCompatibilityBravo.json +992 -0
- package/src/prebuilt/openzeppelin/IGovernorCompatibilityBravo.ts +536 -0
- package/src/prebuilt/openzeppelin/IGovernorTimelock.json +847 -0
- package/src/prebuilt/openzeppelin/IGovernorTimelock.ts +521 -0
- package/src/prebuilt/openzeppelin/IInbox.json +444 -0
- package/src/prebuilt/openzeppelin/IInbox.ts +337 -0
- package/src/prebuilt/openzeppelin/IOutbox.json +410 -0
- package/src/prebuilt/openzeppelin/IOutbox.ts +317 -0
- package/src/prebuilt/openzeppelin/ITransparentUpgradeableProxy.json +117 -0
- package/src/prebuilt/openzeppelin/ITransparentUpgradeableProxy.ts +239 -0
- package/src/prebuilt/openzeppelin/IVotes.json +184 -0
- package/src/prebuilt/openzeppelin/IVotes.ts +225 -0
- package/src/prebuilt/openzeppelin/LibArbitrumL2.json +15 -0
- package/src/prebuilt/openzeppelin/LibArbitrumL2.ts +143 -0
- package/src/prebuilt/openzeppelin/MinimalForwarder.json +208 -0
- package/src/prebuilt/openzeppelin/MinimalForwarder.ts +201 -0
- package/src/prebuilt/openzeppelin/Multicall.json +21 -0
- package/src/prebuilt/openzeppelin/Multicall.ts +143 -0
- package/src/prebuilt/openzeppelin/Ownable.json +54 -0
- package/src/prebuilt/openzeppelin/Ownable.ts +177 -0
- package/src/prebuilt/openzeppelin/Ownable2Step.json +93 -0
- package/src/prebuilt/openzeppelin/Ownable2Step.ts +218 -0
- package/src/prebuilt/openzeppelin/Pausable.json +41 -0
- package/src/prebuilt/openzeppelin/Pausable.ts +178 -0
- package/src/prebuilt/openzeppelin/PaymentSplitter.json +304 -0
- package/src/prebuilt/openzeppelin/PaymentSplitter.ts +296 -0
- package/src/prebuilt/openzeppelin/ProxyAdmin.json +151 -0
- package/src/prebuilt/openzeppelin/ProxyAdmin.ts +228 -0
- package/src/prebuilt/openzeppelin/PullPayment.json +34 -0
- package/src/prebuilt/openzeppelin/PullPayment.ts +152 -0
- package/src/prebuilt/openzeppelin/RefundEscrow.json +226 -0
- package/src/prebuilt/openzeppelin/RefundEscrow.ts +356 -0
- package/src/prebuilt/openzeppelin/TimelockController.json +891 -0
- package/src/prebuilt/openzeppelin/TimelockController.ts +573 -0
- package/src/prebuilt/openzeppelin/TokenTimelock.json +69 -0
- package/src/prebuilt/openzeppelin/TokenTimelock.ts +174 -0
- package/src/prebuilt/openzeppelin/UUPSUpgradeable.json +91 -0
- package/src/prebuilt/openzeppelin/UUPSUpgradeable.ts +219 -0
- package/src/prebuilt/openzeppelin/UpgradeableBeacon.json +104 -0
- package/src/prebuilt/openzeppelin/UpgradeableBeacon.ts +222 -0
- package/src/prebuilt/openzeppelin/VestingWallet.json +225 -0
- package/src/prebuilt/openzeppelin/VestingWallet.ts +254 -0
- package/src/prebuilt/openzeppelin/Votes.json +307 -0
- package/src/prebuilt/openzeppelin/Votes.ts +304 -0
- package/src/prebuilt/openzeppelin/compiled/TransparentUpgradeableProxy/TransparentUpgradeableProxy.ts +214 -0
- package/src/prebuilt/safe/CreateCall.ts +168 -0
- package/src/prebuilt/safe/GnosisSafe.ts +683 -0
- package/src/prebuilt/safe/MultiSend.ts +147 -0
- package/src/prebuilt/safe/Safe.ts +742 -0
- package/src/prebuilt/safe/SafeL2.ts +780 -0
- package/src/prebuilt/safe/SafeProxyFactory.ts +197 -0
- package/src/prebuilt/weth/WETH/WETH.ts +390 -0
- package/src/rpc/$rpc.ts +124 -0
- package/src/rpc/Rpc.ts +3010 -0
- package/src/rpc/RpcBase.ts +154 -0
- package/src/rpc/RpcContract.ts +179 -0
- package/src/rpc/RpcError.ts +41 -0
- package/src/rpc/RpcFunction.ts +42 -0
- package/src/rpc/RpcHandler.ts +3 -0
- package/src/rpc/RpcModelMiddleware.ts +110 -0
- package/src/rpc/RpcSubscription.ts +46 -0
- package/src/rpc/transports/HttpTransport.ts +54 -0
- package/src/rpc/transports/ITransport.ts +87 -0
- package/src/rpc/transports/MessageBasedTransport.ts +133 -0
- package/src/rpc/transports/RpcTransport.ts +66 -0
- package/src/rpc/transports/WsTransport.ts +87 -0
- package/src/rpc/transports/WsTransportIsomorphic.ts +26 -0
- package/src/rpc/transports/compatibility/EIP1193Transport.ts +38 -0
- package/src/rpc/transports/compatibility/Web3Transport.ts +35 -0
- package/src/safe/$gnosis.ts +7 -0
- package/src/safe/GnosisSafeFactory.ts +104 -0
- package/src/safe/GnosisSafeHandler.ts +472 -0
- package/src/safe/GnosisSafeService.ts +86 -0
- package/src/safe/SafeTx.ts +93 -0
- package/src/safe/abi/GnosisSafe.json +979 -0
- package/src/safe/abi/v1_4_1/CreateCall.json +68 -0
- package/src/safe/abi/v1_4_1/MultiSend.json +20 -0
- package/src/safe/abi/v1_4_1/Safe.json +999 -0
- package/src/safe/abi/v1_4_1/SafeL2.json +1104 -0
- package/src/safe/abi/v1_4_1/SafeProxyFactory.json +139 -0
- package/src/safe/transport/FileServiceTransport.ts +109 -0
- package/src/safe/transport/ISafeServiceTransport.ts +20 -0
- package/src/safe/transport/InMemoryServiceTransport.ts +84 -0
- package/src/safe/transport/SafeServiceTransport.ts +148 -0
- package/src/safe/types/SafeServiceTypes.ts +326 -0
- package/src/services/TimelockService.ts +666 -0
- package/src/solidity/SlotsDump.ts +245 -0
- package/src/solidity/SlotsParser/Ast.ts +601 -0
- package/src/solidity/SlotsParser/MappingSettersResolver.ts +681 -0
- package/src/solidity/SlotsParser/SourceFile.ts +240 -0
- package/src/solidity/SlotsParser/models.ts +32 -0
- package/src/solidity/SlotsParser.ts +497 -0
- package/src/solidity/SlotsStorage.ts +209 -0
- package/src/solidity/SolidityParser.ts +108 -0
- package/src/solidity/SourceCodeProvider.ts +83 -0
- package/src/solidity/storage/Accessor.spec.ts +45 -0
- package/src/solidity/storage/Accessor.ts +136 -0
- package/src/solidity/storage/MappingKeysLoader.ts +112 -0
- package/src/solidity/storage/SlotDynamicArray.ts +46 -0
- package/src/solidity/storage/SlotFixedArray.ts +31 -0
- package/src/solidity/storage/SlotsStorageHandler.ts +18 -0
- package/src/solidity/storage/SlotsStorageTransport.ts +215 -0
- package/src/solidity/storage/handlers/SlotBytesHandler.ts +135 -0
- package/src/solidity/storage/handlers/SlotDynamicArrayHandler.ts +58 -0
- package/src/solidity/storage/handlers/SlotFixedArrayHandler.ts +58 -0
- package/src/solidity/storage/handlers/SlotMappingHandler.ts +75 -0
- package/src/solidity/storage/handlers/SlotStringHandler.ts +27 -0
- package/src/solidity/storage/handlers/SlotStructHandler.ts +47 -0
- package/src/solidity/storage/handlers/SlotValueConstantHandler.ts +30 -0
- package/src/solidity/storage/handlers/SlotValueHandler.ts +36 -0
- package/src/solidity/storage/handlers/SlotValueImmutableHandler.ts +49 -0
- package/src/solidity/utils/$str.ts +73 -0
- package/src/solidity/utils/$types.ts +61 -0
- package/src/tokens/TokenDataProvider.ts +284 -0
- package/src/tokens/TokenExchangeService.ts +129 -126
- package/src/tokens/TokenExchanges/AmmBase/AmmUtilts.ts +16 -16
- package/src/tokens/TokenExchanges/AmmBase/V2/AmmPairV2Service.ts +228 -208
- package/src/tokens/TokenExchanges/AmmV2ExchangeBase.ts +242 -242
- package/src/tokens/TokenExchanges/AmmV2PriceQuote.ts +433 -0
- package/src/tokens/TokenExchanges/OneInchExchange.ts +114 -111
- package/src/tokens/TokenExchanges/PancakeswapExchange.ts +25 -30
- package/src/tokens/TokenExchanges/SushiswapPolygonExchange.ts +33 -30
- package/src/tokens/TokenExchanges/UniswapV2Exchange.ts +28 -0
- package/src/tokens/TokenOracles/IOracle.ts +36 -0
- package/src/tokens/TokenOracles/TokenPriceStore.ts +130 -129
- package/src/tokens/TokenOracles/amm/AmmV1Oracle.ts +219 -0
- package/src/tokens/TokenOracles/amm/AmmV2Oracle.ts +57 -0
- package/src/tokens/TokenOracles/chainlink/ChainlinkFeedProvider.ts +133 -0
- package/src/tokens/TokenOracles/chainlink/ChainlinkOracle.ts +135 -0
- package/src/tokens/TokenOracles/coingecko/CoingeckoOracle.ts +121 -0
- package/src/tokens/TokenOracles/coingecko/CoingeckoTokenProvider.ts +51 -0
- package/src/tokens/TokenPriceService.ts +273 -276
- package/src/tokens/TokenPriceServiceProvider.ts +36 -36
- package/src/tokens/TokenProviders/ITokenProvider.ts +9 -9
- package/src/tokens/TokenProviders/TPChain.ts +53 -41
- package/src/tokens/TokenProviders/TPCoingecko.ts +177 -0
- package/src/tokens/TokenProviders/TPCoinmarketcap.ts +82 -82
- package/src/tokens/TokenProviders/TPConfig.ts +53 -0
- package/src/tokens/TokenProviders/TPExplorer.ts +41 -0
- package/src/tokens/TokenProviders/TPOneInch.ts +71 -71
- package/src/tokens/TokenProviders/TPSushiswap.ts +88 -96
- package/src/tokens/TokenProviders/TPUniswap.ts +87 -85
- package/src/tokens/TokenService.ts +142 -128
- package/src/tokens/TokenSwapService.ts +44 -47
- package/src/tokens/TokenTransferService.ts +233 -216
- package/src/tokens/TokensService.ts +42 -186
- package/src/tokens/TokensServiceBsc.ts +17 -17
- package/src/tokens/TokensServiceEth.ts +9 -9
- package/src/tokens/TokensServiceFactory.ts +15 -1
- package/src/tokens/TokensServicePolygon.ts +17 -17
- package/src/tokens/TokensServiceXDai.ts +26 -26
- package/src/tokens/defi/ISwapService.ts +12 -12
- package/src/tokens/defi/paraswap/Paraswap.ts +242 -244
- package/src/tokens/utils/TokenUtils.ts +63 -63
- package/src/txs/ITxBuilderOptions.ts +41 -0
- package/src/txs/TxDataBuilder.ts +308 -207
- package/src/txs/TxLogger.ts +120 -121
- package/src/txs/TxNonceManager.ts +86 -0
- package/src/txs/TxProvider.ts +70 -68
- package/src/txs/TxService.ts +20 -19
- package/src/txs/TxWriter.ts +342 -78
- package/src/txs/agents/Erc4337Agent.ts +32 -0
- package/src/txs/agents/SafeAgent.ts +20 -0
- package/src/txs/agents/TxWriterAccountAgents.ts +27 -0
- package/src/txs/conditional/GasWatcherLogger.ts +57 -57
- package/src/txs/conditional/GasWatcherService.ts +116 -117
- package/src/txs/conditional/GasWatcherStore.ts +41 -40
- package/src/txs/conditional/GasWatcherTx.ts +142 -143
- package/src/txs/receipt/ITxLogItem.ts +31 -25
- package/src/txs/receipt/TxLogParser.ts +56 -29
- package/src/txs/receipt/TxLogsTransfer.ts +61 -61
- package/src/txs/receipt/TxTopicInMemoryProvider.ts +45 -45
- package/src/txs/receipt/TxTopicProvider.ts +29 -29
- package/src/txs/sig-transports/SigFileTransport.ts +49 -0
- package/src/types/TAbi.ts +32 -0
- package/src/utils/$abiParser.ts +245 -179
- package/src/utils/$abiType.ts +277 -85
- package/src/utils/$abiUtils.ts +332 -38
- package/src/utils/$account.ts +48 -0
- package/src/utils/$address.ts +71 -37
- package/src/utils/$array.ts +113 -57
- package/src/utils/$base.ts +67 -0
- package/src/utils/$bigfloat.ts +562 -0
- package/src/utils/$bigint.ts +238 -127
- package/src/utils/$block.ts +20 -7
- package/src/utils/$bloom.ts +43 -0
- package/src/utils/$buffer.ts +196 -0
- package/src/utils/$cache.ts +7 -0
- package/src/utils/$class.ts +8 -8
- package/src/utils/$cli.ts +42 -0
- package/src/utils/$color.ts +213 -0
- package/src/utils/$config.ts +80 -17
- package/src/utils/$const.ts +1 -0
- package/src/utils/$contract.ts +309 -67
- package/src/utils/$crypto.ts +223 -0
- package/src/utils/$csv.ts +70 -54
- package/src/utils/$date.ts +697 -473
- package/src/utils/$error.ts +16 -0
- package/src/utils/$fn.ts +134 -134
- package/src/utils/$gas.ts +26 -0
- package/src/utils/$hex.ts +133 -0
- package/src/utils/$http.ts +219 -0
- package/src/utils/$is.ts +73 -37
- package/src/utils/$logger.ts +216 -10
- package/src/utils/$machine.ts +85 -0
- package/src/utils/$number.ts +135 -89
- package/src/utils/$object.ts +95 -95
- package/src/utils/$path.ts +76 -32
- package/src/utils/$perf.ts +20 -0
- package/src/utils/$platform.ts +5 -0
- package/src/utils/$promise.ts +154 -7
- package/src/utils/$regexp.ts +16 -0
- package/src/utils/$require.ts +212 -118
- package/src/utils/$secret.ts +27 -0
- package/src/utils/$semver.ts +27 -0
- package/src/utils/$sig.ts +722 -0
- package/src/utils/$sign.ts +136 -36
- package/src/utils/$signRaw.ts +50 -0
- package/src/utils/$signRawNative.ts +105 -0
- package/src/utils/$signSerializer.ts +27 -21
- package/src/utils/$txData.ts +23 -0
- package/src/utils/$wallet.ts +3 -10
- package/src/utils/types.ts +58 -29
- package/src/wallets/Wallet.ts +33 -33
- package/src/wallets/WalletBsc.ts +13 -13
- package/src/wallets/WalletService.ts +43 -43
- package/test/Batch.spec.ts +89 -0
- package/test/BlockChainExplorer.spec.ts +24 -0
- package/test/ChainAccount.spec.ts +52 -9
- package/test/Fixtures.ts +36 -0
- package/test/Web3Client.spec.ts +81 -0
- package/test/browser/block.spec.ts +9 -0
- package/test/client/block.spec.ts +19 -0
- package/test/config.js +68 -0
- package/test/config.spec.ts +31 -0
- package/test/config.yml +4 -0
- package/test/contracts/ContractCreationResolver.spec.ts +26 -0
- package/test/ecrecover.spec.ts +63 -0
- package/test/erc2612/PermitToken.sol +10 -0
- package/test/erc4337/erc4337.spec.ts +407 -0
- package/test/fixtures/DaiTokenContract.ts +13 -13
- package/test/fixtures/abi/deployments.json +105 -0
- package/test/fixtures/abi/encode.json +23798 -0
- package/test/fixtures/abi/encodePacked.json +34586 -0
- package/test/fixtures/artifacts/AnyERC20/AnyERC20.json +340 -0
- package/test/fixtures/artifacts/AnyERC20/AnyERC20.sol +15 -0
- package/test/fixtures/contracts/AlphaKlimaSimple.sol +36 -0
- package/test/fixtures/contracts/Counter.sol +25 -0
- package/test/fixtures/contracts/Ecrecover.sol +33 -0
- package/test/fixtures/contracts/Foo.sol +49 -0
- package/test/fixtures/contracts/FooErc20.sol +7 -0
- package/test/fixtures/contracts/FooNestedModel.sol +6 -0
- package/test/fixtures/contracts/FreeToken.sol +263 -0
- package/test/fixtures/deployments/DeploymentsFoo.sol +14 -0
- package/test/fixtures/deployments/DeploymentsFooV2.sol +11 -0
- package/test/fixtures/deployments/DeploymentsFooV3.sol +12 -0
- package/test/fixtures/erc4337/core/BaseAccount.sol +107 -0
- package/test/fixtures/erc4337/core/BasePaymaster.sol +112 -0
- package/test/fixtures/erc4337/core/EntryPoint.sol +631 -0
- package/test/fixtures/erc4337/core/Helpers.sol +81 -0
- package/test/fixtures/erc4337/core/NonceManager.sol +40 -0
- package/test/fixtures/erc4337/core/SenderCreator.sol +28 -0
- package/test/fixtures/erc4337/core/StakeManager.sol +124 -0
- package/test/fixtures/erc4337/interfaces/IAccount.sol +34 -0
- package/test/fixtures/erc4337/interfaces/IAggregator.sol +36 -0
- package/test/fixtures/erc4337/interfaces/IEntryPoint.sol +205 -0
- package/test/fixtures/erc4337/interfaces/INonceManager.sol +27 -0
- package/test/fixtures/erc4337/interfaces/IPaymaster.sol +51 -0
- package/test/fixtures/erc4337/interfaces/IStakeManager.sol +104 -0
- package/test/fixtures/erc4337/interfaces/UserOperation.sol +91 -0
- package/test/fixtures/erc4337/samples/DepositPaymaster.sol +167 -0
- package/test/fixtures/erc4337/samples/IOracle.sol +11 -0
- package/test/fixtures/erc4337/samples/SimpleAccount.sol +138 -0
- package/test/fixtures/erc4337/samples/SimpleAccountFactory.sol +52 -0
- package/test/fixtures/erc4337/samples/TokenPaymaster.sol +113 -0
- package/test/fixtures/erc4337/samples/VerifyingPaymaster.sol +104 -0
- package/test/fixtures/erc4337/samples/bls/BLSAccount.sol +64 -0
- package/test/fixtures/erc4337/samples/bls/BLSAccountFactory.sol +61 -0
- package/test/fixtures/erc4337/samples/bls/BLSHelper.sol +232 -0
- package/test/fixtures/erc4337/samples/bls/BLSSignatureAggregator.sol +164 -0
- package/test/fixtures/erc4337/samples/bls/IBLSAccount.sol +16 -0
- package/test/fixtures/erc4337/samples/bls/lib/BLSOpen.sol +64 -0
- package/test/fixtures/erc4337/samples/bls/lib/hubble-contracts/contracts/libs/BLS.sol +440 -0
- package/test/fixtures/erc4337/samples/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.sol +108 -0
- package/test/fixtures/erc4337/samples/bls/lib/hubble-contracts/contracts/libs/ModExp.sol +652 -0
- package/test/fixtures/erc4337/samples/callback/TokenCallbackHandler.sol +61 -0
- package/test/fixtures/erc4337/utils/Exec.sol +70 -0
- package/test/fixtures/explorer/0xfbD2aa7efA2B46Ce3c58D7ab0D92C176c71499C0.html +2788 -0
- package/test/fixtures/gnosis/GnosisSafe.sol +422 -0
- package/test/fixtures/gnosis/GnosisSafeL2.sol +86 -0
- package/test/fixtures/gnosis/accessors/SimulateTxAccessor.sol +52 -0
- package/test/fixtures/gnosis/base/Executor.sol +27 -0
- package/test/fixtures/gnosis/base/FallbackManager.sol +53 -0
- package/test/fixtures/gnosis/base/GuardManager.sol +62 -0
- package/test/fixtures/gnosis/base/ModuleManager.sol +133 -0
- package/test/fixtures/gnosis/base/OwnerManager.sol +149 -0
- package/test/fixtures/gnosis/common/Enum.sol +8 -0
- package/test/fixtures/gnosis/common/EtherPaymentFallback.sol +13 -0
- package/test/fixtures/gnosis/common/SecuredTokenTransfer.sol +35 -0
- package/test/fixtures/gnosis/common/SelfAuthorized.sol +16 -0
- package/test/fixtures/gnosis/common/SignatureDecoder.sol +36 -0
- package/test/fixtures/gnosis/common/Singleton.sol +11 -0
- package/test/fixtures/gnosis/common/StorageAccessible.sol +47 -0
- package/test/fixtures/gnosis/external/GnosisSafeMath.sol +54 -0
- package/test/fixtures/gnosis/interfaces/ERC1155TokenReceiver.sol +49 -0
- package/test/fixtures/gnosis/interfaces/ERC721TokenReceiver.sol +24 -0
- package/test/fixtures/gnosis/interfaces/ERC777TokensRecipient.sol +13 -0
- package/test/fixtures/gnosis/interfaces/IERC165.sol +15 -0
- package/test/fixtures/gnosis/interfaces/ISignatureValidator.sol +20 -0
- package/test/fixtures/gnosis/interfaces/ViewStorageAccessible.sol +11 -0
- package/test/fixtures/gnosis/libraries/CreateCall.sol +30 -0
- package/test/fixtures/gnosis/libraries/GnosisSafeStorage.sol +21 -0
- package/test/fixtures/gnosis/libraries/MultiSend.sol +66 -0
- package/test/fixtures/gnosis/libraries/MultiSendCallOnly.sol +61 -0
- package/test/fixtures/gnosis/libraries/SignMessageLib.sol +34 -0
- package/test/fixtures/gnosis/proxies/GnosisSafeProxy.sol +44 -0
- package/test/fixtures/gnosis/proxies/GnosisSafeProxyFactory.sol +107 -0
- package/test/fixtures/gnosis/proxies/IProxyCreationCallback.sol +12 -0
- package/test/fixtures/mapping-setters/GTC.sol +611 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/Address.sol +189 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/FullMath.sol +124 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IERC165.sol +24 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IERC20.sol +77 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IERC20Minimal.sol +52 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IERC721.sol +129 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IERC721Enumerable.sol +29 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IERC721Metadata.sol +27 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IERC721Permit.sol +32 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IERC721Receiver.sol +21 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IMulticall.sol +13 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/INonfungiblePositionManager.sol +180 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IPeripheryImmutableState.sol +12 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IPeripheryPayments.sol +28 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IPoolInitializer.sol +22 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3Factory.sol +78 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3Pool.sol +24 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3PoolActions.sol +103 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3PoolDerivedState.sol +40 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3PoolEvents.sol +121 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3PoolImmutables.sol +35 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3PoolOwnerActions.sol +23 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3PoolState.sol +116 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3Staker.sol +183 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/IncentiveId.sol +14 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/Math.sol +31 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/Multicall.sol +28 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/NFTPositionInfo.sol +47 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/PoolAddress.sol +48 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/RewardMath.sol +42 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/TransferHelper.sol +60 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/TransferHelperExtended.sol +39 -0
- package/test/fixtures/mapping-setters/UniswapV3Staker/UniswapV3Staker.sol +350 -0
- package/test/fixtures/openzeppelin/Proxy.sol +11 -0
- package/test/fixtures/openzeppelin/ProxyAdmin.sol +11 -0
- package/test/fixtures/openzeppelin/beacon/BeaconProxy.sol +11 -0
- package/test/fixtures/openzeppelin/beacon/UpgradeableBeacon.sol +11 -0
- package/test/fixtures/parser/AlphaKlima.sol +36 -0
- package/test/fixtures/parser/CToken/CErc20.sol +228 -0
- package/test/fixtures/parser/CToken/CErc20Delegate.sol +44 -0
- package/test/fixtures/parser/CToken/CErc20Delegator.sol +476 -0
- package/test/fixtures/parser/CToken/CToken.sol +1156 -0
- package/test/fixtures/parser/CToken/CTokenInterfaces.sol +293 -0
- package/test/fixtures/parser/CToken/ComptrollerInterface.sol +72 -0
- package/test/fixtures/parser/CToken/EIP20Interface.sol +63 -0
- package/test/fixtures/parser/CToken/EIP20NonStandardInterface.sol +71 -0
- package/test/fixtures/parser/CToken/ErrorReporter.sol +127 -0
- package/test/fixtures/parser/CToken/ExponentialNoError.sol +171 -0
- package/test/fixtures/parser/CToken/InterestRateModel.sol +30 -0
- package/test/fixtures/parser/DAI.sol +194 -0
- package/test/fixtures/parser/PriceOracle.sol +1964 -0
- package/test/fixtures/parser/SAFE/Context.sol +24 -0
- package/test/fixtures/parser/SAFE/ERC20.sol +383 -0
- package/test/fixtures/parser/SAFE/IERC20.sol +82 -0
- package/test/fixtures/parser/SAFE/IERC20Metadata.sol +28 -0
- package/test/fixtures/parser/SAFE/Ownable.sol +76 -0
- package/test/fixtures/parser/SAFE/Pausable.sol +91 -0
- package/test/fixtures/parser/SAFE/SafeToken.sol +48 -0
- package/test/fixtures/parser/SAFE/TokenRescuer.sol +29 -0
- package/test/fixtures/parser/SomeERC20/Context.sol +24 -0
- package/test/fixtures/parser/SomeERC20/ERC20.sol +389 -0
- package/test/fixtures/parser/SomeERC20/IERC20.sol +82 -0
- package/test/fixtures/parser/SomeERC20/IERC20Metadata.sol +28 -0
- package/test/fixtures/parser/SomeERC20/Ownable.sol +83 -0
- package/test/fixtures/parser/SomeERC20/SomeToken.sol +210 -0
- package/test/fixtures/parser/TetherToken.sol +447 -0
- package/test/fixtures/parser/USDC.sol +2231 -0
- package/test/fixtures/parser/v04/ENJToken.sol +493 -0
- package/test/fixtures/parser/v04/MultiSigWallet.sol +371 -0
- package/test/fixtures/receipts/swap.json +93 -93
- package/test/fixtures/scan/WETH.sol +1533 -0
- package/test/fixtures/slots/FooStorage.sol +8 -0
- package/test/fixtures/slots/FooStorageBase.sol +6 -0
- package/test/fixtures/slots/Vault.sol +85 -0
- package/test/flashbots/flashbots.spec.ts +79 -0
- package/test/generate/class.spec.ts +293 -5
- package/test/generate/evm.spec.ts +71 -0
- package/test/generate/gen.spec.ts +69 -0
- package/test/generate/openzeppelin.spec.ts +22 -0
- package/test/generate/slotreader.spec.ts +34 -0
- package/test/hardhat/TestNode.ts +76 -61
- package/test/hardhat/compile.spec.ts +22 -0
- package/test/hardhat/deploy.spec.ts +579 -0
- package/test/hardhat/deployments/deployments.spec.ts +233 -0
- package/test/hardhat/deployments/proxy-layout.spec.ts +296 -0
- package/test/hardhat/forked.spec.ts +56 -0
- package/test/hardhat/gas.spec.ts +40 -0
- package/test/hardhat/permit.ts +33 -0
- package/test/hardhat/revert.spec.ts +30 -0
- package/test/indexer/BlocksWalker.spec.ts +51 -0
- package/test/indexer/EventsIndexer.spec.ts +170 -0
- package/test/json/JsonStore.spec.ts +170 -0
- package/test/node/block.spec.ts +11 -0
- package/test/ns.spec.ts +67 -30
- package/test/perf/calldata.spec.ts +93 -0
- package/test/receipt.spec.ts +52 -27
- package/test/rpc/rpc.spec.ts +353 -0
- package/test/rpc/rpcUtil.spec.ts +31 -0
- package/test/safe/safe.spec.ts +352 -0
- package/test/services/timelock.spec.ts +97 -0
- package/test/solidity/AbiExtractor.spec.ts +468 -0
- package/test/solidity/MappingSettersResolver.spec.ts +516 -0
- package/test/solidity/SlotsDump.spec.ts +154 -0
- package/test/solidity/SlotsParser.spec.ts +536 -0
- package/test/solidity/SlotsReader.spec.ts +388 -0
- package/test/solidity/Storage.spec.ts +404 -0
- package/test/structs/PackedRanges.spec.ts +56 -0
- package/test/subscriptions.spec.ts +127 -0
- package/test/token.spec.ts +17 -0
- package/test/tokens/oracles.spec.ts +51 -0
- package/test/utils/abi-parser-args.spec.ts +143 -0
- package/test/utils/abi-parser.spec.ts +141 -117
- package/test/utils/abi-types.spec.ts +31 -0
- package/test/utils/abi-utils.spec.ts +23 -0
- package/test/utils/abi.spec.ts +178 -0
- package/test/utils/address.spec.ts +66 -0
- package/test/utils/bigfloat/div.spec.ts +1919 -0
- package/test/utils/bigfloat/mod.spec.ts +1745 -0
- package/test/utils/bigfloat/mul.spec.ts +2085 -0
- package/test/utils/bigfloat/round.spec.ts +174 -0
- package/test/utils/bigfloat/sqrt.spec.ts +420 -0
- package/test/utils/bigint.spec.ts +39 -40
- package/test/utils/bytecode.spec.ts +107 -0
- package/test/utils/crypto.spec.ts +37 -0
- package/test/utils/date.spec.ts +9 -8
- package/test/utils/fn.spec.ts +39 -39
- package/test/utils/logbloom.spec.ts +17 -0
- package/test/utils/number.spec.ts +52 -41
- package/test/utils/rlp.spec.ts +142 -0
- package/test/utils/sign.spec.ts +327 -22
- package/tools/build-dts.ts +111 -0
- package/tools/copy-dts.ts +48 -0
- package/tsconfig-build.json +24 -24
- package/tsconfig-src.json +44 -36
- package/tsconfig.esm.json +12 -0
- package/tsconfig.json +34 -27
- package/tsconfig.umd.json +28 -0
- package/typings/globals/axios/index.d.ts +6 -6
- package/typings.json +6 -6
- package/contracts/abi/erc20.abi.json +0 -222
- package/contracts/gen/amm/AmmFactoryV2ContractBase.ts +0 -66
- package/contracts/gen/amm/AmmMasterChefV2ContractBase.ts +0 -158
- package/contracts/gen/amm/AmmPairContractV2Base.ts +0 -158
- package/contracts/gen/amm/AmmPairContractV3Base.ts +0 -125
- package/contracts/gen/amm/AmmRouterV2ContractBase.ts +0 -124
- package/contracts/gen/amm/AmmVaultV2ContractBase.ts +0 -214
- package/contracts/gen/base/ERC20Base.ts +0 -90
- package/contracts/gen/bsc/OneInchRouterV3Base.ts +0 -57
- package/contracts/gen/eth/WETHBase/WETHBase.sol +0 -756
- package/contracts/gen/eth/WETHBase.ts +0 -136
- package/contracts/gen/polygon/ERC20PolygonBase.ts +0 -305
- package/contracts/gen/polygon/WormholeBridgeContractBase/Address.sol +0 -216
- package/contracts/gen/polygon/WormholeBridgeContractBase/BeaconProxy.sol +0 -61
- package/contracts/gen/polygon/WormholeBridgeContractBase/Bridge.sol +0 -437
- package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeGetters.sol +0 -70
- package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeGovernance.sol +0 -142
- package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeImplementation.sol +0 -34
- package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeSetters.sol +0 -57
- package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeState.sol +0 -52
- package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeStructs.sol +0 -66
- package/contracts/gen/polygon/WormholeBridgeContractBase/BytesLib.sol +0 -510
- package/contracts/gen/polygon/WormholeBridgeContractBase/Context.sol +0 -23
- package/contracts/gen/polygon/WormholeBridgeContractBase/ERC1967Proxy.sol +0 -32
- package/contracts/gen/polygon/WormholeBridgeContractBase/ERC1967Upgrade.sol +0 -193
- package/contracts/gen/polygon/WormholeBridgeContractBase/IBeacon.sol +0 -15
- package/contracts/gen/polygon/WormholeBridgeContractBase/IERC20.sol +0 -81
- package/contracts/gen/polygon/WormholeBridgeContractBase/IWormhole.sol +0 -42
- package/contracts/gen/polygon/WormholeBridgeContractBase/Ownable.sol +0 -71
- package/contracts/gen/polygon/WormholeBridgeContractBase/Proxy.sol +0 -85
- package/contracts/gen/polygon/WormholeBridgeContractBase/SafeERC20.sol +0 -98
- package/contracts/gen/polygon/WormholeBridgeContractBase/StorageSlot.sol +0 -83
- package/contracts/gen/polygon/WormholeBridgeContractBase/Structs.sol +0 -40
- package/contracts/gen/polygon/WormholeBridgeContractBase/Token.sol +0 -12
- package/contracts/gen/polygon/WormholeBridgeContractBase/TokenBridge.sol +0 -15
- package/contracts/gen/polygon/WormholeBridgeContractBase/TokenImplementation.sol +0 -177
- package/contracts/gen/polygon/WormholeBridgeContractBase/TokenState.sol +0 -31
- package/contracts/gen/polygon/WormholeBridgeContractBase.ts +0 -231
- package/contracts/gen/xdai/WXDaiTokenContractBase.ts +0 -136
- package/dist/contracts/gen/amm/AmmFactoryV2ContractBase.js +0 -53
- package/dist/contracts/gen/amm/AmmMasterChefV2ContractBase.js +0 -122
- package/dist/contracts/gen/amm/AmmPairContractV2Base.js +0 -122
- package/dist/contracts/gen/amm/AmmPairContractV3Base.js +0 -98
- package/dist/contracts/gen/amm/AmmRouterV2ContractBase.js +0 -95
- package/dist/contracts/gen/amm/AmmVaultV2ContractBase.js +0 -164
- package/dist/contracts/gen/base/ERC20Base.js +0 -64
- package/dist/contracts/gen/bsc/OneInchRouterV3Base.js +0 -47
- package/dist/contracts/gen/eth/WETHBase.js +0 -96
- package/dist/contracts/gen/polygon/ERC20PolygonBase.js +0 -233
- package/dist/contracts/gen/polygon/WormholeBridgeContractBase.js +0 -172
- package/dist/contracts/gen/xdai/WXDaiTokenContractBase.js +0 -96
- package/dist/src/BlockchainExplorer/BlockChainExplorerFactory.js +0 -227
- package/dist/src/BlockchainExplorer/BlockChainExplorerProvider.js +0 -32
- package/dist/src/BlockchainExplorer/BlockNumberCache.js +0 -33
- package/dist/src/BlockchainExplorer/Bscscan.js +0 -27
- package/dist/src/BlockchainExplorer/Etherscan.js +0 -27
- package/dist/src/BlockchainExplorer/IAbiProvider.js +0 -2
- package/dist/src/BlockchainExplorer/IBlockChainExplorer.js +0 -2
- package/dist/src/BlockchainExplorer/Polyscan.js +0 -27
- package/dist/src/ChainAccounts.js +0 -69
- package/dist/src/ChainAccountsService.js +0 -75
- package/dist/src/Config.js +0 -7
- package/dist/src/blocks/BlockDateResolver.js +0 -125
- package/dist/src/bridges/BridgeFactory.js +0 -19
- package/dist/src/bridges/hop/HopAddresses.js +0 -520
- package/dist/src/bridges/hop/HopBridge.js +0 -327
- package/dist/src/bridges/hop/contracts/gen.act.js +0 -43
- package/dist/src/bridges/hop/contracts/polygon/Dai_l2AmmWrapperContract.js +0 -52
- package/dist/src/bridges/hop/contracts/polygon/Dai_l2BridgeContract.js +0 -319
- package/dist/src/bridges/hop/contracts/polygon/Dai_l2SaddleSwapContract.js +0 -178
- package/dist/src/bridges/hop/contracts/polygon/Eth_l2AmmWrapperContract.js +0 -52
- package/dist/src/bridges/hop/contracts/polygon/Eth_l2BridgeContract.js +0 -319
- package/dist/src/bridges/hop/contracts/polygon/Eth_l2SaddleSwapContract.js +0 -178
- package/dist/src/bridges/hop/contracts/polygon/Matic_l2AmmWrapperContract.js +0 -52
- package/dist/src/bridges/hop/contracts/polygon/Matic_l2BridgeContract.js +0 -319
- package/dist/src/bridges/hop/contracts/polygon/Matic_l2SaddleSwapContract.js +0 -178
- package/dist/src/bridges/hop/contracts/polygon/Usdc_l2AmmWrapperContract.js +0 -52
- package/dist/src/bridges/hop/contracts/polygon/Usdc_l2BridgeContract.js +0 -319
- package/dist/src/bridges/hop/contracts/polygon/Usdc_l2SaddleSwapContract.js +0 -178
- package/dist/src/bridges/hop/contracts/polygon/Usdt_l2AmmWrapperContract.js +0 -52
- package/dist/src/bridges/hop/contracts/polygon/Usdt_l2BridgeContract.js +0 -319
- package/dist/src/bridges/hop/contracts/polygon/Usdt_l2SaddleSwapContract.js +0 -178
- package/dist/src/bridges/hop/contracts/polygon/Wbtc_l2AmmWrapperContract.js +0 -52
- package/dist/src/bridges/hop/contracts/polygon/Wbtc_l2BridgeContract.js +0 -319
- package/dist/src/bridges/hop/contracts/polygon/Wbtc_l2SaddleSwapContract.js +0 -178
- package/dist/src/bridges/models/IBridge.js +0 -2
- package/dist/src/bridges/wormhole/contracts/WormholeBridgeContract.js +0 -15
- package/dist/src/chains/PlatformFactory.js +0 -42
- package/dist/src/chains/arbitrum/ArbTokenProvider.js +0 -40
- package/dist/src/chains/arbitrum/ArbWeb3Client.js +0 -39
- package/dist/src/chains/arbitrum/Arbiscan.js +0 -27
- package/dist/src/chains/boba/BobaWeb3Client.js +0 -47
- package/dist/src/chains/boba/Bobascan.js +0 -28
- package/dist/src/chains/xdai/XDaiWeb3Client.js +0 -87
- package/dist/src/chains/xdai/XDaiscan.js +0 -27
- package/dist/src/chains/xdai/tokens/WXDaiTokenContract.js +0 -15
- package/dist/src/clients/BscWeb3Client.js +0 -38
- package/dist/src/clients/ClientEventsStream.js +0 -34
- package/dist/src/clients/ClientPool.js +0 -560
- package/dist/src/clients/ClientPoolStats.js +0 -52
- package/dist/src/clients/EthWeb3Client.js +0 -35
- package/dist/src/clients/HardhatWeb3Client.js +0 -56
- package/dist/src/clients/PolyWeb3Client.js +0 -77
- package/dist/src/clients/Web3Client.js +0 -186
- package/dist/src/clients/Web3ClientFactory.js +0 -32
- package/dist/src/clients/interfaces/IWeb3Client.js +0 -2
- package/dist/src/clients/interfaces/IWeb3ClientStatus.js +0 -2
- package/dist/src/clients/interfaces/IWeb3EndpointOptions.js +0 -2
- package/dist/src/clients/model/ClientStatus.js +0 -9
- package/dist/src/clients/model/PromiEventWrap.js +0 -52
- package/dist/src/clients/model/SubscriptionWrap.js +0 -42
- package/dist/src/clients/utils/ClientEndpoints.js +0 -27
- package/dist/src/clients/utils/ClientErrorUtil.js +0 -30
- package/dist/src/clients/utils/TxFactory.js +0 -14
- package/dist/src/contracts/BscContract.js +0 -30
- package/dist/src/contracts/Contract.js +0 -90
- package/dist/src/contracts/ContractBase.js +0 -139
- package/dist/src/contracts/ContractFactory.js +0 -17
- package/dist/src/contracts/ContractProvider.js +0 -40
- package/dist/src/contracts/ContractReader.js +0 -76
- package/dist/src/contracts/ContractStream.js +0 -20
- package/dist/src/contracts/ContractWriter.js +0 -62
- package/dist/src/contracts/EthContract.js +0 -31
- package/dist/src/contracts/TxContract.js +0 -37
- package/dist/src/contracts/common/ERC20.js +0 -14
- package/dist/src/contracts/common/ERC20Polygon.js +0 -14
- package/dist/src/contracts/common/PoolPair.js +0 -23
- package/dist/src/contracts/utils/AbiDeserializer.js +0 -89
- package/dist/src/contracts/utils/ConvertUtils.js +0 -21
- package/dist/src/contracts/utils/InputDataUtils.js +0 -87
- package/dist/src/contracts/utils/TypeUtils.js +0 -24
- package/dist/src/defi/OneInch/OneInchRouter.js +0 -14
- package/dist/src/env/BigIntSerializer.js +0 -19
- package/dist/src/gen/Ast.js +0 -12
- package/dist/src/gen/ContractTemplate.js +0 -27
- package/dist/src/gen/Generator.js +0 -180
- package/dist/src/gen/GeneratorFromAbi.js +0 -361
- package/dist/src/handlers/TokenHandler.js +0 -69
- package/dist/src/indexer/BlocksTxIndexer.js +0 -52
- package/dist/src/indexer/PendingTxIndexer.js +0 -96
- package/dist/src/indexer/handlers/BlocksWalker.js +0 -306
- package/dist/src/indexer/handlers/TxQueueLoader.js +0 -117
- package/dist/src/json/JsonArrayStore.js +0 -296
- package/dist/src/json/JsonObjectStore.js +0 -214
- package/dist/src/json/JsonStore.spec.js +0 -83
- package/dist/src/loggers/ILogger.js +0 -2
- package/dist/src/loggers/LoggerService.js +0 -34
- package/dist/src/loggers/TxLoggerService.js +0 -122
- package/dist/src/models/IContractDetails.js +0 -2
- package/dist/src/models/IToken.js +0 -2
- package/dist/src/models/ITokenGlob.js +0 -6
- package/dist/src/models/ITransactionDetails.js +0 -2
- package/dist/src/models/TAddress.js +0 -2
- package/dist/src/models/TBufferLike.js +0 -2
- package/dist/src/models/THex.js +0 -2
- package/dist/src/models/TPlatform.js +0 -2
- package/dist/src/models/TResult.js +0 -2
- package/dist/src/ns/NameService.js +0 -19
- package/dist/src/ns/providers/EnsProvider.js +0 -41
- package/dist/src/ns/providers/INsProvider.js +0 -2
- package/dist/src/ns/providers/UDProvider.js +0 -39
- package/dist/src/ns/utils/$ns.js +0 -17
- package/dist/src/structs/PackedRanges.js +0 -186
- package/dist/src/structs/PackedRanges.spec.js +0 -30
- package/dist/src/tokens/TokenExchangeService.js +0 -110
- package/dist/src/tokens/TokenExchanges/AmmBase/AmmUtilts.js +0 -17
- package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmFactoryV2Contract.js +0 -15
- package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmMasterChefV2Contract.js +0 -15
- package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmPairV2Contract.js +0 -16
- package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmPairV2Service.js +0 -144
- package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmRouterV2Contract.js +0 -15
- package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmVaultV2Contract.js +0 -15
- package/dist/src/tokens/TokenExchanges/AmmBase/V3/AmmPairV3Contract.js +0 -22
- package/dist/src/tokens/TokenExchanges/AmmV2ExchangeBase.js +0 -194
- package/dist/src/tokens/TokenExchanges/OneInchExchange.js +0 -92
- package/dist/src/tokens/TokenExchanges/PancakeswapExchange.js +0 -28
- package/dist/src/tokens/TokenExchanges/SushiswapPolygonExchange.js +0 -28
- package/dist/src/tokens/TokenExchanges/UniswapExchange.js +0 -28
- package/dist/src/tokens/TokenOracles/AmmPriceV2Oracle.js +0 -319
- package/dist/src/tokens/TokenOracles/TokenPriceStore.js +0 -108
- package/dist/src/tokens/TokenPriceService.js +0 -196
- package/dist/src/tokens/TokenPriceServiceProvider.js +0 -31
- package/dist/src/tokens/TokenProviders/ATokenProvider.js +0 -38
- package/dist/src/tokens/TokenProviders/ITokenProvider.js +0 -2
- package/dist/src/tokens/TokenProviders/TPChain.js +0 -35
- package/dist/src/tokens/TokenProviders/TPCoinmarketcap.js +0 -63
- package/dist/src/tokens/TokenProviders/TPOneInch.js +0 -65
- package/dist/src/tokens/TokenProviders/TPSushiswap.js +0 -89
- package/dist/src/tokens/TokenProviders/TPUniswap.js +0 -84
- package/dist/src/tokens/TokenService.js +0 -115
- package/dist/src/tokens/TokenSwapService.js +0 -37
- package/dist/src/tokens/TokenTransferService.js +0 -189
- package/dist/src/tokens/TokensService.js +0 -236
- package/dist/src/tokens/TokensServiceBsc.js +0 -18
- package/dist/src/tokens/TokensServiceEth.js +0 -15
- package/dist/src/tokens/TokensServiceFactory.js +0 -29
- package/dist/src/tokens/TokensServicePolygon.js +0 -18
- package/dist/src/tokens/TokensServiceXDai.js +0 -24
- package/dist/src/tokens/defi/ISwapService.js +0 -2
- package/dist/src/tokens/defi/paraswap/Paraswap.js +0 -135
- package/dist/src/tokens/erc20/eth/WETH.js +0 -14
- package/dist/src/tokens/utils/TokenUtils.js +0 -66
- package/dist/src/txs/ITxConfig.js +0 -2
- package/dist/src/txs/TxDataBuilder.js +0 -159
- package/dist/src/txs/TxLogger.js +0 -119
- package/dist/src/txs/TxProvider.js +0 -73
- package/dist/src/txs/TxService.js +0 -19
- package/dist/src/txs/TxWriter.js +0 -287
- package/dist/src/txs/conditional/GasWatcherLogger.js +0 -61
- package/dist/src/txs/conditional/GasWatcherService.js +0 -103
- package/dist/src/txs/conditional/GasWatcherStore.js +0 -25
- package/dist/src/txs/conditional/GasWatcherTx.js +0 -126
- package/dist/src/txs/receipt/ITxLogItem.js +0 -2
- package/dist/src/txs/receipt/TxLogParser.js +0 -27
- package/dist/src/txs/receipt/TxLogsTransfer.js +0 -50
- package/dist/src/txs/receipt/TxTopicInMemoryProvider.js +0 -41
- package/dist/src/txs/receipt/TxTopicProvider.js +0 -25
- package/dist/src/utils/$abiParser.js +0 -159
- package/dist/src/utils/$abiType.js +0 -77
- package/dist/src/utils/$abiUtils.js +0 -43
- package/dist/src/utils/$address.js +0 -41
- package/dist/src/utils/$array.js +0 -60
- package/dist/src/utils/$bigint.js +0 -130
- package/dist/src/utils/$block.js +0 -10
- package/dist/src/utils/$class.js +0 -13
- package/dist/src/utils/$config.js +0 -18
- package/dist/src/utils/$contract.js +0 -67
- package/dist/src/utils/$csv.js +0 -79
- package/dist/src/utils/$date.js +0 -496
- package/dist/src/utils/$fn.js +0 -117
- package/dist/src/utils/$is.js +0 -40
- package/dist/src/utils/$logger.js +0 -15
- package/dist/src/utils/$number.js +0 -95
- package/dist/src/utils/$object.js +0 -82
- package/dist/src/utils/$path.js +0 -33
- package/dist/src/utils/$promise.js +0 -13
- package/dist/src/utils/$require.js +0 -127
- package/dist/src/utils/$sign.js +0 -35
- package/dist/src/utils/$signSerializer.js +0 -264
- package/dist/src/utils/$wallet.js +0 -13
- package/dist/src/utils/types.js +0 -2
- package/dist/src/wallets/Wallet.js +0 -26
- package/dist/src/wallets/WalletBsc.js +0 -17
- package/dist/src/wallets/WalletService.js +0 -35
- package/dist/src/www/utils/BlockChainExplorerFormatter.js +0 -15
- package/src/BlockchainExplorer/BlockChainExplorerFactory.ts +0 -273
- package/src/BlockchainExplorer/BlockChainExplorerProvider.ts +0 -26
- package/src/BlockchainExplorer/BlockNumberCache.ts +0 -46
- package/src/BlockchainExplorer/Bscscan.ts +0 -23
- package/src/BlockchainExplorer/Etherscan.ts +0 -25
- package/src/BlockchainExplorer/IAbiProvider.ts +0 -5
- package/src/BlockchainExplorer/IBlockChainExplorer.ts +0 -37
- package/src/BlockchainExplorer/Polyscan.ts +0 -23
- package/src/ChainAccounts.ts +0 -72
- package/src/ChainAccountsService.ts +0 -74
- package/src/Config.ts +0 -34
- package/src/bridges/hop/contracts/polygon/Dai_l2AmmWrapperContract.ts +0 -69
- package/src/bridges/hop/contracts/polygon/Dai_l2BridgeContract.ts +0 -453
- package/src/bridges/hop/contracts/polygon/Dai_l2SaddleSwapContract.ts +0 -264
- package/src/bridges/hop/contracts/polygon/Eth_l2AmmWrapperContract.ts +0 -69
- package/src/bridges/hop/contracts/polygon/Eth_l2BridgeContract.ts +0 -453
- package/src/bridges/hop/contracts/polygon/Eth_l2SaddleSwapContract.ts +0 -264
- package/src/bridges/hop/contracts/polygon/Matic_l2AmmWrapperContract.ts +0 -69
- package/src/bridges/hop/contracts/polygon/Matic_l2BridgeContract.ts +0 -453
- package/src/bridges/hop/contracts/polygon/Matic_l2SaddleSwapContract.ts +0 -264
- package/src/bridges/hop/contracts/polygon/Usdc_l2AmmWrapperContract.ts +0 -69
- package/src/bridges/hop/contracts/polygon/Usdc_l2BridgeContract.ts +0 -453
- package/src/bridges/hop/contracts/polygon/Usdc_l2SaddleSwapContract.ts +0 -264
- package/src/bridges/hop/contracts/polygon/Usdt_l2AmmWrapperContract.ts +0 -69
- package/src/bridges/hop/contracts/polygon/Usdt_l2BridgeContract.ts +0 -453
- package/src/bridges/hop/contracts/polygon/Usdt_l2SaddleSwapContract.ts +0 -264
- package/src/bridges/hop/contracts/polygon/Wbtc_l2AmmWrapperContract.ts +0 -69
- package/src/bridges/hop/contracts/polygon/Wbtc_l2BridgeContract.ts +0 -453
- package/src/bridges/hop/contracts/polygon/Wbtc_l2SaddleSwapContract.ts +0 -264
- package/src/bridges/wormhole/contracts/WormholeBridgeContract.ts +0 -14
- package/src/chains/xdai/tokens/WXDaiTokenContract.json +0 -279
- package/src/chains/xdai/tokens/WXDaiTokenContract.ts +0 -14
- package/src/clients/HardhatWeb3Client.ts +0 -60
- package/src/contracts/ContractFactory.ts +0 -19
- package/src/contracts/common/ERC20.ts +0 -13
- package/src/contracts/common/ERC20Polygon.ts +0 -13
- package/src/contracts/common/PoolPair.ts +0 -22
- package/src/defi/OneInch/OneInchRouter.ts +0 -13
- package/src/json/JsonStore.spec.ts +0 -98
- package/src/structs/PackedRanges.spec.ts +0 -38
- package/src/structs/PackedRanges.ts +0 -207
- package/src/tokens/TokenExchanges/AmmBase/V2/AmmFactoryV2Contract.ts +0 -15
- package/src/tokens/TokenExchanges/AmmBase/V2/AmmMasterChefV2Contract.ts +0 -15
- package/src/tokens/TokenExchanges/AmmBase/V2/AmmPairV2Contract.ts +0 -17
- package/src/tokens/TokenExchanges/AmmBase/V2/AmmRouterV2Contract.ts +0 -15
- package/src/tokens/TokenExchanges/AmmBase/V2/AmmVaultV2Contract.ts +0 -15
- package/src/tokens/TokenExchanges/AmmBase/V3/AmmPairV3Contract.ts +0 -24
- package/src/tokens/TokenExchanges/UniswapExchange.ts +0 -31
- package/src/tokens/TokenOracles/AmmPriceV2Oracle.ts +0 -440
- package/src/tokens/erc20/eth/WETH.ts +0 -13
- package/src/txs/ITxConfig.ts +0 -27
- package/src/www/utils/BlockChainExplorerFormatter.ts +0 -13
- package/test/client.spec.ts +0 -59
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0
|
|
2
|
+
pragma solidity ^0.8.12;
|
|
3
|
+
|
|
4
|
+
/* solhint-disable reason-string */
|
|
5
|
+
/* solhint-disable no-inline-assembly */
|
|
6
|
+
|
|
7
|
+
import "../core/BasePaymaster.sol";
|
|
8
|
+
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
|
|
9
|
+
/**
|
|
10
|
+
* A sample paymaster that uses external service to decide whether to pay for the UserOp.
|
|
11
|
+
* The paymaster trusts an external signer to sign the transaction.
|
|
12
|
+
* The calling user must pass the UserOp to that external signer first, which performs
|
|
13
|
+
* whatever off-chain verification before signing the UserOp.
|
|
14
|
+
* Note that this signature is NOT a replacement for the account-specific signature:
|
|
15
|
+
* - the paymaster checks a signature to agree to PAY for GAS.
|
|
16
|
+
* - the account checks a signature to prove identity and account ownership.
|
|
17
|
+
*/
|
|
18
|
+
contract VerifyingPaymaster is BasePaymaster {
|
|
19
|
+
|
|
20
|
+
using ECDSA for bytes32;
|
|
21
|
+
using UserOperationLib for UserOperation;
|
|
22
|
+
|
|
23
|
+
address public immutable verifyingSigner;
|
|
24
|
+
|
|
25
|
+
uint256 private constant VALID_TIMESTAMP_OFFSET = 20;
|
|
26
|
+
|
|
27
|
+
uint256 private constant SIGNATURE_OFFSET = 84;
|
|
28
|
+
|
|
29
|
+
constructor(IEntryPoint _entryPoint, address _verifyingSigner) BasePaymaster(_entryPoint) {
|
|
30
|
+
verifyingSigner = _verifyingSigner;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
mapping(address => uint256) public senderNonce;
|
|
34
|
+
|
|
35
|
+
function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) {
|
|
36
|
+
// lighter signature scheme. must match UserOp.ts#packUserOp
|
|
37
|
+
bytes calldata pnd = userOp.paymasterAndData;
|
|
38
|
+
// copy directly the userOp from calldata up to (but not including) the paymasterAndData.
|
|
39
|
+
// this encoding depends on the ABI encoding of calldata, but is much lighter to copy
|
|
40
|
+
// than referencing each field separately.
|
|
41
|
+
assembly {
|
|
42
|
+
let ofs := userOp
|
|
43
|
+
let len := sub(sub(pnd.offset, ofs), 32)
|
|
44
|
+
ret := mload(0x40)
|
|
45
|
+
mstore(0x40, add(ret, add(len, 32)))
|
|
46
|
+
mstore(ret, len)
|
|
47
|
+
calldatacopy(add(ret, 32), ofs, len)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* return the hash we're going to sign off-chain (and validate on-chain)
|
|
53
|
+
* this method is called by the off-chain service, to sign the request.
|
|
54
|
+
* it is called on-chain from the validatePaymasterUserOp, to validate the signature.
|
|
55
|
+
* note that this signature covers all fields of the UserOperation, except the "paymasterAndData",
|
|
56
|
+
* which will carry the signature itself.
|
|
57
|
+
*/
|
|
58
|
+
function getHash(UserOperation calldata userOp, uint48 validUntil, uint48 validAfter)
|
|
59
|
+
public view returns (bytes32) {
|
|
60
|
+
//can't use userOp.hash(), since it contains also the paymasterAndData itself.
|
|
61
|
+
|
|
62
|
+
return keccak256(abi.encode(
|
|
63
|
+
pack(userOp),
|
|
64
|
+
block.chainid,
|
|
65
|
+
address(this),
|
|
66
|
+
senderNonce[userOp.getSender()],
|
|
67
|
+
validUntil,
|
|
68
|
+
validAfter
|
|
69
|
+
));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* verify our external signer signed this request.
|
|
74
|
+
* the "paymasterAndData" is expected to be the paymaster and a signature over the entire request params
|
|
75
|
+
* paymasterAndData[:20] : address(this)
|
|
76
|
+
* paymasterAndData[20:84] : abi.encode(validUntil, validAfter)
|
|
77
|
+
* paymasterAndData[84:] : signature
|
|
78
|
+
*/
|
|
79
|
+
function _validatePaymasterUserOp(UserOperation calldata userOp, bytes32 /*userOpHash*/, uint256 requiredPreFund)
|
|
80
|
+
internal override returns (bytes memory context, uint256 validationData) {
|
|
81
|
+
(requiredPreFund);
|
|
82
|
+
|
|
83
|
+
(uint48 validUntil, uint48 validAfter, bytes calldata signature) = parsePaymasterAndData(userOp.paymasterAndData);
|
|
84
|
+
//ECDSA library supports both 64 and 65-byte long signatures.
|
|
85
|
+
// we only "require" it here so that the revert reason on invalid signature will be of "VerifyingPaymaster", and not "ECDSA"
|
|
86
|
+
require(signature.length == 64 || signature.length == 65, "VerifyingPaymaster: invalid signature length in paymasterAndData");
|
|
87
|
+
bytes32 hash = ECDSA.toEthSignedMessageHash(getHash(userOp, validUntil, validAfter));
|
|
88
|
+
senderNonce[userOp.getSender()]++;
|
|
89
|
+
|
|
90
|
+
//don't revert on signature failure: return SIG_VALIDATION_FAILED
|
|
91
|
+
if (verifyingSigner != ECDSA.recover(hash, signature)) {
|
|
92
|
+
return ("",_packValidationData(true,validUntil,validAfter));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
//no need for other on-chain validation: entire UserOp should have been checked
|
|
96
|
+
// by the external service prior to signing it.
|
|
97
|
+
return ("",_packValidationData(false,validUntil,validAfter));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function parsePaymasterAndData(bytes calldata paymasterAndData) public pure returns(uint48 validUntil, uint48 validAfter, bytes calldata signature) {
|
|
101
|
+
(validUntil, validAfter) = abi.decode(paymasterAndData[VALID_TIMESTAMP_OFFSET:SIGNATURE_OFFSET],(uint48, uint48));
|
|
102
|
+
signature = paymasterAndData[SIGNATURE_OFFSET:];
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0
|
|
2
|
+
pragma solidity ^0.8.12;
|
|
3
|
+
|
|
4
|
+
import "../SimpleAccount.sol";
|
|
5
|
+
import "./IBLSAccount.sol";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Minimal BLS-based account that uses an aggregated signature.
|
|
9
|
+
* The account must maintain its own BLS public key, and expose its trusted signature aggregator.
|
|
10
|
+
* Note that unlike the "standard" SimpleAccount, this account can't be called directly
|
|
11
|
+
* (normal SimpleAccount uses its "signer" address as both the ecrecover signer, and as a legitimate
|
|
12
|
+
* Ethereum sender address. Obviously, a BLS public key is not a valid Ethereum sender address.)
|
|
13
|
+
*/
|
|
14
|
+
contract BLSAccount is SimpleAccount, IBLSAccount {
|
|
15
|
+
address public immutable aggregator;
|
|
16
|
+
uint256[4] private publicKey;
|
|
17
|
+
|
|
18
|
+
// The constructor is used only for the "implementation" and only sets immutable values.
|
|
19
|
+
// Mutable value slots for proxy accounts are set by the 'initialize' function.
|
|
20
|
+
constructor(IEntryPoint anEntryPoint, address anAggregator) SimpleAccount(anEntryPoint) {
|
|
21
|
+
aggregator = anAggregator;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The initializer for the BLSAccount instance.
|
|
26
|
+
* @param aPublicKey public key from a BLS keypair that will have a full ownership and control of this account.
|
|
27
|
+
*/
|
|
28
|
+
function initialize(uint256[4] memory aPublicKey) public virtual initializer {
|
|
29
|
+
super._initialize(address(0));
|
|
30
|
+
_setBlsPublicKey(aPublicKey);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function _validateSignature(UserOperation calldata userOp, bytes32 userOpHash)
|
|
34
|
+
internal override view returns (uint256 validationData) {
|
|
35
|
+
|
|
36
|
+
(userOp, userOpHash);
|
|
37
|
+
if (userOp.initCode.length != 0) {
|
|
38
|
+
// BLSSignatureAggregator.getUserOpPublicKey() assumes that during account creation, the public key is
|
|
39
|
+
// the suffix of the initCode.
|
|
40
|
+
// The account MUST validate it
|
|
41
|
+
bytes32 pubKeyHash = keccak256(abi.encode(getBlsPublicKey()));
|
|
42
|
+
require(keccak256(userOp.initCode[userOp.initCode.length - 128 :]) == pubKeyHash, "wrong pubkey");
|
|
43
|
+
}
|
|
44
|
+
return _packValidationData(ValidationData(aggregator, 0,0));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Allows the owner to set or change the BLS key.
|
|
49
|
+
* @param newPublicKey public key from a BLS keypair that will have a full ownership and control of this account.
|
|
50
|
+
*/
|
|
51
|
+
function setBlsPublicKey(uint256[4] memory newPublicKey) public onlyOwner {
|
|
52
|
+
_setBlsPublicKey(newPublicKey);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function _setBlsPublicKey(uint256[4] memory newPublicKey) internal {
|
|
56
|
+
emit PublicKeyChanged(publicKey, newPublicKey);
|
|
57
|
+
publicKey = newPublicKey;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/// @inheritdoc IBLSAccount
|
|
61
|
+
function getBlsPublicKey() public override view returns (uint256[4] memory) {
|
|
62
|
+
return publicKey;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0
|
|
2
|
+
pragma solidity ^0.8.12;
|
|
3
|
+
|
|
4
|
+
import "@openzeppelin/contracts/utils/Create2.sol";
|
|
5
|
+
import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
|
|
6
|
+
|
|
7
|
+
import "../../interfaces/IEntryPoint.sol";
|
|
8
|
+
import "./BLSAccount.sol";
|
|
9
|
+
|
|
10
|
+
/* solhint-disable no-inline-assembly */
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Based on SimpleAccountFactory.
|
|
14
|
+
* Cannot be a subclass since both constructor and createAccount depend on the
|
|
15
|
+
* constructor and initializer of the actual account contract.
|
|
16
|
+
*/
|
|
17
|
+
contract BLSAccountFactory {
|
|
18
|
+
BLSAccount public immutable accountImplementation;
|
|
19
|
+
|
|
20
|
+
constructor(IEntryPoint entryPoint, address aggregator){
|
|
21
|
+
accountImplementation = new BLSAccount(entryPoint, aggregator);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* create an account, and return its address.
|
|
26
|
+
* returns the address even if the account is already deployed.
|
|
27
|
+
* Note that during UserOperation execution, this method is called only if the account is not deployed.
|
|
28
|
+
* This method returns an existing account address so that entryPoint.getSenderAddress() would work even after account creation
|
|
29
|
+
* Also note that our BLSSignatureAggregator requires that the public key is the last parameter
|
|
30
|
+
*/
|
|
31
|
+
function createAccount(uint256 salt, uint256[4] calldata aPublicKey) public returns (BLSAccount) {
|
|
32
|
+
|
|
33
|
+
// the BLSSignatureAggregator depends on the public-key being the last 4 uint256 of msg.data.
|
|
34
|
+
uint slot;
|
|
35
|
+
assembly {slot := aPublicKey}
|
|
36
|
+
require(slot == msg.data.length - 128, "wrong pubkey offset");
|
|
37
|
+
|
|
38
|
+
address addr = getAddress(salt, aPublicKey);
|
|
39
|
+
uint codeSize = addr.code.length;
|
|
40
|
+
if (codeSize > 0) {
|
|
41
|
+
return BLSAccount(payable(addr));
|
|
42
|
+
}
|
|
43
|
+
return BLSAccount(payable(new ERC1967Proxy{salt : bytes32(salt)}(
|
|
44
|
+
address(accountImplementation),
|
|
45
|
+
abi.encodeCall(BLSAccount.initialize, aPublicKey)
|
|
46
|
+
)));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* calculate the counterfactual address of this account as it would be returned by createAccount()
|
|
51
|
+
*/
|
|
52
|
+
function getAddress(uint256 salt, uint256[4] memory aPublicKey) public view returns (address) {
|
|
53
|
+
return Create2.computeAddress(bytes32(salt), keccak256(abi.encodePacked(
|
|
54
|
+
type(ERC1967Proxy).creationCode,
|
|
55
|
+
abi.encode(
|
|
56
|
+
address(accountImplementation),
|
|
57
|
+
abi.encodeCall(BLSAccount.initialize, (aPublicKey))
|
|
58
|
+
)
|
|
59
|
+
)));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0
|
|
2
|
+
pragma solidity ^0.8.12;
|
|
3
|
+
|
|
4
|
+
// code taken from : https://github.com/witnet/elliptic-curve-solidity/blob/master/contracts/EllipticCurve.sol
|
|
5
|
+
// missing core functions from "thehubbleproject/bls": jacAdd (and sum)
|
|
6
|
+
library BLSHelper {
|
|
7
|
+
|
|
8
|
+
struct XY {
|
|
9
|
+
uint x;
|
|
10
|
+
uint y;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* sum all the points in the array
|
|
14
|
+
* NOTE: the "ecAdd" (below) has a special case where x1==y2.
|
|
15
|
+
* @param points an array of bytes32[2], representing an (x,y) of a point
|
|
16
|
+
* @param _pp the modulus of the curve
|
|
17
|
+
* @return ret the sum of all points
|
|
18
|
+
*/
|
|
19
|
+
function sum(XY[] memory points, uint256 _pp) internal pure returns (XY memory ret){
|
|
20
|
+
uint x = points[0].x;
|
|
21
|
+
uint y = points[0].y;
|
|
22
|
+
uint z = 1;
|
|
23
|
+
|
|
24
|
+
for (uint i = 1; i < points.length; i++) {
|
|
25
|
+
(x, y, z) = jacAdd(x, y, z, points[i].x, points[i].y, 1, _pp);
|
|
26
|
+
}
|
|
27
|
+
(x, y) = toAffine(x, y, z, _pp);
|
|
28
|
+
ret.x = x;
|
|
29
|
+
ret.y = y;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/// @dev Adds two points (x1, y1, z1) and (x2, y2, z2).
|
|
33
|
+
/// @param _x1 coordinate x of P1
|
|
34
|
+
/// @param _y1 coordinate y of P1
|
|
35
|
+
/// @param _z1 coordinate z of P1
|
|
36
|
+
/// @param _x2 coordinate x of square
|
|
37
|
+
/// @param _y2 coordinate y of square
|
|
38
|
+
/// @param _z2 coordinate z of square
|
|
39
|
+
/// @param _pp the modulus
|
|
40
|
+
/// @return (qx, qy, qz) P1+square in Jacobian
|
|
41
|
+
function jacAdd(
|
|
42
|
+
uint256 _x1,
|
|
43
|
+
uint256 _y1,
|
|
44
|
+
uint256 _z1,
|
|
45
|
+
uint256 _x2,
|
|
46
|
+
uint256 _y2,
|
|
47
|
+
uint256 _z2,
|
|
48
|
+
uint256 _pp)
|
|
49
|
+
internal pure returns (uint256, uint256, uint256)
|
|
50
|
+
{
|
|
51
|
+
if (_x1 == 0 && _y1 == 0)
|
|
52
|
+
return (_x2, _y2, _z2);
|
|
53
|
+
if (_x2 == 0 && _y2 == 0)
|
|
54
|
+
return (_x1, _y1, _z1);
|
|
55
|
+
|
|
56
|
+
// We follow the equations described in https://pdfs.semanticscholar.org/5c64/29952e08025a9649c2b0ba32518e9a7fb5c2.pdf Section 5
|
|
57
|
+
uint[4] memory zs;
|
|
58
|
+
// z1^2, z1^3, z2^2, z2^3
|
|
59
|
+
zs[0] = mulmod(_z1, _z1, _pp);
|
|
60
|
+
zs[1] = mulmod(_z1, zs[0], _pp);
|
|
61
|
+
zs[2] = mulmod(_z2, _z2, _pp);
|
|
62
|
+
zs[3] = mulmod(_z2, zs[2], _pp);
|
|
63
|
+
|
|
64
|
+
// u1, s1, u2, s2
|
|
65
|
+
zs = [
|
|
66
|
+
mulmod(_x1, zs[2], _pp),
|
|
67
|
+
mulmod(_y1, zs[3], _pp),
|
|
68
|
+
mulmod(_x2, zs[0], _pp),
|
|
69
|
+
mulmod(_y2, zs[1], _pp)
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
// In case of zs[0] == zs[2] && zs[1] == zs[3], double function should be used
|
|
73
|
+
require(zs[0] != zs[2] || zs[1] != zs[3], "Use jacDouble function instead");
|
|
74
|
+
|
|
75
|
+
uint[4] memory hr;
|
|
76
|
+
//h
|
|
77
|
+
hr[0] = addmod(zs[2], _pp - zs[0], _pp);
|
|
78
|
+
//r
|
|
79
|
+
hr[1] = addmod(zs[3], _pp - zs[1], _pp);
|
|
80
|
+
//h^2
|
|
81
|
+
hr[2] = mulmod(hr[0], hr[0], _pp);
|
|
82
|
+
// h^3
|
|
83
|
+
hr[3] = mulmod(hr[2], hr[0], _pp);
|
|
84
|
+
// qx = -h^3 -2u1h^2+r^2
|
|
85
|
+
uint256 qx = addmod(mulmod(hr[1], hr[1], _pp), _pp - hr[3], _pp);
|
|
86
|
+
qx = addmod(qx, _pp - mulmod(2, mulmod(zs[0], hr[2], _pp), _pp), _pp);
|
|
87
|
+
// qy = -s1*z1*h^3+r(u1*h^2 -x^3)
|
|
88
|
+
uint256 qy = mulmod(hr[1], addmod(mulmod(zs[0], hr[2], _pp), _pp - qx, _pp), _pp);
|
|
89
|
+
qy = addmod(qy, _pp - mulmod(zs[1], hr[3], _pp), _pp);
|
|
90
|
+
// qz = h*z1*z2
|
|
91
|
+
uint256 qz = mulmod(hr[0], mulmod(_z1, _z2, _pp), _pp);
|
|
92
|
+
return (qx, qy, qz);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
/// @dev Converts a point (x, y, z) expressed in Jacobian coordinates to affine coordinates (x', y', 1).
|
|
97
|
+
/// @param _x coordinate x
|
|
98
|
+
/// @param _y coordinate y
|
|
99
|
+
/// @param _z coordinate z
|
|
100
|
+
/// @param _pp the modulus
|
|
101
|
+
/// @return (x', y') affine coordinates
|
|
102
|
+
function toAffine(
|
|
103
|
+
uint256 _x,
|
|
104
|
+
uint256 _y,
|
|
105
|
+
uint256 _z,
|
|
106
|
+
uint256 _pp)
|
|
107
|
+
internal pure returns (uint256, uint256)
|
|
108
|
+
{
|
|
109
|
+
uint256 zInv = invMod(_z, _pp);
|
|
110
|
+
uint256 zInv2 = mulmod(zInv, zInv, _pp);
|
|
111
|
+
uint256 x2 = mulmod(_x, zInv2, _pp);
|
|
112
|
+
uint256 y2 = mulmod(_y, mulmod(zInv, zInv2, _pp), _pp);
|
|
113
|
+
|
|
114
|
+
return (x2, y2);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
/// @dev Modular euclidean inverse of a number (mod p).
|
|
119
|
+
/// @param _x The number
|
|
120
|
+
/// @param _pp The modulus
|
|
121
|
+
/// @return q such that x*q = 1 (mod _pp)
|
|
122
|
+
function invMod(uint256 _x, uint256 _pp) internal pure returns (uint256) {
|
|
123
|
+
require(_x != 0 && _x != _pp && _pp != 0, "Invalid number");
|
|
124
|
+
uint256 q = 0;
|
|
125
|
+
uint256 newT = 1;
|
|
126
|
+
uint256 r = _pp;
|
|
127
|
+
uint256 t;
|
|
128
|
+
while (_x != 0) {
|
|
129
|
+
t = r / _x;
|
|
130
|
+
(q, newT) = (newT, addmod(q, (_pp - mulmod(t, newT, _pp)), _pp));
|
|
131
|
+
(r, _x) = (_x, r - t * _x);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return q;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/// @dev Doubles a point (x, y, z).
|
|
138
|
+
/// @param _x coordinate x of P1
|
|
139
|
+
/// @param _y coordinate y of P1
|
|
140
|
+
/// @param _z coordinate z of P1
|
|
141
|
+
/// @param _aa the a scalar in the curve equation
|
|
142
|
+
/// @param _pp the modulus
|
|
143
|
+
/// @return (qx, qy, qz) 2P in Jacobian
|
|
144
|
+
function jacDouble(
|
|
145
|
+
uint256 _x,
|
|
146
|
+
uint256 _y,
|
|
147
|
+
uint256 _z,
|
|
148
|
+
uint256 _aa,
|
|
149
|
+
uint256 _pp)
|
|
150
|
+
internal pure returns (uint256, uint256, uint256)
|
|
151
|
+
{
|
|
152
|
+
if (_z == 0)
|
|
153
|
+
return (_x, _y, _z);
|
|
154
|
+
|
|
155
|
+
// We follow the equations described in https://pdfs.semanticscholar.org/5c64/29952e08025a9649c2b0ba32518e9a7fb5c2.pdf Section 5
|
|
156
|
+
// Note: there is a bug in the paper regarding the m parameter, M=3*(x1^2)+a*(z1^4)
|
|
157
|
+
// x, y, z at this point represent the squares of _x, _y, _z
|
|
158
|
+
uint256 x = mulmod(_x, _x, _pp); //x1^2
|
|
159
|
+
uint256 y = mulmod(_y, _y, _pp); //y1^2
|
|
160
|
+
uint256 z = mulmod(_z, _z, _pp); //z1^2
|
|
161
|
+
|
|
162
|
+
// s
|
|
163
|
+
uint s = mulmod(4, mulmod(_x, y, _pp), _pp);
|
|
164
|
+
// m
|
|
165
|
+
uint m = addmod(mulmod(3, x, _pp), mulmod(_aa, mulmod(z, z, _pp), _pp), _pp);
|
|
166
|
+
|
|
167
|
+
// x, y, z at this point will be reassigned and rather represent qx, qy, qz from the paper
|
|
168
|
+
// This allows to reduce the gas cost and stack footprint of the algorithm
|
|
169
|
+
// qx
|
|
170
|
+
x = addmod(mulmod(m, m, _pp), _pp - addmod(s, s, _pp), _pp);
|
|
171
|
+
// qy = -8*y1^4 + M(S-T)
|
|
172
|
+
y = addmod(mulmod(m, addmod(s, _pp - x, _pp), _pp), _pp - mulmod(8, mulmod(y, y, _pp), _pp), _pp);
|
|
173
|
+
// qz = 2*y1*z1
|
|
174
|
+
z = mulmod(2, mulmod(_y, _z, _pp), _pp);
|
|
175
|
+
|
|
176
|
+
return (x, y, z);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/// @dev Add two points (x1, y1) and (x2, y2) in affine coordinates.
|
|
180
|
+
/// @param _x1 coordinate x of P1
|
|
181
|
+
/// @param _y1 coordinate y of P1
|
|
182
|
+
/// @param _x2 coordinate x of P2
|
|
183
|
+
/// @param _y2 coordinate y of P2
|
|
184
|
+
/// @param _aa constant of the curve
|
|
185
|
+
/// @param _pp the modulus
|
|
186
|
+
/// @return (qx, qy) = P1+P2 in affine coordinates
|
|
187
|
+
function ecAdd(
|
|
188
|
+
uint256 _x1,
|
|
189
|
+
uint256 _y1,
|
|
190
|
+
uint256 _x2,
|
|
191
|
+
uint256 _y2,
|
|
192
|
+
uint256 _aa,
|
|
193
|
+
uint256 _pp)
|
|
194
|
+
internal pure returns (uint256, uint256)
|
|
195
|
+
{
|
|
196
|
+
uint x = 0;
|
|
197
|
+
uint y = 0;
|
|
198
|
+
uint z = 0;
|
|
199
|
+
|
|
200
|
+
// Double if x1==x2 else add
|
|
201
|
+
if (_x1 == _x2) {
|
|
202
|
+
// y1 = -y2 mod p
|
|
203
|
+
if (addmod(_y1, _y2, _pp) == 0) {
|
|
204
|
+
return (0, 0);
|
|
205
|
+
} else {
|
|
206
|
+
// P1 = P2
|
|
207
|
+
(x, y, z) = jacDouble(
|
|
208
|
+
_x1,
|
|
209
|
+
_y1,
|
|
210
|
+
1,
|
|
211
|
+
_aa,
|
|
212
|
+
_pp);
|
|
213
|
+
}
|
|
214
|
+
} else {
|
|
215
|
+
(x, y, z) = jacAdd(
|
|
216
|
+
_x1,
|
|
217
|
+
_y1,
|
|
218
|
+
1,
|
|
219
|
+
_x2,
|
|
220
|
+
_y2,
|
|
221
|
+
1,
|
|
222
|
+
_pp);
|
|
223
|
+
}
|
|
224
|
+
// Get back to affine
|
|
225
|
+
return toAffine(
|
|
226
|
+
x,
|
|
227
|
+
y,
|
|
228
|
+
z,
|
|
229
|
+
_pp);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
|
2
|
+
pragma solidity >=0.8.4 <0.9.0;
|
|
3
|
+
pragma abicoder v2;
|
|
4
|
+
|
|
5
|
+
import "../../interfaces/IAggregator.sol";
|
|
6
|
+
import "../../interfaces/IEntryPoint.sol";
|
|
7
|
+
import {BLSOpen} from "./lib/BLSOpen.sol";
|
|
8
|
+
import "./IBLSAccount.sol";
|
|
9
|
+
import "./BLSHelper.sol";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* A BLS-based signature aggregator, to validate aggregated signature of multiple UserOps if BLSAccount
|
|
13
|
+
*/
|
|
14
|
+
contract BLSSignatureAggregator is IAggregator {
|
|
15
|
+
using UserOperationLib for UserOperation;
|
|
16
|
+
|
|
17
|
+
bytes32 public constant BLS_DOMAIN = keccak256("eip4337.bls.domain");
|
|
18
|
+
|
|
19
|
+
//copied from BLS.sol
|
|
20
|
+
uint256 public constant N = 21888242871839275222246405745257275088696311157297823662689037894645226208583;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @return publicKey - the public key from a BLS keypair the Aggregator will use to verify this UserOp;
|
|
24
|
+
* normally public key will be queried from the deployed BLSAccount itself;
|
|
25
|
+
* the public key will be read from the 'initCode' if the account is not deployed yet;
|
|
26
|
+
*/
|
|
27
|
+
function getUserOpPublicKey(UserOperation memory userOp) public view returns (uint256[4] memory publicKey) {
|
|
28
|
+
bytes memory initCode = userOp.initCode;
|
|
29
|
+
if (initCode.length > 0) {
|
|
30
|
+
publicKey = getTrailingPublicKey(initCode);
|
|
31
|
+
} else {
|
|
32
|
+
return IBLSAccount(userOp.sender).getBlsPublicKey{gas : 50000}();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* return the trailing 4 words of input data
|
|
38
|
+
*/
|
|
39
|
+
function getTrailingPublicKey(bytes memory data) public pure returns (uint256[4] memory publicKey) {
|
|
40
|
+
uint len = data.length;
|
|
41
|
+
require(len > 32 * 4, "data too short for sig");
|
|
42
|
+
|
|
43
|
+
/* solhint-disable-next-line no-inline-assembly */
|
|
44
|
+
assembly {
|
|
45
|
+
// actual buffer starts at data+32, so last 128 bytes start at data+32+len-128 = data+len-96
|
|
46
|
+
let ofs := sub(add(data, len), 96)
|
|
47
|
+
mstore(publicKey, mload(ofs))
|
|
48
|
+
mstore(add(publicKey, 32), mload(add(ofs, 32)))
|
|
49
|
+
mstore(add(publicKey, 64), mload(add(ofs, 64)))
|
|
50
|
+
mstore(add(publicKey, 96), mload(add(ofs, 96)))
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/// @inheritdoc IAggregator
|
|
55
|
+
function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature)
|
|
56
|
+
external view override {
|
|
57
|
+
require(signature.length == 64, "BLS: invalid signature");
|
|
58
|
+
(uint256[2] memory blsSignature) = abi.decode(signature, (uint256[2]));
|
|
59
|
+
|
|
60
|
+
uint userOpsLen = userOps.length;
|
|
61
|
+
uint256[4][] memory blsPublicKeys = new uint256[4][](userOpsLen);
|
|
62
|
+
uint256[2][] memory messages = new uint256[2][](userOpsLen);
|
|
63
|
+
for (uint256 i = 0; i < userOpsLen; i++) {
|
|
64
|
+
|
|
65
|
+
UserOperation memory userOp = userOps[i];
|
|
66
|
+
blsPublicKeys[i] = getUserOpPublicKey(userOp);
|
|
67
|
+
|
|
68
|
+
messages[i] = _userOpToMessage(userOp, _getPublicKeyHash(blsPublicKeys[i]));
|
|
69
|
+
}
|
|
70
|
+
require(BLSOpen.verifyMultiple(blsSignature, blsPublicKeys, messages), "BLS: validateSignatures failed");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* get a hash of userOp
|
|
75
|
+
* NOTE: this hash is not the same as UserOperation.hash()
|
|
76
|
+
* (slightly less efficient, since it uses memory userOp)
|
|
77
|
+
*/
|
|
78
|
+
function internalUserOpHash(UserOperation memory userOp) internal pure returns (bytes32) {
|
|
79
|
+
return keccak256(abi.encode(
|
|
80
|
+
userOp.sender,
|
|
81
|
+
userOp.nonce,
|
|
82
|
+
keccak256(userOp.initCode),
|
|
83
|
+
keccak256(userOp.callData),
|
|
84
|
+
userOp.callGasLimit,
|
|
85
|
+
userOp.verificationGasLimit,
|
|
86
|
+
userOp.preVerificationGas,
|
|
87
|
+
userOp.maxFeePerGas,
|
|
88
|
+
userOp.maxPriorityFeePerGas,
|
|
89
|
+
keccak256(userOp.paymasterAndData)
|
|
90
|
+
));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* return the BLS "message" for the given UserOp.
|
|
95
|
+
* the account checks the signature over this value using its public key
|
|
96
|
+
*/
|
|
97
|
+
function userOpToMessage(UserOperation memory userOp) public view returns (uint256[2] memory) {
|
|
98
|
+
bytes32 publicKeyHash = _getPublicKeyHash(getUserOpPublicKey(userOp));
|
|
99
|
+
return _userOpToMessage(userOp, publicKeyHash);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function _userOpToMessage(UserOperation memory userOp, bytes32 publicKeyHash) internal view returns (uint256[2] memory) {
|
|
103
|
+
bytes32 userOpHash = _getUserOpHash(userOp, publicKeyHash);
|
|
104
|
+
return BLSOpen.hashToPoint(BLS_DOMAIN, abi.encodePacked(userOpHash));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// helper for test
|
|
108
|
+
function getUserOpHash(UserOperation memory userOp) public view returns (bytes32) {
|
|
109
|
+
bytes32 publicKeyHash = _getPublicKeyHash(getUserOpPublicKey(userOp));
|
|
110
|
+
return _getUserOpHash(userOp, publicKeyHash);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function _getUserOpHash(UserOperation memory userOp, bytes32 publicKeyHash) internal view returns (bytes32) {
|
|
114
|
+
return keccak256(abi.encode(internalUserOpHash(userOp), publicKeyHash, address(this), block.chainid));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function _getPublicKeyHash(uint256[4] memory publicKey) internal pure returns(bytes32) {
|
|
118
|
+
return keccak256(abi.encode(publicKey));
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* validate signature of a single userOp
|
|
122
|
+
* This method is called after EntryPoint.simulateValidation() returns an aggregator.
|
|
123
|
+
* First it validates the signature over the userOp. then it return data to be used when creating the handleOps:
|
|
124
|
+
* @param userOp the userOperation received from the user.
|
|
125
|
+
* @return sigForUserOp the value to put into the signature field of the userOp when calling handleOps.
|
|
126
|
+
* (usually empty, unless account and aggregator support some kind of "multisig"
|
|
127
|
+
*/
|
|
128
|
+
function validateUserOpSignature(UserOperation calldata userOp)
|
|
129
|
+
external view returns (bytes memory sigForUserOp) {
|
|
130
|
+
uint256[2] memory signature = abi.decode(userOp.signature, (uint256[2]));
|
|
131
|
+
uint256[4] memory pubkey = getUserOpPublicKey(userOp);
|
|
132
|
+
uint256[2] memory message = _userOpToMessage(userOp, _getPublicKeyHash(pubkey));
|
|
133
|
+
|
|
134
|
+
require(BLSOpen.verifySingle(signature, pubkey, message), "BLS: wrong sig");
|
|
135
|
+
return "";
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* aggregate multiple signatures into a single value.
|
|
141
|
+
* This method is called off-chain to calculate the signature to pass with handleOps()
|
|
142
|
+
* bundler MAY use optimized custom code perform this aggregation
|
|
143
|
+
* @param userOps array of UserOperations to collect the signatures from.
|
|
144
|
+
* @return aggregatedSignature the aggregated signature
|
|
145
|
+
*/
|
|
146
|
+
function aggregateSignatures(UserOperation[] calldata userOps) external pure returns (bytes memory aggregatedSignature) {
|
|
147
|
+
BLSHelper.XY[] memory points = new BLSHelper.XY[](userOps.length);
|
|
148
|
+
for (uint i = 0; i < points.length; i++) {
|
|
149
|
+
(uint256 x, uint256 y) = abi.decode(userOps[i].signature, (uint256, uint256));
|
|
150
|
+
points[i] = BLSHelper.XY(x, y);
|
|
151
|
+
}
|
|
152
|
+
BLSHelper.XY memory sum = BLSHelper.sum(points, N);
|
|
153
|
+
return abi.encode(sum.x, sum.y);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* allow staking for this aggregator
|
|
158
|
+
* there is no limit on stake or delay, but it is not a problem, since it is a permissionless
|
|
159
|
+
* signature aggregator, which doesn't support unstaking.
|
|
160
|
+
*/
|
|
161
|
+
function addStake(IEntryPoint entryPoint, uint32 delay) external payable {
|
|
162
|
+
entryPoint.addStake{value : msg.value}(delay);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-only
|
|
2
|
+
pragma solidity >=0.7.6;
|
|
3
|
+
|
|
4
|
+
import "../../interfaces/IAccount.sol";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* a BLS account should expose its own public key.
|
|
8
|
+
*/
|
|
9
|
+
interface IBLSAccount is IAccount {
|
|
10
|
+
event PublicKeyChanged(uint256[4] oldPublicKey, uint256[4] newPublicKey);
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @return public key from a BLS keypair that is used to verify the BLS signature, both separately and aggregated.
|
|
14
|
+
*/
|
|
15
|
+
function getBlsPublicKey() external view returns (uint256[4] memory);
|
|
16
|
+
}
|