crypto-aio 0.0.3 → 0.1.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 +17 -0
- package/README.md +144 -14
- package/dist/adapters/avalanche/address.d.ts +15 -0
- package/dist/adapters/avalanche/address.js +74 -0
- package/dist/adapters/avalanche/address.js.map +1 -0
- package/dist/adapters/avalanche/api.d.ts +100 -0
- package/dist/adapters/avalanche/api.js +381 -0
- package/dist/adapters/avalanche/api.js.map +1 -0
- package/dist/adapters/avalanche/builder.d.ts +13 -0
- package/dist/adapters/avalanche/builder.js +336 -0
- package/dist/adapters/avalanche/builder.js.map +1 -0
- package/dist/adapters/avalanche/cb58.d.ts +7 -0
- package/dist/adapters/avalanche/cb58.js +49 -0
- package/dist/adapters/avalanche/cb58.js.map +1 -0
- package/dist/adapters/avalanche/chains.d.ts +21 -0
- package/dist/adapters/avalanche/chains.js +79 -0
- package/dist/adapters/avalanche/chains.js.map +1 -0
- package/dist/adapters/avalanche/codec.d.ts +94 -0
- package/dist/adapters/avalanche/codec.js +371 -0
- package/dist/adapters/avalanche/codec.js.map +1 -0
- package/dist/adapters/avalanche/context.d.ts +59 -0
- package/dist/adapters/avalanche/context.js +114 -0
- package/dist/adapters/avalanche/context.js.map +1 -0
- package/dist/adapters/avalanche/decode.d.ts +16 -0
- package/dist/adapters/avalanche/decode.js +101 -0
- package/dist/adapters/avalanche/decode.js.map +1 -0
- package/dist/adapters/avalanche/driver.d.ts +22 -0
- package/dist/adapters/avalanche/driver.js +81 -0
- package/dist/adapters/avalanche/driver.js.map +1 -0
- package/dist/adapters/avalanche/errors.d.ts +18 -0
- package/dist/adapters/avalanche/errors.js +61 -0
- package/dist/adapters/avalanche/errors.js.map +1 -0
- package/dist/adapters/avalanche/fees.d.ts +23 -0
- package/dist/adapters/avalanche/fees.js +105 -0
- package/dist/adapters/avalanche/fees.js.map +1 -0
- package/dist/adapters/avalanche/index.d.ts +19 -0
- package/dist/adapters/avalanche/index.js +8 -0
- package/dist/adapters/avalanche/index.js.map +1 -0
- package/dist/adapters/avalanche/network.d.ts +37 -0
- package/dist/adapters/avalanche/network.js +135 -0
- package/dist/adapters/avalanche/network.js.map +1 -0
- package/dist/adapters/avalanche/plugin.d.ts +21 -0
- package/dist/adapters/avalanche/plugin.js +46 -0
- package/dist/adapters/avalanche/plugin.js.map +1 -0
- package/dist/adapters/avalanche/presets.d.ts +6 -0
- package/dist/adapters/avalanche/presets.js +86 -0
- package/dist/adapters/avalanche/presets.js.map +1 -0
- package/dist/adapters/avalanche/proofs.d.ts +41 -0
- package/dist/adapters/avalanche/proofs.js +270 -0
- package/dist/adapters/avalanche/proofs.js.map +1 -0
- package/dist/adapters/avalanche/reader.d.ts +40 -0
- package/dist/adapters/avalanche/reader.js +231 -0
- package/dist/adapters/avalanche/reader.js.map +1 -0
- package/dist/adapters/avalanche/sdk.d.ts +182 -0
- package/dist/adapters/avalanche/sdk.js +21 -0
- package/dist/adapters/avalanche/sdk.js.map +1 -0
- package/dist/adapters/avalanche/types.d.ts +86 -0
- package/dist/{type/common.js → adapters/avalanche/types.js} +1 -1
- package/dist/adapters/avalanche/types.js.map +1 -0
- package/dist/adapters/evm/builder.d.ts +11 -0
- package/dist/adapters/evm/builder.js +326 -0
- package/dist/adapters/evm/builder.js.map +1 -0
- package/dist/adapters/evm/chains.d.ts +6 -0
- package/dist/adapters/evm/chains.js +203 -0
- package/dist/adapters/evm/chains.js.map +1 -0
- package/dist/adapters/evm/client.d.ts +84 -0
- package/dist/adapters/evm/client.js +335 -0
- package/dist/adapters/evm/client.js.map +1 -0
- package/dist/adapters/evm/decode.d.ts +35 -0
- package/dist/adapters/evm/decode.js +170 -0
- package/dist/adapters/evm/decode.js.map +1 -0
- package/dist/adapters/evm/driver.d.ts +8 -0
- package/dist/adapters/evm/driver.js +61 -0
- package/dist/adapters/evm/driver.js.map +1 -0
- package/dist/adapters/evm/errors.d.ts +20 -0
- package/dist/adapters/evm/errors.js +110 -0
- package/dist/adapters/evm/errors.js.map +1 -0
- package/dist/adapters/evm/ethers-client.d.ts +43 -0
- package/dist/adapters/evm/ethers-client.js +135 -0
- package/dist/adapters/evm/ethers-client.js.map +1 -0
- package/dist/adapters/evm/fees.d.ts +79 -0
- package/dist/adapters/evm/fees.js +234 -0
- package/dist/adapters/evm/fees.js.map +1 -0
- package/dist/adapters/evm/index.d.ts +20 -0
- package/dist/adapters/evm/index.js +11 -0
- package/dist/adapters/evm/index.js.map +1 -0
- package/dist/adapters/evm/network.d.ts +60 -0
- package/dist/adapters/evm/network.js +131 -0
- package/dist/adapters/evm/network.js.map +1 -0
- package/dist/adapters/evm/plugin.d.ts +36 -0
- package/dist/adapters/evm/plugin.js +102 -0
- package/dist/adapters/evm/plugin.js.map +1 -0
- package/dist/adapters/evm/presets.d.ts +2 -0
- package/dist/adapters/evm/presets.js +105 -0
- package/dist/adapters/evm/presets.js.map +1 -0
- package/dist/adapters/evm/proofs.d.ts +19 -0
- package/dist/adapters/evm/proofs.js +358 -0
- package/dist/adapters/evm/proofs.js.map +1 -0
- package/dist/adapters/evm/rawtx.d.ts +25 -0
- package/dist/adapters/evm/rawtx.js +176 -0
- package/dist/adapters/evm/rawtx.js.map +1 -0
- package/dist/adapters/evm/reader.d.ts +65 -0
- package/dist/adapters/evm/reader.js +292 -0
- package/dist/adapters/evm/reader.js.map +1 -0
- package/dist/adapters/evm/rpc.d.ts +39 -0
- package/dist/adapters/evm/rpc.js +152 -0
- package/dist/adapters/evm/rpc.js.map +1 -0
- package/dist/adapters/evm/tokens.d.ts +7 -0
- package/dist/adapters/evm/tokens.js +23 -0
- package/dist/adapters/evm/tokens.js.map +1 -0
- package/dist/adapters/evm/types.d.ts +255 -0
- package/dist/{type/account.js → adapters/evm/types.js} +1 -1
- package/dist/adapters/evm/types.js.map +1 -0
- package/dist/adapters/evm/web3-client.d.ts +23 -0
- package/dist/adapters/evm/web3-client.js +159 -0
- package/dist/adapters/evm/web3-client.js.map +1 -0
- package/dist/adapters/solana/builder.d.ts +18 -0
- package/dist/adapters/solana/builder.js +545 -0
- package/dist/adapters/solana/builder.js.map +1 -0
- package/dist/adapters/solana/chains.d.ts +13 -0
- package/dist/adapters/solana/chains.js +37 -0
- package/dist/adapters/solana/chains.js.map +1 -0
- package/dist/adapters/solana/decode.d.ts +111 -0
- package/dist/adapters/solana/decode.js +595 -0
- package/dist/adapters/solana/decode.js.map +1 -0
- package/dist/adapters/solana/driver.d.ts +15 -0
- package/dist/adapters/solana/driver.js +72 -0
- package/dist/adapters/solana/driver.js.map +1 -0
- package/dist/adapters/solana/errors.d.ts +36 -0
- package/dist/adapters/solana/errors.js +154 -0
- package/dist/adapters/solana/errors.js.map +1 -0
- package/dist/adapters/solana/fees.d.ts +68 -0
- package/dist/adapters/solana/fees.js +205 -0
- package/dist/adapters/solana/fees.js.map +1 -0
- package/dist/adapters/solana/heights.d.ts +47 -0
- package/dist/adapters/solana/heights.js +185 -0
- package/dist/adapters/solana/heights.js.map +1 -0
- package/dist/adapters/solana/history.d.ts +10 -0
- package/dist/adapters/solana/history.js +71 -0
- package/dist/adapters/solana/history.js.map +1 -0
- package/dist/adapters/solana/index.d.ts +16 -0
- package/dist/adapters/solana/index.js +9 -0
- package/dist/adapters/solana/index.js.map +1 -0
- package/dist/adapters/solana/keys.d.ts +13 -0
- package/dist/adapters/solana/keys.js +69 -0
- package/dist/adapters/solana/keys.js.map +1 -0
- package/dist/adapters/solana/network.d.ts +24 -0
- package/dist/adapters/solana/network.js +95 -0
- package/dist/adapters/solana/network.js.map +1 -0
- package/dist/adapters/solana/plugin.d.ts +18 -0
- package/dist/adapters/solana/plugin.js +41 -0
- package/dist/adapters/solana/plugin.js.map +1 -0
- package/dist/adapters/solana/presets.d.ts +2 -0
- package/dist/adapters/solana/presets.js +77 -0
- package/dist/adapters/solana/presets.js.map +1 -0
- package/dist/adapters/solana/programs.d.ts +44 -0
- package/dist/adapters/solana/programs.js +159 -0
- package/dist/adapters/solana/programs.js.map +1 -0
- package/dist/adapters/solana/proofs.d.ts +56 -0
- package/dist/adapters/solana/proofs.js +540 -0
- package/dist/adapters/solana/proofs.js.map +1 -0
- package/dist/adapters/solana/reader.d.ts +82 -0
- package/dist/adapters/solana/reader.js +326 -0
- package/dist/adapters/solana/reader.js.map +1 -0
- package/dist/adapters/solana/rpc.d.ts +102 -0
- package/dist/adapters/solana/rpc.js +301 -0
- package/dist/adapters/solana/rpc.js.map +1 -0
- package/dist/adapters/solana/tokens.d.ts +7 -0
- package/dist/adapters/solana/tokens.js +19 -0
- package/dist/adapters/solana/tokens.js.map +1 -0
- package/dist/adapters/solana/types.d.ts +121 -0
- package/dist/{type/contract.js → adapters/solana/types.js} +1 -1
- package/dist/adapters/solana/types.js.map +1 -0
- package/dist/adapters/solana/web3.d.ts +5 -0
- package/dist/adapters/solana/web3.js +83 -0
- package/dist/adapters/solana/web3.js.map +1 -0
- package/dist/adapters/solana/wire.d.ts +62 -0
- package/dist/adapters/solana/wire.js +168 -0
- package/dist/adapters/solana/wire.js.map +1 -0
- package/dist/adapters/ton/address.d.ts +43 -0
- package/dist/adapters/ton/address.js +168 -0
- package/dist/adapters/ton/address.js.map +1 -0
- package/dist/adapters/ton/api.d.ts +344 -0
- package/dist/adapters/ton/api.js +942 -0
- package/dist/adapters/ton/api.js.map +1 -0
- package/dist/adapters/ton/builder.d.ts +18 -0
- package/dist/adapters/ton/builder.js +701 -0
- package/dist/adapters/ton/builder.js.map +1 -0
- package/dist/adapters/ton/chains.d.ts +16 -0
- package/dist/adapters/ton/chains.js +39 -0
- package/dist/adapters/ton/chains.js.map +1 -0
- package/dist/adapters/ton/decode.d.ts +43 -0
- package/dist/adapters/ton/decode.js +219 -0
- package/dist/adapters/ton/decode.js.map +1 -0
- package/dist/adapters/ton/driver.d.ts +10 -0
- package/dist/adapters/ton/driver.js +117 -0
- package/dist/adapters/ton/driver.js.map +1 -0
- package/dist/adapters/ton/errors.d.ts +36 -0
- package/dist/adapters/ton/errors.js +89 -0
- package/dist/adapters/ton/errors.js.map +1 -0
- package/dist/adapters/ton/fees.d.ts +28 -0
- package/dist/adapters/ton/fees.js +121 -0
- package/dist/adapters/ton/fees.js.map +1 -0
- package/dist/adapters/ton/index.d.ts +16 -0
- package/dist/adapters/ton/index.js +9 -0
- package/dist/adapters/ton/index.js.map +1 -0
- package/dist/adapters/ton/messages.d.ts +157 -0
- package/dist/adapters/ton/messages.js +397 -0
- package/dist/adapters/ton/messages.js.map +1 -0
- package/dist/adapters/ton/native-client.d.ts +10 -0
- package/dist/adapters/ton/native-client.js +47 -0
- package/dist/adapters/ton/native-client.js.map +1 -0
- package/dist/adapters/ton/network.d.ts +58 -0
- package/dist/adapters/ton/network.js +207 -0
- package/dist/adapters/ton/network.js.map +1 -0
- package/dist/adapters/ton/plugin.d.ts +24 -0
- package/dist/adapters/ton/plugin.js +57 -0
- package/dist/adapters/ton/plugin.js.map +1 -0
- package/dist/adapters/ton/presets.d.ts +6 -0
- package/dist/adapters/ton/presets.js +94 -0
- package/dist/adapters/ton/presets.js.map +1 -0
- package/dist/adapters/ton/proofs.d.ts +66 -0
- package/dist/adapters/ton/proofs.js +813 -0
- package/dist/adapters/ton/proofs.js.map +1 -0
- package/dist/adapters/ton/reader.d.ts +194 -0
- package/dist/adapters/ton/reader.js +781 -0
- package/dist/adapters/ton/reader.js.map +1 -0
- package/dist/adapters/ton/tokens.d.ts +10 -0
- package/dist/adapters/ton/tokens.js +27 -0
- package/dist/adapters/ton/tokens.js.map +1 -0
- package/dist/adapters/ton/trace.d.ts +48 -0
- package/dist/adapters/ton/trace.js +277 -0
- package/dist/adapters/ton/trace.js.map +1 -0
- package/dist/adapters/ton/types.d.ts +105 -0
- package/dist/{type/transact.js → adapters/ton/types.js} +1 -1
- package/dist/adapters/ton/types.js.map +1 -0
- package/dist/adapters/ton/wallets.d.ts +86 -0
- package/dist/adapters/ton/wallets.js +373 -0
- package/dist/adapters/ton/wallets.js.map +1 -0
- package/dist/adapters/tron/abi.d.ts +39 -0
- package/dist/adapters/tron/abi.js +110 -0
- package/dist/adapters/tron/abi.js.map +1 -0
- package/dist/adapters/tron/address.d.ts +20 -0
- package/dist/adapters/tron/address.js +110 -0
- package/dist/adapters/tron/address.js.map +1 -0
- package/dist/adapters/tron/builder.d.ts +12 -0
- package/dist/adapters/tron/builder.js +553 -0
- package/dist/adapters/tron/builder.js.map +1 -0
- package/dist/adapters/tron/chains.d.ts +12 -0
- package/dist/adapters/tron/chains.js +35 -0
- package/dist/adapters/tron/chains.js.map +1 -0
- package/dist/adapters/tron/codec.d.ts +10 -0
- package/dist/adapters/tron/codec.js +322 -0
- package/dist/adapters/tron/codec.js.map +1 -0
- package/dist/adapters/tron/decode.d.ts +50 -0
- package/dist/adapters/tron/decode.js +280 -0
- package/dist/adapters/tron/decode.js.map +1 -0
- package/dist/adapters/tron/driver.d.ts +12 -0
- package/dist/adapters/tron/driver.js +106 -0
- package/dist/adapters/tron/driver.js.map +1 -0
- package/dist/adapters/tron/errors.d.ts +74 -0
- package/dist/adapters/tron/errors.js +261 -0
- package/dist/adapters/tron/errors.js.map +1 -0
- package/dist/adapters/tron/fees.d.ts +49 -0
- package/dist/adapters/tron/fees.js +166 -0
- package/dist/adapters/tron/fees.js.map +1 -0
- package/dist/adapters/tron/http.d.ts +173 -0
- package/dist/adapters/tron/http.js +729 -0
- package/dist/adapters/tron/http.js.map +1 -0
- package/dist/adapters/tron/index.d.ts +16 -0
- package/dist/adapters/tron/index.js +15 -0
- package/dist/adapters/tron/index.js.map +1 -0
- package/dist/adapters/tron/network.d.ts +44 -0
- package/dist/adapters/tron/network.js +163 -0
- package/dist/adapters/tron/network.js.map +1 -0
- package/dist/adapters/tron/plugin.d.ts +17 -0
- package/dist/adapters/tron/plugin.js +39 -0
- package/dist/adapters/tron/plugin.js.map +1 -0
- package/dist/adapters/tron/presets.d.ts +5 -0
- package/dist/adapters/tron/presets.js +68 -0
- package/dist/adapters/tron/presets.js.map +1 -0
- package/dist/adapters/tron/proofs.d.ts +80 -0
- package/dist/adapters/tron/proofs.js +370 -0
- package/dist/adapters/tron/proofs.js.map +1 -0
- package/dist/adapters/tron/protobuf.d.ts +36 -0
- package/dist/adapters/tron/protobuf.js +90 -0
- package/dist/adapters/tron/protobuf.js.map +1 -0
- package/dist/adapters/tron/reader.d.ts +47 -0
- package/dist/adapters/tron/reader.js +203 -0
- package/dist/adapters/tron/reader.js.map +1 -0
- package/dist/adapters/tron/tokens.d.ts +7 -0
- package/dist/adapters/tron/tokens.js +14 -0
- package/dist/adapters/tron/tokens.js.map +1 -0
- package/dist/adapters/tron/types.d.ts +166 -0
- package/dist/adapters/tron/types.js +3 -0
- package/dist/adapters/tron/types.js.map +1 -0
- package/dist/adapters/utxo/address.d.ts +51 -0
- package/dist/adapters/utxo/address.js +341 -0
- package/dist/adapters/utxo/address.js.map +1 -0
- package/dist/adapters/utxo/builder.d.ts +35 -0
- package/dist/adapters/utxo/builder.js +380 -0
- package/dist/adapters/utxo/builder.js.map +1 -0
- package/dist/adapters/utxo/chains.d.ts +17 -0
- package/dist/adapters/utxo/chains.js +99 -0
- package/dist/adapters/utxo/chains.js.map +1 -0
- package/dist/adapters/utxo/codec.d.ts +120 -0
- package/dist/adapters/utxo/codec.js +408 -0
- package/dist/adapters/utxo/codec.js.map +1 -0
- package/dist/adapters/utxo/coinselect.d.ts +48 -0
- package/dist/adapters/utxo/coinselect.js +131 -0
- package/dist/adapters/utxo/coinselect.js.map +1 -0
- package/dist/adapters/utxo/context.d.ts +57 -0
- package/dist/adapters/utxo/context.js +118 -0
- package/dist/adapters/utxo/context.js.map +1 -0
- package/dist/adapters/utxo/decode.d.ts +14 -0
- package/dist/adapters/utxo/decode.js +85 -0
- package/dist/adapters/utxo/decode.js.map +1 -0
- package/dist/adapters/utxo/driver.d.ts +16 -0
- package/dist/adapters/utxo/driver.js +74 -0
- package/dist/adapters/utxo/driver.js.map +1 -0
- package/dist/adapters/utxo/ecc.d.ts +9 -0
- package/dist/adapters/utxo/ecc.js +26 -0
- package/dist/adapters/utxo/ecc.js.map +1 -0
- package/dist/adapters/utxo/errors.d.ts +52 -0
- package/dist/adapters/utxo/errors.js +191 -0
- package/dist/adapters/utxo/errors.js.map +1 -0
- package/dist/adapters/utxo/esplora.d.ts +79 -0
- package/dist/adapters/utxo/esplora.js +451 -0
- package/dist/adapters/utxo/esplora.js.map +1 -0
- package/dist/adapters/utxo/fees.d.ts +41 -0
- package/dist/adapters/utxo/fees.js +125 -0
- package/dist/adapters/utxo/fees.js.map +1 -0
- package/dist/adapters/utxo/index.d.ts +17 -0
- package/dist/adapters/utxo/index.js +8 -0
- package/dist/adapters/utxo/index.js.map +1 -0
- package/dist/adapters/utxo/network.d.ts +50 -0
- package/dist/adapters/utxo/network.js +165 -0
- package/dist/adapters/utxo/network.js.map +1 -0
- package/dist/adapters/utxo/plugin.d.ts +17 -0
- package/dist/adapters/utxo/plugin.js +41 -0
- package/dist/adapters/utxo/plugin.js.map +1 -0
- package/dist/adapters/utxo/presets.d.ts +12 -0
- package/dist/adapters/utxo/presets.js +47 -0
- package/dist/adapters/utxo/presets.js.map +1 -0
- package/dist/adapters/utxo/preview.d.ts +3 -0
- package/dist/adapters/utxo/preview.js +65 -0
- package/dist/adapters/utxo/preview.js.map +1 -0
- package/dist/adapters/utxo/proofs.d.ts +57 -0
- package/dist/adapters/utxo/proofs.js +331 -0
- package/dist/adapters/utxo/proofs.js.map +1 -0
- package/dist/adapters/utxo/rawtx.d.ts +59 -0
- package/dist/adapters/utxo/rawtx.js +234 -0
- package/dist/adapters/utxo/rawtx.js.map +1 -0
- package/dist/adapters/utxo/reader.d.ts +36 -0
- package/dist/adapters/utxo/reader.js +265 -0
- package/dist/adapters/utxo/reader.js.map +1 -0
- package/dist/adapters/utxo/sdk.d.ts +18 -0
- package/dist/adapters/utxo/sdk.js +17 -0
- package/dist/adapters/utxo/sdk.js.map +1 -0
- package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
- package/dist/adapters/utxo/signed-psbt.js +428 -0
- package/dist/adapters/utxo/signed-psbt.js.map +1 -0
- package/dist/adapters/utxo/spend.d.ts +59 -0
- package/dist/adapters/utxo/spend.js +230 -0
- package/dist/adapters/utxo/spend.js.map +1 -0
- package/dist/adapters/utxo/types.d.ts +167 -0
- package/dist/adapters/utxo/types.js +3 -0
- package/dist/adapters/utxo/types.js.map +1 -0
- package/dist/core/assets/service.d.ts +18 -0
- package/dist/core/assets/service.js +69 -0
- package/dist/core/assets/service.js.map +1 -0
- package/dist/core/blockchain/default-ref.d.ts +4 -0
- package/dist/core/blockchain/default-ref.js +16 -0
- package/dist/core/blockchain/default-ref.js.map +1 -0
- package/dist/core/blockchain/handle.d.ts +200 -0
- package/dist/core/blockchain/handle.js +579 -0
- package/dist/core/blockchain/handle.js.map +1 -0
- package/dist/core/blockchain/internal.d.ts +19 -0
- package/dist/core/blockchain/internal.js +16 -0
- package/dist/core/blockchain/internal.js.map +1 -0
- package/dist/core/blockchain/mapping.d.ts +22 -0
- package/dist/core/blockchain/mapping.js +136 -0
- package/dist/core/blockchain/mapping.js.map +1 -0
- package/dist/core/config/env.d.ts +8 -0
- package/dist/core/config/env.js +60 -0
- package/dist/core/config/env.js.map +1 -0
- package/dist/core/config/merge.d.ts +26 -0
- package/dist/core/config/merge.js +144 -0
- package/dist/core/config/merge.js.map +1 -0
- package/dist/core/config/resolve.d.ts +12 -0
- package/dist/core/config/resolve.js +251 -0
- package/dist/core/config/resolve.js.map +1 -0
- package/dist/core/config/types.d.ts +165 -0
- package/dist/core/config/types.js +3 -0
- package/dist/core/config/types.js.map +1 -0
- package/dist/core/container/builtins.d.ts +4 -0
- package/dist/core/container/builtins.js +13 -0
- package/dist/core/container/builtins.js.map +1 -0
- package/dist/core/container/container.d.ts +69 -0
- package/dist/core/container/container.js +466 -0
- package/dist/core/container/container.js.map +1 -0
- package/dist/core/container/default.d.ts +15 -0
- package/dist/core/container/default.js +70 -0
- package/dist/core/container/default.js.map +1 -0
- package/dist/core/container/internals.d.ts +54 -0
- package/dist/core/container/internals.js +21 -0
- package/dist/core/container/internals.js.map +1 -0
- package/dist/core/container/pool.d.ts +27 -0
- package/dist/core/container/pool.js +77 -0
- package/dist/core/container/pool.js.map +1 -0
- package/dist/core/driver/types.d.ts +346 -0
- package/dist/core/driver/types.js +3 -0
- package/dist/core/driver/types.js.map +1 -0
- package/dist/core/errors/codes.d.ts +153 -0
- package/dist/core/errors/codes.js +49 -0
- package/dist/core/errors/codes.js.map +1 -0
- package/dist/core/errors/error.d.ts +66 -0
- package/dist/core/errors/error.js +129 -0
- package/dist/core/errors/error.js.map +1 -0
- package/dist/core/events/bus.d.ts +12 -0
- package/dist/core/events/bus.js +46 -0
- package/dist/core/events/bus.js.map +1 -0
- package/dist/core/events/logger.d.ts +13 -0
- package/dist/core/events/logger.js +42 -0
- package/dist/core/events/logger.js.map +1 -0
- package/dist/core/events/types.d.ts +131 -0
- package/dist/core/events/types.js +3 -0
- package/dist/core/events/types.js.map +1 -0
- package/dist/core/lifecycle/engine-rules.d.ts +107 -0
- package/dist/core/lifecycle/engine-rules.js +257 -0
- package/dist/core/lifecycle/engine-rules.js.map +1 -0
- package/dist/core/lifecycle/engine.d.ts +500 -0
- package/dist/core/lifecycle/engine.js +1732 -0
- package/dist/core/lifecycle/engine.js.map +1 -0
- package/dist/core/lifecycle/evaluate.d.ts +19 -0
- package/dist/core/lifecycle/evaluate.js +72 -0
- package/dist/core/lifecycle/evaluate.js.map +1 -0
- package/dist/core/lifecycle/intent.d.ts +11 -0
- package/dist/core/lifecycle/intent.js +88 -0
- package/dist/core/lifecycle/intent.js.map +1 -0
- package/dist/core/lifecycle/monitor.d.ts +138 -0
- package/dist/core/lifecycle/monitor.js +606 -0
- package/dist/core/lifecycle/monitor.js.map +1 -0
- package/dist/core/lifecycle/observations.d.ts +17 -0
- package/dist/core/lifecycle/observations.js +59 -0
- package/dist/core/lifecycle/observations.js.map +1 -0
- package/dist/core/lifecycle/reconcile.d.ts +58 -0
- package/dist/core/lifecycle/reconcile.js +112 -0
- package/dist/core/lifecycle/reconcile.js.map +1 -0
- package/dist/core/lifecycle/views.d.ts +49 -0
- package/dist/core/lifecycle/views.js +57 -0
- package/dist/core/lifecycle/views.js.map +1 -0
- package/dist/core/lifecycle/workers.d.ts +82 -0
- package/dist/core/lifecycle/workers.js +329 -0
- package/dist/core/lifecycle/workers.js.map +1 -0
- package/dist/core/model/address.d.ts +32 -0
- package/dist/core/model/address.js +43 -0
- package/dist/core/model/address.js.map +1 -0
- package/dist/core/model/amount.d.ts +25 -0
- package/dist/core/model/amount.js +102 -0
- package/dist/core/model/amount.js.map +1 -0
- package/dist/core/model/asset.d.ts +28 -0
- package/dist/core/model/asset.js +47 -0
- package/dist/core/model/asset.js.map +1 -0
- package/dist/core/model/capability.d.ts +3 -0
- package/dist/core/model/capability.js +18 -0
- package/dist/core/model/capability.js.map +1 -0
- package/dist/core/model/chain.d.ts +63 -0
- package/dist/core/model/chain.js +8 -0
- package/dist/core/model/chain.js.map +1 -0
- package/dist/core/model/fee.d.ts +36 -0
- package/dist/core/model/fee.js +17 -0
- package/dist/core/model/fee.js.map +1 -0
- package/dist/core/model/ids.d.ts +37 -0
- package/dist/core/model/ids.js +13 -0
- package/dist/core/model/ids.js.map +1 -0
- package/dist/core/model/intent.d.ts +63 -0
- package/dist/core/model/intent.js +81 -0
- package/dist/core/model/intent.js.map +1 -0
- package/dist/core/model/ordering.d.ts +20 -0
- package/dist/core/model/ordering.js +29 -0
- package/dist/core/model/ordering.js.map +1 -0
- package/dist/core/model/transaction.d.ts +116 -0
- package/dist/{type/lib-types.js → core/model/transaction.js} +1 -1
- package/dist/core/model/transaction.js.map +1 -0
- package/dist/core/observe/scanner.d.ts +135 -0
- package/dist/core/observe/scanner.js +355 -0
- package/dist/core/observe/scanner.js.map +1 -0
- package/dist/core/ordering/reservations.d.ts +16 -0
- package/dist/core/ordering/reservations.js +53 -0
- package/dist/core/ordering/reservations.js.map +1 -0
- package/dist/core/ordering/sequence.d.ts +61 -0
- package/dist/core/ordering/sequence.js +155 -0
- package/dist/core/ordering/sequence.js.map +1 -0
- package/dist/core/registry/adapters.d.ts +10 -0
- package/dist/core/registry/adapters.js +56 -0
- package/dist/core/registry/adapters.js.map +1 -0
- package/dist/core/registry/assets.d.ts +18 -0
- package/dist/core/registry/assets.js +90 -0
- package/dist/core/registry/assets.js.map +1 -0
- package/dist/core/registry/chains.d.ts +10 -0
- package/dist/core/registry/chains.js +80 -0
- package/dist/core/registry/chains.js.map +1 -0
- package/dist/core/registry/plugin.d.ts +41 -0
- package/dist/core/registry/plugin.js +109 -0
- package/dist/core/registry/plugin.js.map +1 -0
- package/dist/core/registry/providers.d.ts +31 -0
- package/dist/core/registry/providers.js +43 -0
- package/dist/core/registry/providers.js.map +1 -0
- package/dist/core/registry/schemes.d.ts +30 -0
- package/dist/core/registry/schemes.js +84 -0
- package/dist/core/registry/schemes.js.map +1 -0
- package/dist/core/secret/fragments.d.ts +33 -0
- package/dist/core/secret/fragments.js +110 -0
- package/dist/core/secret/fragments.js.map +1 -0
- package/dist/core/secret/redact.d.ts +10 -0
- package/dist/core/secret/redact.js +110 -0
- package/dist/core/secret/redact.js.map +1 -0
- package/dist/core/secret/secret.d.ts +14 -0
- package/dist/core/secret/secret.js +42 -0
- package/dist/core/secret/secret.js.map +1 -0
- package/dist/core/signing/callback.d.ts +10 -0
- package/dist/core/signing/callback.js +22 -0
- package/dist/core/signing/callback.js.map +1 -0
- package/dist/core/signing/guard.d.ts +18 -0
- package/dist/core/signing/guard.js +72 -0
- package/dist/core/signing/guard.js.map +1 -0
- package/dist/core/signing/hd.d.ts +36 -0
- package/dist/core/signing/hd.js +167 -0
- package/dist/core/signing/hd.js.map +1 -0
- package/dist/core/signing/local.d.ts +48 -0
- package/dist/core/signing/local.js +190 -0
- package/dist/core/signing/local.js.map +1 -0
- package/dist/core/signing/orchestrator.d.ts +40 -0
- package/dist/core/signing/orchestrator.js +300 -0
- package/dist/core/signing/orchestrator.js.map +1 -0
- package/dist/core/signing/types.d.ts +64 -0
- package/dist/core/signing/types.js +3 -0
- package/dist/core/signing/types.js.map +1 -0
- package/dist/core/signing/wallet.d.ts +48 -0
- package/dist/core/signing/wallet.js +153 -0
- package/dist/core/signing/wallet.js.map +1 -0
- package/dist/core/store/clone.d.ts +25 -0
- package/dist/core/store/clone.js +71 -0
- package/dist/core/store/clone.js.map +1 -0
- package/dist/core/store/memory.d.ts +38 -0
- package/dist/core/store/memory.js +325 -0
- package/dist/core/store/memory.js.map +1 -0
- package/dist/core/store/types.d.ts +246 -0
- package/dist/core/store/types.js +117 -0
- package/dist/core/store/types.js.map +1 -0
- package/dist/core/transport/backoff.d.ts +8 -0
- package/dist/core/transport/backoff.js +27 -0
- package/dist/core/transport/backoff.js.map +1 -0
- package/dist/core/transport/circuit.d.ts +25 -0
- package/dist/core/transport/circuit.js +61 -0
- package/dist/core/transport/circuit.js.map +1 -0
- package/dist/core/transport/http-transport.d.ts +30 -0
- package/dist/core/transport/http-transport.js +1695 -0
- package/dist/core/transport/http-transport.js.map +1 -0
- package/dist/core/transport/rate-limit.d.ts +27 -0
- package/dist/core/transport/rate-limit.js +78 -0
- package/dist/core/transport/rate-limit.js.map +1 -0
- package/dist/core/transport/stale-view.d.ts +11 -0
- package/dist/core/transport/stale-view.js +17 -0
- package/dist/core/transport/stale-view.js.map +1 -0
- package/dist/core/transport/types.d.ts +144 -0
- package/dist/core/transport/types.js +6 -0
- package/dist/core/transport/types.js.map +1 -0
- package/dist/core/util/bytes.d.ts +9 -0
- package/dist/core/util/bytes.js +40 -0
- package/dist/core/util/bytes.js.map +1 -0
- package/dist/core/util/clock.d.ts +6 -0
- package/dist/core/util/clock.js +26 -0
- package/dist/core/util/clock.js.map +1 -0
- package/dist/core/util/freeze.d.ts +8 -0
- package/dist/core/util/freeze.js +31 -0
- package/dist/core/util/freeze.js.map +1 -0
- package/dist/core/util/json.d.ts +29 -0
- package/dist/core/util/json.js +165 -0
- package/dist/core/util/json.js.map +1 -0
- package/dist/core/util/names.d.ts +21 -0
- package/dist/core/util/names.js +46 -0
- package/dist/core/util/names.js.map +1 -0
- package/dist/index.d.ts +64 -14
- package/dist/index.js +105 -49
- package/dist/index.js.map +1 -1
- package/dist/native.d.ts +21 -0
- package/dist/native.js +44 -0
- package/dist/native.js.map +1 -0
- package/dist/testing/contracts/api.d.ts +12 -0
- package/dist/testing/contracts/api.js +58 -0
- package/dist/testing/contracts/api.js.map +1 -0
- package/dist/testing/contracts/cursors.d.ts +6 -0
- package/dist/testing/contracts/cursors.js +43 -0
- package/dist/testing/contracts/cursors.js.map +1 -0
- package/dist/testing/contracts/locks.d.ts +10 -0
- package/dist/testing/contracts/locks.js +63 -0
- package/dist/testing/contracts/locks.js.map +1 -0
- package/dist/testing/contracts/operations.d.ts +21 -0
- package/dist/testing/contracts/operations.js +718 -0
- package/dist/testing/contracts/operations.js.map +1 -0
- package/dist/testing/contracts/sequences.d.ts +6 -0
- package/dist/testing/contracts/sequences.js +68 -0
- package/dist/testing/contracts/sequences.js.map +1 -0
- package/dist/testing/env.d.ts +63 -0
- package/dist/testing/env.js +105 -0
- package/dist/testing/env.js.map +1 -0
- package/dist/testing/fake-chain.d.ts +118 -0
- package/dist/testing/fake-chain.js +536 -0
- package/dist/testing/fake-chain.js.map +1 -0
- package/dist/testing/fake-clock.d.ts +15 -0
- package/dist/testing/fake-clock.js +86 -0
- package/dist/testing/fake-clock.js.map +1 -0
- package/dist/testing/fake-driver.d.ts +15 -0
- package/dist/testing/fake-driver.js +458 -0
- package/dist/testing/fake-driver.js.map +1 -0
- package/dist/testing/fake-fetch.d.ts +32 -0
- package/dist/testing/fake-fetch.js +81 -0
- package/dist/testing/fake-fetch.js.map +1 -0
- package/dist/testing/fake-plugin.d.ts +30 -0
- package/dist/testing/fake-plugin.js +66 -0
- package/dist/testing/fake-plugin.js.map +1 -0
- package/dist/testing/faulty-store.d.ts +36 -0
- package/dist/testing/faulty-store.js +66 -0
- package/dist/testing/faulty-store.js.map +1 -0
- package/dist/testing/generation.d.ts +60 -0
- package/dist/testing/generation.js +252 -0
- package/dist/testing/generation.js.map +1 -0
- package/dist/testing/index.d.ts +28 -0
- package/dist/testing/index.js +51 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +188 -45
- package/dist/libs/eth/account.d.ts +0 -9
- package/dist/libs/eth/account.js +0 -58
- package/dist/libs/eth/account.js.map +0 -1
- package/dist/libs/eth/contract.d.ts +0 -7
- package/dist/libs/eth/contract.js +0 -42
- package/dist/libs/eth/contract.js.map +0 -1
- package/dist/libs/eth/index.d.ts +0 -24
- package/dist/libs/eth/index.js +0 -72
- package/dist/libs/eth/index.js.map +0 -1
- package/dist/libs/eth/transact.d.ts +0 -7
- package/dist/libs/eth/transact.js +0 -26
- package/dist/libs/eth/transact.js.map +0 -1
- package/dist/libs/index.d.ts +0 -2
- package/dist/libs/index.js +0 -19
- package/dist/libs/index.js.map +0 -1
- package/dist/libs/trx/account.d.ts +0 -9
- package/dist/libs/trx/account.js +0 -55
- package/dist/libs/trx/account.js.map +0 -1
- package/dist/libs/trx/contract.d.ts +0 -7
- package/dist/libs/trx/contract.js +0 -27
- package/dist/libs/trx/contract.js.map +0 -1
- package/dist/libs/trx/index.d.ts +0 -22
- package/dist/libs/trx/index.js +0 -64
- package/dist/libs/trx/index.js.map +0 -1
- package/dist/libs/trx/transact.d.ts +0 -7
- package/dist/libs/trx/transact.js +0 -26
- package/dist/libs/trx/transact.js.map +0 -1
- package/dist/tool/common.d.ts +0 -28
- package/dist/tool/common.js +0 -33
- package/dist/tool/common.js.map +0 -1
- package/dist/tool/eth-tools.d.ts +0 -3
- package/dist/tool/eth-tools.js +0 -33
- package/dist/tool/eth-tools.js.map +0 -1
- package/dist/tool/index.d.ts +0 -5
- package/dist/tool/index.js +0 -22
- package/dist/tool/index.js.map +0 -1
- package/dist/tool/logging.d.ts +0 -3
- package/dist/tool/logging.js +0 -11
- package/dist/tool/logging.js.map +0 -1
- package/dist/tool/options.d.ts +0 -6
- package/dist/tool/options.js +0 -41
- package/dist/tool/options.js.map +0 -1
- package/dist/tool/trx-tools.d.ts +0 -3
- package/dist/tool/trx-tools.js +0 -20
- package/dist/tool/trx-tools.js.map +0 -1
- package/dist/type/account.d.ts +0 -9
- package/dist/type/account.js.map +0 -1
- package/dist/type/common.d.ts +0 -18
- package/dist/type/common.js.map +0 -1
- package/dist/type/contract.d.ts +0 -10
- package/dist/type/contract.js.map +0 -1
- package/dist/type/index.d.ts +0 -5
- package/dist/type/index.js +0 -22
- package/dist/type/index.js.map +0 -1
- package/dist/type/lib-types.d.ts +0 -9
- package/dist/type/lib-types.js.map +0 -1
- package/dist/type/transact.d.ts +0 -7
- package/dist/type/transact.js.map +0 -1
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_MAX_FEE_PER_GAS = exports.TRANSFER_GAS = exports.FEE_PERCENTILES = exports.FEE_HISTORY_BLOCKS = void 0;
|
|
4
|
+
exports.median = median;
|
|
5
|
+
exports.feesFromHistory = feesFromHistory;
|
|
6
|
+
exports.legacyPrice = legacyPrice;
|
|
7
|
+
exports.gasLimitFrom = gasLimitFrom;
|
|
8
|
+
exports.priceCap = priceCap;
|
|
9
|
+
exports.capPrice = capPrice;
|
|
10
|
+
exports.assertWithinCeiling = assertWithinCeiling;
|
|
11
|
+
exports.parseFeeOverride = parseFeeOverride;
|
|
12
|
+
exports.feeDraft = feeDraft;
|
|
13
|
+
exports.feeOf = feeOf;
|
|
14
|
+
exports.meetsBump = meetsBump;
|
|
15
|
+
exports.minimumBump = minimumBump;
|
|
16
|
+
/**
|
|
17
|
+
* The EVM fee policy: `evm-1559` or `evm-legacy` per network, an `upper`
|
|
18
|
+
* bound with the `expected` cost in the details, overrides, and replacement bumps. Pure
|
|
19
|
+
* functions over plain data; the driver does the I/O.
|
|
20
|
+
*/
|
|
21
|
+
const error_1 = require("../../core/errors/error");
|
|
22
|
+
/**
|
|
23
|
+
* `eth_feeHistory` window and priority-fee percentiles for slow, normal and fast: the
|
|
24
|
+
* method the Polygon Gas Station documents (10th, 25th and 50th over the last 15 blocks).
|
|
25
|
+
*/
|
|
26
|
+
exports.FEE_HISTORY_BLOCKS = 15;
|
|
27
|
+
exports.FEE_PERCENTILES = [10, 25, 50];
|
|
28
|
+
const SPEED_INDEX = { slow: 0, normal: 1, fast: 2 };
|
|
29
|
+
/** Legacy networks: `eth_gasPrice` scaled per speed, in percent. */
|
|
30
|
+
const LEGACY_PERCENT = {
|
|
31
|
+
slow: 100n,
|
|
32
|
+
normal: 110n,
|
|
33
|
+
fast: 125n,
|
|
34
|
+
};
|
|
35
|
+
/** A plain transfer to an account without code costs exactly this much gas. */
|
|
36
|
+
exports.TRANSFER_GAS = 21000n;
|
|
37
|
+
/** Headroom over the node's estimate for anything but a plain transfer, in percent. */
|
|
38
|
+
const GAS_HEADROOM_PERCENT = 120n;
|
|
39
|
+
const ceilDiv = (a, b) => (a + b - 1n) / b;
|
|
40
|
+
const max = (a, b) => (a > b ? a : b);
|
|
41
|
+
const min = (a, b) => (a < b ? a : b);
|
|
42
|
+
/** The lower median; `0n` for no values. */
|
|
43
|
+
function median(values) {
|
|
44
|
+
if (values.length === 0)
|
|
45
|
+
return 0n;
|
|
46
|
+
const sorted = [...values].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
47
|
+
return sorted[Math.floor((sorted.length - 1) / 2)];
|
|
48
|
+
}
|
|
49
|
+
const malformedHistory = () => new error_1.ProviderError('PROVIDER_UNAVAILABLE', 'malformed fee history');
|
|
50
|
+
/**
|
|
51
|
+
* EIP-1559 prices for `speed`: the tip is the median, over the window, of the speed's
|
|
52
|
+
* percentile (at least `minTip`); the cap allows the next base fee to double. The history
|
|
53
|
+
* must answer a request for `FEE_PERCENTILES`: one without the next base fee, without
|
|
54
|
+
* reward rows, or with a reward row shorter than `FEE_PERCENTILES` is a retryable
|
|
55
|
+
* `PROVIDER_UNAVAILABLE`, never a tip of `minTip`.
|
|
56
|
+
*/
|
|
57
|
+
function feesFromHistory(history, speed, minTip) {
|
|
58
|
+
const baseFeePerGas = history.baseFeePerGas[history.baseFeePerGas.length - 1];
|
|
59
|
+
if (baseFeePerGas === undefined || history.reward.length === 0) {
|
|
60
|
+
throw malformedHistory();
|
|
61
|
+
}
|
|
62
|
+
const index = SPEED_INDEX[speed];
|
|
63
|
+
const tips = history.reward.map((row) => {
|
|
64
|
+
const tip = row[index];
|
|
65
|
+
if (row.length < exports.FEE_PERCENTILES.length || tip === undefined)
|
|
66
|
+
throw malformedHistory();
|
|
67
|
+
return tip;
|
|
68
|
+
});
|
|
69
|
+
const tip = max(median(tips), minTip);
|
|
70
|
+
return {
|
|
71
|
+
params: {
|
|
72
|
+
type: 'eip1559',
|
|
73
|
+
maxFeePerGas: 2n * baseFeePerGas + tip,
|
|
74
|
+
maxPriorityFeePerGas: tip,
|
|
75
|
+
},
|
|
76
|
+
baseFeePerGas,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function legacyPrice(gasPrice, speed) {
|
|
80
|
+
return { type: 'legacy', gasPrice: ceilDiv(gasPrice * LEGACY_PERCENT[speed], 100n) };
|
|
81
|
+
}
|
|
82
|
+
/** The node's estimate, with headroom unless it is a plain transfer. */
|
|
83
|
+
function gasLimitFrom(estimate) {
|
|
84
|
+
return estimate === exports.TRANSFER_GAS
|
|
85
|
+
? exports.TRANSFER_GAS
|
|
86
|
+
: ceilDiv(estimate * GAS_HEADROOM_PERCENT, 100n);
|
|
87
|
+
}
|
|
88
|
+
const invalid = (reason) => new error_1.ValidationError('INVALID_INTENT', reason);
|
|
89
|
+
/**
|
|
90
|
+
* The default `maxFeePerGas`, the highest price per gas an EVM transaction signs, 1,000
|
|
91
|
+
* gwei. It bounds a plain transfer at 0.021 and a 65,000-gas token transfer at 0.065 of
|
|
92
|
+
* the native coin, however an endpoint prices the fee. A network whose base fee rises
|
|
93
|
+
* above the ceiling stalls its transfers as `FEE_TOO_LOW` until the fee falls or the
|
|
94
|
+
* option is raised.
|
|
95
|
+
*/
|
|
96
|
+
exports.DEFAULT_MAX_FEE_PER_GAS = 1000000000000n;
|
|
97
|
+
/** The highest price per gas `params` may pay: the fee cap, or the legacy gas price. */
|
|
98
|
+
function priceCap(params) {
|
|
99
|
+
return params.type === 'eip1559' ? params.maxFeePerGas : params.gasPrice;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* A node's suggestion within the ceiling: the fee cap or gas price at most `ceiling`,
|
|
103
|
+
* and the tip at most the fee cap. No endpoint can raise what a transfer signs.
|
|
104
|
+
*/
|
|
105
|
+
function capPrice(params, ceiling) {
|
|
106
|
+
if (params.type === 'legacy')
|
|
107
|
+
return { type: 'legacy', gasPrice: min(params.gasPrice, ceiling) };
|
|
108
|
+
const maxFeePerGas = min(params.maxFeePerGas, ceiling);
|
|
109
|
+
return {
|
|
110
|
+
type: 'eip1559',
|
|
111
|
+
maxFeePerGas,
|
|
112
|
+
maxPriorityFeePerGas: min(params.maxPriorityFeePerGas, maxFeePerGas),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Refuses, before anything is signed, a fee whose price per gas is above `ceiling` (the
|
|
117
|
+
* handle's `maxFeePerGas`), whatever produced it: an explicit override, a stored fee, or a
|
|
118
|
+
* cancel's least bump. The details carry the price and the bound as decimal strings.
|
|
119
|
+
*/
|
|
120
|
+
function assertWithinCeiling(params, ceiling) {
|
|
121
|
+
const price = priceCap(params);
|
|
122
|
+
if (price <= ceiling)
|
|
123
|
+
return;
|
|
124
|
+
throw new error_1.ValidationError('INVALID_INTENT', 'the fee is above maxFeePerGas, the EVM handle option that bounds it (wei per gas)', { details: { required: price.toString(), maxFeePerGas: ceiling.toString() } });
|
|
125
|
+
}
|
|
126
|
+
/** Validates an `EvmFeeOverride` against the network's fee model. */
|
|
127
|
+
function parseFeeOverride(override, model) {
|
|
128
|
+
const allowed = model === 'evm-1559'
|
|
129
|
+
? ['maxFeePerGas', 'maxPriorityFeePerGas', 'gasLimit']
|
|
130
|
+
: ['gasPrice', 'gasLimit'];
|
|
131
|
+
const shape = model === 'evm-1559'
|
|
132
|
+
? '{ maxFeePerGas, maxPriorityFeePerGas, gasLimit? }'
|
|
133
|
+
: '{ gasPrice, gasLimit? }';
|
|
134
|
+
const keys = Object.keys(override);
|
|
135
|
+
if (keys.some((key) => !allowed.includes(key))) {
|
|
136
|
+
throw invalid(`${model} fee overrides look like ${shape}`);
|
|
137
|
+
}
|
|
138
|
+
const amount = (key, min) => {
|
|
139
|
+
const value = override[key];
|
|
140
|
+
if (typeof value !== 'bigint' || value < min) {
|
|
141
|
+
throw invalid(`fee override '${key}' must be a bigint of at least ${min}`);
|
|
142
|
+
}
|
|
143
|
+
return value;
|
|
144
|
+
};
|
|
145
|
+
const gasLimit = override.gasLimit === undefined ? undefined : amount('gasLimit', exports.TRANSFER_GAS);
|
|
146
|
+
const limit = gasLimit !== undefined ? { gasLimit } : {};
|
|
147
|
+
if (model === 'evm-legacy') {
|
|
148
|
+
return { params: { type: 'legacy', gasPrice: amount('gasPrice', 1n) }, ...limit };
|
|
149
|
+
}
|
|
150
|
+
const maxFeePerGas = amount('maxFeePerGas', 1n);
|
|
151
|
+
const maxPriorityFeePerGas = amount('maxPriorityFeePerGas', 0n);
|
|
152
|
+
if (maxPriorityFeePerGas > maxFeePerGas) {
|
|
153
|
+
throw invalid('maxPriorityFeePerGas must not exceed maxFeePerGas');
|
|
154
|
+
}
|
|
155
|
+
return { params: { type: 'eip1559', maxFeePerGas, maxPriorityFeePerGas }, ...limit };
|
|
156
|
+
}
|
|
157
|
+
/** The fee draft for a transaction of `gasLimit` at `params`. */
|
|
158
|
+
function feeDraft(speed, gasLimit, params, extra = {}) {
|
|
159
|
+
const cap = params.type === 'eip1559' ? params.maxFeePerGas : params.gasPrice;
|
|
160
|
+
const expectedPrice = params.type === 'eip1559' && extra.baseFeePerGas !== undefined
|
|
161
|
+
? min(params.maxFeePerGas, extra.baseFeePerGas + params.maxPriorityFeePerGas)
|
|
162
|
+
: cap;
|
|
163
|
+
// `satisfies` checks the shape and keeps a literal type the draft's record accepts.
|
|
164
|
+
const details = {
|
|
165
|
+
gasLimit,
|
|
166
|
+
...(params.type === 'eip1559'
|
|
167
|
+
? {
|
|
168
|
+
maxFeePerGas: params.maxFeePerGas,
|
|
169
|
+
maxPriorityFeePerGas: params.maxPriorityFeePerGas,
|
|
170
|
+
...(extra.baseFeePerGas !== undefined
|
|
171
|
+
? { baseFeePerGas: extra.baseFeePerGas }
|
|
172
|
+
: {}),
|
|
173
|
+
}
|
|
174
|
+
: { gasPrice: params.gasPrice }),
|
|
175
|
+
...(extra.l1Fee !== undefined ? { l1Fee: extra.l1Fee } : {}),
|
|
176
|
+
expected: gasLimit * expectedPrice + (extra.l1Fee ?? 0n),
|
|
177
|
+
};
|
|
178
|
+
return {
|
|
179
|
+
kind: params.type === 'eip1559' ? 'evm-1559' : 'evm-legacy',
|
|
180
|
+
speed,
|
|
181
|
+
charges: [
|
|
182
|
+
{ asset: 'native', amount: gasLimit * cap, label: 'network' },
|
|
183
|
+
...(extra.l1Fee !== undefined
|
|
184
|
+
? [{ asset: 'native', amount: extra.l1Fee, label: 'l1-data' }]
|
|
185
|
+
: []),
|
|
186
|
+
],
|
|
187
|
+
// The L1 data fee moves with L1 prices until inclusion, so it is only expected.
|
|
188
|
+
bound: extra.l1Fee !== undefined ? 'expected' : 'upper',
|
|
189
|
+
details,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/** The gas limit and prices a fee draft's details hold. */
|
|
193
|
+
function feeOf(details) {
|
|
194
|
+
const { gasLimit, maxFeePerGas, maxPriorityFeePerGas, gasPrice } = details;
|
|
195
|
+
if (typeof gasLimit !== 'bigint')
|
|
196
|
+
throw invalid('the fee holds no EVM gas limit');
|
|
197
|
+
if (typeof maxFeePerGas === 'bigint' && typeof maxPriorityFeePerGas === 'bigint') {
|
|
198
|
+
return { gasLimit, params: { type: 'eip1559', maxFeePerGas, maxPriorityFeePerGas } };
|
|
199
|
+
}
|
|
200
|
+
if (typeof gasPrice === 'bigint')
|
|
201
|
+
return { gasLimit, params: { type: 'legacy', gasPrice } };
|
|
202
|
+
throw invalid('the fee holds no EVM gas prices');
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Whether `next` may replace `previous` under a txpool's `percent` price bump: each price
|
|
206
|
+
* strictly higher, and at least `percent` higher (geth), so a zero tip must still rise.
|
|
207
|
+
*/
|
|
208
|
+
function meetsBump(previous, next, percent) {
|
|
209
|
+
const factor = BigInt(100 + percent);
|
|
210
|
+
const bumped = (before, after) => after > before && after * 100n >= before * factor;
|
|
211
|
+
if (previous.type === 'eip1559' && next.type === 'eip1559') {
|
|
212
|
+
return (bumped(previous.maxFeePerGas, next.maxFeePerGas) &&
|
|
213
|
+
bumped(previous.maxPriorityFeePerGas, next.maxPriorityFeePerGas));
|
|
214
|
+
}
|
|
215
|
+
if (previous.type === 'legacy' && next.type === 'legacy') {
|
|
216
|
+
return bumped(previous.gasPrice, next.gasPrice);
|
|
217
|
+
}
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
/** The smallest prices that meet the bump over `previous`: each strictly higher (geth). */
|
|
221
|
+
function minimumBump(previous, percent) {
|
|
222
|
+
const up = (value) => {
|
|
223
|
+
const bumped = ceilDiv(value * BigInt(100 + percent), 100n);
|
|
224
|
+
return bumped > value ? bumped : value + 1n;
|
|
225
|
+
};
|
|
226
|
+
return previous.type === 'eip1559'
|
|
227
|
+
? {
|
|
228
|
+
type: 'eip1559',
|
|
229
|
+
maxFeePerGas: up(previous.maxFeePerGas),
|
|
230
|
+
maxPriorityFeePerGas: up(previous.maxPriorityFeePerGas),
|
|
231
|
+
}
|
|
232
|
+
: { type: 'legacy', gasPrice: up(previous.gasPrice) };
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=fees.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fees.js","sourceRoot":"","sources":["../../../src/adapters/evm/fees.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The EVM fee policy: `evm-1559` or `evm-legacy` per network, an `upper`\n * bound with the `expected` cost in the details, overrides, and replacement bumps. Pure\n * functions over plain data; the driver does the I/O.\n */\nimport { ProviderError, ValidationError } from '../../core/errors/error';\nimport type { FeeEstimateDraft, FeeOverride, FeeSpeed } from '../../core/model/fee';\nimport type { EvmFeeDetails, EvmFeeHistory } from './types';\n\nexport type EvmFeeModel = 'evm-1559' | 'evm-legacy';\n\n/** The per-gas prices of one transaction. */\nexport type EvmFeeParams =\n | {\n readonly type: 'eip1559';\n readonly maxFeePerGas: bigint;\n readonly maxPriorityFeePerGas: bigint;\n }\n | { readonly type: 'legacy'; readonly gasPrice: bigint };\n\n/**\n * `eth_feeHistory` window and priority-fee percentiles for slow, normal and fast: the\n * method the Polygon Gas Station documents (10th, 25th and 50th over the last 15 blocks).\n */\nexport const FEE_HISTORY_BLOCKS = 15;\nexport const FEE_PERCENTILES: readonly number[] = [10, 25, 50];\nconst SPEED_INDEX: Readonly<Record<FeeSpeed, number>> = { slow: 0, normal: 1, fast: 2 };\n/** Legacy networks: `eth_gasPrice` scaled per speed, in percent. */\nconst LEGACY_PERCENT: Readonly<Record<FeeSpeed, bigint>> = {\n slow: 100n,\n normal: 110n,\n fast: 125n,\n};\n/** A plain transfer to an account without code costs exactly this much gas. */\nexport const TRANSFER_GAS = 21_000n;\n/** Headroom over the node's estimate for anything but a plain transfer, in percent. */\nconst GAS_HEADROOM_PERCENT = 120n;\n\nconst ceilDiv = (a: bigint, b: bigint): bigint => (a + b - 1n) / b;\nconst max = (a: bigint, b: bigint): bigint => (a > b ? a : b);\nconst min = (a: bigint, b: bigint): bigint => (a < b ? a : b);\n\n/** The lower median; `0n` for no values. */\nexport function median(values: readonly bigint[]): bigint {\n if (values.length === 0) return 0n;\n const sorted = [...values].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));\n return sorted[Math.floor((sorted.length - 1) / 2)] as bigint;\n}\n\nconst malformedHistory = () =>\n new ProviderError('PROVIDER_UNAVAILABLE', 'malformed fee history');\n\n/**\n * EIP-1559 prices for `speed`: the tip is the median, over the window, of the speed's\n * percentile (at least `minTip`); the cap allows the next base fee to double. The history\n * must answer a request for `FEE_PERCENTILES`: one without the next base fee, without\n * reward rows, or with a reward row shorter than `FEE_PERCENTILES` is a retryable\n * `PROVIDER_UNAVAILABLE`, never a tip of `minTip`.\n */\nexport function feesFromHistory(\n history: EvmFeeHistory,\n speed: FeeSpeed,\n minTip: bigint,\n): { readonly params: EvmFeeParams; readonly baseFeePerGas: bigint } {\n const baseFeePerGas = history.baseFeePerGas[history.baseFeePerGas.length - 1];\n if (baseFeePerGas === undefined || history.reward.length === 0) {\n throw malformedHistory();\n }\n const index = SPEED_INDEX[speed];\n const tips = history.reward.map((row) => {\n const tip = row[index];\n if (row.length < FEE_PERCENTILES.length || tip === undefined)\n throw malformedHistory();\n return tip;\n });\n const tip = max(median(tips), minTip);\n return {\n params: {\n type: 'eip1559',\n maxFeePerGas: 2n * baseFeePerGas + tip,\n maxPriorityFeePerGas: tip,\n },\n baseFeePerGas,\n };\n}\n\nexport function legacyPrice(gasPrice: bigint, speed: FeeSpeed): EvmFeeParams {\n return { type: 'legacy', gasPrice: ceilDiv(gasPrice * LEGACY_PERCENT[speed], 100n) };\n}\n\n/** The node's estimate, with headroom unless it is a plain transfer. */\nexport function gasLimitFrom(estimate: bigint): bigint {\n return estimate === TRANSFER_GAS\n ? TRANSFER_GAS\n : ceilDiv(estimate * GAS_HEADROOM_PERCENT, 100n);\n}\n\nconst invalid = (reason: string) => new ValidationError('INVALID_INTENT', reason);\n\n/**\n * The default `maxFeePerGas`, the highest price per gas an EVM transaction signs, 1,000\n * gwei. It bounds a plain transfer at 0.021 and a 65,000-gas token transfer at 0.065 of\n * the native coin, however an endpoint prices the fee. A network whose base fee rises\n * above the ceiling stalls its transfers as `FEE_TOO_LOW` until the fee falls or the\n * option is raised.\n */\nexport const DEFAULT_MAX_FEE_PER_GAS = 1_000_000_000_000n;\n\n/** The highest price per gas `params` may pay: the fee cap, or the legacy gas price. */\nexport function priceCap(params: EvmFeeParams): bigint {\n return params.type === 'eip1559' ? params.maxFeePerGas : params.gasPrice;\n}\n\n/**\n * A node's suggestion within the ceiling: the fee cap or gas price at most `ceiling`,\n * and the tip at most the fee cap. No endpoint can raise what a transfer signs.\n */\nexport function capPrice(params: EvmFeeParams, ceiling: bigint): EvmFeeParams {\n if (params.type === 'legacy')\n return { type: 'legacy', gasPrice: min(params.gasPrice, ceiling) };\n const maxFeePerGas = min(params.maxFeePerGas, ceiling);\n return {\n type: 'eip1559',\n maxFeePerGas,\n maxPriorityFeePerGas: min(params.maxPriorityFeePerGas, maxFeePerGas),\n };\n}\n\n/**\n * Refuses, before anything is signed, a fee whose price per gas is above `ceiling` (the\n * handle's `maxFeePerGas`), whatever produced it: an explicit override, a stored fee, or a\n * cancel's least bump. The details carry the price and the bound as decimal strings.\n */\nexport function assertWithinCeiling(params: EvmFeeParams, ceiling: bigint): void {\n const price = priceCap(params);\n if (price <= ceiling) return;\n throw new ValidationError(\n 'INVALID_INTENT',\n 'the fee is above maxFeePerGas, the EVM handle option that bounds it (wei per gas)',\n { details: { required: price.toString(), maxFeePerGas: ceiling.toString() } },\n );\n}\n\n/** Validates an `EvmFeeOverride` against the network's fee model. */\nexport function parseFeeOverride(\n override: FeeOverride,\n model: EvmFeeModel,\n): { readonly params: EvmFeeParams; readonly gasLimit?: bigint } {\n const allowed =\n model === 'evm-1559'\n ? ['maxFeePerGas', 'maxPriorityFeePerGas', 'gasLimit']\n : ['gasPrice', 'gasLimit'];\n const shape =\n model === 'evm-1559'\n ? '{ maxFeePerGas, maxPriorityFeePerGas, gasLimit? }'\n : '{ gasPrice, gasLimit? }';\n const keys = Object.keys(override);\n if (keys.some((key) => !allowed.includes(key))) {\n throw invalid(`${model} fee overrides look like ${shape}`);\n }\n const amount = (key: string, min: bigint): bigint => {\n const value = override[key];\n if (typeof value !== 'bigint' || value < min) {\n throw invalid(`fee override '${key}' must be a bigint of at least ${min}`);\n }\n return value;\n };\n const gasLimit =\n override.gasLimit === undefined ? undefined : amount('gasLimit', TRANSFER_GAS);\n const limit = gasLimit !== undefined ? { gasLimit } : {};\n if (model === 'evm-legacy') {\n return { params: { type: 'legacy', gasPrice: amount('gasPrice', 1n) }, ...limit };\n }\n const maxFeePerGas = amount('maxFeePerGas', 1n);\n const maxPriorityFeePerGas = amount('maxPriorityFeePerGas', 0n);\n if (maxPriorityFeePerGas > maxFeePerGas) {\n throw invalid('maxPriorityFeePerGas must not exceed maxFeePerGas');\n }\n return { params: { type: 'eip1559', maxFeePerGas, maxPriorityFeePerGas }, ...limit };\n}\n\n/** The fee draft for a transaction of `gasLimit` at `params`. */\nexport function feeDraft(\n speed: FeeSpeed | 'custom',\n gasLimit: bigint,\n params: EvmFeeParams,\n extra: { readonly baseFeePerGas?: bigint; readonly l1Fee?: bigint } = {},\n): FeeEstimateDraft {\n const cap = params.type === 'eip1559' ? params.maxFeePerGas : params.gasPrice;\n const expectedPrice =\n params.type === 'eip1559' && extra.baseFeePerGas !== undefined\n ? min(params.maxFeePerGas, extra.baseFeePerGas + params.maxPriorityFeePerGas)\n : cap;\n // `satisfies` checks the shape and keeps a literal type the draft's record accepts.\n const details = {\n gasLimit,\n ...(params.type === 'eip1559'\n ? {\n maxFeePerGas: params.maxFeePerGas,\n maxPriorityFeePerGas: params.maxPriorityFeePerGas,\n ...(extra.baseFeePerGas !== undefined\n ? { baseFeePerGas: extra.baseFeePerGas }\n : {}),\n }\n : { gasPrice: params.gasPrice }),\n ...(extra.l1Fee !== undefined ? { l1Fee: extra.l1Fee } : {}),\n expected: gasLimit * expectedPrice + (extra.l1Fee ?? 0n),\n } satisfies EvmFeeDetails;\n return {\n kind: params.type === 'eip1559' ? 'evm-1559' : 'evm-legacy',\n speed,\n charges: [\n { asset: 'native', amount: gasLimit * cap, label: 'network' },\n ...(extra.l1Fee !== undefined\n ? [{ asset: 'native' as const, amount: extra.l1Fee, label: 'l1-data' }]\n : []),\n ],\n // The L1 data fee moves with L1 prices until inclusion, so it is only expected.\n bound: extra.l1Fee !== undefined ? 'expected' : 'upper',\n details,\n };\n}\n\n/** The gas limit and prices a fee draft's details hold. */\nexport function feeOf(details: Readonly<Record<string, unknown>>): {\n readonly gasLimit: bigint;\n readonly params: EvmFeeParams;\n} {\n const { gasLimit, maxFeePerGas, maxPriorityFeePerGas, gasPrice } = details;\n if (typeof gasLimit !== 'bigint') throw invalid('the fee holds no EVM gas limit');\n if (typeof maxFeePerGas === 'bigint' && typeof maxPriorityFeePerGas === 'bigint') {\n return { gasLimit, params: { type: 'eip1559', maxFeePerGas, maxPriorityFeePerGas } };\n }\n if (typeof gasPrice === 'bigint')\n return { gasLimit, params: { type: 'legacy', gasPrice } };\n throw invalid('the fee holds no EVM gas prices');\n}\n\n/**\n * Whether `next` may replace `previous` under a txpool's `percent` price bump: each price\n * strictly higher, and at least `percent` higher (geth), so a zero tip must still rise.\n */\nexport function meetsBump(\n previous: EvmFeeParams,\n next: EvmFeeParams,\n percent: number,\n): boolean {\n const factor = BigInt(100 + percent);\n const bumped = (before: bigint, after: bigint) =>\n after > before && after * 100n >= before * factor;\n if (previous.type === 'eip1559' && next.type === 'eip1559') {\n return (\n bumped(previous.maxFeePerGas, next.maxFeePerGas) &&\n bumped(previous.maxPriorityFeePerGas, next.maxPriorityFeePerGas)\n );\n }\n if (previous.type === 'legacy' && next.type === 'legacy') {\n return bumped(previous.gasPrice, next.gasPrice);\n }\n return false;\n}\n\n/** The smallest prices that meet the bump over `previous`: each strictly higher (geth). */\nexport function minimumBump(previous: EvmFeeParams, percent: number): EvmFeeParams {\n const up = (value: bigint) => {\n const bumped = ceilDiv(value * BigInt(100 + percent), 100n);\n return bumped > value ? bumped : value + 1n;\n };\n return previous.type === 'eip1559'\n ? {\n type: 'eip1559',\n maxFeePerGas: up(previous.maxFeePerGas),\n maxPriorityFeePerGas: up(previous.maxPriorityFeePerGas),\n }\n : { type: 'legacy', gasPrice: up(previous.gasPrice) };\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `crypto-aio/evm`: EVM chains of your own (`evmChainPlugin`), the SDK-free EVM types, and
|
|
3
|
+
* the `crypto-aio/native` client types: importing this entry types `native(bc, 'ethers')`
|
|
4
|
+
* as an ethers `JsonRpcApiProvider` and `native(bc, 'web3')` as a `Web3` instance.
|
|
5
|
+
*
|
|
6
|
+
* @module crypto-aio/evm
|
|
7
|
+
*/
|
|
8
|
+
import type { JsonRpcApiProvider } from 'ethers';
|
|
9
|
+
import type { Web3 } from 'web3';
|
|
10
|
+
declare module '../../index' {
|
|
11
|
+
interface NativeClientMap {
|
|
12
|
+
ethers: JsonRpcApiProvider;
|
|
13
|
+
web3: Web3;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export { EVM_PEER_DEPENDENCIES, evmChainPlugin } from './plugin';
|
|
17
|
+
export type { EvmChainPluginOptions } from './plugin';
|
|
18
|
+
export { DEFAULT_MAX_FEE_PER_GAS } from './fees';
|
|
19
|
+
export { EVM_CAPABILITIES } from './network';
|
|
20
|
+
export type { EvmExt, EvmFeeDetails, EvmFeeOverride } from './types';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EVM_CAPABILITIES = exports.DEFAULT_MAX_FEE_PER_GAS = exports.evmChainPlugin = exports.EVM_PEER_DEPENDENCIES = void 0;
|
|
4
|
+
var plugin_1 = require("./plugin");
|
|
5
|
+
Object.defineProperty(exports, "EVM_PEER_DEPENDENCIES", { enumerable: true, get: function () { return plugin_1.EVM_PEER_DEPENDENCIES; } });
|
|
6
|
+
Object.defineProperty(exports, "evmChainPlugin", { enumerable: true, get: function () { return plugin_1.evmChainPlugin; } });
|
|
7
|
+
var fees_1 = require("./fees");
|
|
8
|
+
Object.defineProperty(exports, "DEFAULT_MAX_FEE_PER_GAS", { enumerable: true, get: function () { return fees_1.DEFAULT_MAX_FEE_PER_GAS; } });
|
|
9
|
+
var network_1 = require("./network");
|
|
10
|
+
Object.defineProperty(exports, "EVM_CAPABILITIES", { enumerable: true, get: function () { return network_1.EVM_CAPABILITIES; } });
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/evm/index.ts"],"names":[],"mappings":";;;AAmBA,mCAAiE;AAAxD,+GAAA,qBAAqB,OAAA;AAAE,wGAAA,cAAc,OAAA;AAE9C,+BAAiD;AAAxC,+GAAA,uBAAuB,OAAA;AAChC,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA","sourcesContent":["/**\n * `crypto-aio/evm`: EVM chains of your own (`evmChainPlugin`), the SDK-free EVM types, and\n * the `crypto-aio/native` client types: importing this entry types `native(bc, 'ethers')`\n * as an ethers `JsonRpcApiProvider` and `native(bc, 'web3')` as a `Web3` instance.\n *\n * @module crypto-aio/evm\n */\nimport type { JsonRpcApiProvider } from 'ethers';\nimport type { Web3 } from 'web3';\n\n// Through the package entry, never a core module. SDK types appear only here, in the\n// adapter's entry, so the main entry's typings name no SDK.\ndeclare module '../../index' {\n interface NativeClientMap {\n ethers: JsonRpcApiProvider;\n web3: Web3;\n }\n}\n\nexport { EVM_PEER_DEPENDENCIES, evmChainPlugin } from './plugin';\nexport type { EvmChainPluginOptions } from './plugin';\nexport { DEFAULT_MAX_FEE_PER_GAS } from './fees';\nexport { EVM_CAPABILITIES } from './network';\nexport type { EvmExt, EvmFeeDetails, EvmFeeOverride } from './types';\n"]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the EVM driver needs from a network's registry entry (each network keeps its own
|
|
3
|
+
* registry identity, its decimal chain id), validated once when a driver is created, so a
|
|
4
|
+
* custom EVM chain with inconsistent data fails with `CONFIG_INVALID` instead of
|
|
5
|
+
* misbehaving.
|
|
6
|
+
*/
|
|
7
|
+
import type { Capability } from '../../core/model/capability';
|
|
8
|
+
import type { ChainInfo, NetworkInfo } from '../../core/model/chain';
|
|
9
|
+
import { type EvmFeeModel } from './fees';
|
|
10
|
+
/** Every capability an EVM network can have; a network removes what it lacks. */
|
|
11
|
+
export declare const EVM_CAPABILITIES: readonly Capability[];
|
|
12
|
+
export type EvmFinality = {
|
|
13
|
+
readonly kind: 'tag';
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: 'confirmations';
|
|
16
|
+
readonly confirmations: number;
|
|
17
|
+
};
|
|
18
|
+
export interface EvmNetworkConfig {
|
|
19
|
+
readonly chainId: bigint;
|
|
20
|
+
readonly feeModel: EvmFeeModel;
|
|
21
|
+
readonly finality: EvmFinality;
|
|
22
|
+
/** The txpool's price bump; `undefined` when the network has no replace or cancel. */
|
|
23
|
+
readonly minBumpPercent?: number;
|
|
24
|
+
readonly minPriorityFeePerGas: bigint;
|
|
25
|
+
/** OP Stack: transactions also pay an L1 data fee (`GasPriceOracle.getL1Fee`). */
|
|
26
|
+
readonly l1DataFee: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* bor-based networks (`params.systemLogs: 'bor'`, as on Polygon PoS): receipts carry bor's
|
|
29
|
+
* `POLYGON_FEE_LOG` and `POLYGON_TRANSFER_LOG`.
|
|
30
|
+
*/
|
|
31
|
+
readonly polygonSystemLogs: boolean;
|
|
32
|
+
readonly capabilities: ReadonlySet<Capability>;
|
|
33
|
+
/**
|
|
34
|
+
* The highest price per gas (wei) a transaction signs: the handle's
|
|
35
|
+
* `maxFeePerGas` option, else the network's `params.maxFeePerGas`, else
|
|
36
|
+
* `DEFAULT_MAX_FEE_PER_GAS`.
|
|
37
|
+
*/
|
|
38
|
+
readonly maxFeePerGas: bigint;
|
|
39
|
+
}
|
|
40
|
+
/** The OP Stack `GasPriceOracle` predeploy. */
|
|
41
|
+
export declare const GAS_PRICE_ORACLE = "0x420000000000000000000000000000000000000F";
|
|
42
|
+
/**
|
|
43
|
+
* The `LogFeeTransfer(address,address,address,uint256,uint256,uint256,uint256,uint256)`
|
|
44
|
+
* system log that Polygon PoS's client (bor, `core/bor_fee_log.go`) adds to every
|
|
45
|
+
* fee-paying transaction, emitted from the MRC20 predeploy. It says nothing about code.
|
|
46
|
+
*/
|
|
47
|
+
export declare const POLYGON_FEE_LOG: {
|
|
48
|
+
readonly address: "0x0000000000000000000000000000000000001010";
|
|
49
|
+
readonly topic: "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63";
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* bor's `LogTransfer(address,address,address,uint256,uint256,uint256,uint256,uint256)`
|
|
53
|
+
* system log for a native POL value transfer (`core/evm.go` `Transfer`), from the same
|
|
54
|
+
* predeploy. Its topic is not ERC-20 `Transfer`'s, so it never decodes as a token movement.
|
|
55
|
+
*/
|
|
56
|
+
export declare const POLYGON_TRANSFER_LOG: {
|
|
57
|
+
readonly address: "0x0000000000000000000000000000000000001010";
|
|
58
|
+
readonly topic: "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4";
|
|
59
|
+
};
|
|
60
|
+
export declare function evmNetworkConfig(chain: ChainInfo, network: NetworkInfo, options?: Readonly<Record<string, unknown>>): EvmNetworkConfig;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POLYGON_TRANSFER_LOG = exports.POLYGON_FEE_LOG = exports.GAS_PRICE_ORACLE = exports.EVM_CAPABILITIES = void 0;
|
|
4
|
+
exports.evmNetworkConfig = evmNetworkConfig;
|
|
5
|
+
const error_1 = require("../../core/errors/error");
|
|
6
|
+
const names_1 = require("../../core/util/names");
|
|
7
|
+
const fees_1 = require("./fees");
|
|
8
|
+
/** Every capability an EVM network can have; a network removes what it lacks. */
|
|
9
|
+
exports.EVM_CAPABILITIES = [
|
|
10
|
+
'tokens',
|
|
11
|
+
'block-scan',
|
|
12
|
+
'hd-public-derivation',
|
|
13
|
+
'fee-market-1559',
|
|
14
|
+
'finality-tag',
|
|
15
|
+
'replace-fee',
|
|
16
|
+
'cancel',
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* The only driver option (`HandleOptions.options`) the EVM driver reads. Any other key is
|
|
20
|
+
* refused, so a typo, or another family's option such as Tron's `maxFeeLimit`, fails loudly
|
|
21
|
+
* instead of leaving the default in place.
|
|
22
|
+
*/
|
|
23
|
+
const OPTION_KEYS = Object.freeze(['maxFeePerGas']);
|
|
24
|
+
const MAX_UINT256 = 2n ** 256n - 1n;
|
|
25
|
+
/** A price ceiling: a bigint of wei per gas that an EVM transaction can carry. */
|
|
26
|
+
function priceCeiling(value, name, fail) {
|
|
27
|
+
if (typeof value !== 'bigint' || value < 1n || value > MAX_UINT256) {
|
|
28
|
+
fail(`${name} must be a bigint of wei per gas from 1 to 2^256 − 1`);
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
/** The OP Stack `GasPriceOracle` predeploy. */
|
|
33
|
+
exports.GAS_PRICE_ORACLE = '0x420000000000000000000000000000000000000F';
|
|
34
|
+
/**
|
|
35
|
+
* The `LogFeeTransfer(address,address,address,uint256,uint256,uint256,uint256,uint256)`
|
|
36
|
+
* system log that Polygon PoS's client (bor, `core/bor_fee_log.go`) adds to every
|
|
37
|
+
* fee-paying transaction, emitted from the MRC20 predeploy. It says nothing about code.
|
|
38
|
+
*/
|
|
39
|
+
exports.POLYGON_FEE_LOG = {
|
|
40
|
+
address: '0x0000000000000000000000000000000000001010',
|
|
41
|
+
topic: '0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63',
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* bor's `LogTransfer(address,address,address,uint256,uint256,uint256,uint256,uint256)`
|
|
45
|
+
* system log for a native POL value transfer (`core/evm.go` `Transfer`), from the same
|
|
46
|
+
* predeploy. Its topic is not ERC-20 `Transfer`'s, so it never decodes as a token movement.
|
|
47
|
+
*/
|
|
48
|
+
exports.POLYGON_TRANSFER_LOG = {
|
|
49
|
+
address: exports.POLYGON_FEE_LOG.address,
|
|
50
|
+
topic: '0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4',
|
|
51
|
+
};
|
|
52
|
+
function finalityOf(policy, fail) {
|
|
53
|
+
if (policy.kind === 'tag')
|
|
54
|
+
return { kind: 'tag' };
|
|
55
|
+
if (policy.kind === 'confirmations') {
|
|
56
|
+
// The final height is `head - confirmations + 1`, so fewer than one is the future.
|
|
57
|
+
const confirmations = policy.confirmations;
|
|
58
|
+
if (!Number.isSafeInteger(confirmations) || confirmations < 1) {
|
|
59
|
+
return fail('finality confirmations must be an integer of at least 1');
|
|
60
|
+
}
|
|
61
|
+
return { kind: 'confirmations', confirmations: confirmations };
|
|
62
|
+
}
|
|
63
|
+
return fail(`finality '${policy.kind}' is not an EVM policy (use 'tag' or 'confirmations')`);
|
|
64
|
+
}
|
|
65
|
+
function evmNetworkConfig(chain, network, options = {}) {
|
|
66
|
+
const fail = (reason) => {
|
|
67
|
+
throw new error_1.ConfigError('CONFIG_INVALID', `EVM network ${chain.id}:${network.id}: ${reason}`);
|
|
68
|
+
};
|
|
69
|
+
if (network.identity === undefined || !/^[1-9][0-9]*$/.test(network.identity)) {
|
|
70
|
+
fail('its identity must be the decimal chain id');
|
|
71
|
+
}
|
|
72
|
+
const feeModel = network.feeModel;
|
|
73
|
+
if (feeModel !== 'evm-1559' && feeModel !== 'evm-legacy') {
|
|
74
|
+
fail(`fee model '${feeModel}' is not 'evm-1559' or 'evm-legacy'`);
|
|
75
|
+
}
|
|
76
|
+
const finality = finalityOf(network.finality, fail);
|
|
77
|
+
const capabilities = new Set(exports.EVM_CAPABILITIES);
|
|
78
|
+
for (const c of network.capabilities?.add ?? [])
|
|
79
|
+
capabilities.add(c);
|
|
80
|
+
for (const c of network.capabilities?.remove ?? [])
|
|
81
|
+
capabilities.delete(c);
|
|
82
|
+
if (capabilities.has('fee-market-1559') !== (feeModel === 'evm-1559')) {
|
|
83
|
+
fail(`'fee-market-1559' must be present exactly on 'evm-1559' networks`);
|
|
84
|
+
}
|
|
85
|
+
if (capabilities.has('finality-tag') !== (finality.kind === 'tag')) {
|
|
86
|
+
fail(`'finality-tag' must be present exactly on 'tag' finality networks`);
|
|
87
|
+
}
|
|
88
|
+
// The fee policy computes `BigInt(100 + percent)`, which throws on a fraction.
|
|
89
|
+
const bump = network.replacement?.minBumpPercent;
|
|
90
|
+
if (bump !== undefined && !(Number.isSafeInteger(bump) && bump >= 0)) {
|
|
91
|
+
fail('replacement.minBumpPercent must be a non-negative integer');
|
|
92
|
+
}
|
|
93
|
+
const params = network.params ?? {};
|
|
94
|
+
const minTip = params.minPriorityFeePerGas;
|
|
95
|
+
if (minTip !== undefined && typeof minTip !== 'bigint') {
|
|
96
|
+
fail('params.minPriorityFeePerGas must be a bigint');
|
|
97
|
+
}
|
|
98
|
+
if (params.l1DataFee !== undefined && params.l1DataFee !== 'op-stack') {
|
|
99
|
+
fail(`params.l1DataFee must be 'op-stack'`);
|
|
100
|
+
}
|
|
101
|
+
// Data, not the chain id, so a bor chain served through evmChainPlugin can opt in.
|
|
102
|
+
if (params.systemLogs !== undefined && params.systemLogs !== 'bor') {
|
|
103
|
+
fail(`params.systemLogs must be 'bor'`);
|
|
104
|
+
}
|
|
105
|
+
// The refusal lists the accepted name, never the caller's key or its value: either may
|
|
106
|
+
// be a secret typed in the wrong place.
|
|
107
|
+
for (const key of Object.keys(options)) {
|
|
108
|
+
if (!OPTION_KEYS.includes(key))
|
|
109
|
+
fail((0, names_1.unknownName)('option', OPTION_KEYS));
|
|
110
|
+
}
|
|
111
|
+
// The handle's option, else the network entry's own, else the
|
|
112
|
+
// default. A network value is checked even where an option overrides it.
|
|
113
|
+
const own = params.maxFeePerGas;
|
|
114
|
+
const networkCeiling = own === undefined ? undefined : priceCeiling(own, 'params.maxFeePerGas', fail);
|
|
115
|
+
const maxFeePerGas = options.maxFeePerGas !== undefined
|
|
116
|
+
? priceCeiling(options.maxFeePerGas, 'maxFeePerGas', fail)
|
|
117
|
+
: (networkCeiling ?? fees_1.DEFAULT_MAX_FEE_PER_GAS);
|
|
118
|
+
const replaces = capabilities.has('replace-fee') || capabilities.has('cancel');
|
|
119
|
+
return {
|
|
120
|
+
chainId: BigInt(network.identity),
|
|
121
|
+
feeModel: feeModel,
|
|
122
|
+
finality,
|
|
123
|
+
...(replaces ? { minBumpPercent: network.replacement?.minBumpPercent ?? 10 } : {}),
|
|
124
|
+
minPriorityFeePerGas: minTip ?? 0n,
|
|
125
|
+
l1DataFee: params.l1DataFee === 'op-stack',
|
|
126
|
+
polygonSystemLogs: params.systemLogs === 'bor',
|
|
127
|
+
capabilities,
|
|
128
|
+
maxFeePerGas,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/adapters/evm/network.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * What the EVM driver needs from a network's registry entry (each network keeps its own\n * registry identity, its decimal chain id), validated once when a driver is created, so a\n * custom EVM chain with inconsistent data fails with `CONFIG_INVALID` instead of\n * misbehaving.\n */\nimport type { Capability } from '../../core/model/capability';\nimport type { ChainInfo, FinalityPolicy, NetworkInfo } from '../../core/model/chain';\nimport { ConfigError } from '../../core/errors/error';\nimport { unknownName } from '../../core/util/names';\nimport { DEFAULT_MAX_FEE_PER_GAS, type EvmFeeModel } from './fees';\n\n/** Every capability an EVM network can have; a network removes what it lacks. */\nexport const EVM_CAPABILITIES: readonly Capability[] = [\n 'tokens',\n 'block-scan',\n 'hd-public-derivation',\n 'fee-market-1559',\n 'finality-tag',\n 'replace-fee',\n 'cancel',\n];\n\nexport type EvmFinality =\n | { readonly kind: 'tag' }\n | { readonly kind: 'confirmations'; readonly confirmations: number };\n\nexport interface EvmNetworkConfig {\n readonly chainId: bigint;\n readonly feeModel: EvmFeeModel;\n readonly finality: EvmFinality;\n /** The txpool's price bump; `undefined` when the network has no replace or cancel. */\n readonly minBumpPercent?: number;\n readonly minPriorityFeePerGas: bigint;\n /** OP Stack: transactions also pay an L1 data fee (`GasPriceOracle.getL1Fee`). */\n readonly l1DataFee: boolean;\n /**\n * bor-based networks (`params.systemLogs: 'bor'`, as on Polygon PoS): receipts carry bor's\n * `POLYGON_FEE_LOG` and `POLYGON_TRANSFER_LOG`.\n */\n readonly polygonSystemLogs: boolean;\n readonly capabilities: ReadonlySet<Capability>;\n /**\n * The highest price per gas (wei) a transaction signs: the handle's\n * `maxFeePerGas` option, else the network's `params.maxFeePerGas`, else\n * `DEFAULT_MAX_FEE_PER_GAS`.\n */\n readonly maxFeePerGas: bigint;\n}\n\n/**\n * The only driver option (`HandleOptions.options`) the EVM driver reads. Any other key is\n * refused, so a typo, or another family's option such as Tron's `maxFeeLimit`, fails loudly\n * instead of leaving the default in place.\n */\nconst OPTION_KEYS: readonly string[] = Object.freeze(['maxFeePerGas']);\n\nconst MAX_UINT256 = 2n ** 256n - 1n;\n\n/** A price ceiling: a bigint of wei per gas that an EVM transaction can carry. */\nfunction priceCeiling(\n value: unknown,\n name: string,\n fail: (reason: string) => never,\n): bigint {\n if (typeof value !== 'bigint' || value < 1n || value > MAX_UINT256) {\n fail(`${name} must be a bigint of wei per gas from 1 to 2^256 − 1`);\n }\n return value as bigint;\n}\n\n/** The OP Stack `GasPriceOracle` predeploy. */\nexport const GAS_PRICE_ORACLE = '0x420000000000000000000000000000000000000F';\n\n/**\n * The `LogFeeTransfer(address,address,address,uint256,uint256,uint256,uint256,uint256)`\n * system log that Polygon PoS's client (bor, `core/bor_fee_log.go`) adds to every\n * fee-paying transaction, emitted from the MRC20 predeploy. It says nothing about code.\n */\nexport const POLYGON_FEE_LOG = {\n address: '0x0000000000000000000000000000000000001010',\n topic: '0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63',\n} as const;\n\n/**\n * bor's `LogTransfer(address,address,address,uint256,uint256,uint256,uint256,uint256)`\n * system log for a native POL value transfer (`core/evm.go` `Transfer`), from the same\n * predeploy. Its topic is not ERC-20 `Transfer`'s, so it never decodes as a token movement.\n */\nexport const POLYGON_TRANSFER_LOG = {\n address: POLYGON_FEE_LOG.address,\n topic: '0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4',\n} as const;\n\nfunction finalityOf(\n policy: FinalityPolicy,\n fail: (reason: string) => never,\n): EvmFinality {\n if (policy.kind === 'tag') return { kind: 'tag' };\n if (policy.kind === 'confirmations') {\n // The final height is `head - confirmations + 1`, so fewer than one is the future.\n const confirmations: unknown = policy.confirmations;\n if (!Number.isSafeInteger(confirmations) || (confirmations as number) < 1) {\n return fail('finality confirmations must be an integer of at least 1');\n }\n return { kind: 'confirmations', confirmations: confirmations as number };\n }\n return fail(\n `finality '${policy.kind}' is not an EVM policy (use 'tag' or 'confirmations')`,\n );\n}\n\nexport function evmNetworkConfig(\n chain: ChainInfo,\n network: NetworkInfo,\n options: Readonly<Record<string, unknown>> = {},\n): EvmNetworkConfig {\n const fail = (reason: string): never => {\n throw new ConfigError(\n 'CONFIG_INVALID',\n `EVM network ${chain.id}:${network.id}: ${reason}`,\n );\n };\n if (network.identity === undefined || !/^[1-9][0-9]*$/.test(network.identity)) {\n fail('its identity must be the decimal chain id');\n }\n const feeModel = network.feeModel;\n if (feeModel !== 'evm-1559' && feeModel !== 'evm-legacy') {\n fail(`fee model '${feeModel}' is not 'evm-1559' or 'evm-legacy'`);\n }\n const finality = finalityOf(network.finality, fail);\n const capabilities = new Set<Capability>(EVM_CAPABILITIES);\n for (const c of network.capabilities?.add ?? []) capabilities.add(c);\n for (const c of network.capabilities?.remove ?? []) capabilities.delete(c);\n if (capabilities.has('fee-market-1559') !== (feeModel === 'evm-1559')) {\n fail(`'fee-market-1559' must be present exactly on 'evm-1559' networks`);\n }\n if (capabilities.has('finality-tag') !== (finality.kind === 'tag')) {\n fail(`'finality-tag' must be present exactly on 'tag' finality networks`);\n }\n // The fee policy computes `BigInt(100 + percent)`, which throws on a fraction.\n const bump: unknown = network.replacement?.minBumpPercent;\n if (bump !== undefined && !(Number.isSafeInteger(bump) && (bump as number) >= 0)) {\n fail('replacement.minBumpPercent must be a non-negative integer');\n }\n const params = network.params ?? {};\n const minTip = params.minPriorityFeePerGas;\n if (minTip !== undefined && typeof minTip !== 'bigint') {\n fail('params.minPriorityFeePerGas must be a bigint');\n }\n if (params.l1DataFee !== undefined && params.l1DataFee !== 'op-stack') {\n fail(`params.l1DataFee must be 'op-stack'`);\n }\n // Data, not the chain id, so a bor chain served through evmChainPlugin can opt in.\n if (params.systemLogs !== undefined && params.systemLogs !== 'bor') {\n fail(`params.systemLogs must be 'bor'`);\n }\n // The refusal lists the accepted name, never the caller's key or its value: either may\n // be a secret typed in the wrong place.\n for (const key of Object.keys(options)) {\n if (!OPTION_KEYS.includes(key)) fail(unknownName('option', OPTION_KEYS));\n }\n // The handle's option, else the network entry's own, else the\n // default. A network value is checked even where an option overrides it.\n const own = params.maxFeePerGas;\n const networkCeiling =\n own === undefined ? undefined : priceCeiling(own, 'params.maxFeePerGas', fail);\n const maxFeePerGas =\n options.maxFeePerGas !== undefined\n ? priceCeiling(options.maxFeePerGas, 'maxFeePerGas', fail)\n : (networkCeiling ?? DEFAULT_MAX_FEE_PER_GAS);\n const replaces = capabilities.has('replace-fee') || capabilities.has('cancel');\n return {\n chainId: BigInt(network.identity as string),\n feeModel: feeModel as EvmFeeModel,\n finality,\n ...(replaces ? { minBumpPercent: network.replacement?.minBumpPercent ?? 10 } : {}),\n minPriorityFeePerGas: (minTip as bigint | undefined) ?? 0n,\n l1DataFee: params.l1DataFee === 'op-stack',\n polygonSystemLogs: params.systemLogs === 'bor',\n capabilities,\n maxFeePerGas,\n };\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The EVM family plugin: chains, tokens and provider presets as data, plus one
|
|
3
|
+
* adapter manifest per library. SDK-free: only a manifest's `load()` requires a client
|
|
4
|
+
* module, and with it the SDK. `ethers` is registered first, so it is the family default.
|
|
5
|
+
*/
|
|
6
|
+
import type { AdapterManifest, PeerDependency } from '../../core/driver/types';
|
|
7
|
+
import type { ChainInfo } from '../../core/model/chain';
|
|
8
|
+
import type { AssetRegistration } from '../../core/registry/assets';
|
|
9
|
+
import type { Plugin } from '../../core/registry/plugin';
|
|
10
|
+
import type { ProviderPreset } from '../../core/registry/providers';
|
|
11
|
+
/** The SDK versions this adapter is validated against. */
|
|
12
|
+
export declare const EVM_PEER_DEPENDENCIES: Readonly<Record<'ethers' | 'web3', PeerDependency>>;
|
|
13
|
+
/** The `ethers` and `web3` manifests for `chains`, keyed `<family>/<library>`. */
|
|
14
|
+
export declare function evmManifests(family: string, chains: readonly string[]): AdapterManifest[];
|
|
15
|
+
/**
|
|
16
|
+
* The built-in EVM family: Ethereum, BNB Smart Chain, Polygon PoS, Avalanche C-Chain,
|
|
17
|
+
* Arbitrum One, OP Mainnet and Base, with their testnets.
|
|
18
|
+
*/
|
|
19
|
+
export declare function evmPlugin(): Plugin;
|
|
20
|
+
export interface EvmChainPluginOptions {
|
|
21
|
+
/**
|
|
22
|
+
* A unique name matching `/^[a-z][a-z0-9-]*$/`. The plugin registers as `evm:<name>`, so
|
|
23
|
+
* it never collides with a family plugin, and its manifests as `evm:<name>/ethers` and
|
|
24
|
+
* `evm:<name>/web3`.
|
|
25
|
+
*/
|
|
26
|
+
readonly name: string;
|
|
27
|
+
/** Chains with `family: 'evm'`, nonce ordering and the `secp256k1-ecdsa` scheme. */
|
|
28
|
+
readonly chains: readonly ChainInfo[];
|
|
29
|
+
readonly presets?: readonly ProviderPreset[];
|
|
30
|
+
readonly assets?: readonly AssetRegistration[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A plugin for EVM chains of your own, served by the built-in EVM driver with either
|
|
34
|
+
* library. Every network is validated here, so bad data fails at registration.
|
|
35
|
+
*/
|
|
36
|
+
export declare function evmChainPlugin(options: EvmChainPluginOptions): Plugin;
|