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,381 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataApi = exports.AvalancheNode = exports.UTXO_PAGE = exports.malformed = void 0;
|
|
4
|
+
exports.isNodeNotFound = isNodeNotFound;
|
|
5
|
+
exports.isHttpNotFound = isHttpNotFound;
|
|
6
|
+
exports.parseHeight = parseHeight;
|
|
7
|
+
exports.decodeChecked = decodeChecked;
|
|
8
|
+
exports.encodeChecked = encodeChecked;
|
|
9
|
+
exports.parseBlock = parseBlock;
|
|
10
|
+
exports.parsePlatformStatus = parsePlatformStatus;
|
|
11
|
+
/**
|
|
12
|
+
* The two data sources of the Avalanche driver, read through the core's policy-wrapped
|
|
13
|
+
* transports, and strict parsers for their answers: nothing an endpoint sends is trusted
|
|
14
|
+
* for its shape, and a malformed answer is a retryable `PROVIDER_UNAVAILABLE`.
|
|
15
|
+
* - `AvalancheNode`: an AvalancheGo node's chain API (`avm.*` on the X-Chain, `platform.*`
|
|
16
|
+
* on the P-Chain), JSON-RPC at the endpoint's URL (`…/ext/bc/X`). Bytes come hex encoded
|
|
17
|
+
* with a 4-byte SHA-256 checksum, which is checked; transaction bytes must also hash to
|
|
18
|
+
* the id asked for, so they authenticate themselves.
|
|
19
|
+
* - `DataApi`: the Avalanche Data API (the indexer). It only locates a transaction's block
|
|
20
|
+
* and lists an address's transactions; the node proves what it locates.
|
|
21
|
+
* Texts never echo an endpoint's message, which can carry addresses or amounts: the
|
|
22
|
+
* transport keeps that in `details`.
|
|
23
|
+
*/
|
|
24
|
+
const sha256_1 = require("@noble/hashes/sha256");
|
|
25
|
+
const error_1 = require("../../core/errors/error");
|
|
26
|
+
const bytes_1 = require("../../core/util/bytes");
|
|
27
|
+
const cb58_1 = require("./cb58");
|
|
28
|
+
const malformed = (what) => new error_1.ProviderError('PROVIDER_UNAVAILABLE', `malformed Avalanche answer: ${what}`);
|
|
29
|
+
exports.malformed = malformed;
|
|
30
|
+
/** A definitive JSON-RPC "not found" (`not found`, `couldn't get tx: not found`, …). */
|
|
31
|
+
function isNodeNotFound(error) {
|
|
32
|
+
if (!(0, error_1.isCryptoAioError)(error, 'RPC_ERROR') || error.ambiguous)
|
|
33
|
+
return false;
|
|
34
|
+
const message = error.details?.rpcMessage;
|
|
35
|
+
return typeof message === 'string' && /(?:^|: )not found$/.test(message);
|
|
36
|
+
}
|
|
37
|
+
/** A definitive HTTP 404 from the Data API. */
|
|
38
|
+
function isHttpNotFound(error) {
|
|
39
|
+
return ((0, error_1.isCryptoAioError)(error, 'RPC_ERROR') &&
|
|
40
|
+
!error.ambiguous &&
|
|
41
|
+
error.details?.status === 404);
|
|
42
|
+
}
|
|
43
|
+
const record = (value, what) => {
|
|
44
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
45
|
+
throw (0, exports.malformed)(what);
|
|
46
|
+
}
|
|
47
|
+
return value;
|
|
48
|
+
};
|
|
49
|
+
const MAX_HEIGHT = BigInt(Number.MAX_SAFE_INTEGER);
|
|
50
|
+
/** A non-negative integer height, as a number, a bigint or a decimal string. */
|
|
51
|
+
function parseHeight(value, what = 'height') {
|
|
52
|
+
let height;
|
|
53
|
+
if (typeof value === 'number' && Number.isSafeInteger(value))
|
|
54
|
+
height = BigInt(value);
|
|
55
|
+
else if (typeof value === 'bigint')
|
|
56
|
+
height = value;
|
|
57
|
+
else if (typeof value === 'string' && /^(0|[1-9][0-9]{0,15})$/.test(value))
|
|
58
|
+
height = BigInt(value);
|
|
59
|
+
else
|
|
60
|
+
throw (0, exports.malformed)(what);
|
|
61
|
+
if (height < 0n || height > MAX_HEIGHT)
|
|
62
|
+
throw (0, exports.malformed)(what);
|
|
63
|
+
return height;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A non-negative integer amount as a decimal string or an exact integer: node calls set
|
|
67
|
+
* `exactIntegers`, so a JSON number above 2^53 arrives as a `bigint`, never rounded.
|
|
68
|
+
*/
|
|
69
|
+
function parseAmount(value, what) {
|
|
70
|
+
if (typeof value === 'bigint' && value >= 0n)
|
|
71
|
+
return value;
|
|
72
|
+
if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0)
|
|
73
|
+
return BigInt(value);
|
|
74
|
+
if (typeof value === 'string' && /^(0|[1-9][0-9]{0,29})$/.test(value))
|
|
75
|
+
return BigInt(value);
|
|
76
|
+
throw (0, exports.malformed)(what);
|
|
77
|
+
}
|
|
78
|
+
const id = (value, what) => {
|
|
79
|
+
if (!(0, cb58_1.isId)(value))
|
|
80
|
+
throw (0, exports.malformed)(what);
|
|
81
|
+
return value;
|
|
82
|
+
};
|
|
83
|
+
/** `0x…` hex with a trailing 4-byte SHA-256 checksum, as AvalancheGo encodes bytes. */
|
|
84
|
+
function decodeChecked(value, what) {
|
|
85
|
+
if (typeof value !== 'string' ||
|
|
86
|
+
!/^0x(?:[0-9a-fA-F]{2}){5,}$/.test(value) ||
|
|
87
|
+
value.length > 2 * 1024 * 1024) {
|
|
88
|
+
throw (0, exports.malformed)(what);
|
|
89
|
+
}
|
|
90
|
+
const raw = (0, bytes_1.fromHex)(value.slice(2));
|
|
91
|
+
const body = raw.subarray(0, -4);
|
|
92
|
+
if (!(0, bytes_1.equalBytes)((0, sha256_1.sha256)(body).subarray(-4), raw.subarray(-4)))
|
|
93
|
+
throw (0, exports.malformed)(what);
|
|
94
|
+
return Uint8Array.from(body);
|
|
95
|
+
}
|
|
96
|
+
/** `0x…` hex of `bytes` with AvalancheGo's checksum. */
|
|
97
|
+
function encodeChecked(bytes) {
|
|
98
|
+
const out = new Uint8Array(bytes.length + 4);
|
|
99
|
+
out.set(bytes, 0);
|
|
100
|
+
out.set((0, sha256_1.sha256)(bytes).subarray(-4), bytes.length);
|
|
101
|
+
return (0, bytes_1.toHex)(out, true);
|
|
102
|
+
}
|
|
103
|
+
/** The JSON block of `getBlock`/`getBlockByHeight`, X-Chain or P-Chain, any block type. */
|
|
104
|
+
function parseBlock(answer) {
|
|
105
|
+
const block = record(record(answer, 'block answer').block, 'block');
|
|
106
|
+
const txIds = [];
|
|
107
|
+
const txs = block.txs;
|
|
108
|
+
if (txs !== undefined && txs !== null) {
|
|
109
|
+
if (!Array.isArray(txs) || txs.length > 100_000)
|
|
110
|
+
throw (0, exports.malformed)('block.txs');
|
|
111
|
+
for (const tx of txs)
|
|
112
|
+
txIds.push(id(record(tx, 'block.txs').id, 'block.txs.id'));
|
|
113
|
+
}
|
|
114
|
+
// A P-Chain proposal block carries one proposal transaction besides its decision ones.
|
|
115
|
+
if (block.tx !== undefined && block.tx !== null) {
|
|
116
|
+
txIds.push(id(record(block.tx, 'block.tx').id, 'block.tx.id'));
|
|
117
|
+
}
|
|
118
|
+
if (new Set(txIds).size !== txIds.length)
|
|
119
|
+
throw (0, exports.malformed)('block transactions');
|
|
120
|
+
const time = block.time;
|
|
121
|
+
if (time !== undefined &&
|
|
122
|
+
(typeof time !== 'number' || !Number.isSafeInteger(time) || time < 0)) {
|
|
123
|
+
throw (0, exports.malformed)('block.time');
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
id: id(block.id, 'block.id'),
|
|
127
|
+
parentId: id(block.parentID, 'block.parentID'),
|
|
128
|
+
height: parseHeight(block.height, 'block.height'),
|
|
129
|
+
...(time !== undefined ? { timestamp: time } : {}),
|
|
130
|
+
txIds,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const PLATFORM_STATUSES = [
|
|
134
|
+
'Committed',
|
|
135
|
+
'Aborted',
|
|
136
|
+
'Processing',
|
|
137
|
+
'Dropped',
|
|
138
|
+
'Unknown',
|
|
139
|
+
];
|
|
140
|
+
function parsePlatformStatus(answer) {
|
|
141
|
+
const status = record(answer, 'tx status').status;
|
|
142
|
+
if (!PLATFORM_STATUSES.includes(status))
|
|
143
|
+
throw (0, exports.malformed)('tx status');
|
|
144
|
+
return status;
|
|
145
|
+
}
|
|
146
|
+
/** `getUTXOs` asks for at most this many outputs per page (AvalancheGo's maximum). */
|
|
147
|
+
exports.UTXO_PAGE = 1024;
|
|
148
|
+
/** No address is read past this many pages (about 100,000 outputs): bounded work. */
|
|
149
|
+
const MAX_UTXO_PAGES = 100;
|
|
150
|
+
class AvalancheNode {
|
|
151
|
+
#transport;
|
|
152
|
+
#prefix;
|
|
153
|
+
constructor(transport, vm) {
|
|
154
|
+
this.#transport = transport;
|
|
155
|
+
this.#prefix = vm === 'avm' ? 'avm' : 'platform';
|
|
156
|
+
}
|
|
157
|
+
#call(method, params, tags) {
|
|
158
|
+
return this.#transport.rpc(`${this.#prefix}.${method}`, params, {
|
|
159
|
+
exactIntegers: true,
|
|
160
|
+
...tags,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
async height(tags) {
|
|
164
|
+
const answer = await this.#call('getHeight', {}, tags);
|
|
165
|
+
return parseHeight(record(answer, 'getHeight').height);
|
|
166
|
+
}
|
|
167
|
+
/** The accepted block at `height`; `null` when the node has none there (yet). */
|
|
168
|
+
async blockAt(height, tags) {
|
|
169
|
+
try {
|
|
170
|
+
const answer = await this.#call('getBlockByHeight', { height: height.toString(), encoding: 'json' }, tags);
|
|
171
|
+
const block = parseBlock(answer);
|
|
172
|
+
if (block.height !== height)
|
|
173
|
+
throw (0, exports.malformed)('the block is at another height');
|
|
174
|
+
return block;
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
if (isNodeNotFound(error))
|
|
178
|
+
return null;
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async blockById(blockId, tags) {
|
|
183
|
+
try {
|
|
184
|
+
const block = parseBlock(await this.#call('getBlock', { blockID: blockId, encoding: 'json' }, tags));
|
|
185
|
+
if (block.id !== blockId)
|
|
186
|
+
throw (0, exports.malformed)('the block has another id');
|
|
187
|
+
return block;
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
if (isNodeNotFound(error))
|
|
191
|
+
return null;
|
|
192
|
+
throw error;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* An accepted transaction's signed bytes, which must hash to `txId`; `null` when the node
|
|
197
|
+
* does not have it in its accepted state.
|
|
198
|
+
*/
|
|
199
|
+
async txBytes(txId, tags) {
|
|
200
|
+
let answer;
|
|
201
|
+
try {
|
|
202
|
+
answer = await this.#call('getTx', { txID: txId, encoding: 'hex' }, tags);
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
if (isNodeNotFound(error))
|
|
206
|
+
return null;
|
|
207
|
+
throw error;
|
|
208
|
+
}
|
|
209
|
+
const bytes = decodeChecked(record(answer, 'getTx').tx, 'getTx.tx');
|
|
210
|
+
if ((0, cb58_1.idOf)(bytes) !== txId)
|
|
211
|
+
throw (0, exports.malformed)('transaction bytes of another id');
|
|
212
|
+
return bytes;
|
|
213
|
+
}
|
|
214
|
+
/** P-Chain only: committed, aborted, in a mempool, dropped by one, or unknown. */
|
|
215
|
+
async txStatus(txId, tags) {
|
|
216
|
+
return parsePlatformStatus(await this.#call('getTxStatus', { txID: txId }, tags));
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Every output the node lists for `address` (its UTXO set), as raw UTXO bytes, read page
|
|
220
|
+
* by page. An output listed twice alike is kept once; listed twice differently, the
|
|
221
|
+
* answer is malformed.
|
|
222
|
+
*/
|
|
223
|
+
async utxos(address, tags) {
|
|
224
|
+
const seen = new Map();
|
|
225
|
+
const out = [];
|
|
226
|
+
let start;
|
|
227
|
+
for (let page = 0;; page++) {
|
|
228
|
+
if (page >= MAX_UTXO_PAGES)
|
|
229
|
+
throw (0, exports.malformed)('more unspent outputs than are read');
|
|
230
|
+
const answer = record(await this.#call('getUTXOs', {
|
|
231
|
+
addresses: [address],
|
|
232
|
+
limit: exports.UTXO_PAGE,
|
|
233
|
+
encoding: 'hex',
|
|
234
|
+
...(start ? { startIndex: start } : {}),
|
|
235
|
+
}, tags), 'getUTXOs');
|
|
236
|
+
const utxos = answer.utxos;
|
|
237
|
+
if (!Array.isArray(utxos) || utxos.length > exports.UTXO_PAGE)
|
|
238
|
+
throw (0, exports.malformed)('utxos');
|
|
239
|
+
const fetched = parseAmount(answer.numFetched, 'numFetched');
|
|
240
|
+
if (fetched !== BigInt(utxos.length))
|
|
241
|
+
throw (0, exports.malformed)('numFetched');
|
|
242
|
+
for (const text of utxos) {
|
|
243
|
+
const bytes = decodeChecked(text, 'utxo');
|
|
244
|
+
const key = (0, bytes_1.toHex)((0, sha256_1.sha256)(bytes));
|
|
245
|
+
const head = (0, bytes_1.toHex)(bytes.subarray(0, 38)); // codec, txID, output index
|
|
246
|
+
const known = seen.get(head);
|
|
247
|
+
if (known === undefined) {
|
|
248
|
+
seen.set(head, key);
|
|
249
|
+
out.push(bytes);
|
|
250
|
+
}
|
|
251
|
+
else if (known !== key) {
|
|
252
|
+
throw (0, exports.malformed)('an unspent output listed twice, differently');
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
if (utxos.length < exports.UTXO_PAGE)
|
|
256
|
+
return out;
|
|
257
|
+
const end = record(answer.endIndex, 'endIndex');
|
|
258
|
+
if (typeof end.address !== 'string' || typeof end.utxo !== 'string') {
|
|
259
|
+
throw (0, exports.malformed)('endIndex');
|
|
260
|
+
}
|
|
261
|
+
start = { address: end.address, utxo: end.utxo };
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/** Issues signed bytes; resolves to the id the node gives them. */
|
|
265
|
+
async issueTx(bytes, tags) {
|
|
266
|
+
const answer = await this.#call('issueTx', { tx: encodeChecked(bytes), encoding: 'hex' }, tags);
|
|
267
|
+
return id(record(answer, 'issueTx').txID, 'issueTx.txID');
|
|
268
|
+
}
|
|
269
|
+
/** X-Chain: the fixed fee of a transaction (`txFee`), in nAVAX. */
|
|
270
|
+
async txFee(tags) {
|
|
271
|
+
return parseAmount(record(await this.#call('getTxFee', {}, tags), 'getTxFee').txFee, 'txFee');
|
|
272
|
+
}
|
|
273
|
+
/** P-Chain: the current gas price and capacity (Etna's dynamic fees). */
|
|
274
|
+
async feeState(tags) {
|
|
275
|
+
const state = record(await this.#call('getFeeState', {}, tags), 'getFeeState');
|
|
276
|
+
if (typeof state.timestamp !== 'string' || state.timestamp.length > 64) {
|
|
277
|
+
throw (0, exports.malformed)('feeState.timestamp');
|
|
278
|
+
}
|
|
279
|
+
return {
|
|
280
|
+
capacity: parseAmount(state.capacity, 'feeState.capacity'),
|
|
281
|
+
excess: parseAmount(state.excess, 'feeState.excess'),
|
|
282
|
+
price: parseAmount(state.price, 'feeState.price'),
|
|
283
|
+
timestamp: state.timestamp,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
/** P-Chain: the weights of the four fee dimensions and the minimum gas price. */
|
|
287
|
+
async feeConfig(tags) {
|
|
288
|
+
const config = record(await this.#call('getFeeConfig', {}, tags), 'getFeeConfig');
|
|
289
|
+
const weights = config.weights;
|
|
290
|
+
if (!Array.isArray(weights) ||
|
|
291
|
+
weights.length !== 4 ||
|
|
292
|
+
!weights.every((w) => Number.isSafeInteger(w) && w >= 0)) {
|
|
293
|
+
throw (0, exports.malformed)('feeConfig.weights');
|
|
294
|
+
}
|
|
295
|
+
return {
|
|
296
|
+
weights: weights,
|
|
297
|
+
minPrice: parseAmount(config.minPrice, 'feeConfig.minPrice'),
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
exports.AvalancheNode = AvalancheNode;
|
|
302
|
+
const PAGE_TOKEN = /^[A-Za-z0-9_-]{1,256}$/;
|
|
303
|
+
/** A Data API transaction's block, or `undefined` when it has none (non-linear X-Chain). */
|
|
304
|
+
function locationOf(tx) {
|
|
305
|
+
const height = tx.blockHeight ?? tx.blockNumber;
|
|
306
|
+
if (height === undefined && tx.blockHash === undefined)
|
|
307
|
+
return undefined;
|
|
308
|
+
return {
|
|
309
|
+
height: parseHeight(height, 'transaction block height'),
|
|
310
|
+
hash: id(tx.blockHash, 'transaction block hash'),
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
class DataApi {
|
|
314
|
+
#transport;
|
|
315
|
+
constructor(transport) {
|
|
316
|
+
this.#transport = transport;
|
|
317
|
+
}
|
|
318
|
+
/** Where the indexer says `txId` is; `null` when it does not know it (404). */
|
|
319
|
+
async locate(txId, tags) {
|
|
320
|
+
let answer;
|
|
321
|
+
try {
|
|
322
|
+
answer = await this.#transport.http({ method: 'GET', path: `/transactions/${txId}`, route: '/transactions/:id' }, tags);
|
|
323
|
+
}
|
|
324
|
+
catch (error) {
|
|
325
|
+
if (isHttpNotFound(error))
|
|
326
|
+
return null;
|
|
327
|
+
throw error;
|
|
328
|
+
}
|
|
329
|
+
const tx = record(answer, 'transaction');
|
|
330
|
+
if (tx.txHash !== txId)
|
|
331
|
+
throw (0, exports.malformed)('a transaction of another id');
|
|
332
|
+
return locationOf(tx) ?? 'no-block';
|
|
333
|
+
}
|
|
334
|
+
/** A page of `address`'s transactions, newest first. */
|
|
335
|
+
async history(address, options, tags) {
|
|
336
|
+
const answer = record(await this.#transport.http({
|
|
337
|
+
method: 'GET',
|
|
338
|
+
path: '/transactions',
|
|
339
|
+
route: '/transactions',
|
|
340
|
+
query: {
|
|
341
|
+
addresses: address,
|
|
342
|
+
pageSize: String(options.pageSize),
|
|
343
|
+
sortOrder: 'desc',
|
|
344
|
+
...(options.cursor !== undefined ? { pageToken: options.cursor } : {}),
|
|
345
|
+
},
|
|
346
|
+
}, tags), 'transactions');
|
|
347
|
+
const txs = answer.transactions;
|
|
348
|
+
if (!Array.isArray(txs) || txs.length > options.pageSize) {
|
|
349
|
+
throw (0, exports.malformed)('transactions');
|
|
350
|
+
}
|
|
351
|
+
const items = txs.map((entry) => {
|
|
352
|
+
const tx = record(entry, 'transaction');
|
|
353
|
+
const location = locationOf(tx);
|
|
354
|
+
return { txId: id(tx.txHash, 'txHash'), ...(location ? { location } : {}) };
|
|
355
|
+
});
|
|
356
|
+
const next = answer.nextPageToken;
|
|
357
|
+
if (next !== undefined && next !== null && next !== '') {
|
|
358
|
+
if (typeof next !== 'string' || !PAGE_TOKEN.test(next)) {
|
|
359
|
+
throw (0, exports.malformed)('nextPageToken');
|
|
360
|
+
}
|
|
361
|
+
return { items, next };
|
|
362
|
+
}
|
|
363
|
+
return { items };
|
|
364
|
+
}
|
|
365
|
+
/** The hash of the indexer's block at height 0 (its identity probe). */
|
|
366
|
+
static blockZero(answer) {
|
|
367
|
+
const block = record(answer, 'block');
|
|
368
|
+
if (parseHeight(block.blockNumber, 'blockNumber') !== 0n)
|
|
369
|
+
throw (0, exports.malformed)('block 0');
|
|
370
|
+
return id(block.blockHash, 'blockHash');
|
|
371
|
+
}
|
|
372
|
+
/** The indexer's newest block height (its height probe). */
|
|
373
|
+
static latestHeight(answer) {
|
|
374
|
+
const blocks = record(answer, 'blocks').blocks;
|
|
375
|
+
if (!Array.isArray(blocks) || blocks.length !== 1)
|
|
376
|
+
throw (0, exports.malformed)('blocks');
|
|
377
|
+
return parseHeight(record(blocks[0], 'block').blockNumber, 'blockNumber');
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
exports.DataApi = DataApi;
|
|
381
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/adapters/avalanche/api.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The two data sources of the Avalanche driver, read through the core's policy-wrapped\n * transports, and strict parsers for their answers: nothing an endpoint sends is trusted\n * for its shape, and a malformed answer is a retryable `PROVIDER_UNAVAILABLE`.\n * - `AvalancheNode`: an AvalancheGo node's chain API (`avm.*` on the X-Chain, `platform.*`\n * on the P-Chain), JSON-RPC at the endpoint's URL (`…/ext/bc/X`). Bytes come hex encoded\n * with a 4-byte SHA-256 checksum, which is checked; transaction bytes must also hash to\n * the id asked for, so they authenticate themselves.\n * - `DataApi`: the Avalanche Data API (the indexer). It only locates a transaction's block\n * and lists an address's transactions; the node proves what it locates.\n * Texts never echo an endpoint's message, which can carry addresses or amounts: the\n * transport keeps that in `details`.\n */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { ProviderError, isCryptoAioError } from '../../core/errors/error';\nimport { equalBytes, fromHex, toHex } from '../../core/util/bytes';\nimport type { Transport } from '../../core/transport/types';\nimport { idOf, isId } from './cb58';\nimport type { AvalancheCallTags, AvalancheVm } from './types';\n\n/** A block as the node reports it; ids are CB58. */\nexport interface NodeBlock {\n readonly id: string;\n readonly parentId: string;\n readonly height: bigint;\n /** Unix seconds; absent on P-Chain blocks from before the Banff upgrade. */\n readonly timestamp?: number;\n /** Every transaction the block carries, decision and proposal alike. */\n readonly txIds: readonly string[];\n}\n\n/** The P-Chain's view of a transaction (`platform.getTxStatus`). */\nexport type PlatformStatus =\n 'Committed' | 'Aborted' | 'Processing' | 'Dropped' | 'Unknown';\n\nexport interface FeeState {\n readonly capacity: bigint;\n readonly excess: bigint;\n readonly price: bigint;\n readonly timestamp: string;\n}\n\n/** The P-Chain's fee dimensions' weights: bandwidth, reads, writes, compute. */\nexport type FeeWeights = readonly [number, number, number, number];\n\n/** Where the indexer says a transaction is. */\nexport interface Location {\n readonly height: bigint;\n readonly hash: string;\n}\n\nexport const malformed = (what: string): ProviderError =>\n new ProviderError('PROVIDER_UNAVAILABLE', `malformed Avalanche answer: ${what}`);\n\n/** A definitive JSON-RPC \"not found\" (`not found`, `couldn't get tx: not found`, …). */\nexport function isNodeNotFound(error: unknown): boolean {\n if (!isCryptoAioError(error, 'RPC_ERROR') || error.ambiguous) return false;\n const message = error.details?.rpcMessage;\n return typeof message === 'string' && /(?:^|: )not found$/.test(message);\n}\n\n/** A definitive HTTP 404 from the Data API. */\nexport function isHttpNotFound(error: unknown): boolean {\n return (\n isCryptoAioError(error, 'RPC_ERROR') &&\n !error.ambiguous &&\n error.details?.status === 404\n );\n}\n\ntype Json = Readonly<Record<string, unknown>>;\n\nconst record = (value: unknown, what: string): Json => {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n throw malformed(what);\n }\n return value as Json;\n};\n\nconst MAX_HEIGHT = BigInt(Number.MAX_SAFE_INTEGER);\n\n/** A non-negative integer height, as a number, a bigint or a decimal string. */\nexport function parseHeight(value: unknown, what = 'height'): bigint {\n let height: bigint;\n if (typeof value === 'number' && Number.isSafeInteger(value)) height = BigInt(value);\n else if (typeof value === 'bigint') height = value;\n else if (typeof value === 'string' && /^(0|[1-9][0-9]{0,15})$/.test(value))\n height = BigInt(value);\n else throw malformed(what);\n if (height < 0n || height > MAX_HEIGHT) throw malformed(what);\n return height;\n}\n\n/**\n * A non-negative integer amount as a decimal string or an exact integer: node calls set\n * `exactIntegers`, so a JSON number above 2^53 arrives as a `bigint`, never rounded.\n */\nfunction parseAmount(value: unknown, what: string): bigint {\n if (typeof value === 'bigint' && value >= 0n) return value;\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0)\n return BigInt(value);\n if (typeof value === 'string' && /^(0|[1-9][0-9]{0,29})$/.test(value))\n return BigInt(value);\n throw malformed(what);\n}\n\nconst id = (value: unknown, what: string): string => {\n if (!isId(value)) throw malformed(what);\n return value;\n};\n\n/** `0x…` hex with a trailing 4-byte SHA-256 checksum, as AvalancheGo encodes bytes. */\nexport function decodeChecked(value: unknown, what: string): Uint8Array {\n if (\n typeof value !== 'string' ||\n !/^0x(?:[0-9a-fA-F]{2}){5,}$/.test(value) ||\n value.length > 2 * 1024 * 1024\n ) {\n throw malformed(what);\n }\n const raw = fromHex(value.slice(2));\n const body = raw.subarray(0, -4);\n if (!equalBytes(sha256(body).subarray(-4), raw.subarray(-4))) throw malformed(what);\n return Uint8Array.from(body);\n}\n\n/** `0x…` hex of `bytes` with AvalancheGo's checksum. */\nexport function encodeChecked(bytes: Uint8Array): string {\n const out = new Uint8Array(bytes.length + 4);\n out.set(bytes, 0);\n out.set(sha256(bytes).subarray(-4), bytes.length);\n return toHex(out, true);\n}\n\n/** The JSON block of `getBlock`/`getBlockByHeight`, X-Chain or P-Chain, any block type. */\nexport function parseBlock(answer: unknown): NodeBlock {\n const block = record(record(answer, 'block answer').block, 'block');\n const txIds: string[] = [];\n const txs = block.txs;\n if (txs !== undefined && txs !== null) {\n if (!Array.isArray(txs) || txs.length > 100_000) throw malformed('block.txs');\n for (const tx of txs) txIds.push(id(record(tx, 'block.txs').id, 'block.txs.id'));\n }\n // A P-Chain proposal block carries one proposal transaction besides its decision ones.\n if (block.tx !== undefined && block.tx !== null) {\n txIds.push(id(record(block.tx, 'block.tx').id, 'block.tx.id'));\n }\n if (new Set(txIds).size !== txIds.length) throw malformed('block transactions');\n const time = block.time;\n if (\n time !== undefined &&\n (typeof time !== 'number' || !Number.isSafeInteger(time) || time < 0)\n ) {\n throw malformed('block.time');\n }\n return {\n id: id(block.id, 'block.id'),\n parentId: id(block.parentID, 'block.parentID'),\n height: parseHeight(block.height, 'block.height'),\n ...(time !== undefined ? { timestamp: time } : {}),\n txIds,\n };\n}\n\nconst PLATFORM_STATUSES: readonly PlatformStatus[] = [\n 'Committed',\n 'Aborted',\n 'Processing',\n 'Dropped',\n 'Unknown',\n];\n\nexport function parsePlatformStatus(answer: unknown): PlatformStatus {\n const status = record(answer, 'tx status').status;\n if (!PLATFORM_STATUSES.includes(status as PlatformStatus)) throw malformed('tx status');\n return status as PlatformStatus;\n}\n\n/** `getUTXOs` asks for at most this many outputs per page (AvalancheGo's maximum). */\nexport const UTXO_PAGE = 1024;\n/** No address is read past this many pages (about 100,000 outputs): bounded work. */\nconst MAX_UTXO_PAGES = 100;\n\nexport class AvalancheNode {\n readonly #transport: Transport;\n readonly #prefix: 'avm' | 'platform';\n\n constructor(transport: Transport, vm: AvalancheVm) {\n this.#transport = transport;\n this.#prefix = vm === 'avm' ? 'avm' : 'platform';\n }\n\n #call<T = unknown>(method: string, params: unknown, tags: AvalancheCallTags) {\n return this.#transport.rpc<T>(`${this.#prefix}.${method}`, params, {\n exactIntegers: true,\n ...tags,\n });\n }\n\n async height(tags: AvalancheCallTags): Promise<bigint> {\n const answer = await this.#call('getHeight', {}, tags);\n return parseHeight(record(answer, 'getHeight').height);\n }\n\n /** The accepted block at `height`; `null` when the node has none there (yet). */\n async blockAt(height: bigint, tags: AvalancheCallTags): Promise<NodeBlock | null> {\n try {\n const answer = await this.#call(\n 'getBlockByHeight',\n { height: height.toString(), encoding: 'json' },\n tags,\n );\n const block = parseBlock(answer);\n if (block.height !== height) throw malformed('the block is at another height');\n return block;\n } catch (error) {\n if (isNodeNotFound(error)) return null;\n throw error;\n }\n }\n\n async blockById(blockId: string, tags: AvalancheCallTags): Promise<NodeBlock | null> {\n try {\n const block = parseBlock(\n await this.#call('getBlock', { blockID: blockId, encoding: 'json' }, tags),\n );\n if (block.id !== blockId) throw malformed('the block has another id');\n return block;\n } catch (error) {\n if (isNodeNotFound(error)) return null;\n throw error;\n }\n }\n\n /**\n * An accepted transaction's signed bytes, which must hash to `txId`; `null` when the node\n * does not have it in its accepted state.\n */\n async txBytes(txId: string, tags: AvalancheCallTags): Promise<Uint8Array | null> {\n let answer: unknown;\n try {\n answer = await this.#call('getTx', { txID: txId, encoding: 'hex' }, tags);\n } catch (error) {\n if (isNodeNotFound(error)) return null;\n throw error;\n }\n const bytes = decodeChecked(record(answer, 'getTx').tx, 'getTx.tx');\n if (idOf(bytes) !== txId) throw malformed('transaction bytes of another id');\n return bytes;\n }\n\n /** P-Chain only: committed, aborted, in a mempool, dropped by one, or unknown. */\n async txStatus(txId: string, tags: AvalancheCallTags): Promise<PlatformStatus> {\n return parsePlatformStatus(await this.#call('getTxStatus', { txID: txId }, tags));\n }\n\n /**\n * Every output the node lists for `address` (its UTXO set), as raw UTXO bytes, read page\n * by page. An output listed twice alike is kept once; listed twice differently, the\n * answer is malformed.\n */\n async utxos(address: string, tags: AvalancheCallTags): Promise<Uint8Array[]> {\n const seen = new Map<string, string>();\n const out: Uint8Array[] = [];\n let start: Json | undefined;\n for (let page = 0; ; page++) {\n if (page >= MAX_UTXO_PAGES) throw malformed('more unspent outputs than are read');\n const answer = record(\n await this.#call(\n 'getUTXOs',\n {\n addresses: [address],\n limit: UTXO_PAGE,\n encoding: 'hex',\n ...(start ? { startIndex: start } : {}),\n },\n tags,\n ),\n 'getUTXOs',\n );\n const utxos = answer.utxos;\n if (!Array.isArray(utxos) || utxos.length > UTXO_PAGE) throw malformed('utxos');\n const fetched = parseAmount(answer.numFetched, 'numFetched');\n if (fetched !== BigInt(utxos.length)) throw malformed('numFetched');\n for (const text of utxos) {\n const bytes = decodeChecked(text, 'utxo');\n const key = toHex(sha256(bytes));\n const head = toHex(bytes.subarray(0, 38)); // codec, txID, output index\n const known = seen.get(head);\n if (known === undefined) {\n seen.set(head, key);\n out.push(bytes);\n } else if (known !== key) {\n throw malformed('an unspent output listed twice, differently');\n }\n }\n if (utxos.length < UTXO_PAGE) return out;\n const end = record(answer.endIndex, 'endIndex');\n if (typeof end.address !== 'string' || typeof end.utxo !== 'string') {\n throw malformed('endIndex');\n }\n start = { address: end.address, utxo: end.utxo };\n }\n }\n\n /** Issues signed bytes; resolves to the id the node gives them. */\n async issueTx(bytes: Uint8Array, tags: AvalancheCallTags): Promise<string> {\n const answer = await this.#call(\n 'issueTx',\n { tx: encodeChecked(bytes), encoding: 'hex' },\n tags,\n );\n return id(record(answer, 'issueTx').txID, 'issueTx.txID');\n }\n\n /** X-Chain: the fixed fee of a transaction (`txFee`), in nAVAX. */\n async txFee(tags: AvalancheCallTags): Promise<bigint> {\n return parseAmount(\n record(await this.#call('getTxFee', {}, tags), 'getTxFee').txFee,\n 'txFee',\n );\n }\n\n /** P-Chain: the current gas price and capacity (Etna's dynamic fees). */\n async feeState(tags: AvalancheCallTags): Promise<FeeState> {\n const state = record(await this.#call('getFeeState', {}, tags), 'getFeeState');\n if (typeof state.timestamp !== 'string' || state.timestamp.length > 64) {\n throw malformed('feeState.timestamp');\n }\n return {\n capacity: parseAmount(state.capacity, 'feeState.capacity'),\n excess: parseAmount(state.excess, 'feeState.excess'),\n price: parseAmount(state.price, 'feeState.price'),\n timestamp: state.timestamp,\n };\n }\n\n /** P-Chain: the weights of the four fee dimensions and the minimum gas price. */\n async feeConfig(\n tags: AvalancheCallTags,\n ): Promise<{ readonly weights: FeeWeights; readonly minPrice: bigint }> {\n const config = record(await this.#call('getFeeConfig', {}, tags), 'getFeeConfig');\n const weights = config.weights;\n if (\n !Array.isArray(weights) ||\n weights.length !== 4 ||\n !weights.every((w) => Number.isSafeInteger(w) && (w as number) >= 0)\n ) {\n throw malformed('feeConfig.weights');\n }\n return {\n weights: weights as unknown as FeeWeights,\n minPrice: parseAmount(config.minPrice, 'feeConfig.minPrice'),\n };\n }\n}\n\n/** One transaction of an address's history, as the Data API lists it (newest first). */\nexport interface HistoryEntry {\n readonly txId: string;\n /** Absent for an X-Chain transaction from before its linearization (no block). */\n readonly location?: Location;\n}\n\nconst PAGE_TOKEN = /^[A-Za-z0-9_-]{1,256}$/;\n\n/** A Data API transaction's block, or `undefined` when it has none (non-linear X-Chain). */\nfunction locationOf(tx: Json): Location | undefined {\n const height = tx.blockHeight ?? tx.blockNumber;\n if (height === undefined && tx.blockHash === undefined) return undefined;\n return {\n height: parseHeight(height, 'transaction block height'),\n hash: id(tx.blockHash, 'transaction block hash'),\n };\n}\n\nexport class DataApi {\n readonly #transport: Transport;\n\n constructor(transport: Transport) {\n this.#transport = transport;\n }\n\n /** Where the indexer says `txId` is; `null` when it does not know it (404). */\n async locate(\n txId: string,\n tags: AvalancheCallTags,\n ): Promise<Location | null | 'no-block'> {\n let answer: unknown;\n try {\n answer = await this.#transport.http(\n { method: 'GET', path: `/transactions/${txId}`, route: '/transactions/:id' },\n tags,\n );\n } catch (error) {\n if (isHttpNotFound(error)) return null;\n throw error;\n }\n const tx = record(answer, 'transaction');\n if (tx.txHash !== txId) throw malformed('a transaction of another id');\n return locationOf(tx) ?? 'no-block';\n }\n\n /** A page of `address`'s transactions, newest first. */\n async history(\n address: string,\n options: { readonly cursor?: string; readonly pageSize: number },\n tags: AvalancheCallTags,\n ): Promise<{ readonly items: readonly HistoryEntry[]; readonly next?: string }> {\n const answer = record(\n await this.#transport.http(\n {\n method: 'GET',\n path: '/transactions',\n route: '/transactions',\n query: {\n addresses: address,\n pageSize: String(options.pageSize),\n sortOrder: 'desc',\n ...(options.cursor !== undefined ? { pageToken: options.cursor } : {}),\n },\n },\n tags,\n ),\n 'transactions',\n );\n const txs = answer.transactions;\n if (!Array.isArray(txs) || txs.length > options.pageSize) {\n throw malformed('transactions');\n }\n const items = txs.map((entry): HistoryEntry => {\n const tx = record(entry, 'transaction');\n const location = locationOf(tx);\n return { txId: id(tx.txHash, 'txHash'), ...(location ? { location } : {}) };\n });\n const next = answer.nextPageToken;\n if (next !== undefined && next !== null && next !== '') {\n if (typeof next !== 'string' || !PAGE_TOKEN.test(next)) {\n throw malformed('nextPageToken');\n }\n return { items, next };\n }\n return { items };\n }\n\n /** The hash of the indexer's block at height 0 (its identity probe). */\n static blockZero(answer: unknown): string {\n const block = record(answer, 'block');\n if (parseHeight(block.blockNumber, 'blockNumber') !== 0n) throw malformed('block 0');\n return id(block.blockHash, 'blockHash');\n }\n\n /** The indexer's newest block height (its height probe). */\n static latestHeight(answer: unknown): bigint {\n const blocks = record(answer, 'blocks').blocks;\n if (!Array.isArray(blocks) || blocks.length !== 1) throw malformed('blocks');\n return parseHeight(record(blocks[0], 'block').blockNumber, 'blockNumber');\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Broadcaster, TxBuilder } from '../../core/driver/types';
|
|
2
|
+
import type { RawTx, UnsignedTx } from '../../core/model/transaction';
|
|
3
|
+
import type { SignatureBundle } from '../../core/signing/types';
|
|
4
|
+
import type { AvalancheContext } from './context';
|
|
5
|
+
/** At most this many outputs per transfer (and one more for change). */
|
|
6
|
+
export declare const MAX_OUTPUTS = 127;
|
|
7
|
+
/** At most this many inputs: well inside 64 KiB and the P-Chain's gas capacity. */
|
|
8
|
+
export declare const MAX_INPUTS = 128;
|
|
9
|
+
export interface AvalancheBuilder extends TxBuilder {
|
|
10
|
+
signaturesFrom(unsigned: UnsignedTx, signed: RawTx): readonly SignatureBundle[];
|
|
11
|
+
}
|
|
12
|
+
export declare function avalancheBuilder(ctx: AvalancheContext): AvalancheBuilder;
|
|
13
|
+
export declare function avalancheBroadcaster(ctx: AvalancheContext): Broadcaster;
|