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 @@
|
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/adapters/solana/builder.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Solana transfers: SystemProgram and SPL `transferChecked`, with\n * `createAssociatedTokenAccountIdempotent` when the recipient's token account is missing,\n * an optional Memo, and compute-budget instructions. Expiry ordering: the recent blockhash's\n * `lastValidBlockHeight` is the Attempt's ordering, recorded with the blockhash and the slot\n * of its block (`SolanaExpiryOrdering`) so proofs can attest the height before a\n * verdict rests on it. One `ed25519` signing request per required signer, over the\n * message; the Attempt ref is the first signature (canonical).\n *\n * Nothing is signed before the compiled bytes are read back, SDK-free (`wire.ts`): one legacy\n * message whose only signer is the sender, on our blockhash, with exactly our instructions,\n * whose transfer pays the intent's recipient (the landing guard in `decode.ts` trusts it).\n * No transaction over the 1,232-byte packet limit is simulated, quoted, signed or sent.\n */\nimport type {\n BroadcastResult,\n Broadcaster,\n TxBuilder,\n WalletKey,\n} from '../../core/driver/types';\nimport {\n SigningError,\n ValidationError,\n type CryptoAioError,\n} from '../../core/errors/error';\nimport { assetId } from '../../core/model/asset';\nimport { isFeeSpeed, type FeeSpeed } from '../../core/model/fee';\nimport type { DriverIntent, DriverOutput } from '../../core/model/intent';\nimport type { RawTx, SignedTx, UnsignedTx } from '../../core/model/transaction';\nimport { equalBytes } from '../../core/util/bytes';\nimport { classifyOwnBroadcast } from './errors';\nimport {\n aboveMaxPrice,\n computeUnitLimitFor,\n fallbackComputeUnitLimit,\n feeDraft,\n lamportsCharged,\n parseOverride,\n priceForSpeed,\n priorityFee,\n signedFee,\n speedPrice,\n variantOffsets,\n} from './fees';\nimport { addressFromPublicKey, decodeBase58, encodeBase58 } from './keys';\nimport {\n MAX_COMPUTE_UNIT_LIMIT,\n MAX_MEMO_BYTES,\n MAX_TRANSACTION_SIZE,\n SYSTEM_PROGRAM,\n TOKEN_2022_PROGRAM,\n TOKEN_ACCOUNT_SIZE,\n TOKEN_PROGRAM,\n createAssociatedTokenAccountIdempotent,\n decodeTokenAccount,\n memo,\n setComputeUnitLimit,\n setComputeUnitPrice,\n systemTransfer,\n transferChecked,\n} from './programs';\nimport {\n METADATA,\n accountInfo,\n mintDecimals,\n mintOf,\n type SolanaContext,\n} from './reader';\nimport {\n BROADCAST,\n READ,\n call,\n contextValue,\n malformed,\n notYet,\n record,\n rpcCode,\n rpcMessage,\n u64,\n withSignal,\n} from './rpc';\nimport type {\n SolanaCallTags,\n SolanaExpiryOrdering,\n SolanaFeeDetails,\n SolanaInstruction,\n} from './types';\nimport { parseMessage, signedTransaction, type MessageParts } from './wire';\n\nconst invalid = (reason: string) => new ValidationError('INVALID_INTENT', reason);\n/** A UTF-16 surrogate without its pair: text that has no UTF-8 encoding. */\nconst LONE_SURROGATE =\n /[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?<![\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]/;\nconst U64_MAX = 2n ** 64n - 1n;\nconst SIGNATURE_BYTES = 64;\n/** The longest text of a packet-sized transaction: 1,644 base64 characters, 2,464 hex. */\nconst MAX_BASE64_CHARS = 4 * Math.ceil(MAX_TRANSACTION_SIZE / 3);\nconst MAX_HEX_CHARS = 2 * MAX_TRANSACTION_SIZE;\nconst TOO_LARGE = `the transaction exceeds ${MAX_TRANSACTION_SIZE} bytes`;\n/** Every node refuses a transaction over the packet limit; it is refused here, unsent. */\nconst REFUSED_TOO_LARGE: BroadcastResult = Object.freeze({\n kind: 'refused',\n code: 'TX_REFUSED',\n reason: 'transaction too large',\n});\n\n/** What a transfer needs on chain, resolved once per estimate. */\ninterface TransferPlan {\n readonly from: string;\n readonly to: string;\n readonly amount: bigint;\n readonly memo?: string;\n readonly token?: {\n readonly mint: string;\n readonly decimals: number;\n readonly source: string;\n readonly destination: string;\n };\n readonly createsRecipientAccount: boolean;\n}\n\nfunction onlyOutput(intent: DriverIntent): DriverOutput {\n const output = intent.outputs[0];\n if (!output || intent.outputs.length !== 1) {\n throw invalid('Solana transfers have exactly one output');\n }\n return output;\n}\n\nconst addressOf = (publicKey: Uint8Array): string | null => {\n try {\n return addressFromPublicKey(publicKey);\n } catch {\n return null;\n }\n};\n\n/** The wallet's ed25519 key whose address is the sending address. */\nfunction keyOf(from: string, keys: readonly WalletKey[]): WalletKey {\n const key = keys.find((k) => k.scheme === 'ed25519' && addressOf(k.publicKey) === from);\n if (!key) {\n throw new SigningError(\n 'SIGNER_UNAVAILABLE',\n 'no ed25519 key for the sending address',\n );\n }\n return key;\n}\n\n/** At most 256 UTF-8 bytes of well-formed text (the intent's policy, not `memo()`'s). */\nfunction memoOf(text: string | undefined): string | undefined {\n if (text === undefined) return undefined;\n if (LONE_SURROGATE.test(text))\n throw invalid('the memo is not well-formed Unicode text');\n if (new TextEncoder().encode(text).length > MAX_MEMO_BYTES) {\n throw invalid(`the memo exceeds ${MAX_MEMO_BYTES} UTF-8 bytes`);\n }\n return text;\n}\n\nasync function rentExemptMinimum(\n ctx: SolanaContext,\n bytes: number,\n tags: SolanaCallTags,\n): Promise<bigint> {\n return u64(\n await call(\n ctx.transport,\n 'getMinimumBalanceForRentExemption',\n [bytes, { commitment: 'confirmed' }],\n tags,\n ),\n 'getMinimumBalanceForRentExemption',\n );\n}\n\n/**\n * The classic token account of `owner` for `mint` at its associated address, or `null`\n * while that account is not created. An address that only holds lamports is not created\n * yet: the ATA program keeps those lamports when it creates the account, so nobody can\n * block a transfer by funding the address first. Anything else there is not the owner's\n * account for the mint (a reassigned owner included), and is refused.\n */\nasync function associatedAccount(\n ctx: SolanaContext,\n address: string,\n owner: string,\n mint: string,\n whose: 'source' | 'recipient',\n tags: SolanaCallTags,\n): Promise<{ readonly amount: bigint; readonly frozen: boolean } | null> {\n const info = await accountInfo(ctx, address, tags);\n if (\n !info ||\n (info.owner === SYSTEM_PROGRAM && !info.executable && info.data.length === 0)\n ) {\n return null;\n }\n const account = info.owner === TOKEN_PROGRAM ? decodeTokenAccount(info.data) : null;\n if (\n !account ||\n encodeBase58(account.owner) !== owner ||\n encodeBase58(account.mint) !== mint\n ) {\n throw invalid(`the ${whose} token account does not match`);\n }\n return { amount: account.amount, frozen: account.frozen };\n}\n\n/**\n * Where a transfer pays the recipient `to` (the binding the landing guard trusts): SOL to\n * `to` itself; SPL into `to`'s associated token account for the mint, derived with the\n * mint's own program, classic Token (`mintDecimals` refuses every other owner).\n */\nconst destinationOf = (ctx: SolanaContext, to: string, mint: string | undefined) =>\n mint === undefined ? to : ctx.codec.associatedTokenAddress(to, mint);\n\nfunction tokenPlan(\n ctx: SolanaContext,\n from: string,\n to: string,\n mint: string,\n decimals: number,\n): NonNullable<TransferPlan['token']> {\n return {\n mint,\n decimals,\n source: ctx.codec.associatedTokenAddress(from, mint),\n destination: destinationOf(ctx, to, mint),\n };\n}\n\n/** The one output and the recipient's on-chain checks (no key: a fee needs none). */\nasync function planTransfer(\n ctx: SolanaContext,\n intent: DriverIntent,\n tags: SolanaCallTags,\n): Promise<TransferPlan> {\n const output = onlyOutput(intent);\n const { from } = intent;\n const text = memoOf(intent.memo);\n const base = {\n from,\n to: output.to,\n amount: output.amount,\n ...(text !== undefined ? { memo: text } : {}),\n };\n const recipient = output.to === from ? null : await accountInfo(ctx, output.to, tags);\n if (intent.asset === 'native') {\n if (recipient && (recipient.executable || recipient.owner !== SYSTEM_PROGRAM)) {\n throw invalid('the recipient is a program-owned account');\n }\n if (\n !recipient &&\n output.to !== from &&\n output.amount < (await rentExemptMinimum(ctx, 0, tags))\n ) {\n throw new ValidationError(\n 'INVALID_AMOUNT',\n 'a new account needs at least the rent-exempt minimum',\n );\n }\n return { ...base, createsRecipientAccount: false };\n }\n const mint = mintOf(intent.asset);\n // Token metadata under the proof quorum, with the caller's signal: the decimals are\n // signed into `transferChecked`, so a lagging endpoint without the mint decides\n // nothing.\n const decimals = await mintDecimals(ctx, mint, withSignal(METADATA, tags.signal));\n // Nobody can sign for a program's associated token account.\n if (recipient?.executable) {\n throw invalid('the recipient is a program; send to a wallet or a PDA owner');\n }\n if (\n recipient &&\n (recipient.owner === TOKEN_PROGRAM || recipient.owner === TOKEN_2022_PROGRAM)\n ) {\n throw invalid('the recipient is a token account; send to its owner');\n }\n const token = tokenPlan(ctx, from, output.to, mint, decimals);\n const existing = await associatedAccount(\n ctx,\n token.destination,\n output.to,\n mint,\n 'recipient',\n tags,\n );\n if (existing?.frozen) throw invalid('the recipient token account is frozen');\n return { ...base, token, createsRecipientAccount: existing === null };\n}\n\n/** The transfer's own instructions (no compute budget). */\nfunction transferInstructions(plan: TransferPlan): SolanaInstruction[] {\n const list: SolanaInstruction[] = [];\n const { token } = plan;\n if (token) {\n if (plan.createsRecipientAccount) {\n list.push(\n createAssociatedTokenAccountIdempotent(\n plan.from,\n token.destination,\n plan.to,\n token.mint,\n ),\n );\n }\n list.push(\n transferChecked(\n token.source,\n token.mint,\n token.destination,\n plan.from,\n plan.amount,\n token.decimals,\n ),\n );\n } else {\n list.push(systemTransfer(plan.from, plan.to, plan.amount));\n }\n if (plan.memo !== undefined) list.push(memo(plan.memo));\n return list;\n}\n\nconst withBudget = (limit: bigint, price: bigint, list: readonly SolanaInstruction[]) => [\n setComputeUnitLimit(limit),\n setComputeUnitPrice(price),\n ...list,\n];\n\n/**\n * The newest blockhash at `confirmed`, its last valid height, and the slot of its block:\n * agave answers from one bank (`rpc.rs` `get_latest_blockhash`: the bank's last blockhash,\n * that blockhash's last valid height, and `new_response`'s context slot, the bank's own).\n * One endpoint's word: proofs attest the three together before using the height.\n */\nasync function latestBlockhash(\n ctx: SolanaContext,\n tags: SolanaCallTags,\n): Promise<{\n readonly blockhash: string;\n readonly lastValidBlockHeight: bigint;\n readonly slot: bigint;\n}> {\n const result = await call(\n ctx.transport,\n 'getLatestBlockhash',\n [{ commitment: 'confirmed' }],\n tags,\n );\n const value = contextValue(result, 'getLatestBlockhash') as {\n blockhash?: unknown;\n lastValidBlockHeight?: unknown;\n } | null;\n if (!value || decodeBase58(value.blockhash, 32) === null) {\n throw malformed('getLatestBlockhash');\n }\n return {\n blockhash: value.blockhash as string,\n lastValidBlockHeight: u64(value.lastValidBlockHeight, 'lastValidBlockHeight'),\n slot: u64(record(record(result)?.context)?.slot, 'getLatestBlockhash context slot'),\n };\n}\n\nconst base64 = (bytes: Uint8Array): string => Buffer.from(bytes).toString('base64');\n\n/** Whether `bytes` (a key read from a message) is the key `address`. */\nfunction isKey(bytes: Uint8Array | undefined, address: string): boolean {\n const expected = decodeBase58(address, 32);\n return bytes !== undefined && expected !== null && equalBytes(bytes, expected);\n}\n\n/** The transaction with a zero signature for each required signer. */\nconst withPlaceholders = (parts: MessageParts, message: Uint8Array): Uint8Array =>\n signedTransaction(\n Array.from({ length: parts.required }, () => new Uint8Array(SIGNATURE_BYTES)),\n message,\n );\n\n/**\n * A compiled message read back from its bytes before it is simulated, quoted or signed: one\n * legacy message (a `null` from the reader is a refusal, never \"no signers needed\") whose\n * only signer is `from`, the fee payer, and whose transaction fits the packet limit.\n */\nfunction readBack(message: Uint8Array, from: string): MessageParts {\n const parts = parseMessage(message);\n if (!parts) throw invalid('the compiled message is not one legacy message');\n if (parts.required !== 1 || !isKey(parts.keys[0], from)) {\n throw invalid('the compiled message has unexpected signers');\n }\n if (withPlaceholders(parts, message).length > MAX_TRANSACTION_SIZE) {\n throw invalid(TOO_LARGE);\n }\n return parts;\n}\n\nconst isWritable = (parts: MessageParts, index: number): boolean =>\n index < parts.required\n ? index < parts.required - parts.readonlySigned\n : index < parts.keys.length - parts.readonlyUnsigned;\n\n/** A little-endian u64 of `data` at `at`, or `null` when the data is too short. */\nconst u64At = (data: Uint8Array, at: number): bigint | null =>\n data.length < at + 8\n ? null\n : new DataView(data.buffer, data.byteOffset + at, 8).getBigUint64(0, true);\n\n/**\n * The recipient binding the landing guard trusts, read from the bytes and re-derived from\n * the intent alone: exactly one transfer (System `Transfer`, or Token `TransferChecked`)\n * moves the intent's amount into `destinationOf` the intent's recipient. The sender is\n * bound by `readBack`: it is the message's only signer.\n */\nfunction checkRecipient(\n ctx: SolanaContext,\n parts: MessageParts,\n output: DriverOutput,\n mint: string | undefined,\n): void {\n const program = mint === undefined ? SYSTEM_PROGRAM : TOKEN_PROGRAM;\n // The destination's position and the amount's offset: System [from, to], data\n // [u32 2, u64 lamports]; Token [source, mint, destination, authority], data\n // [12, u64 amount, u8 decimals].\n const [destination, amountAt] = mint === undefined ? [1, 4] : [2, 1];\n const transfers = parts.instructions.filter((ix) =>\n isKey(parts.keys[ix.program], program),\n );\n const transfer = transfers[0];\n if (\n transfers.length !== 1 ||\n !transfer ||\n !isKey(\n parts.keys[transfer.accounts[destination] as number],\n destinationOf(ctx, output.to, mint),\n ) ||\n u64At(transfer.data, amountAt) !== output.amount\n ) {\n throw invalid('the transfer does not pay the recipient');\n }\n}\n\n/**\n * The bytes carry exactly `list` on `blockhash`: each instruction's program, accounts and\n * data, and no other instruction. An account the list writes must be writable (the message\n * merges flags per key); its signers are `readBack`'s.\n */\nfunction checkInstructions(\n parts: MessageParts,\n blockhash: string,\n list: readonly SolanaInstruction[],\n): void {\n const mismatch = () => invalid('the compiled message does not match the transfer');\n if (!isKey(parts.blockhash, blockhash) || parts.instructions.length !== list.length) {\n throw mismatch();\n }\n list.forEach((expected, i) => {\n const found = parts.instructions[i];\n if (\n !found ||\n !isKey(parts.keys[found.program], expected.programId) ||\n found.accounts.length !== expected.accounts.length ||\n !equalBytes(found.data, expected.data)\n ) {\n throw mismatch();\n }\n expected.accounts.forEach((account, j) => {\n const index = found.accounts[j] as number;\n if (\n !isKey(parts.keys[index], account.address) ||\n (account.writable && !isWritable(parts, index))\n ) {\n throw mismatch();\n }\n });\n });\n}\n\n/** The simulated compute units of the transfer, or `null` when it cannot be measured. */\nasync function simulatedUnits(\n ctx: SolanaContext,\n from: string,\n price: bigint,\n list: readonly SolanaInstruction[],\n blockhash: string,\n tags: SolanaCallTags,\n): Promise<bigint | null> {\n const message = ctx.codec.compileMessage(\n from,\n blockhash,\n withBudget(MAX_COMPUTE_UNIT_LIMIT, price, list),\n );\n const unsignedTx = withPlaceholders(readBack(message, from), message);\n const value = contextValue(\n await call(\n ctx.transport,\n 'simulateTransaction',\n [\n base64(unsignedTx),\n {\n encoding: 'base64',\n sigVerify: false,\n replaceRecentBlockhash: true,\n commitment: 'confirmed',\n },\n ],\n tags,\n ),\n 'simulateTransaction',\n ) as { err?: unknown; unitsConsumed?: unknown } | null;\n if (!value) throw malformed('simulateTransaction');\n // A failing simulation (e.g. insufficient funds) still lets `checkFunds` explain itself.\n if (value.err !== null || value.unitsConsumed === undefined) return null;\n return u64(value.unitsConsumed, 'unitsConsumed');\n}\n\n/**\n * The base64 wire bytes of a signed transaction, or `null` when they exceed the packet\n * limit. The text is capped before it is decoded, and only a canonical text is\n * read: `Buffer` skips what it cannot decode, and a truncated transaction is never sent.\n */\nfunction wirePayload(raw: RawTx): string | null {\n const { encoding, data } = raw;\n if (encoding === 'json') throw invalid('a Solana transaction is bytes (base64 or hex)');\n if (typeof data !== 'string') throw invalid('a Solana transaction is a text of bytes');\n if (data.length > (encoding === 'hex' ? MAX_HEX_CHARS : MAX_BASE64_CHARS)) return null;\n const bytes = Buffer.from(data, encoding);\n const canonical =\n encoding === 'hex'\n ? bytes.toString('hex') === data.toLowerCase()\n : bytes.toString('base64') === data;\n if (!canonical) throw invalid(`the transaction is not canonical ${encoding}`);\n return bytes.length > MAX_TRANSACTION_SIZE ? null : bytes.toString('base64');\n}\n\nexport function createSolanaBuilder(ctx: SolanaContext): TxBuilder {\n return {\n async estimateFee(intent, build) {\n const tags = withSignal(READ, build.signal);\n // The handle's bound, which no endpoint can raise. An explicit price above it is\n // refused before any request; a speed's is clamped below it.\n const bound = ctx.config.maxComputeUnitPrice;\n const override = isFeeSpeed(intent.fee) ? undefined : parseOverride(intent.fee);\n if (override && override.computeUnitPrice > bound) {\n throw aboveMaxPrice(override.computeUnitPrice, bound);\n }\n const plan = await planTransfer(ctx, intent, tags);\n const list = transferInstructions(plan);\n const variant = variantOffsets(ctx.nextVariant());\n let price: bigint;\n if (override) {\n price = override.computeUnitPrice;\n } else {\n const writable = plan.token\n ? [plan.from, plan.token.source, plan.token.destination]\n : [plan.from, plan.to];\n const recent = await call(\n ctx.transport,\n 'getRecentPrioritizationFees',\n [writable],\n tags,\n );\n price = speedPrice(\n priceForSpeed(recent, intent.fee as FeeSpeed),\n variant.price,\n bound,\n );\n }\n const { blockhash } = await latestBlockhash(ctx, tags);\n let base = override?.computeUnitLimit;\n if (base === undefined) {\n const units = await simulatedUnits(ctx, plan.from, price, list, blockhash, tags);\n base =\n units === null\n ? fallbackComputeUnitLimit(list.length)\n : computeUnitLimitFor(units);\n }\n // Every build varies the limit, an explicit one included, so identical transfers\n // sign different bytes (the price of an explicit fee is kept exactly). At the\n // protocol maximum no variant fits, and only the core's guard against two\n // Operations sharing one Attempt ref keeps them apart.\n const limit =\n base + variant.limit > MAX_COMPUTE_UNIT_LIMIT\n ? MAX_COMPUTE_UNIT_LIMIT\n : base + variant.limit;\n // A fee is a u64 of lamports. An explicit price without one is the\n // caller's; a node's recent prices or quote without one decide nothing (retryable).\n const unpriced = (what: string) =>\n override\n ? invalid('Solana fee override: the fee does not fit in u64')\n : malformed(what);\n const priority = priorityFee(price, limit);\n if (priority > U64_MAX) throw unpriced('getRecentPrioritizationFees');\n const message = ctx.codec.compileMessage(\n plan.from,\n blockhash,\n withBudget(limit, price, list),\n );\n readBack(message, plan.from);\n const quoted = contextValue(\n await call(\n ctx.transport,\n 'getFeeForMessage',\n [base64(message), { commitment: 'confirmed' }],\n tags,\n ),\n 'getFeeForMessage',\n );\n // `null`: the endpoint does not know the blockhash yet.\n if (quoted === null) throw notYet('the fee of the message');\n const total = u64(quoted, 'getFeeForMessage');\n // agave's fee arithmetic saturates: a quote of u64::MAX is no fee.\n if (total === U64_MAX) throw unpriced('getFeeForMessage');\n if (total < priority) throw malformed('getFeeForMessage');\n const details: SolanaFeeDetails = {\n signatures: 1,\n baseFee: total - priority,\n computeUnitLimit: limit,\n computeUnitPrice: price,\n priorityFee: priority,\n rent: plan.createsRecipientAccount\n ? await rentExemptMinimum(ctx, TOKEN_ACCOUNT_SIZE, tags)\n : 0n,\n createsRecipientAccount: plan.createsRecipientAccount,\n };\n return feeDraft(override ? 'custom' : (intent.fee as FeeSpeed), details);\n },\n\n async checkFunds(intent, fee, build) {\n const output = onlyOutput(intent);\n const tags = withSignal(READ, build.signal);\n const balance = u64(\n contextValue(\n await call(\n ctx.transport,\n 'getBalance',\n [intent.from, { commitment: 'confirmed' }],\n tags,\n ),\n 'getBalance',\n ),\n 'balance',\n );\n if (intent.asset !== 'native') {\n const mint = mintOf(intent.asset);\n const source = await associatedAccount(\n ctx,\n ctx.codec.associatedTokenAddress(intent.from, mint),\n intent.from,\n mint,\n 'source',\n tags,\n );\n if (source?.frozen) throw invalid('the source token account is frozen');\n const available = source?.amount ?? 0n;\n if (available < output.amount) {\n return { ok: false, asset: intent.asset, required: output.amount, available };\n }\n }\n // A system account may end at 0 or at the rent-exempt minimum, nothing in between.\n const spent =\n lamportsCharged(fee) + (intent.asset === 'native' ? output.amount : 0n);\n const minimum = await rentExemptMinimum(ctx, 0, tags);\n if (balance < spent) {\n return { ok: false, asset: 'native', required: spent, available: balance };\n }\n const left = balance - spent;\n if (left !== 0n && left < minimum) {\n return {\n ok: false,\n asset: 'native',\n required: spent + minimum,\n available: balance,\n };\n }\n return { ok: true };\n },\n\n async build(intent, fee, build) {\n const output = onlyOutput(intent);\n const details = signedFee(fee, ctx.config.maxComputeUnitPrice);\n const key = keyOf(intent.from, build.keys);\n const text = memoOf(intent.memo);\n const tags = withSignal(READ, build.signal);\n const mint = intent.asset === 'native' ? undefined : mintOf(intent.asset);\n const plan: TransferPlan = {\n from: intent.from,\n to: output.to,\n amount: output.amount,\n ...(text !== undefined ? { memo: text } : {}),\n createsRecipientAccount: details.createsRecipientAccount,\n ...(mint === undefined\n ? {}\n : {\n token: tokenPlan(\n ctx,\n intent.from,\n output.to,\n mint,\n await mintDecimals(ctx, mint, withSignal(METADATA, build.signal)),\n ),\n }),\n };\n const list = withBudget(\n details.computeUnitLimit,\n details.computeUnitPrice,\n transferInstructions(plan),\n );\n const { blockhash, lastValidBlockHeight, slot } = await latestBlockhash(ctx, tags);\n // The payload, the signing request and the ordering all come from this one message,\n // read back before it is offered for signing.\n const message = ctx.codec.compileMessage(plan.from, blockhash, list);\n const parts = readBack(message, plan.from);\n checkRecipient(ctx, parts, output, mint);\n checkInstructions(parts, blockhash, list);\n // The height, with the blockhash and slot that let a proof attest it.\n const ordering: SolanaExpiryOrdering = {\n kind: 'expiry',\n lastValidHeight: lastValidBlockHeight,\n blockhash,\n blockhashSlot: slot,\n };\n const unsigned: UnsignedTx = {\n payload: { encoding: 'base64', data: base64(message) },\n signingRequests: [\n {\n id: 's0',\n scheme: 'ed25519',\n payload: message,\n payloadKind: 'message',\n publicKey: key.publicKey,\n ...(key.keyRef ? { keyRef: key.keyRef } : {}),\n },\n ],\n ordering,\n fee,\n summary: {\n asset: assetId(ctx.chain.id, ctx.network.id, intent.asset),\n outputs: [{ to: output.to, amount: output.amount.toString() }],\n ...(text !== undefined ? { memo: text } : {}),\n },\n };\n return unsigned;\n },\n\n async assemble(unsigned, signatures): Promise<SignedTx> {\n const failed = (reason: string) => new SigningError('SIGNING_FAILED', reason);\n const mismatch = () => failed('the message and its signing requests do not match');\n const { encoding, data } = unsigned.payload;\n if (encoding !== 'base64') throw failed('not a Solana message');\n const message = new Uint8Array(Buffer.from(data, 'base64'));\n if (base64(message) !== data) throw failed('not a Solana message');\n // A `null` is a refusal, never \"no signers needed\": one request per required signer.\n const parts = parseMessage(message);\n if (!parts || parts.required !== unsigned.signingRequests.length) throw mismatch();\n // The core stores this `ordering` as the Attempt's, and the expiry proof reads its\n // blockhash as the message's. A changed one between build and signing would\n // misplace the window.\n const ordering = unsigned.ordering as Partial<SolanaExpiryOrdering>;\n if (\n ordering.kind !== 'expiry' ||\n typeof ordering.blockhash !== 'string' ||\n !isKey(parts.blockhash, ordering.blockhash) ||\n typeof ordering.lastValidHeight !== 'bigint' ||\n typeof ordering.blockhashSlot !== 'bigint'\n ) {\n throw failed(\"the Attempt's ordering does not match the signed message\");\n }\n const bytes = unsigned.signingRequests.map((request, i) => {\n if (\n request.scheme !== 'ed25519' ||\n request.payloadKind !== 'message' ||\n !equalBytes(request.publicKey, parts.keys[i] as Uint8Array) ||\n !equalBytes(request.payload, message)\n ) {\n throw mismatch();\n }\n const signature = signatures.find((s) => s.requestId === request.id);\n if (!signature || signature.bytes.length !== SIGNATURE_BYTES) {\n throw failed(`missing signature for request ${request.id}`);\n }\n return signature.bytes;\n });\n const raw = signedTransaction(bytes, message);\n if (raw.length > MAX_TRANSACTION_SIZE) throw failed(TOO_LARGE);\n return {\n raw: { encoding: 'base64', data: base64(raw) },\n ref: {\n id: encodeBase58(bytes[0] as Uint8Array),\n idKind: 'signature',\n canonical: true,\n },\n };\n },\n };\n}\n\nexport function createSolanaBroadcaster(ctx: SolanaContext): Broadcaster {\n return {\n async broadcast(signed, options = {}) {\n const payload = wirePayload(signed.raw);\n if (payload === null) return REFUSED_TOO_LARGE;\n try {\n await call(\n ctx.transport,\n 'sendTransaction',\n [payload, { encoding: 'base64', preflightCommitment: 'confirmed' }],\n {\n ...withSignal(BROADCAST, options.signal),\n ...(options.fanout !== undefined ? { fanout: options.fanout } : {}),\n },\n );\n return { kind: 'accepted' };\n } catch (error) {\n // Only a definitive, non-ambiguous node answer is classified: by its code, then\n // its structured data (a preflight failure's simulation result), then its\n // anchored text. Anything else may have been sent: rethrown unchanged. A claimed\n // bad signature stands only when these bytes carry one.\n const code = rpcCode(error);\n if (code === undefined) throw error;\n const failure = error as CryptoAioError;\n return classifyOwnBroadcast(\n Buffer.from(payload, 'base64'),\n code,\n rpcMessage(failure),\n failure.details?.rpcData,\n );\n }\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The built-in Solana chain and its clusters. Every value is verified against a live node
|
|
3
|
+
* (`getGenesisHash` on each cluster's public endpoint) or a published source, or is a
|
|
4
|
+
* documented library policy:
|
|
5
|
+
* - `identity`: the cluster's genesis hash (`getGenesisHash`), checked on every endpoint.
|
|
6
|
+
* - `finality`: the `finalized` commitment.
|
|
7
|
+
* - `defaultConfirmations: 1`: `waitForConfirmation` waits for inclusion at `confirmed` by
|
|
8
|
+
* default; credit deposits on `final`.
|
|
9
|
+
* - `reorgWindow: 64` and `maxLagBlocks: 150`: library policies in block heights (a
|
|
10
|
+
* blockhash is valid for 150 blocks, so an endpoint further behind cannot judge expiry).
|
|
11
|
+
*/
|
|
12
|
+
import type { ChainInfo } from '../../core/model/chain';
|
|
13
|
+
export declare const SOLANA_CHAIN: ChainInfo;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SOLANA_CHAIN = void 0;
|
|
4
|
+
const freeze_1 = require("../../core/util/freeze");
|
|
5
|
+
const EXPLORER = 'https://explorer.solana.com';
|
|
6
|
+
function cluster(id, genesisHash, explorerCluster) {
|
|
7
|
+
const query = explorerCluster ? `?cluster=${explorerCluster}` : '';
|
|
8
|
+
return {
|
|
9
|
+
id,
|
|
10
|
+
identity: genesisHash,
|
|
11
|
+
testnet: id !== 'mainnet',
|
|
12
|
+
feeModel: 'solana',
|
|
13
|
+
finality: { kind: 'commitment', level: 'finalized' },
|
|
14
|
+
defaultConfirmations: 1,
|
|
15
|
+
reorgWindow: 64,
|
|
16
|
+
maxLagBlocks: 150,
|
|
17
|
+
explorer: {
|
|
18
|
+
tx: `${EXPLORER}/tx/{id}${query}`,
|
|
19
|
+
address: `${EXPLORER}/address/{address}${query}`,
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
exports.SOLANA_CHAIN = (0, freeze_1.deepFreeze)({
|
|
24
|
+
id: 'solana',
|
|
25
|
+
family: 'solana',
|
|
26
|
+
model: 'account',
|
|
27
|
+
ordering: 'expiry',
|
|
28
|
+
schemes: ['ed25519'],
|
|
29
|
+
nativeAsset: { symbol: 'SOL', decimals: 9, name: 'Solana' },
|
|
30
|
+
defaultNetwork: 'mainnet',
|
|
31
|
+
networks: {
|
|
32
|
+
mainnet: cluster('mainnet', '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d'),
|
|
33
|
+
devnet: cluster('devnet', 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG', 'devnet'),
|
|
34
|
+
testnet: cluster('testnet', '4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY', 'testnet'),
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=chains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../src/adapters/solana/chains.ts"],"names":[],"mappings":";;;AAYA,mDAAoD;AAEpD,MAAM,QAAQ,GAAG,6BAA6B,CAAC;AAE/C,SAAS,OAAO,CACd,EAAoC,EACpC,WAAmB,EACnB,eAAsC;IAEtC,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,YAAY,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,OAAO;QACL,EAAE;QACF,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,EAAE,KAAK,SAAS;QACzB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE;QACpD,oBAAoB,EAAE,CAAC;QACvB,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,GAAG;QACjB,QAAQ,EAAE;YACR,EAAE,EAAE,GAAG,QAAQ,WAAW,KAAK,EAAE;YACjC,OAAO,EAAE,GAAG,QAAQ,qBAAqB,KAAK,EAAE;SACjD;KACF,CAAC;AACJ,CAAC;AAEY,QAAA,YAAY,GAAc,IAAA,mBAAU,EAAC;IAChD,EAAE,EAAE,QAAQ;IACZ,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC3D,cAAc,EAAE,SAAS;IACzB,QAAQ,EAAE;QACR,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,8CAA8C,CAAC;QAC3E,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,8CAA8C,EAAE,QAAQ,CAAC;QACnF,OAAO,EAAE,OAAO,CACd,SAAS,EACT,8CAA8C,EAC9C,SAAS,CACV;KACF;CACF,CAAC,CAAC","sourcesContent":["/**\n * The built-in Solana chain and its clusters. Every value is verified against a live node\n * (`getGenesisHash` on each cluster's public endpoint) or a published source, or is a\n * documented library policy:\n * - `identity`: the cluster's genesis hash (`getGenesisHash`), checked on every endpoint.\n * - `finality`: the `finalized` commitment.\n * - `defaultConfirmations: 1`: `waitForConfirmation` waits for inclusion at `confirmed` by\n * default; credit deposits on `final`.\n * - `reorgWindow: 64` and `maxLagBlocks: 150`: library policies in block heights (a\n * blockhash is valid for 150 blocks, so an endpoint further behind cannot judge expiry).\n */\nimport type { ChainInfo, NetworkInfo } from '../../core/model/chain';\nimport { deepFreeze } from '../../core/util/freeze';\n\nconst EXPLORER = 'https://explorer.solana.com';\n\nfunction cluster(\n id: 'mainnet' | 'devnet' | 'testnet',\n genesisHash: string,\n explorerCluster?: 'devnet' | 'testnet',\n): NetworkInfo {\n const query = explorerCluster ? `?cluster=${explorerCluster}` : '';\n return {\n id,\n identity: genesisHash,\n testnet: id !== 'mainnet',\n feeModel: 'solana',\n finality: { kind: 'commitment', level: 'finalized' },\n defaultConfirmations: 1,\n reorgWindow: 64,\n maxLagBlocks: 150,\n explorer: {\n tx: `${EXPLORER}/tx/{id}${query}`,\n address: `${EXPLORER}/address/{address}${query}`,\n },\n };\n}\n\nexport const SOLANA_CHAIN: ChainInfo = deepFreeze({\n id: 'solana',\n family: 'solana',\n model: 'account',\n ordering: 'expiry',\n schemes: ['ed25519'],\n nativeAsset: { symbol: 'SOL', decimals: 9, name: 'Solana' },\n defaultNetwork: 'mainnet',\n networks: {\n mainnet: cluster('mainnet', '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d'),\n devnet: cluster('devnet', 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG', 'devnet'),\n testnet: cluster(\n 'testnet',\n '4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY',\n 'testnet',\n ),\n },\n});\n"]}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction decoding: `jsonParsed` transactions, inner instructions
|
|
3
|
+
* included, into `DriverTransaction`s. Decoded transfers are checked against the pre/post
|
|
4
|
+
* lamport and token balances, per account and per mint; any movement they do not explain
|
|
5
|
+
* makes the transaction `decoding: 'partial'`. Locators are `ix:<outer>` and
|
|
6
|
+
* `ix:<outer>.<inner>`.
|
|
7
|
+
*
|
|
8
|
+
* `parseTransaction` validates an answer once. A missing or ill-typed field is a retryable
|
|
9
|
+
* `PROVIDER_UNAVAILABLE`, never a default: a truncated or drifted
|
|
10
|
+
* answer never becomes a success or a failure. Every list and text is held to the format's
|
|
11
|
+
* own bound, and account lookups go through one index, so the work stays
|
|
12
|
+
* linear. Nothing here decodes bytes: unparsed instruction data and logs are never read.
|
|
13
|
+
*
|
|
14
|
+
* General decoding reports execution as the chain does. The phantom-success guard
|
|
15
|
+
* (`tokenTransfersLanded`) is applied only on verdict paths.
|
|
16
|
+
*/
|
|
17
|
+
import type { DriverTransaction } from '../../core/driver/types';
|
|
18
|
+
type Json = Record<string, unknown>;
|
|
19
|
+
interface Instruction {
|
|
20
|
+
readonly locator: string;
|
|
21
|
+
readonly inner: boolean;
|
|
22
|
+
readonly programId: string;
|
|
23
|
+
readonly type?: string;
|
|
24
|
+
readonly info: Json | null;
|
|
25
|
+
readonly parsedText?: string;
|
|
26
|
+
/** A parsed text (an inner memo) too long for any CPI to carry: not kept. */
|
|
27
|
+
readonly textTooLong?: true;
|
|
28
|
+
}
|
|
29
|
+
interface TokenBalance {
|
|
30
|
+
readonly mint: string;
|
|
31
|
+
readonly owner?: string;
|
|
32
|
+
/** The program that owns the token account (classic or Token-2022), when reported. */
|
|
33
|
+
readonly programId?: string;
|
|
34
|
+
readonly amount: bigint;
|
|
35
|
+
}
|
|
36
|
+
/** A parsed transaction's facts, validated once. */
|
|
37
|
+
export interface ParsedTransaction {
|
|
38
|
+
/** The first signature: the transaction's id. */
|
|
39
|
+
readonly signature: string;
|
|
40
|
+
readonly keys: readonly string[];
|
|
41
|
+
/** Each account key's position (keys are unique). */
|
|
42
|
+
readonly accountIndex: ReadonlyMap<string, number>;
|
|
43
|
+
/** `null`, or the node's `TransactionError` (a string or a small object). */
|
|
44
|
+
readonly err: unknown;
|
|
45
|
+
readonly fee: bigint;
|
|
46
|
+
readonly preBalances: readonly bigint[];
|
|
47
|
+
readonly postBalances: readonly bigint[];
|
|
48
|
+
readonly preTokens: ReadonlyMap<number, TokenBalance>;
|
|
49
|
+
readonly postTokens: ReadonlyMap<number, TokenBalance>;
|
|
50
|
+
/** Whether the node reported token balances at all (both lists present). */
|
|
51
|
+
readonly tokenBalances: 'present' | 'absent';
|
|
52
|
+
/** Whether the node recorded inner instructions at all. */
|
|
53
|
+
readonly innerInstructions: 'present' | 'absent';
|
|
54
|
+
/** In execution order: each outer instruction, then its inner ones. */
|
|
55
|
+
readonly instructions: readonly Instruction[];
|
|
56
|
+
readonly version: 'legacy' | number;
|
|
57
|
+
readonly slot?: bigint;
|
|
58
|
+
readonly blockTime?: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Validates a `jsonParsed` transaction (from `getTransaction` or a block's list). With
|
|
62
|
+
* `signature`, the answer must be that transaction: a lookup answered with another one
|
|
63
|
+
* decides nothing (a retryable "not yet"), never reads as ours.
|
|
64
|
+
*/
|
|
65
|
+
export declare function parseTransaction(value: unknown, signature?: string): ParsedTransaction;
|
|
66
|
+
/**
|
|
67
|
+
* A vote transaction: consensus traffic, moving nothing but its fee (skipped by scans). A
|
|
68
|
+
* vote-program transaction that moves value, such as a vote-account withdrawal, is not one:
|
|
69
|
+
* a scan must still see it.
|
|
70
|
+
*/
|
|
71
|
+
export declare const isVote: (tx: ParsedTransaction) => boolean;
|
|
72
|
+
/** Where a transaction sits: the block's dense height and hash (never the slot). */
|
|
73
|
+
export interface BlockPlace {
|
|
74
|
+
readonly height: bigint;
|
|
75
|
+
readonly hash: string;
|
|
76
|
+
readonly blockTime?: number;
|
|
77
|
+
}
|
|
78
|
+
/** Decodes a parsed transaction as the chain reports it. */
|
|
79
|
+
export declare function decodeTransaction(tx: ParsedTransaction, place: BlockPlace): DriverTransaction;
|
|
80
|
+
/**
|
|
81
|
+
* The scan filter. A scan must return at least every transaction with a transfer from or
|
|
82
|
+
* to the addresses, so this is a conservative superset over wallets and token accounts
|
|
83
|
+
* alike: a decoded transfer names a watched address; a successful token transfer moves
|
|
84
|
+
* tokens into or out of a watched token account (its decoded transfer names the owners
|
|
85
|
+
* instead); the decoding is partial and a watched address is among the account keys; a
|
|
86
|
+
* watched account's lamports changed; the node reported no token balances and a token
|
|
87
|
+
* program ran or was keyed (a deposit into an existing token account names no owner
|
|
88
|
+
* then); or a token holding changed (per account and mint) whose owner is watched or was
|
|
89
|
+
* not reported (it cannot be attributed). A watched token account's holding cannot change
|
|
90
|
+
* unnoticed: a change no parsed transfer explains makes the decoding partial, and the
|
|
91
|
+
* account is a key.
|
|
92
|
+
*/
|
|
93
|
+
export declare function touches(decoded: DriverTransaction, tx: ParsedTransaction, addresses: ReadonlySet<string>): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* The phantom-success guard, for verdict
|
|
96
|
+
* paths only: a token transfer counts as executed only when the balances show a transfer
|
|
97
|
+
* of a positive amount from the sender's account to the intended recipient's account, of
|
|
98
|
+
* the signed mint, in accounts the classic Token program owns. The exact amount is not
|
|
99
|
+
* required (fee-on-transfer tokens exist). The intended recipient is the destination of
|
|
100
|
+
* the sender's own signed instruction. Missing evidence (no token balances, a balance or
|
|
101
|
+
* its owning program not reported, an unparsed instruction, accounts not in the keys)
|
|
102
|
+
* decides nothing (a retryable `PROVIDER_UNAVAILABLE`), and so does an answer that
|
|
103
|
+
* contradicts the signed message: token instructions, none of them by the sender, where
|
|
104
|
+
* the sender signed its own `transferChecked`, or balances of another mint or program
|
|
105
|
+
* (a retryable `PROVIDER_INCONSISTENT`). Seeing no transfer never
|
|
106
|
+
* passes; a failed transaction never lands; a native transfer keeps the chain's status.
|
|
107
|
+
* The balances must carry `programId` (current agave reports it): without it, SPL verdicts
|
|
108
|
+
* through that provider never decide, which costs liveness only.
|
|
109
|
+
*/
|
|
110
|
+
export declare function tokenTransfersLanded(tx: ParsedTransaction, from: string): boolean;
|
|
111
|
+
export {};
|