viem 2.36.1 → 2.37.0
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/CHANGELOG.md +6 -0
- package/_cjs/actions/public/verifyHash.js +154 -38
- package/_cjs/actions/public/verifyHash.js.map +1 -1
- package/_cjs/chains/definitions/abstract.js +1 -1
- package/_cjs/chains/definitions/abstract.js.map +1 -1
- package/_cjs/chains/definitions/abstractTestnet.js +1 -1
- package/_cjs/chains/definitions/abstractTestnet.js.map +1 -1
- package/_cjs/chains/definitions/zksync.js +1 -1
- package/_cjs/chains/definitions/zksync.js.map +1 -1
- package/_cjs/chains/definitions/zksyncSepoliaTestnet.js +1 -1
- package/_cjs/chains/definitions/zksyncSepoliaTestnet.js.map +1 -1
- package/_cjs/constants/abis.js +3 -3
- package/_cjs/constants/abis.js.map +1 -1
- package/_cjs/constants/contracts.js +2 -2
- package/_cjs/constants/contracts.js.map +1 -1
- package/_cjs/errors/version.js +1 -1
- package/_cjs/index.js +19 -11
- package/_cjs/index.js.map +1 -1
- package/_cjs/utils/index.js +8 -2
- package/_cjs/utils/index.js.map +1 -1
- package/_cjs/utils/signature/isErc8010Signature.js +8 -0
- package/_cjs/utils/signature/isErc8010Signature.js.map +1 -0
- package/_cjs/utils/signature/parseErc8010Signature.js +24 -0
- package/_cjs/utils/signature/parseErc8010Signature.js.map +1 -0
- package/_cjs/utils/signature/serializeErc8010Signature.js +25 -0
- package/_cjs/utils/signature/serializeErc8010Signature.js.map +1 -0
- package/_esm/actions/public/verifyHash.js +172 -51
- package/_esm/actions/public/verifyHash.js.map +1 -1
- package/_esm/chains/definitions/abstract.js +1 -1
- package/_esm/chains/definitions/abstract.js.map +1 -1
- package/_esm/chains/definitions/abstractTestnet.js +1 -1
- package/_esm/chains/definitions/abstractTestnet.js.map +1 -1
- package/_esm/chains/definitions/zksync.js +1 -1
- package/_esm/chains/definitions/zksync.js.map +1 -1
- package/_esm/chains/definitions/zksyncSepoliaTestnet.js +1 -1
- package/_esm/chains/definitions/zksyncSepoliaTestnet.js.map +1 -1
- package/_esm/constants/abis.js +2 -2
- package/_esm/constants/abis.js.map +1 -1
- package/_esm/constants/contracts.js +1 -1
- package/_esm/constants/contracts.js.map +1 -1
- package/_esm/errors/version.js +1 -1
- package/_esm/index.js +9 -2
- package/_esm/index.js.map +1 -1
- package/_esm/utils/index.js +3 -0
- package/_esm/utils/index.js.map +1 -1
- package/_esm/utils/signature/isErc8010Signature.js +6 -0
- package/_esm/utils/signature/isErc8010Signature.js.map +1 -0
- package/_esm/utils/signature/parseErc8010Signature.js +28 -0
- package/_esm/utils/signature/parseErc8010Signature.js.map +1 -0
- package/_esm/utils/signature/serializeErc8010Signature.js +28 -0
- package/_esm/utils/signature/serializeErc8010Signature.js.map +1 -0
- package/_types/actions/public/verifyHash.d.ts +56 -2
- package/_types/actions/public/verifyHash.d.ts.map +1 -1
- package/_types/chains/definitions/0g.d.ts +1 -1
- package/_types/chains/definitions/5ireChain.d.ts +1 -1
- package/_types/chains/definitions/abey.d.ts +1 -1
- package/_types/chains/definitions/abstract.d.ts +1 -1
- package/_types/chains/definitions/abstractTestnet.d.ts +1 -1
- package/_types/chains/definitions/acala.d.ts +1 -1
- package/_types/chains/definitions/acria.d.ts +1 -1
- package/_types/chains/definitions/adf.d.ts +1 -1
- package/_types/chains/definitions/agungTestnet.d.ts +1 -1
- package/_types/chains/definitions/aioz.d.ts +1 -1
- package/_types/chains/definitions/alienX.d.ts +1 -1
- package/_types/chains/definitions/alienXHalTestnet.d.ts +1 -1
- package/_types/chains/definitions/anvil.d.ts +1 -1
- package/_types/chains/definitions/arenaz.d.ts +1 -1
- package/_types/chains/definitions/areonNetworkTestnet.d.ts +1 -1
- package/_types/chains/definitions/auroraTestnet.d.ts +1 -1
- package/_types/chains/definitions/auroria.d.ts +1 -1
- package/_types/chains/definitions/autheoTestnet.d.ts +1 -1
- package/_types/chains/definitions/bahamut.d.ts +1 -1
- package/_types/chains/definitions/basecampTestnet.d.ts +1 -1
- package/_types/chains/definitions/bearNetworkChainMainnet.d.ts +1 -1
- package/_types/chains/definitions/bearNetworkChainTestnet.d.ts +1 -1
- package/_types/chains/definitions/bevmMainnet.d.ts +1 -1
- package/_types/chains/definitions/bifrost.d.ts +1 -1
- package/_types/chains/definitions/birdlayer.d.ts +1 -1
- package/_types/chains/definitions/bitTorrentTestnet.d.ts +1 -1
- package/_types/chains/definitions/bitkub.d.ts +1 -1
- package/_types/chains/definitions/bitkubTestnet.d.ts +1 -1
- package/_types/chains/definitions/bitrock.d.ts +1 -1
- package/_types/chains/definitions/bobaSepolia.d.ts +1 -1
- package/_types/chains/definitions/boolBetaMainnet.d.ts +1 -1
- package/_types/chains/definitions/botanixTestnet.d.ts +1 -1
- package/_types/chains/definitions/bounceBit.d.ts +1 -1
- package/_types/chains/definitions/bounceBitTestnet.d.ts +1 -1
- package/_types/chains/definitions/bronos.d.ts +1 -1
- package/_types/chains/definitions/bronosTestnet.d.ts +1 -1
- package/_types/chains/definitions/bscGreenfield.d.ts +1 -1
- package/_types/chains/definitions/bsquared.d.ts +1 -1
- package/_types/chains/definitions/bsquaredTestnet.d.ts +1 -1
- package/_types/chains/definitions/btr.d.ts +1 -1
- package/_types/chains/definitions/btrTestnet.d.ts +1 -1
- package/_types/chains/definitions/bxn.d.ts +1 -1
- package/_types/chains/definitions/bxnTestnet.d.ts +1 -1
- package/_types/chains/definitions/cannon.d.ts +1 -1
- package/_types/chains/definitions/chang.d.ts +1 -1
- package/_types/chains/definitions/chips.d.ts +1 -1
- package/_types/chains/definitions/citreaTestnet.d.ts +1 -1
- package/_types/chains/definitions/classic.d.ts +1 -1
- package/_types/chains/definitions/coinbit.d.ts +1 -1
- package/_types/chains/definitions/coinex.d.ts +1 -1
- package/_types/chains/definitions/creditCoin3Mainnet.d.ts +1 -1
- package/_types/chains/definitions/creditCoin3Testnet.d.ts +1 -1
- package/_types/chains/definitions/cronoszkEVMTestnet.d.ts +1 -1
- package/_types/chains/definitions/crossfi.d.ts +1 -1
- package/_types/chains/definitions/curtis.d.ts +1 -1
- package/_types/chains/definitions/dailyNetwork.d.ts +1 -1
- package/_types/chains/definitions/dailyNetworkTestnet.d.ts +1 -1
- package/_types/chains/definitions/dbkchain.d.ts +1 -1
- package/_types/chains/definitions/degen.d.ts +1 -1
- package/_types/chains/definitions/diode.d.ts +1 -1
- package/_types/chains/definitions/disChain.d.ts +1 -1
- package/_types/chains/definitions/dodochainTestnet.d.ts +1 -1
- package/_types/chains/definitions/dreyerxMainnet.d.ts +1 -1
- package/_types/chains/definitions/dreyerxTestnet.d.ts +1 -1
- package/_types/chains/definitions/dymension.d.ts +1 -1
- package/_types/chains/definitions/edexa.d.ts +1 -1
- package/_types/chains/definitions/edexaTestnet.d.ts +1 -1
- package/_types/chains/definitions/edgeless.d.ts +1 -1
- package/_types/chains/definitions/edgelessTestnet.d.ts +1 -1
- package/_types/chains/definitions/edgewareTestnet.d.ts +1 -1
- package/_types/chains/definitions/eduChain.d.ts +1 -1
- package/_types/chains/definitions/ekta.d.ts +1 -1
- package/_types/chains/definitions/ektaTestnet.d.ts +1 -1
- package/_types/chains/definitions/elastos.d.ts +1 -1
- package/_types/chains/definitions/elastosTestnet.d.ts +1 -1
- package/_types/chains/definitions/electroneum.d.ts +1 -1
- package/_types/chains/definitions/electroneumTestnet.d.ts +1 -1
- package/_types/chains/definitions/energy.d.ts +1 -1
- package/_types/chains/definitions/enuls.d.ts +1 -1
- package/_types/chains/definitions/etherlinkTestnet.d.ts +1 -1
- package/_types/chains/definitions/etp.d.ts +1 -1
- package/_types/chains/definitions/evmos.d.ts +1 -1
- package/_types/chains/definitions/evmosTestnet.d.ts +1 -1
- package/_types/chains/definitions/exSat.d.ts +1 -1
- package/_types/chains/definitions/exSatTestnet.d.ts +1 -1
- package/_types/chains/definitions/excelonMainnet.d.ts +1 -1
- package/_types/chains/definitions/expanse.d.ts +1 -1
- package/_types/chains/definitions/fantomSonicTestnet.d.ts +1 -1
- package/_types/chains/definitions/fibo.d.ts +1 -1
- package/_types/chains/definitions/filecoinCalibration.d.ts +1 -1
- package/_types/chains/definitions/filecoinHyperspace.d.ts +1 -1
- package/_types/chains/definitions/flareTestnet.d.ts +1 -1
- package/_types/chains/definitions/fluentTestnet.d.ts +1 -1
- package/_types/chains/definitions/forta.d.ts +1 -1
- package/_types/chains/definitions/foundry.d.ts +1 -1
- package/_types/chains/definitions/fuseSparknet.d.ts +1 -1
- package/_types/chains/definitions/genesys.d.ts +1 -1
- package/_types/chains/definitions/glideL1Protocol.d.ts +1 -1
- package/_types/chains/definitions/glideL2Protocol.d.ts +1 -1
- package/_types/chains/definitions/goChain.d.ts +1 -1
- package/_types/chains/definitions/graphite.d.ts +1 -1
- package/_types/chains/definitions/graphiteTestnet.d.ts +1 -1
- package/_types/chains/definitions/guruTestnet.d.ts +1 -1
- package/_types/chains/definitions/ham.d.ts +1 -1
- package/_types/chains/definitions/haqqMainnet.d.ts +1 -1
- package/_types/chains/definitions/haqqTestedge2.d.ts +1 -1
- package/_types/chains/definitions/hardhat.d.ts +1 -1
- package/_types/chains/definitions/hashkeyChainTestnet.d.ts +1 -1
- package/_types/chains/definitions/haustTestnet.d.ts +1 -1
- package/_types/chains/definitions/hedera.d.ts +1 -1
- package/_types/chains/definitions/hederaPreviewnet.d.ts +1 -1
- package/_types/chains/definitions/hederaTestnet.d.ts +1 -1
- package/_types/chains/definitions/hela.d.ts +1 -1
- package/_types/chains/definitions/hemi.d.ts +1 -1
- package/_types/chains/definitions/hemiSepolia.d.ts +1 -1
- package/_types/chains/definitions/hpb.d.ts +1 -1
- package/_types/chains/definitions/huddle01Mainnet.d.ts +1 -1
- package/_types/chains/definitions/huddle01Testnet.d.ts +1 -1
- package/_types/chains/definitions/humanity.d.ts +1 -1
- package/_types/chains/definitions/humanityTestnet.d.ts +1 -1
- package/_types/chains/definitions/hychain.d.ts +1 -1
- package/_types/chains/definitions/hychainTestnet.d.ts +1 -1
- package/_types/chains/definitions/hyperliquidEvmTestnet.d.ts +1 -1
- package/_types/chains/definitions/iSunCoin.d.ts +1 -1
- package/_types/chains/definitions/idchain.d.ts +1 -1
- package/_types/chains/definitions/iotaTestnet.d.ts +1 -1
- package/_types/chains/definitions/jocMainnet.d.ts +1 -1
- package/_types/chains/definitions/jocTestnet.d.ts +1 -1
- package/_types/chains/definitions/juneo.d.ts +1 -1
- package/_types/chains/definitions/juneoBCH1Chain.d.ts +1 -1
- package/_types/chains/definitions/juneoDAI1Chain.d.ts +1 -1
- package/_types/chains/definitions/juneoDOGE1Chain.d.ts +1 -1
- package/_types/chains/definitions/juneoEUR1Chain.d.ts +1 -1
- package/_types/chains/definitions/juneoGLD1Chain.d.ts +1 -1
- package/_types/chains/definitions/juneoLINK1Chain.d.ts +1 -1
- package/_types/chains/definitions/juneoLTC1Chain.d.ts +1 -1
- package/_types/chains/definitions/juneoSGD1Chain.d.ts +1 -1
- package/_types/chains/definitions/juneoSocotraTestnet.d.ts +1 -1
- package/_types/chains/definitions/juneoUSD1Chain.d.ts +1 -1
- package/_types/chains/definitions/juneoUSDT1Chain.d.ts +1 -1
- package/_types/chains/definitions/juneomBTC1Chain.d.ts +1 -1
- package/_types/chains/definitions/kakarotSepolia.d.ts +1 -1
- package/_types/chains/definitions/kakarotStarknetSepolia.d.ts +1 -1
- package/_types/chains/definitions/kardiaChain.d.ts +1 -1
- package/_types/chains/definitions/karura.d.ts +1 -1
- package/_types/chains/definitions/katana.d.ts +1 -1
- package/_types/chains/definitions/kinto.d.ts +1 -1
- package/_types/chains/definitions/l3x.d.ts +1 -1
- package/_types/chains/definitions/l3xTestnet.d.ts +1 -1
- package/_types/chains/definitions/lavita.d.ts +1 -1
- package/_types/chains/definitions/lens.d.ts +1 -1
- package/_types/chains/definitions/lensTestnet.d.ts +1 -1
- package/_types/chains/definitions/lestnet.d.ts +1 -1
- package/_types/chains/definitions/localhost.d.ts +1 -1
- package/_types/chains/definitions/loop.d.ts +1 -1
- package/_types/chains/definitions/lumoz.d.ts +1 -1
- package/_types/chains/definitions/lumozTestnet.d.ts +1 -1
- package/_types/chains/definitions/lycan.d.ts +1 -1
- package/_types/chains/definitions/mandala.d.ts +1 -1
- package/_types/chains/definitions/mantraDuKongEVMTestnet.d.ts +1 -1
- package/_types/chains/definitions/mapProtocol.d.ts +1 -1
- package/_types/chains/definitions/matchain.d.ts +1 -1
- package/_types/chains/definitions/matchainTestnet.d.ts +1 -1
- package/_types/chains/definitions/mchVerse.d.ts +1 -1
- package/_types/chains/definitions/mekong.d.ts +1 -1
- package/_types/chains/definitions/memecore.d.ts +1 -1
- package/_types/chains/definitions/memecoreFormicariumTestnet.d.ts +1 -1
- package/_types/chains/definitions/merlin.d.ts +1 -1
- package/_types/chains/definitions/merlinErigonTestnet.d.ts +1 -1
- package/_types/chains/definitions/metadium.d.ts +1 -1
- package/_types/chains/definitions/meter.d.ts +1 -1
- package/_types/chains/definitions/meterTestnet.d.ts +1 -1
- package/_types/chains/definitions/mint.d.ts +1 -1
- package/_types/chains/definitions/mintSepoliaTestnet.d.ts +1 -1
- package/_types/chains/definitions/mitosisTestnet.d.ts +1 -1
- package/_types/chains/definitions/moonbeamDev.d.ts +1 -1
- package/_types/chains/definitions/morphHolesky.d.ts +1 -1
- package/_types/chains/definitions/morphSepolia.d.ts +1 -1
- package/_types/chains/definitions/nahmii.d.ts +1 -1
- package/_types/chains/definitions/nautilus.d.ts +1 -1
- package/_types/chains/definitions/near.d.ts +1 -1
- package/_types/chains/definitions/nearTestnet.d.ts +1 -1
- package/_types/chains/definitions/neoxMainnet.d.ts +1 -1
- package/_types/chains/definitions/neoxT4.d.ts +1 -1
- package/_types/chains/definitions/newton.d.ts +1 -1
- package/_types/chains/definitions/oasisTestnet.d.ts +1 -1
- package/_types/chains/definitions/oasys.d.ts +1 -1
- package/_types/chains/definitions/odysseyTestnet.d.ts +1 -1
- package/_types/chains/definitions/omax.d.ts +1 -1
- package/_types/chains/definitions/omni.d.ts +1 -1
- package/_types/chains/definitions/omniOmega.d.ts +1 -1
- package/_types/chains/definitions/oneWorld.d.ts +1 -1
- package/_types/chains/definitions/oortmainnetDev.d.ts +1 -1
- package/_types/chains/definitions/openledger.d.ts +1 -1
- package/_types/chains/definitions/optopia.d.ts +1 -1
- package/_types/chains/definitions/optopiaTestnet.d.ts +1 -1
- package/_types/chains/definitions/orderly.d.ts +1 -1
- package/_types/chains/definitions/orderlySepolia.d.ts +1 -1
- package/_types/chains/definitions/plasmaTestnet.d.ts +1 -1
- package/_types/chains/definitions/premiumBlock.d.ts +1 -1
- package/_types/chains/definitions/pumpfiTestnet.d.ts +1 -1
- package/_types/chains/definitions/qMainnet.d.ts +1 -1
- package/_types/chains/definitions/qTestnet.d.ts +1 -1
- package/_types/chains/definitions/redbellyMainnet.d.ts +1 -1
- package/_types/chains/definitions/redbellyTestnet.d.ts +1 -1
- package/_types/chains/definitions/reddioSepolia.d.ts +1 -1
- package/_types/chains/definitions/rei.d.ts +1 -1
- package/_types/chains/definitions/reyaNetwork.d.ts +1 -1
- package/_types/chains/definitions/rivalz.d.ts +1 -1
- package/_types/chains/definitions/saakuru.d.ts +1 -1
- package/_types/chains/definitions/sapphireTestnet.d.ts +1 -1
- package/_types/chains/definitions/satoshivm.d.ts +1 -1
- package/_types/chains/definitions/satoshivmTestnet.d.ts +1 -1
- package/_types/chains/definitions/seiDevnet.d.ts +1 -1
- package/_types/chains/definitions/seismicDevnet.d.ts +1 -1
- package/_types/chains/definitions/shardeum.d.ts +1 -1
- package/_types/chains/definitions/shardeumSphinx.d.ts +1 -1
- package/_types/chains/definitions/shiden.d.ts +1 -1
- package/_types/chains/definitions/shimmer.d.ts +1 -1
- package/_types/chains/definitions/shimmerTestnet.d.ts +1 -1
- package/_types/chains/definitions/sidra.d.ts +1 -1
- package/_types/chains/definitions/silicon.d.ts +1 -1
- package/_types/chains/definitions/siliconSepolia.d.ts +1 -1
- package/_types/chains/definitions/sixProtocol.d.ts +1 -1
- package/_types/chains/definitions/sketchpad.d.ts +1 -1
- package/_types/chains/definitions/songbirdTestnet.d.ts +1 -1
- package/_types/chains/definitions/sonicTestnet.d.ts +1 -1
- package/_types/chains/definitions/sovaSepolia.d.ts +1 -1
- package/_types/chains/definitions/spicy.d.ts +1 -1
- package/_types/chains/definitions/step.d.ts +1 -1
- package/_types/chains/definitions/storyOdyssey.d.ts +1 -1
- package/_types/chains/definitions/storyTestnet.d.ts +1 -1
- package/_types/chains/definitions/stratis.d.ts +1 -1
- package/_types/chains/definitions/superlumio.d.ts +1 -1
- package/_types/chains/definitions/swan.d.ts +1 -1
- package/_types/chains/definitions/swanProximaTestnet.d.ts +1 -1
- package/_types/chains/definitions/swanSaturnTestnet.d.ts +1 -1
- package/_types/chains/definitions/swissdlt.d.ts +1 -1
- package/_types/chains/definitions/taikoKatla.d.ts +1 -1
- package/_types/chains/definitions/taikoTestnetSepolia.d.ts +1 -1
- package/_types/chains/definitions/taraxa.d.ts +1 -1
- package/_types/chains/definitions/taraxaTestnet.d.ts +1 -1
- package/_types/chains/definitions/telcoinTestnet.d.ts +1 -1
- package/_types/chains/definitions/telosTestnet.d.ts +1 -1
- package/_types/chains/definitions/tenet.d.ts +1 -1
- package/_types/chains/definitions/ternoa.d.ts +1 -1
- package/_types/chains/definitions/that.d.ts +1 -1
- package/_types/chains/definitions/theta.d.ts +1 -1
- package/_types/chains/definitions/thetaTestnet.d.ts +1 -1
- package/_types/chains/definitions/thunderTestnet.d.ts +1 -1
- package/_types/chains/definitions/tiktrixTestnet.d.ts +1 -1
- package/_types/chains/definitions/tomb.d.ts +1 -1
- package/_types/chains/definitions/tron.d.ts +1 -1
- package/_types/chains/definitions/tronShasta.d.ts +1 -1
- package/_types/chains/definitions/ubiq.d.ts +1 -1
- package/_types/chains/definitions/ultra.d.ts +1 -1
- package/_types/chains/definitions/ultraTestnet.d.ts +1 -1
- package/_types/chains/definitions/ultron.d.ts +1 -1
- package/_types/chains/definitions/ultronTestnet.d.ts +1 -1
- package/_types/chains/definitions/unique.d.ts +1 -1
- package/_types/chains/definitions/uniqueOpal.d.ts +1 -1
- package/_types/chains/definitions/uniqueQuartz.d.ts +1 -1
- package/_types/chains/definitions/vanar.d.ts +1 -1
- package/_types/chains/definitions/vechain.d.ts +1 -1
- package/_types/chains/definitions/viction.d.ts +1 -1
- package/_types/chains/definitions/vision.d.ts +1 -1
- package/_types/chains/definitions/visionTestnet.d.ts +1 -1
- package/_types/chains/definitions/weavevmAlphanet.d.ts +1 -1
- package/_types/chains/definitions/wemix.d.ts +1 -1
- package/_types/chains/definitions/wemixTestnet.d.ts +1 -1
- package/_types/chains/definitions/westendAssetHub.d.ts +1 -1
- package/_types/chains/definitions/whitechainTestnet.d.ts +1 -1
- package/_types/chains/definitions/wmcTestnet.d.ts +1 -1
- package/_types/chains/definitions/worldLand.d.ts +1 -1
- package/_types/chains/definitions/xaiTestnet.d.ts +1 -1
- package/_types/chains/definitions/xphereMainnet.d.ts +1 -1
- package/_types/chains/definitions/xphereTestnet.d.ts +1 -1
- package/_types/chains/definitions/xrOne.d.ts +1 -1
- package/_types/chains/definitions/xrSepolia.d.ts +1 -1
- package/_types/chains/definitions/yooldoVerse.d.ts +1 -1
- package/_types/chains/definitions/yooldoVerseTestnet.d.ts +1 -1
- package/_types/chains/definitions/zeniq.d.ts +1 -1
- package/_types/chains/definitions/zeroNetwork.d.ts +1 -1
- package/_types/chains/definitions/zhejiang.d.ts +1 -1
- package/_types/chains/definitions/zilliqa.d.ts +1 -1
- package/_types/chains/definitions/zilliqaTestnet.d.ts +1 -1
- package/_types/chains/definitions/zkFairTestnet.d.ts +1 -1
- package/_types/chains/definitions/zkLinkNova.d.ts +1 -1
- package/_types/chains/definitions/zkLinkNovaSepoliaTestnet.d.ts +1 -1
- package/_types/chains/definitions/zksync.d.ts +1 -1
- package/_types/chains/definitions/zksyncInMemoryNode.d.ts +1 -1
- package/_types/chains/definitions/zksyncLocalCustomHyperchain.d.ts +1 -1
- package/_types/chains/definitions/zksyncLocalHyperchain.d.ts +1 -1
- package/_types/chains/definitions/zksyncLocalHyperchainL1.d.ts +1 -1
- package/_types/chains/definitions/zksyncLocalNode.d.ts +1 -1
- package/_types/chains/definitions/zksyncSepoliaTestnet.d.ts +1 -1
- package/_types/constants/abis.d.ts +2 -2
- package/_types/constants/abis.d.ts.map +1 -1
- package/_types/constants/contracts.d.ts +1 -1
- package/_types/constants/contracts.d.ts.map +1 -1
- package/_types/errors/version.d.ts +1 -1
- package/_types/index.d.ts +9 -2
- package/_types/index.d.ts.map +1 -1
- package/_types/types/chain.d.ts +1 -1
- package/_types/types/chain.d.ts.map +1 -1
- package/_types/utils/index.d.ts +3 -0
- package/_types/utils/index.d.ts.map +1 -1
- package/_types/utils/signature/isErc8010Signature.d.ts +8 -0
- package/_types/utils/signature/isErc8010Signature.d.ts.map +1 -0
- package/_types/utils/signature/parseErc8010Signature.d.ts +30 -0
- package/_types/utils/signature/parseErc8010Signature.d.ts.map +1 -0
- package/_types/utils/signature/serializeErc8010Signature.d.ts +27 -0
- package/_types/utils/signature/serializeErc8010Signature.d.ts.map +1 -0
- package/actions/public/verifyHash.ts +304 -61
- package/chains/definitions/abstract.ts +1 -1
- package/chains/definitions/abstractTestnet.ts +1 -1
- package/chains/definitions/zksync.ts +1 -1
- package/chains/definitions/zksyncSepoliaTestnet.ts +1 -1
- package/constants/abis.ts +2 -2
- package/constants/contracts.ts +1 -1
- package/errors/version.ts +1 -1
- package/index.ts +24 -2
- package/package.json +2 -2
- package/types/chain.ts +1 -1
- package/utils/index.ts +18 -0
- package/utils/signature/isErc8010Signature.ts +14 -0
- package/utils/signature/parseErc8010Signature.ts +67 -0
- package/utils/signature/serializeErc8010Signature.ts +53 -0
@@ -1,10 +1,22 @@
|
|
1
1
|
import type { Address } from 'abitype'
|
2
|
+
import * as SignatureErc6492 from 'ox/erc6492/SignatureErc6492'
|
3
|
+
import * as SignatureErc8010 from 'ox/erc8010/SignatureErc8010'
|
2
4
|
|
3
5
|
import type { Client } from '../../clients/createClient.js'
|
4
6
|
import type { Transport } from '../../clients/transports/createTransport.js'
|
5
|
-
import {
|
6
|
-
|
7
|
-
|
7
|
+
import {
|
8
|
+
erc1271Abi,
|
9
|
+
erc6492SignatureValidatorAbi,
|
10
|
+
multicall3Abi,
|
11
|
+
} from '../../constants/abis.js'
|
12
|
+
import {
|
13
|
+
erc6492SignatureValidatorByteCode,
|
14
|
+
multicall3Bytecode,
|
15
|
+
} from '../../constants/contracts.js'
|
16
|
+
import {
|
17
|
+
CallExecutionError,
|
18
|
+
ContractFunctionExecutionError,
|
19
|
+
} from '../../errors/contract.js'
|
8
20
|
import type { InvalidHexBooleanError } from '../../errors/encoding.js'
|
9
21
|
import type { ErrorType } from '../../errors/utils.js'
|
10
22
|
import type { Chain } from '../../types/chain.js'
|
@@ -14,17 +26,40 @@ import {
|
|
14
26
|
type EncodeDeployDataErrorType,
|
15
27
|
encodeDeployData,
|
16
28
|
} from '../../utils/abi/encodeDeployData.js'
|
17
|
-
import {
|
18
|
-
|
29
|
+
import {
|
30
|
+
type EncodeFunctionDataErrorType,
|
31
|
+
encodeFunctionData,
|
32
|
+
} from '../../utils/abi/encodeFunctionData.js'
|
33
|
+
import {
|
34
|
+
type GetAddressErrorType,
|
35
|
+
getAddress,
|
36
|
+
} from '../../utils/address/getAddress.js'
|
37
|
+
import {
|
38
|
+
type IsAddressEqualErrorType,
|
39
|
+
isAddressEqual,
|
40
|
+
} from '../../utils/address/isAddressEqual.js'
|
41
|
+
import { verifyAuthorization } from '../../utils/authorization/verifyAuthorization.js'
|
42
|
+
import { type ConcatHexErrorType, concatHex } from '../../utils/data/concat.js'
|
19
43
|
import { type IsHexErrorType, isHex } from '../../utils/data/isHex.js'
|
20
|
-
import {
|
44
|
+
import { hexToBool } from '../../utils/encoding/fromHex.js'
|
45
|
+
import {
|
46
|
+
type BytesToHexErrorType,
|
47
|
+
bytesToHex,
|
48
|
+
type NumberToHexErrorType,
|
49
|
+
numberToHex,
|
50
|
+
} from '../../utils/encoding/toHex.js'
|
21
51
|
import { getAction } from '../../utils/getAction.js'
|
22
|
-
import {
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
import {
|
52
|
+
import {
|
53
|
+
type RecoverAddressErrorType,
|
54
|
+
recoverAddress,
|
55
|
+
} from '../../utils/signature/recoverAddress.js'
|
56
|
+
import {
|
57
|
+
type SerializeSignatureErrorType,
|
58
|
+
serializeSignature,
|
59
|
+
} from '../../utils/signature/serializeSignature.js'
|
27
60
|
import { type CallErrorType, type CallParameters, call } from './call.js'
|
61
|
+
import { type GetCodeErrorType, getCode } from './getCode.js'
|
62
|
+
import { type ReadContractErrorType, readContract } from './readContract.js'
|
28
63
|
|
29
64
|
export type VerifyHashParameters = Pick<
|
30
65
|
CallParameters,
|
@@ -32,22 +67,36 @@ export type VerifyHashParameters = Pick<
|
|
32
67
|
> & {
|
33
68
|
/** The address that signed the original message. */
|
34
69
|
address: Address
|
70
|
+
/** The address of the ERC-6492 signature verifier contract. */
|
71
|
+
erc6492VerifierAddress?: Address | undefined
|
35
72
|
/** The hash to be verified. */
|
36
73
|
hash: Hex
|
74
|
+
/** Multicall3 address for ERC-8010 verification. */
|
75
|
+
multicallAddress?: Address | undefined
|
37
76
|
/** The signature that was generated by signing the message with the address's private key. */
|
38
77
|
signature: Hex | ByteArray | Signature
|
78
|
+
/** @deprecated use `erc6492VerifierAddress` instead. */
|
39
79
|
universalSignatureVerifierAddress?: Address | undefined
|
40
80
|
} & OneOf<{ factory: Address; factoryData: Hex } | {}>
|
41
81
|
|
42
82
|
export type VerifyHashReturnType = boolean
|
43
83
|
|
44
84
|
export type VerifyHashErrorType =
|
85
|
+
| BytesToHexErrorType
|
45
86
|
| CallErrorType
|
46
|
-
|
|
47
|
-
| ToHexErrorType
|
48
|
-
| InvalidHexBooleanError
|
87
|
+
| ConcatHexErrorType
|
49
88
|
| EncodeDeployDataErrorType
|
89
|
+
| EncodeFunctionDataErrorType
|
50
90
|
| ErrorType
|
91
|
+
| GetAddressErrorType
|
92
|
+
| GetCodeErrorType
|
93
|
+
| InvalidHexBooleanError
|
94
|
+
| IsAddressEqualErrorType
|
95
|
+
| IsHexErrorType
|
96
|
+
| NumberToHexErrorType
|
97
|
+
| ReadContractErrorType
|
98
|
+
| RecoverAddressErrorType
|
99
|
+
| SerializeSignatureErrorType
|
51
100
|
|
52
101
|
/**
|
53
102
|
* Verifies a message hash onchain using ERC-6492.
|
@@ -62,62 +111,34 @@ export async function verifyHash<chain extends Chain | undefined>(
|
|
62
111
|
): Promise<VerifyHashReturnType> {
|
63
112
|
const {
|
64
113
|
address,
|
65
|
-
factory,
|
66
|
-
factoryData,
|
67
114
|
hash,
|
68
|
-
|
69
|
-
|
70
|
-
?.
|
71
|
-
|
115
|
+
erc6492VerifierAddress:
|
116
|
+
verifierAddress = parameters.universalSignatureVerifierAddress ??
|
117
|
+
client.chain?.contracts?.erc6492Verifier?.address,
|
118
|
+
multicallAddress = parameters.multicallAddress ??
|
119
|
+
client.chain?.contracts?.multicall3?.address,
|
72
120
|
} = parameters
|
73
121
|
|
74
|
-
const
|
122
|
+
const signature = (() => {
|
123
|
+
const signature = parameters.signature
|
75
124
|
if (isHex(signature)) return signature
|
76
125
|
if (typeof signature === 'object' && 'r' in signature && 's' in signature)
|
77
126
|
return serializeSignature(signature)
|
78
127
|
return bytesToHex(signature)
|
79
128
|
})()
|
80
129
|
|
81
|
-
const wrappedSignature = await (async () => {
|
82
|
-
// If no `factory` or `factoryData` is provided, it is assumed that the
|
83
|
-
// address is not a Smart Account, or the Smart Account is already deployed.
|
84
|
-
if (!factory && !factoryData) return signatureHex
|
85
|
-
|
86
|
-
// If the signature is already wrapped, return the signature.
|
87
|
-
if (isErc6492Signature(signatureHex)) return signatureHex
|
88
|
-
|
89
|
-
// If the Smart Account is not deployed, wrap the signature with a 6492 wrapper
|
90
|
-
// to perform counterfactual validation.
|
91
|
-
return serializeErc6492Signature({
|
92
|
-
address: factory!,
|
93
|
-
data: factoryData!,
|
94
|
-
signature: signatureHex,
|
95
|
-
})
|
96
|
-
})()
|
97
|
-
|
98
130
|
try {
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
data: encodeDeployData({
|
111
|
-
abi: universalSignatureValidatorAbi,
|
112
|
-
args: [address, hash, wrappedSignature],
|
113
|
-
bytecode: universalSignatureValidatorByteCode,
|
114
|
-
}),
|
115
|
-
...rest,
|
116
|
-
} as unknown as CallParameters)
|
117
|
-
|
118
|
-
const { data } = await getAction(client, call, 'call')(args)
|
119
|
-
|
120
|
-
return hexToBool(data ?? '0x0')
|
131
|
+
if (SignatureErc8010.validate(signature))
|
132
|
+
return await verifyErc8010(client, {
|
133
|
+
...parameters,
|
134
|
+
multicallAddress,
|
135
|
+
signature,
|
136
|
+
})
|
137
|
+
return await verifyErc6492(client, {
|
138
|
+
...parameters,
|
139
|
+
verifierAddress,
|
140
|
+
signature,
|
141
|
+
})
|
121
142
|
} catch (error) {
|
122
143
|
// Fallback attempt to verify the signature via ECDSA recovery.
|
123
144
|
try {
|
@@ -128,7 +149,7 @@ export async function verifyHash<chain extends Chain | undefined>(
|
|
128
149
|
if (verified) return true
|
129
150
|
} catch {}
|
130
151
|
|
131
|
-
if (error instanceof
|
152
|
+
if (error instanceof VerificationError) {
|
132
153
|
// if the execution fails, the signature was not valid and an internal method inside of the validator reverted
|
133
154
|
// this can happen for many reasons, for example if signer can not be recovered from the signature
|
134
155
|
// or if the signature has no valid format
|
@@ -138,3 +159,225 @@ export async function verifyHash<chain extends Chain | undefined>(
|
|
138
159
|
throw error
|
139
160
|
}
|
140
161
|
}
|
162
|
+
|
163
|
+
/** @internal */
|
164
|
+
export async function verifyErc8010(
|
165
|
+
client: Client,
|
166
|
+
parameters: verifyErc8010.Parameters,
|
167
|
+
) {
|
168
|
+
const { address, blockNumber, blockTag, hash, multicallAddress } = parameters
|
169
|
+
|
170
|
+
const {
|
171
|
+
authorization: authorization_ox,
|
172
|
+
data: initData,
|
173
|
+
signature,
|
174
|
+
to,
|
175
|
+
} = SignatureErc8010.unwrap(parameters.signature)
|
176
|
+
|
177
|
+
// Check if already delegated
|
178
|
+
const code = await getCode(client, {
|
179
|
+
address,
|
180
|
+
blockNumber,
|
181
|
+
blockTag,
|
182
|
+
} as never)
|
183
|
+
|
184
|
+
// If already delegated, perform standard ERC-1271 verification.
|
185
|
+
if (code === concatHex(['0xef0100', authorization_ox.address]))
|
186
|
+
return await verifyErc1271(client, {
|
187
|
+
address,
|
188
|
+
blockNumber,
|
189
|
+
blockTag,
|
190
|
+
hash,
|
191
|
+
signature,
|
192
|
+
})
|
193
|
+
|
194
|
+
const authorization = {
|
195
|
+
address: authorization_ox.address,
|
196
|
+
chainId: Number(authorization_ox.chainId),
|
197
|
+
nonce: Number(authorization_ox.nonce),
|
198
|
+
r: numberToHex(authorization_ox.r, { size: 32 }),
|
199
|
+
s: numberToHex(authorization_ox.s, { size: 32 }),
|
200
|
+
yParity: authorization_ox.yParity,
|
201
|
+
} as const
|
202
|
+
|
203
|
+
const valid = await verifyAuthorization({
|
204
|
+
address,
|
205
|
+
authorization,
|
206
|
+
})
|
207
|
+
if (!valid) throw new VerificationError()
|
208
|
+
|
209
|
+
// Deployless verification.
|
210
|
+
const results = await getAction(
|
211
|
+
client,
|
212
|
+
readContract,
|
213
|
+
'readContract',
|
214
|
+
)({
|
215
|
+
...(multicallAddress
|
216
|
+
? { address: multicallAddress }
|
217
|
+
: { code: multicall3Bytecode }),
|
218
|
+
authorizationList: [authorization],
|
219
|
+
abi: multicall3Abi,
|
220
|
+
blockNumber,
|
221
|
+
blockTag: 'pending',
|
222
|
+
functionName: 'aggregate3',
|
223
|
+
args: [
|
224
|
+
[
|
225
|
+
...(initData
|
226
|
+
? [
|
227
|
+
{
|
228
|
+
allowFailure: true,
|
229
|
+
target: to ?? address,
|
230
|
+
callData: initData,
|
231
|
+
},
|
232
|
+
]
|
233
|
+
: []),
|
234
|
+
{
|
235
|
+
allowFailure: true,
|
236
|
+
target: address,
|
237
|
+
callData: encodeFunctionData({
|
238
|
+
abi: erc1271Abi,
|
239
|
+
functionName: 'isValidSignature',
|
240
|
+
args: [hash, signature],
|
241
|
+
}),
|
242
|
+
},
|
243
|
+
],
|
244
|
+
],
|
245
|
+
})
|
246
|
+
|
247
|
+
const data = results[results.length - 1]?.returnData
|
248
|
+
|
249
|
+
if (data?.startsWith('0x1626ba7e')) return true
|
250
|
+
throw new VerificationError()
|
251
|
+
}
|
252
|
+
|
253
|
+
export namespace verifyErc8010 {
|
254
|
+
export type Parameters = Pick<CallParameters, 'blockNumber' | 'blockTag'> & {
|
255
|
+
/** The address that signed the original message. */
|
256
|
+
address: Address
|
257
|
+
/** The hash to be verified. */
|
258
|
+
hash: Hex
|
259
|
+
/** Multicall3 address for ERC-8010 verification. */
|
260
|
+
multicallAddress?: Address | undefined
|
261
|
+
/** The signature that was generated by signing the message with the address's private key. */
|
262
|
+
signature: Hex
|
263
|
+
}
|
264
|
+
}
|
265
|
+
|
266
|
+
/** @internal */
|
267
|
+
// biome-ignore lint/correctness/noUnusedVariables: _
|
268
|
+
async function verifyErc6492(
|
269
|
+
client: Client,
|
270
|
+
parameters: verifyErc6492.Parameters,
|
271
|
+
) {
|
272
|
+
const {
|
273
|
+
address,
|
274
|
+
factory,
|
275
|
+
factoryData,
|
276
|
+
hash,
|
277
|
+
signature,
|
278
|
+
verifierAddress,
|
279
|
+
...rest
|
280
|
+
} = parameters
|
281
|
+
|
282
|
+
const wrappedSignature = await (async () => {
|
283
|
+
// If no `factory` or `factoryData` is provided, it is assumed that the
|
284
|
+
// address is not a Smart Account, or the Smart Account is already deployed.
|
285
|
+
if (!factory && !factoryData) return signature
|
286
|
+
|
287
|
+
// If the signature is already wrapped, return the signature.
|
288
|
+
if (SignatureErc6492.validate(signature)) return signature
|
289
|
+
|
290
|
+
// If the Smart Account is not deployed, wrap the signature with a 6492 wrapper
|
291
|
+
// to perform counterfactual validation.
|
292
|
+
return SignatureErc6492.wrap({
|
293
|
+
data: factoryData!,
|
294
|
+
signature,
|
295
|
+
to: factory!,
|
296
|
+
})
|
297
|
+
})()
|
298
|
+
|
299
|
+
const args = verifierAddress
|
300
|
+
? ({
|
301
|
+
to: verifierAddress,
|
302
|
+
data: encodeFunctionData({
|
303
|
+
abi: erc6492SignatureValidatorAbi,
|
304
|
+
functionName: 'isValidSig',
|
305
|
+
args: [address, hash, wrappedSignature],
|
306
|
+
}),
|
307
|
+
...rest,
|
308
|
+
} as unknown as CallParameters)
|
309
|
+
: ({
|
310
|
+
data: encodeDeployData({
|
311
|
+
abi: erc6492SignatureValidatorAbi,
|
312
|
+
args: [address, hash, wrappedSignature],
|
313
|
+
bytecode: erc6492SignatureValidatorByteCode,
|
314
|
+
}),
|
315
|
+
...rest,
|
316
|
+
} as unknown as CallParameters)
|
317
|
+
|
318
|
+
const { data } = await getAction(
|
319
|
+
client,
|
320
|
+
call,
|
321
|
+
'call',
|
322
|
+
)(args).catch((error) => {
|
323
|
+
if (error instanceof CallExecutionError) throw new VerificationError()
|
324
|
+
throw error
|
325
|
+
})
|
326
|
+
|
327
|
+
if (hexToBool(data ?? '0x0')) return true
|
328
|
+
throw new VerificationError()
|
329
|
+
}
|
330
|
+
|
331
|
+
export namespace verifyErc6492 {
|
332
|
+
export type Parameters = Pick<CallParameters, 'blockNumber' | 'blockTag'> & {
|
333
|
+
/** The address that signed the original message. */
|
334
|
+
address: Address
|
335
|
+
/** The hash to be verified. */
|
336
|
+
hash: Hex
|
337
|
+
/** The signature that was generated by signing the message with the address's private key. */
|
338
|
+
signature: Hex
|
339
|
+
/** The address of the ERC-6492 signature verifier contract. */
|
340
|
+
verifierAddress?: Address | undefined
|
341
|
+
} & OneOf<{ factory: Address; factoryData: Hex } | {}>
|
342
|
+
}
|
343
|
+
|
344
|
+
/** @internal */
|
345
|
+
export async function verifyErc1271(
|
346
|
+
client: Client,
|
347
|
+
parameters: verifyErc1271.Parameters,
|
348
|
+
) {
|
349
|
+
const { address, blockNumber, blockTag, hash, signature } = parameters
|
350
|
+
|
351
|
+
const result = await getAction(
|
352
|
+
client,
|
353
|
+
readContract,
|
354
|
+
'readContract',
|
355
|
+
)({
|
356
|
+
address,
|
357
|
+
abi: erc1271Abi,
|
358
|
+
args: [hash, signature],
|
359
|
+
blockNumber,
|
360
|
+
blockTag,
|
361
|
+
functionName: 'isValidSignature',
|
362
|
+
}).catch((error) => {
|
363
|
+
if (error instanceof ContractFunctionExecutionError)
|
364
|
+
throw new VerificationError()
|
365
|
+
throw error
|
366
|
+
})
|
367
|
+
|
368
|
+
if (result.startsWith('0x1626ba7e')) return true
|
369
|
+
throw new VerificationError()
|
370
|
+
}
|
371
|
+
|
372
|
+
export namespace verifyErc1271 {
|
373
|
+
export type Parameters = Pick<CallParameters, 'blockNumber' | 'blockTag'> & {
|
374
|
+
/** The address that signed the original message. */
|
375
|
+
address: Address
|
376
|
+
/** The hash to be verified. */
|
377
|
+
hash: Hex
|
378
|
+
/** The signature that was generated by signing the message with the address's private key. */
|
379
|
+
signature: Hex
|
380
|
+
}
|
381
|
+
}
|
382
|
+
|
383
|
+
class VerificationError extends Error {}
|
@@ -31,7 +31,7 @@ export const abstract = /*#__PURE__*/ defineChain({
|
|
31
31
|
address: '0xAa4De41dba0Ca5dCBb288b7cC6b708F3aaC759E7',
|
32
32
|
blockCreated: 5288,
|
33
33
|
},
|
34
|
-
|
34
|
+
erc6492Verifier: {
|
35
35
|
address: '0xfB688330379976DA81eB64Fe4BF50d7401763B9C',
|
36
36
|
blockCreated: 5263,
|
37
37
|
},
|
@@ -29,7 +29,7 @@ export const abstractTestnet = /*#__PURE__*/ defineChain({
|
|
29
29
|
address: '0xF9cda624FBC7e059355ce98a31693d299FACd963',
|
30
30
|
blockCreated: 358349,
|
31
31
|
},
|
32
|
-
|
32
|
+
erc6492Verifier: {
|
33
33
|
address: '0xfB688330379976DA81eB64Fe4BF50d7401763B9C',
|
34
34
|
blockCreated: 431682,
|
35
35
|
},
|
@@ -33,7 +33,7 @@ export const zksync = /*#__PURE__*/ defineChain({
|
|
33
33
|
multicall3: {
|
34
34
|
address: '0xF9cda624FBC7e059355ce98a31693d299FACd963',
|
35
35
|
},
|
36
|
-
|
36
|
+
erc6492Verifier: {
|
37
37
|
address: '0xfB688330379976DA81eB64Fe4BF50d7401763B9C',
|
38
38
|
blockCreated: 45659388,
|
39
39
|
},
|
@@ -29,7 +29,7 @@ export const zksyncSepoliaTestnet = /*#__PURE__*/ defineChain({
|
|
29
29
|
multicall3: {
|
30
30
|
address: '0xF9cda624FBC7e059355ce98a31693d299FACd963',
|
31
31
|
},
|
32
|
-
|
32
|
+
erc6492Verifier: {
|
33
33
|
address: '0xfB688330379976DA81eB64Fe4BF50d7401763B9C',
|
34
34
|
blockCreated: 3855712,
|
35
35
|
},
|
package/constants/abis.ts
CHANGED
@@ -274,7 +274,7 @@ export const addressResolverAbi = [
|
|
274
274
|
// ERC-1271
|
275
275
|
// isValidSignature(bytes32 hash, bytes signature) → bytes4 magicValue
|
276
276
|
/** @internal */
|
277
|
-
export const
|
277
|
+
export const erc1271Abi = [
|
278
278
|
{
|
279
279
|
name: 'isValidSignature',
|
280
280
|
type: 'function',
|
@@ -290,7 +290,7 @@ export const smartAccountAbi = [
|
|
290
290
|
// ERC-6492 - universal deployless signature validator contract
|
291
291
|
// constructor(address _signer, bytes32 _hash, bytes _signature) → bytes4 returnValue
|
292
292
|
// returnValue is either 0x1 (valid) or 0x0 (invalid)
|
293
|
-
export const
|
293
|
+
export const erc6492SignatureValidatorAbi = [
|
294
294
|
{
|
295
295
|
inputs: [
|
296
296
|
{
|
package/constants/contracts.ts
CHANGED
@@ -4,7 +4,7 @@ export const deploylessCallViaBytecodeBytecode =
|
|
4
4
|
export const deploylessCallViaFactoryBytecode =
|
5
5
|
'0x608060405234801561001057600080fd5b506040516102c03803806102c083398101604081905261002f916101e6565b836001600160a01b03163b6000036100e457600080836001600160a01b03168360405161005c9190610270565b6000604051808303816000865af19150503d8060008114610099576040519150601f19603f3d011682016040523d82523d6000602084013e61009e565b606091505b50915091508115806100b857506001600160a01b0386163b155b156100e1578060405163101bb98d60e01b81526004016100d8919061028c565b60405180910390fd5b50505b6000808451602086016000885af16040513d6000823e81610103573d81fd5b3d81f35b80516001600160a01b038116811461011e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561015457818101518382015260200161013c565b50506000910152565b600082601f83011261016e57600080fd5b81516001600160401b0381111561018757610187610123565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101b5576101b5610123565b6040528181528382016020018510156101cd57600080fd5b6101de826020830160208701610139565b949350505050565b600080600080608085870312156101fc57600080fd5b61020585610107565b60208601519094506001600160401b0381111561022157600080fd5b61022d8782880161015d565b93505061023c60408601610107565b60608601519092506001600160401b0381111561025857600080fd5b6102648782880161015d565b91505092959194509250565b60008251610282818460208701610139565b9190910192915050565b60208152600082518060208401526102ab816040850160208701610139565b601f01601f1916919091016040019291505056fe'
|
6
6
|
|
7
|
-
export const
|
7
|
+
export const erc6492SignatureValidatorByteCode =
|
8
8
|
'0x608060405234801561001057600080fd5b5060405161069438038061069483398101604081905261002f9161051e565b600061003c848484610048565b9050806000526001601ff35b60007f64926492649264926492649264926492649264926492649264926492649264926100748361040c565b036101e7576000606080848060200190518101906100929190610577565b60405192955090935091506000906001600160a01b038516906100b69085906105dd565b6000604051808303816000865af19150503d80600081146100f3576040519150601f19603f3d011682016040523d82523d6000602084013e6100f8565b606091505b50509050876001600160a01b03163b60000361016057806101605760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726556616c696461746f723a206465706c6f796d656e74000060448201526064015b60405180910390fd5b604051630b135d3f60e11b808252906001600160a01b038a1690631626ba7e90610190908b9087906004016105f9565b602060405180830381865afa1580156101ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d19190610633565b6001600160e01b03191614945050505050610405565b6001600160a01b0384163b1561027a57604051630b135d3f60e11b808252906001600160a01b03861690631626ba7e9061022790879087906004016105f9565b602060405180830381865afa158015610244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102689190610633565b6001600160e01b031916149050610405565b81516041146102df5760405162461bcd60e51b815260206004820152603a602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e6774680000000000006064820152608401610157565b6102e7610425565b5060208201516040808401518451859392600091859190811061030c5761030c61065d565b016020015160f81c9050601b811480159061032b57508060ff16601c14155b1561038c5760405162461bcd60e51b815260206004820152603b602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e617475726520762076616c756500000000006064820152608401610157565b60408051600081526020810180835289905260ff83169181019190915260608101849052608081018390526001600160a01b0389169060019060a0016020604051602081039080840390855afa1580156103ea573d6000803e3d6000fd5b505050602060405103516001600160a01b0316149450505050505b9392505050565b600060208251101561041d57600080fd5b508051015190565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461045857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561048c578181015183820152602001610474565b50506000910152565b600082601f8301126104a657600080fd5b81516001600160401b038111156104bf576104bf61045b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104ed576104ed61045b565b60405281815283820160200185101561050557600080fd5b610516826020830160208701610471565b949350505050565b60008060006060848603121561053357600080fd5b835161053e81610443565b6020850151604086015191945092506001600160401b0381111561056157600080fd5b61056d86828701610495565b9150509250925092565b60008060006060848603121561058c57600080fd5b835161059781610443565b60208501519093506001600160401b038111156105b357600080fd5b6105bf86828701610495565b604086015190935090506001600160401b0381111561056157600080fd5b600082516105ef818460208701610471565b9190910192915050565b828152604060208201526000825180604084015261061e816060850160208701610471565b601f01601f1916919091016060019392505050565b60006020828403121561064557600080fd5b81516001600160e01b03198116811461040557600080fd5b634e487b7160e01b600052603260045260246000fdfe5369676e617475726556616c696461746f72237265636f7665725369676e6572'
|
9
9
|
|
10
10
|
export const multicall3Bytecode =
|
package/errors/version.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export const version = '2.
|
1
|
+
export const version = '2.37.0'
|
package/index.ts
CHANGED
@@ -612,15 +612,19 @@ export {
|
|
612
612
|
erc721Abi,
|
613
613
|
erc1155Abi,
|
614
614
|
erc4626Abi,
|
615
|
+
erc6492SignatureValidatorAbi,
|
616
|
+
/** @deprecated use `erc6492SignatureValidatorAbi` instead. */
|
617
|
+
erc6492SignatureValidatorAbi as universalSignatureValidatorAbi,
|
615
618
|
multicall3Abi,
|
616
|
-
universalSignatureValidatorAbi,
|
617
619
|
} from './constants/abis.js'
|
618
620
|
export { ethAddress, zeroAddress } from './constants/address.js'
|
619
621
|
export { zeroHash } from './constants/bytes.js'
|
620
622
|
export {
|
621
623
|
deploylessCallViaBytecodeBytecode,
|
622
624
|
deploylessCallViaFactoryBytecode,
|
623
|
-
|
625
|
+
erc6492SignatureValidatorByteCode,
|
626
|
+
/** @deprecated use `erc6492SignatureValidatorByteCode` instead. */
|
627
|
+
erc6492SignatureValidatorByteCode as universalSignatureValidatorByteCode,
|
624
628
|
} from './constants/contracts.js'
|
625
629
|
export {
|
626
630
|
maxInt8,
|
@@ -1689,6 +1693,12 @@ export {
|
|
1689
1693
|
type IsErc6492SignatureReturnType,
|
1690
1694
|
isErc6492Signature,
|
1691
1695
|
} from './utils/signature/isErc6492Signature.js'
|
1696
|
+
export {
|
1697
|
+
type IsErc8010SignatureErrorType,
|
1698
|
+
type IsErc8010SignatureParameters,
|
1699
|
+
type IsErc8010SignatureReturnType,
|
1700
|
+
isErc8010Signature,
|
1701
|
+
} from './utils/signature/isErc8010Signature.js'
|
1692
1702
|
export {
|
1693
1703
|
/** @deprecated Use `ParseCompactSignatureErrorType`. */
|
1694
1704
|
type ParseCompactSignatureErrorType as HexToCompactSignatureErrorType,
|
@@ -1703,6 +1713,12 @@ export {
|
|
1703
1713
|
type ParseErc6492SignatureReturnType,
|
1704
1714
|
parseErc6492Signature,
|
1705
1715
|
} from './utils/signature/parseErc6492Signature.js'
|
1716
|
+
export {
|
1717
|
+
type ParseErc8010SignatureErrorType,
|
1718
|
+
type ParseErc8010SignatureParameters,
|
1719
|
+
type ParseErc8010SignatureReturnType,
|
1720
|
+
parseErc8010Signature,
|
1721
|
+
} from './utils/signature/parseErc8010Signature.js'
|
1706
1722
|
export {
|
1707
1723
|
/** @deprecated Use `ParseSignatureErrorType`. */
|
1708
1724
|
type ParseSignatureErrorType as HexToSignatureErrorType,
|
@@ -1755,6 +1771,12 @@ export {
|
|
1755
1771
|
type SerializeErc6492SignatureReturnType,
|
1756
1772
|
serializeErc6492Signature,
|
1757
1773
|
} from './utils/signature/serializeErc6492Signature.js'
|
1774
|
+
export {
|
1775
|
+
type SerializeErc8010SignatureErrorType,
|
1776
|
+
type SerializeErc8010SignatureParameters,
|
1777
|
+
type SerializeErc8010SignatureReturnType,
|
1778
|
+
serializeErc8010Signature,
|
1779
|
+
} from './utils/signature/serializeErc8010Signature.js'
|
1758
1780
|
export {
|
1759
1781
|
/** @deprecated Use `SignatureToHexErrorType` instead. */
|
1760
1782
|
type SerializeSignatureErrorType as SignatureToHexErrorType,
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "viem",
|
3
3
|
"description": "TypeScript Interface for Ethereum",
|
4
|
-
"version": "2.
|
4
|
+
"version": "2.37.0",
|
5
5
|
"main": "./_cjs/index.js",
|
6
6
|
"module": "./_esm/index.js",
|
7
7
|
"types": "./_types/index.d.ts",
|
@@ -201,7 +201,7 @@
|
|
201
201
|
"@scure/bip39": "1.6.0",
|
202
202
|
"abitype": "1.0.8",
|
203
203
|
"isows": "1.0.7",
|
204
|
-
"ox": "0.9.
|
204
|
+
"ox": "0.9.3",
|
205
205
|
"ws": "8.18.3"
|
206
206
|
},
|
207
207
|
"license": "MIT",
|
package/types/chain.ts
CHANGED
@@ -42,7 +42,7 @@ export type Chain<
|
|
42
42
|
ensRegistry?: ChainContract | undefined
|
43
43
|
ensUniversalResolver?: ChainContract | undefined
|
44
44
|
multicall3?: ChainContract | undefined
|
45
|
-
|
45
|
+
erc6492Verifier?: ChainContract | undefined
|
46
46
|
}
|
47
47
|
>
|
48
48
|
| undefined
|
package/utils/index.ts
CHANGED
@@ -441,12 +441,24 @@ export {
|
|
441
441
|
type IsErc6492SignatureReturnType,
|
442
442
|
isErc6492Signature,
|
443
443
|
} from './signature/isErc6492Signature.js'
|
444
|
+
export {
|
445
|
+
type IsErc8010SignatureErrorType,
|
446
|
+
type IsErc8010SignatureParameters,
|
447
|
+
type IsErc8010SignatureReturnType,
|
448
|
+
isErc8010Signature,
|
449
|
+
} from './signature/isErc8010Signature.js'
|
444
450
|
export {
|
445
451
|
type ParseErc6492SignatureErrorType,
|
446
452
|
type ParseErc6492SignatureParameters,
|
447
453
|
type ParseErc6492SignatureReturnType,
|
448
454
|
parseErc6492Signature,
|
449
455
|
} from './signature/parseErc6492Signature.js'
|
456
|
+
export {
|
457
|
+
type ParseErc8010SignatureErrorType,
|
458
|
+
type ParseErc8010SignatureParameters,
|
459
|
+
type ParseErc8010SignatureReturnType,
|
460
|
+
parseErc8010Signature,
|
461
|
+
} from './signature/parseErc8010Signature.js'
|
450
462
|
export {
|
451
463
|
type RecoverAddressErrorType,
|
452
464
|
type RecoverAddressParameters,
|
@@ -477,6 +489,12 @@ export {
|
|
477
489
|
type SerializeErc6492SignatureReturnType,
|
478
490
|
serializeErc6492Signature,
|
479
491
|
} from './signature/serializeErc6492Signature.js'
|
492
|
+
export {
|
493
|
+
type SerializeErc8010SignatureErrorType,
|
494
|
+
type SerializeErc8010SignatureParameters,
|
495
|
+
type SerializeErc8010SignatureReturnType,
|
496
|
+
serializeErc8010Signature,
|
497
|
+
} from './signature/serializeErc8010Signature.js'
|
480
498
|
export {
|
481
499
|
type VerifyHashErrorType,
|
482
500
|
type VerifyHashParameters,
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import * as SignatureErc8010 from 'ox/erc8010/SignatureErc8010'
|
2
|
+
import type { ErrorType } from '../../errors/utils.js'
|
3
|
+
import type { Hex } from '../../types/misc.js'
|
4
|
+
|
5
|
+
export type IsErc8010SignatureParameters = Hex
|
6
|
+
export type IsErc8010SignatureReturnType = boolean
|
7
|
+
export type IsErc8010SignatureErrorType = ErrorType
|
8
|
+
|
9
|
+
/** Whether or not the signature is an ERC-8010 formatted signature. */
|
10
|
+
export function isErc8010Signature(
|
11
|
+
signature: IsErc8010SignatureParameters,
|
12
|
+
): IsErc8010SignatureReturnType {
|
13
|
+
return SignatureErc8010.validate(signature)
|
14
|
+
}
|