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,397 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_COMMENT_CELLS = exports.MAX_BODY_CELLS = exports.MAX_BODY_BOC_LENGTH = exports.MAX_ADDRESS_BOC_LENGTH = exports.MAX_MEMO_BYTES = exports.OP = void 0;
|
|
4
|
+
exports.sdkAddress = sdkAddress;
|
|
5
|
+
exports.memoBytes = memoBytes;
|
|
6
|
+
exports.commentCell = commentCell;
|
|
7
|
+
exports.nativeMessage = nativeMessage;
|
|
8
|
+
exports.jettonMessage = jettonMessage;
|
|
9
|
+
exports.addressArgument = addressArgument;
|
|
10
|
+
exports.addressFromBoc = addressFromBoc;
|
|
11
|
+
exports.decodeComment = decodeComment;
|
|
12
|
+
exports.decodeJettonTransfer = decodeJettonTransfer;
|
|
13
|
+
exports.decodeJettonInternalTransfer = decodeJettonInternalTransfer;
|
|
14
|
+
exports.decodeJettonNotification = decodeJettonNotification;
|
|
15
|
+
exports.requestHeaderOf = requestHeaderOf;
|
|
16
|
+
exports.decodeWalletRequest = decodeWalletRequest;
|
|
17
|
+
exports.messageFacts = messageFacts;
|
|
18
|
+
exports.cellFromBoc = cellFromBoc;
|
|
19
|
+
exports.messageBody = messageBody;
|
|
20
|
+
/**
|
|
21
|
+
* TON message bodies over `@ton/core`: text comments (the memo), native transfers, TEP-74
|
|
22
|
+
* jetton transfers, and the decoders the verdict and history paths use. Loaded only
|
|
23
|
+
* through the adapter manifest's `load()`.
|
|
24
|
+
*/
|
|
25
|
+
const core_1 = require("@ton/core");
|
|
26
|
+
const error_1 = require("../../core/errors/error");
|
|
27
|
+
const address_1 = require("./address");
|
|
28
|
+
const api_1 = require("./api");
|
|
29
|
+
const fees_1 = require("./fees");
|
|
30
|
+
/** TEP-74 op codes, and the text-comment op (0). */
|
|
31
|
+
exports.OP = Object.freeze({
|
|
32
|
+
comment: 0,
|
|
33
|
+
jettonTransfer: 0x0f8a7ea5,
|
|
34
|
+
jettonInternalTransfer: 0x178d4519,
|
|
35
|
+
jettonNotification: 0x7362d09c,
|
|
36
|
+
jettonExcesses: 0xd53276db,
|
|
37
|
+
w5SignedExternal: 0x7369676e,
|
|
38
|
+
w5SignedInternal: 0x73696e74,
|
|
39
|
+
});
|
|
40
|
+
/** The longest memo, in UTF-8 bytes (library policy: comments stay a few cells). */
|
|
41
|
+
exports.MAX_MEMO_BYTES = 1024;
|
|
42
|
+
/**
|
|
43
|
+
* The longest provider text `addressFromBoc` decodes (untrusted text is capped before
|
|
44
|
+
* decoding). An address is one cell of at most 1023 bits, under 200 base64 characters as
|
|
45
|
+
* a BOC; the rest leaves room for a slice that still carries refs, so a jetton wallet is
|
|
46
|
+
* never refused for its encoding.
|
|
47
|
+
*/
|
|
48
|
+
exports.MAX_ADDRESS_BOC_LENGTH = 4096;
|
|
49
|
+
// The body limits (`MAX_BODY_CELLS`, `MAX_BODY_BOC_LENGTH`) and their header check live
|
|
50
|
+
// in the SDK-free `api.ts`, which bounds the cells it hands on the same way.
|
|
51
|
+
var api_2 = require("./api");
|
|
52
|
+
Object.defineProperty(exports, "MAX_BODY_BOC_LENGTH", { enumerable: true, get: function () { return api_2.MAX_BODY_BOC_LENGTH; } });
|
|
53
|
+
Object.defineProperty(exports, "MAX_BODY_CELLS", { enumerable: true, get: function () { return api_2.MAX_BODY_CELLS; } });
|
|
54
|
+
/**
|
|
55
|
+
* The most cells a comment's snake chain may span. A cell holds at most 127 bytes, so a
|
|
56
|
+
* memo of `MAX_MEMO_BYTES` spans 9 cells; 256 cells (about 32 KB of text) keeps the
|
|
57
|
+
* longer comments other wallets write readable while bounding the work on an untrusted
|
|
58
|
+
* body. A longer chain reads as no comment.
|
|
59
|
+
*/
|
|
60
|
+
exports.MAX_COMMENT_CELLS = 256;
|
|
61
|
+
/**
|
|
62
|
+
* An address read from an untrusted body, in raw form; null for a workchain other than 0
|
|
63
|
+
* or -1, which names no TON account.
|
|
64
|
+
*/
|
|
65
|
+
function toRaw(address) {
|
|
66
|
+
const workchain = address.workChain;
|
|
67
|
+
if (workchain !== 0 && workchain !== -1)
|
|
68
|
+
return null;
|
|
69
|
+
return (0, address_1.rawAddress)(workchain, address.hash);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The SDK's `Address` for a raw address, parsed strictly: `Address.parseRaw` takes any
|
|
73
|
+
* `parseInt` workchain and throws a bare `Error`.
|
|
74
|
+
*/
|
|
75
|
+
function sdkAddress(raw) {
|
|
76
|
+
const parsed = (0, address_1.parseTonAddress)(raw);
|
|
77
|
+
if (parsed?.form !== 'raw') {
|
|
78
|
+
throw new error_1.ValidationError('INVALID_ADDRESS', 'not a raw TON address');
|
|
79
|
+
}
|
|
80
|
+
return new core_1.Address(parsed.workchain, Buffer.from(parsed.hash));
|
|
81
|
+
}
|
|
82
|
+
const MAX_QUERY_ID = (1n << 64n) - 1n;
|
|
83
|
+
/**
|
|
84
|
+
* An amount that does not fit `Coins` is refused with a fixed text that never carries it
|
|
85
|
+
* (`@ton/core` would throw a bare `Error` naming the value).
|
|
86
|
+
*/
|
|
87
|
+
function coins(value) {
|
|
88
|
+
if (typeof value !== 'bigint' || value < 0n || value > fees_1.MAX_COINS) {
|
|
89
|
+
throw new error_1.ValidationError('INVALID_AMOUNT', 'a TON amount must be in [0, 2^120 - 1]');
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
/** A TEP-74 `query_id` is a uint64: range-checked here, never wrapped. */
|
|
94
|
+
function queryIdOf(value) {
|
|
95
|
+
if (typeof value !== 'bigint' || value < 0n || value > MAX_QUERY_ID) {
|
|
96
|
+
throw new error_1.ValidationError('INVALID_INTENT', 'a TON query id must be a uint64');
|
|
97
|
+
}
|
|
98
|
+
return value;
|
|
99
|
+
}
|
|
100
|
+
function memoBytes(memo) {
|
|
101
|
+
return Buffer.byteLength(memo, 'utf8');
|
|
102
|
+
}
|
|
103
|
+
/** A text comment: op 0, then the UTF-8 text as a snake string. */
|
|
104
|
+
function commentCell(memo) {
|
|
105
|
+
return (0, core_1.comment)(memo);
|
|
106
|
+
}
|
|
107
|
+
/** A native transfer of `value` nanograms; `bounce` comes from the recipient's address. */
|
|
108
|
+
function nativeMessage(args) {
|
|
109
|
+
return (0, core_1.internal)({
|
|
110
|
+
to: sdkAddress(args.to),
|
|
111
|
+
value: coins(args.value),
|
|
112
|
+
bounce: args.bounce,
|
|
113
|
+
...(args.memo !== undefined ? { body: commentCell(args.memo) } : {}),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* A TEP-74 `transfer` to the sender's own jetton wallet: `amount` base units to the owner
|
|
118
|
+
* `destination`, excess back to `responseDestination`, and `forwardAmount` nanograms with
|
|
119
|
+
* the memo (if any) as the recipient's notification payload.
|
|
120
|
+
*/
|
|
121
|
+
function jettonMessage(args) {
|
|
122
|
+
const to = sdkAddress(args.jettonWallet);
|
|
123
|
+
const attached = coins(args.attached);
|
|
124
|
+
const body = (0, core_1.beginCell)()
|
|
125
|
+
.storeUint(exports.OP.jettonTransfer, 32)
|
|
126
|
+
.storeUint(queryIdOf(args.queryId), 64)
|
|
127
|
+
.storeCoins(coins(args.amount))
|
|
128
|
+
.storeAddress(sdkAddress(args.destination))
|
|
129
|
+
.storeAddress(sdkAddress(args.responseDestination))
|
|
130
|
+
.storeMaybeRef(null)
|
|
131
|
+
.storeCoins(coins(args.forwardAmount));
|
|
132
|
+
if (args.memo !== undefined)
|
|
133
|
+
body.storeBit(true).storeRef(commentCell(args.memo));
|
|
134
|
+
else
|
|
135
|
+
body.storeBit(false);
|
|
136
|
+
return (0, core_1.internal)({
|
|
137
|
+
to,
|
|
138
|
+
value: attached,
|
|
139
|
+
bounce: true,
|
|
140
|
+
body: body.endCell(),
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/** A one-cell slice holding `raw`: the `get_wallet_address` argument, as base64 BOC. */
|
|
144
|
+
function addressArgument(raw) {
|
|
145
|
+
return (0, core_1.beginCell)().storeAddress(sdkAddress(raw)).endCell().toBoc().toString('base64');
|
|
146
|
+
}
|
|
147
|
+
/** The address a get-method returned in a cell or slice (base64 BOC); null if none. */
|
|
148
|
+
function addressFromBoc(boc) {
|
|
149
|
+
if (typeof boc !== 'string' || boc.length > exports.MAX_ADDRESS_BOC_LENGTH)
|
|
150
|
+
return null;
|
|
151
|
+
try {
|
|
152
|
+
const address = core_1.Cell.fromBoc(Buffer.from(boc, 'base64'))[0]
|
|
153
|
+
?.beginParse()
|
|
154
|
+
.loadMaybeAddress();
|
|
155
|
+
return address ? toRaw(address) : null;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* The text of a comment body, or undefined for any other body. The snake string is read
|
|
163
|
+
* in one pass: `@ton/core`'s `loadStringTail` recurses per cell and concatenates at each
|
|
164
|
+
* level, which is quadratic in the chain length (3.6 s for one 1 MB comment). Past
|
|
165
|
+
* `MAX_COMMENT_CELLS` cells, or for a cell that is not a whole number of bytes with at
|
|
166
|
+
* most one ref, it is no comment.
|
|
167
|
+
*/
|
|
168
|
+
function decodeComment(body) {
|
|
169
|
+
try {
|
|
170
|
+
let slice = body.beginParse();
|
|
171
|
+
if (slice.remainingBits < 32 || slice.loadUint(32) !== exports.OP.comment)
|
|
172
|
+
return undefined;
|
|
173
|
+
const chunks = [];
|
|
174
|
+
for (let cells = 1;; cells += 1) {
|
|
175
|
+
if (cells > exports.MAX_COMMENT_CELLS)
|
|
176
|
+
return undefined;
|
|
177
|
+
const bits = slice.remainingBits;
|
|
178
|
+
if (bits % 8 !== 0 || slice.remainingRefs > 1)
|
|
179
|
+
return undefined;
|
|
180
|
+
if (bits > 0)
|
|
181
|
+
chunks.push(slice.loadBuffer(bits / 8));
|
|
182
|
+
if (slice.remainingRefs === 0)
|
|
183
|
+
break;
|
|
184
|
+
slice = slice.loadRef().beginParse();
|
|
185
|
+
}
|
|
186
|
+
return Buffer.concat(chunks).toString('utf8');
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/** The comment carried in a `forward_payload:(Either Cell ^Cell)`, if it is one. */
|
|
193
|
+
function forwardComment(slice) {
|
|
194
|
+
if (slice.remainingBits < 1)
|
|
195
|
+
return undefined;
|
|
196
|
+
const inRef = slice.loadBit();
|
|
197
|
+
if (inRef)
|
|
198
|
+
return slice.remainingRefs > 0 ? decodeComment(slice.loadRef()) : undefined;
|
|
199
|
+
return decodeComment((0, core_1.beginCell)().storeSlice(slice).endCell());
|
|
200
|
+
}
|
|
201
|
+
/** A TEP-74 `transfer` body, or null for any other body. */
|
|
202
|
+
function decodeJettonTransfer(body) {
|
|
203
|
+
try {
|
|
204
|
+
const slice = body.beginParse();
|
|
205
|
+
if (slice.loadUint(32) !== exports.OP.jettonTransfer)
|
|
206
|
+
return null;
|
|
207
|
+
const queryId = slice.loadUintBig(64);
|
|
208
|
+
const amount = slice.loadCoins();
|
|
209
|
+
const destination = slice.loadAddress();
|
|
210
|
+
const response = slice.loadMaybeAddress();
|
|
211
|
+
const customPayload = slice.loadMaybeRef() !== null;
|
|
212
|
+
const forwardAmount = slice.loadCoins();
|
|
213
|
+
const memo = forwardComment(slice);
|
|
214
|
+
const recipient = toRaw(destination);
|
|
215
|
+
if (recipient === null)
|
|
216
|
+
return null;
|
|
217
|
+
return {
|
|
218
|
+
queryId,
|
|
219
|
+
amount,
|
|
220
|
+
destination: recipient,
|
|
221
|
+
responseDestination: response ? toRaw(response) : null,
|
|
222
|
+
customPayload,
|
|
223
|
+
forwardAmount,
|
|
224
|
+
...(memo !== undefined ? { comment: memo } : {}),
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/** A TEP-74 `internal_transfer` body, or null for any other body. */
|
|
232
|
+
function decodeJettonInternalTransfer(body) {
|
|
233
|
+
try {
|
|
234
|
+
const slice = body.beginParse();
|
|
235
|
+
if (slice.loadUint(32) !== exports.OP.jettonInternalTransfer)
|
|
236
|
+
return null;
|
|
237
|
+
const queryId = slice.loadUintBig(64);
|
|
238
|
+
const amount = slice.loadCoins();
|
|
239
|
+
const from = slice.loadMaybeAddress();
|
|
240
|
+
slice.loadMaybeAddress();
|
|
241
|
+
slice.loadCoins();
|
|
242
|
+
const memo = forwardComment(slice);
|
|
243
|
+
return {
|
|
244
|
+
queryId,
|
|
245
|
+
amount,
|
|
246
|
+
from: from ? toRaw(from) : null,
|
|
247
|
+
...(memo !== undefined ? { comment: memo } : {}),
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/** A TEP-74 `transfer_notification` body, or null for any other body. */
|
|
255
|
+
function decodeJettonNotification(body) {
|
|
256
|
+
try {
|
|
257
|
+
const slice = body.beginParse();
|
|
258
|
+
if (slice.loadUint(32) !== exports.OP.jettonNotification)
|
|
259
|
+
return null;
|
|
260
|
+
const queryId = slice.loadUintBig(64);
|
|
261
|
+
const amount = slice.loadCoins();
|
|
262
|
+
const sender = slice.loadMaybeAddress();
|
|
263
|
+
const memo = forwardComment(slice);
|
|
264
|
+
return {
|
|
265
|
+
queryId,
|
|
266
|
+
amount,
|
|
267
|
+
sender: sender ? toRaw(sender) : null,
|
|
268
|
+
...(memo !== undefined ? { comment: memo } : {}),
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/** A W5 external request's bits: op, wallet id, `valid_until`, seqno, two flags, signature. */
|
|
276
|
+
const W5_EXTERNAL_BITS = 32 + 32 + 32 + 32 + 1 + 1 + 512;
|
|
277
|
+
/** A v4r2 request's least bits: signature, subwallet id, `valid_until`, seqno. */
|
|
278
|
+
const V4_HEADER_BITS = 512 + 32 + 32 + 32;
|
|
279
|
+
/**
|
|
280
|
+
* The signed header of an external wallet request, read alone, as the proof reads a
|
|
281
|
+
* consumer's seqno, so that the replay guard knows stored bytes whose message list does
|
|
282
|
+
* not decode: a W5 request's (its op, then the wallet id, `valid_until` and seqno, in a
|
|
283
|
+
* body of exactly a W5 request's length) or a v4r2 request's (after the signature,
|
|
284
|
+
* whatever the op). Null when the body cannot hold one. Nothing here says whose request
|
|
285
|
+
* it is.
|
|
286
|
+
*/
|
|
287
|
+
function requestHeaderOf(body) {
|
|
288
|
+
try {
|
|
289
|
+
const bits = body.bits.length;
|
|
290
|
+
const s = body.beginParse();
|
|
291
|
+
const w5 = bits === W5_EXTERNAL_BITS && s.preloadUint(32) === exports.OP.w5SignedExternal;
|
|
292
|
+
if (!w5 && bits < V4_HEADER_BITS)
|
|
293
|
+
return null;
|
|
294
|
+
s.skip(w5 ? 32 : 512);
|
|
295
|
+
const walletId = w5 ? s.loadInt(32) : s.loadUint(32);
|
|
296
|
+
const validUntil = s.loadUint(32);
|
|
297
|
+
return { walletId, validUntil, seqno: s.loadUint(32) };
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* The signed request inside a v4r2 or v5r1 external message body: its seqno, lifetime and
|
|
305
|
+
* the internal messages it asks for. Null for anything else (another wallet, a plugin or
|
|
306
|
+
* extension request): the verdict then has no evidence and decides nothing.
|
|
307
|
+
*/
|
|
308
|
+
function decodeWalletRequest(body) {
|
|
309
|
+
try {
|
|
310
|
+
const bits = body.bits.length;
|
|
311
|
+
const head = body.beginParse();
|
|
312
|
+
const op = bits >= 32 ? head.preloadUint(32) : undefined;
|
|
313
|
+
if (op === exports.OP.w5SignedExternal || op === exports.OP.w5SignedInternal) {
|
|
314
|
+
const s = body.beginParse();
|
|
315
|
+
s.skip(32);
|
|
316
|
+
const walletId = s.loadInt(32);
|
|
317
|
+
const validUntil = s.loadUint(32);
|
|
318
|
+
const seqno = s.loadUint(32);
|
|
319
|
+
const list = s.loadMaybeRef();
|
|
320
|
+
if (s.loadBit())
|
|
321
|
+
return null; // extended actions: not a plain transfer
|
|
322
|
+
if (s.remainingBits !== 512 || s.remainingRefs !== 0)
|
|
323
|
+
return null;
|
|
324
|
+
const actions = list ? (0, core_1.loadOutList)(list.beginParse()) : [];
|
|
325
|
+
const messages = [];
|
|
326
|
+
const modes = [];
|
|
327
|
+
for (const action of actions) {
|
|
328
|
+
if (action.type !== 'sendMsg')
|
|
329
|
+
return null;
|
|
330
|
+
messages.push(action.outMsg);
|
|
331
|
+
modes.push(action.mode);
|
|
332
|
+
}
|
|
333
|
+
const auth = op === exports.OP.w5SignedExternal ? 'external' : 'internal';
|
|
334
|
+
return { auth, walletId, seqno, validUntil, messages, modes };
|
|
335
|
+
}
|
|
336
|
+
const s = body.beginParse();
|
|
337
|
+
s.skip(512);
|
|
338
|
+
const walletId = s.loadUint(32);
|
|
339
|
+
const validUntil = s.loadUint(32);
|
|
340
|
+
const seqno = s.loadUint(32);
|
|
341
|
+
if (s.loadUint(8) !== 0)
|
|
342
|
+
return null; // v4 op 0: simple send
|
|
343
|
+
const messages = [];
|
|
344
|
+
const modes = [];
|
|
345
|
+
while (s.remainingRefs > 0) {
|
|
346
|
+
modes.push(s.loadUint(8));
|
|
347
|
+
messages.push((0, core_1.loadMessageRelaxed)(s.loadRef().beginParse()));
|
|
348
|
+
}
|
|
349
|
+
if (s.remainingBits !== 0)
|
|
350
|
+
return null;
|
|
351
|
+
return { auth: 'external', walletId, seqno, validUntil, messages, modes };
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
return null;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
/** A message's destination (raw), value and body hash (hex), for matching on chain. */
|
|
358
|
+
function messageFacts(message) {
|
|
359
|
+
if (message.info.type !== 'internal')
|
|
360
|
+
return null;
|
|
361
|
+
const to = toRaw(message.info.dest);
|
|
362
|
+
if (to === null)
|
|
363
|
+
return null;
|
|
364
|
+
return {
|
|
365
|
+
to,
|
|
366
|
+
value: message.info.value.coins,
|
|
367
|
+
bodyHash: message.body.hash().toString('hex'),
|
|
368
|
+
body: message.body,
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
/** A body cell from a base64 BOC; null when it does not parse. */
|
|
372
|
+
function cellFromBoc(boc) {
|
|
373
|
+
if (typeof boc !== 'string' || !(0, api_1.bocWithinLimits)(boc))
|
|
374
|
+
return null;
|
|
375
|
+
try {
|
|
376
|
+
const cells = core_1.Cell.fromBoc(Buffer.from(boc, 'base64'));
|
|
377
|
+
return cells.length === 1 ? cells[0] : null;
|
|
378
|
+
}
|
|
379
|
+
catch {
|
|
380
|
+
return null;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* An indexed message's body, bound to the body hash the quorum keyed. A body that does
|
|
385
|
+
* not parse or hash to `bodyHash`, or that comes without one, is a malformed answer
|
|
386
|
+
* (retryable): no verdict or decoding ever reads an unbound body.
|
|
387
|
+
*/
|
|
388
|
+
function messageBody(message) {
|
|
389
|
+
if (message.body === undefined)
|
|
390
|
+
return null;
|
|
391
|
+
const cell = cellFromBoc(message.body);
|
|
392
|
+
if (!cell || !message.bodyHash || cell.hash().toString('hex') !== message.bodyHash) {
|
|
393
|
+
throw new error_1.ProviderError('PROVIDER_UNAVAILABLE', 'the indexer returned a message body that does not match its hash', { retryable: true });
|
|
394
|
+
}
|
|
395
|
+
return cell;
|
|
396
|
+
}
|
|
397
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/adapters/ton/messages.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TON message bodies over `@ton/core`: text comments (the memo), native transfers, TEP-74\n * jetton transfers, and the decoders the verdict and history paths use. Loaded only\n * through the adapter manifest's `load()`.\n */\nimport {\n Address,\n Cell,\n beginCell,\n comment,\n internal,\n loadMessageRelaxed,\n loadOutList,\n type MessageRelaxed,\n} from '@ton/core';\nimport { ProviderError, ValidationError } from '../../core/errors/error';\nimport { parseTonAddress, rawAddress, type TonWorkchain } from './address';\nimport { bocWithinLimits } from './api';\nimport { MAX_COINS } from './fees';\n\n/** TEP-74 op codes, and the text-comment op (0). */\nexport const OP = Object.freeze({\n comment: 0,\n jettonTransfer: 0x0f8a7ea5,\n jettonInternalTransfer: 0x178d4519,\n jettonNotification: 0x7362d09c,\n jettonExcesses: 0xd53276db,\n w5SignedExternal: 0x7369676e,\n w5SignedInternal: 0x73696e74,\n});\n\n/** The longest memo, in UTF-8 bytes (library policy: comments stay a few cells). */\nexport const MAX_MEMO_BYTES = 1024;\n\n/**\n * The longest provider text `addressFromBoc` decodes (untrusted text is capped before\n * decoding). An address is one cell of at most 1023 bits, under 200 base64 characters as\n * a BOC; the rest leaves room for a slice that still carries refs, so a jetton wallet is\n * never refused for its encoding.\n */\nexport const MAX_ADDRESS_BOC_LENGTH = 4096;\n\n// The body limits (`MAX_BODY_CELLS`, `MAX_BODY_BOC_LENGTH`) and their header check live\n// in the SDK-free `api.ts`, which bounds the cells it hands on the same way.\nexport { MAX_BODY_BOC_LENGTH, MAX_BODY_CELLS } from './api';\n\n/**\n * The most cells a comment's snake chain may span. A cell holds at most 127 bytes, so a\n * memo of `MAX_MEMO_BYTES` spans 9 cells; 256 cells (about 32 KB of text) keeps the\n * longer comments other wallets write readable while bounding the work on an untrusted\n * body. A longer chain reads as no comment.\n */\nexport const MAX_COMMENT_CELLS = 256;\n\n/**\n * An address read from an untrusted body, in raw form; null for a workchain other than 0\n * or -1, which names no TON account.\n */\nfunction toRaw(address: Address): string | null {\n const workchain = address.workChain;\n if (workchain !== 0 && workchain !== -1) return null;\n return rawAddress(workchain as TonWorkchain, address.hash);\n}\n\n/**\n * The SDK's `Address` for a raw address, parsed strictly: `Address.parseRaw` takes any\n * `parseInt` workchain and throws a bare `Error`.\n */\nexport function sdkAddress(raw: string): Address {\n const parsed = parseTonAddress(raw);\n if (parsed?.form !== 'raw') {\n throw new ValidationError('INVALID_ADDRESS', 'not a raw TON address');\n }\n return new Address(parsed.workchain, Buffer.from(parsed.hash));\n}\n\nconst MAX_QUERY_ID = (1n << 64n) - 1n;\n\n/**\n * An amount that does not fit `Coins` is refused with a fixed text that never carries it\n * (`@ton/core` would throw a bare `Error` naming the value).\n */\nfunction coins(value: bigint): bigint {\n if (typeof value !== 'bigint' || value < 0n || value > MAX_COINS) {\n throw new ValidationError('INVALID_AMOUNT', 'a TON amount must be in [0, 2^120 - 1]');\n }\n return value;\n}\n\n/** A TEP-74 `query_id` is a uint64: range-checked here, never wrapped. */\nfunction queryIdOf(value: bigint): bigint {\n if (typeof value !== 'bigint' || value < 0n || value > MAX_QUERY_ID) {\n throw new ValidationError('INVALID_INTENT', 'a TON query id must be a uint64');\n }\n return value;\n}\n\nexport function memoBytes(memo: string): number {\n return Buffer.byteLength(memo, 'utf8');\n}\n\n/** A text comment: op 0, then the UTF-8 text as a snake string. */\nexport function commentCell(memo: string): Cell {\n return comment(memo);\n}\n\n/** A native transfer of `value` nanograms; `bounce` comes from the recipient's address. */\nexport function nativeMessage(args: {\n readonly to: string;\n readonly value: bigint;\n readonly bounce: boolean;\n readonly memo?: string;\n}): MessageRelaxed {\n return internal({\n to: sdkAddress(args.to),\n value: coins(args.value),\n bounce: args.bounce,\n ...(args.memo !== undefined ? { body: commentCell(args.memo) } : {}),\n });\n}\n\n/**\n * A TEP-74 `transfer` to the sender's own jetton wallet: `amount` base units to the owner\n * `destination`, excess back to `responseDestination`, and `forwardAmount` nanograms with\n * the memo (if any) as the recipient's notification payload.\n */\nexport function jettonMessage(args: {\n readonly jettonWallet: string;\n readonly attached: bigint;\n readonly queryId: bigint;\n readonly amount: bigint;\n readonly destination: string;\n readonly responseDestination: string;\n readonly forwardAmount: bigint;\n readonly memo?: string;\n}): MessageRelaxed {\n const to = sdkAddress(args.jettonWallet);\n const attached = coins(args.attached);\n const body = beginCell()\n .storeUint(OP.jettonTransfer, 32)\n .storeUint(queryIdOf(args.queryId), 64)\n .storeCoins(coins(args.amount))\n .storeAddress(sdkAddress(args.destination))\n .storeAddress(sdkAddress(args.responseDestination))\n .storeMaybeRef(null)\n .storeCoins(coins(args.forwardAmount));\n if (args.memo !== undefined) body.storeBit(true).storeRef(commentCell(args.memo));\n else body.storeBit(false);\n return internal({\n to,\n value: attached,\n bounce: true,\n body: body.endCell(),\n });\n}\n\n/** A one-cell slice holding `raw`: the `get_wallet_address` argument, as base64 BOC. */\nexport function addressArgument(raw: string): string {\n return beginCell().storeAddress(sdkAddress(raw)).endCell().toBoc().toString('base64');\n}\n\n/** The address a get-method returned in a cell or slice (base64 BOC); null if none. */\nexport function addressFromBoc(boc: string): string | null {\n if (typeof boc !== 'string' || boc.length > MAX_ADDRESS_BOC_LENGTH) return null;\n try {\n const address = Cell.fromBoc(Buffer.from(boc, 'base64'))[0]\n ?.beginParse()\n .loadMaybeAddress();\n return address ? toRaw(address) : null;\n } catch {\n return null;\n }\n}\n\n/**\n * The text of a comment body, or undefined for any other body. The snake string is read\n * in one pass: `@ton/core`'s `loadStringTail` recurses per cell and concatenates at each\n * level, which is quadratic in the chain length (3.6 s for one 1 MB comment). Past\n * `MAX_COMMENT_CELLS` cells, or for a cell that is not a whole number of bytes with at\n * most one ref, it is no comment.\n */\nexport function decodeComment(body: Cell): string | undefined {\n try {\n let slice = body.beginParse();\n if (slice.remainingBits < 32 || slice.loadUint(32) !== OP.comment) return undefined;\n const chunks: Buffer[] = [];\n for (let cells = 1; ; cells += 1) {\n if (cells > MAX_COMMENT_CELLS) return undefined;\n const bits = slice.remainingBits;\n if (bits % 8 !== 0 || slice.remainingRefs > 1) return undefined;\n if (bits > 0) chunks.push(slice.loadBuffer(bits / 8));\n if (slice.remainingRefs === 0) break;\n slice = slice.loadRef().beginParse();\n }\n return Buffer.concat(chunks).toString('utf8');\n } catch {\n return undefined;\n }\n}\n\n/** The comment carried in a `forward_payload:(Either Cell ^Cell)`, if it is one. */\nfunction forwardComment(slice: ReturnType<Cell['beginParse']>): string | undefined {\n if (slice.remainingBits < 1) return undefined;\n const inRef = slice.loadBit();\n if (inRef) return slice.remainingRefs > 0 ? decodeComment(slice.loadRef()) : undefined;\n return decodeComment(beginCell().storeSlice(slice).endCell());\n}\n\nexport interface JettonTransferBody {\n readonly queryId: bigint;\n readonly amount: bigint;\n readonly destination: string;\n /** Where the excess goes; null for `addr_none` or a workchain other than 0 or -1. */\n readonly responseDestination: string | null;\n /** Whether a `custom_payload` rides along (for the jetton wallet's own code). */\n readonly customPayload: boolean;\n readonly forwardAmount: bigint;\n readonly comment?: string;\n}\n\n/** A TEP-74 `transfer` body, or null for any other body. */\nexport function decodeJettonTransfer(body: Cell): JettonTransferBody | null {\n try {\n const slice = body.beginParse();\n if (slice.loadUint(32) !== OP.jettonTransfer) return null;\n const queryId = slice.loadUintBig(64);\n const amount = slice.loadCoins();\n const destination = slice.loadAddress();\n const response = slice.loadMaybeAddress();\n const customPayload = slice.loadMaybeRef() !== null;\n const forwardAmount = slice.loadCoins();\n const memo = forwardComment(slice);\n const recipient = toRaw(destination);\n if (recipient === null) return null;\n return {\n queryId,\n amount,\n destination: recipient,\n responseDestination: response ? toRaw(response) : null,\n customPayload,\n forwardAmount,\n ...(memo !== undefined ? { comment: memo } : {}),\n };\n } catch {\n return null;\n }\n}\n\nexport interface JettonInternalTransferBody {\n readonly queryId: bigint;\n readonly amount: bigint;\n /** The sending owner, when the body names one. */\n readonly from: string | null;\n readonly comment?: string;\n}\n\n/** A TEP-74 `internal_transfer` body, or null for any other body. */\nexport function decodeJettonInternalTransfer(\n body: Cell,\n): JettonInternalTransferBody | null {\n try {\n const slice = body.beginParse();\n if (slice.loadUint(32) !== OP.jettonInternalTransfer) return null;\n const queryId = slice.loadUintBig(64);\n const amount = slice.loadCoins();\n const from = slice.loadMaybeAddress();\n slice.loadMaybeAddress();\n slice.loadCoins();\n const memo = forwardComment(slice);\n return {\n queryId,\n amount,\n from: from ? toRaw(from) : null,\n ...(memo !== undefined ? { comment: memo } : {}),\n };\n } catch {\n return null;\n }\n}\n\nexport interface JettonNotificationBody {\n readonly queryId: bigint;\n readonly amount: bigint;\n /** The sending owner, when the body names one. */\n readonly sender: string | null;\n readonly comment?: string;\n}\n\n/** A TEP-74 `transfer_notification` body, or null for any other body. */\nexport function decodeJettonNotification(body: Cell): JettonNotificationBody | null {\n try {\n const slice = body.beginParse();\n if (slice.loadUint(32) !== OP.jettonNotification) return null;\n const queryId = slice.loadUintBig(64);\n const amount = slice.loadCoins();\n const sender = slice.loadMaybeAddress();\n const memo = forwardComment(slice);\n return {\n queryId,\n amount,\n sender: sender ? toRaw(sender) : null,\n ...(memo !== undefined ? { comment: memo } : {}),\n };\n } catch {\n return null;\n }\n}\n\nexport interface WalletRequest {\n /**\n * `internal`: a W5 signed request relayed in an internal message (gasless). Anyone can\n * post such a body: it proves nothing until `requestIsOwn` authenticates it.\n */\n readonly auth: 'external' | 'internal';\n /** v4r2: the subwallet id; v5r1: the signed 32-bit wallet id. */\n readonly walletId: number;\n readonly seqno: number;\n readonly validUntil: number;\n readonly messages: readonly MessageRelaxed[];\n /** Each message's send mode, as the wallet reads it (`modes[i]` for `messages[i]`). */\n readonly modes: readonly number[];\n}\n\n/** A W5 external request's bits: op, wallet id, `valid_until`, seqno, two flags, signature. */\nconst W5_EXTERNAL_BITS = 32 + 32 + 32 + 32 + 1 + 1 + 512;\n/** A v4r2 request's least bits: signature, subwallet id, `valid_until`, seqno. */\nconst V4_HEADER_BITS = 512 + 32 + 32 + 32;\n\n/**\n * The signed header of an external wallet request, read alone, as the proof reads a\n * consumer's seqno, so that the replay guard knows stored bytes whose message list does\n * not decode: a W5 request's (its op, then the wallet id, `valid_until` and seqno, in a\n * body of exactly a W5 request's length) or a v4r2 request's (after the signature,\n * whatever the op). Null when the body cannot hold one. Nothing here says whose request\n * it is.\n */\nexport function requestHeaderOf(body: Cell): {\n readonly walletId: number;\n readonly validUntil: number;\n readonly seqno: number;\n} | null {\n try {\n const bits = body.bits.length;\n const s = body.beginParse();\n const w5 = bits === W5_EXTERNAL_BITS && s.preloadUint(32) === OP.w5SignedExternal;\n if (!w5 && bits < V4_HEADER_BITS) return null;\n s.skip(w5 ? 32 : 512);\n const walletId = w5 ? s.loadInt(32) : s.loadUint(32);\n const validUntil = s.loadUint(32);\n return { walletId, validUntil, seqno: s.loadUint(32) };\n } catch {\n return null;\n }\n}\n\n/**\n * The signed request inside a v4r2 or v5r1 external message body: its seqno, lifetime and\n * the internal messages it asks for. Null for anything else (another wallet, a plugin or\n * extension request): the verdict then has no evidence and decides nothing.\n */\nexport function decodeWalletRequest(body: Cell): WalletRequest | null {\n try {\n const bits = body.bits.length;\n const head = body.beginParse();\n const op = bits >= 32 ? head.preloadUint(32) : undefined;\n if (op === OP.w5SignedExternal || op === OP.w5SignedInternal) {\n const s = body.beginParse();\n s.skip(32);\n const walletId = s.loadInt(32);\n const validUntil = s.loadUint(32);\n const seqno = s.loadUint(32);\n const list = s.loadMaybeRef();\n if (s.loadBit()) return null; // extended actions: not a plain transfer\n if (s.remainingBits !== 512 || s.remainingRefs !== 0) return null;\n const actions = list ? loadOutList(list.beginParse()) : [];\n const messages: MessageRelaxed[] = [];\n const modes: number[] = [];\n for (const action of actions) {\n if (action.type !== 'sendMsg') return null;\n messages.push(action.outMsg);\n modes.push(action.mode);\n }\n const auth = op === OP.w5SignedExternal ? 'external' : 'internal';\n return { auth, walletId, seqno, validUntil, messages, modes };\n }\n const s = body.beginParse();\n s.skip(512);\n const walletId = s.loadUint(32);\n const validUntil = s.loadUint(32);\n const seqno = s.loadUint(32);\n if (s.loadUint(8) !== 0) return null; // v4 op 0: simple send\n const messages: MessageRelaxed[] = [];\n const modes: number[] = [];\n while (s.remainingRefs > 0) {\n modes.push(s.loadUint(8));\n messages.push(loadMessageRelaxed(s.loadRef().beginParse()));\n }\n if (s.remainingBits !== 0) return null;\n return { auth: 'external', walletId, seqno, validUntil, messages, modes };\n } catch {\n return null;\n }\n}\n\n/** A message's destination (raw), value and body hash (hex), for matching on chain. */\nexport function messageFacts(message: MessageRelaxed): {\n readonly to: string;\n readonly value: bigint;\n readonly bodyHash: string;\n readonly body: Cell;\n} | null {\n if (message.info.type !== 'internal') return null;\n const to = toRaw(message.info.dest);\n if (to === null) return null;\n return {\n to,\n value: message.info.value.coins,\n bodyHash: message.body.hash().toString('hex'),\n body: message.body,\n };\n}\n\n/** A body cell from a base64 BOC; null when it does not parse. */\nexport function cellFromBoc(boc: string | null | undefined): Cell | null {\n if (typeof boc !== 'string' || !bocWithinLimits(boc)) return null;\n try {\n const cells = Cell.fromBoc(Buffer.from(boc, 'base64'));\n return cells.length === 1 ? (cells[0] as Cell) : null;\n } catch {\n return null;\n }\n}\n\n/**\n * An indexed message's body, bound to the body hash the quorum keyed. A body that does\n * not parse or hash to `bodyHash`, or that comes without one, is a malformed answer\n * (retryable): no verdict or decoding ever reads an unbound body.\n */\nexport function messageBody(message: {\n readonly body?: string;\n readonly bodyHash?: string;\n}): Cell | null {\n if (message.body === undefined) return null;\n const cell = cellFromBoc(message.body);\n if (!cell || !message.bodyHash || cell.hash().toString('hex') !== message.bodyHash) {\n throw new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n 'the indexer returned a message body that does not match its hash',\n { retryable: true },\n );\n }\n return cell;\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DisposableNativeClient } from '../../core/driver/types';
|
|
2
|
+
import { type Transport } from '../../core/transport/types';
|
|
3
|
+
/**
|
|
4
|
+
* A fresh `TonClient` over `transport` on every call; `crypto-aio/native` only. The
|
|
5
|
+
* client holds only a placeholder URL and no key (secrets stay in the transport), and
|
|
6
|
+
* nothing to close.
|
|
7
|
+
*/
|
|
8
|
+
export declare function tonNativeClient(transport: Transport): DisposableNativeClient;
|
|
9
|
+
/** The `@ton/ton` adapter's driver factory; the manifest's `load()` returns it. */
|
|
10
|
+
export declare const tonLibraryDriverFactory: import("../../core/driver/types").DriverFactory;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tonLibraryDriverFactory = void 0;
|
|
4
|
+
exports.tonNativeClient = tonNativeClient;
|
|
5
|
+
/**
|
|
6
|
+
* The `@ton/ton` library module (the family shape: the client module exports the loadable
|
|
7
|
+
* factory). The native client is a `TonClient` whose `httpAdapter` posts to the
|
|
8
|
+
* transport, off the driver's own request path: the driver sends REST straight to the
|
|
9
|
+
* transport, because `TonClient` runs axios with a real request timer. SDKs are required
|
|
10
|
+
* by their bare peer names: the core turns a missing module into `DEPENDENCY_MISSING`
|
|
11
|
+
* only when the error names a peer dependency.
|
|
12
|
+
*/
|
|
13
|
+
const ton_1 = require("@ton/ton");
|
|
14
|
+
const types_1 = require("../../core/transport/types");
|
|
15
|
+
const api_1 = require("./api");
|
|
16
|
+
const driver_1 = require("./driver");
|
|
17
|
+
/**
|
|
18
|
+
* The tags of a native request: plain reads, except a toncenter `send*` method, which is a
|
|
19
|
+
* broadcast (as EVM's native client): a failure after the transport may have delivered
|
|
20
|
+
* it is `ambiguous`, never an invitation to sign again with a new seqno.
|
|
21
|
+
*/
|
|
22
|
+
const tagsOf = (body) => {
|
|
23
|
+
const method = body !== null && typeof body === 'object'
|
|
24
|
+
? body.method
|
|
25
|
+
: undefined;
|
|
26
|
+
return typeof method === 'string' && method.startsWith('send') ? api_1.BROADCAST : api_1.READ;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* A fresh `TonClient` over `transport` on every call; `crypto-aio/native` only. The
|
|
30
|
+
* client holds only a placeholder URL and no key (secrets stay in the transport), and
|
|
31
|
+
* nothing to close.
|
|
32
|
+
*/
|
|
33
|
+
function tonNativeClient(transport) {
|
|
34
|
+
const httpAdapter = (async (config) => {
|
|
35
|
+
const body = typeof config.data === 'string'
|
|
36
|
+
? JSON.parse(config.data)
|
|
37
|
+
: config.data;
|
|
38
|
+
const data = await transport.http({ method: 'POST', path: '/jsonRPC', body, route: '/jsonRPC' }, tagsOf(body));
|
|
39
|
+
return { data, status: 200, statusText: 'OK', headers: {}, config, request: {} };
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
client: new ton_1.TonClient({ endpoint: `${types_1.PLACEHOLDER_ORIGIN}/jsonRPC`, httpAdapter }),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** The `@ton/ton` adapter's driver factory; the manifest's `load()` returns it. */
|
|
46
|
+
exports.tonLibraryDriverFactory = (0, driver_1.tonDriverFactory)(tonNativeClient);
|
|
47
|
+
//# sourceMappingURL=native-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-client.js","sourceRoot":"","sources":["../../../src/adapters/ton/native-client.ts"],"names":[],"mappings":";;;AAmCA,0CAeC;AAlDD;;;;;;;GAOG;AACH,kCAAqC;AAErC,sDAAgF;AAChF,+BAAwC;AACxC,qCAA4C;AAK5C;;;;GAIG;AACH,MAAM,MAAM,GAAG,CAAC,IAAa,EAAe,EAAE;IAC5C,MAAM,MAAM,GACV,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QACvC,CAAC,CAAE,IAAsC,CAAC,MAAM;QAChD,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,eAAS,CAAC,CAAC,CAAC,UAAI,CAAC;AACpF,CAAC,CAAC;AAEF;;;;GAIG;AACH,SAAgB,eAAe,CAAC,SAAoB;IAClD,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAA0B,EAAE,EAAE;QACxD,MAAM,IAAI,GACR,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC7B,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAa;YACtC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAC/B,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAC7D,MAAM,CAAC,IAAI,CAAC,CACb,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnF,CAAC,CAA2B,CAAC;IAC7B,OAAO;QACL,MAAM,EAAE,IAAI,eAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,0BAAkB,UAAU,EAAE,WAAW,EAAE,CAAC;KAClF,CAAC;AACJ,CAAC;AAED,mFAAmF;AACtE,QAAA,uBAAuB,GAAG,IAAA,yBAAgB,EAAC,eAAe,CAAC,CAAC","sourcesContent":["/**\n * The `@ton/ton` library module (the family shape: the client module exports the loadable\n * factory). The native client is a `TonClient` whose `httpAdapter` posts to the\n * transport, off the driver's own request path: the driver sends REST straight to the\n * transport, because `TonClient` runs axios with a real request timer. SDKs are required\n * by their bare peer names: the core turns a missing module into `DEPENDENCY_MISSING`\n * only when the error names a peer dependency.\n */\nimport { TonClient } from '@ton/ton';\nimport type { DisposableNativeClient } from '../../core/driver/types';\nimport { PLACEHOLDER_ORIGIN, type Transport } from '../../core/transport/types';\nimport { BROADCAST, READ } from './api';\nimport { tonDriverFactory } from './driver';\nimport type { TonCallTags } from './types';\n\ntype HttpAdapter = NonNullable<ConstructorParameters<typeof TonClient>[0]['httpAdapter']>;\n\n/**\n * The tags of a native request: plain reads, except a toncenter `send*` method, which is a\n * broadcast (as EVM's native client): a failure after the transport may have delivered\n * it is `ambiguous`, never an invitation to sign again with a new seqno.\n */\nconst tagsOf = (body: unknown): TonCallTags => {\n const method =\n body !== null && typeof body === 'object'\n ? (body as { readonly method?: unknown }).method\n : undefined;\n return typeof method === 'string' && method.startsWith('send') ? BROADCAST : READ;\n};\n\n/**\n * A fresh `TonClient` over `transport` on every call; `crypto-aio/native` only. The\n * client holds only a placeholder URL and no key (secrets stay in the transport), and\n * nothing to close.\n */\nexport function tonNativeClient(transport: Transport): DisposableNativeClient {\n const httpAdapter = (async (config: { data?: unknown }) => {\n const body =\n typeof config.data === 'string'\n ? (JSON.parse(config.data) as unknown)\n : config.data;\n const data = await transport.http(\n { method: 'POST', path: '/jsonRPC', body, route: '/jsonRPC' },\n tagsOf(body),\n );\n return { data, status: 200, statusText: 'OK', headers: {}, config, request: {} };\n }) as unknown as HttpAdapter;\n return {\n client: new TonClient({ endpoint: `${PLACEHOLDER_ORIGIN}/jsonRPC`, httpAdapter }),\n };\n}\n\n/** The `@ton/ton` adapter's driver factory; the manifest's `load()` returns it. */\nexport const tonLibraryDriverFactory = tonDriverFactory(tonNativeClient);\n"]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { type Capability } from '../../core/model/capability';
|
|
2
|
+
import type { ChainInfo, NetworkInfo } from '../../core/model/chain';
|
|
3
|
+
/**
|
|
4
|
+
* The TON manifest's capabilities; `address-history` comes with the indexer. No
|
|
5
|
+
* `batch-transfer`: the verdict answers `failed` for a partly delivered batch, and
|
|
6
|
+
* a failed Operation sent again whole would pay twice the outputs that moved, so a TON
|
|
7
|
+
* transfer carries exactly one output.
|
|
8
|
+
*/
|
|
9
|
+
export declare const TON_CAPABILITIES: readonly Capability[];
|
|
10
|
+
export declare const TON_INDEXER_CAPABILITIES: readonly Capability[];
|
|
11
|
+
/** The ceiling of each workchain's `network` charge, in nanograms. */
|
|
12
|
+
export interface TonFeeCeiling {
|
|
13
|
+
readonly basechain: bigint;
|
|
14
|
+
readonly masterchain: bigint;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The default economic ceiling on the `network` charge an endpoint's emulation suggests,
|
|
18
|
+
* which a network replaces with `params.maxNetworkFee`. TON signs no fee: the chain
|
|
19
|
+
* charges gas and forward fees by its config, so an inflated estimate cannot make a
|
|
20
|
+
* transfer pay more, but it would fail the funds check for good (`INSUFFICIENT_FUNDS`) or
|
|
21
|
+
* mislead whoever approves the fee. A basechain wallet's transfer costs about 0.001-0.01
|
|
22
|
+
* TON, and a whole gas limit (1M gas at 400 nanograms) 0.4 TON; a masterchain wallet pays
|
|
23
|
+
* about 25 times the gas and far more storage (about 6 TON a year for a v4r2 wallet at
|
|
24
|
+
* mainnet's config param 18), so 100 TON refuses only a wallet idle for more than about
|
|
25
|
+
* 13 years. Above the ceiling an estimate is a retryable `PROVIDER_INCONSISTENT`.
|
|
26
|
+
*/
|
|
27
|
+
export declare const DEFAULT_MAX_NETWORK_FEE: TonFeeCeiling;
|
|
28
|
+
export interface TonNetworkConfig {
|
|
29
|
+
/** Config param 19; the network identity. */
|
|
30
|
+
readonly globalId: number;
|
|
31
|
+
readonly testnet: boolean;
|
|
32
|
+
/** A message's lifetime past chain time, in seconds. */
|
|
33
|
+
readonly validForSeconds: number;
|
|
34
|
+
/** Nanograms attached to each jetton wallet message; the unspent part is refunded. */
|
|
35
|
+
readonly jettonAttached: bigint;
|
|
36
|
+
/** Nanograms forwarded with each jetton notification. */
|
|
37
|
+
readonly jettonForwardAmount: bigint;
|
|
38
|
+
/** Masterchain blocks the attested head first trails the freshest endpoint by. */
|
|
39
|
+
readonly finalitySkewBlocks: number;
|
|
40
|
+
/** The most an estimate's `network` charge may be, per workchain of the sender. */
|
|
41
|
+
readonly maxNetworkFee: TonFeeCeiling;
|
|
42
|
+
readonly capabilities: ReadonlySet<Capability>;
|
|
43
|
+
}
|
|
44
|
+
/** The lifetimes a network may configure (`params.validForSeconds`), in seconds. */
|
|
45
|
+
export declare const MIN_VALID_FOR_SECONDS = 10;
|
|
46
|
+
export declare const MAX_VALID_FOR_SECONDS = 86400;
|
|
47
|
+
/** How far an endpoint's `sync_utime` may be from the local clock, in seconds. */
|
|
48
|
+
export declare const CHAIN_TIME_TOLERANCE = 300;
|
|
49
|
+
/**
|
|
50
|
+
* A build's recorded chain time (`TonSeqnoOrdering.validFrom`) when the ordering holds
|
|
51
|
+
* a well-formed one for its lifetime: a safe integer at least the shortest lifetime before
|
|
52
|
+
* `validUntil`, and at most the longest (plus the chain-time tolerance) before it. Undefined
|
|
53
|
+
* otherwise (an attempt built before the field existed, or a damaged record).
|
|
54
|
+
*/
|
|
55
|
+
export declare function recordedValidFrom(slot: {
|
|
56
|
+
readonly validUntil: number;
|
|
57
|
+
}): number | undefined;
|
|
58
|
+
export declare function tonNetworkConfig(chain: ChainInfo, network: NetworkInfo, options?: Readonly<Record<string, unknown>>): TonNetworkConfig;
|