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,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Solana driver's path to the core transport. Every JSON-RPC call
|
|
3
|
+
* is one direct `transport.rpc` call carrying the tags of the `ChainDriver` method that made
|
|
4
|
+
* it; `@solana/web3.js` is never on a request path. Answers are validated here: a malformed
|
|
5
|
+
* answer is a retryable `PROVIDER_UNAVAILABLE`, never a foreign error.
|
|
6
|
+
*/
|
|
7
|
+
import { ProviderError, type CryptoAioError } from '../../core/errors/error';
|
|
8
|
+
import type { Transport } from '../../core/transport/types';
|
|
9
|
+
import type { Commitment, SolanaCallTags } from './types';
|
|
10
|
+
export declare const READ: SolanaCallTags;
|
|
11
|
+
export declare const MONITOR: SolanaCallTags;
|
|
12
|
+
export declare const PROOF: SolanaCallTags;
|
|
13
|
+
export declare const BROADCAST: SolanaCallTags;
|
|
14
|
+
export declare const withSignal: (tags: SolanaCallTags, signal?: AbortSignal) => SolanaCallTags;
|
|
15
|
+
/** Solana's JSON-RPC server errors (agave `rpc-client-api/src/custom_error.rs`). */
|
|
16
|
+
export declare const RPC_CODES: Readonly<{
|
|
17
|
+
BLOCK_CLEANED_UP: -32001;
|
|
18
|
+
SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002;
|
|
19
|
+
TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003;
|
|
20
|
+
BLOCK_NOT_AVAILABLE: -32004;
|
|
21
|
+
SLOT_SKIPPED: -32007;
|
|
22
|
+
LONG_TERM_STORAGE_SLOT_SKIPPED: -32009;
|
|
23
|
+
TRANSACTION_HISTORY_NOT_AVAILABLE: -32011;
|
|
24
|
+
BLOCK_STATUS_NOT_AVAILABLE_YET: -32014;
|
|
25
|
+
MIN_CONTEXT_SLOT_NOT_REACHED: -32016;
|
|
26
|
+
LONG_TERM_STORAGE_UNREACHABLE: -32019;
|
|
27
|
+
FILTER_TRANSACTION_NOT_FOUND: -32020;
|
|
28
|
+
}>;
|
|
29
|
+
/** The JSON-RPC code of a definitive, non-ambiguous `RPC_ERROR`; otherwise `undefined`. */
|
|
30
|
+
export declare function rpcCode(error: unknown): number | undefined;
|
|
31
|
+
/** The node's message of a definitive, non-ambiguous `RPC_ERROR`. */
|
|
32
|
+
export declare function rpcMessage(error: CryptoAioError): string;
|
|
33
|
+
/** The endpoint has not reached that block or state yet (`null`, decides nothing). */
|
|
34
|
+
export declare const isNotYet: (error: unknown) => boolean;
|
|
35
|
+
/** The endpoint no longer holds that block or history, or never did (decides nothing). */
|
|
36
|
+
export declare const isGone: (error: unknown) => boolean;
|
|
37
|
+
/** The endpoint says the slot was skipped, or is missing on this endpoint (`-32007`). */
|
|
38
|
+
export declare const isSkipped: (error: unknown) => boolean;
|
|
39
|
+
/** Any answer meaning "this endpoint cannot show that": it never decides anything. */
|
|
40
|
+
export declare const isNotAvailable: (error: unknown) => boolean;
|
|
41
|
+
/** A retryable error that decides nothing: the endpoint no longer holds what was asked. */
|
|
42
|
+
export declare const gone: (what: string) => ProviderError;
|
|
43
|
+
/** A retryable error that decides nothing: the endpoints cannot show this yet. */
|
|
44
|
+
export declare const notYet: (what: string) => ProviderError;
|
|
45
|
+
/**
|
|
46
|
+
* On a proof path only a definitive negative proof answers "no". Any
|
|
47
|
+
* other definitive RPC error (agave 4.3.0's `getBlocks` answers `-32602 "BigTable query
|
|
48
|
+
* failed"` for a range below its local ledger, `-32603` on a blockstore error) decides
|
|
49
|
+
* nothing: it becomes a retryable `PROVIDER_UNAVAILABLE`. Every other error (retryable
|
|
50
|
+
* ones, `PROVIDER_MISCONFIGURED`) is returned unchanged.
|
|
51
|
+
*/
|
|
52
|
+
export declare function undecided(error: unknown, what: string): unknown;
|
|
53
|
+
export declare const malformed: (what: string) => ProviderError;
|
|
54
|
+
export declare const inconsistent: (what: string) => ProviderError;
|
|
55
|
+
/** A JSON object's fields, or `null` for anything else (arrays and `null` included). */
|
|
56
|
+
export declare const record: (value: unknown) => Record<string, unknown> | null;
|
|
57
|
+
/**
|
|
58
|
+
* An unsigned 64-bit JSON integer (lamports, slots, heights) as a `bigint`. Every call
|
|
59
|
+
* parses with `exactIntegers`, so a value above 2^53 − 1 arrives as a `bigint`; a
|
|
60
|
+
* number outside the safe range was rounded somewhere and is refused as malformed.
|
|
61
|
+
*/
|
|
62
|
+
export declare function u64(value: unknown, what: string): bigint;
|
|
63
|
+
/** A decimal string of base units (token amounts), as a `bigint`. */
|
|
64
|
+
export declare function amountString(value: unknown, what: string): bigint;
|
|
65
|
+
/** The `value` of an RPC response with context (`{ context: { slot }, value }`). */
|
|
66
|
+
export declare function contextValue(result: unknown, what: string): unknown;
|
|
67
|
+
/** A block header as `getBlock` returns it with `transactionDetails: 'none'`. */
|
|
68
|
+
export interface BlockHeader {
|
|
69
|
+
readonly blockhash: string;
|
|
70
|
+
readonly previousBlockhash: string;
|
|
71
|
+
readonly parentSlot: bigint;
|
|
72
|
+
readonly blockHeight: bigint;
|
|
73
|
+
/** Unix seconds, when the node estimates one. */
|
|
74
|
+
readonly blockTime?: number;
|
|
75
|
+
}
|
|
76
|
+
export declare function blockHeader(result: unknown): BlockHeader;
|
|
77
|
+
export declare const pick: (value: unknown, keys: readonly string[]) => unknown;
|
|
78
|
+
/** The consensus fields of a block header, compared under a quorum. */
|
|
79
|
+
export declare const BLOCK_FIELDS: readonly ["blockhash", "previousBlockhash", "parentSlot", "blockHeight"];
|
|
80
|
+
/**
|
|
81
|
+
* The consensus facts compared under a quorum, per method. A key that throws
|
|
82
|
+
* counts as a disagreement (a retryable `PROVIDER_INCONSISTENT`).
|
|
83
|
+
*/
|
|
84
|
+
export declare function quorumKeyFor(method: string): ((result: unknown) => unknown) | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* One JSON-RPC call through the transport, under the calling driver method's tags. Solana
|
|
87
|
+
* sends u64 values (lamports) as JSON numbers, so every answer is parsed with
|
|
88
|
+
* `exactIntegers`: nothing above 2^53 − 1 is ever rounded.
|
|
89
|
+
*/
|
|
90
|
+
export declare function call(transport: Transport, method: string, params: readonly unknown[], tags: SolanaCallTags): Promise<unknown>;
|
|
91
|
+
/** `getBlock` options for a header (no transactions, no rewards). */
|
|
92
|
+
export declare const headerOptions: (commitment: Commitment) => {
|
|
93
|
+
commitment: Commitment;
|
|
94
|
+
transactionDetails: string;
|
|
95
|
+
rewards: boolean;
|
|
96
|
+
};
|
|
97
|
+
/** `getBlock`/`getTransaction` options for decoding (every transaction version we parse). */
|
|
98
|
+
export declare const parsedOptions: (commitment: Commitment) => {
|
|
99
|
+
commitment: Commitment;
|
|
100
|
+
encoding: string;
|
|
101
|
+
maxSupportedTransactionVersion: number;
|
|
102
|
+
};
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parsedOptions = exports.headerOptions = exports.BLOCK_FIELDS = exports.pick = exports.record = exports.inconsistent = exports.malformed = exports.notYet = exports.gone = exports.isNotAvailable = exports.isSkipped = exports.isGone = exports.isNotYet = exports.RPC_CODES = exports.withSignal = exports.BROADCAST = exports.PROOF = exports.MONITOR = exports.READ = void 0;
|
|
4
|
+
exports.rpcCode = rpcCode;
|
|
5
|
+
exports.rpcMessage = rpcMessage;
|
|
6
|
+
exports.undecided = undecided;
|
|
7
|
+
exports.u64 = u64;
|
|
8
|
+
exports.amountString = amountString;
|
|
9
|
+
exports.contextValue = contextValue;
|
|
10
|
+
exports.blockHeader = blockHeader;
|
|
11
|
+
exports.quorumKeyFor = quorumKeyFor;
|
|
12
|
+
exports.call = call;
|
|
13
|
+
/**
|
|
14
|
+
* The Solana driver's path to the core transport. Every JSON-RPC call
|
|
15
|
+
* is one direct `transport.rpc` call carrying the tags of the `ChainDriver` method that made
|
|
16
|
+
* it; `@solana/web3.js` is never on a request path. Answers are validated here: a malformed
|
|
17
|
+
* answer is a retryable `PROVIDER_UNAVAILABLE`, never a foreign error.
|
|
18
|
+
*/
|
|
19
|
+
const error_1 = require("../../core/errors/error");
|
|
20
|
+
const json_1 = require("../../core/util/json");
|
|
21
|
+
exports.READ = Object.freeze({ purpose: 'read', retry: 'safe' });
|
|
22
|
+
exports.MONITOR = Object.freeze({
|
|
23
|
+
purpose: 'monitor',
|
|
24
|
+
retry: 'safe',
|
|
25
|
+
});
|
|
26
|
+
exports.PROOF = Object.freeze({
|
|
27
|
+
purpose: 'proof',
|
|
28
|
+
retry: 'safe',
|
|
29
|
+
quorum: 'proof',
|
|
30
|
+
});
|
|
31
|
+
exports.BROADCAST = Object.freeze({
|
|
32
|
+
purpose: 'broadcast',
|
|
33
|
+
retry: 'ambiguous-on-failure',
|
|
34
|
+
});
|
|
35
|
+
const withSignal = (tags, signal) => signal ? { ...tags, signal } : tags;
|
|
36
|
+
exports.withSignal = withSignal;
|
|
37
|
+
/** Solana's JSON-RPC server errors (agave `rpc-client-api/src/custom_error.rs`). */
|
|
38
|
+
exports.RPC_CODES = Object.freeze({
|
|
39
|
+
BLOCK_CLEANED_UP: -32001,
|
|
40
|
+
SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002,
|
|
41
|
+
TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003,
|
|
42
|
+
BLOCK_NOT_AVAILABLE: -32004,
|
|
43
|
+
SLOT_SKIPPED: -32007,
|
|
44
|
+
LONG_TERM_STORAGE_SLOT_SKIPPED: -32009,
|
|
45
|
+
TRANSACTION_HISTORY_NOT_AVAILABLE: -32011,
|
|
46
|
+
BLOCK_STATUS_NOT_AVAILABLE_YET: -32014,
|
|
47
|
+
MIN_CONTEXT_SLOT_NOT_REACHED: -32016,
|
|
48
|
+
LONG_TERM_STORAGE_UNREACHABLE: -32019,
|
|
49
|
+
FILTER_TRANSACTION_NOT_FOUND: -32020,
|
|
50
|
+
});
|
|
51
|
+
/** "Not yet": the endpoint has not reached that slot or state. */
|
|
52
|
+
const NOT_YET = new Set([
|
|
53
|
+
exports.RPC_CODES.BLOCK_NOT_AVAILABLE,
|
|
54
|
+
exports.RPC_CODES.BLOCK_STATUS_NOT_AVAILABLE_YET,
|
|
55
|
+
exports.RPC_CODES.MIN_CONTEXT_SLOT_NOT_REACHED,
|
|
56
|
+
]);
|
|
57
|
+
/** "No longer, or never here": pruned, not in long-term storage, or no history at all. */
|
|
58
|
+
const GONE = new Set([
|
|
59
|
+
exports.RPC_CODES.BLOCK_CLEANED_UP,
|
|
60
|
+
exports.RPC_CODES.LONG_TERM_STORAGE_SLOT_SKIPPED,
|
|
61
|
+
exports.RPC_CODES.TRANSACTION_HISTORY_NOT_AVAILABLE,
|
|
62
|
+
exports.RPC_CODES.LONG_TERM_STORAGE_UNREACHABLE,
|
|
63
|
+
]);
|
|
64
|
+
/** The JSON-RPC code of a definitive, non-ambiguous `RPC_ERROR`; otherwise `undefined`. */
|
|
65
|
+
function rpcCode(error) {
|
|
66
|
+
if (!(0, error_1.isCryptoAioError)(error, 'RPC_ERROR') || error.ambiguous)
|
|
67
|
+
return undefined;
|
|
68
|
+
const code = error.details?.rpcCode;
|
|
69
|
+
return typeof code === 'number' ? code : undefined;
|
|
70
|
+
}
|
|
71
|
+
/** The node's message of a definitive, non-ambiguous `RPC_ERROR`. */
|
|
72
|
+
function rpcMessage(error) {
|
|
73
|
+
return String(error.details?.rpcMessage ?? error.message);
|
|
74
|
+
}
|
|
75
|
+
const hasCode = (error, codes) => {
|
|
76
|
+
const code = rpcCode(error);
|
|
77
|
+
return code !== undefined && codes.has(code);
|
|
78
|
+
};
|
|
79
|
+
/** The endpoint has not reached that block or state yet (`null`, decides nothing). */
|
|
80
|
+
const isNotYet = (error) => hasCode(error, NOT_YET);
|
|
81
|
+
exports.isNotYet = isNotYet;
|
|
82
|
+
/** The endpoint no longer holds that block or history, or never did (decides nothing). */
|
|
83
|
+
const isGone = (error) => hasCode(error, GONE);
|
|
84
|
+
exports.isGone = isGone;
|
|
85
|
+
/** The endpoint says the slot was skipped, or is missing on this endpoint (`-32007`). */
|
|
86
|
+
const isSkipped = (error) => rpcCode(error) === exports.RPC_CODES.SLOT_SKIPPED;
|
|
87
|
+
exports.isSkipped = isSkipped;
|
|
88
|
+
/** Any answer meaning "this endpoint cannot show that": it never decides anything. */
|
|
89
|
+
const isNotAvailable = (error) => (0, exports.isNotYet)(error) || (0, exports.isGone)(error) || (0, exports.isSkipped)(error);
|
|
90
|
+
exports.isNotAvailable = isNotAvailable;
|
|
91
|
+
/** A retryable error that decides nothing: the endpoint no longer holds what was asked. */
|
|
92
|
+
const gone = (what) => new error_1.ProviderError('PROVIDER_UNAVAILABLE', `the endpoint no longer holds ${what}`);
|
|
93
|
+
exports.gone = gone;
|
|
94
|
+
/** A retryable error that decides nothing: the endpoints cannot show this yet. */
|
|
95
|
+
const notYet = (what) => new error_1.ProviderError('PROVIDER_UNAVAILABLE', `the endpoints cannot show ${what} yet`);
|
|
96
|
+
exports.notYet = notYet;
|
|
97
|
+
/**
|
|
98
|
+
* On a proof path only a definitive negative proof answers "no". Any
|
|
99
|
+
* other definitive RPC error (agave 4.3.0's `getBlocks` answers `-32602 "BigTable query
|
|
100
|
+
* failed"` for a range below its local ledger, `-32603` on a blockstore error) decides
|
|
101
|
+
* nothing: it becomes a retryable `PROVIDER_UNAVAILABLE`. Every other error (retryable
|
|
102
|
+
* ones, `PROVIDER_MISCONFIGURED`) is returned unchanged.
|
|
103
|
+
*/
|
|
104
|
+
function undecided(error, what) {
|
|
105
|
+
if (!(0, error_1.isCryptoAioError)(error, 'RPC_ERROR'))
|
|
106
|
+
return error;
|
|
107
|
+
return new error_1.ProviderError('PROVIDER_UNAVAILABLE', `the endpoints cannot show ${what}: ${rpcMessage(error)}`, {
|
|
108
|
+
cause: error,
|
|
109
|
+
context: error.context,
|
|
110
|
+
...(error.details ? { details: error.details } : {}),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
const malformed = (what) => new error_1.ProviderError('PROVIDER_UNAVAILABLE', `malformed ${what} answer`);
|
|
114
|
+
exports.malformed = malformed;
|
|
115
|
+
const inconsistent = (what) => new error_1.ProviderError('PROVIDER_INCONSISTENT', what, { retryable: true });
|
|
116
|
+
exports.inconsistent = inconsistent;
|
|
117
|
+
/** A JSON object's fields, or `null` for anything else (arrays and `null` included). */
|
|
118
|
+
const record = (value) => value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
119
|
+
? value
|
|
120
|
+
: null;
|
|
121
|
+
exports.record = record;
|
|
122
|
+
/**
|
|
123
|
+
* An unsigned 64-bit JSON integer (lamports, slots, heights) as a `bigint`. Every call
|
|
124
|
+
* parses with `exactIntegers`, so a value above 2^53 − 1 arrives as a `bigint`; a
|
|
125
|
+
* number outside the safe range was rounded somewhere and is refused as malformed.
|
|
126
|
+
*/
|
|
127
|
+
function u64(value, what) {
|
|
128
|
+
if (typeof value === 'bigint' && value >= 0n && value < 2n ** 64n)
|
|
129
|
+
return value;
|
|
130
|
+
if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {
|
|
131
|
+
return BigInt(value);
|
|
132
|
+
}
|
|
133
|
+
throw (0, exports.malformed)(what);
|
|
134
|
+
}
|
|
135
|
+
/** A decimal string of base units (token amounts), as a `bigint`. */
|
|
136
|
+
function amountString(value, what) {
|
|
137
|
+
if (typeof value !== 'string' || !/^(0|[1-9][0-9]{0,19})$/.test(value)) {
|
|
138
|
+
throw (0, exports.malformed)(what);
|
|
139
|
+
}
|
|
140
|
+
const amount = BigInt(value);
|
|
141
|
+
if (amount >= 2n ** 64n)
|
|
142
|
+
throw (0, exports.malformed)(what);
|
|
143
|
+
return amount;
|
|
144
|
+
}
|
|
145
|
+
/** The `value` of an RPC response with context (`{ context: { slot }, value }`). */
|
|
146
|
+
function contextValue(result, what) {
|
|
147
|
+
const body = (0, exports.record)(result);
|
|
148
|
+
if (!body || !(0, exports.record)(body.context) || !('value' in body))
|
|
149
|
+
throw (0, exports.malformed)(what);
|
|
150
|
+
return body.value;
|
|
151
|
+
}
|
|
152
|
+
function blockHeader(result) {
|
|
153
|
+
const block = (0, exports.record)(result);
|
|
154
|
+
if (!block)
|
|
155
|
+
throw (0, exports.malformed)('getBlock');
|
|
156
|
+
const { blockhash, previousBlockhash, parentSlot, blockHeight, blockTime } = block;
|
|
157
|
+
if (typeof blockhash !== 'string' || typeof previousBlockhash !== 'string') {
|
|
158
|
+
throw (0, exports.malformed)('getBlock');
|
|
159
|
+
}
|
|
160
|
+
// Blocks from before block heights were recorded (2020) carry `blockHeight: null`.
|
|
161
|
+
if (blockHeight === null)
|
|
162
|
+
throw (0, exports.malformed)('getBlock (no block height)');
|
|
163
|
+
return {
|
|
164
|
+
blockhash,
|
|
165
|
+
previousBlockhash,
|
|
166
|
+
parentSlot: u64(parentSlot, 'parent slot'),
|
|
167
|
+
blockHeight: u64(blockHeight, 'block height'),
|
|
168
|
+
...(typeof blockTime === 'number' && Number.isSafeInteger(blockTime)
|
|
169
|
+
? { blockTime }
|
|
170
|
+
: {}),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
const pick = (value, keys) => {
|
|
174
|
+
const object = (0, exports.record)(value);
|
|
175
|
+
if (!object)
|
|
176
|
+
return value;
|
|
177
|
+
return Object.fromEntries(keys.map((key) => [key, object[key] ?? null]));
|
|
178
|
+
};
|
|
179
|
+
exports.pick = pick;
|
|
180
|
+
/** The consensus fields of a block header, compared under a quorum. */
|
|
181
|
+
exports.BLOCK_FIELDS = [
|
|
182
|
+
'blockhash',
|
|
183
|
+
'previousBlockhash',
|
|
184
|
+
'parentSlot',
|
|
185
|
+
'blockHeight',
|
|
186
|
+
];
|
|
187
|
+
/** The token-program instructions (outer and inner) projected to what a verdict reads. */
|
|
188
|
+
function tokenInstructions(tx) {
|
|
189
|
+
const message = (0, exports.record)((0, exports.record)(tx.transaction)?.message);
|
|
190
|
+
const meta = (0, exports.record)(tx.meta);
|
|
191
|
+
const outer = Array.isArray(message?.instructions) ? message.instructions : [];
|
|
192
|
+
const inner = Array.isArray(meta?.innerInstructions)
|
|
193
|
+
? meta.innerInstructions.flatMap((group) => {
|
|
194
|
+
const list = (0, exports.record)(group)?.instructions;
|
|
195
|
+
return Array.isArray(list) ? list : [];
|
|
196
|
+
})
|
|
197
|
+
: [];
|
|
198
|
+
return [...outer, ...inner].flatMap((ix) => {
|
|
199
|
+
const instruction = (0, exports.record)(ix);
|
|
200
|
+
const parsed = (0, exports.record)(instruction?.parsed);
|
|
201
|
+
const info = (0, exports.record)(parsed?.info);
|
|
202
|
+
if (instruction?.program !== 'spl-token' || !parsed || !info)
|
|
203
|
+
return [];
|
|
204
|
+
return [
|
|
205
|
+
{
|
|
206
|
+
programId: instruction.programId ?? null,
|
|
207
|
+
type: parsed.type ?? null,
|
|
208
|
+
source: info.source ?? null,
|
|
209
|
+
destination: info.destination ?? null,
|
|
210
|
+
authority: info.authority ?? info.multisigAuthority ?? null,
|
|
211
|
+
mint: info.mint ?? null,
|
|
212
|
+
amount: info.amount ?? (0, exports.record)(info.tokenAmount)?.amount ?? null,
|
|
213
|
+
},
|
|
214
|
+
];
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
/** Token balances by account index (providers may list them in another order). */
|
|
218
|
+
const tokenBalances = (list) => Array.isArray(list)
|
|
219
|
+
? list
|
|
220
|
+
.map((entry) => {
|
|
221
|
+
const balance = (0, exports.record)(entry);
|
|
222
|
+
return {
|
|
223
|
+
accountIndex: balance?.accountIndex ?? null,
|
|
224
|
+
mint: balance?.mint ?? null,
|
|
225
|
+
amount: (0, exports.record)(balance?.uiTokenAmount)?.amount ?? null,
|
|
226
|
+
};
|
|
227
|
+
})
|
|
228
|
+
.sort((a, b) => Number(a.accountIndex) - Number(b.accountIndex))
|
|
229
|
+
: null;
|
|
230
|
+
/**
|
|
231
|
+
* A finalized transaction's consensus facts, as far as a verdict reads them
|
|
232
|
+
* (slot, error, signatures, account keys, token balances, token transfer instructions).
|
|
233
|
+
* Formatting that honest providers differ on (`uiAmount` floats, `stackHeight`, `owner` and
|
|
234
|
+
* `programId` on balances, log messages, compute units, `blockTime`) is left out. The landing
|
|
235
|
+
* guard (`decode.ts`) still requires `programId` on the transfer's balances: providers must
|
|
236
|
+
* report it (current agave does), and through one that leaves it out no SPL verdict ever
|
|
237
|
+
* decides, which costs liveness only.
|
|
238
|
+
*/
|
|
239
|
+
function transactionKey(result) {
|
|
240
|
+
if (result === null)
|
|
241
|
+
return null;
|
|
242
|
+
const tx = (0, exports.record)(result);
|
|
243
|
+
if (!tx)
|
|
244
|
+
throw (0, exports.malformed)('getTransaction');
|
|
245
|
+
const meta = (0, exports.record)(tx.meta);
|
|
246
|
+
const message = (0, exports.record)((0, exports.record)(tx.transaction)?.message);
|
|
247
|
+
const keys = Array.isArray(message?.accountKeys)
|
|
248
|
+
? message.accountKeys.map((key) => (0, exports.record)(key)?.pubkey ?? key)
|
|
249
|
+
: null;
|
|
250
|
+
return {
|
|
251
|
+
slot: tx.slot ?? null,
|
|
252
|
+
err: (0, json_1.canonicalJson)(meta?.err ?? null),
|
|
253
|
+
signatures: (0, exports.record)(tx.transaction)?.signatures ?? null,
|
|
254
|
+
accountKeys: keys,
|
|
255
|
+
preTokenBalances: tokenBalances(meta?.preTokenBalances),
|
|
256
|
+
postTokenBalances: tokenBalances(meta?.postTokenBalances),
|
|
257
|
+
tokenInstructions: tokenInstructions(tx),
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* The consensus facts compared under a quorum, per method. A key that throws
|
|
262
|
+
* counts as a disagreement (a retryable `PROVIDER_INCONSISTENT`).
|
|
263
|
+
*/
|
|
264
|
+
function quorumKeyFor(method) {
|
|
265
|
+
switch (method) {
|
|
266
|
+
case 'getBlock':
|
|
267
|
+
return (result) => (0, exports.pick)(result, exports.BLOCK_FIELDS);
|
|
268
|
+
case 'getTransaction':
|
|
269
|
+
return transactionKey;
|
|
270
|
+
default:
|
|
271
|
+
return undefined;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* One JSON-RPC call through the transport, under the calling driver method's tags. Solana
|
|
276
|
+
* sends u64 values (lamports) as JSON numbers, so every answer is parsed with
|
|
277
|
+
* `exactIntegers`: nothing above 2^53 − 1 is ever rounded.
|
|
278
|
+
*/
|
|
279
|
+
function call(transport, method, params, tags) {
|
|
280
|
+
const quorumKey = tags.quorum !== undefined ? (tags.quorumKey ?? quorumKeyFor(method)) : undefined;
|
|
281
|
+
return transport.rpc(method, params, {
|
|
282
|
+
...tags,
|
|
283
|
+
...(quorumKey ? { quorumKey } : {}),
|
|
284
|
+
exactIntegers: true,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
/** `getBlock` options for a header (no transactions, no rewards). */
|
|
288
|
+
const headerOptions = (commitment) => ({
|
|
289
|
+
commitment,
|
|
290
|
+
transactionDetails: 'none',
|
|
291
|
+
rewards: false,
|
|
292
|
+
});
|
|
293
|
+
exports.headerOptions = headerOptions;
|
|
294
|
+
/** `getBlock`/`getTransaction` options for decoding (every transaction version we parse). */
|
|
295
|
+
const parsedOptions = (commitment) => ({
|
|
296
|
+
commitment,
|
|
297
|
+
encoding: 'jsonParsed',
|
|
298
|
+
maxSupportedTransactionVersion: 0,
|
|
299
|
+
});
|
|
300
|
+
exports.parsedOptions = parsedOptions;
|
|
301
|
+
//# sourceMappingURL=rpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../../src/adapters/solana/rpc.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The Solana driver's path to the core transport. Every JSON-RPC call\n * is one direct `transport.rpc` call carrying the tags of the `ChainDriver` method that made\n * it; `@solana/web3.js` is never on a request path. Answers are validated here: a malformed\n * answer is a retryable `PROVIDER_UNAVAILABLE`, never a foreign error.\n */\nimport {\n ProviderError,\n isCryptoAioError,\n type CryptoAioError,\n} from '../../core/errors/error';\nimport type { Transport } from '../../core/transport/types';\nimport { canonicalJson } from '../../core/util/json';\nimport type { Commitment, SolanaCallTags } from './types';\n\nexport const READ: SolanaCallTags = Object.freeze({ purpose: 'read', retry: 'safe' });\nexport const MONITOR: SolanaCallTags = Object.freeze({\n purpose: 'monitor',\n retry: 'safe',\n});\nexport const PROOF: SolanaCallTags = Object.freeze({\n purpose: 'proof',\n retry: 'safe',\n quorum: 'proof',\n});\nexport const BROADCAST: SolanaCallTags = Object.freeze({\n purpose: 'broadcast',\n retry: 'ambiguous-on-failure',\n});\n\nexport const withSignal = (tags: SolanaCallTags, signal?: AbortSignal): SolanaCallTags =>\n signal ? { ...tags, signal } : tags;\n\n/** Solana's JSON-RPC server errors (agave `rpc-client-api/src/custom_error.rs`). */\nexport const RPC_CODES = Object.freeze({\n BLOCK_CLEANED_UP: -32001,\n SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002,\n TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003,\n BLOCK_NOT_AVAILABLE: -32004,\n SLOT_SKIPPED: -32007,\n LONG_TERM_STORAGE_SLOT_SKIPPED: -32009,\n TRANSACTION_HISTORY_NOT_AVAILABLE: -32011,\n BLOCK_STATUS_NOT_AVAILABLE_YET: -32014,\n MIN_CONTEXT_SLOT_NOT_REACHED: -32016,\n LONG_TERM_STORAGE_UNREACHABLE: -32019,\n FILTER_TRANSACTION_NOT_FOUND: -32020,\n});\n\n/** \"Not yet\": the endpoint has not reached that slot or state. */\nconst NOT_YET = new Set<number>([\n RPC_CODES.BLOCK_NOT_AVAILABLE,\n RPC_CODES.BLOCK_STATUS_NOT_AVAILABLE_YET,\n RPC_CODES.MIN_CONTEXT_SLOT_NOT_REACHED,\n]);\n\n/** \"No longer, or never here\": pruned, not in long-term storage, or no history at all. */\nconst GONE = new Set<number>([\n RPC_CODES.BLOCK_CLEANED_UP,\n RPC_CODES.LONG_TERM_STORAGE_SLOT_SKIPPED,\n RPC_CODES.TRANSACTION_HISTORY_NOT_AVAILABLE,\n RPC_CODES.LONG_TERM_STORAGE_UNREACHABLE,\n]);\n\n/** The JSON-RPC code of a definitive, non-ambiguous `RPC_ERROR`; otherwise `undefined`. */\nexport function rpcCode(error: unknown): number | undefined {\n if (!isCryptoAioError(error, 'RPC_ERROR') || error.ambiguous) return undefined;\n const code = error.details?.rpcCode;\n return typeof code === 'number' ? code : undefined;\n}\n\n/** The node's message of a definitive, non-ambiguous `RPC_ERROR`. */\nexport function rpcMessage(error: CryptoAioError): string {\n return String(error.details?.rpcMessage ?? error.message);\n}\n\nconst hasCode = (error: unknown, codes: ReadonlySet<number>): boolean => {\n const code = rpcCode(error);\n return code !== undefined && codes.has(code);\n};\n\n/** The endpoint has not reached that block or state yet (`null`, decides nothing). */\nexport const isNotYet = (error: unknown): boolean => hasCode(error, NOT_YET);\n\n/** The endpoint no longer holds that block or history, or never did (decides nothing). */\nexport const isGone = (error: unknown): boolean => hasCode(error, GONE);\n\n/** The endpoint says the slot was skipped, or is missing on this endpoint (`-32007`). */\nexport const isSkipped = (error: unknown): boolean =>\n rpcCode(error) === RPC_CODES.SLOT_SKIPPED;\n\n/** Any answer meaning \"this endpoint cannot show that\": it never decides anything. */\nexport const isNotAvailable = (error: unknown): boolean =>\n isNotYet(error) || isGone(error) || isSkipped(error);\n\n/** A retryable error that decides nothing: the endpoint no longer holds what was asked. */\nexport const gone = (what: string) =>\n new ProviderError('PROVIDER_UNAVAILABLE', `the endpoint no longer holds ${what}`);\n\n/** A retryable error that decides nothing: the endpoints cannot show this yet. */\nexport const notYet = (what: string) =>\n new ProviderError('PROVIDER_UNAVAILABLE', `the endpoints cannot show ${what} yet`);\n\n/**\n * On a proof path only a definitive negative proof answers \"no\". Any\n * other definitive RPC error (agave 4.3.0's `getBlocks` answers `-32602 \"BigTable query\n * failed\"` for a range below its local ledger, `-32603` on a blockstore error) decides\n * nothing: it becomes a retryable `PROVIDER_UNAVAILABLE`. Every other error (retryable\n * ones, `PROVIDER_MISCONFIGURED`) is returned unchanged.\n */\nexport function undecided(error: unknown, what: string): unknown {\n if (!isCryptoAioError(error, 'RPC_ERROR')) return error;\n return new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n `the endpoints cannot show ${what}: ${rpcMessage(error)}`,\n {\n cause: error,\n context: error.context,\n ...(error.details ? { details: error.details } : {}),\n },\n );\n}\n\nexport const malformed = (what: string) =>\n new ProviderError('PROVIDER_UNAVAILABLE', `malformed ${what} answer`);\n\nexport const inconsistent = (what: string) =>\n new ProviderError('PROVIDER_INCONSISTENT', what, { retryable: true });\n\n/** A JSON object's fields, or `null` for anything else (arrays and `null` included). */\nexport const record = (value: unknown): Record<string, unknown> | null =>\n value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n\n/**\n * An unsigned 64-bit JSON integer (lamports, slots, heights) as a `bigint`. Every call\n * parses with `exactIntegers`, so a value above 2^53 − 1 arrives as a `bigint`; a\n * number outside the safe range was rounded somewhere and is refused as malformed.\n */\nexport function u64(value: unknown, what: string): bigint {\n if (typeof value === 'bigint' && value >= 0n && value < 2n ** 64n) return value;\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return BigInt(value);\n }\n throw malformed(what);\n}\n\n/** A decimal string of base units (token amounts), as a `bigint`. */\nexport function amountString(value: unknown, what: string): bigint {\n if (typeof value !== 'string' || !/^(0|[1-9][0-9]{0,19})$/.test(value)) {\n throw malformed(what);\n }\n const amount = BigInt(value);\n if (amount >= 2n ** 64n) throw malformed(what);\n return amount;\n}\n\n/** The `value` of an RPC response with context (`{ context: { slot }, value }`). */\nexport function contextValue(result: unknown, what: string): unknown {\n const body = record(result);\n if (!body || !record(body.context) || !('value' in body)) throw malformed(what);\n return body.value;\n}\n\n/** A block header as `getBlock` returns it with `transactionDetails: 'none'`. */\nexport interface BlockHeader {\n readonly blockhash: string;\n readonly previousBlockhash: string;\n readonly parentSlot: bigint;\n readonly blockHeight: bigint;\n /** Unix seconds, when the node estimates one. */\n readonly blockTime?: number;\n}\n\nexport function blockHeader(result: unknown): BlockHeader {\n const block = record(result);\n if (!block) throw malformed('getBlock');\n const { blockhash, previousBlockhash, parentSlot, blockHeight, blockTime } = block;\n if (typeof blockhash !== 'string' || typeof previousBlockhash !== 'string') {\n throw malformed('getBlock');\n }\n // Blocks from before block heights were recorded (2020) carry `blockHeight: null`.\n if (blockHeight === null) throw malformed('getBlock (no block height)');\n return {\n blockhash,\n previousBlockhash,\n parentSlot: u64(parentSlot, 'parent slot'),\n blockHeight: u64(blockHeight, 'block height'),\n ...(typeof blockTime === 'number' && Number.isSafeInteger(blockTime)\n ? { blockTime }\n : {}),\n };\n}\n\nexport const pick = (value: unknown, keys: readonly string[]): unknown => {\n const object = record(value);\n if (!object) return value;\n return Object.fromEntries(keys.map((key) => [key, object[key] ?? null]));\n};\n\n/** The consensus fields of a block header, compared under a quorum. */\nexport const BLOCK_FIELDS = [\n 'blockhash',\n 'previousBlockhash',\n 'parentSlot',\n 'blockHeight',\n] as const;\n\n/** The token-program instructions (outer and inner) projected to what a verdict reads. */\nfunction tokenInstructions(tx: Record<string, unknown>): unknown[] {\n const message = record(record(tx.transaction)?.message);\n const meta = record(tx.meta);\n const outer = Array.isArray(message?.instructions) ? message.instructions : [];\n const inner = Array.isArray(meta?.innerInstructions)\n ? meta.innerInstructions.flatMap((group) => {\n const list = record(group)?.instructions;\n return Array.isArray(list) ? list : [];\n })\n : [];\n return [...outer, ...inner].flatMap((ix) => {\n const instruction = record(ix);\n const parsed = record(instruction?.parsed);\n const info = record(parsed?.info);\n if (instruction?.program !== 'spl-token' || !parsed || !info) return [];\n return [\n {\n programId: instruction.programId ?? null,\n type: parsed.type ?? null,\n source: info.source ?? null,\n destination: info.destination ?? null,\n authority: info.authority ?? info.multisigAuthority ?? null,\n mint: info.mint ?? null,\n amount: info.amount ?? record(info.tokenAmount)?.amount ?? null,\n },\n ];\n });\n}\n\n/** Token balances by account index (providers may list them in another order). */\nconst tokenBalances = (list: unknown): unknown =>\n Array.isArray(list)\n ? list\n .map((entry) => {\n const balance = record(entry);\n return {\n accountIndex: balance?.accountIndex ?? null,\n mint: balance?.mint ?? null,\n amount: record(balance?.uiTokenAmount)?.amount ?? null,\n };\n })\n .sort((a, b) => Number(a.accountIndex) - Number(b.accountIndex))\n : null;\n\n/**\n * A finalized transaction's consensus facts, as far as a verdict reads them\n * (slot, error, signatures, account keys, token balances, token transfer instructions).\n * Formatting that honest providers differ on (`uiAmount` floats, `stackHeight`, `owner` and\n * `programId` on balances, log messages, compute units, `blockTime`) is left out. The landing\n * guard (`decode.ts`) still requires `programId` on the transfer's balances: providers must\n * report it (current agave does), and through one that leaves it out no SPL verdict ever\n * decides, which costs liveness only.\n */\nfunction transactionKey(result: unknown): unknown {\n if (result === null) return null;\n const tx = record(result);\n if (!tx) throw malformed('getTransaction');\n const meta = record(tx.meta);\n const message = record(record(tx.transaction)?.message);\n const keys = Array.isArray(message?.accountKeys)\n ? message.accountKeys.map((key) => record(key)?.pubkey ?? key)\n : null;\n return {\n slot: tx.slot ?? null,\n err: canonicalJson(meta?.err ?? null),\n signatures: record(tx.transaction)?.signatures ?? null,\n accountKeys: keys,\n preTokenBalances: tokenBalances(meta?.preTokenBalances),\n postTokenBalances: tokenBalances(meta?.postTokenBalances),\n tokenInstructions: tokenInstructions(tx),\n };\n}\n\n/**\n * The consensus facts compared under a quorum, per method. A key that throws\n * counts as a disagreement (a retryable `PROVIDER_INCONSISTENT`).\n */\nexport function quorumKeyFor(method: string): ((result: unknown) => unknown) | undefined {\n switch (method) {\n case 'getBlock':\n return (result) => pick(result, BLOCK_FIELDS);\n case 'getTransaction':\n return transactionKey;\n default:\n return undefined;\n }\n}\n\n/**\n * One JSON-RPC call through the transport, under the calling driver method's tags. Solana\n * sends u64 values (lamports) as JSON numbers, so every answer is parsed with\n * `exactIntegers`: nothing above 2^53 − 1 is ever rounded.\n */\nexport function call(\n transport: Transport,\n method: string,\n params: readonly unknown[],\n tags: SolanaCallTags,\n): Promise<unknown> {\n const quorumKey =\n tags.quorum !== undefined ? (tags.quorumKey ?? quorumKeyFor(method)) : undefined;\n return transport.rpc(method, params, {\n ...tags,\n ...(quorumKey ? { quorumKey } : {}),\n exactIntegers: true,\n });\n}\n\n/** `getBlock` options for a header (no transactions, no rewards). */\nexport const headerOptions = (commitment: Commitment) => ({\n commitment,\n transactionDetails: 'none',\n rewards: false,\n});\n\n/** `getBlock`/`getTransaction` options for decoding (every transaction version we parse). */\nexport const parsedOptions = (commitment: Commitment) => ({\n commitment,\n encoding: 'jsonParsed',\n maxSupportedTransactionVersion: 0,\n});\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Well-known SPL tokens: USDC and USDT where their issuers list a Solana mint (Circle's
|
|
3
|
+
* USDC addresses page, Tether's supported-protocols page). All are classic Token program
|
|
4
|
+
* mints with 6 decimals, read from the chain (`getAccountInfo` on mainnet and devnet).
|
|
5
|
+
*/
|
|
6
|
+
import type { AssetRegistration } from '../../core/registry/assets';
|
|
7
|
+
export declare const SOLANA_TOKENS: readonly AssetRegistration[];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SOLANA_TOKENS = void 0;
|
|
4
|
+
const freeze_1 = require("../../core/util/freeze");
|
|
5
|
+
function token(network, symbol, mint) {
|
|
6
|
+
return {
|
|
7
|
+
chain: 'solana',
|
|
8
|
+
network,
|
|
9
|
+
ref: { standard: 'spl', contract: mint },
|
|
10
|
+
metadata: { symbol, decimals: 6 },
|
|
11
|
+
aliases: [symbol],
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
exports.SOLANA_TOKENS = (0, freeze_1.deepFreeze)([
|
|
15
|
+
token('mainnet', 'USDC', 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'),
|
|
16
|
+
token('mainnet', 'USDT', 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB'),
|
|
17
|
+
token('devnet', 'USDC', '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU'),
|
|
18
|
+
]);
|
|
19
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/adapters/solana/tokens.ts"],"names":[],"mappings":";;;AAMA,mDAAoD;AAEpD,SAAS,KAAK,CACZ,OAA6B,EAC7B,MAAuB,EACvB,IAAY;IAEZ,OAAO;QACL,KAAK,EAAE,QAAQ;QACf,OAAO;QACP,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;QACxC,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;QACjC,OAAO,EAAE,CAAC,MAAM,CAAC;KAClB,CAAC;AACJ,CAAC;AAEY,QAAA,aAAa,GAAiC,IAAA,mBAAU,EAAC;IACpE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,8CAA8C,CAAC;IACxE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,8CAA8C,CAAC;IACxE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,8CAA8C,CAAC;CACxE,CAAC,CAAC","sourcesContent":["/**\n * Well-known SPL tokens: USDC and USDT where their issuers list a Solana mint (Circle's\n * USDC addresses page, Tether's supported-protocols page). All are classic Token program\n * mints with 6 decimals, read from the chain (`getAccountInfo` on mainnet and devnet).\n */\nimport type { AssetRegistration } from '../../core/registry/assets';\nimport { deepFreeze } from '../../core/util/freeze';\n\nfunction token(\n network: 'mainnet' | 'devnet',\n symbol: 'USDC' | 'USDT',\n mint: string,\n): AssetRegistration {\n return {\n chain: 'solana',\n network,\n ref: { standard: 'spl', contract: mint },\n metadata: { symbol, decimals: 6 },\n aliases: [symbol],\n };\n}\n\nexport const SOLANA_TOKENS: readonly AssetRegistration[] = deepFreeze([\n token('mainnet', 'USDC', 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'),\n token('mainnet', 'USDT', 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB'),\n token('devnet', 'USDC', '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU'),\n]);\n"]}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK-free types of the Solana family: the `ext.solana` API, fee details and overrides, and
|
|
3
|
+
* the narrow `SolanaCodec` that the `@solana/web3.js` module implements. Nothing
|
|
4
|
+
* here imports an SDK, so the composition root can export these types.
|
|
5
|
+
*/
|
|
6
|
+
import type { DisposableNativeClient } from '../../core/driver/types';
|
|
7
|
+
import type { CallOptions } from '../../core/transport/types';
|
|
8
|
+
declare module '../../index' {
|
|
9
|
+
interface ChainRegistry {
|
|
10
|
+
solana: {
|
|
11
|
+
family: 'solana';
|
|
12
|
+
network: 'mainnet' | 'devnet' | 'testnet';
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
interface FamilyRegistry {
|
|
16
|
+
solana: {
|
|
17
|
+
library: '@solana/web3.js';
|
|
18
|
+
ext: SolanaExt;
|
|
19
|
+
fee: SolanaFeeDetails;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** One SPL token account (classic Token program) of an owner. */
|
|
24
|
+
export interface SolanaTokenAccount {
|
|
25
|
+
/** The token account's own address (an associated token account or any other). */
|
|
26
|
+
readonly address: string;
|
|
27
|
+
readonly mint: string;
|
|
28
|
+
/** Base units of the mint. */
|
|
29
|
+
readonly amount: bigint;
|
|
30
|
+
readonly frozen: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** `bc.ext.solana`: the Solana family extension. */
|
|
33
|
+
export interface SolanaExt {
|
|
34
|
+
readonly solana: {
|
|
35
|
+
/**
|
|
36
|
+
* The owner's classic SPL token accounts, optionally for one mint, at the `confirmed`
|
|
37
|
+
* commitment. Token-2022 accounts are not listed (Token-2022 is unsupported).
|
|
38
|
+
*/
|
|
39
|
+
getTokenAccounts(owner: string, mint?: string): Promise<readonly SolanaTokenAccount[]>;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* `FeeEstimate.details` of the `solana` fee kind (lamports; compute-unit price in
|
|
44
|
+
* micro-lamports). The charges are `network` (the signature fee), `priority`
|
|
45
|
+
* (`ceil(computeUnitPrice × computeUnitLimit / 1_000_000)`) and, when the recipient's
|
|
46
|
+
* associated token account is created, `rent`.
|
|
47
|
+
*/
|
|
48
|
+
export interface SolanaFeeDetails {
|
|
49
|
+
readonly signatures: number;
|
|
50
|
+
/** The signature fee the node quoted for the message (`getFeeForMessage` minus priority). */
|
|
51
|
+
readonly baseFee: bigint;
|
|
52
|
+
readonly computeUnitLimit: bigint;
|
|
53
|
+
/** Micro-lamports per compute unit. */
|
|
54
|
+
readonly computeUnitPrice: bigint;
|
|
55
|
+
readonly priorityFee: bigint;
|
|
56
|
+
/** The rent-exempt deposit of a created associated token account; `0n` otherwise. */
|
|
57
|
+
readonly rent: bigint;
|
|
58
|
+
/** Whether the transaction creates the recipient's associated token account. */
|
|
59
|
+
readonly createsRecipientAccount: boolean;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* An explicit Solana fee (`TransferIntent.fee`): the compute-unit price in micro-lamports
|
|
63
|
+
* (at most the handle's `maxComputeUnitPrice`) and, optionally, the compute-unit limit (1 to
|
|
64
|
+
* 1,400,000), which otherwise comes from a simulation of the transaction. A type alias, not
|
|
65
|
+
* an interface, so a value of this type is assignable to the core's `FeeOverride` record.
|
|
66
|
+
*/
|
|
67
|
+
export type SolanaFeeOverride = {
|
|
68
|
+
readonly computeUnitPrice: bigint;
|
|
69
|
+
readonly computeUnitLimit?: bigint;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* The transport tags every Solana I/O call carries: purpose, retry, quorum, fanout, signal,
|
|
73
|
+
* and optionally the caller's own `quorumKey`, which replaces the method's
|
|
74
|
+
* default consensus key.
|
|
75
|
+
*/
|
|
76
|
+
export type SolanaCallTags = Pick<CallOptions, 'purpose' | 'retry' | 'quorum' | 'quorumKey' | 'fanout' | 'signal'>;
|
|
77
|
+
export type Commitment = 'confirmed' | 'finalized';
|
|
78
|
+
/**
|
|
79
|
+
* The expiry ordering a Solana build records: the recent blockhash's
|
|
80
|
+
* `lastValidBlockHeight`, the blockhash itself and the slot of its block, all from one
|
|
81
|
+
* `getLatestBlockhash` answer, so one endpoint's word. A verdict rests on the height the
|
|
82
|
+
* proof quorum attests for `blockhash` instead: the finalized block at
|
|
83
|
+
* `blockhashSlot`, when it carries the blockhash, gives the last valid height as its own
|
|
84
|
+
* height plus 150 (agave's `MAX_PROCESSING_AGE`); otherwise the finalized block 150 below
|
|
85
|
+
* `lastValidHeight` must carry it. No endpoint proposes the height: trusting the recorded
|
|
86
|
+
* one would let an endpoint that reported it too low prove the transfer expired while it
|
|
87
|
+
* can still land, and `rebuild` would pay twice. For the same reason a store must keep
|
|
88
|
+
* this ordering whole and unmodified: a changed `blockhash` misplaces the window.
|
|
89
|
+
*/
|
|
90
|
+
export interface SolanaExpiryOrdering {
|
|
91
|
+
readonly kind: 'expiry';
|
|
92
|
+
readonly lastValidHeight: bigint;
|
|
93
|
+
/** The message's recent blockhash (base58). */
|
|
94
|
+
readonly blockhash: string;
|
|
95
|
+
/** The slot of the block whose hash `blockhash` is. */
|
|
96
|
+
readonly blockhashSlot: bigint;
|
|
97
|
+
}
|
|
98
|
+
/** One instruction of a transaction we build: program, accounts and data. */
|
|
99
|
+
export interface SolanaInstruction {
|
|
100
|
+
readonly programId: string;
|
|
101
|
+
readonly accounts: readonly {
|
|
102
|
+
readonly address: string;
|
|
103
|
+
readonly signer: boolean;
|
|
104
|
+
readonly writable: boolean;
|
|
105
|
+
}[];
|
|
106
|
+
readonly data: Uint8Array;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* The codec work the driver delegates to `@solana/web3.js`: program-derived addresses and
|
|
110
|
+
* legacy message compilation. Inputs are already-validated canonical base58 keys; outputs
|
|
111
|
+
* are plain bytes and strings, never SDK objects, since store records hold plain data
|
|
112
|
+
* only.
|
|
113
|
+
*/
|
|
114
|
+
export interface SolanaCodec {
|
|
115
|
+
/** The associated token account of `owner` for `mint` (classic Token program). */
|
|
116
|
+
associatedTokenAddress(owner: string, mint: string): string;
|
|
117
|
+
/** The legacy message bytes: header, account keys, recent blockhash, instructions. */
|
|
118
|
+
compileMessage(payer: string, recentBlockhash: string, instructions: readonly SolanaInstruction[]): Uint8Array;
|
|
119
|
+
/** A fresh `Connection` on the same transport, for `crypto-aio/native`. */
|
|
120
|
+
createNative(): DisposableNativeClient;
|
|
121
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/solana/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * SDK-free types of the Solana family: the `ext.solana` API, fee details and overrides, and\n * the narrow `SolanaCodec` that the `@solana/web3.js` module implements. Nothing\n * here imports an SDK, so the composition root can export these types.\n */\nimport type { DisposableNativeClient } from '../../core/driver/types';\nimport type { CallOptions } from '../../core/transport/types';\n\n// Augment the registries through the package entry, as users do with 'crypto-aio'.\ndeclare module '../../index' {\n interface ChainRegistry {\n solana: { family: 'solana'; network: 'mainnet' | 'devnet' | 'testnet' };\n }\n interface FamilyRegistry {\n solana: { library: '@solana/web3.js'; ext: SolanaExt; fee: SolanaFeeDetails };\n }\n}\n\n/** One SPL token account (classic Token program) of an owner. */\nexport interface SolanaTokenAccount {\n /** The token account's own address (an associated token account or any other). */\n readonly address: string;\n readonly mint: string;\n /** Base units of the mint. */\n readonly amount: bigint;\n readonly frozen: boolean;\n}\n\n/** `bc.ext.solana`: the Solana family extension. */\nexport interface SolanaExt {\n readonly solana: {\n /**\n * The owner's classic SPL token accounts, optionally for one mint, at the `confirmed`\n * commitment. Token-2022 accounts are not listed (Token-2022 is unsupported).\n */\n getTokenAccounts(\n owner: string,\n mint?: string,\n ): Promise<readonly SolanaTokenAccount[]>;\n };\n}\n\n/**\n * `FeeEstimate.details` of the `solana` fee kind (lamports; compute-unit price in\n * micro-lamports). The charges are `network` (the signature fee), `priority`\n * (`ceil(computeUnitPrice × computeUnitLimit / 1_000_000)`) and, when the recipient's\n * associated token account is created, `rent`.\n */\nexport interface SolanaFeeDetails {\n readonly signatures: number;\n /** The signature fee the node quoted for the message (`getFeeForMessage` minus priority). */\n readonly baseFee: bigint;\n readonly computeUnitLimit: bigint;\n /** Micro-lamports per compute unit. */\n readonly computeUnitPrice: bigint;\n readonly priorityFee: bigint;\n /** The rent-exempt deposit of a created associated token account; `0n` otherwise. */\n readonly rent: bigint;\n /** Whether the transaction creates the recipient's associated token account. */\n readonly createsRecipientAccount: boolean;\n}\n\n/**\n * An explicit Solana fee (`TransferIntent.fee`): the compute-unit price in micro-lamports\n * (at most the handle's `maxComputeUnitPrice`) and, optionally, the compute-unit limit (1 to\n * 1,400,000), which otherwise comes from a simulation of the transaction. A type alias, not\n * an interface, so a value of this type is assignable to the core's `FeeOverride` record.\n */\nexport type SolanaFeeOverride = {\n readonly computeUnitPrice: bigint;\n readonly computeUnitLimit?: bigint;\n};\n\n/**\n * The transport tags every Solana I/O call carries: purpose, retry, quorum, fanout, signal,\n * and optionally the caller's own `quorumKey`, which replaces the method's\n * default consensus key.\n */\nexport type SolanaCallTags = Pick<\n CallOptions,\n 'purpose' | 'retry' | 'quorum' | 'quorumKey' | 'fanout' | 'signal'\n>;\n\nexport type Commitment = 'confirmed' | 'finalized';\n\n/**\n * The expiry ordering a Solana build records: the recent blockhash's\n * `lastValidBlockHeight`, the blockhash itself and the slot of its block, all from one\n * `getLatestBlockhash` answer, so one endpoint's word. A verdict rests on the height the\n * proof quorum attests for `blockhash` instead: the finalized block at\n * `blockhashSlot`, when it carries the blockhash, gives the last valid height as its own\n * height plus 150 (agave's `MAX_PROCESSING_AGE`); otherwise the finalized block 150 below\n * `lastValidHeight` must carry it. No endpoint proposes the height: trusting the recorded\n * one would let an endpoint that reported it too low prove the transfer expired while it\n * can still land, and `rebuild` would pay twice. For the same reason a store must keep\n * this ordering whole and unmodified: a changed `blockhash` misplaces the window.\n */\nexport interface SolanaExpiryOrdering {\n readonly kind: 'expiry';\n readonly lastValidHeight: bigint;\n /** The message's recent blockhash (base58). */\n readonly blockhash: string;\n /** The slot of the block whose hash `blockhash` is. */\n readonly blockhashSlot: bigint;\n}\n\n/** One instruction of a transaction we build: program, accounts and data. */\nexport interface SolanaInstruction {\n readonly programId: string;\n readonly accounts: readonly {\n readonly address: string;\n readonly signer: boolean;\n readonly writable: boolean;\n }[];\n readonly data: Uint8Array;\n}\n\n/**\n * The codec work the driver delegates to `@solana/web3.js`: program-derived addresses and\n * legacy message compilation. Inputs are already-validated canonical base58 keys; outputs\n * are plain bytes and strings, never SDK objects, since store records hold plain data\n * only.\n */\nexport interface SolanaCodec {\n /** The associated token account of `owner` for `mint` (classic Token program). */\n associatedTokenAddress(owner: string, mint: string): string;\n /** The legacy message bytes: header, account keys, recent blockhash, instructions. */\n compileMessage(\n payer: string,\n recentBlockhash: string,\n instructions: readonly SolanaInstruction[],\n ): Uint8Array;\n /** A fresh `Connection` on the same transport, for `crypto-aio/native`. */\n createNative(): DisposableNativeClient;\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type Transport } from '../../core/transport/types';
|
|
2
|
+
import type { SolanaCodec } from './types';
|
|
3
|
+
export declare function createWeb3Codec(transport: Transport): SolanaCodec;
|
|
4
|
+
/** The `@solana/web3.js` adapter's driver factory; the manifest's `load()` returns it. */
|
|
5
|
+
export declare const web3DriverFactory: import("../..").DriverFactory;
|