crypto-aio 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/README.md +144 -14
- package/dist/adapters/avalanche/address.d.ts +15 -0
- package/dist/adapters/avalanche/address.js +74 -0
- package/dist/adapters/avalanche/address.js.map +1 -0
- package/dist/adapters/avalanche/api.d.ts +100 -0
- package/dist/adapters/avalanche/api.js +381 -0
- package/dist/adapters/avalanche/api.js.map +1 -0
- package/dist/adapters/avalanche/builder.d.ts +13 -0
- package/dist/adapters/avalanche/builder.js +336 -0
- package/dist/adapters/avalanche/builder.js.map +1 -0
- package/dist/adapters/avalanche/cb58.d.ts +7 -0
- package/dist/adapters/avalanche/cb58.js +49 -0
- package/dist/adapters/avalanche/cb58.js.map +1 -0
- package/dist/adapters/avalanche/chains.d.ts +21 -0
- package/dist/adapters/avalanche/chains.js +79 -0
- package/dist/adapters/avalanche/chains.js.map +1 -0
- package/dist/adapters/avalanche/codec.d.ts +94 -0
- package/dist/adapters/avalanche/codec.js +371 -0
- package/dist/adapters/avalanche/codec.js.map +1 -0
- package/dist/adapters/avalanche/context.d.ts +59 -0
- package/dist/adapters/avalanche/context.js +114 -0
- package/dist/adapters/avalanche/context.js.map +1 -0
- package/dist/adapters/avalanche/decode.d.ts +16 -0
- package/dist/adapters/avalanche/decode.js +101 -0
- package/dist/adapters/avalanche/decode.js.map +1 -0
- package/dist/adapters/avalanche/driver.d.ts +22 -0
- package/dist/adapters/avalanche/driver.js +81 -0
- package/dist/adapters/avalanche/driver.js.map +1 -0
- package/dist/adapters/avalanche/errors.d.ts +18 -0
- package/dist/adapters/avalanche/errors.js +61 -0
- package/dist/adapters/avalanche/errors.js.map +1 -0
- package/dist/adapters/avalanche/fees.d.ts +23 -0
- package/dist/adapters/avalanche/fees.js +105 -0
- package/dist/adapters/avalanche/fees.js.map +1 -0
- package/dist/adapters/avalanche/index.d.ts +19 -0
- package/dist/adapters/avalanche/index.js +8 -0
- package/dist/adapters/avalanche/index.js.map +1 -0
- package/dist/adapters/avalanche/network.d.ts +37 -0
- package/dist/adapters/avalanche/network.js +135 -0
- package/dist/adapters/avalanche/network.js.map +1 -0
- package/dist/adapters/avalanche/plugin.d.ts +21 -0
- package/dist/adapters/avalanche/plugin.js +46 -0
- package/dist/adapters/avalanche/plugin.js.map +1 -0
- package/dist/adapters/avalanche/presets.d.ts +6 -0
- package/dist/adapters/avalanche/presets.js +86 -0
- package/dist/adapters/avalanche/presets.js.map +1 -0
- package/dist/adapters/avalanche/proofs.d.ts +41 -0
- package/dist/adapters/avalanche/proofs.js +270 -0
- package/dist/adapters/avalanche/proofs.js.map +1 -0
- package/dist/adapters/avalanche/reader.d.ts +40 -0
- package/dist/adapters/avalanche/reader.js +231 -0
- package/dist/adapters/avalanche/reader.js.map +1 -0
- package/dist/adapters/avalanche/sdk.d.ts +182 -0
- package/dist/adapters/avalanche/sdk.js +21 -0
- package/dist/adapters/avalanche/sdk.js.map +1 -0
- package/dist/adapters/avalanche/types.d.ts +86 -0
- package/dist/{type/common.js → adapters/avalanche/types.js} +1 -1
- package/dist/adapters/avalanche/types.js.map +1 -0
- package/dist/adapters/evm/builder.d.ts +11 -0
- package/dist/adapters/evm/builder.js +326 -0
- package/dist/adapters/evm/builder.js.map +1 -0
- package/dist/adapters/evm/chains.d.ts +6 -0
- package/dist/adapters/evm/chains.js +203 -0
- package/dist/adapters/evm/chains.js.map +1 -0
- package/dist/adapters/evm/client.d.ts +84 -0
- package/dist/adapters/evm/client.js +335 -0
- package/dist/adapters/evm/client.js.map +1 -0
- package/dist/adapters/evm/decode.d.ts +35 -0
- package/dist/adapters/evm/decode.js +170 -0
- package/dist/adapters/evm/decode.js.map +1 -0
- package/dist/adapters/evm/driver.d.ts +8 -0
- package/dist/adapters/evm/driver.js +61 -0
- package/dist/adapters/evm/driver.js.map +1 -0
- package/dist/adapters/evm/errors.d.ts +20 -0
- package/dist/adapters/evm/errors.js +110 -0
- package/dist/adapters/evm/errors.js.map +1 -0
- package/dist/adapters/evm/ethers-client.d.ts +43 -0
- package/dist/adapters/evm/ethers-client.js +135 -0
- package/dist/adapters/evm/ethers-client.js.map +1 -0
- package/dist/adapters/evm/fees.d.ts +79 -0
- package/dist/adapters/evm/fees.js +234 -0
- package/dist/adapters/evm/fees.js.map +1 -0
- package/dist/adapters/evm/index.d.ts +20 -0
- package/dist/adapters/evm/index.js +11 -0
- package/dist/adapters/evm/index.js.map +1 -0
- package/dist/adapters/evm/network.d.ts +60 -0
- package/dist/adapters/evm/network.js +131 -0
- package/dist/adapters/evm/network.js.map +1 -0
- package/dist/adapters/evm/plugin.d.ts +36 -0
- package/dist/adapters/evm/plugin.js +102 -0
- package/dist/adapters/evm/plugin.js.map +1 -0
- package/dist/adapters/evm/presets.d.ts +2 -0
- package/dist/adapters/evm/presets.js +105 -0
- package/dist/adapters/evm/presets.js.map +1 -0
- package/dist/adapters/evm/proofs.d.ts +19 -0
- package/dist/adapters/evm/proofs.js +358 -0
- package/dist/adapters/evm/proofs.js.map +1 -0
- package/dist/adapters/evm/rawtx.d.ts +25 -0
- package/dist/adapters/evm/rawtx.js +176 -0
- package/dist/adapters/evm/rawtx.js.map +1 -0
- package/dist/adapters/evm/reader.d.ts +65 -0
- package/dist/adapters/evm/reader.js +292 -0
- package/dist/adapters/evm/reader.js.map +1 -0
- package/dist/adapters/evm/rpc.d.ts +39 -0
- package/dist/adapters/evm/rpc.js +152 -0
- package/dist/adapters/evm/rpc.js.map +1 -0
- package/dist/adapters/evm/tokens.d.ts +7 -0
- package/dist/adapters/evm/tokens.js +23 -0
- package/dist/adapters/evm/tokens.js.map +1 -0
- package/dist/adapters/evm/types.d.ts +255 -0
- package/dist/{type/account.js → adapters/evm/types.js} +1 -1
- package/dist/adapters/evm/types.js.map +1 -0
- package/dist/adapters/evm/web3-client.d.ts +23 -0
- package/dist/adapters/evm/web3-client.js +159 -0
- package/dist/adapters/evm/web3-client.js.map +1 -0
- package/dist/adapters/solana/builder.d.ts +18 -0
- package/dist/adapters/solana/builder.js +545 -0
- package/dist/adapters/solana/builder.js.map +1 -0
- package/dist/adapters/solana/chains.d.ts +13 -0
- package/dist/adapters/solana/chains.js +37 -0
- package/dist/adapters/solana/chains.js.map +1 -0
- package/dist/adapters/solana/decode.d.ts +111 -0
- package/dist/adapters/solana/decode.js +595 -0
- package/dist/adapters/solana/decode.js.map +1 -0
- package/dist/adapters/solana/driver.d.ts +15 -0
- package/dist/adapters/solana/driver.js +72 -0
- package/dist/adapters/solana/driver.js.map +1 -0
- package/dist/adapters/solana/errors.d.ts +36 -0
- package/dist/adapters/solana/errors.js +154 -0
- package/dist/adapters/solana/errors.js.map +1 -0
- package/dist/adapters/solana/fees.d.ts +68 -0
- package/dist/adapters/solana/fees.js +205 -0
- package/dist/adapters/solana/fees.js.map +1 -0
- package/dist/adapters/solana/heights.d.ts +47 -0
- package/dist/adapters/solana/heights.js +185 -0
- package/dist/adapters/solana/heights.js.map +1 -0
- package/dist/adapters/solana/history.d.ts +10 -0
- package/dist/adapters/solana/history.js +71 -0
- package/dist/adapters/solana/history.js.map +1 -0
- package/dist/adapters/solana/index.d.ts +16 -0
- package/dist/adapters/solana/index.js +9 -0
- package/dist/adapters/solana/index.js.map +1 -0
- package/dist/adapters/solana/keys.d.ts +13 -0
- package/dist/adapters/solana/keys.js +69 -0
- package/dist/adapters/solana/keys.js.map +1 -0
- package/dist/adapters/solana/network.d.ts +24 -0
- package/dist/adapters/solana/network.js +95 -0
- package/dist/adapters/solana/network.js.map +1 -0
- package/dist/adapters/solana/plugin.d.ts +18 -0
- package/dist/adapters/solana/plugin.js +41 -0
- package/dist/adapters/solana/plugin.js.map +1 -0
- package/dist/adapters/solana/presets.d.ts +2 -0
- package/dist/adapters/solana/presets.js +77 -0
- package/dist/adapters/solana/presets.js.map +1 -0
- package/dist/adapters/solana/programs.d.ts +44 -0
- package/dist/adapters/solana/programs.js +159 -0
- package/dist/adapters/solana/programs.js.map +1 -0
- package/dist/adapters/solana/proofs.d.ts +56 -0
- package/dist/adapters/solana/proofs.js +540 -0
- package/dist/adapters/solana/proofs.js.map +1 -0
- package/dist/adapters/solana/reader.d.ts +82 -0
- package/dist/adapters/solana/reader.js +326 -0
- package/dist/adapters/solana/reader.js.map +1 -0
- package/dist/adapters/solana/rpc.d.ts +102 -0
- package/dist/adapters/solana/rpc.js +301 -0
- package/dist/adapters/solana/rpc.js.map +1 -0
- package/dist/adapters/solana/tokens.d.ts +7 -0
- package/dist/adapters/solana/tokens.js +19 -0
- package/dist/adapters/solana/tokens.js.map +1 -0
- package/dist/adapters/solana/types.d.ts +121 -0
- package/dist/{type/lib-types.js → adapters/solana/types.js} +1 -1
- package/dist/adapters/solana/types.js.map +1 -0
- package/dist/adapters/solana/web3.d.ts +5 -0
- package/dist/adapters/solana/web3.js +83 -0
- package/dist/adapters/solana/web3.js.map +1 -0
- package/dist/adapters/solana/wire.d.ts +62 -0
- package/dist/adapters/solana/wire.js +168 -0
- package/dist/adapters/solana/wire.js.map +1 -0
- package/dist/adapters/ton/address.d.ts +43 -0
- package/dist/adapters/ton/address.js +168 -0
- package/dist/adapters/ton/address.js.map +1 -0
- package/dist/adapters/ton/api.d.ts +344 -0
- package/dist/adapters/ton/api.js +942 -0
- package/dist/adapters/ton/api.js.map +1 -0
- package/dist/adapters/ton/builder.d.ts +18 -0
- package/dist/adapters/ton/builder.js +701 -0
- package/dist/adapters/ton/builder.js.map +1 -0
- package/dist/adapters/ton/chains.d.ts +16 -0
- package/dist/adapters/ton/chains.js +39 -0
- package/dist/adapters/ton/chains.js.map +1 -0
- package/dist/adapters/ton/decode.d.ts +43 -0
- package/dist/adapters/ton/decode.js +219 -0
- package/dist/adapters/ton/decode.js.map +1 -0
- package/dist/adapters/ton/driver.d.ts +10 -0
- package/dist/adapters/ton/driver.js +117 -0
- package/dist/adapters/ton/driver.js.map +1 -0
- package/dist/adapters/ton/errors.d.ts +36 -0
- package/dist/adapters/ton/errors.js +89 -0
- package/dist/adapters/ton/errors.js.map +1 -0
- package/dist/adapters/ton/fees.d.ts +28 -0
- package/dist/adapters/ton/fees.js +121 -0
- package/dist/adapters/ton/fees.js.map +1 -0
- package/dist/adapters/ton/index.d.ts +16 -0
- package/dist/adapters/ton/index.js +9 -0
- package/dist/adapters/ton/index.js.map +1 -0
- package/dist/adapters/ton/messages.d.ts +157 -0
- package/dist/adapters/ton/messages.js +397 -0
- package/dist/adapters/ton/messages.js.map +1 -0
- package/dist/adapters/ton/native-client.d.ts +10 -0
- package/dist/adapters/ton/native-client.js +47 -0
- package/dist/adapters/ton/native-client.js.map +1 -0
- package/dist/adapters/ton/network.d.ts +58 -0
- package/dist/adapters/ton/network.js +207 -0
- package/dist/adapters/ton/network.js.map +1 -0
- package/dist/adapters/ton/plugin.d.ts +24 -0
- package/dist/adapters/ton/plugin.js +57 -0
- package/dist/adapters/ton/plugin.js.map +1 -0
- package/dist/adapters/ton/presets.d.ts +6 -0
- package/dist/adapters/ton/presets.js +94 -0
- package/dist/adapters/ton/presets.js.map +1 -0
- package/dist/adapters/ton/proofs.d.ts +66 -0
- package/dist/adapters/ton/proofs.js +813 -0
- package/dist/adapters/ton/proofs.js.map +1 -0
- package/dist/adapters/ton/reader.d.ts +194 -0
- package/dist/adapters/ton/reader.js +781 -0
- package/dist/adapters/ton/reader.js.map +1 -0
- package/dist/adapters/ton/tokens.d.ts +10 -0
- package/dist/adapters/ton/tokens.js +27 -0
- package/dist/adapters/ton/tokens.js.map +1 -0
- package/dist/adapters/ton/trace.d.ts +48 -0
- package/dist/adapters/ton/trace.js +277 -0
- package/dist/adapters/ton/trace.js.map +1 -0
- package/dist/adapters/ton/types.d.ts +105 -0
- package/dist/adapters/ton/types.js +3 -0
- package/dist/adapters/ton/types.js.map +1 -0
- package/dist/adapters/ton/wallets.d.ts +86 -0
- package/dist/adapters/ton/wallets.js +373 -0
- package/dist/adapters/ton/wallets.js.map +1 -0
- package/dist/adapters/tron/abi.d.ts +39 -0
- package/dist/adapters/tron/abi.js +110 -0
- package/dist/adapters/tron/abi.js.map +1 -0
- package/dist/adapters/tron/address.d.ts +20 -0
- package/dist/adapters/tron/address.js +110 -0
- package/dist/adapters/tron/address.js.map +1 -0
- package/dist/adapters/tron/builder.d.ts +12 -0
- package/dist/adapters/tron/builder.js +553 -0
- package/dist/adapters/tron/builder.js.map +1 -0
- package/dist/adapters/tron/chains.d.ts +12 -0
- package/dist/adapters/tron/chains.js +35 -0
- package/dist/adapters/tron/chains.js.map +1 -0
- package/dist/adapters/tron/codec.d.ts +10 -0
- package/dist/adapters/tron/codec.js +322 -0
- package/dist/adapters/tron/codec.js.map +1 -0
- package/dist/adapters/tron/decode.d.ts +50 -0
- package/dist/adapters/tron/decode.js +280 -0
- package/dist/adapters/tron/decode.js.map +1 -0
- package/dist/adapters/tron/driver.d.ts +12 -0
- package/dist/adapters/tron/driver.js +106 -0
- package/dist/adapters/tron/driver.js.map +1 -0
- package/dist/adapters/tron/errors.d.ts +74 -0
- package/dist/adapters/tron/errors.js +261 -0
- package/dist/adapters/tron/errors.js.map +1 -0
- package/dist/adapters/tron/fees.d.ts +49 -0
- package/dist/adapters/tron/fees.js +166 -0
- package/dist/adapters/tron/fees.js.map +1 -0
- package/dist/adapters/tron/http.d.ts +173 -0
- package/dist/adapters/tron/http.js +729 -0
- package/dist/adapters/tron/http.js.map +1 -0
- package/dist/adapters/tron/index.d.ts +16 -0
- package/dist/adapters/tron/index.js +15 -0
- package/dist/adapters/tron/index.js.map +1 -0
- package/dist/adapters/tron/network.d.ts +44 -0
- package/dist/adapters/tron/network.js +163 -0
- package/dist/adapters/tron/network.js.map +1 -0
- package/dist/adapters/tron/plugin.d.ts +17 -0
- package/dist/adapters/tron/plugin.js +39 -0
- package/dist/adapters/tron/plugin.js.map +1 -0
- package/dist/adapters/tron/presets.d.ts +5 -0
- package/dist/adapters/tron/presets.js +68 -0
- package/dist/adapters/tron/presets.js.map +1 -0
- package/dist/adapters/tron/proofs.d.ts +80 -0
- package/dist/adapters/tron/proofs.js +370 -0
- package/dist/adapters/tron/proofs.js.map +1 -0
- package/dist/adapters/tron/protobuf.d.ts +36 -0
- package/dist/adapters/tron/protobuf.js +90 -0
- package/dist/adapters/tron/protobuf.js.map +1 -0
- package/dist/adapters/tron/reader.d.ts +47 -0
- package/dist/adapters/tron/reader.js +203 -0
- package/dist/adapters/tron/reader.js.map +1 -0
- package/dist/adapters/tron/tokens.d.ts +7 -0
- package/dist/adapters/tron/tokens.js +14 -0
- package/dist/adapters/tron/tokens.js.map +1 -0
- package/dist/adapters/tron/types.d.ts +166 -0
- package/dist/adapters/tron/types.js +3 -0
- package/dist/adapters/tron/types.js.map +1 -0
- package/dist/adapters/utxo/address.d.ts +51 -0
- package/dist/adapters/utxo/address.js +341 -0
- package/dist/adapters/utxo/address.js.map +1 -0
- package/dist/adapters/utxo/builder.d.ts +35 -0
- package/dist/adapters/utxo/builder.js +380 -0
- package/dist/adapters/utxo/builder.js.map +1 -0
- package/dist/adapters/utxo/chains.d.ts +17 -0
- package/dist/adapters/utxo/chains.js +99 -0
- package/dist/adapters/utxo/chains.js.map +1 -0
- package/dist/adapters/utxo/codec.d.ts +120 -0
- package/dist/adapters/utxo/codec.js +408 -0
- package/dist/adapters/utxo/codec.js.map +1 -0
- package/dist/adapters/utxo/coinselect.d.ts +48 -0
- package/dist/adapters/utxo/coinselect.js +131 -0
- package/dist/adapters/utxo/coinselect.js.map +1 -0
- package/dist/adapters/utxo/context.d.ts +57 -0
- package/dist/adapters/utxo/context.js +118 -0
- package/dist/adapters/utxo/context.js.map +1 -0
- package/dist/adapters/utxo/decode.d.ts +14 -0
- package/dist/adapters/utxo/decode.js +85 -0
- package/dist/adapters/utxo/decode.js.map +1 -0
- package/dist/adapters/utxo/driver.d.ts +16 -0
- package/dist/adapters/utxo/driver.js +74 -0
- package/dist/adapters/utxo/driver.js.map +1 -0
- package/dist/adapters/utxo/ecc.d.ts +9 -0
- package/dist/adapters/utxo/ecc.js +26 -0
- package/dist/adapters/utxo/ecc.js.map +1 -0
- package/dist/adapters/utxo/errors.d.ts +52 -0
- package/dist/adapters/utxo/errors.js +191 -0
- package/dist/adapters/utxo/errors.js.map +1 -0
- package/dist/adapters/utxo/esplora.d.ts +79 -0
- package/dist/adapters/utxo/esplora.js +451 -0
- package/dist/adapters/utxo/esplora.js.map +1 -0
- package/dist/adapters/utxo/fees.d.ts +41 -0
- package/dist/adapters/utxo/fees.js +125 -0
- package/dist/adapters/utxo/fees.js.map +1 -0
- package/dist/adapters/utxo/index.d.ts +17 -0
- package/dist/adapters/utxo/index.js +8 -0
- package/dist/adapters/utxo/index.js.map +1 -0
- package/dist/adapters/utxo/network.d.ts +50 -0
- package/dist/adapters/utxo/network.js +165 -0
- package/dist/adapters/utxo/network.js.map +1 -0
- package/dist/adapters/utxo/plugin.d.ts +17 -0
- package/dist/adapters/utxo/plugin.js +41 -0
- package/dist/adapters/utxo/plugin.js.map +1 -0
- package/dist/adapters/utxo/presets.d.ts +12 -0
- package/dist/adapters/utxo/presets.js +47 -0
- package/dist/adapters/utxo/presets.js.map +1 -0
- package/dist/adapters/utxo/preview.d.ts +3 -0
- package/dist/adapters/utxo/preview.js +65 -0
- package/dist/adapters/utxo/preview.js.map +1 -0
- package/dist/adapters/utxo/proofs.d.ts +57 -0
- package/dist/adapters/utxo/proofs.js +331 -0
- package/dist/adapters/utxo/proofs.js.map +1 -0
- package/dist/adapters/utxo/rawtx.d.ts +59 -0
- package/dist/adapters/utxo/rawtx.js +234 -0
- package/dist/adapters/utxo/rawtx.js.map +1 -0
- package/dist/adapters/utxo/reader.d.ts +36 -0
- package/dist/adapters/utxo/reader.js +265 -0
- package/dist/adapters/utxo/reader.js.map +1 -0
- package/dist/adapters/utxo/sdk.d.ts +18 -0
- package/dist/adapters/utxo/sdk.js +17 -0
- package/dist/adapters/utxo/sdk.js.map +1 -0
- package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
- package/dist/adapters/utxo/signed-psbt.js +428 -0
- package/dist/adapters/utxo/signed-psbt.js.map +1 -0
- package/dist/adapters/utxo/spend.d.ts +59 -0
- package/dist/adapters/utxo/spend.js +230 -0
- package/dist/adapters/utxo/spend.js.map +1 -0
- package/dist/adapters/utxo/types.d.ts +167 -0
- package/dist/adapters/utxo/types.js +3 -0
- package/dist/adapters/utxo/types.js.map +1 -0
- package/dist/core/assets/service.d.ts +18 -0
- package/dist/core/assets/service.js +69 -0
- package/dist/core/assets/service.js.map +1 -0
- package/dist/core/blockchain/default-ref.d.ts +4 -0
- package/dist/core/blockchain/default-ref.js +16 -0
- package/dist/core/blockchain/default-ref.js.map +1 -0
- package/dist/core/blockchain/handle.d.ts +200 -0
- package/dist/core/blockchain/handle.js +579 -0
- package/dist/core/blockchain/handle.js.map +1 -0
- package/dist/core/blockchain/internal.d.ts +19 -0
- package/dist/core/blockchain/internal.js +16 -0
- package/dist/core/blockchain/internal.js.map +1 -0
- package/dist/core/blockchain/mapping.d.ts +22 -0
- package/dist/core/blockchain/mapping.js +136 -0
- package/dist/core/blockchain/mapping.js.map +1 -0
- package/dist/core/config/env.d.ts +8 -0
- package/dist/core/config/env.js +60 -0
- package/dist/core/config/env.js.map +1 -0
- package/dist/core/config/merge.d.ts +26 -0
- package/dist/core/config/merge.js +144 -0
- package/dist/core/config/merge.js.map +1 -0
- package/dist/core/config/resolve.d.ts +12 -0
- package/dist/core/config/resolve.js +251 -0
- package/dist/core/config/resolve.js.map +1 -0
- package/dist/core/config/types.d.ts +165 -0
- package/dist/core/config/types.js +3 -0
- package/dist/core/config/types.js.map +1 -0
- package/dist/core/container/builtins.d.ts +4 -0
- package/dist/core/container/builtins.js +13 -0
- package/dist/core/container/builtins.js.map +1 -0
- package/dist/core/container/container.d.ts +69 -0
- package/dist/core/container/container.js +466 -0
- package/dist/core/container/container.js.map +1 -0
- package/dist/core/container/default.d.ts +15 -0
- package/dist/core/container/default.js +70 -0
- package/dist/core/container/default.js.map +1 -0
- package/dist/core/container/internals.d.ts +54 -0
- package/dist/core/container/internals.js +21 -0
- package/dist/core/container/internals.js.map +1 -0
- package/dist/core/container/pool.d.ts +27 -0
- package/dist/core/container/pool.js +77 -0
- package/dist/core/container/pool.js.map +1 -0
- package/dist/core/driver/types.d.ts +346 -0
- package/dist/core/driver/types.js +3 -0
- package/dist/core/driver/types.js.map +1 -0
- package/dist/core/errors/codes.d.ts +153 -0
- package/dist/core/errors/codes.js +49 -0
- package/dist/core/errors/codes.js.map +1 -0
- package/dist/core/errors/error.d.ts +66 -0
- package/dist/core/errors/error.js +129 -0
- package/dist/core/errors/error.js.map +1 -0
- package/dist/core/events/bus.d.ts +12 -0
- package/dist/core/events/bus.js +46 -0
- package/dist/core/events/bus.js.map +1 -0
- package/dist/core/events/logger.d.ts +13 -0
- package/dist/core/events/logger.js +42 -0
- package/dist/core/events/logger.js.map +1 -0
- package/dist/core/events/types.d.ts +131 -0
- package/dist/core/events/types.js +3 -0
- package/dist/core/events/types.js.map +1 -0
- package/dist/core/lifecycle/engine-rules.d.ts +107 -0
- package/dist/core/lifecycle/engine-rules.js +257 -0
- package/dist/core/lifecycle/engine-rules.js.map +1 -0
- package/dist/core/lifecycle/engine.d.ts +500 -0
- package/dist/core/lifecycle/engine.js +1732 -0
- package/dist/core/lifecycle/engine.js.map +1 -0
- package/dist/core/lifecycle/evaluate.d.ts +19 -0
- package/dist/core/lifecycle/evaluate.js +72 -0
- package/dist/core/lifecycle/evaluate.js.map +1 -0
- package/dist/core/lifecycle/intent.d.ts +11 -0
- package/dist/core/lifecycle/intent.js +88 -0
- package/dist/core/lifecycle/intent.js.map +1 -0
- package/dist/core/lifecycle/monitor.d.ts +138 -0
- package/dist/core/lifecycle/monitor.js +606 -0
- package/dist/core/lifecycle/monitor.js.map +1 -0
- package/dist/core/lifecycle/observations.d.ts +17 -0
- package/dist/core/lifecycle/observations.js +59 -0
- package/dist/core/lifecycle/observations.js.map +1 -0
- package/dist/core/lifecycle/reconcile.d.ts +58 -0
- package/dist/core/lifecycle/reconcile.js +112 -0
- package/dist/core/lifecycle/reconcile.js.map +1 -0
- package/dist/core/lifecycle/views.d.ts +49 -0
- package/dist/core/lifecycle/views.js +57 -0
- package/dist/core/lifecycle/views.js.map +1 -0
- package/dist/core/lifecycle/workers.d.ts +82 -0
- package/dist/core/lifecycle/workers.js +329 -0
- package/dist/core/lifecycle/workers.js.map +1 -0
- package/dist/core/model/address.d.ts +32 -0
- package/dist/core/model/address.js +43 -0
- package/dist/core/model/address.js.map +1 -0
- package/dist/core/model/amount.d.ts +25 -0
- package/dist/core/model/amount.js +102 -0
- package/dist/core/model/amount.js.map +1 -0
- package/dist/core/model/asset.d.ts +28 -0
- package/dist/core/model/asset.js +47 -0
- package/dist/core/model/asset.js.map +1 -0
- package/dist/core/model/capability.d.ts +3 -0
- package/dist/core/model/capability.js +18 -0
- package/dist/core/model/capability.js.map +1 -0
- package/dist/core/model/chain.d.ts +63 -0
- package/dist/core/model/chain.js +8 -0
- package/dist/core/model/chain.js.map +1 -0
- package/dist/core/model/fee.d.ts +36 -0
- package/dist/core/model/fee.js +17 -0
- package/dist/core/model/fee.js.map +1 -0
- package/dist/core/model/ids.d.ts +37 -0
- package/dist/core/model/ids.js +13 -0
- package/dist/core/model/ids.js.map +1 -0
- package/dist/core/model/intent.d.ts +63 -0
- package/dist/core/model/intent.js +81 -0
- package/dist/core/model/intent.js.map +1 -0
- package/dist/core/model/ordering.d.ts +20 -0
- package/dist/core/model/ordering.js +29 -0
- package/dist/core/model/ordering.js.map +1 -0
- package/dist/core/model/transaction.d.ts +116 -0
- package/dist/core/model/transaction.js +3 -0
- package/dist/core/model/transaction.js.map +1 -0
- package/dist/core/observe/scanner.d.ts +135 -0
- package/dist/core/observe/scanner.js +355 -0
- package/dist/core/observe/scanner.js.map +1 -0
- package/dist/core/ordering/reservations.d.ts +16 -0
- package/dist/core/ordering/reservations.js +53 -0
- package/dist/core/ordering/reservations.js.map +1 -0
- package/dist/core/ordering/sequence.d.ts +61 -0
- package/dist/core/ordering/sequence.js +155 -0
- package/dist/core/ordering/sequence.js.map +1 -0
- package/dist/core/registry/adapters.d.ts +10 -0
- package/dist/core/registry/adapters.js +56 -0
- package/dist/core/registry/adapters.js.map +1 -0
- package/dist/core/registry/assets.d.ts +18 -0
- package/dist/core/registry/assets.js +90 -0
- package/dist/core/registry/assets.js.map +1 -0
- package/dist/core/registry/chains.d.ts +10 -0
- package/dist/core/registry/chains.js +80 -0
- package/dist/core/registry/chains.js.map +1 -0
- package/dist/core/registry/plugin.d.ts +41 -0
- package/dist/core/registry/plugin.js +109 -0
- package/dist/core/registry/plugin.js.map +1 -0
- package/dist/core/registry/providers.d.ts +31 -0
- package/dist/core/registry/providers.js +43 -0
- package/dist/core/registry/providers.js.map +1 -0
- package/dist/core/registry/schemes.d.ts +30 -0
- package/dist/core/registry/schemes.js +84 -0
- package/dist/core/registry/schemes.js.map +1 -0
- package/dist/core/secret/fragments.d.ts +33 -0
- package/dist/core/secret/fragments.js +110 -0
- package/dist/core/secret/fragments.js.map +1 -0
- package/dist/core/secret/redact.d.ts +10 -0
- package/dist/core/secret/redact.js +110 -0
- package/dist/core/secret/redact.js.map +1 -0
- package/dist/core/secret/secret.d.ts +14 -0
- package/dist/core/secret/secret.js +42 -0
- package/dist/core/secret/secret.js.map +1 -0
- package/dist/core/signing/callback.d.ts +10 -0
- package/dist/core/signing/callback.js +22 -0
- package/dist/core/signing/callback.js.map +1 -0
- package/dist/core/signing/guard.d.ts +18 -0
- package/dist/core/signing/guard.js +72 -0
- package/dist/core/signing/guard.js.map +1 -0
- package/dist/core/signing/hd.d.ts +36 -0
- package/dist/core/signing/hd.js +167 -0
- package/dist/core/signing/hd.js.map +1 -0
- package/dist/core/signing/local.d.ts +48 -0
- package/dist/core/signing/local.js +190 -0
- package/dist/core/signing/local.js.map +1 -0
- package/dist/core/signing/orchestrator.d.ts +40 -0
- package/dist/core/signing/orchestrator.js +300 -0
- package/dist/core/signing/orchestrator.js.map +1 -0
- package/dist/core/signing/types.d.ts +64 -0
- package/dist/core/signing/types.js +3 -0
- package/dist/core/signing/types.js.map +1 -0
- package/dist/core/signing/wallet.d.ts +48 -0
- package/dist/core/signing/wallet.js +153 -0
- package/dist/core/signing/wallet.js.map +1 -0
- package/dist/core/store/clone.d.ts +25 -0
- package/dist/core/store/clone.js +71 -0
- package/dist/core/store/clone.js.map +1 -0
- package/dist/core/store/memory.d.ts +38 -0
- package/dist/core/store/memory.js +325 -0
- package/dist/core/store/memory.js.map +1 -0
- package/dist/core/store/types.d.ts +246 -0
- package/dist/core/store/types.js +117 -0
- package/dist/core/store/types.js.map +1 -0
- package/dist/core/transport/backoff.d.ts +8 -0
- package/dist/core/transport/backoff.js +27 -0
- package/dist/core/transport/backoff.js.map +1 -0
- package/dist/core/transport/circuit.d.ts +25 -0
- package/dist/core/transport/circuit.js +61 -0
- package/dist/core/transport/circuit.js.map +1 -0
- package/dist/core/transport/http-transport.d.ts +30 -0
- package/dist/core/transport/http-transport.js +1695 -0
- package/dist/core/transport/http-transport.js.map +1 -0
- package/dist/core/transport/rate-limit.d.ts +27 -0
- package/dist/core/transport/rate-limit.js +78 -0
- package/dist/core/transport/rate-limit.js.map +1 -0
- package/dist/core/transport/stale-view.d.ts +11 -0
- package/dist/core/transport/stale-view.js +17 -0
- package/dist/core/transport/stale-view.js.map +1 -0
- package/dist/core/transport/types.d.ts +144 -0
- package/dist/core/transport/types.js +6 -0
- package/dist/core/transport/types.js.map +1 -0
- package/dist/core/util/bytes.d.ts +9 -0
- package/dist/core/util/bytes.js +40 -0
- package/dist/core/util/bytes.js.map +1 -0
- package/dist/core/util/clock.d.ts +6 -0
- package/dist/core/util/clock.js +26 -0
- package/dist/core/util/clock.js.map +1 -0
- package/dist/core/util/freeze.d.ts +8 -0
- package/dist/core/util/freeze.js +31 -0
- package/dist/core/util/freeze.js.map +1 -0
- package/dist/core/util/json.d.ts +29 -0
- package/dist/core/util/json.js +165 -0
- package/dist/core/util/json.js.map +1 -0
- package/dist/core/util/names.d.ts +21 -0
- package/dist/core/util/names.js +46 -0
- package/dist/core/util/names.js.map +1 -0
- package/dist/index.d.ts +64 -14
- package/dist/index.js +105 -49
- package/dist/index.js.map +1 -1
- package/dist/native.d.ts +21 -0
- package/dist/native.js +44 -0
- package/dist/native.js.map +1 -0
- package/dist/testing/contracts/api.d.ts +12 -0
- package/dist/testing/contracts/api.js +58 -0
- package/dist/testing/contracts/api.js.map +1 -0
- package/dist/testing/contracts/cursors.d.ts +6 -0
- package/dist/testing/contracts/cursors.js +43 -0
- package/dist/testing/contracts/cursors.js.map +1 -0
- package/dist/testing/contracts/locks.d.ts +10 -0
- package/dist/testing/contracts/locks.js +63 -0
- package/dist/testing/contracts/locks.js.map +1 -0
- package/dist/testing/contracts/operations.d.ts +21 -0
- package/dist/testing/contracts/operations.js +718 -0
- package/dist/testing/contracts/operations.js.map +1 -0
- package/dist/testing/contracts/sequences.d.ts +6 -0
- package/dist/testing/contracts/sequences.js +68 -0
- package/dist/testing/contracts/sequences.js.map +1 -0
- package/dist/testing/env.d.ts +63 -0
- package/dist/testing/env.js +105 -0
- package/dist/testing/env.js.map +1 -0
- package/dist/testing/fake-chain.d.ts +118 -0
- package/dist/testing/fake-chain.js +536 -0
- package/dist/testing/fake-chain.js.map +1 -0
- package/dist/testing/fake-clock.d.ts +15 -0
- package/dist/testing/fake-clock.js +86 -0
- package/dist/testing/fake-clock.js.map +1 -0
- package/dist/testing/fake-driver.d.ts +15 -0
- package/dist/testing/fake-driver.js +458 -0
- package/dist/testing/fake-driver.js.map +1 -0
- package/dist/testing/fake-fetch.d.ts +32 -0
- package/dist/testing/fake-fetch.js +81 -0
- package/dist/testing/fake-fetch.js.map +1 -0
- package/dist/testing/fake-plugin.d.ts +30 -0
- package/dist/testing/fake-plugin.js +66 -0
- package/dist/testing/fake-plugin.js.map +1 -0
- package/dist/testing/faulty-store.d.ts +36 -0
- package/dist/testing/faulty-store.js +66 -0
- package/dist/testing/faulty-store.js.map +1 -0
- package/dist/testing/generation.d.ts +60 -0
- package/dist/testing/generation.js +252 -0
- package/dist/testing/generation.js.map +1 -0
- package/dist/testing/index.d.ts +28 -0
- package/dist/testing/index.js +51 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +188 -44
- package/dist/libs/eth/account.d.ts +0 -9
- package/dist/libs/eth/account.js +0 -58
- package/dist/libs/eth/account.js.map +0 -1
- package/dist/libs/eth/contract.d.ts +0 -2
- package/dist/libs/eth/contract.js +0 -7
- package/dist/libs/eth/contract.js.map +0 -1
- package/dist/libs/eth/index.d.ts +0 -20
- package/dist/libs/eth/index.js +0 -62
- package/dist/libs/eth/index.js.map +0 -1
- package/dist/libs/eth/transact.d.ts +0 -2
- package/dist/libs/eth/transact.js +0 -7
- package/dist/libs/eth/transact.js.map +0 -1
- package/dist/libs/index.d.ts +0 -1
- package/dist/libs/index.js +0 -18
- package/dist/libs/index.js.map +0 -1
- package/dist/tool/common.d.ts +0 -28
- package/dist/tool/common.js +0 -33
- package/dist/tool/common.js.map +0 -1
- package/dist/tool/eth-tools.d.ts +0 -3
- package/dist/tool/eth-tools.js +0 -33
- package/dist/tool/eth-tools.js.map +0 -1
- package/dist/tool/index.d.ts +0 -4
- package/dist/tool/index.js +0 -21
- package/dist/tool/index.js.map +0 -1
- package/dist/tool/logging.d.ts +0 -3
- package/dist/tool/logging.js +0 -11
- package/dist/tool/logging.js.map +0 -1
- package/dist/tool/options.d.ts +0 -4
- package/dist/tool/options.js +0 -28
- package/dist/tool/options.js.map +0 -1
- package/dist/type/account.d.ts +0 -9
- package/dist/type/account.js.map +0 -1
- package/dist/type/common.d.ts +0 -18
- package/dist/type/common.js.map +0 -1
- package/dist/type/index.d.ts +0 -3
- package/dist/type/index.js +0 -20
- package/dist/type/index.js.map +0 -1
- package/dist/type/lib-types.d.ts +0 -7
- package/dist/type/lib-types.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/adapters/ton/builder.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TON transfers: fees, funds, the unsigned external request, its assembly, and the\n * broadcaster. Builds use `read` tags, except the sender's jetton wallet, which the proof\n * quorum attests; sending uses `broadcast` / `ambiguous-on-failure` with the caller's\n * fanout and signal.\n *\n * The fund-safety rules this module keeps:\n * - One output per transfer. The verdict answers `failed` for a partly delivered batch, and\n * a failed Operation may be sent again whole, paying twice the outputs that moved; so a\n * TON transfer carries exactly one message, and TON offers no `batch-transfer`.\n * - The built request is decoded again before it is handed out for signing, and must say\n * exactly what the intent says: the one message's destination, value and bounce flag, or\n * the jetton transfer's jetton wallet, recipient, amount and forward amount; the memo; the\n * seqno and lifetime; the wallet (`assertBuilt`).\n * - An emulation that ran nothing is no estimate: every request this builder makes runs the\n * wallet code (deployed, or deployed by its `StateInit`) and sends one message, so a gas\n * fee or a forward fee of 0 is never an `expected` draft that `checkFunds` would trust.\n * tonlib buys the emulated gas with the balance, so a sender whose balance is below what\n * the transfer must at least send is answered `INSUFFICIENT_FUNDS`; any other such\n * emulation is a retryable `PROVIDER_INCONSISTENT`.\n * - A node-suggested fee is bounded by the network's `maxNetworkFee` (the economic ceiling).\n * - A frozen wallet, or an undeployed one at an allocated seqno past 0, is refused from its\n * state before anything is built.\n */\nimport {\n Cell,\n beginCell,\n loadMessage,\n storeMessageRelaxed,\n type MessageRelaxed,\n} from '@ton/core';\nimport {\n computeMessageForwardFees,\n configParseGasLimitsPrices,\n configParseMsgPrices,\n} from '@ton/ton';\nimport type {\n BroadcastResult,\n BuildContext,\n Broadcaster,\n FundsCheck,\n TxBuilder,\n WalletKey,\n} from '../../core/driver/types';\nimport {\n ChainError,\n ConfigError,\n ProviderError,\n SigningError,\n UnsupportedCapabilityError,\n ValidationError,\n isCryptoAioError,\n} from '../../core/errors/error';\nimport { assetId, type AssetRef } from '../../core/model/asset';\nimport type { FeeEstimateDraft } from '../../core/model/fee';\nimport type { DriverIntent, DriverOutput } from '../../core/model/intent';\nimport type { UnsignedTx } from '../../core/model/transaction';\nimport type { SigningRequest } from '../../core/signing/types';\nimport { BROADCAST, PROOF, READ, type AccountState } from './api';\nimport { classifyBroadcastError } from './errors';\nimport {\n feeRequest,\n networkFee,\n tonFeeDetails,\n tonFeeDraft,\n type FeeRequest,\n} from './fees';\nimport {\n MAX_MEMO_BYTES,\n cellFromBoc,\n decodeComment,\n decodeJettonTransfer,\n decodeWalletRequest,\n jettonMessage,\n memoBytes,\n messageFacts,\n nativeMessage,\n requestHeaderOf,\n sdkAddress,\n} from './messages';\nimport { CHAIN_TIME_TOLERANCE, recordedValidFrom } from './network';\nimport { replayVerdict, type StoredMessage } from './proofs';\nimport {\n normalizedHash,\n requestIsOwn,\n resolveIdentity,\n SEND_MODE,\n signedRequest,\n unsignedRequest,\n walletAddress,\n walletIdOf,\n walletStateInit,\n type TonIdentity,\n} from './wallets';\nimport {\n ASSEMBLED_MEMO,\n jettonBalance,\n jettonMaster,\n jettonWalletAddress,\n keep,\n walletSeqno,\n type AssembledMessage,\n type TonContext,\n} from './reader';\nimport type { TonFeeDetails, TonSeqnoOrdering } from './types';\n\n/** The id of the one signing request (1 × ed25519 over the signing cell hash). */\nexport const REQUEST_ID = 'wallet';\n\n/** How far an endpoint's `sync_utime` may be from the local clock, in seconds. */\nexport { CHAIN_TIME_TOLERANCE };\n\n/**\n * How long after `assemble` a first send may skip the replay guard, in milliseconds. A\n * normal transfer sends milliseconds after `assemble`. A first send that comes later (a\n * slow store, a paused process) may follow another process's send of the same bytes\n * through a shared store, and a wallet reset in between would make an unguarded late send\n * pay twice, so it is guarded like a resend. The bound stays well below any sane\n * `lifecycle.leaseMs`; a slower first send only costs one guard.\n */\nexport const FIRST_SEND_MS = 2_000;\n\n/** Whether a first send `age` ms after `assemble` may skip the guard (never below 0). */\nconst soonAfter = (age: number): boolean => age >= 0 && age < FIRST_SEND_MS;\n\nconst hex = (bytes: Uint8Array): string => Buffer.from(bytes).toString('hex');\n\nconst inconsistent = (reason: string) =>\n new ProviderError('PROVIDER_INCONSISTENT', reason, { retryable: true });\n\n/**\n * The funds path's answer when the balance is below what the transfer must at least send\n * (`required`: a lower bound, before gas), as the engine reports a failed funds check.\n */\nconst insufficient = (required: bigint, available: bigint) =>\n new ChainError('INSUFFICIENT_FUNDS', 'insufficient funds for this transfer', {\n details: { required: required.toString(), available: available.toString() },\n });\n\n/** The one output, with the bounce flag its address variant gives it. */\ninterface Output {\n readonly to: string;\n readonly amount: bigint;\n readonly bounce: boolean;\n}\n\ninterface Plan {\n readonly identity: TonIdentity;\n readonly key: WalletKey;\n readonly output: Output;\n readonly jetton?: { readonly master: string; readonly asset: AssetRef };\n readonly request: FeeRequest;\n /** Jettons: the value attached to the jetton wallet message (override or network default). */\n readonly attached?: bigint;\n}\n\n/**\n * The recipient's bounce flag: the variant is `{ bounceable }` only, and a raw address\n * without one is bounceable. Any other variant did not come from the TON codec, and the\n * driver never guesses what it meant.\n */\nfunction bounceOf(output: DriverOutput): boolean {\n const variant = output.variant;\n if (variant === undefined) return true;\n const keys = Object.keys(variant);\n const flag = Object.hasOwn(variant, 'bounceable') ? variant.bounceable : undefined;\n if (keys.length !== 1 || typeof flag !== 'boolean') {\n throw new ValidationError(\n 'INVALID_INTENT',\n `a TON recipient's variant holds only its bounce flag`,\n );\n }\n return flag;\n}\n\n/**\n * The checks every builder method runs before any codec, signing or I/O work:\n * the wallet identity derives exactly `from`, the intent is one output with a memo that\n * fits, and the fee is TON's.\n */\nfunction planOf(ctx: TonContext, intent: DriverIntent, build: BuildContext): Plan {\n const identity = resolveIdentity(build.wallet, ctx.config.globalId);\n const key = build.keys.find((k) => k.scheme === 'ed25519');\n if (!key) throw new ConfigError('CONFIG_INVALID', 'the TON wallet has no ed25519 key');\n if (\n walletAddress(identity, key.publicKey) !== build.from ||\n intent.from !== build.from\n ) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n 'the TON wallet identity does not derive the sending address',\n );\n }\n if (intent.outputs.length > 1) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n 'a TON transfer carries exactly one output (no batch transfers)',\n );\n }\n const [first] = intent.outputs;\n if (!first)\n throw new ValidationError('INVALID_INTENT', 'a TON transfer needs an output');\n if (intent.memo !== undefined && memoBytes(intent.memo) > MAX_MEMO_BYTES) {\n throw new ValidationError(\n 'INVALID_INTENT',\n `a TON memo is at most ${MAX_MEMO_BYTES} bytes`,\n );\n }\n sdkAddress(first.to); // INVALID_ADDRESS unless raw\n const output = { to: first.to, amount: first.amount, bounce: bounceOf(first) };\n const asset = intent.asset;\n let jetton: Plan['jetton'];\n if (asset !== 'native') {\n const master = jettonMaster(ctx, asset);\n jetton = { master, asset: { standard: 'jetton', contract: master } };\n }\n const request = feeRequest(intent.fee, jetton !== undefined);\n const attached = jetton ? (request.attached ?? ctx.config.jettonAttached) : undefined;\n // The attached value pays the recipient's notification and more: at or below the forward\n // amount the jetton wallet cannot run the transfer.\n if (attached !== undefined && attached <= ctx.config.jettonForwardAmount) {\n throw new ValidationError(\n 'INVALID_INTENT',\n `'attached' must exceed the network's jetton forward amount`,\n );\n }\n return {\n identity,\n key,\n output,\n ...(jetton ? { jetton } : {}),\n request,\n ...(attached !== undefined ? { attached } : {}),\n };\n}\n\n/** The allocated seqno (a uint32, never wrapped); a build never runs without one. */\nfunction seqnoOf(build: BuildContext): number {\n const ordering = build.ordering;\n if (ordering?.kind !== 'seqno' || ordering.seqno > 0xffffffffn || ordering.seqno < 0n) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'a TON transfer needs its allocated seqno',\n );\n }\n return Number(ordering.seqno);\n}\n\n/**\n * The fee draft `build` and `checkFunds` are given, read strictly as a stored record:\n * TON's, and made for this transfer's attached value (none for native coin).\n */\nfunction feeOf(fee: FeeEstimateDraft, plan: Plan): TonFeeDetails {\n const details = tonFeeDetails(fee.details);\n if (fee.kind !== 'ton' || details.attached !== plan.attached) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'the fee estimate was not made for this TON transfer',\n );\n }\n return details;\n}\n\n/** The wallet's state; a frozen wallet runs no message, its deploy `StateInit` included. */\nasync function walletState(ctx: TonContext, from: string): Promise<AccountState> {\n const state = await ctx.api.account(from, READ);\n if (state.status === 'frozen') {\n throw new ChainError('TX_REFUSED', 'the wallet account is frozen');\n }\n return state;\n}\n\n/**\n * An undeployed wallet only runs a request at seqno 0 (its `StateInit`'s). At a later\n * allocated seqno the state lags, or the wallet was deleted, and its `StateInit` would\n * restart it at 0: either way nothing is built, and a later read decides.\n */\nfunction assertDeployable(state: AccountState, seqno: number): void {\n if (state.status === 'uninitialized' && seqno !== 0) {\n throw inconsistent('the wallet is not deployed at the allocated seqno');\n }\n}\n\n/**\n * The endpoint's chain time, when it is within the tolerance of the local clock: one bad\n * read must not set a lifetime the core then waits out.\n */\nfunction chainTime(ctx: TonContext, state: AccountState): number {\n if (Math.abs(state.syncUtime - ctx.clock.now() / 1000) > CHAIN_TIME_TOLERANCE) {\n throw inconsistent('the endpoint reports a chain time far from the local clock');\n }\n return state.syncUtime;\n}\n\n/** The one message, and for jettons the sender's jetton wallet it goes to. */\nasync function messageOf(\n ctx: TonContext,\n intent: DriverIntent,\n plan: Plan,\n from: string,\n queryId: bigint,\n): Promise<{ readonly message: MessageRelaxed; readonly jettonWallet?: string }> {\n const { output } = plan;\n const memo = intent.memo !== undefined ? { memo: intent.memo } : {};\n if (!plan.jetton || plan.attached === undefined) {\n return {\n message: nativeMessage({\n to: output.to,\n value: output.amount,\n bounce: output.bounce,\n ...memo,\n }),\n };\n }\n // The jetton wallet is the one the intent's master names for our wallet, as\n // the proof quorum attests it (cached only so). The verdict's legs carry no master, so\n // this is what binds a transfer to the intended jetton.\n const jettonWallet = await jettonWalletAddress(ctx, plan.jetton.master, from, PROOF);\n return {\n jettonWallet,\n message: jettonMessage({\n jettonWallet,\n attached: plan.attached,\n queryId,\n amount: output.amount,\n destination: output.to,\n responseDestination: from,\n forwardAmount: ctx.config.jettonForwardAmount,\n ...memo,\n }),\n };\n}\n\nconst malformedConfig = () =>\n new ProviderError('PROVIDER_UNAVAILABLE', 'malformed message prices in the config', {\n retryable: true,\n });\n\n/**\n * The config's forward fee of `message`: param 25, or 24 when the masterchain is\n * involved (transaction.cpp prices a message by the source's or the destination's chain).\n * The cell goes through the capped `cellFromBoc`; an answer that does not parse is the\n * endpoint's fault, retryable, never a bare SDK error.\n */\nasync function configForwardFee(\n ctx: TonContext,\n from: string,\n message: MessageRelaxed,\n): Promise<bigint> {\n const masterchain =\n from.startsWith('-1:') ||\n (message.info.type === 'internal' && message.info.dest.workChain === -1);\n const cell = cellFromBoc(await ctx.api.configParam(masterchain ? 24 : 25, READ));\n if (!cell) throw malformedConfig();\n try {\n const prices = configParseMsgPrices(cell.beginParse());\n const stored = beginCell().store(storeMessageRelaxed(message)).endCell();\n const { fees, remaining } = computeMessageForwardFees(prices, stored);\n return fees + remaining;\n } catch {\n throw malformedConfig();\n }\n}\n\n/** `gas_prices#dd` and `gas_prices_ext#de` (block.tlb): gas prices without a flat part. */\nconst GAS_PRICES_TAGS: ReadonlySet<number> = new Set([0xdd, 0xde]);\n\n/**\n * The least gas fee a wallet run pays, `flat_gas_price` of\n * config param 21 (basechain) or 20 (masterchain), by the sender's workchain, which prices\n * the account's own compute phase. It is the price of the first `flat_gas_limit` gas units,\n * which every run that computes pays in full (transaction.cpp `gas_fee`); never\n * `flat_gas_limit × flat_gas_price`, a units error about 100 times too high. A config\n * without the flat part (`gas_prices`, `gas_prices_ext`) gives no floor; one that does not\n * parse is the endpoint's fault, retryable. One endpoint's answer: the caller holds it to\n * the ceiling before trusting it.\n */\nasync function configGasFloor(ctx: TonContext, from: string): Promise<bigint> {\n const malformed = () =>\n new ProviderError('PROVIDER_UNAVAILABLE', 'malformed gas prices in the config', {\n retryable: true,\n });\n const cell = cellFromBoc(\n await ctx.api.configParam(from.startsWith('-1:') ? 20 : 21, READ),\n );\n if (!cell) throw malformed();\n try {\n const slice = cell.beginParse();\n if (GAS_PRICES_TAGS.has(slice.preloadUint(8))) return 0n;\n return configParseGasLimitsPrices(slice).flatGasPrice;\n } catch {\n throw malformed();\n }\n}\n\n/** The external message's body (the wallet request) as a base64 BOC. */\nconst bodyOf = (external: Cell): string =>\n loadMessage(external.beginParse()).body.toBoc().toString('base64');\n\n/**\n * The recipient binding: the unsigned external message, decoded again, says exactly what\n * the intent says. It goes to `from`, deploys exactly when asked, carries our wallet's\n * request at `seqno` until `validUntil`, and sends one message with `SEND_MODE` exactly\n * (never +128, which sends the whole balance, nor +32), no extra currencies and no\n * `StateInit`: native coin to the recipient with its value, bounce flag and memo; or a\n * jetton `transfer` to the attested jetton wallet with the attached value, bounceable, naming\n * the recipient, the amount, `from` for the excess, no custom payload, the network's forward\n * amount, the memo and the seqno as query id. Anything else is never handed out for signing\n * (`INVALID_INTENT`, fixed text).\n */\nfunction assertBuilt(\n ctx: TonContext,\n intent: DriverIntent,\n plan: Plan,\n unsigned: Cell,\n expected: {\n readonly from: string;\n readonly deploy: boolean;\n readonly seqno: number;\n readonly validUntil: number;\n readonly jettonWallet?: string;\n },\n): void {\n const refuse = (): never => {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'the built TON message does not match the intent',\n );\n };\n let external: ReturnType<typeof loadMessage>;\n try {\n external = loadMessage(unsigned.beginParse());\n } catch {\n return refuse();\n }\n if (\n external.info.type !== 'external-in' ||\n external.info.dest.toRawString() !== expected.from ||\n Boolean(external.init) !== expected.deploy\n ) {\n refuse();\n }\n const request = decodeWalletRequest(external.body);\n if (\n request?.auth !== 'external' ||\n request.seqno !== expected.seqno ||\n request.validUntil !== expected.validUntil ||\n request.walletId !== walletIdOf(plan.identity, plan.key.publicKey) ||\n request.messages.length !== 1 ||\n request.modes.length !== 1 ||\n request.modes[0] !== SEND_MODE\n ) {\n return refuse();\n }\n const message = request.messages[0] as MessageRelaxed;\n const facts = messageFacts(message);\n if (\n !facts ||\n message.info.type !== 'internal' ||\n (message.info.value.other?.size ?? 0) > 0 ||\n message.init\n ) {\n return refuse();\n }\n const { output } = plan;\n if (!plan.jetton) {\n const memo =\n intent.memo !== undefined\n ? decodeComment(facts.body) === intent.memo\n : facts.body.bits.length === 0 && facts.body.refs.length === 0;\n if (\n facts.to !== output.to ||\n facts.value !== output.amount ||\n message.info.bounce !== output.bounce ||\n !memo\n ) {\n refuse();\n }\n return;\n }\n const transfer = decodeJettonTransfer(facts.body);\n if (\n facts.to !== expected.jettonWallet ||\n facts.value !== plan.attached ||\n !message.info.bounce ||\n transfer?.destination !== output.to ||\n transfer.amount !== output.amount ||\n transfer.queryId !== BigInt(expected.seqno) ||\n transfer.responseDestination !== expected.from ||\n transfer.customPayload ||\n transfer.forwardAmount !== ctx.config.jettonForwardAmount ||\n transfer.comment !== intent.memo\n ) {\n refuse();\n }\n}\n\nexport function createTonBuilder(ctx: TonContext): TxBuilder {\n const { api, config } = ctx;\n return {\n async estimateFee(intent, build): Promise<FeeEstimateDraft> {\n const plan = planOf(ctx, intent, build);\n const state = await walletState(ctx, build.from);\n const now = chainTime(ctx, state);\n const deploy = state.status === 'uninitialized';\n // The engine allocates the seqno; an estimate outside it (`Blockchain.estimateFee`)\n // runs at the wallet's live one, read at the state's own block, since the\n // wallet code refuses any other and the emulation would then run nothing.\n const seqno =\n build.ordering !== undefined\n ? seqnoOf(build)\n : deploy\n ? 0\n : Number(await walletSeqno(ctx, build.from, READ));\n assertDeployable(state, seqno);\n const { message } = await messageOf(ctx, intent, plan, build.from, BigInt(seqno));\n const unsigned = await unsignedRequest(plan.identity, plan.key.publicKey, {\n seqno,\n validUntil: now + config.validForSeconds,\n messages: [message],\n deploy: false,\n });\n const init = deploy\n ? walletStateInit(plan.identity, plan.key.publicKey)\n : undefined;\n const emulated = await api.estimateFee(\n {\n address: build.from,\n body: bodyOf(unsigned.message),\n ...(init?.code && init.data\n ? {\n initCode: init.code.toBoc().toString('base64'),\n initData: init.data.toBoc().toString('base64'),\n }\n : {}),\n },\n READ,\n );\n // The forward fee counts once. The emulation's follows the real action list; the\n // config's formula is its floor, so an endpoint that reports less cannot shrink it.\n const computed = await configForwardFee(ctx, build.from, message);\n // The economic ceiling by the sender's workchain. The config's forward fee\n // comes from one endpoint too, so it is held to the ceiling before anything trusts it:\n // an inflated param 25 must never turn an empty emulation into a definitive shortfall.\n const ceiling = build.from.startsWith('-1:')\n ? config.maxNetworkFee.masterchain\n : config.maxNetworkFee.basechain;\n if (computed > ceiling) {\n throw inconsistent(\n \"the endpoint's config prices a forward fee above the policy maximum\",\n );\n }\n // The wallet runs (deployed, or by its `StateInit`) and sends one\n // message, so an emulation without gas or without a forward fee ran nothing.\n if (emulated.gasFee === 0n || emulated.forwardFee === 0n) {\n // tonlib buys the emulated gas with the balance (`compute_gas_limits`), so\n // a sender that cannot pay emulates to nothing too. Below what the transfer must at\n // least pay (the amount, or the jetton attached value, plus the config's forward\n // fee and the wallet run's flat gas price) that is the answer; otherwise\n // the endpoint's view lags, or it refused the request (another seqno), and a later\n // read decides. The gas floor comes from one endpoint too, so it is held to the\n // ceiling first.\n const gas = await configGasFloor(ctx, build.from);\n if (computed + gas > ceiling) {\n throw inconsistent(\"the endpoint's config prices gas above the policy maximum\");\n }\n const minimum = (plan.attached ?? plan.output.amount) + computed + gas;\n if (state.balance < minimum) throw insufficient(minimum, state.balance);\n throw inconsistent(\"the endpoint's emulation did not run the transfer\");\n }\n const details: TonFeeDetails = {\n importFee: emulated.importFee,\n gasFee: emulated.gasFee,\n storageFee: emulated.storageFee,\n ...(emulated.forwardFee >= computed\n ? { forwardFee: emulated.forwardFee, forwardFeeSource: 'emulated' as const }\n : { forwardFee: computed, forwardFeeSource: 'computed' as const }),\n deploy,\n ...(plan.attached !== undefined\n ? { attached: plan.attached, forwardAmount: config.jettonForwardAmount }\n : {}),\n };\n if (networkFee(details) > ceiling) {\n throw inconsistent('the endpoint suggests a fee above the policy maximum');\n }\n return tonFeeDraft({\n speed: plan.request.speed,\n details,\n ...(plan.jetton ? { jettonOutputs: 1 } : {}),\n payer: build.from,\n });\n },\n\n async checkFunds(intent, fee, build): Promise<FundsCheck> {\n const plan = planOf(ctx, intent, build);\n const details = feeOf(fee, plan);\n const charges = networkFee(details) + (details.attached ?? 0n);\n const available = (await walletState(ctx, build.from)).balance;\n const required = charges + (plan.jetton ? 0n : plan.output.amount);\n if (available < required) {\n return { ok: false, asset: 'native', required, available };\n }\n if (plan.jetton) {\n const wanted = plan.output.amount;\n const held = await jettonBalance(ctx, plan.jetton.master, build.from, READ);\n if (held < wanted) {\n return {\n ok: false,\n asset: plan.jetton.asset,\n required: wanted,\n available: held,\n };\n }\n }\n return { ok: true };\n },\n\n async build(intent, fee, build): Promise<UnsignedTx> {\n const plan = planOf(ctx, intent, build);\n const seqno = seqnoOf(build);\n feeOf(fee, plan);\n const state = await walletState(ctx, build.from);\n // The lifetime runs from the endpoint's chain time, bounded by the local clock; the\n // proof checks expiry against attested chain time, never a node's clock.\n const now = chainTime(ctx, state);\n const validUntil = now + config.validForSeconds;\n // When the message may first run, for the proof's window: the chain time, but\n // never later than the local clock (an endpoint ahead of it sets only the lifetime).\n const validFrom = Math.min(now, Math.floor(ctx.clock.now() / 1000));\n const ordering: TonSeqnoOrdering = {\n kind: 'seqno',\n seqno: BigInt(seqno),\n validUntil,\n validFrom,\n };\n assertDeployable(state, seqno);\n const deploy = state.status === 'uninitialized';\n const { message, jettonWallet } = await messageOf(\n ctx,\n intent,\n plan,\n build.from,\n BigInt(seqno),\n );\n const unsigned = await unsignedRequest(plan.identity, plan.key.publicKey, {\n seqno,\n validUntil,\n messages: [message],\n deploy,\n });\n assertBuilt(ctx, intent, plan, unsigned.message, {\n from: build.from,\n deploy,\n seqno,\n validUntil,\n ...(jettonWallet !== undefined ? { jettonWallet } : {}),\n });\n const request: SigningRequest = {\n id: REQUEST_ID,\n scheme: 'ed25519',\n payload: unsigned.digest,\n payloadKind: 'message',\n publicKey: plan.key.publicKey,\n ...(plan.key.keyRef ? { keyRef: plan.key.keyRef } : {}),\n };\n return {\n payload: {\n encoding: 'base64',\n data: unsigned.message.toBoc().toString('base64'),\n },\n signingRequests: [request],\n ordering,\n fee,\n summary: {\n asset: assetId(ctx.chain.id, ctx.network.id, plan.jetton?.asset ?? 'native'),\n outputs: [{ to: plan.output.to, amount: plan.output.amount.toString() }],\n ...(intent.memo !== undefined ? { memo: intent.memo } : {}),\n },\n };\n },\n\n async assemble(unsigned, signatures) {\n const request = unsigned.signingRequests[0];\n const signature = signatures.find((s) => s.requestId === request?.id);\n if (!request || !signature || signature.bytes.length !== 64) {\n throw new SigningError('SIGNING_FAILED', 'the wallet signature is missing');\n }\n const payload =\n unsigned.payload.encoding === 'base64'\n ? cellFromBoc(unsigned.payload.data)\n : null;\n if (!payload) {\n throw new SigningError(\n 'SIGNING_FAILED',\n 'the unsigned TON payload does not parse',\n );\n }\n // The signature goes only where the rest of the request hashes to its digest.\n const signed = signedRequest(payload, request.payload, signature.bytes);\n const validFrom = boundOrdering(\n unsigned.ordering,\n signed,\n request.publicKey,\n ctx.config.globalId,\n );\n const id = hex(normalizedHash(signed));\n // Assembled here and not sent yet, for the replay guard. A repeat keeps the record\n // as it is, so it never makes sent bytes look unsent.\n if (!ctx.assembled.has(id)) {\n const record: AssembledMessage = {\n validFrom,\n assembledAt: ctx.clock.now(),\n sent: false,\n };\n keep(ctx.assembled, id, record, ASSEMBLED_MEMO);\n }\n return {\n raw: { encoding: 'base64', data: signed.toBoc().toString('base64') },\n ref: { id, idKind: 'message-hash', canonical: false },\n };\n },\n };\n}\n\n/**\n * The proofs and the replay guard read the Attempt's stored ordering, never the bytes, so\n * it must be the signed request's own (the Tron and Solana builders bind theirs the same\n * way): a `seqno` ordering with the request's seqno and `valid_until`, a well-formed\n * recorded start, and a request whose signature verifies under the signing key and whose\n * wallet id that key derives into the message's destination. An ordering changed on its\n * way through a store would otherwise move the proof's window. Returns the recorded\n * start.\n */\nfunction boundOrdering(\n ordering: UnsignedTx['ordering'],\n signed: Cell,\n publicKey: Uint8Array,\n globalId: number,\n): number {\n const refuse = () =>\n new SigningError(\n 'SIGNING_FAILED',\n \"the Attempt's ordering does not match the signed TON request\",\n );\n let external: ReturnType<typeof loadMessage>;\n try {\n external = loadMessage(signed.beginParse());\n } catch {\n throw refuse();\n }\n const slot = ordering as Partial<TonSeqnoOrdering> | undefined;\n const request =\n external.info.type === 'external-in' ? decodeWalletRequest(external.body) : null;\n if (\n external.info.type !== 'external-in' ||\n request === null ||\n slot?.kind !== 'seqno' ||\n typeof slot.seqno !== 'bigint' ||\n slot.seqno !== BigInt(request.seqno) ||\n slot.validUntil !== request.validUntil ||\n !requestIsOwn(external.info.dest.toRawString(), external.body, publicKey, globalId)\n ) {\n throw refuse();\n }\n const validFrom = recordedValidFrom({ ...slot, validUntil: request.validUntil });\n if (validFrom === undefined) throw refuse();\n return validFrom;\n}\n\nconst MALFORMED: BroadcastResult = Object.freeze({\n kind: 'rejected',\n reason: 'malformed message',\n});\n\nconst ALREADY_KNOWN: BroadcastResult = Object.freeze({ kind: 'already-known' });\n\n/**\n * Raw bytes as the broadcaster reads them (through the capped `cellFromBoc`: a bare\n * broadcast's bytes are anyone's): their TEP-467 hash, and, when their body carries a\n * wallet request's signed header, what the replay guard needs. Null when they are no\n * external message.\n */\nfunction storedOf(\n data: string,\n): { readonly id: string; readonly message?: StoredMessage } | null {\n const cell = cellFromBoc(data);\n if (!cell) return null;\n try {\n const external = loadMessage(cell.beginParse());\n if (external.info.type !== 'external-in') return null;\n const id = hex(normalizedHash(cell));\n const header = requestHeaderOf(external.body);\n if (!header) return { id };\n return {\n id,\n message: {\n wallet: external.info.dest.toRawString(),\n id,\n seqno: BigInt(header.seqno),\n validUntil: header.validUntil,\n },\n };\n } catch {\n return null;\n }\n}\n\n/**\n * The replay guard's answer for stored bytes (`replayVerdict`). One that cannot decide\n * never sends: its reason is logged by code, and the send fails with a retryable error,\n * which the engine records as ambiguous (the monitor and the proof go on), never as a\n * refusal: a non-retryable `TX_REFUSED` would invite a caller's retry with a new seqno.\n */\nasync function guarded(\n ctx: TonContext,\n message: StoredMessage,\n): Promise<'send' | 'ours'> {\n try {\n return await replayVerdict(ctx, message);\n } catch (error) {\n ctx.log.warn('stored bytes were not sent again: they may already have run', {\n code: 'RESEND_WITHHELD',\n });\n throw new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n 'not sent: the replay guard could not rule out an earlier run of this message',\n { retryable: true, ...(isCryptoAioError(error) ? { cause: error } : {}) },\n );\n }\n}\n\n/** The node's own error text inside a v2 error body (`{ ok: false, error }`), if any. */\nfunction nodeText(body: unknown): string | undefined {\n if (typeof body !== 'string') return undefined;\n try {\n const parsed = JSON.parse(body) as unknown;\n if (parsed !== null && typeof parsed === 'object') {\n const text = (parsed as Record<string, unknown>).error;\n if (typeof text === 'string') return text;\n }\n } catch {\n // Not JSON, or cut by the transport: the body itself is the text.\n }\n return body;\n}\n\nexport function createTonBroadcaster(ctx: TonContext): Broadcaster {\n return {\n async broadcast(signed, options = {}) {\n // Bytes that are no external message can never be valid anywhere: `rejected`, from\n // our own parse, is the only rejection, never a node's text: toncenter's refusals\n // are unstructured, and a lying endpoint could claim one for bytes it then relays.\n if (signed.raw.encoding !== 'base64') return MALFORMED;\n const stored = storedOf(signed.raw.data);\n if (stored === null) return MALFORMED;\n const expected = stored.id;\n // Bytes this driver assembled and never sent cannot have run anywhere, so a first\n // send goes out at once, within FIRST_SEND_MS of `assemble` (later, another process\n // sharing the store may have sent them). Every other send of stored bytes (a\n // resend, a dropped rebroadcast, recovery, a caller's same-key retry, bytes from\n // another process or a bare broadcast) asks the chain first: already run means\n // never again. Resending the same bytes is not idempotent on TON: a wallet deleted\n // and re-deployed from its `StateInit` counts its seqno from 0 again, so a message\n // that already ran can run, and pay, twice.\n const record = ctx.assembled.get(expected);\n const first =\n record?.sent === false && soonAfter(ctx.clock.now() - record.assembledAt);\n if (stored.message !== undefined && !first) {\n const verdict = await guarded(ctx, {\n ...stored.message,\n ...(record ? { validFrom: record.validFrom } : {}),\n });\n if (verdict === 'ours') return ALREADY_KNOWN;\n }\n if (record) record.sent = true;\n try {\n const sent = await ctx.api.send(signed.raw.data, {\n ...BROADCAST,\n ...(options.fanout !== undefined ? { fanout: options.fanout } : {}),\n ...(options.signal ? { signal: options.signal } : {}),\n });\n if (sent.hashNorm !== expected) {\n ctx.log.warn('the node reports another normalized message hash', {\n code: 'MESSAGE_HASH_MISMATCH',\n });\n }\n return { kind: 'accepted' };\n } catch (error) {\n // Only a definitive 4xx answer is classified, and the classifier itself throws a\n // retryable, ambiguous error for a \"not now\" answer. A\n // 429, 408, 5xx (toncenter's refusals), a timeout or any answer after an attempt\n // that may have been delivered goes back unchanged: the ambiguous path.\n if (isCryptoAioError(error, 'RPC_ERROR') && !error.ambiguous) {\n return classifyBroadcastError(nodeText(error.details?.body) ?? error.message);\n }\n throw error;\n }\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The built-in TON chain: mainnet and testnet. Every value is verified, live on toncenter
|
|
3
|
+
* or against docs.ton.org and ton.org, or is a documented library policy:
|
|
4
|
+
* - `identity`: the network's global id (config param 19), which the identity probe reads.
|
|
5
|
+
* - The native coin is Gram (ticker GRAM, formerly Toncoin), 9 decimals; the plugin also
|
|
6
|
+
* registers the alias `TON` for it.
|
|
7
|
+
* - `finality: masterchain`: a masterchain block is final once it exists (BFT).
|
|
8
|
+
* - `maxLagBlocks: 150`: library policy, about 60 s of masterchain blocks (measured ~0.4 s
|
|
9
|
+
* apart).
|
|
10
|
+
* - `reorgWindow: 16`: library policy, unused; TON has no block source (sharded).
|
|
11
|
+
* - `params`: `validForSeconds` (a message's lifetime, from chain time), `jettonAttached`
|
|
12
|
+
* and `jettonForwardAmount` (nanograms per jetton transfer), `finalitySkewBlocks` (how far
|
|
13
|
+
* a healthy proof peer may trail the freshest endpoint), all library policy.
|
|
14
|
+
*/
|
|
15
|
+
import type { ChainInfo } from '../../core/model/chain';
|
|
16
|
+
export declare const TON_CHAINS: readonly ChainInfo[];
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TON_CHAINS = void 0;
|
|
4
|
+
const freeze_1 = require("../../core/util/freeze");
|
|
5
|
+
function tonNetwork(id, globalId, testnet, explorer) {
|
|
6
|
+
return {
|
|
7
|
+
id,
|
|
8
|
+
identity: String(globalId),
|
|
9
|
+
testnet,
|
|
10
|
+
feeModel: 'ton',
|
|
11
|
+
finality: { kind: 'masterchain' },
|
|
12
|
+
defaultConfirmations: 1,
|
|
13
|
+
reorgWindow: 16,
|
|
14
|
+
maxLagBlocks: 150,
|
|
15
|
+
explorer: { tx: `${explorer}/transaction/{id}`, address: `${explorer}/{address}` },
|
|
16
|
+
params: {
|
|
17
|
+
validForSeconds: 60,
|
|
18
|
+
jettonAttached: 50000000n,
|
|
19
|
+
jettonForwardAmount: 1n,
|
|
20
|
+
finalitySkewBlocks: 10,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
exports.TON_CHAINS = (0, freeze_1.deepFreeze)([
|
|
25
|
+
{
|
|
26
|
+
id: 'ton',
|
|
27
|
+
family: 'ton',
|
|
28
|
+
model: 'account',
|
|
29
|
+
ordering: 'seqno',
|
|
30
|
+
schemes: ['ed25519'],
|
|
31
|
+
nativeAsset: { symbol: 'GRAM', decimals: 9, name: 'Gram' },
|
|
32
|
+
defaultNetwork: 'mainnet',
|
|
33
|
+
networks: {
|
|
34
|
+
mainnet: tonNetwork('mainnet', -239, false, 'https://tonviewer.com'),
|
|
35
|
+
testnet: tonNetwork('testnet', -3, true, 'https://testnet.tonviewer.com'),
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
]);
|
|
39
|
+
//# sourceMappingURL=chains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../src/adapters/ton/chains.ts"],"names":[],"mappings":";;;AAeA,mDAAoD;AAEpD,SAAS,UAAU,CACjB,EAAU,EACV,QAAgB,EAChB,OAAgB,EAChB,QAAgB;IAEhB,OAAO;QACL,EAAE;QACF,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;QAC1B,OAAO;QACP,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;QACjC,oBAAoB,EAAE,CAAC;QACvB,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,GAAG;QACjB,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,QAAQ,mBAAmB,EAAE,OAAO,EAAE,GAAG,QAAQ,YAAY,EAAE;QAClF,MAAM,EAAE;YACN,eAAe,EAAE,EAAE;YACnB,cAAc,EAAE,SAAW;YAC3B,mBAAmB,EAAE,EAAE;YACvB,kBAAkB,EAAE,EAAE;SACvB;KACF,CAAC;AACJ,CAAC;AAEY,QAAA,UAAU,GAAyB,IAAA,mBAAU,EAAC;IACzD;QACE,EAAE,EAAE,KAAK;QACT,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,CAAC,SAAS,CAAC;QACpB,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;QAC1D,cAAc,EAAE,SAAS;QACzB,QAAQ,EAAE;YACR,OAAO,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,uBAAuB,CAAC;YACpE,OAAO,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,+BAA+B,CAAC;SAC1E;KACF;CACF,CAAC,CAAC","sourcesContent":["/**\n * The built-in TON chain: mainnet and testnet. Every value is verified, live on toncenter\n * or against docs.ton.org and ton.org, or is a documented library policy:\n * - `identity`: the network's global id (config param 19), which the identity probe reads.\n * - The native coin is Gram (ticker GRAM, formerly Toncoin), 9 decimals; the plugin also\n * registers the alias `TON` for it.\n * - `finality: masterchain`: a masterchain block is final once it exists (BFT).\n * - `maxLagBlocks: 150`: library policy, about 60 s of masterchain blocks (measured ~0.4 s\n * apart).\n * - `reorgWindow: 16`: library policy, unused; TON has no block source (sharded).\n * - `params`: `validForSeconds` (a message's lifetime, from chain time), `jettonAttached`\n * and `jettonForwardAmount` (nanograms per jetton transfer), `finalitySkewBlocks` (how far\n * a healthy proof peer may trail the freshest endpoint), all library policy.\n */\nimport type { ChainInfo, NetworkInfo } from '../../core/model/chain';\nimport { deepFreeze } from '../../core/util/freeze';\n\nfunction tonNetwork(\n id: string,\n globalId: number,\n testnet: boolean,\n explorer: string,\n): NetworkInfo {\n return {\n id,\n identity: String(globalId),\n testnet,\n feeModel: 'ton',\n finality: { kind: 'masterchain' },\n defaultConfirmations: 1,\n reorgWindow: 16,\n maxLagBlocks: 150,\n explorer: { tx: `${explorer}/transaction/{id}`, address: `${explorer}/{address}` },\n params: {\n validForSeconds: 60,\n jettonAttached: 50_000_000n,\n jettonForwardAmount: 1n,\n finalitySkewBlocks: 10,\n },\n };\n}\n\nexport const TON_CHAINS: readonly ChainInfo[] = deepFreeze([\n {\n id: 'ton',\n family: 'ton',\n model: 'account',\n ordering: 'seqno',\n schemes: ['ed25519'],\n nativeAsset: { symbol: 'GRAM', decimals: 9, name: 'Gram' },\n defaultNetwork: 'mainnet',\n networks: {\n mainnet: tonNetwork('mainnet', -239, false, 'https://tonviewer.com'),\n testnet: tonNetwork('testnet', -3, true, 'https://testnet.tonviewer.com'),\n },\n },\n]);\n"]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { DriverTransaction } from '../../core/driver/types';
|
|
2
|
+
import type { V3Transaction } from './api';
|
|
3
|
+
/** A jetton wallet proven to belong to `owner` under `master`. */
|
|
4
|
+
export interface VerifiedJettonWallet {
|
|
5
|
+
readonly address: string;
|
|
6
|
+
readonly owner: string;
|
|
7
|
+
readonly master: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Whether the contract ran its inbound message to the end, so its state changes and
|
|
11
|
+
* outgoing messages stand: its compute and action phases both succeeded. The chain records
|
|
12
|
+
* nothing else (transaction.cpp, collator.cpp):
|
|
13
|
+
* - an action phase follows exactly a successful compute phase, and a skipped compute
|
|
14
|
+
* phase never succeeded;
|
|
15
|
+
* - `aborted` is exactly "not ran" (a skipped compute phase included);
|
|
16
|
+
* - a bounce phase exists exactly for a bounceable inbound message (`bounce_enabled`, the
|
|
17
|
+
* message's own flag; never an external one or a bounce) whose phases failed, and always
|
|
18
|
+
* when its compute phase did;
|
|
19
|
+
* - the outgoing messages are distinct, as many as the action phase created when it ran,
|
|
20
|
+
* and nothing but the bounce when it did not.
|
|
21
|
+
* A record that breaks any of these contradicts the chain: a retryable
|
|
22
|
+
* `PROVIDER_INCONSISTENT`, which decides nothing, never a default.
|
|
23
|
+
*/
|
|
24
|
+
export declare function ran(tx: V3Transaction): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Whether the code committed its state (`COMMIT`), then threw: the chain counts that
|
|
27
|
+
* compute phase a success (transaction.cpp: `success = accepted && committed`) and runs only
|
|
28
|
+
* the actions committed before, so the code did not finish what it was asked. W5 refuses an
|
|
29
|
+
* external request without send mode +2 this way (137).
|
|
30
|
+
*/
|
|
31
|
+
export declare function threwAfterCommit(tx: V3Transaction): boolean;
|
|
32
|
+
/** Whether the transaction did what its inbound message asked, as the chain reports it. */
|
|
33
|
+
export declare function executed(tx: V3Transaction): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* The jetton wallet whose ownership decides this transaction's jetton movement: the
|
|
36
|
+
* account itself for an `internal_transfer`, the sender for a `transfer_notification`.
|
|
37
|
+
* Undefined when no jetton moved.
|
|
38
|
+
*/
|
|
39
|
+
export declare function jettonWalletToVerify(tx: V3Transaction): string | undefined;
|
|
40
|
+
export declare function decodeTransaction(tx: V3Transaction, options?: {
|
|
41
|
+
readonly blockHash?: string;
|
|
42
|
+
readonly jetton?: VerifiedJettonWallet;
|
|
43
|
+
}): DriverTransaction;
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ran = ran;
|
|
4
|
+
exports.threwAfterCommit = threwAfterCommit;
|
|
5
|
+
exports.executed = executed;
|
|
6
|
+
exports.jettonWalletToVerify = jettonWalletToVerify;
|
|
7
|
+
exports.decodeTransaction = decodeTransaction;
|
|
8
|
+
const error_1 = require("../../core/errors/error");
|
|
9
|
+
const messages_1 = require("./messages");
|
|
10
|
+
const wallets_1 = require("./wallets");
|
|
11
|
+
/**
|
|
12
|
+
* Whether the contract ran its inbound message to the end, so its state changes and
|
|
13
|
+
* outgoing messages stand: its compute and action phases both succeeded. The chain records
|
|
14
|
+
* nothing else (transaction.cpp, collator.cpp):
|
|
15
|
+
* - an action phase follows exactly a successful compute phase, and a skipped compute
|
|
16
|
+
* phase never succeeded;
|
|
17
|
+
* - `aborted` is exactly "not ran" (a skipped compute phase included);
|
|
18
|
+
* - a bounce phase exists exactly for a bounceable inbound message (`bounce_enabled`, the
|
|
19
|
+
* message's own flag; never an external one or a bounce) whose phases failed, and always
|
|
20
|
+
* when its compute phase did;
|
|
21
|
+
* - the outgoing messages are distinct, as many as the action phase created when it ran,
|
|
22
|
+
* and nothing but the bounce when it did not.
|
|
23
|
+
* A record that breaks any of these contradicts the chain: a retryable
|
|
24
|
+
* `PROVIDER_INCONSISTENT`, which decides nothing, never a default.
|
|
25
|
+
*/
|
|
26
|
+
function ran(tx) {
|
|
27
|
+
const { compute, action, inMsg, outMsgs } = tx;
|
|
28
|
+
const done = compute.success && action?.success === true;
|
|
29
|
+
// Unknown (null) when the indexer leaves an inbound internal message's flag out.
|
|
30
|
+
const bounceable = !inMsg || inMsg.source === null ? false : inMsg.bounce;
|
|
31
|
+
if ((action !== undefined) !== compute.success ||
|
|
32
|
+
(compute.skipped && compute.success) ||
|
|
33
|
+
tx.aborted === done ||
|
|
34
|
+
(tx.bounce !== undefined && (done || bounceable === false)) ||
|
|
35
|
+
(bounceable === true && !compute.success && tx.bounce === undefined) ||
|
|
36
|
+
new Set(outMsgs.map((m) => m.hash)).size !== outMsgs.length ||
|
|
37
|
+
(done
|
|
38
|
+
? outMsgs.length !== action?.msgsCreated
|
|
39
|
+
: // A flag the indexer leaves out (null) says nothing against the chain.
|
|
40
|
+
outMsgs.some((m) => m.bounced === false))) {
|
|
41
|
+
throw new error_1.ProviderError('PROVIDER_INCONSISTENT', 'the indexed transaction phases contradict each other', { retryable: true });
|
|
42
|
+
}
|
|
43
|
+
return done;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Whether the code committed its state (`COMMIT`), then threw: the chain counts that
|
|
47
|
+
* compute phase a success (transaction.cpp: `success = accepted && committed`) and runs only
|
|
48
|
+
* the actions committed before, so the code did not finish what it was asked. W5 refuses an
|
|
49
|
+
* external request without send mode +2 this way (137).
|
|
50
|
+
*/
|
|
51
|
+
function threwAfterCommit(tx) {
|
|
52
|
+
const code = tx.compute.exitCode;
|
|
53
|
+
return tx.compute.success && code !== undefined && code !== 0 && code !== 1;
|
|
54
|
+
}
|
|
55
|
+
/** Whether the transaction did what its inbound message asked, as the chain reports it. */
|
|
56
|
+
function executed(tx) {
|
|
57
|
+
const done = ran(tx);
|
|
58
|
+
if (tx.inMsg?.source === null)
|
|
59
|
+
return done && !threwAfterCommit(tx);
|
|
60
|
+
return tx.bounce !== 'ok';
|
|
61
|
+
}
|
|
62
|
+
/** A message body's kind, read once (a body may hold up to 2^13 cells). */
|
|
63
|
+
function bodyOf(message) {
|
|
64
|
+
if (message.bounced)
|
|
65
|
+
return { kind: 'bounced' };
|
|
66
|
+
const cell = (0, messages_1.messageBody)(message);
|
|
67
|
+
if (!cell || (cell.bits.length === 0 && cell.refs.length === 0))
|
|
68
|
+
return { kind: 'empty' };
|
|
69
|
+
const comment = (0, messages_1.decodeComment)(cell);
|
|
70
|
+
if (comment !== undefined)
|
|
71
|
+
return { kind: 'comment', comment };
|
|
72
|
+
if ((0, messages_1.decodeJettonTransfer)(cell))
|
|
73
|
+
return { kind: 'jetton-request' };
|
|
74
|
+
if ((0, messages_1.decodeJettonInternalTransfer)(cell))
|
|
75
|
+
return { kind: 'jetton-arrival', cell };
|
|
76
|
+
if ((0, messages_1.decodeJettonNotification)(cell))
|
|
77
|
+
return { kind: 'jetton-notification', cell };
|
|
78
|
+
return { kind: 'other' };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Whether jettons moved with an inbound message of this kind: an `internal_transfer` the
|
|
82
|
+
* jetton wallet ran to the end (TEP-74 credits only then: a failed phase drops the credit,
|
|
83
|
+
* bounced or not), or a `transfer_notification` (sent only after the credit).
|
|
84
|
+
*/
|
|
85
|
+
function jettonsMoved(tx, kind) {
|
|
86
|
+
if (kind === 'jetton-arrival')
|
|
87
|
+
return ran(tx);
|
|
88
|
+
return kind === 'jetton-notification' && executed(tx);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The jetton wallet whose ownership decides this transaction's jetton movement: the
|
|
92
|
+
* account itself for an `internal_transfer`, the sender for a `transfer_notification`.
|
|
93
|
+
* Undefined when no jetton moved.
|
|
94
|
+
*/
|
|
95
|
+
function jettonWalletToVerify(tx) {
|
|
96
|
+
const inMsg = tx.inMsg;
|
|
97
|
+
if (!inMsg || inMsg.source === null)
|
|
98
|
+
return undefined;
|
|
99
|
+
const { kind } = bodyOf(inMsg);
|
|
100
|
+
if (!jettonsMoved(tx, kind))
|
|
101
|
+
return undefined;
|
|
102
|
+
return kind === 'jetton-arrival' ? tx.account : inMsg.source;
|
|
103
|
+
}
|
|
104
|
+
/** The jetton movement of `tx`'s inbound jetton body `cell`, for a verified wallet only. */
|
|
105
|
+
function jettonTransfer(tx, cell, jetton) {
|
|
106
|
+
const inMsg = tx.inMsg;
|
|
107
|
+
if (!jetton)
|
|
108
|
+
return undefined;
|
|
109
|
+
const arrival = (0, messages_1.decodeJettonInternalTransfer)(cell);
|
|
110
|
+
if (arrival && jetton.address === tx.account) {
|
|
111
|
+
return {
|
|
112
|
+
locator: 'msg:in:jetton',
|
|
113
|
+
from: arrival.from ? [arrival.from] : [],
|
|
114
|
+
to: jetton.owner,
|
|
115
|
+
asset: { standard: 'jetton', contract: jetton.master },
|
|
116
|
+
amount: arrival.amount,
|
|
117
|
+
source: 'token-event',
|
|
118
|
+
...(arrival.comment !== undefined ? { memo: arrival.comment } : {}),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const note = (0, messages_1.decodeJettonNotification)(cell);
|
|
122
|
+
if (note && jetton.address === inMsg.source && jetton.owner === tx.account) {
|
|
123
|
+
return {
|
|
124
|
+
locator: 'msg:in:jetton',
|
|
125
|
+
from: note.sender ? [note.sender] : [],
|
|
126
|
+
to: tx.account,
|
|
127
|
+
asset: { standard: 'jetton', contract: jetton.master },
|
|
128
|
+
amount: note.amount,
|
|
129
|
+
source: 'token-event',
|
|
130
|
+
...(note.comment !== undefined ? { memo: note.comment } : {}),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* A wallet request's TEP-467 hash, computed here from its bound body: the indexer's
|
|
137
|
+
* `hash_norm` is only its claim.
|
|
138
|
+
*/
|
|
139
|
+
function requestHashOf(tx) {
|
|
140
|
+
const inMsg = tx.inMsg;
|
|
141
|
+
if (!inMsg || inMsg.source !== null)
|
|
142
|
+
return undefined;
|
|
143
|
+
const body = (0, messages_1.messageBody)(inMsg);
|
|
144
|
+
return body ? (0, wallets_1.externalHashOf)(tx.account, body) : undefined;
|
|
145
|
+
}
|
|
146
|
+
function decodeTransaction(tx, options = {}) {
|
|
147
|
+
const transfers = [];
|
|
148
|
+
let partial = false;
|
|
149
|
+
const inMsg = tx.inMsg;
|
|
150
|
+
const ok = executed(tx);
|
|
151
|
+
if (inMsg && inMsg.source !== null && ok) {
|
|
152
|
+
const body = bodyOf(inMsg);
|
|
153
|
+
if (body.kind === 'other' || body.kind === 'jetton-request')
|
|
154
|
+
partial = true;
|
|
155
|
+
if (inMsg.value !== null && inMsg.value > 0n) {
|
|
156
|
+
transfers.push({
|
|
157
|
+
locator: 'msg:in',
|
|
158
|
+
from: [inMsg.source],
|
|
159
|
+
to: tx.account,
|
|
160
|
+
asset: 'native',
|
|
161
|
+
amount: inMsg.value,
|
|
162
|
+
// A bounced message returns the account's own value: a refund, not a payment.
|
|
163
|
+
source: inMsg.bounced ? 'internal' : 'native',
|
|
164
|
+
...(body.comment !== undefined ? { memo: body.comment } : {}),
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
if (body.cell && jettonsMoved(tx, body.kind)) {
|
|
168
|
+
const jetton = jettonTransfer(tx, body.cell, options.jetton);
|
|
169
|
+
if (!jetton)
|
|
170
|
+
partial = true;
|
|
171
|
+
// A zero credit moved nothing, as a zero native value does not.
|
|
172
|
+
else if (jetton.amount > 0n)
|
|
173
|
+
transfers.push(jetton);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
tx.outMsgs.forEach((out, index) => {
|
|
177
|
+
if (out.destination === null || out.value === null)
|
|
178
|
+
return;
|
|
179
|
+
const body = bodyOf(out);
|
|
180
|
+
if (body.kind === 'other' || body.kind === 'jetton-request')
|
|
181
|
+
partial = true;
|
|
182
|
+
if (out.value === 0n)
|
|
183
|
+
return;
|
|
184
|
+
transfers.push({
|
|
185
|
+
locator: `msg:${index}`,
|
|
186
|
+
from: [tx.account],
|
|
187
|
+
to: out.destination,
|
|
188
|
+
asset: 'native',
|
|
189
|
+
amount: out.value,
|
|
190
|
+
source: out.bounced ? 'internal' : 'native',
|
|
191
|
+
...(body.comment !== undefined ? { memo: body.comment } : {}),
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
const observation = {
|
|
195
|
+
seen: 'block',
|
|
196
|
+
txHash: tx.hash,
|
|
197
|
+
blockHeight: BigInt(tx.mcSeqno),
|
|
198
|
+
...(options.blockHash !== undefined ? { blockHash: options.blockHash } : {}),
|
|
199
|
+
success: ok,
|
|
200
|
+
};
|
|
201
|
+
const messageHash = requestHashOf(tx);
|
|
202
|
+
return {
|
|
203
|
+
id: tx.hash,
|
|
204
|
+
observation,
|
|
205
|
+
fee: [{ asset: 'native', amount: tx.totalFees }],
|
|
206
|
+
transfers,
|
|
207
|
+
decoding: partial ? 'partial' : 'complete',
|
|
208
|
+
timestamp: tx.now,
|
|
209
|
+
details: {
|
|
210
|
+
account: tx.account,
|
|
211
|
+
lt: tx.lt.toString(),
|
|
212
|
+
traceId: tx.traceId,
|
|
213
|
+
aborted: tx.aborted,
|
|
214
|
+
...(tx.compute.exitCode !== undefined ? { exitCode: tx.compute.exitCode } : {}),
|
|
215
|
+
...(messageHash !== undefined ? { messageHash } : {}),
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=decode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../src/adapters/ton/decode.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Indexed TON transactions as `DriverTransaction`s, for anyone's transactions:\n * `getTransaction` and `history` report what the chain did. Locators:\n * `msg:in` for the inbound internal message's value, `msg:in:jetton` for the jettons it\n * brings, `msg:<i>` for outbound message `i`.\n *\n * Execution status: a wallet (external-in) transaction executed when its compute and action\n * phases succeeded and its code did not throw after committing; an internal one whenever its\n * value stayed, i.e. no bounce phase sent it back: a non-bounceable deposit to a fresh\n * address is `aborted` on chain yet credited, and so is a non-bounceable message to a\n * failing contract, a failed action phase without send mode +16 and a `nofunds` or\n * `negfunds` bounce. Jettons move only when the jetton wallet ran the message to the end\n * (a failed phase drops its state). Bodies are bound to their keyed hashes. Jetton\n * movements are decoded only for a jetton wallet the master itself names for its owner\n * (`jetton`, resolved by the reader): anyone can deploy a contract that claims a master or\n * sends a `transfer_notification`. A record whose phases contradict each other decides\n * nothing.\n */\nimport type { Cell } from '@ton/core';\nimport type {\n DriverTransaction,\n DriverTransfer,\n DriverTxObservation,\n} from '../../core/driver/types';\nimport { ProviderError } from '../../core/errors/error';\nimport type { V3Message, V3Transaction } from './api';\nimport {\n decodeComment,\n decodeJettonInternalTransfer,\n decodeJettonNotification,\n decodeJettonTransfer,\n messageBody,\n} from './messages';\nimport { externalHashOf } from './wallets';\n\n/** A jetton wallet proven to belong to `owner` under `master`. */\nexport interface VerifiedJettonWallet {\n readonly address: string;\n readonly owner: string;\n readonly master: string;\n}\n\n/**\n * Whether the contract ran its inbound message to the end, so its state changes and\n * outgoing messages stand: its compute and action phases both succeeded. The chain records\n * nothing else (transaction.cpp, collator.cpp):\n * - an action phase follows exactly a successful compute phase, and a skipped compute\n * phase never succeeded;\n * - `aborted` is exactly \"not ran\" (a skipped compute phase included);\n * - a bounce phase exists exactly for a bounceable inbound message (`bounce_enabled`, the\n * message's own flag; never an external one or a bounce) whose phases failed, and always\n * when its compute phase did;\n * - the outgoing messages are distinct, as many as the action phase created when it ran,\n * and nothing but the bounce when it did not.\n * A record that breaks any of these contradicts the chain: a retryable\n * `PROVIDER_INCONSISTENT`, which decides nothing, never a default.\n */\nexport function ran(tx: V3Transaction): boolean {\n const { compute, action, inMsg, outMsgs } = tx;\n const done = compute.success && action?.success === true;\n // Unknown (null) when the indexer leaves an inbound internal message's flag out.\n const bounceable = !inMsg || inMsg.source === null ? false : inMsg.bounce;\n if (\n (action !== undefined) !== compute.success ||\n (compute.skipped && compute.success) ||\n tx.aborted === done ||\n (tx.bounce !== undefined && (done || bounceable === false)) ||\n (bounceable === true && !compute.success && tx.bounce === undefined) ||\n new Set(outMsgs.map((m) => m.hash)).size !== outMsgs.length ||\n (done\n ? outMsgs.length !== action?.msgsCreated\n : // A flag the indexer leaves out (null) says nothing against the chain.\n outMsgs.some((m) => m.bounced === false))\n ) {\n throw new ProviderError(\n 'PROVIDER_INCONSISTENT',\n 'the indexed transaction phases contradict each other',\n { retryable: true },\n );\n }\n return done;\n}\n\n/**\n * Whether the code committed its state (`COMMIT`), then threw: the chain counts that\n * compute phase a success (transaction.cpp: `success = accepted && committed`) and runs only\n * the actions committed before, so the code did not finish what it was asked. W5 refuses an\n * external request without send mode +2 this way (137).\n */\nexport function threwAfterCommit(tx: V3Transaction): boolean {\n const code = tx.compute.exitCode;\n return tx.compute.success && code !== undefined && code !== 0 && code !== 1;\n}\n\n/** Whether the transaction did what its inbound message asked, as the chain reports it. */\nexport function executed(tx: V3Transaction): boolean {\n const done = ran(tx);\n if (tx.inMsg?.source === null) return done && !threwAfterCommit(tx);\n return tx.bounce !== 'ok';\n}\n\ntype BodyKind =\n | 'empty'\n | 'comment'\n | 'jetton-request'\n | 'jetton-arrival'\n | 'jetton-notification'\n | 'bounced'\n | 'other';\n\n/** A message body's kind, read once (a body may hold up to 2^13 cells). */\nfunction bodyOf(message: V3Message): {\n readonly kind: BodyKind;\n readonly comment?: string;\n readonly cell?: Cell;\n} {\n if (message.bounced) return { kind: 'bounced' };\n const cell = messageBody(message);\n if (!cell || (cell.bits.length === 0 && cell.refs.length === 0))\n return { kind: 'empty' };\n const comment = decodeComment(cell);\n if (comment !== undefined) return { kind: 'comment', comment };\n if (decodeJettonTransfer(cell)) return { kind: 'jetton-request' };\n if (decodeJettonInternalTransfer(cell)) return { kind: 'jetton-arrival', cell };\n if (decodeJettonNotification(cell)) return { kind: 'jetton-notification', cell };\n return { kind: 'other' };\n}\n\n/**\n * Whether jettons moved with an inbound message of this kind: an `internal_transfer` the\n * jetton wallet ran to the end (TEP-74 credits only then: a failed phase drops the credit,\n * bounced or not), or a `transfer_notification` (sent only after the credit).\n */\nfunction jettonsMoved(tx: V3Transaction, kind: BodyKind): boolean {\n if (kind === 'jetton-arrival') return ran(tx);\n return kind === 'jetton-notification' && executed(tx);\n}\n\n/**\n * The jetton wallet whose ownership decides this transaction's jetton movement: the\n * account itself for an `internal_transfer`, the sender for a `transfer_notification`.\n * Undefined when no jetton moved.\n */\nexport function jettonWalletToVerify(tx: V3Transaction): string | undefined {\n const inMsg = tx.inMsg;\n if (!inMsg || inMsg.source === null) return undefined;\n const { kind } = bodyOf(inMsg);\n if (!jettonsMoved(tx, kind)) return undefined;\n return kind === 'jetton-arrival' ? tx.account : inMsg.source;\n}\n\n/** The jetton movement of `tx`'s inbound jetton body `cell`, for a verified wallet only. */\nfunction jettonTransfer(\n tx: V3Transaction,\n cell: Cell,\n jetton: VerifiedJettonWallet | undefined,\n): DriverTransfer | undefined {\n const inMsg = tx.inMsg as V3Message;\n if (!jetton) return undefined;\n const arrival = decodeJettonInternalTransfer(cell);\n if (arrival && jetton.address === tx.account) {\n return {\n locator: 'msg:in:jetton',\n from: arrival.from ? [arrival.from] : [],\n to: jetton.owner,\n asset: { standard: 'jetton', contract: jetton.master },\n amount: arrival.amount,\n source: 'token-event',\n ...(arrival.comment !== undefined ? { memo: arrival.comment } : {}),\n };\n }\n const note = decodeJettonNotification(cell);\n if (note && jetton.address === inMsg.source && jetton.owner === tx.account) {\n return {\n locator: 'msg:in:jetton',\n from: note.sender ? [note.sender] : [],\n to: tx.account,\n asset: { standard: 'jetton', contract: jetton.master },\n amount: note.amount,\n source: 'token-event',\n ...(note.comment !== undefined ? { memo: note.comment } : {}),\n };\n }\n return undefined;\n}\n\n/**\n * A wallet request's TEP-467 hash, computed here from its bound body: the indexer's\n * `hash_norm` is only its claim.\n */\nfunction requestHashOf(tx: V3Transaction): string | undefined {\n const inMsg = tx.inMsg;\n if (!inMsg || inMsg.source !== null) return undefined;\n const body = messageBody(inMsg);\n return body ? externalHashOf(tx.account, body) : undefined;\n}\n\nexport function decodeTransaction(\n tx: V3Transaction,\n options: { readonly blockHash?: string; readonly jetton?: VerifiedJettonWallet } = {},\n): DriverTransaction {\n const transfers: DriverTransfer[] = [];\n let partial = false;\n const inMsg = tx.inMsg;\n const ok = executed(tx);\n if (inMsg && inMsg.source !== null && ok) {\n const body = bodyOf(inMsg);\n if (body.kind === 'other' || body.kind === 'jetton-request') partial = true;\n if (inMsg.value !== null && inMsg.value > 0n) {\n transfers.push({\n locator: 'msg:in',\n from: [inMsg.source],\n to: tx.account,\n asset: 'native',\n amount: inMsg.value,\n // A bounced message returns the account's own value: a refund, not a payment.\n source: inMsg.bounced ? 'internal' : 'native',\n ...(body.comment !== undefined ? { memo: body.comment } : {}),\n });\n }\n if (body.cell && jettonsMoved(tx, body.kind)) {\n const jetton = jettonTransfer(tx, body.cell, options.jetton);\n if (!jetton) partial = true;\n // A zero credit moved nothing, as a zero native value does not.\n else if (jetton.amount > 0n) transfers.push(jetton);\n }\n }\n tx.outMsgs.forEach((out, index) => {\n if (out.destination === null || out.value === null) return;\n const body = bodyOf(out);\n if (body.kind === 'other' || body.kind === 'jetton-request') partial = true;\n if (out.value === 0n) return;\n transfers.push({\n locator: `msg:${index}`,\n from: [tx.account],\n to: out.destination,\n asset: 'native',\n amount: out.value,\n source: out.bounced ? 'internal' : 'native',\n ...(body.comment !== undefined ? { memo: body.comment } : {}),\n });\n });\n const observation: DriverTxObservation = {\n seen: 'block',\n txHash: tx.hash,\n blockHeight: BigInt(tx.mcSeqno),\n ...(options.blockHash !== undefined ? { blockHash: options.blockHash } : {}),\n success: ok,\n };\n const messageHash = requestHashOf(tx);\n return {\n id: tx.hash,\n observation,\n fee: [{ asset: 'native', amount: tx.totalFees }],\n transfers,\n decoding: partial ? 'partial' : 'complete',\n timestamp: tx.now,\n details: {\n account: tx.account,\n lt: tx.lt.toString(),\n traceId: tx.traceId,\n aborted: tx.aborted,\n ...(tx.compute.exitCode !== undefined ? { exitCode: tx.compute.exitCode } : {}),\n ...(messageHash !== undefined ? { messageHash } : {}),\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The TON driver: one factory for both built-in networks, configured by each network's
|
|
3
|
+
* registry data. The family shape: `tonDriverFactory(makeNative)` lives here and imports
|
|
4
|
+
* no client module; the library's module (`native-client.ts`) supplies the native client
|
|
5
|
+
* and exports the loadable factory.
|
|
6
|
+
*/
|
|
7
|
+
import type { DisposableNativeClient, DriverFactory } from '../../core/driver/types';
|
|
8
|
+
import type { Transport } from '../../core/transport/types';
|
|
9
|
+
/** The TON driver factory over a native-client maker (the library module supplies it). */
|
|
10
|
+
export declare const tonDriverFactory: (makeNative: (transport: Transport) => DisposableNativeClient) => DriverFactory;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tonDriverFactory = void 0;
|
|
4
|
+
const error_1 = require("../../core/errors/error");
|
|
5
|
+
const api_1 = require("./api");
|
|
6
|
+
const builder_1 = require("./builder");
|
|
7
|
+
const messages_1 = require("./messages");
|
|
8
|
+
const network_1 = require("./network");
|
|
9
|
+
const proofs_1 = require("./proofs");
|
|
10
|
+
const reader_1 = require("./reader");
|
|
11
|
+
const wallets_1 = require("./wallets");
|
|
12
|
+
/** A probe answer that does not parse: the endpoint fails its health check (retryable). */
|
|
13
|
+
const malformedProbe = (route) => new error_1.ProviderError('PROVIDER_UNAVAILABLE', `malformed toncenter answer to ${route}`, {
|
|
14
|
+
retryable: true,
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* The probes read heights and the indexer's global id with `api.ts`'s own
|
|
18
|
+
* parsers, the ones the proofs use, so the two never drift.
|
|
19
|
+
*
|
|
20
|
+
* v2: identity = config param 19, the network's global id, from a cell that holds
|
|
21
|
+
* exactly one int32 (`global_id#_ global_id:int32 = ConfigParam 19`); height = the
|
|
22
|
+
* liteserver's masterchain head. One call each: each probe takes a token from the
|
|
23
|
+
* endpoint's rate limit.
|
|
24
|
+
*/
|
|
25
|
+
const rpcProbes = (expectedIdentity) => ({
|
|
26
|
+
identity: async (call) => {
|
|
27
|
+
const route = '/getConfigParam';
|
|
28
|
+
const body = await call.http({
|
|
29
|
+
method: 'GET',
|
|
30
|
+
path: route,
|
|
31
|
+
query: { param: '19' },
|
|
32
|
+
route,
|
|
33
|
+
});
|
|
34
|
+
const cell = (0, messages_1.cellFromBoc)((0, api_1.configParamBoc)(body, route));
|
|
35
|
+
const slice = cell && !cell.isExotic ? cell.beginParse() : null;
|
|
36
|
+
if (!slice || slice.remainingBits !== 32 || slice.remainingRefs !== 0) {
|
|
37
|
+
throw malformedProbe(route);
|
|
38
|
+
}
|
|
39
|
+
return String(slice.loadInt(32));
|
|
40
|
+
},
|
|
41
|
+
expectedIdentity,
|
|
42
|
+
height: async (call) => {
|
|
43
|
+
const route = '/getMasterchainInfo';
|
|
44
|
+
return BigInt((0, api_1.masterchainInfoSeqno)(await call.http({ method: 'GET', path: route, route }), route));
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* v3: identity = the indexed head's `global_id` (an int32); height = the newest
|
|
49
|
+
* indexed masterchain block.
|
|
50
|
+
*/
|
|
51
|
+
const indexerProbes = (expectedIdentity) => {
|
|
52
|
+
const route = '/masterchainInfo';
|
|
53
|
+
const indexedHead = async (call) => (0, api_1.indexedHeadOf)(await call.http({ method: 'GET', path: route, route }), route);
|
|
54
|
+
return {
|
|
55
|
+
identity: async (call) => String((await indexedHead(call)).globalId),
|
|
56
|
+
expectedIdentity,
|
|
57
|
+
height: async (call) => BigInt((await indexedHead(call)).seqno),
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* A TON transfer carries exactly one output (a partly delivered batch has no safe single
|
|
62
|
+
* verdict: `failed` invites a whole re-send that pays the delivered outputs twice),
|
|
63
|
+
* whatever the wallet version. The core prefers this answer to its own capability
|
|
64
|
+
* default, so it holds even for a selection that somehow lists `batch-transfer`.
|
|
65
|
+
*/
|
|
66
|
+
const ONE_OUTPUT = Object.freeze({ maxOutputs: 1 });
|
|
67
|
+
/** The batch limit of a wallet; a malformed TON identity throws its `CONFIG_INVALID`. */
|
|
68
|
+
function limitsOf(wallet, globalId) {
|
|
69
|
+
if (wallet.ton !== undefined)
|
|
70
|
+
(0, wallets_1.resolveIdentity)(wallet, globalId);
|
|
71
|
+
return ONE_OUTPUT;
|
|
72
|
+
}
|
|
73
|
+
/** The TON driver factory over a native-client maker (the library module supplies it). */
|
|
74
|
+
const tonDriverFactory = (makeNative) => ({
|
|
75
|
+
async create(ctx) {
|
|
76
|
+
// First: a network that adds a capability TON lacks (`batch-transfer`, `block-scan`, …)
|
|
77
|
+
// or carries inconsistent data fails here, before any probe. The handle's options too
|
|
78
|
+
// (`maxNetworkFee`); an unknown one is refused.
|
|
79
|
+
const config = (0, network_1.tonNetworkConfig)(ctx.chain, ctx.network, ctx.options);
|
|
80
|
+
if (!ctx.indexer) {
|
|
81
|
+
throw new error_1.ConfigError('CONFIG_INVALID', 'TON needs an indexer provider (toncenter API v3); set chains.ton.indexer');
|
|
82
|
+
}
|
|
83
|
+
// Probes go on every transport this driver receives, before any traffic. Both expect
|
|
84
|
+
// the global id as parsed from the registry, so they compare values, never spellings.
|
|
85
|
+
const identity = String(config.globalId);
|
|
86
|
+
ctx.transport.setProbes(rpcProbes(identity));
|
|
87
|
+
ctx.indexer.setProbes(indexerProbes(identity));
|
|
88
|
+
const ton = (0, reader_1.createTonContext)({
|
|
89
|
+
api: new api_1.TonApi(ctx.transport, ctx.indexer),
|
|
90
|
+
chain: ctx.chain,
|
|
91
|
+
network: ctx.network,
|
|
92
|
+
config,
|
|
93
|
+
log: ctx.log,
|
|
94
|
+
clock: ctx.clock,
|
|
95
|
+
});
|
|
96
|
+
const ext = (0, reader_1.createTonExt)(ton);
|
|
97
|
+
return {
|
|
98
|
+
ordering: 'seqno',
|
|
99
|
+
// Informational: the core gates every capability, `address-history` included, on its
|
|
100
|
+
// own selection (manifest ∪ indexer ∪ network add − remove).
|
|
101
|
+
capabilities: config.capabilities,
|
|
102
|
+
address: ton.codec,
|
|
103
|
+
reader: (0, reader_1.createTonReader)(ton),
|
|
104
|
+
builder: (0, builder_1.createTonBuilder)(ton),
|
|
105
|
+
broadcaster: (0, builder_1.createTonBroadcaster)(ton),
|
|
106
|
+
proofs: (0, proofs_1.createTonProofs)(ton),
|
|
107
|
+
sequence: (0, reader_1.createTonSequence)(ton),
|
|
108
|
+
history: (0, proofs_1.createTonHistory)(ton),
|
|
109
|
+
ext: { ton: { getSeqno: ext.ton.getSeqno, jettonWallet: ext.ton.jettonWallet } },
|
|
110
|
+
limits: (wallet) => limitsOf(wallet, config.globalId),
|
|
111
|
+
// A fresh SDK client on every call, over this driver's transport.
|
|
112
|
+
createNativeClient: () => makeNative(ctx.transport),
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
exports.tonDriverFactory = tonDriverFactory;
|
|
117
|
+
//# sourceMappingURL=driver.js.map
|