crypto-aio 0.0.2 → 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/lib-types.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/adapters/ton/types.js +3 -0
- 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/core/model/transaction.js +3 -0
- 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 -44
- 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 -2
- package/dist/libs/eth/contract.js +0 -7
- package/dist/libs/eth/contract.js.map +0 -1
- package/dist/libs/eth/index.d.ts +0 -20
- package/dist/libs/eth/index.js +0 -62
- package/dist/libs/eth/index.js.map +0 -1
- package/dist/libs/eth/transact.d.ts +0 -2
- package/dist/libs/eth/transact.js +0 -7
- package/dist/libs/eth/transact.js.map +0 -1
- package/dist/libs/index.d.ts +0 -1
- package/dist/libs/index.js +0 -18
- package/dist/libs/index.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 -4
- package/dist/tool/index.js +0 -21
- 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 -4
- package/dist/tool/options.js +0 -28
- package/dist/tool/options.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/index.d.ts +0 -3
- package/dist/type/index.js +0 -20
- package/dist/type/index.js.map +0 -1
- package/dist/type/lib-types.d.ts +0 -7
- package/dist/type/lib-types.js.map +0 -1
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one place that loads `@avalabs/avalanchejs`, at run time with `require()` (its 5.x
|
|
3
|
+
* package is an ES module with a CommonJS build). Its type declarations re-export their own
|
|
4
|
+
* modules without file extensions, which TypeScript cannot follow under `node16`
|
|
5
|
+
* resolution, so the part of the SDK this library uses is declared here instead: the codec
|
|
6
|
+
* managers, the transaction builders, the P-Chain fee calculator and the serializable
|
|
7
|
+
* classes the driver reads. The tests run every declared member against the real package.
|
|
8
|
+
* Loaded only through the manifest's `load()`.
|
|
9
|
+
*/
|
|
10
|
+
/** A serializable avalanchejs object; `_type` names its class (e.g. `avm.BaseTx`). */
|
|
11
|
+
export interface SdkSerializable {
|
|
12
|
+
readonly _type: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SdkId {
|
|
15
|
+
toString(): string;
|
|
16
|
+
toBytes(): Uint8Array;
|
|
17
|
+
}
|
|
18
|
+
export interface SdkInt {
|
|
19
|
+
value(): number;
|
|
20
|
+
}
|
|
21
|
+
export interface SdkBigInt {
|
|
22
|
+
value(): bigint;
|
|
23
|
+
}
|
|
24
|
+
export interface SdkAddress {
|
|
25
|
+
toBytes(): Uint8Array;
|
|
26
|
+
}
|
|
27
|
+
export interface SdkOutputOwners {
|
|
28
|
+
readonly locktime: SdkBigInt;
|
|
29
|
+
readonly threshold: SdkInt;
|
|
30
|
+
readonly addrs: readonly SdkAddress[];
|
|
31
|
+
}
|
|
32
|
+
/** A `secp256k1fx.TransferOutput`. */
|
|
33
|
+
export interface SdkTransferOutput extends SdkSerializable {
|
|
34
|
+
readonly outputOwners: SdkOutputOwners;
|
|
35
|
+
amount(): bigint;
|
|
36
|
+
}
|
|
37
|
+
export interface SdkTransferableOutput extends SdkSerializable {
|
|
38
|
+
readonly assetId: SdkId;
|
|
39
|
+
readonly output: SdkSerializable;
|
|
40
|
+
amount(): bigint;
|
|
41
|
+
}
|
|
42
|
+
export interface SdkUtxoId {
|
|
43
|
+
readonly txID: SdkId;
|
|
44
|
+
readonly outputIdx: SdkInt;
|
|
45
|
+
}
|
|
46
|
+
export interface SdkTransferableInput extends SdkSerializable {
|
|
47
|
+
readonly utxoID: SdkUtxoId;
|
|
48
|
+
readonly assetId: SdkId;
|
|
49
|
+
amount(): bigint;
|
|
50
|
+
sigIndicies(): number[];
|
|
51
|
+
}
|
|
52
|
+
export interface SdkUtxo extends SdkSerializable {
|
|
53
|
+
readonly utxoId: SdkUtxoId;
|
|
54
|
+
readonly assetId: SdkId;
|
|
55
|
+
readonly output: SdkSerializable;
|
|
56
|
+
/** Its bytes without the codec version, in `codec`. */
|
|
57
|
+
toBytes(codec: unknown): Uint8Array;
|
|
58
|
+
}
|
|
59
|
+
/** The `avax.BaseTx` every X-Chain and most P-Chain transactions carry. */
|
|
60
|
+
export interface SdkBaseTx {
|
|
61
|
+
readonly NetworkId: SdkInt;
|
|
62
|
+
readonly BlockchainId: SdkId;
|
|
63
|
+
readonly outputs: readonly SdkTransferableOutput[];
|
|
64
|
+
readonly inputs: readonly SdkTransferableInput[];
|
|
65
|
+
readonly memo: {
|
|
66
|
+
readonly bytes: Uint8Array;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/** An unsigned transaction of any type (`avm.*`, `pvm.*`). */
|
|
70
|
+
export interface SdkTransaction extends SdkSerializable {
|
|
71
|
+
readonly vm: string;
|
|
72
|
+
readonly baseTx?: SdkBaseTx;
|
|
73
|
+
getSigIndices(): number[][];
|
|
74
|
+
}
|
|
75
|
+
export interface SdkCredential extends SdkSerializable {
|
|
76
|
+
/** Each signature as hex (65 bytes: r, s, recovery id). */
|
|
77
|
+
getSignatures(): string[];
|
|
78
|
+
}
|
|
79
|
+
export interface SdkSignedTx {
|
|
80
|
+
readonly unsignedTx: SdkTransaction;
|
|
81
|
+
getCredentials(): SdkCredential[];
|
|
82
|
+
toBytes(): Uint8Array;
|
|
83
|
+
}
|
|
84
|
+
/** A builder's result. */
|
|
85
|
+
export interface SdkUnsignedTx {
|
|
86
|
+
getTx(): SdkTransaction;
|
|
87
|
+
toBytes(): Uint8Array;
|
|
88
|
+
}
|
|
89
|
+
export interface SdkManager {
|
|
90
|
+
getDefaultCodec(): unknown;
|
|
91
|
+
unpack<T>(bytes: Uint8Array, unpacker: SdkUnpacker<T>): T;
|
|
92
|
+
unpackTransaction(bytes: Uint8Array): SdkTransaction;
|
|
93
|
+
packCodec(serializable: SdkSerializable): Uint8Array;
|
|
94
|
+
}
|
|
95
|
+
/** A class `Manager.unpack` reads (`Utxo`, `avaxSerial.SignedTx`). */
|
|
96
|
+
export interface SdkUnpacker<T> {
|
|
97
|
+
fromBytes(bytes: Uint8Array, codec: unknown): [T, Uint8Array];
|
|
98
|
+
}
|
|
99
|
+
export interface SdkDimensions {
|
|
100
|
+
readonly 0: number;
|
|
101
|
+
readonly 1: number;
|
|
102
|
+
readonly 2: number;
|
|
103
|
+
readonly 3: number;
|
|
104
|
+
}
|
|
105
|
+
/** avalanchejs's `Context`: what its builders need to know about the network. */
|
|
106
|
+
export interface SdkContext {
|
|
107
|
+
readonly networkID: number;
|
|
108
|
+
readonly hrp: string;
|
|
109
|
+
readonly xBlockchainID: string;
|
|
110
|
+
readonly pBlockchainID: string;
|
|
111
|
+
readonly cBlockchainID: string;
|
|
112
|
+
readonly avaxAssetID: string;
|
|
113
|
+
readonly baseTxFee: bigint;
|
|
114
|
+
readonly createAssetTxFee: bigint;
|
|
115
|
+
readonly platformFeeConfig: {
|
|
116
|
+
readonly weights: SdkDimensions;
|
|
117
|
+
readonly maxCapacity: bigint;
|
|
118
|
+
readonly maxPerSecond: bigint;
|
|
119
|
+
readonly targetPerSecond: bigint;
|
|
120
|
+
readonly minPrice: bigint;
|
|
121
|
+
readonly excessConversionConstant: bigint;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
export interface SdkFeeState {
|
|
125
|
+
readonly capacity: bigint;
|
|
126
|
+
readonly excess: bigint;
|
|
127
|
+
readonly price: bigint;
|
|
128
|
+
readonly timestamp: string;
|
|
129
|
+
}
|
|
130
|
+
export interface SdkSignature extends SdkSerializable {
|
|
131
|
+
toString(): string;
|
|
132
|
+
}
|
|
133
|
+
/** The members of `@avalabs/avalanchejs` this library calls. */
|
|
134
|
+
export interface AvalancheSdk {
|
|
135
|
+
readonly Utxo: SdkUnpacker<SdkUtxo>;
|
|
136
|
+
readonly avaxSerial: {
|
|
137
|
+
readonly SignedTx: SdkUnpacker<SdkSignedTx> & (new (tx: SdkTransaction, credentials: SdkSerializable[]) => SdkSignedTx);
|
|
138
|
+
};
|
|
139
|
+
readonly Credential: new (signatures: SdkSignature[]) => SdkCredential;
|
|
140
|
+
readonly Signature: new (bytes: Uint8Array) => SdkSignature;
|
|
141
|
+
readonly TransferableOutput: {
|
|
142
|
+
fromNative(assetId: string, amount: bigint, addresses: readonly Uint8Array[], locktime?: bigint, threshold?: number): SdkTransferableOutput;
|
|
143
|
+
};
|
|
144
|
+
readonly Common: {
|
|
145
|
+
createDimensions(dimensions: {
|
|
146
|
+
bandwidth: number;
|
|
147
|
+
dbRead: number;
|
|
148
|
+
dbWrite: number;
|
|
149
|
+
compute: number;
|
|
150
|
+
}): SdkDimensions;
|
|
151
|
+
};
|
|
152
|
+
readonly utils: {
|
|
153
|
+
getManagerForVM(vm: 'AVM' | 'PVM'): SdkManager;
|
|
154
|
+
getBurnedAmountByTx(tx: SdkTransaction, context: SdkContext): Map<string, bigint>;
|
|
155
|
+
};
|
|
156
|
+
readonly avm: {
|
|
157
|
+
newBaseTx(context: SdkContext, fromAddressesBytes: readonly Uint8Array[], utxos: readonly SdkUtxo[], outputs: readonly SdkTransferableOutput[], options: {
|
|
158
|
+
readonly changeAddresses: readonly Uint8Array[];
|
|
159
|
+
readonly memo: Uint8Array;
|
|
160
|
+
readonly minIssuanceTime: bigint;
|
|
161
|
+
}): SdkUnsignedTx;
|
|
162
|
+
};
|
|
163
|
+
readonly pvm: {
|
|
164
|
+
newBaseTx(props: {
|
|
165
|
+
readonly feeState: SdkFeeState;
|
|
166
|
+
readonly fromAddressesBytes: readonly Uint8Array[];
|
|
167
|
+
readonly changeAddressesBytes: readonly Uint8Array[];
|
|
168
|
+
readonly outputs: readonly SdkTransferableOutput[];
|
|
169
|
+
readonly utxos: readonly SdkUtxo[];
|
|
170
|
+
readonly memo: Uint8Array;
|
|
171
|
+
readonly minIssuanceTime: bigint;
|
|
172
|
+
}, context: SdkContext): SdkUnsignedTx;
|
|
173
|
+
calculateFee(tx: SdkTransaction, weights: SdkDimensions, price: bigint): bigint;
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
export declare const avalanche: AvalancheSdk;
|
|
177
|
+
/** The serializable class names the driver tells apart. */
|
|
178
|
+
export declare const TYPES: Readonly<{
|
|
179
|
+
transferOutput: "secp256k1fx.TransferOutput";
|
|
180
|
+
stakeableLockOut: "pvm.StakeableLockOut";
|
|
181
|
+
credential: "secp256k1fx.Credential";
|
|
182
|
+
}>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The one place that loads `@avalabs/avalanchejs`, at run time with `require()` (its 5.x
|
|
4
|
+
* package is an ES module with a CommonJS build). Its type declarations re-export their own
|
|
5
|
+
* modules without file extensions, which TypeScript cannot follow under `node16`
|
|
6
|
+
* resolution, so the part of the SDK this library uses is declared here instead: the codec
|
|
7
|
+
* managers, the transaction builders, the P-Chain fee calculator and the serializable
|
|
8
|
+
* classes the driver reads. The tests run every declared member against the real package.
|
|
9
|
+
* Loaded only through the manifest's `load()`.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.TYPES = exports.avalanche = void 0;
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
14
|
+
exports.avalanche = require('@avalabs/avalanchejs');
|
|
15
|
+
/** The serializable class names the driver tells apart. */
|
|
16
|
+
exports.TYPES = Object.freeze({
|
|
17
|
+
transferOutput: 'secp256k1fx.TransferOutput',
|
|
18
|
+
stakeableLockOut: 'pvm.StakeableLockOut',
|
|
19
|
+
credential: 'secp256k1fx.Credential',
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../../src/adapters/avalanche/sdk.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AA6MH,iEAAiE;AACpD,QAAA,SAAS,GAAG,OAAO,CAAC,sBAAsB,CAAiB,CAAC;AAEzE,2DAA2D;AAC9C,QAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,cAAc,EAAE,4BAA4B;IAC5C,gBAAgB,EAAE,sBAAsB;IACxC,UAAU,EAAE,wBAAwB;CACrC,CAAC,CAAC","sourcesContent":["/**\n * The one place that loads `@avalabs/avalanchejs`, at run time with `require()` (its 5.x\n * package is an ES module with a CommonJS build). Its type declarations re-export their own\n * modules without file extensions, which TypeScript cannot follow under `node16`\n * resolution, so the part of the SDK this library uses is declared here instead: the codec\n * managers, the transaction builders, the P-Chain fee calculator and the serializable\n * classes the driver reads. The tests run every declared member against the real package.\n * Loaded only through the manifest's `load()`.\n */\n\n/** A serializable avalanchejs object; `_type` names its class (e.g. `avm.BaseTx`). */\nexport interface SdkSerializable {\n readonly _type: string;\n}\n\nexport interface SdkId {\n toString(): string;\n toBytes(): Uint8Array;\n}\n\nexport interface SdkInt {\n value(): number;\n}\n\nexport interface SdkBigInt {\n value(): bigint;\n}\n\nexport interface SdkAddress {\n toBytes(): Uint8Array;\n}\n\nexport interface SdkOutputOwners {\n readonly locktime: SdkBigInt;\n readonly threshold: SdkInt;\n readonly addrs: readonly SdkAddress[];\n}\n\n/** A `secp256k1fx.TransferOutput`. */\nexport interface SdkTransferOutput extends SdkSerializable {\n readonly outputOwners: SdkOutputOwners;\n amount(): bigint;\n}\n\nexport interface SdkTransferableOutput extends SdkSerializable {\n readonly assetId: SdkId;\n readonly output: SdkSerializable;\n amount(): bigint;\n}\n\nexport interface SdkUtxoId {\n readonly txID: SdkId;\n readonly outputIdx: SdkInt;\n}\n\nexport interface SdkTransferableInput extends SdkSerializable {\n readonly utxoID: SdkUtxoId;\n readonly assetId: SdkId;\n amount(): bigint;\n sigIndicies(): number[];\n}\n\nexport interface SdkUtxo extends SdkSerializable {\n readonly utxoId: SdkUtxoId;\n readonly assetId: SdkId;\n readonly output: SdkSerializable;\n /** Its bytes without the codec version, in `codec`. */\n toBytes(codec: unknown): Uint8Array;\n}\n\n/** The `avax.BaseTx` every X-Chain and most P-Chain transactions carry. */\nexport interface SdkBaseTx {\n readonly NetworkId: SdkInt;\n readonly BlockchainId: SdkId;\n readonly outputs: readonly SdkTransferableOutput[];\n readonly inputs: readonly SdkTransferableInput[];\n readonly memo: { readonly bytes: Uint8Array };\n}\n\n/** An unsigned transaction of any type (`avm.*`, `pvm.*`). */\nexport interface SdkTransaction extends SdkSerializable {\n readonly vm: string;\n readonly baseTx?: SdkBaseTx;\n getSigIndices(): number[][];\n}\n\nexport interface SdkCredential extends SdkSerializable {\n /** Each signature as hex (65 bytes: r, s, recovery id). */\n getSignatures(): string[];\n}\n\nexport interface SdkSignedTx {\n readonly unsignedTx: SdkTransaction;\n getCredentials(): SdkCredential[];\n toBytes(): Uint8Array;\n}\n\n/** A builder's result. */\nexport interface SdkUnsignedTx {\n getTx(): SdkTransaction;\n toBytes(): Uint8Array;\n}\n\nexport interface SdkManager {\n getDefaultCodec(): unknown;\n unpack<T>(bytes: Uint8Array, unpacker: SdkUnpacker<T>): T;\n unpackTransaction(bytes: Uint8Array): SdkTransaction;\n packCodec(serializable: SdkSerializable): Uint8Array;\n}\n\n/** A class `Manager.unpack` reads (`Utxo`, `avaxSerial.SignedTx`). */\nexport interface SdkUnpacker<T> {\n fromBytes(bytes: Uint8Array, codec: unknown): [T, Uint8Array];\n}\n\nexport interface SdkDimensions {\n readonly 0: number;\n readonly 1: number;\n readonly 2: number;\n readonly 3: number;\n}\n\n/** avalanchejs's `Context`: what its builders need to know about the network. */\nexport interface SdkContext {\n readonly networkID: number;\n readonly hrp: string;\n readonly xBlockchainID: string;\n readonly pBlockchainID: string;\n readonly cBlockchainID: string;\n readonly avaxAssetID: string;\n readonly baseTxFee: bigint;\n readonly createAssetTxFee: bigint;\n readonly platformFeeConfig: {\n readonly weights: SdkDimensions;\n readonly maxCapacity: bigint;\n readonly maxPerSecond: bigint;\n readonly targetPerSecond: bigint;\n readonly minPrice: bigint;\n readonly excessConversionConstant: bigint;\n };\n}\n\nexport interface SdkFeeState {\n readonly capacity: bigint;\n readonly excess: bigint;\n readonly price: bigint;\n readonly timestamp: string;\n}\n\nexport interface SdkSignature extends SdkSerializable {\n toString(): string;\n}\n\n/** The members of `@avalabs/avalanchejs` this library calls. */\nexport interface AvalancheSdk {\n readonly Utxo: SdkUnpacker<SdkUtxo>;\n readonly avaxSerial: {\n readonly SignedTx: SdkUnpacker<SdkSignedTx> &\n (new (tx: SdkTransaction, credentials: SdkSerializable[]) => SdkSignedTx);\n };\n readonly Credential: new (signatures: SdkSignature[]) => SdkCredential;\n readonly Signature: new (bytes: Uint8Array) => SdkSignature;\n readonly TransferableOutput: {\n fromNative(\n assetId: string,\n amount: bigint,\n addresses: readonly Uint8Array[],\n locktime?: bigint,\n threshold?: number,\n ): SdkTransferableOutput;\n };\n readonly Common: {\n createDimensions(dimensions: {\n bandwidth: number;\n dbRead: number;\n dbWrite: number;\n compute: number;\n }): SdkDimensions;\n };\n readonly utils: {\n getManagerForVM(vm: 'AVM' | 'PVM'): SdkManager;\n getBurnedAmountByTx(tx: SdkTransaction, context: SdkContext): Map<string, bigint>;\n };\n readonly avm: {\n newBaseTx(\n context: SdkContext,\n fromAddressesBytes: readonly Uint8Array[],\n utxos: readonly SdkUtxo[],\n outputs: readonly SdkTransferableOutput[],\n options: {\n readonly changeAddresses: readonly Uint8Array[];\n readonly memo: Uint8Array;\n readonly minIssuanceTime: bigint;\n },\n ): SdkUnsignedTx;\n };\n readonly pvm: {\n newBaseTx(\n props: {\n readonly feeState: SdkFeeState;\n readonly fromAddressesBytes: readonly Uint8Array[];\n readonly changeAddressesBytes: readonly Uint8Array[];\n readonly outputs: readonly SdkTransferableOutput[];\n readonly utxos: readonly SdkUtxo[];\n readonly memo: Uint8Array;\n readonly minIssuanceTime: bigint;\n },\n context: SdkContext,\n ): SdkUnsignedTx;\n calculateFee(tx: SdkTransaction, weights: SdkDimensions, price: bigint): bigint;\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nexport const avalanche = require('@avalabs/avalanchejs') as AvalancheSdk;\n\n/** The serializable class names the driver tells apart. */\nexport const TYPES = Object.freeze({\n transferOutput: 'secp256k1fx.TransferOutput',\n stakeableLockOut: 'pvm.StakeableLockOut',\n credential: 'secp256k1fx.Credential',\n});\n"]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK-free types of the Avalanche family (the X-Chain and the P-Chain): the `ext.avalanche`
|
|
3
|
+
* API, fee details and overrides. Nothing here imports an SDK, so the composition root can
|
|
4
|
+
* export these types. The C-Chain is an EVM chain (`avalanche`, family `evm`), not part of
|
|
5
|
+
* this family.
|
|
6
|
+
*/
|
|
7
|
+
import type { CallOptions } from '../../core/transport/types';
|
|
8
|
+
declare module '../../index' {
|
|
9
|
+
interface ChainRegistry {
|
|
10
|
+
'avalanche-x': {
|
|
11
|
+
family: 'avalanche';
|
|
12
|
+
network: 'mainnet' | 'fuji';
|
|
13
|
+
};
|
|
14
|
+
'avalanche-p': {
|
|
15
|
+
family: 'avalanche';
|
|
16
|
+
network: 'mainnet' | 'fuji';
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
interface FamilyRegistry {
|
|
20
|
+
avalanche: {
|
|
21
|
+
library: '@avalabs/avalanchejs';
|
|
22
|
+
ext: AvalancheExt;
|
|
23
|
+
fee: AvalancheFeeDetails;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** Which virtual machine a chain runs: the X-Chain's AVM or the P-Chain's PlatformVM. */
|
|
28
|
+
export type AvalancheVm = 'avm' | 'pvm';
|
|
29
|
+
/**
|
|
30
|
+
* `FeeEstimate.details` of the `avalanche` fee kind. The X-Chain burns a fixed fee per
|
|
31
|
+
* transaction (`static`); the P-Chain prices gas since the Etna upgrade (`dynamic`). Amounts
|
|
32
|
+
* are in nAVAX (9 decimals).
|
|
33
|
+
*/
|
|
34
|
+
export interface AvalancheFeeDetails {
|
|
35
|
+
readonly model: 'static' | 'dynamic';
|
|
36
|
+
/** X-Chain: the network's fixed fee per transaction. */
|
|
37
|
+
readonly txFee?: bigint;
|
|
38
|
+
/** P-Chain: the gas price paid, in nAVAX per unit of gas. */
|
|
39
|
+
readonly gasPrice?: bigint;
|
|
40
|
+
/** P-Chain: the gas the transaction uses (its complexity weighed by the network). */
|
|
41
|
+
readonly gas?: bigint;
|
|
42
|
+
readonly inputs: number;
|
|
43
|
+
/** Outputs including change. */
|
|
44
|
+
readonly outputs: number;
|
|
45
|
+
/** The change paid back to the sender; `0n` when there is none. */
|
|
46
|
+
readonly change: bigint;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* An explicit P-Chain fee (`TransferIntent.fee`): the gas price in nAVAX per unit of gas,
|
|
50
|
+
* as a bigint or a decimal integer string. The X-Chain's fee is fixed, so it takes the
|
|
51
|
+
* speeds only.
|
|
52
|
+
*/
|
|
53
|
+
export type AvalancheFeeOverride = {
|
|
54
|
+
readonly gasPrice: bigint | string;
|
|
55
|
+
};
|
|
56
|
+
/** An output an address owns, as `ext.avalanche.listUnspent` reports it. */
|
|
57
|
+
export interface AvalancheUnspent {
|
|
58
|
+
/** `txID:outputIndex`, the reservation key of this output. */
|
|
59
|
+
readonly utxoId: string;
|
|
60
|
+
readonly txId: string;
|
|
61
|
+
readonly outputIndex: number;
|
|
62
|
+
/** The asset's id (cb58); AVAX is the network's `avaxAssetId`. */
|
|
63
|
+
readonly assetId: string;
|
|
64
|
+
readonly amount: bigint;
|
|
65
|
+
/** Unix seconds before which the output cannot be spent; `0n` for none. */
|
|
66
|
+
readonly locktime: bigint;
|
|
67
|
+
/** How many of the output's owners must sign. */
|
|
68
|
+
readonly threshold: number;
|
|
69
|
+
/**
|
|
70
|
+
* Whether a transfer from this address may spend it: AVAX in a plain transfer output,
|
|
71
|
+
* not locked, that this address can sign alone (threshold 1).
|
|
72
|
+
*/
|
|
73
|
+
readonly spendable: boolean;
|
|
74
|
+
}
|
|
75
|
+
/** `bc.ext.avalanche`: the Avalanche family extension. */
|
|
76
|
+
export interface AvalancheExt {
|
|
77
|
+
readonly avalanche: {
|
|
78
|
+
/** The outputs an address owns on this chain (the node's UTXO set), largest first. */
|
|
79
|
+
listUnspent(address: string): Promise<readonly AvalancheUnspent[]>;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* The transport tags every Avalanche I/O call carries: the purpose and retry class the
|
|
84
|
+
* `ChainDriver` contract table gives each method.
|
|
85
|
+
*/
|
|
86
|
+
export type AvalancheCallTags = Pick<CallOptions, 'purpose' | 'retry' | 'quorum' | 'quorumKey' | 'fanout' | 'signal' | 'exactIntegers'>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/avalanche/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * SDK-free types of the Avalanche family (the X-Chain and the P-Chain): the `ext.avalanche`\n * API, fee details and overrides. Nothing here imports an SDK, so the composition root can\n * export these types. The C-Chain is an EVM chain (`avalanche`, family `evm`), not part of\n * this family.\n */\nimport type { CallOptions } from '../../core/transport/types';\n\n// Augment the registries through the package entry, as users do with 'crypto-aio', so a\n// user's own augmentation and this one merge in any file order.\ndeclare module '../../index' {\n interface ChainRegistry {\n 'avalanche-x': { family: 'avalanche'; network: 'mainnet' | 'fuji' };\n 'avalanche-p': { family: 'avalanche'; network: 'mainnet' | 'fuji' };\n }\n interface FamilyRegistry {\n avalanche: {\n library: '@avalabs/avalanchejs';\n ext: AvalancheExt;\n fee: AvalancheFeeDetails;\n };\n }\n}\n\n/** Which virtual machine a chain runs: the X-Chain's AVM or the P-Chain's PlatformVM. */\nexport type AvalancheVm = 'avm' | 'pvm';\n\n/**\n * `FeeEstimate.details` of the `avalanche` fee kind. The X-Chain burns a fixed fee per\n * transaction (`static`); the P-Chain prices gas since the Etna upgrade (`dynamic`). Amounts\n * are in nAVAX (9 decimals).\n */\nexport interface AvalancheFeeDetails {\n readonly model: 'static' | 'dynamic';\n /** X-Chain: the network's fixed fee per transaction. */\n readonly txFee?: bigint;\n /** P-Chain: the gas price paid, in nAVAX per unit of gas. */\n readonly gasPrice?: bigint;\n /** P-Chain: the gas the transaction uses (its complexity weighed by the network). */\n readonly gas?: bigint;\n readonly inputs: number;\n /** Outputs including change. */\n readonly outputs: number;\n /** The change paid back to the sender; `0n` when there is none. */\n readonly change: bigint;\n}\n\n/**\n * An explicit P-Chain fee (`TransferIntent.fee`): the gas price in nAVAX per unit of gas,\n * as a bigint or a decimal integer string. The X-Chain's fee is fixed, so it takes the\n * speeds only.\n */\nexport type AvalancheFeeOverride = { readonly gasPrice: bigint | string };\n\n/** An output an address owns, as `ext.avalanche.listUnspent` reports it. */\nexport interface AvalancheUnspent {\n /** `txID:outputIndex`, the reservation key of this output. */\n readonly utxoId: string;\n readonly txId: string;\n readonly outputIndex: number;\n /** The asset's id (cb58); AVAX is the network's `avaxAssetId`. */\n readonly assetId: string;\n readonly amount: bigint;\n /** Unix seconds before which the output cannot be spent; `0n` for none. */\n readonly locktime: bigint;\n /** How many of the output's owners must sign. */\n readonly threshold: number;\n /**\n * Whether a transfer from this address may spend it: AVAX in a plain transfer output,\n * not locked, that this address can sign alone (threshold 1).\n */\n readonly spendable: boolean;\n}\n\n/** `bc.ext.avalanche`: the Avalanche family extension. */\nexport interface AvalancheExt {\n readonly avalanche: {\n /** The outputs an address owns on this chain (the node's UTXO set), largest first. */\n listUnspent(address: string): Promise<readonly AvalancheUnspent[]>;\n };\n}\n\n/**\n * The transport tags every Avalanche I/O call carries: the purpose and retry class the\n * `ChainDriver` contract table gives each method.\n */\nexport type AvalancheCallTags = Pick<\n CallOptions,\n 'purpose' | 'retry' | 'quorum' | 'quorumKey' | 'fanout' | 'signal' | 'exactIntegers'\n>;\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fees, funds, building, assembling, broadcasting, and same-nonce replace and cancel.
|
|
3
|
+
* One output per transfer, native or ERC-20 `transfer`.
|
|
4
|
+
*/
|
|
5
|
+
import type { Broadcaster, ReplacementPolicy, TxBuilder } from '../../core/driver/types';
|
|
6
|
+
import { type EvmContext } from './reader';
|
|
7
|
+
import type { EvmClient } from './types';
|
|
8
|
+
export declare function createEvmBuilder(ctx: EvmContext): TxBuilder;
|
|
9
|
+
export declare function createEvmBroadcaster(client: EvmClient, chainId: bigint): Broadcaster;
|
|
10
|
+
/** Same-nonce replace and cancel under the network's bump; absent without a mempool. */
|
|
11
|
+
export declare function createEvmReplacement(ctx: EvmContext): ReplacementPolicy | undefined;
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEvmBuilder = createEvmBuilder;
|
|
4
|
+
exports.createEvmBroadcaster = createEvmBroadcaster;
|
|
5
|
+
exports.createEvmReplacement = createEvmReplacement;
|
|
6
|
+
const error_1 = require("../../core/errors/error");
|
|
7
|
+
const asset_1 = require("../../core/model/asset");
|
|
8
|
+
const bytes_1 = require("../../core/util/bytes");
|
|
9
|
+
const errors_1 = require("./errors");
|
|
10
|
+
const fees_1 = require("./fees");
|
|
11
|
+
const network_1 = require("./network");
|
|
12
|
+
const reader_1 = require("./reader");
|
|
13
|
+
function transferOf(intent) {
|
|
14
|
+
if (intent.memo !== undefined) {
|
|
15
|
+
throw new error_1.UnsupportedCapabilityError('UNSUPPORTED_CAPABILITY', 'EVM transfers carry no memo');
|
|
16
|
+
}
|
|
17
|
+
const [output] = intent.outputs;
|
|
18
|
+
if (!output || intent.outputs.length !== 1) {
|
|
19
|
+
throw new error_1.ValidationError('INVALID_INTENT', 'an EVM transfer has exactly one output');
|
|
20
|
+
}
|
|
21
|
+
if (intent.asset === 'native')
|
|
22
|
+
return { to: output.to, amount: output.amount };
|
|
23
|
+
if (intent.asset.standard !== 'erc20') {
|
|
24
|
+
throw new error_1.ValidationError('ASSET_RESOLUTION', `EVM tokens use the 'erc20' standard`);
|
|
25
|
+
}
|
|
26
|
+
return { to: output.to, amount: output.amount, token: intent.asset.contract };
|
|
27
|
+
}
|
|
28
|
+
/** The call a transfer makes: a value transfer, or `transfer(to, amount)` on the token. */
|
|
29
|
+
function callOf(client, transfer) {
|
|
30
|
+
return transfer.token === undefined
|
|
31
|
+
? { to: transfer.to, value: transfer.amount, data: '0x' }
|
|
32
|
+
: {
|
|
33
|
+
to: transfer.token,
|
|
34
|
+
value: 0n,
|
|
35
|
+
data: client.abi.encodeTransfer(transfer.to, transfer.amount),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function fieldsOf(ctx, call, nonce, gasLimit, params) {
|
|
39
|
+
const base = { chainId: ctx.config.chainId, nonce, gasLimit, ...call };
|
|
40
|
+
return params.type === 'eip1559'
|
|
41
|
+
? {
|
|
42
|
+
...base,
|
|
43
|
+
type: 'eip1559',
|
|
44
|
+
maxFeePerGas: params.maxFeePerGas,
|
|
45
|
+
maxPriorityFeePerGas: params.maxPriorityFeePerGas,
|
|
46
|
+
}
|
|
47
|
+
: { ...base, type: 'legacy', gasPrice: params.gasPrice };
|
|
48
|
+
}
|
|
49
|
+
function nonceOf(ordering) {
|
|
50
|
+
if (ordering?.kind !== 'nonce') {
|
|
51
|
+
throw new error_1.StateError('INVALID_TRANSITION', 'an EVM transaction needs an allocated nonce');
|
|
52
|
+
}
|
|
53
|
+
return ordering.nonce;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Rebuilds an unsigned transaction's fields from its ordering, summary and fee: a stored
|
|
57
|
+
* record holds plain data only, never an SDK object.
|
|
58
|
+
*/
|
|
59
|
+
function unsignedFields(ctx, unsigned) {
|
|
60
|
+
const { ref } = (0, asset_1.parseAssetId)(unsigned.summary.asset);
|
|
61
|
+
const [output] = unsigned.summary.outputs;
|
|
62
|
+
if (!output)
|
|
63
|
+
throw new error_1.ValidationError('INVALID_INTENT', 'the unsigned transaction has no output');
|
|
64
|
+
const transfer = {
|
|
65
|
+
to: output.to,
|
|
66
|
+
amount: BigInt(output.amount),
|
|
67
|
+
...(ref === 'native' ? {} : { token: ref.contract }),
|
|
68
|
+
};
|
|
69
|
+
const { gasLimit, params } = (0, fees_1.feeOf)(unsigned.fee.details);
|
|
70
|
+
return fieldsOf(ctx, callOf(ctx.client, transfer), nonceOf(unsigned.ordering), gasLimit, params);
|
|
71
|
+
}
|
|
72
|
+
function keyOf(keys) {
|
|
73
|
+
const key = keys.find((k) => k.scheme === 'secp256k1-ecdsa');
|
|
74
|
+
if (!key)
|
|
75
|
+
throw new error_1.SigningError('SIGNER_UNAVAILABLE', 'no secp256k1 key for the sending wallet');
|
|
76
|
+
return key;
|
|
77
|
+
}
|
|
78
|
+
function unsignedTx(ctx, fields, fee, key, summary) {
|
|
79
|
+
const { client } = ctx;
|
|
80
|
+
return {
|
|
81
|
+
payload: { encoding: 'hex', data: client.serializeUnsigned(fields) },
|
|
82
|
+
signingRequests: [
|
|
83
|
+
{
|
|
84
|
+
id: 'r0',
|
|
85
|
+
scheme: 'secp256k1-ecdsa',
|
|
86
|
+
payload: (0, bytes_1.fromHex)(client.unsignedHash(fields)),
|
|
87
|
+
payloadKind: 'digest',
|
|
88
|
+
publicKey: key.publicKey,
|
|
89
|
+
...(key.keyRef ? { keyRef: key.keyRef } : {}),
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
ordering: { kind: 'nonce', nonce: fields.nonce },
|
|
93
|
+
fee,
|
|
94
|
+
summary,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
async function priceFor(ctx, fee, signal) {
|
|
98
|
+
const { client, config } = ctx;
|
|
99
|
+
if (typeof fee === 'object') {
|
|
100
|
+
const { params, gasLimit } = (0, fees_1.parseFeeOverride)(fee, config.feeModel);
|
|
101
|
+
// An explicit fee above the ceiling is refused before any request.
|
|
102
|
+
(0, fees_1.assertWithinCeiling)(params, config.maxFeePerGas);
|
|
103
|
+
return { speed: 'custom', params, ...(gasLimit !== undefined ? { gasLimit } : {}) };
|
|
104
|
+
}
|
|
105
|
+
// A node's suggestion is clamped to the ceiling, so no endpoint can raise it.
|
|
106
|
+
if (config.feeModel === 'evm-legacy') {
|
|
107
|
+
const gasPrice = await client.gasPrice((0, reader_1.withSignal)(reader_1.READ, signal));
|
|
108
|
+
return {
|
|
109
|
+
speed: fee,
|
|
110
|
+
params: (0, fees_1.capPrice)((0, fees_1.legacyPrice)(gasPrice, fee), config.maxFeePerGas),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const history = await client.feeHistory(fees_1.FEE_HISTORY_BLOCKS, 'latest', fees_1.FEE_PERCENTILES, (0, reader_1.withSignal)(reader_1.READ, signal));
|
|
114
|
+
const { params, baseFeePerGas } = (0, fees_1.feesFromHistory)(history, fee, config.minPriorityFeePerGas);
|
|
115
|
+
return { speed: fee, params: (0, fees_1.capPrice)(params, config.maxFeePerGas), baseFeePerGas };
|
|
116
|
+
}
|
|
117
|
+
/** OP Stack: the oracle's L1 data fee for these exact unsigned bytes. */
|
|
118
|
+
async function l1FeeFor(ctx, fields, signal) {
|
|
119
|
+
if (!ctx.config.l1DataFee)
|
|
120
|
+
return undefined;
|
|
121
|
+
const { client } = ctx;
|
|
122
|
+
const data = client.abi.encodeGetL1Fee(client.serializeUnsigned(fields));
|
|
123
|
+
const result = await client.call({ to: network_1.GAS_PRICE_ORACLE, data }, 'latest', (0, reader_1.withSignal)(reader_1.READ, signal));
|
|
124
|
+
try {
|
|
125
|
+
return client.abi.decodeUint256(result);
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
throw new error_1.ProviderError('PROVIDER_UNAVAILABLE', 'the L1 fee oracle gave no fee');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
async function draftFor(ctx, fields, price, signal) {
|
|
132
|
+
const l1Fee = await l1FeeFor(ctx, fields, signal);
|
|
133
|
+
return (0, fees_1.feeDraft)(price.speed, fields.gasLimit, price.params, {
|
|
134
|
+
...(price.baseFeePerGas !== undefined ? { baseFeePerGas: price.baseFeePerGas } : {}),
|
|
135
|
+
...(l1Fee !== undefined ? { l1Fee } : {}),
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/** geth's estimate reached its gas cap: the call fails at any gas limit. */
|
|
139
|
+
const GAS_ALLOWANCE = /^gas required exceeds allowance/i;
|
|
140
|
+
/**
|
|
141
|
+
* The node's gas estimate; a failing call or a shortfall becomes a clear pre-signing failure.
|
|
142
|
+
* A revert, a VM execution failure or an exhausted gas allowance is the call's own
|
|
143
|
+
* failure, tested first so that a token's revert text naming "insufficient funds" still gets
|
|
144
|
+
* the balance check. Any other error is the provider's and is rethrown unchanged.
|
|
145
|
+
*/
|
|
146
|
+
async function estimateGas(ctx, from, transfer, signal) {
|
|
147
|
+
try {
|
|
148
|
+
return await ctx.client.estimateGas({ from, ...callOf(ctx.client, transfer) }, (0, reader_1.withSignal)(reader_1.READ, signal));
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
const definitive = (0, error_1.isCryptoAioError)(error, 'RPC_ERROR') && !error.ambiguous;
|
|
152
|
+
const message = definitive ? String(error.details?.rpcMessage ?? error.message) : '';
|
|
153
|
+
const fails = (0, reader_1.isRevert)(error) || (0, reader_1.isExecutionFailure)(error) || GAS_ALLOWANCE.test(message);
|
|
154
|
+
if (!fails) {
|
|
155
|
+
if (/insufficient funds/i.test(message)) {
|
|
156
|
+
throw new error_1.ChainError('INSUFFICIENT_FUNDS', 'insufficient funds for this transfer');
|
|
157
|
+
}
|
|
158
|
+
throw error;
|
|
159
|
+
}
|
|
160
|
+
if (transfer.token !== undefined) {
|
|
161
|
+
const available = await (0, reader_1.erc20Balance)(ctx.client, transfer.token, from, (0, reader_1.withSignal)(reader_1.READ, signal));
|
|
162
|
+
if (available < transfer.amount) {
|
|
163
|
+
throw new error_1.ChainError('INSUFFICIENT_FUNDS', 'insufficient token balance for this transfer', {
|
|
164
|
+
details: {
|
|
165
|
+
required: transfer.amount.toString(),
|
|
166
|
+
available: available.toString(),
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
throw new error_1.ValidationError('INVALID_INTENT', 'the transfer would fail');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function createEvmBuilder(ctx) {
|
|
175
|
+
const { client } = ctx;
|
|
176
|
+
return {
|
|
177
|
+
async estimateFee(intent, build) {
|
|
178
|
+
const transfer = transferOf(intent);
|
|
179
|
+
const price = await priceFor(ctx, intent.fee, build.signal);
|
|
180
|
+
const gasLimit = price.gasLimit ??
|
|
181
|
+
(0, fees_1.gasLimitFrom)(await estimateGas(ctx, intent.from, transfer, build.signal));
|
|
182
|
+
const nonce = build.ordering?.kind === 'nonce' ? build.ordering.nonce : 0n;
|
|
183
|
+
const fields = fieldsOf(ctx, callOf(client, transfer), nonce, gasLimit, price.params);
|
|
184
|
+
return draftFor(ctx, fields, price, build.signal);
|
|
185
|
+
},
|
|
186
|
+
async checkFunds(intent, fee, build) {
|
|
187
|
+
const transfer = transferOf(intent);
|
|
188
|
+
if (transfer.token !== undefined) {
|
|
189
|
+
const available = await (0, reader_1.erc20Balance)(client, transfer.token, intent.from, (0, reader_1.withSignal)(reader_1.READ, build.signal));
|
|
190
|
+
if (available < transfer.amount) {
|
|
191
|
+
return {
|
|
192
|
+
ok: false,
|
|
193
|
+
asset: { standard: 'erc20', contract: transfer.token },
|
|
194
|
+
required: transfer.amount,
|
|
195
|
+
available,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
const cost = fee.charges.reduce((sum, c) => (c.asset === 'native' ? sum + c.amount : sum), 0n);
|
|
200
|
+
const required = cost + (transfer.token === undefined ? transfer.amount : 0n);
|
|
201
|
+
const available = await client.getBalance(intent.from, 'latest', (0, reader_1.withSignal)(reader_1.READ, build.signal));
|
|
202
|
+
return available >= required
|
|
203
|
+
? { ok: true }
|
|
204
|
+
: { ok: false, asset: 'native', required, available };
|
|
205
|
+
},
|
|
206
|
+
async build(intent, fee, build) {
|
|
207
|
+
const transfer = transferOf(intent);
|
|
208
|
+
const { gasLimit, params } = (0, fees_1.feeOf)(fee.details);
|
|
209
|
+
const model = params.type === 'eip1559' ? 'evm-1559' : 'evm-legacy';
|
|
210
|
+
if (model !== ctx.config.feeModel) {
|
|
211
|
+
throw new error_1.ValidationError('INVALID_INTENT', `this network takes ${ctx.config.feeModel} fees`);
|
|
212
|
+
}
|
|
213
|
+
// The ceiling is checked again, whatever produced the fee object.
|
|
214
|
+
(0, fees_1.assertWithinCeiling)(params, ctx.config.maxFeePerGas);
|
|
215
|
+
const fields = fieldsOf(ctx, callOf(client, transfer), nonceOf(build.ordering), gasLimit, params);
|
|
216
|
+
return unsignedTx(ctx, fields, fee, keyOf(build.keys), {
|
|
217
|
+
asset: (0, asset_1.assetId)(ctx.chain.id, ctx.network.id, intent.asset),
|
|
218
|
+
outputs: [{ to: transfer.to, amount: transfer.amount.toString() }],
|
|
219
|
+
});
|
|
220
|
+
},
|
|
221
|
+
async assemble(unsigned, signatures) {
|
|
222
|
+
const request = unsigned.signingRequests[0];
|
|
223
|
+
const signature = signatures.find((s) => s.requestId === request?.id);
|
|
224
|
+
if (!request ||
|
|
225
|
+
!signature ||
|
|
226
|
+
signature.bytes.length !== 64 ||
|
|
227
|
+
(signature.recovery !== 0 && signature.recovery !== 1)) {
|
|
228
|
+
throw new error_1.SigningError('SIGNING_FAILED', 'missing signature for request r0');
|
|
229
|
+
}
|
|
230
|
+
const mismatch = () => new error_1.SigningError('SIGNING_FAILED', 'the unsigned payload or its digest does not match its fee and summary');
|
|
231
|
+
let fields;
|
|
232
|
+
try {
|
|
233
|
+
fields = unsignedFields(ctx, unsigned);
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
throw mismatch();
|
|
237
|
+
}
|
|
238
|
+
// The signature must be over these fields' digest, or it signs other bytes.
|
|
239
|
+
if (client.serializeUnsigned(fields) !== unsigned.payload.data ||
|
|
240
|
+
!(0, bytes_1.equalBytes)(request.payload, (0, bytes_1.fromHex)(client.unsignedHash(fields)))) {
|
|
241
|
+
throw mismatch();
|
|
242
|
+
}
|
|
243
|
+
const { raw, hash } = client.serializeSigned(fields, {
|
|
244
|
+
r: (0, bytes_1.toHex)(signature.bytes.slice(0, 32), true),
|
|
245
|
+
s: (0, bytes_1.toHex)(signature.bytes.slice(32), true),
|
|
246
|
+
yParity: signature.recovery,
|
|
247
|
+
});
|
|
248
|
+
return {
|
|
249
|
+
raw: { encoding: 'hex', data: raw },
|
|
250
|
+
ref: { id: hash, idKind: 'tx-hash', canonical: true },
|
|
251
|
+
};
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
function createEvmBroadcaster(client, chainId) {
|
|
256
|
+
return {
|
|
257
|
+
async broadcast(signed, options = {}) {
|
|
258
|
+
try {
|
|
259
|
+
await client.sendRawTransaction(signed.raw.data, {
|
|
260
|
+
purpose: 'broadcast',
|
|
261
|
+
retry: 'ambiguous-on-failure',
|
|
262
|
+
...(options.fanout !== undefined ? { fanout: options.fanout } : {}),
|
|
263
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
264
|
+
});
|
|
265
|
+
return { kind: 'accepted' };
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
// An ambiguous error may hide a delivered transaction; it is never classified.
|
|
269
|
+
// A rejection stands only when its reason holds for the bytes we sent.
|
|
270
|
+
if ((0, error_1.isCryptoAioError)(error, 'RPC_ERROR') && !error.ambiguous) {
|
|
271
|
+
return (0, errors_1.classifyOwnBroadcast)(String(error.details?.rpcMessage ?? error.message), signed.raw.data, chainId);
|
|
272
|
+
}
|
|
273
|
+
throw error;
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
/** Same-nonce replace and cancel under the network's bump; absent without a mempool. */
|
|
279
|
+
function createEvmReplacement(ctx) {
|
|
280
|
+
const { config } = ctx;
|
|
281
|
+
const bump = config.minBumpPercent;
|
|
282
|
+
if (bump === undefined)
|
|
283
|
+
return undefined;
|
|
284
|
+
const prices = config.feeModel === 'evm-legacy' ? 'the gas price' : 'the fee cap and the tip';
|
|
285
|
+
const tooLow = (what) => new error_1.ChainError('FEE_TOO_LOW', `${what} must raise ${prices} by at least ${bump}%`);
|
|
286
|
+
const keyFrom = (previous) => {
|
|
287
|
+
const request = previous.signingRequests[0];
|
|
288
|
+
if (!request)
|
|
289
|
+
throw new error_1.SigningError('SIGNER_UNAVAILABLE', 'the previous attempt has no key');
|
|
290
|
+
return {
|
|
291
|
+
scheme: request.scheme,
|
|
292
|
+
publicKey: request.publicKey,
|
|
293
|
+
...(request.keyRef ? { keyRef: request.keyRef } : {}),
|
|
294
|
+
};
|
|
295
|
+
};
|
|
296
|
+
return {
|
|
297
|
+
replace: config.capabilities.has('replace-fee'),
|
|
298
|
+
cancel: config.capabilities.has('cancel'),
|
|
299
|
+
async buildReplacement(previous, fee, build) {
|
|
300
|
+
const before = (0, fees_1.feeOf)(previous.fee.details);
|
|
301
|
+
const price = await priceFor(ctx, fee, build.signal);
|
|
302
|
+
if (!(0, fees_1.meetsBump)(before.params, price.params, bump))
|
|
303
|
+
throw tooLow('a replacement');
|
|
304
|
+
const old = unsignedFields(ctx, previous);
|
|
305
|
+
const fields = fieldsOf(ctx, { to: old.to, value: old.value, data: old.data }, old.nonce, price.gasLimit ?? before.gasLimit, price.params);
|
|
306
|
+
return unsignedTx(ctx, fields, await draftFor(ctx, fields, price, build.signal), keyFrom(previous), previous.summary);
|
|
307
|
+
},
|
|
308
|
+
async buildCancel(previous, build, fee) {
|
|
309
|
+
const before = (0, fees_1.feeOf)(previous.fee.details);
|
|
310
|
+
const price = fee === undefined
|
|
311
|
+
? { speed: 'custom', params: (0, fees_1.minimumBump)(before.params, bump) }
|
|
312
|
+
: await priceFor(ctx, fee, build.signal);
|
|
313
|
+
if (!(0, fees_1.meetsBump)(before.params, price.params, bump))
|
|
314
|
+
throw tooLow('a cancel');
|
|
315
|
+
// A cancel whose least bump would pay above the ceiling is refused.
|
|
316
|
+
(0, fees_1.assertWithinCeiling)(price.params, config.maxFeePerGas);
|
|
317
|
+
const nonce = nonceOf(previous.ordering);
|
|
318
|
+
const fields = fieldsOf(ctx, { to: build.from, value: 0n, data: '0x' }, nonce, price.gasLimit ?? fees_1.TRANSFER_GAS, price.params);
|
|
319
|
+
return unsignedTx(ctx, fields, await draftFor(ctx, fields, price, build.signal), keyFrom(previous), {
|
|
320
|
+
asset: (0, asset_1.assetId)(ctx.chain.id, ctx.network.id, 'native'),
|
|
321
|
+
outputs: [{ to: build.from, amount: '0' }],
|
|
322
|
+
});
|
|
323
|
+
},
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=builder.js.map
|