crypto-aio 0.0.3 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/README.md +144 -14
- package/dist/adapters/avalanche/address.d.ts +15 -0
- package/dist/adapters/avalanche/address.js +74 -0
- package/dist/adapters/avalanche/address.js.map +1 -0
- package/dist/adapters/avalanche/api.d.ts +100 -0
- package/dist/adapters/avalanche/api.js +381 -0
- package/dist/adapters/avalanche/api.js.map +1 -0
- package/dist/adapters/avalanche/builder.d.ts +13 -0
- package/dist/adapters/avalanche/builder.js +336 -0
- package/dist/adapters/avalanche/builder.js.map +1 -0
- package/dist/adapters/avalanche/cb58.d.ts +7 -0
- package/dist/adapters/avalanche/cb58.js +49 -0
- package/dist/adapters/avalanche/cb58.js.map +1 -0
- package/dist/adapters/avalanche/chains.d.ts +21 -0
- package/dist/adapters/avalanche/chains.js +79 -0
- package/dist/adapters/avalanche/chains.js.map +1 -0
- package/dist/adapters/avalanche/codec.d.ts +94 -0
- package/dist/adapters/avalanche/codec.js +371 -0
- package/dist/adapters/avalanche/codec.js.map +1 -0
- package/dist/adapters/avalanche/context.d.ts +59 -0
- package/dist/adapters/avalanche/context.js +114 -0
- package/dist/adapters/avalanche/context.js.map +1 -0
- package/dist/adapters/avalanche/decode.d.ts +16 -0
- package/dist/adapters/avalanche/decode.js +101 -0
- package/dist/adapters/avalanche/decode.js.map +1 -0
- package/dist/adapters/avalanche/driver.d.ts +22 -0
- package/dist/adapters/avalanche/driver.js +81 -0
- package/dist/adapters/avalanche/driver.js.map +1 -0
- package/dist/adapters/avalanche/errors.d.ts +18 -0
- package/dist/adapters/avalanche/errors.js +61 -0
- package/dist/adapters/avalanche/errors.js.map +1 -0
- package/dist/adapters/avalanche/fees.d.ts +23 -0
- package/dist/adapters/avalanche/fees.js +105 -0
- package/dist/adapters/avalanche/fees.js.map +1 -0
- package/dist/adapters/avalanche/index.d.ts +19 -0
- package/dist/adapters/avalanche/index.js +8 -0
- package/dist/adapters/avalanche/index.js.map +1 -0
- package/dist/adapters/avalanche/network.d.ts +37 -0
- package/dist/adapters/avalanche/network.js +135 -0
- package/dist/adapters/avalanche/network.js.map +1 -0
- package/dist/adapters/avalanche/plugin.d.ts +21 -0
- package/dist/adapters/avalanche/plugin.js +46 -0
- package/dist/adapters/avalanche/plugin.js.map +1 -0
- package/dist/adapters/avalanche/presets.d.ts +6 -0
- package/dist/adapters/avalanche/presets.js +86 -0
- package/dist/adapters/avalanche/presets.js.map +1 -0
- package/dist/adapters/avalanche/proofs.d.ts +41 -0
- package/dist/adapters/avalanche/proofs.js +270 -0
- package/dist/adapters/avalanche/proofs.js.map +1 -0
- package/dist/adapters/avalanche/reader.d.ts +40 -0
- package/dist/adapters/avalanche/reader.js +231 -0
- package/dist/adapters/avalanche/reader.js.map +1 -0
- package/dist/adapters/avalanche/sdk.d.ts +182 -0
- package/dist/adapters/avalanche/sdk.js +21 -0
- package/dist/adapters/avalanche/sdk.js.map +1 -0
- package/dist/adapters/avalanche/types.d.ts +86 -0
- package/dist/{type/common.js → adapters/avalanche/types.js} +1 -1
- package/dist/adapters/avalanche/types.js.map +1 -0
- package/dist/adapters/evm/builder.d.ts +11 -0
- package/dist/adapters/evm/builder.js +326 -0
- package/dist/adapters/evm/builder.js.map +1 -0
- package/dist/adapters/evm/chains.d.ts +6 -0
- package/dist/adapters/evm/chains.js +203 -0
- package/dist/adapters/evm/chains.js.map +1 -0
- package/dist/adapters/evm/client.d.ts +84 -0
- package/dist/adapters/evm/client.js +335 -0
- package/dist/adapters/evm/client.js.map +1 -0
- package/dist/adapters/evm/decode.d.ts +35 -0
- package/dist/adapters/evm/decode.js +170 -0
- package/dist/adapters/evm/decode.js.map +1 -0
- package/dist/adapters/evm/driver.d.ts +8 -0
- package/dist/adapters/evm/driver.js +61 -0
- package/dist/adapters/evm/driver.js.map +1 -0
- package/dist/adapters/evm/errors.d.ts +20 -0
- package/dist/adapters/evm/errors.js +110 -0
- package/dist/adapters/evm/errors.js.map +1 -0
- package/dist/adapters/evm/ethers-client.d.ts +43 -0
- package/dist/adapters/evm/ethers-client.js +135 -0
- package/dist/adapters/evm/ethers-client.js.map +1 -0
- package/dist/adapters/evm/fees.d.ts +79 -0
- package/dist/adapters/evm/fees.js +234 -0
- package/dist/adapters/evm/fees.js.map +1 -0
- package/dist/adapters/evm/index.d.ts +20 -0
- package/dist/adapters/evm/index.js +11 -0
- package/dist/adapters/evm/index.js.map +1 -0
- package/dist/adapters/evm/network.d.ts +60 -0
- package/dist/adapters/evm/network.js +131 -0
- package/dist/adapters/evm/network.js.map +1 -0
- package/dist/adapters/evm/plugin.d.ts +36 -0
- package/dist/adapters/evm/plugin.js +102 -0
- package/dist/adapters/evm/plugin.js.map +1 -0
- package/dist/adapters/evm/presets.d.ts +2 -0
- package/dist/adapters/evm/presets.js +105 -0
- package/dist/adapters/evm/presets.js.map +1 -0
- package/dist/adapters/evm/proofs.d.ts +19 -0
- package/dist/adapters/evm/proofs.js +358 -0
- package/dist/adapters/evm/proofs.js.map +1 -0
- package/dist/adapters/evm/rawtx.d.ts +25 -0
- package/dist/adapters/evm/rawtx.js +176 -0
- package/dist/adapters/evm/rawtx.js.map +1 -0
- package/dist/adapters/evm/reader.d.ts +65 -0
- package/dist/adapters/evm/reader.js +292 -0
- package/dist/adapters/evm/reader.js.map +1 -0
- package/dist/adapters/evm/rpc.d.ts +39 -0
- package/dist/adapters/evm/rpc.js +152 -0
- package/dist/adapters/evm/rpc.js.map +1 -0
- package/dist/adapters/evm/tokens.d.ts +7 -0
- package/dist/adapters/evm/tokens.js +23 -0
- package/dist/adapters/evm/tokens.js.map +1 -0
- package/dist/adapters/evm/types.d.ts +255 -0
- package/dist/{type/account.js → adapters/evm/types.js} +1 -1
- package/dist/adapters/evm/types.js.map +1 -0
- package/dist/adapters/evm/web3-client.d.ts +23 -0
- package/dist/adapters/evm/web3-client.js +159 -0
- package/dist/adapters/evm/web3-client.js.map +1 -0
- package/dist/adapters/solana/builder.d.ts +18 -0
- package/dist/adapters/solana/builder.js +545 -0
- package/dist/adapters/solana/builder.js.map +1 -0
- package/dist/adapters/solana/chains.d.ts +13 -0
- package/dist/adapters/solana/chains.js +37 -0
- package/dist/adapters/solana/chains.js.map +1 -0
- package/dist/adapters/solana/decode.d.ts +111 -0
- package/dist/adapters/solana/decode.js +595 -0
- package/dist/adapters/solana/decode.js.map +1 -0
- package/dist/adapters/solana/driver.d.ts +15 -0
- package/dist/adapters/solana/driver.js +72 -0
- package/dist/adapters/solana/driver.js.map +1 -0
- package/dist/adapters/solana/errors.d.ts +36 -0
- package/dist/adapters/solana/errors.js +154 -0
- package/dist/adapters/solana/errors.js.map +1 -0
- package/dist/adapters/solana/fees.d.ts +68 -0
- package/dist/adapters/solana/fees.js +205 -0
- package/dist/adapters/solana/fees.js.map +1 -0
- package/dist/adapters/solana/heights.d.ts +47 -0
- package/dist/adapters/solana/heights.js +185 -0
- package/dist/adapters/solana/heights.js.map +1 -0
- package/dist/adapters/solana/history.d.ts +10 -0
- package/dist/adapters/solana/history.js +71 -0
- package/dist/adapters/solana/history.js.map +1 -0
- package/dist/adapters/solana/index.d.ts +16 -0
- package/dist/adapters/solana/index.js +9 -0
- package/dist/adapters/solana/index.js.map +1 -0
- package/dist/adapters/solana/keys.d.ts +13 -0
- package/dist/adapters/solana/keys.js +69 -0
- package/dist/adapters/solana/keys.js.map +1 -0
- package/dist/adapters/solana/network.d.ts +24 -0
- package/dist/adapters/solana/network.js +95 -0
- package/dist/adapters/solana/network.js.map +1 -0
- package/dist/adapters/solana/plugin.d.ts +18 -0
- package/dist/adapters/solana/plugin.js +41 -0
- package/dist/adapters/solana/plugin.js.map +1 -0
- package/dist/adapters/solana/presets.d.ts +2 -0
- package/dist/adapters/solana/presets.js +77 -0
- package/dist/adapters/solana/presets.js.map +1 -0
- package/dist/adapters/solana/programs.d.ts +44 -0
- package/dist/adapters/solana/programs.js +159 -0
- package/dist/adapters/solana/programs.js.map +1 -0
- package/dist/adapters/solana/proofs.d.ts +56 -0
- package/dist/adapters/solana/proofs.js +540 -0
- package/dist/adapters/solana/proofs.js.map +1 -0
- package/dist/adapters/solana/reader.d.ts +82 -0
- package/dist/adapters/solana/reader.js +326 -0
- package/dist/adapters/solana/reader.js.map +1 -0
- package/dist/adapters/solana/rpc.d.ts +102 -0
- package/dist/adapters/solana/rpc.js +301 -0
- package/dist/adapters/solana/rpc.js.map +1 -0
- package/dist/adapters/solana/tokens.d.ts +7 -0
- package/dist/adapters/solana/tokens.js +19 -0
- package/dist/adapters/solana/tokens.js.map +1 -0
- package/dist/adapters/solana/types.d.ts +121 -0
- package/dist/{type/contract.js → adapters/solana/types.js} +1 -1
- package/dist/adapters/solana/types.js.map +1 -0
- package/dist/adapters/solana/web3.d.ts +5 -0
- package/dist/adapters/solana/web3.js +83 -0
- package/dist/adapters/solana/web3.js.map +1 -0
- package/dist/adapters/solana/wire.d.ts +62 -0
- package/dist/adapters/solana/wire.js +168 -0
- package/dist/adapters/solana/wire.js.map +1 -0
- package/dist/adapters/ton/address.d.ts +43 -0
- package/dist/adapters/ton/address.js +168 -0
- package/dist/adapters/ton/address.js.map +1 -0
- package/dist/adapters/ton/api.d.ts +344 -0
- package/dist/adapters/ton/api.js +942 -0
- package/dist/adapters/ton/api.js.map +1 -0
- package/dist/adapters/ton/builder.d.ts +18 -0
- package/dist/adapters/ton/builder.js +701 -0
- package/dist/adapters/ton/builder.js.map +1 -0
- package/dist/adapters/ton/chains.d.ts +16 -0
- package/dist/adapters/ton/chains.js +39 -0
- package/dist/adapters/ton/chains.js.map +1 -0
- package/dist/adapters/ton/decode.d.ts +43 -0
- package/dist/adapters/ton/decode.js +219 -0
- package/dist/adapters/ton/decode.js.map +1 -0
- package/dist/adapters/ton/driver.d.ts +10 -0
- package/dist/adapters/ton/driver.js +117 -0
- package/dist/adapters/ton/driver.js.map +1 -0
- package/dist/adapters/ton/errors.d.ts +36 -0
- package/dist/adapters/ton/errors.js +89 -0
- package/dist/adapters/ton/errors.js.map +1 -0
- package/dist/adapters/ton/fees.d.ts +28 -0
- package/dist/adapters/ton/fees.js +121 -0
- package/dist/adapters/ton/fees.js.map +1 -0
- package/dist/adapters/ton/index.d.ts +16 -0
- package/dist/adapters/ton/index.js +9 -0
- package/dist/adapters/ton/index.js.map +1 -0
- package/dist/adapters/ton/messages.d.ts +157 -0
- package/dist/adapters/ton/messages.js +397 -0
- package/dist/adapters/ton/messages.js.map +1 -0
- package/dist/adapters/ton/native-client.d.ts +10 -0
- package/dist/adapters/ton/native-client.js +47 -0
- package/dist/adapters/ton/native-client.js.map +1 -0
- package/dist/adapters/ton/network.d.ts +58 -0
- package/dist/adapters/ton/network.js +207 -0
- package/dist/adapters/ton/network.js.map +1 -0
- package/dist/adapters/ton/plugin.d.ts +24 -0
- package/dist/adapters/ton/plugin.js +57 -0
- package/dist/adapters/ton/plugin.js.map +1 -0
- package/dist/adapters/ton/presets.d.ts +6 -0
- package/dist/adapters/ton/presets.js +94 -0
- package/dist/adapters/ton/presets.js.map +1 -0
- package/dist/adapters/ton/proofs.d.ts +66 -0
- package/dist/adapters/ton/proofs.js +813 -0
- package/dist/adapters/ton/proofs.js.map +1 -0
- package/dist/adapters/ton/reader.d.ts +194 -0
- package/dist/adapters/ton/reader.js +781 -0
- package/dist/adapters/ton/reader.js.map +1 -0
- package/dist/adapters/ton/tokens.d.ts +10 -0
- package/dist/adapters/ton/tokens.js +27 -0
- package/dist/adapters/ton/tokens.js.map +1 -0
- package/dist/adapters/ton/trace.d.ts +48 -0
- package/dist/adapters/ton/trace.js +277 -0
- package/dist/adapters/ton/trace.js.map +1 -0
- package/dist/adapters/ton/types.d.ts +105 -0
- package/dist/{type/transact.js → adapters/ton/types.js} +1 -1
- package/dist/adapters/ton/types.js.map +1 -0
- package/dist/adapters/ton/wallets.d.ts +86 -0
- package/dist/adapters/ton/wallets.js +373 -0
- package/dist/adapters/ton/wallets.js.map +1 -0
- package/dist/adapters/tron/abi.d.ts +39 -0
- package/dist/adapters/tron/abi.js +110 -0
- package/dist/adapters/tron/abi.js.map +1 -0
- package/dist/adapters/tron/address.d.ts +20 -0
- package/dist/adapters/tron/address.js +110 -0
- package/dist/adapters/tron/address.js.map +1 -0
- package/dist/adapters/tron/builder.d.ts +12 -0
- package/dist/adapters/tron/builder.js +553 -0
- package/dist/adapters/tron/builder.js.map +1 -0
- package/dist/adapters/tron/chains.d.ts +12 -0
- package/dist/adapters/tron/chains.js +35 -0
- package/dist/adapters/tron/chains.js.map +1 -0
- package/dist/adapters/tron/codec.d.ts +10 -0
- package/dist/adapters/tron/codec.js +322 -0
- package/dist/adapters/tron/codec.js.map +1 -0
- package/dist/adapters/tron/decode.d.ts +50 -0
- package/dist/adapters/tron/decode.js +280 -0
- package/dist/adapters/tron/decode.js.map +1 -0
- package/dist/adapters/tron/driver.d.ts +12 -0
- package/dist/adapters/tron/driver.js +106 -0
- package/dist/adapters/tron/driver.js.map +1 -0
- package/dist/adapters/tron/errors.d.ts +74 -0
- package/dist/adapters/tron/errors.js +261 -0
- package/dist/adapters/tron/errors.js.map +1 -0
- package/dist/adapters/tron/fees.d.ts +49 -0
- package/dist/adapters/tron/fees.js +166 -0
- package/dist/adapters/tron/fees.js.map +1 -0
- package/dist/adapters/tron/http.d.ts +173 -0
- package/dist/adapters/tron/http.js +729 -0
- package/dist/adapters/tron/http.js.map +1 -0
- package/dist/adapters/tron/index.d.ts +16 -0
- package/dist/adapters/tron/index.js +15 -0
- package/dist/adapters/tron/index.js.map +1 -0
- package/dist/adapters/tron/network.d.ts +44 -0
- package/dist/adapters/tron/network.js +163 -0
- package/dist/adapters/tron/network.js.map +1 -0
- package/dist/adapters/tron/plugin.d.ts +17 -0
- package/dist/adapters/tron/plugin.js +39 -0
- package/dist/adapters/tron/plugin.js.map +1 -0
- package/dist/adapters/tron/presets.d.ts +5 -0
- package/dist/adapters/tron/presets.js +68 -0
- package/dist/adapters/tron/presets.js.map +1 -0
- package/dist/adapters/tron/proofs.d.ts +80 -0
- package/dist/adapters/tron/proofs.js +370 -0
- package/dist/adapters/tron/proofs.js.map +1 -0
- package/dist/adapters/tron/protobuf.d.ts +36 -0
- package/dist/adapters/tron/protobuf.js +90 -0
- package/dist/adapters/tron/protobuf.js.map +1 -0
- package/dist/adapters/tron/reader.d.ts +47 -0
- package/dist/adapters/tron/reader.js +203 -0
- package/dist/adapters/tron/reader.js.map +1 -0
- package/dist/adapters/tron/tokens.d.ts +7 -0
- package/dist/adapters/tron/tokens.js +14 -0
- package/dist/adapters/tron/tokens.js.map +1 -0
- package/dist/adapters/tron/types.d.ts +166 -0
- package/dist/adapters/tron/types.js +3 -0
- package/dist/adapters/tron/types.js.map +1 -0
- package/dist/adapters/utxo/address.d.ts +51 -0
- package/dist/adapters/utxo/address.js +341 -0
- package/dist/adapters/utxo/address.js.map +1 -0
- package/dist/adapters/utxo/builder.d.ts +35 -0
- package/dist/adapters/utxo/builder.js +380 -0
- package/dist/adapters/utxo/builder.js.map +1 -0
- package/dist/adapters/utxo/chains.d.ts +17 -0
- package/dist/adapters/utxo/chains.js +99 -0
- package/dist/adapters/utxo/chains.js.map +1 -0
- package/dist/adapters/utxo/codec.d.ts +120 -0
- package/dist/adapters/utxo/codec.js +408 -0
- package/dist/adapters/utxo/codec.js.map +1 -0
- package/dist/adapters/utxo/coinselect.d.ts +48 -0
- package/dist/adapters/utxo/coinselect.js +131 -0
- package/dist/adapters/utxo/coinselect.js.map +1 -0
- package/dist/adapters/utxo/context.d.ts +57 -0
- package/dist/adapters/utxo/context.js +118 -0
- package/dist/adapters/utxo/context.js.map +1 -0
- package/dist/adapters/utxo/decode.d.ts +14 -0
- package/dist/adapters/utxo/decode.js +85 -0
- package/dist/adapters/utxo/decode.js.map +1 -0
- package/dist/adapters/utxo/driver.d.ts +16 -0
- package/dist/adapters/utxo/driver.js +74 -0
- package/dist/adapters/utxo/driver.js.map +1 -0
- package/dist/adapters/utxo/ecc.d.ts +9 -0
- package/dist/adapters/utxo/ecc.js +26 -0
- package/dist/adapters/utxo/ecc.js.map +1 -0
- package/dist/adapters/utxo/errors.d.ts +52 -0
- package/dist/adapters/utxo/errors.js +191 -0
- package/dist/adapters/utxo/errors.js.map +1 -0
- package/dist/adapters/utxo/esplora.d.ts +79 -0
- package/dist/adapters/utxo/esplora.js +451 -0
- package/dist/adapters/utxo/esplora.js.map +1 -0
- package/dist/adapters/utxo/fees.d.ts +41 -0
- package/dist/adapters/utxo/fees.js +125 -0
- package/dist/adapters/utxo/fees.js.map +1 -0
- package/dist/adapters/utxo/index.d.ts +17 -0
- package/dist/adapters/utxo/index.js +8 -0
- package/dist/adapters/utxo/index.js.map +1 -0
- package/dist/adapters/utxo/network.d.ts +50 -0
- package/dist/adapters/utxo/network.js +165 -0
- package/dist/adapters/utxo/network.js.map +1 -0
- package/dist/adapters/utxo/plugin.d.ts +17 -0
- package/dist/adapters/utxo/plugin.js +41 -0
- package/dist/adapters/utxo/plugin.js.map +1 -0
- package/dist/adapters/utxo/presets.d.ts +12 -0
- package/dist/adapters/utxo/presets.js +47 -0
- package/dist/adapters/utxo/presets.js.map +1 -0
- package/dist/adapters/utxo/preview.d.ts +3 -0
- package/dist/adapters/utxo/preview.js +65 -0
- package/dist/adapters/utxo/preview.js.map +1 -0
- package/dist/adapters/utxo/proofs.d.ts +57 -0
- package/dist/adapters/utxo/proofs.js +331 -0
- package/dist/adapters/utxo/proofs.js.map +1 -0
- package/dist/adapters/utxo/rawtx.d.ts +59 -0
- package/dist/adapters/utxo/rawtx.js +234 -0
- package/dist/adapters/utxo/rawtx.js.map +1 -0
- package/dist/adapters/utxo/reader.d.ts +36 -0
- package/dist/adapters/utxo/reader.js +265 -0
- package/dist/adapters/utxo/reader.js.map +1 -0
- package/dist/adapters/utxo/sdk.d.ts +18 -0
- package/dist/adapters/utxo/sdk.js +17 -0
- package/dist/adapters/utxo/sdk.js.map +1 -0
- package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
- package/dist/adapters/utxo/signed-psbt.js +428 -0
- package/dist/adapters/utxo/signed-psbt.js.map +1 -0
- package/dist/adapters/utxo/spend.d.ts +59 -0
- package/dist/adapters/utxo/spend.js +230 -0
- package/dist/adapters/utxo/spend.js.map +1 -0
- package/dist/adapters/utxo/types.d.ts +167 -0
- package/dist/adapters/utxo/types.js +3 -0
- package/dist/adapters/utxo/types.js.map +1 -0
- package/dist/core/assets/service.d.ts +18 -0
- package/dist/core/assets/service.js +69 -0
- package/dist/core/assets/service.js.map +1 -0
- package/dist/core/blockchain/default-ref.d.ts +4 -0
- package/dist/core/blockchain/default-ref.js +16 -0
- package/dist/core/blockchain/default-ref.js.map +1 -0
- package/dist/core/blockchain/handle.d.ts +200 -0
- package/dist/core/blockchain/handle.js +579 -0
- package/dist/core/blockchain/handle.js.map +1 -0
- package/dist/core/blockchain/internal.d.ts +19 -0
- package/dist/core/blockchain/internal.js +16 -0
- package/dist/core/blockchain/internal.js.map +1 -0
- package/dist/core/blockchain/mapping.d.ts +22 -0
- package/dist/core/blockchain/mapping.js +136 -0
- package/dist/core/blockchain/mapping.js.map +1 -0
- package/dist/core/config/env.d.ts +8 -0
- package/dist/core/config/env.js +60 -0
- package/dist/core/config/env.js.map +1 -0
- package/dist/core/config/merge.d.ts +26 -0
- package/dist/core/config/merge.js +144 -0
- package/dist/core/config/merge.js.map +1 -0
- package/dist/core/config/resolve.d.ts +12 -0
- package/dist/core/config/resolve.js +251 -0
- package/dist/core/config/resolve.js.map +1 -0
- package/dist/core/config/types.d.ts +165 -0
- package/dist/core/config/types.js +3 -0
- package/dist/core/config/types.js.map +1 -0
- package/dist/core/container/builtins.d.ts +4 -0
- package/dist/core/container/builtins.js +13 -0
- package/dist/core/container/builtins.js.map +1 -0
- package/dist/core/container/container.d.ts +69 -0
- package/dist/core/container/container.js +466 -0
- package/dist/core/container/container.js.map +1 -0
- package/dist/core/container/default.d.ts +15 -0
- package/dist/core/container/default.js +70 -0
- package/dist/core/container/default.js.map +1 -0
- package/dist/core/container/internals.d.ts +54 -0
- package/dist/core/container/internals.js +21 -0
- package/dist/core/container/internals.js.map +1 -0
- package/dist/core/container/pool.d.ts +27 -0
- package/dist/core/container/pool.js +77 -0
- package/dist/core/container/pool.js.map +1 -0
- package/dist/core/driver/types.d.ts +346 -0
- package/dist/core/driver/types.js +3 -0
- package/dist/core/driver/types.js.map +1 -0
- package/dist/core/errors/codes.d.ts +153 -0
- package/dist/core/errors/codes.js +49 -0
- package/dist/core/errors/codes.js.map +1 -0
- package/dist/core/errors/error.d.ts +66 -0
- package/dist/core/errors/error.js +129 -0
- package/dist/core/errors/error.js.map +1 -0
- package/dist/core/events/bus.d.ts +12 -0
- package/dist/core/events/bus.js +46 -0
- package/dist/core/events/bus.js.map +1 -0
- package/dist/core/events/logger.d.ts +13 -0
- package/dist/core/events/logger.js +42 -0
- package/dist/core/events/logger.js.map +1 -0
- package/dist/core/events/types.d.ts +131 -0
- package/dist/core/events/types.js +3 -0
- package/dist/core/events/types.js.map +1 -0
- package/dist/core/lifecycle/engine-rules.d.ts +107 -0
- package/dist/core/lifecycle/engine-rules.js +257 -0
- package/dist/core/lifecycle/engine-rules.js.map +1 -0
- package/dist/core/lifecycle/engine.d.ts +500 -0
- package/dist/core/lifecycle/engine.js +1732 -0
- package/dist/core/lifecycle/engine.js.map +1 -0
- package/dist/core/lifecycle/evaluate.d.ts +19 -0
- package/dist/core/lifecycle/evaluate.js +72 -0
- package/dist/core/lifecycle/evaluate.js.map +1 -0
- package/dist/core/lifecycle/intent.d.ts +11 -0
- package/dist/core/lifecycle/intent.js +88 -0
- package/dist/core/lifecycle/intent.js.map +1 -0
- package/dist/core/lifecycle/monitor.d.ts +138 -0
- package/dist/core/lifecycle/monitor.js +606 -0
- package/dist/core/lifecycle/monitor.js.map +1 -0
- package/dist/core/lifecycle/observations.d.ts +17 -0
- package/dist/core/lifecycle/observations.js +59 -0
- package/dist/core/lifecycle/observations.js.map +1 -0
- package/dist/core/lifecycle/reconcile.d.ts +58 -0
- package/dist/core/lifecycle/reconcile.js +112 -0
- package/dist/core/lifecycle/reconcile.js.map +1 -0
- package/dist/core/lifecycle/views.d.ts +49 -0
- package/dist/core/lifecycle/views.js +57 -0
- package/dist/core/lifecycle/views.js.map +1 -0
- package/dist/core/lifecycle/workers.d.ts +82 -0
- package/dist/core/lifecycle/workers.js +329 -0
- package/dist/core/lifecycle/workers.js.map +1 -0
- package/dist/core/model/address.d.ts +32 -0
- package/dist/core/model/address.js +43 -0
- package/dist/core/model/address.js.map +1 -0
- package/dist/core/model/amount.d.ts +25 -0
- package/dist/core/model/amount.js +102 -0
- package/dist/core/model/amount.js.map +1 -0
- package/dist/core/model/asset.d.ts +28 -0
- package/dist/core/model/asset.js +47 -0
- package/dist/core/model/asset.js.map +1 -0
- package/dist/core/model/capability.d.ts +3 -0
- package/dist/core/model/capability.js +18 -0
- package/dist/core/model/capability.js.map +1 -0
- package/dist/core/model/chain.d.ts +63 -0
- package/dist/core/model/chain.js +8 -0
- package/dist/core/model/chain.js.map +1 -0
- package/dist/core/model/fee.d.ts +36 -0
- package/dist/core/model/fee.js +17 -0
- package/dist/core/model/fee.js.map +1 -0
- package/dist/core/model/ids.d.ts +37 -0
- package/dist/core/model/ids.js +13 -0
- package/dist/core/model/ids.js.map +1 -0
- package/dist/core/model/intent.d.ts +63 -0
- package/dist/core/model/intent.js +81 -0
- package/dist/core/model/intent.js.map +1 -0
- package/dist/core/model/ordering.d.ts +20 -0
- package/dist/core/model/ordering.js +29 -0
- package/dist/core/model/ordering.js.map +1 -0
- package/dist/core/model/transaction.d.ts +116 -0
- package/dist/{type/lib-types.js → core/model/transaction.js} +1 -1
- package/dist/core/model/transaction.js.map +1 -0
- package/dist/core/observe/scanner.d.ts +135 -0
- package/dist/core/observe/scanner.js +355 -0
- package/dist/core/observe/scanner.js.map +1 -0
- package/dist/core/ordering/reservations.d.ts +16 -0
- package/dist/core/ordering/reservations.js +53 -0
- package/dist/core/ordering/reservations.js.map +1 -0
- package/dist/core/ordering/sequence.d.ts +61 -0
- package/dist/core/ordering/sequence.js +155 -0
- package/dist/core/ordering/sequence.js.map +1 -0
- package/dist/core/registry/adapters.d.ts +10 -0
- package/dist/core/registry/adapters.js +56 -0
- package/dist/core/registry/adapters.js.map +1 -0
- package/dist/core/registry/assets.d.ts +18 -0
- package/dist/core/registry/assets.js +90 -0
- package/dist/core/registry/assets.js.map +1 -0
- package/dist/core/registry/chains.d.ts +10 -0
- package/dist/core/registry/chains.js +80 -0
- package/dist/core/registry/chains.js.map +1 -0
- package/dist/core/registry/plugin.d.ts +41 -0
- package/dist/core/registry/plugin.js +109 -0
- package/dist/core/registry/plugin.js.map +1 -0
- package/dist/core/registry/providers.d.ts +31 -0
- package/dist/core/registry/providers.js +43 -0
- package/dist/core/registry/providers.js.map +1 -0
- package/dist/core/registry/schemes.d.ts +30 -0
- package/dist/core/registry/schemes.js +84 -0
- package/dist/core/registry/schemes.js.map +1 -0
- package/dist/core/secret/fragments.d.ts +33 -0
- package/dist/core/secret/fragments.js +110 -0
- package/dist/core/secret/fragments.js.map +1 -0
- package/dist/core/secret/redact.d.ts +10 -0
- package/dist/core/secret/redact.js +110 -0
- package/dist/core/secret/redact.js.map +1 -0
- package/dist/core/secret/secret.d.ts +14 -0
- package/dist/core/secret/secret.js +42 -0
- package/dist/core/secret/secret.js.map +1 -0
- package/dist/core/signing/callback.d.ts +10 -0
- package/dist/core/signing/callback.js +22 -0
- package/dist/core/signing/callback.js.map +1 -0
- package/dist/core/signing/guard.d.ts +18 -0
- package/dist/core/signing/guard.js +72 -0
- package/dist/core/signing/guard.js.map +1 -0
- package/dist/core/signing/hd.d.ts +36 -0
- package/dist/core/signing/hd.js +167 -0
- package/dist/core/signing/hd.js.map +1 -0
- package/dist/core/signing/local.d.ts +48 -0
- package/dist/core/signing/local.js +190 -0
- package/dist/core/signing/local.js.map +1 -0
- package/dist/core/signing/orchestrator.d.ts +40 -0
- package/dist/core/signing/orchestrator.js +300 -0
- package/dist/core/signing/orchestrator.js.map +1 -0
- package/dist/core/signing/types.d.ts +64 -0
- package/dist/core/signing/types.js +3 -0
- package/dist/core/signing/types.js.map +1 -0
- package/dist/core/signing/wallet.d.ts +48 -0
- package/dist/core/signing/wallet.js +153 -0
- package/dist/core/signing/wallet.js.map +1 -0
- package/dist/core/store/clone.d.ts +25 -0
- package/dist/core/store/clone.js +71 -0
- package/dist/core/store/clone.js.map +1 -0
- package/dist/core/store/memory.d.ts +38 -0
- package/dist/core/store/memory.js +325 -0
- package/dist/core/store/memory.js.map +1 -0
- package/dist/core/store/types.d.ts +246 -0
- package/dist/core/store/types.js +117 -0
- package/dist/core/store/types.js.map +1 -0
- package/dist/core/transport/backoff.d.ts +8 -0
- package/dist/core/transport/backoff.js +27 -0
- package/dist/core/transport/backoff.js.map +1 -0
- package/dist/core/transport/circuit.d.ts +25 -0
- package/dist/core/transport/circuit.js +61 -0
- package/dist/core/transport/circuit.js.map +1 -0
- package/dist/core/transport/http-transport.d.ts +30 -0
- package/dist/core/transport/http-transport.js +1695 -0
- package/dist/core/transport/http-transport.js.map +1 -0
- package/dist/core/transport/rate-limit.d.ts +27 -0
- package/dist/core/transport/rate-limit.js +78 -0
- package/dist/core/transport/rate-limit.js.map +1 -0
- package/dist/core/transport/stale-view.d.ts +11 -0
- package/dist/core/transport/stale-view.js +17 -0
- package/dist/core/transport/stale-view.js.map +1 -0
- package/dist/core/transport/types.d.ts +144 -0
- package/dist/core/transport/types.js +6 -0
- package/dist/core/transport/types.js.map +1 -0
- package/dist/core/util/bytes.d.ts +9 -0
- package/dist/core/util/bytes.js +40 -0
- package/dist/core/util/bytes.js.map +1 -0
- package/dist/core/util/clock.d.ts +6 -0
- package/dist/core/util/clock.js +26 -0
- package/dist/core/util/clock.js.map +1 -0
- package/dist/core/util/freeze.d.ts +8 -0
- package/dist/core/util/freeze.js +31 -0
- package/dist/core/util/freeze.js.map +1 -0
- package/dist/core/util/json.d.ts +29 -0
- package/dist/core/util/json.js +165 -0
- package/dist/core/util/json.js.map +1 -0
- package/dist/core/util/names.d.ts +21 -0
- package/dist/core/util/names.js +46 -0
- package/dist/core/util/names.js.map +1 -0
- package/dist/index.d.ts +64 -14
- package/dist/index.js +105 -49
- package/dist/index.js.map +1 -1
- package/dist/native.d.ts +21 -0
- package/dist/native.js +44 -0
- package/dist/native.js.map +1 -0
- package/dist/testing/contracts/api.d.ts +12 -0
- package/dist/testing/contracts/api.js +58 -0
- package/dist/testing/contracts/api.js.map +1 -0
- package/dist/testing/contracts/cursors.d.ts +6 -0
- package/dist/testing/contracts/cursors.js +43 -0
- package/dist/testing/contracts/cursors.js.map +1 -0
- package/dist/testing/contracts/locks.d.ts +10 -0
- package/dist/testing/contracts/locks.js +63 -0
- package/dist/testing/contracts/locks.js.map +1 -0
- package/dist/testing/contracts/operations.d.ts +21 -0
- package/dist/testing/contracts/operations.js +718 -0
- package/dist/testing/contracts/operations.js.map +1 -0
- package/dist/testing/contracts/sequences.d.ts +6 -0
- package/dist/testing/contracts/sequences.js +68 -0
- package/dist/testing/contracts/sequences.js.map +1 -0
- package/dist/testing/env.d.ts +63 -0
- package/dist/testing/env.js +105 -0
- package/dist/testing/env.js.map +1 -0
- package/dist/testing/fake-chain.d.ts +118 -0
- package/dist/testing/fake-chain.js +536 -0
- package/dist/testing/fake-chain.js.map +1 -0
- package/dist/testing/fake-clock.d.ts +15 -0
- package/dist/testing/fake-clock.js +86 -0
- package/dist/testing/fake-clock.js.map +1 -0
- package/dist/testing/fake-driver.d.ts +15 -0
- package/dist/testing/fake-driver.js +458 -0
- package/dist/testing/fake-driver.js.map +1 -0
- package/dist/testing/fake-fetch.d.ts +32 -0
- package/dist/testing/fake-fetch.js +81 -0
- package/dist/testing/fake-fetch.js.map +1 -0
- package/dist/testing/fake-plugin.d.ts +30 -0
- package/dist/testing/fake-plugin.js +66 -0
- package/dist/testing/fake-plugin.js.map +1 -0
- package/dist/testing/faulty-store.d.ts +36 -0
- package/dist/testing/faulty-store.js +66 -0
- package/dist/testing/faulty-store.js.map +1 -0
- package/dist/testing/generation.d.ts +60 -0
- package/dist/testing/generation.js +252 -0
- package/dist/testing/generation.js.map +1 -0
- package/dist/testing/index.d.ts +28 -0
- package/dist/testing/index.js +51 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +188 -45
- package/dist/libs/eth/account.d.ts +0 -9
- package/dist/libs/eth/account.js +0 -58
- package/dist/libs/eth/account.js.map +0 -1
- package/dist/libs/eth/contract.d.ts +0 -7
- package/dist/libs/eth/contract.js +0 -42
- package/dist/libs/eth/contract.js.map +0 -1
- package/dist/libs/eth/index.d.ts +0 -24
- package/dist/libs/eth/index.js +0 -72
- package/dist/libs/eth/index.js.map +0 -1
- package/dist/libs/eth/transact.d.ts +0 -7
- package/dist/libs/eth/transact.js +0 -26
- package/dist/libs/eth/transact.js.map +0 -1
- package/dist/libs/index.d.ts +0 -2
- package/dist/libs/index.js +0 -19
- package/dist/libs/index.js.map +0 -1
- package/dist/libs/trx/account.d.ts +0 -9
- package/dist/libs/trx/account.js +0 -55
- package/dist/libs/trx/account.js.map +0 -1
- package/dist/libs/trx/contract.d.ts +0 -7
- package/dist/libs/trx/contract.js +0 -27
- package/dist/libs/trx/contract.js.map +0 -1
- package/dist/libs/trx/index.d.ts +0 -22
- package/dist/libs/trx/index.js +0 -64
- package/dist/libs/trx/index.js.map +0 -1
- package/dist/libs/trx/transact.d.ts +0 -7
- package/dist/libs/trx/transact.js +0 -26
- package/dist/libs/trx/transact.js.map +0 -1
- package/dist/tool/common.d.ts +0 -28
- package/dist/tool/common.js +0 -33
- package/dist/tool/common.js.map +0 -1
- package/dist/tool/eth-tools.d.ts +0 -3
- package/dist/tool/eth-tools.js +0 -33
- package/dist/tool/eth-tools.js.map +0 -1
- package/dist/tool/index.d.ts +0 -5
- package/dist/tool/index.js +0 -22
- package/dist/tool/index.js.map +0 -1
- package/dist/tool/logging.d.ts +0 -3
- package/dist/tool/logging.js +0 -11
- package/dist/tool/logging.js.map +0 -1
- package/dist/tool/options.d.ts +0 -6
- package/dist/tool/options.js +0 -41
- package/dist/tool/options.js.map +0 -1
- package/dist/tool/trx-tools.d.ts +0 -3
- package/dist/tool/trx-tools.js +0 -20
- package/dist/tool/trx-tools.js.map +0 -1
- package/dist/type/account.d.ts +0 -9
- package/dist/type/account.js.map +0 -1
- package/dist/type/common.d.ts +0 -18
- package/dist/type/common.js.map +0 -1
- package/dist/type/contract.d.ts +0 -10
- package/dist/type/contract.js.map +0 -1
- package/dist/type/index.d.ts +0 -5
- package/dist/type/index.js +0 -22
- package/dist/type/index.js.map +0 -1
- package/dist/type/lib-types.d.ts +0 -9
- package/dist/type/lib-types.js.map +0 -1
- package/dist/type/transact.d.ts +0 -7
- package/dist/type/transact.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../src/adapters/ton/driver.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The TON driver: one factory for both built-in networks, configured by each network's\n * registry data. The family shape: `tonDriverFactory(makeNative)` lives here and imports\n * no client module; the library's module (`native-client.ts`) supplies the native client\n * and exports the loadable factory.\n */\nimport type {\n ChainDriver,\n DisposableNativeClient,\n DriverFactory,\n DriverLimits,\n WalletOptions,\n} from '../../core/driver/types';\nimport { ConfigError, ProviderError } from '../../core/errors/error';\nimport type { EndpointCall, HealthProbes, Transport } from '../../core/transport/types';\nimport { TonApi, configParamBoc, indexedHeadOf, masterchainInfoSeqno } from './api';\nimport { createTonBroadcaster, createTonBuilder } from './builder';\nimport { cellFromBoc } from './messages';\nimport { tonNetworkConfig } from './network';\nimport { createTonHistory, createTonProofs } from './proofs';\nimport {\n createTonContext,\n createTonExt,\n createTonReader,\n createTonSequence,\n} from './reader';\nimport { resolveIdentity } from './wallets';\n\n/** A probe answer that does not parse: the endpoint fails its health check (retryable). */\nconst malformedProbe = (route: string) =>\n new ProviderError('PROVIDER_UNAVAILABLE', `malformed toncenter answer to ${route}`, {\n retryable: true,\n });\n\n/**\n * The probes read heights and the indexer's global id with `api.ts`'s own\n * parsers, the ones the proofs use, so the two never drift.\n *\n * v2: identity = config param 19, the network's global id, from a cell that holds\n * exactly one int32 (`global_id#_ global_id:int32 = ConfigParam 19`); height = the\n * liteserver's masterchain head. One call each: each probe takes a token from the\n * endpoint's rate limit.\n */\nconst rpcProbes = (expectedIdentity: string): HealthProbes => ({\n identity: async (call: EndpointCall) => {\n const route = '/getConfigParam';\n const body = await call.http({\n method: 'GET',\n path: route,\n query: { param: '19' },\n route,\n });\n const cell = cellFromBoc(configParamBoc(body, route));\n const slice = cell && !cell.isExotic ? cell.beginParse() : null;\n if (!slice || slice.remainingBits !== 32 || slice.remainingRefs !== 0) {\n throw malformedProbe(route);\n }\n return String(slice.loadInt(32));\n },\n expectedIdentity,\n height: async (call: EndpointCall) => {\n const route = '/getMasterchainInfo';\n return BigInt(\n masterchainInfoSeqno(await call.http({ method: 'GET', path: route, route }), route),\n );\n },\n});\n\n/**\n * v3: identity = the indexed head's `global_id` (an int32); height = the newest\n * indexed masterchain block.\n */\nconst indexerProbes = (expectedIdentity: string): HealthProbes => {\n const route = '/masterchainInfo';\n const indexedHead = async (call: EndpointCall) =>\n indexedHeadOf(await call.http({ method: 'GET', path: route, route }), route);\n return {\n identity: async (call) => String((await indexedHead(call)).globalId),\n expectedIdentity,\n height: async (call) => BigInt((await indexedHead(call)).seqno),\n };\n};\n\n/**\n * A TON transfer carries exactly one output (a partly delivered batch has no safe single\n * verdict: `failed` invites a whole re-send that pays the delivered outputs twice),\n * whatever the wallet version. The core prefers this answer to its own capability\n * default, so it holds even for a selection that somehow lists `batch-transfer`.\n */\nconst ONE_OUTPUT: DriverLimits = Object.freeze({ maxOutputs: 1 });\n\n/** The batch limit of a wallet; a malformed TON identity throws its `CONFIG_INVALID`. */\nfunction limitsOf(wallet: WalletOptions, globalId: number): DriverLimits {\n if (wallet.ton !== undefined) resolveIdentity(wallet, globalId);\n return ONE_OUTPUT;\n}\n\n/** The TON driver factory over a native-client maker (the library module supplies it). */\nexport const tonDriverFactory = (\n makeNative: (transport: Transport) => DisposableNativeClient,\n): DriverFactory => ({\n async create(ctx): Promise<ChainDriver> {\n // First: a network that adds a capability TON lacks (`batch-transfer`, `block-scan`, …)\n // or carries inconsistent data fails here, before any probe. The handle's options too\n // (`maxNetworkFee`); an unknown one is refused.\n const config = tonNetworkConfig(ctx.chain, ctx.network, ctx.options);\n if (!ctx.indexer) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n 'TON needs an indexer provider (toncenter API v3); set chains.ton.indexer',\n );\n }\n // Probes go on every transport this driver receives, before any traffic. Both expect\n // the global id as parsed from the registry, so they compare values, never spellings.\n const identity = String(config.globalId);\n ctx.transport.setProbes(rpcProbes(identity));\n ctx.indexer.setProbes(indexerProbes(identity));\n const ton = createTonContext({\n api: new TonApi(ctx.transport, ctx.indexer),\n chain: ctx.chain,\n network: ctx.network,\n config,\n log: ctx.log,\n clock: ctx.clock,\n });\n const ext = createTonExt(ton);\n return {\n ordering: 'seqno',\n // Informational: the core gates every capability, `address-history` included, on its\n // own selection (manifest ∪ indexer ∪ network add − remove).\n capabilities: config.capabilities,\n address: ton.codec,\n reader: createTonReader(ton),\n builder: createTonBuilder(ton),\n broadcaster: createTonBroadcaster(ton),\n proofs: createTonProofs(ton),\n sequence: createTonSequence(ton),\n history: createTonHistory(ton),\n ext: { ton: { getSeqno: ext.ton.getSeqno, jettonWallet: ext.ton.jettonWallet } },\n limits: (wallet) => limitsOf(wallet, config.globalId),\n // A fresh SDK client on every call, over this driver's transport.\n createNativeClient: () => makeNative(ctx.transport),\n };\n },\n});\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classifies a definitive send refusal. toncenter answers every liteserver refusal, and
|
|
3
|
+
* malformed bytes too, with HTTP 500, which the transport reports as an ambiguous failure
|
|
4
|
+
* that the broadcaster rethrows unclassified. Its definitive 4xx answers (422) mean the
|
|
5
|
+
* request did not parse. So this table serves the 4xx answers of other v2-compatible
|
|
6
|
+
* endpoints, and it matches the chain's own texts only:
|
|
7
|
+
* - liteserver.cpp `perform_sendMessage` prefixes "cannot apply external message to current
|
|
8
|
+
* state : ", and tonlib names the liteserver's error code ("LITE_SERVER_UNKNOWN: ");
|
|
9
|
+
* - external-message.cpp `run_message_on_account` prefixes "External message was not
|
|
10
|
+
* accepted: cannot run message on account: ";
|
|
11
|
+
* - collator.cpp `impl_create_ordinary_transaction` writes "inbound external message
|
|
12
|
+
* rejected by transaction <HEX>:\nexitcode=<n>, steps=<n>, gas_used=<n>" (then a VM
|
|
13
|
+
* log) when the wallet code refuses, and "… rejected by account <HEX> before
|
|
14
|
+
* smart-contract execution" when the balance cannot pay the import fee;
|
|
15
|
+
* - ext-message-checker.cpp writes "Failed to unpack account state";
|
|
16
|
+
* - liteserver-cache.hpp answers a repeated `sendMessage` "duplicate message", behind
|
|
17
|
+
* "cannot send external message : " (liteserver.cpp);
|
|
18
|
+
* - ext-message-pool.cpp answers "not ready", "too many pending external message checks"
|
|
19
|
+
* and "too many external messages to address <wc>:<HEX>" when it cannot check a message
|
|
20
|
+
* now: those are thrown as transient failures, never classified.
|
|
21
|
+
*
|
|
22
|
+
* Every text-based answer is a refusal or a success, never `rejected`: one endpoint's
|
|
23
|
+
* text decides no verdict, and a refused TON message still ends, proven, when it expires.
|
|
24
|
+
* A `rejected` would end the Operation, and if a lying endpoint relayed the bytes anyway,
|
|
25
|
+
* a caller's retry with a new seqno would pay twice. Bytes that are no external message
|
|
26
|
+
* are `rejected` by the broadcaster itself, before anything is sent. Reasons are fixed
|
|
27
|
+
* texts: a node's text carries addresses. Each pattern is linear and reads a bounded
|
|
28
|
+
* prefix; a text anchored at both ends is matched only when that prefix is the whole
|
|
29
|
+
* text, so the cut never completes one. SDK-free.
|
|
30
|
+
*/
|
|
31
|
+
import type { BroadcastResult } from '../../core/driver/types';
|
|
32
|
+
/**
|
|
33
|
+
* @throws a retryable, ambiguous `ProviderError('PROVIDER_UNAVAILABLE')` for a transient
|
|
34
|
+
* answer (the message may still reach the network), as a transport failure is thrown.
|
|
35
|
+
*/
|
|
36
|
+
export declare function classifyBroadcastError(message: string): BroadcastResult;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.classifyBroadcastError = classifyBroadcastError;
|
|
4
|
+
const error_1 = require("../../core/errors/error");
|
|
5
|
+
const refused = (code, reason) => Object.freeze({ kind: 'refused', code, reason });
|
|
6
|
+
/** Only this much of a text is read; every chain text above ends its verdict well within. */
|
|
7
|
+
const MAX_TEXT = 1024;
|
|
8
|
+
/**
|
|
9
|
+
* The wallet code's refusals by exit code, all state-dependent (another seqno, a later
|
|
10
|
+
* clock, a W5 extension that turns signatures back on): wallet-v4-code.fc checks 36, 33, 34
|
|
11
|
+
* and 35; wallet_v5.fc `process_signed_request` checks 135, 132, 133, 134 and 136.
|
|
12
|
+
*/
|
|
13
|
+
const BY_EXIT_CODE = new Map([
|
|
14
|
+
['33', refused('NONCE_CONFLICT', 'seqno mismatch')],
|
|
15
|
+
['133', refused('NONCE_CONFLICT', 'seqno mismatch')],
|
|
16
|
+
['36', refused('TX_EXPIRED', 'message expired')],
|
|
17
|
+
['136', refused('TX_EXPIRED', 'message expired')],
|
|
18
|
+
['34', refused('TX_REFUSED', 'wallet id mismatch')],
|
|
19
|
+
['134', refused('TX_REFUSED', 'wallet id mismatch')],
|
|
20
|
+
['35', refused('TX_REFUSED', 'signature not accepted')],
|
|
21
|
+
['135', refused('TX_REFUSED', 'signature not accepted')],
|
|
22
|
+
['132', refused('TX_REFUSED', 'signature disabled')],
|
|
23
|
+
]);
|
|
24
|
+
/**
|
|
25
|
+
* The wallet code refused, or its compute phase never ran. The code and the steps must each
|
|
26
|
+
* end at their comma, so a text cut short is never read as another code.
|
|
27
|
+
*/
|
|
28
|
+
const BY_TRANSACTION = /inbound external message rejected by transaction [0-9A-Fa-f]{64}:\nexitcode=(-?\d{1,10}), steps=(\d{1,10}),/;
|
|
29
|
+
/**
|
|
30
|
+
* No code runs: the account does not exist, or has no code and no matching `StateInit`, no
|
|
31
|
+
* gas, or is frozen (a skipped compute phase reads `exitcode=0, steps=0`).
|
|
32
|
+
*/
|
|
33
|
+
const INACTIVE = refused('TX_REFUSED', 'wallet not active or not funded');
|
|
34
|
+
const NO_ACCOUNT = /^(?:LITE_SERVER_UNKNOWN: )?(?:cannot apply external message to current state : )?Failed to unpack account state\s*$/;
|
|
35
|
+
/**
|
|
36
|
+
* The balance cannot pay the import fee (transaction.cpp `unpack_input_msg`). The same text
|
|
37
|
+
* covers message shapes the builder never makes (an anycast or too deep destination).
|
|
38
|
+
*/
|
|
39
|
+
const BY_ACCOUNT = /inbound external message rejected by account [0-9A-Fa-f]{64} before smart-contract execution/;
|
|
40
|
+
const NO_FUNDS = refused('INSUFFICIENT_FUNDS', 'insufficient funds');
|
|
41
|
+
/** tonlib's answers to bytes that are no message; exact, anchored texts. */
|
|
42
|
+
const NO_MESSAGE = /^Failed to unpack Message\s*$/;
|
|
43
|
+
const BAD_BOC = /^INVALID_BAG_OF_CELLS: /;
|
|
44
|
+
const MALFORMED_RESULT = refused('TX_REFUSED', 'malformed message');
|
|
45
|
+
/**
|
|
46
|
+
* Success: this liteserver already took these exact bytes (it forgets a send that
|
|
47
|
+
* failed). Matched as strictly as a refusal: the whole answer, and only after every
|
|
48
|
+
* refusal pattern.
|
|
49
|
+
*/
|
|
50
|
+
const ALREADY_KNOWN = /^(?:LITE_SERVER_UNKNOWN: )?cannot send external message : duplicate message\s*$/;
|
|
51
|
+
const ALREADY_KNOWN_RESULT = Object.freeze({ kind: 'already-known' });
|
|
52
|
+
const REFUSED_BY_NODE = refused('TX_REFUSED', 'refused by the node');
|
|
53
|
+
/**
|
|
54
|
+
* The node cannot check the message now (ext-message-pool.cpp): it is not ready or has too
|
|
55
|
+
* many checks pending (`ErrorCode::notready`, which tonlib names `LITE_SERVER_NOTREADY`),
|
|
56
|
+
* or it holds too many messages to this address. That says nothing about the message, and
|
|
57
|
+
* another node may take it: a transient failure, never a stalling refusal.
|
|
58
|
+
*/
|
|
59
|
+
const NOT_READY = /^LITE_SERVER_NOTREADY: /;
|
|
60
|
+
const BUSY = /^(?:LITE_SERVER_UNKNOWN: )?(?:cannot apply external message to current state : )?(?:not ready|too many pending external message checks|too many external messages to address -?\d{1,10}:[0-9A-Fa-f]{64})\s*$/;
|
|
61
|
+
/**
|
|
62
|
+
* @throws a retryable, ambiguous `ProviderError('PROVIDER_UNAVAILABLE')` for a transient
|
|
63
|
+
* answer (the message may still reach the network), as a transport failure is thrown.
|
|
64
|
+
*/
|
|
65
|
+
function classifyBroadcastError(message) {
|
|
66
|
+
// Texts anchored at both ends are read only when nothing was cut.
|
|
67
|
+
const whole = message.length <= MAX_TEXT;
|
|
68
|
+
// A v2 body the transport cut (300 characters) stays JSON-escaped: `\n` is two characters.
|
|
69
|
+
const text = message.slice(0, MAX_TEXT).replace(/\\n/g, '\n');
|
|
70
|
+
if (NOT_READY.test(text) || (whole && BUSY.test(text))) {
|
|
71
|
+
throw new error_1.ProviderError('PROVIDER_UNAVAILABLE', 'the node cannot take the message now; it may still reach the network', { retryable: true, ambiguous: true });
|
|
72
|
+
}
|
|
73
|
+
const compute = BY_TRANSACTION.exec(text);
|
|
74
|
+
if (compute) {
|
|
75
|
+
if (compute[1] === '0' && compute[2] === '0')
|
|
76
|
+
return INACTIVE;
|
|
77
|
+
return BY_EXIT_CODE.get(compute[1]) ?? REFUSED_BY_NODE;
|
|
78
|
+
}
|
|
79
|
+
if (whole && NO_ACCOUNT.test(text))
|
|
80
|
+
return INACTIVE;
|
|
81
|
+
if (BY_ACCOUNT.test(text))
|
|
82
|
+
return NO_FUNDS;
|
|
83
|
+
if (BAD_BOC.test(text) || (whole && NO_MESSAGE.test(text)))
|
|
84
|
+
return MALFORMED_RESULT;
|
|
85
|
+
if (whole && ALREADY_KNOWN.test(text))
|
|
86
|
+
return ALREADY_KNOWN_RESULT;
|
|
87
|
+
return REFUSED_BY_NODE;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/adapters/ton/errors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Classifies a definitive send refusal. toncenter answers every liteserver refusal, and\n * malformed bytes too, with HTTP 500, which the transport reports as an ambiguous failure\n * that the broadcaster rethrows unclassified. Its definitive 4xx answers (422) mean the\n * request did not parse. So this table serves the 4xx answers of other v2-compatible\n * endpoints, and it matches the chain's own texts only:\n * - liteserver.cpp `perform_sendMessage` prefixes \"cannot apply external message to current\n * state : \", and tonlib names the liteserver's error code (\"LITE_SERVER_UNKNOWN: \");\n * - external-message.cpp `run_message_on_account` prefixes \"External message was not\n * accepted: cannot run message on account: \";\n * - collator.cpp `impl_create_ordinary_transaction` writes \"inbound external message\n * rejected by transaction <HEX>:\\nexitcode=<n>, steps=<n>, gas_used=<n>\" (then a VM\n * log) when the wallet code refuses, and \"… rejected by account <HEX> before\n * smart-contract execution\" when the balance cannot pay the import fee;\n * - ext-message-checker.cpp writes \"Failed to unpack account state\";\n * - liteserver-cache.hpp answers a repeated `sendMessage` \"duplicate message\", behind\n * \"cannot send external message : \" (liteserver.cpp);\n * - ext-message-pool.cpp answers \"not ready\", \"too many pending external message checks\"\n * and \"too many external messages to address <wc>:<HEX>\" when it cannot check a message\n * now: those are thrown as transient failures, never classified.\n *\n * Every text-based answer is a refusal or a success, never `rejected`: one endpoint's\n * text decides no verdict, and a refused TON message still ends, proven, when it expires.\n * A `rejected` would end the Operation, and if a lying endpoint relayed the bytes anyway,\n * a caller's retry with a new seqno would pay twice. Bytes that are no external message\n * are `rejected` by the broadcaster itself, before anything is sent. Reasons are fixed\n * texts: a node's text carries addresses. Each pattern is linear and reads a bounded\n * prefix; a text anchored at both ends is matched only when that prefix is the whole\n * text, so the cut never completes one. SDK-free.\n */\nimport type { BroadcastResult } from '../../core/driver/types';\nimport { ProviderError } from '../../core/errors/error';\n\ntype RefusalCode = Extract<BroadcastResult, { kind: 'refused' }>['code'];\n\nconst refused = (code: RefusalCode, reason: string): BroadcastResult =>\n Object.freeze({ kind: 'refused', code, reason });\n\n/** Only this much of a text is read; every chain text above ends its verdict well within. */\nconst MAX_TEXT = 1024;\n\n/**\n * The wallet code's refusals by exit code, all state-dependent (another seqno, a later\n * clock, a W5 extension that turns signatures back on): wallet-v4-code.fc checks 36, 33, 34\n * and 35; wallet_v5.fc `process_signed_request` checks 135, 132, 133, 134 and 136.\n */\nconst BY_EXIT_CODE: ReadonlyMap<string, BroadcastResult> = new Map([\n ['33', refused('NONCE_CONFLICT', 'seqno mismatch')],\n ['133', refused('NONCE_CONFLICT', 'seqno mismatch')],\n ['36', refused('TX_EXPIRED', 'message expired')],\n ['136', refused('TX_EXPIRED', 'message expired')],\n ['34', refused('TX_REFUSED', 'wallet id mismatch')],\n ['134', refused('TX_REFUSED', 'wallet id mismatch')],\n ['35', refused('TX_REFUSED', 'signature not accepted')],\n ['135', refused('TX_REFUSED', 'signature not accepted')],\n ['132', refused('TX_REFUSED', 'signature disabled')],\n]);\n\n/**\n * The wallet code refused, or its compute phase never ran. The code and the steps must each\n * end at their comma, so a text cut short is never read as another code.\n */\nconst BY_TRANSACTION =\n /inbound external message rejected by transaction [0-9A-Fa-f]{64}:\\nexitcode=(-?\\d{1,10}), steps=(\\d{1,10}),/;\n\n/**\n * No code runs: the account does not exist, or has no code and no matching `StateInit`, no\n * gas, or is frozen (a skipped compute phase reads `exitcode=0, steps=0`).\n */\nconst INACTIVE = refused('TX_REFUSED', 'wallet not active or not funded');\nconst NO_ACCOUNT =\n /^(?:LITE_SERVER_UNKNOWN: )?(?:cannot apply external message to current state : )?Failed to unpack account state\\s*$/;\n\n/**\n * The balance cannot pay the import fee (transaction.cpp `unpack_input_msg`). The same text\n * covers message shapes the builder never makes (an anycast or too deep destination).\n */\nconst BY_ACCOUNT =\n /inbound external message rejected by account [0-9A-Fa-f]{64} before smart-contract execution/;\nconst NO_FUNDS = refused('INSUFFICIENT_FUNDS', 'insufficient funds');\n\n/** tonlib's answers to bytes that are no message; exact, anchored texts. */\nconst NO_MESSAGE = /^Failed to unpack Message\\s*$/;\nconst BAD_BOC = /^INVALID_BAG_OF_CELLS: /;\nconst MALFORMED_RESULT = refused('TX_REFUSED', 'malformed message');\n\n/**\n * Success: this liteserver already took these exact bytes (it forgets a send that\n * failed). Matched as strictly as a refusal: the whole answer, and only after every\n * refusal pattern.\n */\nconst ALREADY_KNOWN =\n /^(?:LITE_SERVER_UNKNOWN: )?cannot send external message : duplicate message\\s*$/;\nconst ALREADY_KNOWN_RESULT: BroadcastResult = Object.freeze({ kind: 'already-known' });\n\nconst REFUSED_BY_NODE = refused('TX_REFUSED', 'refused by the node');\n\n/**\n * The node cannot check the message now (ext-message-pool.cpp): it is not ready or has too\n * many checks pending (`ErrorCode::notready`, which tonlib names `LITE_SERVER_NOTREADY`),\n * or it holds too many messages to this address. That says nothing about the message, and\n * another node may take it: a transient failure, never a stalling refusal.\n */\nconst NOT_READY = /^LITE_SERVER_NOTREADY: /;\nconst BUSY =\n /^(?:LITE_SERVER_UNKNOWN: )?(?:cannot apply external message to current state : )?(?:not ready|too many pending external message checks|too many external messages to address -?\\d{1,10}:[0-9A-Fa-f]{64})\\s*$/;\n\n/**\n * @throws a retryable, ambiguous `ProviderError('PROVIDER_UNAVAILABLE')` for a transient\n * answer (the message may still reach the network), as a transport failure is thrown.\n */\nexport function classifyBroadcastError(message: string): BroadcastResult {\n // Texts anchored at both ends are read only when nothing was cut.\n const whole = message.length <= MAX_TEXT;\n // A v2 body the transport cut (300 characters) stays JSON-escaped: `\\n` is two characters.\n const text = message.slice(0, MAX_TEXT).replace(/\\\\n/g, '\\n');\n if (NOT_READY.test(text) || (whole && BUSY.test(text))) {\n throw new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n 'the node cannot take the message now; it may still reach the network',\n { retryable: true, ambiguous: true },\n );\n }\n const compute = BY_TRANSACTION.exec(text);\n if (compute) {\n if (compute[1] === '0' && compute[2] === '0') return INACTIVE;\n return BY_EXIT_CODE.get(compute[1] as string) ?? REFUSED_BY_NODE;\n }\n if (whole && NO_ACCOUNT.test(text)) return INACTIVE;\n if (BY_ACCOUNT.test(text)) return NO_FUNDS;\n if (BAD_BOC.test(text) || (whole && NO_MESSAGE.test(text))) return MALFORMED_RESULT;\n if (whole && ALREADY_KNOWN.test(text)) return ALREADY_KNOWN_RESULT;\n return REFUSED_BY_NODE;\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type FeeEstimateDraft, type FeeOverride, type FeeSpeed } from '../../core/model/fee';
|
|
2
|
+
import type { TonFeeDetails } from './types';
|
|
3
|
+
/** The largest `Coins` value (TL-B `VarUInteger 16`): every nanogram amount on the wire. */
|
|
4
|
+
export declare const MAX_COINS: bigint;
|
|
5
|
+
export interface FeeRequest {
|
|
6
|
+
readonly speed: FeeSpeed | 'custom';
|
|
7
|
+
/** Jettons only: the override, or `undefined` for the network's default. */
|
|
8
|
+
readonly attached?: bigint;
|
|
9
|
+
}
|
|
10
|
+
/** Validates `TransferIntent.fee` for TON. */
|
|
11
|
+
export declare function feeRequest(fee: FeeSpeed | FeeOverride, jetton: boolean): FeeRequest;
|
|
12
|
+
/** The `network` charge of a draft's details. */
|
|
13
|
+
export declare function networkFee(details: TonFeeDetails): bigint;
|
|
14
|
+
/** The fee draft: `expected` for native coin, `upper` with the attached value for jettons. */
|
|
15
|
+
export declare function tonFeeDraft(args: {
|
|
16
|
+
readonly speed: FeeSpeed | 'custom';
|
|
17
|
+
readonly details: TonFeeDetails;
|
|
18
|
+
/** Jetton transfers: how many jetton wallet messages carry `details.attached`. */
|
|
19
|
+
readonly jettonOutputs?: number;
|
|
20
|
+
readonly payer: string;
|
|
21
|
+
}): FeeEstimateDraft;
|
|
22
|
+
/**
|
|
23
|
+
* Parses `fee.details` back (drafts are stored records: plain data only). Strict: a
|
|
24
|
+
* missing or ill-typed field is refused, never filled with a default, so a damaged record
|
|
25
|
+
* cannot change what a transfer attaches or whether it deploys. `undefined` is absent, and
|
|
26
|
+
* keys the core adds (`requestedFee`) are not read.
|
|
27
|
+
*/
|
|
28
|
+
export declare function tonFeeDetails(details: Readonly<Record<string, unknown>>): TonFeeDetails;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_COINS = void 0;
|
|
4
|
+
exports.feeRequest = feeRequest;
|
|
5
|
+
exports.networkFee = networkFee;
|
|
6
|
+
exports.tonFeeDraft = tonFeeDraft;
|
|
7
|
+
exports.tonFeeDetails = tonFeeDetails;
|
|
8
|
+
/**
|
|
9
|
+
* The `ton` fee kind, pure: the `network` charge (import, gas and
|
|
10
|
+
* storage from the endpoint's emulation, plus every outgoing message's forward fee) and,
|
|
11
|
+
* for jettons, the `attached` charge whose unspent part the jetton wallet refunds. TON fees
|
|
12
|
+
* are fixed by the network config, so a speed changes nothing; the only override is the
|
|
13
|
+
* jetton `attached` value. Every amount is a bigint in nanograms, so no sum or product
|
|
14
|
+
* rounds. SDK-free.
|
|
15
|
+
*/
|
|
16
|
+
const error_1 = require("../../core/errors/error");
|
|
17
|
+
const fee_1 = require("../../core/model/fee");
|
|
18
|
+
/** The largest `Coins` value (TL-B `VarUInteger 16`): every nanogram amount on the wire. */
|
|
19
|
+
exports.MAX_COINS = (1n << 120n) - 1n;
|
|
20
|
+
const isCoins = (value) => typeof value === 'bigint' && value >= 0n && value <= exports.MAX_COINS;
|
|
21
|
+
/** Validates `TransferIntent.fee` for TON. */
|
|
22
|
+
function feeRequest(fee, jetton) {
|
|
23
|
+
if ((0, fee_1.isFeeSpeed)(fee))
|
|
24
|
+
return { speed: fee };
|
|
25
|
+
if (typeof fee !== 'object' || fee === null) {
|
|
26
|
+
throw new error_1.ValidationError('INVALID_INTENT', `a TON fee is a speed or an override object`);
|
|
27
|
+
}
|
|
28
|
+
const keys = Object.keys(fee).filter((key) => fee[key] !== undefined);
|
|
29
|
+
if (keys.some((key) => key !== 'attached')) {
|
|
30
|
+
throw new error_1.ValidationError('INVALID_INTENT', `a TON fee override takes only 'attached' (jetton transfers)`);
|
|
31
|
+
}
|
|
32
|
+
const attached = Object.hasOwn(fee, 'attached') ? fee.attached : undefined;
|
|
33
|
+
if (attached === undefined)
|
|
34
|
+
return { speed: 'custom' };
|
|
35
|
+
if (!jetton) {
|
|
36
|
+
throw new error_1.ValidationError('INVALID_INTENT', `'attached' applies to jetton transfers only`);
|
|
37
|
+
}
|
|
38
|
+
// Encoded as Coins in each jetton wallet message: range-checked here with a fixed text,
|
|
39
|
+
// never left to the encoder to wrap or throw.
|
|
40
|
+
if (!isCoins(attached) || attached === 0n) {
|
|
41
|
+
throw new error_1.ValidationError('INVALID_INTENT', `'attached' must be a bigint in [1, 2^120 - 1] (nanograms)`);
|
|
42
|
+
}
|
|
43
|
+
return { speed: 'custom', attached };
|
|
44
|
+
}
|
|
45
|
+
/** The `network` charge of a draft's details. */
|
|
46
|
+
function networkFee(details) {
|
|
47
|
+
return details.importFee + details.gasFee + details.storageFee + details.forwardFee;
|
|
48
|
+
}
|
|
49
|
+
/** The fee draft: `expected` for native coin, `upper` with the attached value for jettons. */
|
|
50
|
+
function tonFeeDraft(args) {
|
|
51
|
+
// A draft is a stored record of plain data: only what `tonFeeDetails` reads back.
|
|
52
|
+
const details = tonFeeDetails({ ...args.details });
|
|
53
|
+
const outputs = args.jettonOutputs;
|
|
54
|
+
if ((outputs === undefined) !== (details.attached === undefined)) {
|
|
55
|
+
throw new error_1.ValidationError('INVALID_INTENT', 'a TON jetton fee needs both its outputs and its attached value');
|
|
56
|
+
}
|
|
57
|
+
const charges = [
|
|
58
|
+
{ asset: 'native', amount: networkFee(details), label: 'network' },
|
|
59
|
+
];
|
|
60
|
+
if (outputs !== undefined) {
|
|
61
|
+
if (!Number.isSafeInteger(outputs) || outputs < 1) {
|
|
62
|
+
throw new error_1.ValidationError('INVALID_INTENT', 'a TON jetton fee needs a positive whole number of outputs');
|
|
63
|
+
}
|
|
64
|
+
charges.push({
|
|
65
|
+
asset: 'native',
|
|
66
|
+
amount: details.attached * BigInt(outputs),
|
|
67
|
+
label: 'attached',
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
kind: 'ton',
|
|
72
|
+
speed: args.speed,
|
|
73
|
+
charges,
|
|
74
|
+
bound: outputs !== undefined ? 'upper' : 'expected',
|
|
75
|
+
payer: args.payer,
|
|
76
|
+
details: { ...details },
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Parses `fee.details` back (drafts are stored records: plain data only). Strict: a
|
|
81
|
+
* missing or ill-typed field is refused, never filled with a default, so a damaged record
|
|
82
|
+
* cannot change what a transfer attaches or whether it deploys. `undefined` is absent, and
|
|
83
|
+
* keys the core adds (`requestedFee`) are not read.
|
|
84
|
+
*/
|
|
85
|
+
function tonFeeDetails(details) {
|
|
86
|
+
const field = (key) => Object.hasOwn(details, key) ? details[key] : undefined;
|
|
87
|
+
const refuse = (key) => {
|
|
88
|
+
throw new error_1.ValidationError('INVALID_INTENT', `the TON fee has no valid '${key}'`);
|
|
89
|
+
};
|
|
90
|
+
const coins = (key) => {
|
|
91
|
+
const value = field(key);
|
|
92
|
+
return isCoins(value) ? value : refuse(key);
|
|
93
|
+
};
|
|
94
|
+
const source = field('forwardFeeSource');
|
|
95
|
+
if (source !== 'emulated' && source !== 'computed')
|
|
96
|
+
refuse('forwardFeeSource');
|
|
97
|
+
const deploy = field('deploy');
|
|
98
|
+
if (typeof deploy !== 'boolean')
|
|
99
|
+
refuse('deploy');
|
|
100
|
+
const result = {
|
|
101
|
+
importFee: coins('importFee'),
|
|
102
|
+
gasFee: coins('gasFee'),
|
|
103
|
+
storageFee: coins('storageFee'),
|
|
104
|
+
forwardFee: coins('forwardFee'),
|
|
105
|
+
forwardFeeSource: source,
|
|
106
|
+
deploy: deploy,
|
|
107
|
+
};
|
|
108
|
+
let attached;
|
|
109
|
+
if (field('attached') !== undefined) {
|
|
110
|
+
attached = coins('attached');
|
|
111
|
+
if (attached === 0n)
|
|
112
|
+
refuse('attached');
|
|
113
|
+
}
|
|
114
|
+
const forwardAmount = field('forwardAmount') !== undefined ? coins('forwardAmount') : undefined;
|
|
115
|
+
return {
|
|
116
|
+
...result,
|
|
117
|
+
...(attached !== undefined ? { attached } : {}),
|
|
118
|
+
...(forwardAmount !== undefined ? { forwardAmount } : {}),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=fees.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fees.js","sourceRoot":"","sources":["../../../src/adapters/ton/fees.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The `ton` fee kind, pure: the `network` charge (import, gas and\n * storage from the endpoint's emulation, plus every outgoing message's forward fee) and,\n * for jettons, the `attached` charge whose unspent part the jetton wallet refunds. TON fees\n * are fixed by the network config, so a speed changes nothing; the only override is the\n * jetton `attached` value. Every amount is a bigint in nanograms, so no sum or product\n * rounds. SDK-free.\n */\nimport { ValidationError } from '../../core/errors/error';\nimport {\n isFeeSpeed,\n type FeeEstimateDraft,\n type FeeOverride,\n type FeeSpeed,\n} from '../../core/model/fee';\nimport type { TonFeeDetails } from './types';\n\n/** The largest `Coins` value (TL-B `VarUInteger 16`): every nanogram amount on the wire. */\nexport const MAX_COINS = (1n << 120n) - 1n;\n\nconst isCoins = (value: unknown): value is bigint =>\n typeof value === 'bigint' && value >= 0n && value <= MAX_COINS;\n\nexport interface FeeRequest {\n readonly speed: FeeSpeed | 'custom';\n /** Jettons only: the override, or `undefined` for the network's default. */\n readonly attached?: bigint;\n}\n\n/** Validates `TransferIntent.fee` for TON. */\nexport function feeRequest(fee: FeeSpeed | FeeOverride, jetton: boolean): FeeRequest {\n if (isFeeSpeed(fee)) return { speed: fee };\n if (typeof fee !== 'object' || fee === null) {\n throw new ValidationError(\n 'INVALID_INTENT',\n `a TON fee is a speed or an override object`,\n );\n }\n const keys = Object.keys(fee).filter((key) => fee[key] !== undefined);\n if (keys.some((key) => key !== 'attached')) {\n throw new ValidationError(\n 'INVALID_INTENT',\n `a TON fee override takes only 'attached' (jetton transfers)`,\n );\n }\n const attached = Object.hasOwn(fee, 'attached') ? fee.attached : undefined;\n if (attached === undefined) return { speed: 'custom' };\n if (!jetton) {\n throw new ValidationError(\n 'INVALID_INTENT',\n `'attached' applies to jetton transfers only`,\n );\n }\n // Encoded as Coins in each jetton wallet message: range-checked here with a fixed text,\n // never left to the encoder to wrap or throw.\n if (!isCoins(attached) || attached === 0n) {\n throw new ValidationError(\n 'INVALID_INTENT',\n `'attached' must be a bigint in [1, 2^120 - 1] (nanograms)`,\n );\n }\n return { speed: 'custom', attached };\n}\n\n/** The `network` charge of a draft's details. */\nexport function networkFee(details: TonFeeDetails): bigint {\n return details.importFee + details.gasFee + details.storageFee + details.forwardFee;\n}\n\n/** The fee draft: `expected` for native coin, `upper` with the attached value for jettons. */\nexport function tonFeeDraft(args: {\n readonly speed: FeeSpeed | 'custom';\n readonly details: TonFeeDetails;\n /** Jetton transfers: how many jetton wallet messages carry `details.attached`. */\n readonly jettonOutputs?: number;\n readonly payer: string;\n}): FeeEstimateDraft {\n // A draft is a stored record of plain data: only what `tonFeeDetails` reads back.\n const details = tonFeeDetails({ ...args.details });\n const outputs = args.jettonOutputs;\n if ((outputs === undefined) !== (details.attached === undefined)) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'a TON jetton fee needs both its outputs and its attached value',\n );\n }\n const charges = [\n { asset: 'native' as const, amount: networkFee(details), label: 'network' },\n ];\n if (outputs !== undefined) {\n if (!Number.isSafeInteger(outputs) || outputs < 1) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'a TON jetton fee needs a positive whole number of outputs',\n );\n }\n charges.push({\n asset: 'native',\n amount: (details.attached as bigint) * BigInt(outputs),\n label: 'attached',\n });\n }\n return {\n kind: 'ton',\n speed: args.speed,\n charges,\n bound: outputs !== undefined ? 'upper' : 'expected',\n payer: args.payer,\n details: { ...details },\n };\n}\n\n/**\n * Parses `fee.details` back (drafts are stored records: plain data only). Strict: a\n * missing or ill-typed field is refused, never filled with a default, so a damaged record\n * cannot change what a transfer attaches or whether it deploys. `undefined` is absent, and\n * keys the core adds (`requestedFee`) are not read.\n */\nexport function tonFeeDetails(details: Readonly<Record<string, unknown>>): TonFeeDetails {\n const field = (key: string): unknown =>\n Object.hasOwn(details, key) ? details[key] : undefined;\n const refuse = (key: string): never => {\n throw new ValidationError('INVALID_INTENT', `the TON fee has no valid '${key}'`);\n };\n const coins = (key: string): bigint => {\n const value = field(key);\n return isCoins(value) ? value : refuse(key);\n };\n const source = field('forwardFeeSource');\n if (source !== 'emulated' && source !== 'computed') refuse('forwardFeeSource');\n const deploy = field('deploy');\n if (typeof deploy !== 'boolean') refuse('deploy');\n const result: TonFeeDetails = {\n importFee: coins('importFee'),\n gasFee: coins('gasFee'),\n storageFee: coins('storageFee'),\n forwardFee: coins('forwardFee'),\n forwardFeeSource: source as TonFeeDetails['forwardFeeSource'],\n deploy: deploy as boolean,\n };\n let attached: bigint | undefined;\n if (field('attached') !== undefined) {\n attached = coins('attached');\n if (attached === 0n) refuse('attached');\n }\n const forwardAmount =\n field('forwardAmount') !== undefined ? coins('forwardAmount') : undefined;\n return {\n ...result,\n ...(attached !== undefined ? { attached } : {}),\n ...(forwardAmount !== undefined ? { forwardAmount } : {}),\n };\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `crypto-aio/ton`: the SDK-free TON types, the family's peer dependencies and
|
|
3
|
+
* capabilities, and the `crypto-aio/native` client type: importing this entry types
|
|
4
|
+
* `native(bc, '@ton/ton')` as a `TonClient`.
|
|
5
|
+
*
|
|
6
|
+
* @module crypto-aio/ton
|
|
7
|
+
*/
|
|
8
|
+
import type { TonClient } from '@ton/ton';
|
|
9
|
+
declare module '../../index' {
|
|
10
|
+
interface NativeClientMap {
|
|
11
|
+
'@ton/ton': TonClient;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export { TON_PEER_DEPENDENCIES } from './plugin';
|
|
15
|
+
export { TON_CAPABILITIES, TON_INDEXER_CAPABILITIES } from './network';
|
|
16
|
+
export type { TonExt, TonFeeDetails, TonFeeOverride, TonSeqnoOrdering, TonWalletIdentity, TonWalletVersion, } from './types';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TON_INDEXER_CAPABILITIES = exports.TON_CAPABILITIES = exports.TON_PEER_DEPENDENCIES = void 0;
|
|
4
|
+
var plugin_1 = require("./plugin");
|
|
5
|
+
Object.defineProperty(exports, "TON_PEER_DEPENDENCIES", { enumerable: true, get: function () { return plugin_1.TON_PEER_DEPENDENCIES; } });
|
|
6
|
+
var network_1 = require("./network");
|
|
7
|
+
Object.defineProperty(exports, "TON_CAPABILITIES", { enumerable: true, get: function () { return network_1.TON_CAPABILITIES; } });
|
|
8
|
+
Object.defineProperty(exports, "TON_INDEXER_CAPABILITIES", { enumerable: true, get: function () { return network_1.TON_INDEXER_CAPABILITIES; } });
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/ton/index.ts"],"names":[],"mappings":";;;AAgBA,mCAAiD;AAAxC,+GAAA,qBAAqB,OAAA;AAC9B,qCAAuE;AAA9D,2GAAA,gBAAgB,OAAA;AAAE,mHAAA,wBAAwB,OAAA","sourcesContent":["/**\n * `crypto-aio/ton`: the SDK-free TON types, the family's peer dependencies and\n * capabilities, and the `crypto-aio/native` client type: importing this entry types\n * `native(bc, '@ton/ton')` as a `TonClient`.\n *\n * @module crypto-aio/ton\n */\nimport type { TonClient } from '@ton/ton';\n\n// Through the package entry, as users augment 'crypto-aio'. SDK types appear only here.\ndeclare module '../../index' {\n interface NativeClientMap {\n '@ton/ton': TonClient;\n }\n}\n\nexport { TON_PEER_DEPENDENCIES } from './plugin';\nexport { TON_CAPABILITIES, TON_INDEXER_CAPABILITIES } from './network';\nexport type {\n TonExt,\n TonFeeDetails,\n TonFeeOverride,\n TonSeqnoOrdering,\n TonWalletIdentity,\n TonWalletVersion,\n} from './types';\n"]}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TON message bodies over `@ton/core`: text comments (the memo), native transfers, TEP-74
|
|
3
|
+
* jetton transfers, and the decoders the verdict and history paths use. Loaded only
|
|
4
|
+
* through the adapter manifest's `load()`.
|
|
5
|
+
*/
|
|
6
|
+
import { Address, Cell, type MessageRelaxed } from '@ton/core';
|
|
7
|
+
/** TEP-74 op codes, and the text-comment op (0). */
|
|
8
|
+
export declare const OP: Readonly<{
|
|
9
|
+
comment: 0;
|
|
10
|
+
jettonTransfer: 260734629;
|
|
11
|
+
jettonInternalTransfer: 395134233;
|
|
12
|
+
jettonNotification: 1935855772;
|
|
13
|
+
jettonExcesses: 3576854235;
|
|
14
|
+
w5SignedExternal: 1936287598;
|
|
15
|
+
w5SignedInternal: 1936289396;
|
|
16
|
+
}>;
|
|
17
|
+
/** The longest memo, in UTF-8 bytes (library policy: comments stay a few cells). */
|
|
18
|
+
export declare const MAX_MEMO_BYTES = 1024;
|
|
19
|
+
/**
|
|
20
|
+
* The longest provider text `addressFromBoc` decodes (untrusted text is capped before
|
|
21
|
+
* decoding). An address is one cell of at most 1023 bits, under 200 base64 characters as
|
|
22
|
+
* a BOC; the rest leaves room for a slice that still carries refs, so a jetton wallet is
|
|
23
|
+
* never refused for its encoding.
|
|
24
|
+
*/
|
|
25
|
+
export declare const MAX_ADDRESS_BOC_LENGTH = 4096;
|
|
26
|
+
export { MAX_BODY_BOC_LENGTH, MAX_BODY_CELLS } from './api';
|
|
27
|
+
/**
|
|
28
|
+
* The most cells a comment's snake chain may span. A cell holds at most 127 bytes, so a
|
|
29
|
+
* memo of `MAX_MEMO_BYTES` spans 9 cells; 256 cells (about 32 KB of text) keeps the
|
|
30
|
+
* longer comments other wallets write readable while bounding the work on an untrusted
|
|
31
|
+
* body. A longer chain reads as no comment.
|
|
32
|
+
*/
|
|
33
|
+
export declare const MAX_COMMENT_CELLS = 256;
|
|
34
|
+
/**
|
|
35
|
+
* The SDK's `Address` for a raw address, parsed strictly: `Address.parseRaw` takes any
|
|
36
|
+
* `parseInt` workchain and throws a bare `Error`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function sdkAddress(raw: string): Address;
|
|
39
|
+
export declare function memoBytes(memo: string): number;
|
|
40
|
+
/** A text comment: op 0, then the UTF-8 text as a snake string. */
|
|
41
|
+
export declare function commentCell(memo: string): Cell;
|
|
42
|
+
/** A native transfer of `value` nanograms; `bounce` comes from the recipient's address. */
|
|
43
|
+
export declare function nativeMessage(args: {
|
|
44
|
+
readonly to: string;
|
|
45
|
+
readonly value: bigint;
|
|
46
|
+
readonly bounce: boolean;
|
|
47
|
+
readonly memo?: string;
|
|
48
|
+
}): MessageRelaxed;
|
|
49
|
+
/**
|
|
50
|
+
* A TEP-74 `transfer` to the sender's own jetton wallet: `amount` base units to the owner
|
|
51
|
+
* `destination`, excess back to `responseDestination`, and `forwardAmount` nanograms with
|
|
52
|
+
* the memo (if any) as the recipient's notification payload.
|
|
53
|
+
*/
|
|
54
|
+
export declare function jettonMessage(args: {
|
|
55
|
+
readonly jettonWallet: string;
|
|
56
|
+
readonly attached: bigint;
|
|
57
|
+
readonly queryId: bigint;
|
|
58
|
+
readonly amount: bigint;
|
|
59
|
+
readonly destination: string;
|
|
60
|
+
readonly responseDestination: string;
|
|
61
|
+
readonly forwardAmount: bigint;
|
|
62
|
+
readonly memo?: string;
|
|
63
|
+
}): MessageRelaxed;
|
|
64
|
+
/** A one-cell slice holding `raw`: the `get_wallet_address` argument, as base64 BOC. */
|
|
65
|
+
export declare function addressArgument(raw: string): string;
|
|
66
|
+
/** The address a get-method returned in a cell or slice (base64 BOC); null if none. */
|
|
67
|
+
export declare function addressFromBoc(boc: string): string | null;
|
|
68
|
+
/**
|
|
69
|
+
* The text of a comment body, or undefined for any other body. The snake string is read
|
|
70
|
+
* in one pass: `@ton/core`'s `loadStringTail` recurses per cell and concatenates at each
|
|
71
|
+
* level, which is quadratic in the chain length (3.6 s for one 1 MB comment). Past
|
|
72
|
+
* `MAX_COMMENT_CELLS` cells, or for a cell that is not a whole number of bytes with at
|
|
73
|
+
* most one ref, it is no comment.
|
|
74
|
+
*/
|
|
75
|
+
export declare function decodeComment(body: Cell): string | undefined;
|
|
76
|
+
export interface JettonTransferBody {
|
|
77
|
+
readonly queryId: bigint;
|
|
78
|
+
readonly amount: bigint;
|
|
79
|
+
readonly destination: string;
|
|
80
|
+
/** Where the excess goes; null for `addr_none` or a workchain other than 0 or -1. */
|
|
81
|
+
readonly responseDestination: string | null;
|
|
82
|
+
/** Whether a `custom_payload` rides along (for the jetton wallet's own code). */
|
|
83
|
+
readonly customPayload: boolean;
|
|
84
|
+
readonly forwardAmount: bigint;
|
|
85
|
+
readonly comment?: string;
|
|
86
|
+
}
|
|
87
|
+
/** A TEP-74 `transfer` body, or null for any other body. */
|
|
88
|
+
export declare function decodeJettonTransfer(body: Cell): JettonTransferBody | null;
|
|
89
|
+
export interface JettonInternalTransferBody {
|
|
90
|
+
readonly queryId: bigint;
|
|
91
|
+
readonly amount: bigint;
|
|
92
|
+
/** The sending owner, when the body names one. */
|
|
93
|
+
readonly from: string | null;
|
|
94
|
+
readonly comment?: string;
|
|
95
|
+
}
|
|
96
|
+
/** A TEP-74 `internal_transfer` body, or null for any other body. */
|
|
97
|
+
export declare function decodeJettonInternalTransfer(body: Cell): JettonInternalTransferBody | null;
|
|
98
|
+
export interface JettonNotificationBody {
|
|
99
|
+
readonly queryId: bigint;
|
|
100
|
+
readonly amount: bigint;
|
|
101
|
+
/** The sending owner, when the body names one. */
|
|
102
|
+
readonly sender: string | null;
|
|
103
|
+
readonly comment?: string;
|
|
104
|
+
}
|
|
105
|
+
/** A TEP-74 `transfer_notification` body, or null for any other body. */
|
|
106
|
+
export declare function decodeJettonNotification(body: Cell): JettonNotificationBody | null;
|
|
107
|
+
export interface WalletRequest {
|
|
108
|
+
/**
|
|
109
|
+
* `internal`: a W5 signed request relayed in an internal message (gasless). Anyone can
|
|
110
|
+
* post such a body: it proves nothing until `requestIsOwn` authenticates it.
|
|
111
|
+
*/
|
|
112
|
+
readonly auth: 'external' | 'internal';
|
|
113
|
+
/** v4r2: the subwallet id; v5r1: the signed 32-bit wallet id. */
|
|
114
|
+
readonly walletId: number;
|
|
115
|
+
readonly seqno: number;
|
|
116
|
+
readonly validUntil: number;
|
|
117
|
+
readonly messages: readonly MessageRelaxed[];
|
|
118
|
+
/** Each message's send mode, as the wallet reads it (`modes[i]` for `messages[i]`). */
|
|
119
|
+
readonly modes: readonly number[];
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The signed header of an external wallet request, read alone, as the proof reads a
|
|
123
|
+
* consumer's seqno, so that the replay guard knows stored bytes whose message list does
|
|
124
|
+
* not decode: a W5 request's (its op, then the wallet id, `valid_until` and seqno, in a
|
|
125
|
+
* body of exactly a W5 request's length) or a v4r2 request's (after the signature,
|
|
126
|
+
* whatever the op). Null when the body cannot hold one. Nothing here says whose request
|
|
127
|
+
* it is.
|
|
128
|
+
*/
|
|
129
|
+
export declare function requestHeaderOf(body: Cell): {
|
|
130
|
+
readonly walletId: number;
|
|
131
|
+
readonly validUntil: number;
|
|
132
|
+
readonly seqno: number;
|
|
133
|
+
} | null;
|
|
134
|
+
/**
|
|
135
|
+
* The signed request inside a v4r2 or v5r1 external message body: its seqno, lifetime and
|
|
136
|
+
* the internal messages it asks for. Null for anything else (another wallet, a plugin or
|
|
137
|
+
* extension request): the verdict then has no evidence and decides nothing.
|
|
138
|
+
*/
|
|
139
|
+
export declare function decodeWalletRequest(body: Cell): WalletRequest | null;
|
|
140
|
+
/** A message's destination (raw), value and body hash (hex), for matching on chain. */
|
|
141
|
+
export declare function messageFacts(message: MessageRelaxed): {
|
|
142
|
+
readonly to: string;
|
|
143
|
+
readonly value: bigint;
|
|
144
|
+
readonly bodyHash: string;
|
|
145
|
+
readonly body: Cell;
|
|
146
|
+
} | null;
|
|
147
|
+
/** A body cell from a base64 BOC; null when it does not parse. */
|
|
148
|
+
export declare function cellFromBoc(boc: string | null | undefined): Cell | null;
|
|
149
|
+
/**
|
|
150
|
+
* An indexed message's body, bound to the body hash the quorum keyed. A body that does
|
|
151
|
+
* not parse or hash to `bodyHash`, or that comes without one, is a malformed answer
|
|
152
|
+
* (retryable): no verdict or decoding ever reads an unbound body.
|
|
153
|
+
*/
|
|
154
|
+
export declare function messageBody(message: {
|
|
155
|
+
readonly body?: string;
|
|
156
|
+
readonly bodyHash?: string;
|
|
157
|
+
}): Cell | null;
|