crypto-aio 0.0.3 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/README.md +144 -14
- package/dist/adapters/avalanche/address.d.ts +15 -0
- package/dist/adapters/avalanche/address.js +74 -0
- package/dist/adapters/avalanche/address.js.map +1 -0
- package/dist/adapters/avalanche/api.d.ts +100 -0
- package/dist/adapters/avalanche/api.js +381 -0
- package/dist/adapters/avalanche/api.js.map +1 -0
- package/dist/adapters/avalanche/builder.d.ts +13 -0
- package/dist/adapters/avalanche/builder.js +336 -0
- package/dist/adapters/avalanche/builder.js.map +1 -0
- package/dist/adapters/avalanche/cb58.d.ts +7 -0
- package/dist/adapters/avalanche/cb58.js +49 -0
- package/dist/adapters/avalanche/cb58.js.map +1 -0
- package/dist/adapters/avalanche/chains.d.ts +21 -0
- package/dist/adapters/avalanche/chains.js +79 -0
- package/dist/adapters/avalanche/chains.js.map +1 -0
- package/dist/adapters/avalanche/codec.d.ts +94 -0
- package/dist/adapters/avalanche/codec.js +371 -0
- package/dist/adapters/avalanche/codec.js.map +1 -0
- package/dist/adapters/avalanche/context.d.ts +59 -0
- package/dist/adapters/avalanche/context.js +114 -0
- package/dist/adapters/avalanche/context.js.map +1 -0
- package/dist/adapters/avalanche/decode.d.ts +16 -0
- package/dist/adapters/avalanche/decode.js +101 -0
- package/dist/adapters/avalanche/decode.js.map +1 -0
- package/dist/adapters/avalanche/driver.d.ts +22 -0
- package/dist/adapters/avalanche/driver.js +81 -0
- package/dist/adapters/avalanche/driver.js.map +1 -0
- package/dist/adapters/avalanche/errors.d.ts +18 -0
- package/dist/adapters/avalanche/errors.js +61 -0
- package/dist/adapters/avalanche/errors.js.map +1 -0
- package/dist/adapters/avalanche/fees.d.ts +23 -0
- package/dist/adapters/avalanche/fees.js +105 -0
- package/dist/adapters/avalanche/fees.js.map +1 -0
- package/dist/adapters/avalanche/index.d.ts +19 -0
- package/dist/adapters/avalanche/index.js +8 -0
- package/dist/adapters/avalanche/index.js.map +1 -0
- package/dist/adapters/avalanche/network.d.ts +37 -0
- package/dist/adapters/avalanche/network.js +135 -0
- package/dist/adapters/avalanche/network.js.map +1 -0
- package/dist/adapters/avalanche/plugin.d.ts +21 -0
- package/dist/adapters/avalanche/plugin.js +46 -0
- package/dist/adapters/avalanche/plugin.js.map +1 -0
- package/dist/adapters/avalanche/presets.d.ts +6 -0
- package/dist/adapters/avalanche/presets.js +86 -0
- package/dist/adapters/avalanche/presets.js.map +1 -0
- package/dist/adapters/avalanche/proofs.d.ts +41 -0
- package/dist/adapters/avalanche/proofs.js +270 -0
- package/dist/adapters/avalanche/proofs.js.map +1 -0
- package/dist/adapters/avalanche/reader.d.ts +40 -0
- package/dist/adapters/avalanche/reader.js +231 -0
- package/dist/adapters/avalanche/reader.js.map +1 -0
- package/dist/adapters/avalanche/sdk.d.ts +182 -0
- package/dist/adapters/avalanche/sdk.js +21 -0
- package/dist/adapters/avalanche/sdk.js.map +1 -0
- package/dist/adapters/avalanche/types.d.ts +86 -0
- package/dist/{type/common.js → adapters/avalanche/types.js} +1 -1
- package/dist/adapters/avalanche/types.js.map +1 -0
- package/dist/adapters/evm/builder.d.ts +11 -0
- package/dist/adapters/evm/builder.js +326 -0
- package/dist/adapters/evm/builder.js.map +1 -0
- package/dist/adapters/evm/chains.d.ts +6 -0
- package/dist/adapters/evm/chains.js +203 -0
- package/dist/adapters/evm/chains.js.map +1 -0
- package/dist/adapters/evm/client.d.ts +84 -0
- package/dist/adapters/evm/client.js +335 -0
- package/dist/adapters/evm/client.js.map +1 -0
- package/dist/adapters/evm/decode.d.ts +35 -0
- package/dist/adapters/evm/decode.js +170 -0
- package/dist/adapters/evm/decode.js.map +1 -0
- package/dist/adapters/evm/driver.d.ts +8 -0
- package/dist/adapters/evm/driver.js +61 -0
- package/dist/adapters/evm/driver.js.map +1 -0
- package/dist/adapters/evm/errors.d.ts +20 -0
- package/dist/adapters/evm/errors.js +110 -0
- package/dist/adapters/evm/errors.js.map +1 -0
- package/dist/adapters/evm/ethers-client.d.ts +43 -0
- package/dist/adapters/evm/ethers-client.js +135 -0
- package/dist/adapters/evm/ethers-client.js.map +1 -0
- package/dist/adapters/evm/fees.d.ts +79 -0
- package/dist/adapters/evm/fees.js +234 -0
- package/dist/adapters/evm/fees.js.map +1 -0
- package/dist/adapters/evm/index.d.ts +20 -0
- package/dist/adapters/evm/index.js +11 -0
- package/dist/adapters/evm/index.js.map +1 -0
- package/dist/adapters/evm/network.d.ts +60 -0
- package/dist/adapters/evm/network.js +131 -0
- package/dist/adapters/evm/network.js.map +1 -0
- package/dist/adapters/evm/plugin.d.ts +36 -0
- package/dist/adapters/evm/plugin.js +102 -0
- package/dist/adapters/evm/plugin.js.map +1 -0
- package/dist/adapters/evm/presets.d.ts +2 -0
- package/dist/adapters/evm/presets.js +105 -0
- package/dist/adapters/evm/presets.js.map +1 -0
- package/dist/adapters/evm/proofs.d.ts +19 -0
- package/dist/adapters/evm/proofs.js +358 -0
- package/dist/adapters/evm/proofs.js.map +1 -0
- package/dist/adapters/evm/rawtx.d.ts +25 -0
- package/dist/adapters/evm/rawtx.js +176 -0
- package/dist/adapters/evm/rawtx.js.map +1 -0
- package/dist/adapters/evm/reader.d.ts +65 -0
- package/dist/adapters/evm/reader.js +292 -0
- package/dist/adapters/evm/reader.js.map +1 -0
- package/dist/adapters/evm/rpc.d.ts +39 -0
- package/dist/adapters/evm/rpc.js +152 -0
- package/dist/adapters/evm/rpc.js.map +1 -0
- package/dist/adapters/evm/tokens.d.ts +7 -0
- package/dist/adapters/evm/tokens.js +23 -0
- package/dist/adapters/evm/tokens.js.map +1 -0
- package/dist/adapters/evm/types.d.ts +255 -0
- package/dist/{type/account.js → adapters/evm/types.js} +1 -1
- package/dist/adapters/evm/types.js.map +1 -0
- package/dist/adapters/evm/web3-client.d.ts +23 -0
- package/dist/adapters/evm/web3-client.js +159 -0
- package/dist/adapters/evm/web3-client.js.map +1 -0
- package/dist/adapters/solana/builder.d.ts +18 -0
- package/dist/adapters/solana/builder.js +545 -0
- package/dist/adapters/solana/builder.js.map +1 -0
- package/dist/adapters/solana/chains.d.ts +13 -0
- package/dist/adapters/solana/chains.js +37 -0
- package/dist/adapters/solana/chains.js.map +1 -0
- package/dist/adapters/solana/decode.d.ts +111 -0
- package/dist/adapters/solana/decode.js +595 -0
- package/dist/adapters/solana/decode.js.map +1 -0
- package/dist/adapters/solana/driver.d.ts +15 -0
- package/dist/adapters/solana/driver.js +72 -0
- package/dist/adapters/solana/driver.js.map +1 -0
- package/dist/adapters/solana/errors.d.ts +36 -0
- package/dist/adapters/solana/errors.js +154 -0
- package/dist/adapters/solana/errors.js.map +1 -0
- package/dist/adapters/solana/fees.d.ts +68 -0
- package/dist/adapters/solana/fees.js +205 -0
- package/dist/adapters/solana/fees.js.map +1 -0
- package/dist/adapters/solana/heights.d.ts +47 -0
- package/dist/adapters/solana/heights.js +185 -0
- package/dist/adapters/solana/heights.js.map +1 -0
- package/dist/adapters/solana/history.d.ts +10 -0
- package/dist/adapters/solana/history.js +71 -0
- package/dist/adapters/solana/history.js.map +1 -0
- package/dist/adapters/solana/index.d.ts +16 -0
- package/dist/adapters/solana/index.js +9 -0
- package/dist/adapters/solana/index.js.map +1 -0
- package/dist/adapters/solana/keys.d.ts +13 -0
- package/dist/adapters/solana/keys.js +69 -0
- package/dist/adapters/solana/keys.js.map +1 -0
- package/dist/adapters/solana/network.d.ts +24 -0
- package/dist/adapters/solana/network.js +95 -0
- package/dist/adapters/solana/network.js.map +1 -0
- package/dist/adapters/solana/plugin.d.ts +18 -0
- package/dist/adapters/solana/plugin.js +41 -0
- package/dist/adapters/solana/plugin.js.map +1 -0
- package/dist/adapters/solana/presets.d.ts +2 -0
- package/dist/adapters/solana/presets.js +77 -0
- package/dist/adapters/solana/presets.js.map +1 -0
- package/dist/adapters/solana/programs.d.ts +44 -0
- package/dist/adapters/solana/programs.js +159 -0
- package/dist/adapters/solana/programs.js.map +1 -0
- package/dist/adapters/solana/proofs.d.ts +56 -0
- package/dist/adapters/solana/proofs.js +540 -0
- package/dist/adapters/solana/proofs.js.map +1 -0
- package/dist/adapters/solana/reader.d.ts +82 -0
- package/dist/adapters/solana/reader.js +326 -0
- package/dist/adapters/solana/reader.js.map +1 -0
- package/dist/adapters/solana/rpc.d.ts +102 -0
- package/dist/adapters/solana/rpc.js +301 -0
- package/dist/adapters/solana/rpc.js.map +1 -0
- package/dist/adapters/solana/tokens.d.ts +7 -0
- package/dist/adapters/solana/tokens.js +19 -0
- package/dist/adapters/solana/tokens.js.map +1 -0
- package/dist/adapters/solana/types.d.ts +121 -0
- package/dist/{type/contract.js → adapters/solana/types.js} +1 -1
- package/dist/adapters/solana/types.js.map +1 -0
- package/dist/adapters/solana/web3.d.ts +5 -0
- package/dist/adapters/solana/web3.js +83 -0
- package/dist/adapters/solana/web3.js.map +1 -0
- package/dist/adapters/solana/wire.d.ts +62 -0
- package/dist/adapters/solana/wire.js +168 -0
- package/dist/adapters/solana/wire.js.map +1 -0
- package/dist/adapters/ton/address.d.ts +43 -0
- package/dist/adapters/ton/address.js +168 -0
- package/dist/adapters/ton/address.js.map +1 -0
- package/dist/adapters/ton/api.d.ts +344 -0
- package/dist/adapters/ton/api.js +942 -0
- package/dist/adapters/ton/api.js.map +1 -0
- package/dist/adapters/ton/builder.d.ts +18 -0
- package/dist/adapters/ton/builder.js +701 -0
- package/dist/adapters/ton/builder.js.map +1 -0
- package/dist/adapters/ton/chains.d.ts +16 -0
- package/dist/adapters/ton/chains.js +39 -0
- package/dist/adapters/ton/chains.js.map +1 -0
- package/dist/adapters/ton/decode.d.ts +43 -0
- package/dist/adapters/ton/decode.js +219 -0
- package/dist/adapters/ton/decode.js.map +1 -0
- package/dist/adapters/ton/driver.d.ts +10 -0
- package/dist/adapters/ton/driver.js +117 -0
- package/dist/adapters/ton/driver.js.map +1 -0
- package/dist/adapters/ton/errors.d.ts +36 -0
- package/dist/adapters/ton/errors.js +89 -0
- package/dist/adapters/ton/errors.js.map +1 -0
- package/dist/adapters/ton/fees.d.ts +28 -0
- package/dist/adapters/ton/fees.js +121 -0
- package/dist/adapters/ton/fees.js.map +1 -0
- package/dist/adapters/ton/index.d.ts +16 -0
- package/dist/adapters/ton/index.js +9 -0
- package/dist/adapters/ton/index.js.map +1 -0
- package/dist/adapters/ton/messages.d.ts +157 -0
- package/dist/adapters/ton/messages.js +397 -0
- package/dist/adapters/ton/messages.js.map +1 -0
- package/dist/adapters/ton/native-client.d.ts +10 -0
- package/dist/adapters/ton/native-client.js +47 -0
- package/dist/adapters/ton/native-client.js.map +1 -0
- package/dist/adapters/ton/network.d.ts +58 -0
- package/dist/adapters/ton/network.js +207 -0
- package/dist/adapters/ton/network.js.map +1 -0
- package/dist/adapters/ton/plugin.d.ts +24 -0
- package/dist/adapters/ton/plugin.js +57 -0
- package/dist/adapters/ton/plugin.js.map +1 -0
- package/dist/adapters/ton/presets.d.ts +6 -0
- package/dist/adapters/ton/presets.js +94 -0
- package/dist/adapters/ton/presets.js.map +1 -0
- package/dist/adapters/ton/proofs.d.ts +66 -0
- package/dist/adapters/ton/proofs.js +813 -0
- package/dist/adapters/ton/proofs.js.map +1 -0
- package/dist/adapters/ton/reader.d.ts +194 -0
- package/dist/adapters/ton/reader.js +781 -0
- package/dist/adapters/ton/reader.js.map +1 -0
- package/dist/adapters/ton/tokens.d.ts +10 -0
- package/dist/adapters/ton/tokens.js +27 -0
- package/dist/adapters/ton/tokens.js.map +1 -0
- package/dist/adapters/ton/trace.d.ts +48 -0
- package/dist/adapters/ton/trace.js +277 -0
- package/dist/adapters/ton/trace.js.map +1 -0
- package/dist/adapters/ton/types.d.ts +105 -0
- package/dist/{type/transact.js → adapters/ton/types.js} +1 -1
- package/dist/adapters/ton/types.js.map +1 -0
- package/dist/adapters/ton/wallets.d.ts +86 -0
- package/dist/adapters/ton/wallets.js +373 -0
- package/dist/adapters/ton/wallets.js.map +1 -0
- package/dist/adapters/tron/abi.d.ts +39 -0
- package/dist/adapters/tron/abi.js +110 -0
- package/dist/adapters/tron/abi.js.map +1 -0
- package/dist/adapters/tron/address.d.ts +20 -0
- package/dist/adapters/tron/address.js +110 -0
- package/dist/adapters/tron/address.js.map +1 -0
- package/dist/adapters/tron/builder.d.ts +12 -0
- package/dist/adapters/tron/builder.js +553 -0
- package/dist/adapters/tron/builder.js.map +1 -0
- package/dist/adapters/tron/chains.d.ts +12 -0
- package/dist/adapters/tron/chains.js +35 -0
- package/dist/adapters/tron/chains.js.map +1 -0
- package/dist/adapters/tron/codec.d.ts +10 -0
- package/dist/adapters/tron/codec.js +322 -0
- package/dist/adapters/tron/codec.js.map +1 -0
- package/dist/adapters/tron/decode.d.ts +50 -0
- package/dist/adapters/tron/decode.js +280 -0
- package/dist/adapters/tron/decode.js.map +1 -0
- package/dist/adapters/tron/driver.d.ts +12 -0
- package/dist/adapters/tron/driver.js +106 -0
- package/dist/adapters/tron/driver.js.map +1 -0
- package/dist/adapters/tron/errors.d.ts +74 -0
- package/dist/adapters/tron/errors.js +261 -0
- package/dist/adapters/tron/errors.js.map +1 -0
- package/dist/adapters/tron/fees.d.ts +49 -0
- package/dist/adapters/tron/fees.js +166 -0
- package/dist/adapters/tron/fees.js.map +1 -0
- package/dist/adapters/tron/http.d.ts +173 -0
- package/dist/adapters/tron/http.js +729 -0
- package/dist/adapters/tron/http.js.map +1 -0
- package/dist/adapters/tron/index.d.ts +16 -0
- package/dist/adapters/tron/index.js +15 -0
- package/dist/adapters/tron/index.js.map +1 -0
- package/dist/adapters/tron/network.d.ts +44 -0
- package/dist/adapters/tron/network.js +163 -0
- package/dist/adapters/tron/network.js.map +1 -0
- package/dist/adapters/tron/plugin.d.ts +17 -0
- package/dist/adapters/tron/plugin.js +39 -0
- package/dist/adapters/tron/plugin.js.map +1 -0
- package/dist/adapters/tron/presets.d.ts +5 -0
- package/dist/adapters/tron/presets.js +68 -0
- package/dist/adapters/tron/presets.js.map +1 -0
- package/dist/adapters/tron/proofs.d.ts +80 -0
- package/dist/adapters/tron/proofs.js +370 -0
- package/dist/adapters/tron/proofs.js.map +1 -0
- package/dist/adapters/tron/protobuf.d.ts +36 -0
- package/dist/adapters/tron/protobuf.js +90 -0
- package/dist/adapters/tron/protobuf.js.map +1 -0
- package/dist/adapters/tron/reader.d.ts +47 -0
- package/dist/adapters/tron/reader.js +203 -0
- package/dist/adapters/tron/reader.js.map +1 -0
- package/dist/adapters/tron/tokens.d.ts +7 -0
- package/dist/adapters/tron/tokens.js +14 -0
- package/dist/adapters/tron/tokens.js.map +1 -0
- package/dist/adapters/tron/types.d.ts +166 -0
- package/dist/adapters/tron/types.js +3 -0
- package/dist/adapters/tron/types.js.map +1 -0
- package/dist/adapters/utxo/address.d.ts +51 -0
- package/dist/adapters/utxo/address.js +341 -0
- package/dist/adapters/utxo/address.js.map +1 -0
- package/dist/adapters/utxo/builder.d.ts +35 -0
- package/dist/adapters/utxo/builder.js +380 -0
- package/dist/adapters/utxo/builder.js.map +1 -0
- package/dist/adapters/utxo/chains.d.ts +17 -0
- package/dist/adapters/utxo/chains.js +99 -0
- package/dist/adapters/utxo/chains.js.map +1 -0
- package/dist/adapters/utxo/codec.d.ts +120 -0
- package/dist/adapters/utxo/codec.js +408 -0
- package/dist/adapters/utxo/codec.js.map +1 -0
- package/dist/adapters/utxo/coinselect.d.ts +48 -0
- package/dist/adapters/utxo/coinselect.js +131 -0
- package/dist/adapters/utxo/coinselect.js.map +1 -0
- package/dist/adapters/utxo/context.d.ts +57 -0
- package/dist/adapters/utxo/context.js +118 -0
- package/dist/adapters/utxo/context.js.map +1 -0
- package/dist/adapters/utxo/decode.d.ts +14 -0
- package/dist/adapters/utxo/decode.js +85 -0
- package/dist/adapters/utxo/decode.js.map +1 -0
- package/dist/adapters/utxo/driver.d.ts +16 -0
- package/dist/adapters/utxo/driver.js +74 -0
- package/dist/adapters/utxo/driver.js.map +1 -0
- package/dist/adapters/utxo/ecc.d.ts +9 -0
- package/dist/adapters/utxo/ecc.js +26 -0
- package/dist/adapters/utxo/ecc.js.map +1 -0
- package/dist/adapters/utxo/errors.d.ts +52 -0
- package/dist/adapters/utxo/errors.js +191 -0
- package/dist/adapters/utxo/errors.js.map +1 -0
- package/dist/adapters/utxo/esplora.d.ts +79 -0
- package/dist/adapters/utxo/esplora.js +451 -0
- package/dist/adapters/utxo/esplora.js.map +1 -0
- package/dist/adapters/utxo/fees.d.ts +41 -0
- package/dist/adapters/utxo/fees.js +125 -0
- package/dist/adapters/utxo/fees.js.map +1 -0
- package/dist/adapters/utxo/index.d.ts +17 -0
- package/dist/adapters/utxo/index.js +8 -0
- package/dist/adapters/utxo/index.js.map +1 -0
- package/dist/adapters/utxo/network.d.ts +50 -0
- package/dist/adapters/utxo/network.js +165 -0
- package/dist/adapters/utxo/network.js.map +1 -0
- package/dist/adapters/utxo/plugin.d.ts +17 -0
- package/dist/adapters/utxo/plugin.js +41 -0
- package/dist/adapters/utxo/plugin.js.map +1 -0
- package/dist/adapters/utxo/presets.d.ts +12 -0
- package/dist/adapters/utxo/presets.js +47 -0
- package/dist/adapters/utxo/presets.js.map +1 -0
- package/dist/adapters/utxo/preview.d.ts +3 -0
- package/dist/adapters/utxo/preview.js +65 -0
- package/dist/adapters/utxo/preview.js.map +1 -0
- package/dist/adapters/utxo/proofs.d.ts +57 -0
- package/dist/adapters/utxo/proofs.js +331 -0
- package/dist/adapters/utxo/proofs.js.map +1 -0
- package/dist/adapters/utxo/rawtx.d.ts +59 -0
- package/dist/adapters/utxo/rawtx.js +234 -0
- package/dist/adapters/utxo/rawtx.js.map +1 -0
- package/dist/adapters/utxo/reader.d.ts +36 -0
- package/dist/adapters/utxo/reader.js +265 -0
- package/dist/adapters/utxo/reader.js.map +1 -0
- package/dist/adapters/utxo/sdk.d.ts +18 -0
- package/dist/adapters/utxo/sdk.js +17 -0
- package/dist/adapters/utxo/sdk.js.map +1 -0
- package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
- package/dist/adapters/utxo/signed-psbt.js +428 -0
- package/dist/adapters/utxo/signed-psbt.js.map +1 -0
- package/dist/adapters/utxo/spend.d.ts +59 -0
- package/dist/adapters/utxo/spend.js +230 -0
- package/dist/adapters/utxo/spend.js.map +1 -0
- package/dist/adapters/utxo/types.d.ts +167 -0
- package/dist/adapters/utxo/types.js +3 -0
- package/dist/adapters/utxo/types.js.map +1 -0
- package/dist/core/assets/service.d.ts +18 -0
- package/dist/core/assets/service.js +69 -0
- package/dist/core/assets/service.js.map +1 -0
- package/dist/core/blockchain/default-ref.d.ts +4 -0
- package/dist/core/blockchain/default-ref.js +16 -0
- package/dist/core/blockchain/default-ref.js.map +1 -0
- package/dist/core/blockchain/handle.d.ts +200 -0
- package/dist/core/blockchain/handle.js +579 -0
- package/dist/core/blockchain/handle.js.map +1 -0
- package/dist/core/blockchain/internal.d.ts +19 -0
- package/dist/core/blockchain/internal.js +16 -0
- package/dist/core/blockchain/internal.js.map +1 -0
- package/dist/core/blockchain/mapping.d.ts +22 -0
- package/dist/core/blockchain/mapping.js +136 -0
- package/dist/core/blockchain/mapping.js.map +1 -0
- package/dist/core/config/env.d.ts +8 -0
- package/dist/core/config/env.js +60 -0
- package/dist/core/config/env.js.map +1 -0
- package/dist/core/config/merge.d.ts +26 -0
- package/dist/core/config/merge.js +144 -0
- package/dist/core/config/merge.js.map +1 -0
- package/dist/core/config/resolve.d.ts +12 -0
- package/dist/core/config/resolve.js +251 -0
- package/dist/core/config/resolve.js.map +1 -0
- package/dist/core/config/types.d.ts +165 -0
- package/dist/core/config/types.js +3 -0
- package/dist/core/config/types.js.map +1 -0
- package/dist/core/container/builtins.d.ts +4 -0
- package/dist/core/container/builtins.js +13 -0
- package/dist/core/container/builtins.js.map +1 -0
- package/dist/core/container/container.d.ts +69 -0
- package/dist/core/container/container.js +466 -0
- package/dist/core/container/container.js.map +1 -0
- package/dist/core/container/default.d.ts +15 -0
- package/dist/core/container/default.js +70 -0
- package/dist/core/container/default.js.map +1 -0
- package/dist/core/container/internals.d.ts +54 -0
- package/dist/core/container/internals.js +21 -0
- package/dist/core/container/internals.js.map +1 -0
- package/dist/core/container/pool.d.ts +27 -0
- package/dist/core/container/pool.js +77 -0
- package/dist/core/container/pool.js.map +1 -0
- package/dist/core/driver/types.d.ts +346 -0
- package/dist/core/driver/types.js +3 -0
- package/dist/core/driver/types.js.map +1 -0
- package/dist/core/errors/codes.d.ts +153 -0
- package/dist/core/errors/codes.js +49 -0
- package/dist/core/errors/codes.js.map +1 -0
- package/dist/core/errors/error.d.ts +66 -0
- package/dist/core/errors/error.js +129 -0
- package/dist/core/errors/error.js.map +1 -0
- package/dist/core/events/bus.d.ts +12 -0
- package/dist/core/events/bus.js +46 -0
- package/dist/core/events/bus.js.map +1 -0
- package/dist/core/events/logger.d.ts +13 -0
- package/dist/core/events/logger.js +42 -0
- package/dist/core/events/logger.js.map +1 -0
- package/dist/core/events/types.d.ts +131 -0
- package/dist/core/events/types.js +3 -0
- package/dist/core/events/types.js.map +1 -0
- package/dist/core/lifecycle/engine-rules.d.ts +107 -0
- package/dist/core/lifecycle/engine-rules.js +257 -0
- package/dist/core/lifecycle/engine-rules.js.map +1 -0
- package/dist/core/lifecycle/engine.d.ts +500 -0
- package/dist/core/lifecycle/engine.js +1732 -0
- package/dist/core/lifecycle/engine.js.map +1 -0
- package/dist/core/lifecycle/evaluate.d.ts +19 -0
- package/dist/core/lifecycle/evaluate.js +72 -0
- package/dist/core/lifecycle/evaluate.js.map +1 -0
- package/dist/core/lifecycle/intent.d.ts +11 -0
- package/dist/core/lifecycle/intent.js +88 -0
- package/dist/core/lifecycle/intent.js.map +1 -0
- package/dist/core/lifecycle/monitor.d.ts +138 -0
- package/dist/core/lifecycle/monitor.js +606 -0
- package/dist/core/lifecycle/monitor.js.map +1 -0
- package/dist/core/lifecycle/observations.d.ts +17 -0
- package/dist/core/lifecycle/observations.js +59 -0
- package/dist/core/lifecycle/observations.js.map +1 -0
- package/dist/core/lifecycle/reconcile.d.ts +58 -0
- package/dist/core/lifecycle/reconcile.js +112 -0
- package/dist/core/lifecycle/reconcile.js.map +1 -0
- package/dist/core/lifecycle/views.d.ts +49 -0
- package/dist/core/lifecycle/views.js +57 -0
- package/dist/core/lifecycle/views.js.map +1 -0
- package/dist/core/lifecycle/workers.d.ts +82 -0
- package/dist/core/lifecycle/workers.js +329 -0
- package/dist/core/lifecycle/workers.js.map +1 -0
- package/dist/core/model/address.d.ts +32 -0
- package/dist/core/model/address.js +43 -0
- package/dist/core/model/address.js.map +1 -0
- package/dist/core/model/amount.d.ts +25 -0
- package/dist/core/model/amount.js +102 -0
- package/dist/core/model/amount.js.map +1 -0
- package/dist/core/model/asset.d.ts +28 -0
- package/dist/core/model/asset.js +47 -0
- package/dist/core/model/asset.js.map +1 -0
- package/dist/core/model/capability.d.ts +3 -0
- package/dist/core/model/capability.js +18 -0
- package/dist/core/model/capability.js.map +1 -0
- package/dist/core/model/chain.d.ts +63 -0
- package/dist/core/model/chain.js +8 -0
- package/dist/core/model/chain.js.map +1 -0
- package/dist/core/model/fee.d.ts +36 -0
- package/dist/core/model/fee.js +17 -0
- package/dist/core/model/fee.js.map +1 -0
- package/dist/core/model/ids.d.ts +37 -0
- package/dist/core/model/ids.js +13 -0
- package/dist/core/model/ids.js.map +1 -0
- package/dist/core/model/intent.d.ts +63 -0
- package/dist/core/model/intent.js +81 -0
- package/dist/core/model/intent.js.map +1 -0
- package/dist/core/model/ordering.d.ts +20 -0
- package/dist/core/model/ordering.js +29 -0
- package/dist/core/model/ordering.js.map +1 -0
- package/dist/core/model/transaction.d.ts +116 -0
- package/dist/{type/lib-types.js → core/model/transaction.js} +1 -1
- package/dist/core/model/transaction.js.map +1 -0
- package/dist/core/observe/scanner.d.ts +135 -0
- package/dist/core/observe/scanner.js +355 -0
- package/dist/core/observe/scanner.js.map +1 -0
- package/dist/core/ordering/reservations.d.ts +16 -0
- package/dist/core/ordering/reservations.js +53 -0
- package/dist/core/ordering/reservations.js.map +1 -0
- package/dist/core/ordering/sequence.d.ts +61 -0
- package/dist/core/ordering/sequence.js +155 -0
- package/dist/core/ordering/sequence.js.map +1 -0
- package/dist/core/registry/adapters.d.ts +10 -0
- package/dist/core/registry/adapters.js +56 -0
- package/dist/core/registry/adapters.js.map +1 -0
- package/dist/core/registry/assets.d.ts +18 -0
- package/dist/core/registry/assets.js +90 -0
- package/dist/core/registry/assets.js.map +1 -0
- package/dist/core/registry/chains.d.ts +10 -0
- package/dist/core/registry/chains.js +80 -0
- package/dist/core/registry/chains.js.map +1 -0
- package/dist/core/registry/plugin.d.ts +41 -0
- package/dist/core/registry/plugin.js +109 -0
- package/dist/core/registry/plugin.js.map +1 -0
- package/dist/core/registry/providers.d.ts +31 -0
- package/dist/core/registry/providers.js +43 -0
- package/dist/core/registry/providers.js.map +1 -0
- package/dist/core/registry/schemes.d.ts +30 -0
- package/dist/core/registry/schemes.js +84 -0
- package/dist/core/registry/schemes.js.map +1 -0
- package/dist/core/secret/fragments.d.ts +33 -0
- package/dist/core/secret/fragments.js +110 -0
- package/dist/core/secret/fragments.js.map +1 -0
- package/dist/core/secret/redact.d.ts +10 -0
- package/dist/core/secret/redact.js +110 -0
- package/dist/core/secret/redact.js.map +1 -0
- package/dist/core/secret/secret.d.ts +14 -0
- package/dist/core/secret/secret.js +42 -0
- package/dist/core/secret/secret.js.map +1 -0
- package/dist/core/signing/callback.d.ts +10 -0
- package/dist/core/signing/callback.js +22 -0
- package/dist/core/signing/callback.js.map +1 -0
- package/dist/core/signing/guard.d.ts +18 -0
- package/dist/core/signing/guard.js +72 -0
- package/dist/core/signing/guard.js.map +1 -0
- package/dist/core/signing/hd.d.ts +36 -0
- package/dist/core/signing/hd.js +167 -0
- package/dist/core/signing/hd.js.map +1 -0
- package/dist/core/signing/local.d.ts +48 -0
- package/dist/core/signing/local.js +190 -0
- package/dist/core/signing/local.js.map +1 -0
- package/dist/core/signing/orchestrator.d.ts +40 -0
- package/dist/core/signing/orchestrator.js +300 -0
- package/dist/core/signing/orchestrator.js.map +1 -0
- package/dist/core/signing/types.d.ts +64 -0
- package/dist/core/signing/types.js +3 -0
- package/dist/core/signing/types.js.map +1 -0
- package/dist/core/signing/wallet.d.ts +48 -0
- package/dist/core/signing/wallet.js +153 -0
- package/dist/core/signing/wallet.js.map +1 -0
- package/dist/core/store/clone.d.ts +25 -0
- package/dist/core/store/clone.js +71 -0
- package/dist/core/store/clone.js.map +1 -0
- package/dist/core/store/memory.d.ts +38 -0
- package/dist/core/store/memory.js +325 -0
- package/dist/core/store/memory.js.map +1 -0
- package/dist/core/store/types.d.ts +246 -0
- package/dist/core/store/types.js +117 -0
- package/dist/core/store/types.js.map +1 -0
- package/dist/core/transport/backoff.d.ts +8 -0
- package/dist/core/transport/backoff.js +27 -0
- package/dist/core/transport/backoff.js.map +1 -0
- package/dist/core/transport/circuit.d.ts +25 -0
- package/dist/core/transport/circuit.js +61 -0
- package/dist/core/transport/circuit.js.map +1 -0
- package/dist/core/transport/http-transport.d.ts +30 -0
- package/dist/core/transport/http-transport.js +1695 -0
- package/dist/core/transport/http-transport.js.map +1 -0
- package/dist/core/transport/rate-limit.d.ts +27 -0
- package/dist/core/transport/rate-limit.js +78 -0
- package/dist/core/transport/rate-limit.js.map +1 -0
- package/dist/core/transport/stale-view.d.ts +11 -0
- package/dist/core/transport/stale-view.js +17 -0
- package/dist/core/transport/stale-view.js.map +1 -0
- package/dist/core/transport/types.d.ts +144 -0
- package/dist/core/transport/types.js +6 -0
- package/dist/core/transport/types.js.map +1 -0
- package/dist/core/util/bytes.d.ts +9 -0
- package/dist/core/util/bytes.js +40 -0
- package/dist/core/util/bytes.js.map +1 -0
- package/dist/core/util/clock.d.ts +6 -0
- package/dist/core/util/clock.js +26 -0
- package/dist/core/util/clock.js.map +1 -0
- package/dist/core/util/freeze.d.ts +8 -0
- package/dist/core/util/freeze.js +31 -0
- package/dist/core/util/freeze.js.map +1 -0
- package/dist/core/util/json.d.ts +29 -0
- package/dist/core/util/json.js +165 -0
- package/dist/core/util/json.js.map +1 -0
- package/dist/core/util/names.d.ts +21 -0
- package/dist/core/util/names.js +46 -0
- package/dist/core/util/names.js.map +1 -0
- package/dist/index.d.ts +64 -14
- package/dist/index.js +105 -49
- package/dist/index.js.map +1 -1
- package/dist/native.d.ts +21 -0
- package/dist/native.js +44 -0
- package/dist/native.js.map +1 -0
- package/dist/testing/contracts/api.d.ts +12 -0
- package/dist/testing/contracts/api.js +58 -0
- package/dist/testing/contracts/api.js.map +1 -0
- package/dist/testing/contracts/cursors.d.ts +6 -0
- package/dist/testing/contracts/cursors.js +43 -0
- package/dist/testing/contracts/cursors.js.map +1 -0
- package/dist/testing/contracts/locks.d.ts +10 -0
- package/dist/testing/contracts/locks.js +63 -0
- package/dist/testing/contracts/locks.js.map +1 -0
- package/dist/testing/contracts/operations.d.ts +21 -0
- package/dist/testing/contracts/operations.js +718 -0
- package/dist/testing/contracts/operations.js.map +1 -0
- package/dist/testing/contracts/sequences.d.ts +6 -0
- package/dist/testing/contracts/sequences.js +68 -0
- package/dist/testing/contracts/sequences.js.map +1 -0
- package/dist/testing/env.d.ts +63 -0
- package/dist/testing/env.js +105 -0
- package/dist/testing/env.js.map +1 -0
- package/dist/testing/fake-chain.d.ts +118 -0
- package/dist/testing/fake-chain.js +536 -0
- package/dist/testing/fake-chain.js.map +1 -0
- package/dist/testing/fake-clock.d.ts +15 -0
- package/dist/testing/fake-clock.js +86 -0
- package/dist/testing/fake-clock.js.map +1 -0
- package/dist/testing/fake-driver.d.ts +15 -0
- package/dist/testing/fake-driver.js +458 -0
- package/dist/testing/fake-driver.js.map +1 -0
- package/dist/testing/fake-fetch.d.ts +32 -0
- package/dist/testing/fake-fetch.js +81 -0
- package/dist/testing/fake-fetch.js.map +1 -0
- package/dist/testing/fake-plugin.d.ts +30 -0
- package/dist/testing/fake-plugin.js +66 -0
- package/dist/testing/fake-plugin.js.map +1 -0
- package/dist/testing/faulty-store.d.ts +36 -0
- package/dist/testing/faulty-store.js +66 -0
- package/dist/testing/faulty-store.js.map +1 -0
- package/dist/testing/generation.d.ts +60 -0
- package/dist/testing/generation.js +252 -0
- package/dist/testing/generation.js.map +1 -0
- package/dist/testing/index.d.ts +28 -0
- package/dist/testing/index.js +51 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +188 -45
- package/dist/libs/eth/account.d.ts +0 -9
- package/dist/libs/eth/account.js +0 -58
- package/dist/libs/eth/account.js.map +0 -1
- package/dist/libs/eth/contract.d.ts +0 -7
- package/dist/libs/eth/contract.js +0 -42
- package/dist/libs/eth/contract.js.map +0 -1
- package/dist/libs/eth/index.d.ts +0 -24
- package/dist/libs/eth/index.js +0 -72
- package/dist/libs/eth/index.js.map +0 -1
- package/dist/libs/eth/transact.d.ts +0 -7
- package/dist/libs/eth/transact.js +0 -26
- package/dist/libs/eth/transact.js.map +0 -1
- package/dist/libs/index.d.ts +0 -2
- package/dist/libs/index.js +0 -19
- package/dist/libs/index.js.map +0 -1
- package/dist/libs/trx/account.d.ts +0 -9
- package/dist/libs/trx/account.js +0 -55
- package/dist/libs/trx/account.js.map +0 -1
- package/dist/libs/trx/contract.d.ts +0 -7
- package/dist/libs/trx/contract.js +0 -27
- package/dist/libs/trx/contract.js.map +0 -1
- package/dist/libs/trx/index.d.ts +0 -22
- package/dist/libs/trx/index.js +0 -64
- package/dist/libs/trx/index.js.map +0 -1
- package/dist/libs/trx/transact.d.ts +0 -7
- package/dist/libs/trx/transact.js +0 -26
- package/dist/libs/trx/transact.js.map +0 -1
- package/dist/tool/common.d.ts +0 -28
- package/dist/tool/common.js +0 -33
- package/dist/tool/common.js.map +0 -1
- package/dist/tool/eth-tools.d.ts +0 -3
- package/dist/tool/eth-tools.js +0 -33
- package/dist/tool/eth-tools.js.map +0 -1
- package/dist/tool/index.d.ts +0 -5
- package/dist/tool/index.js +0 -22
- package/dist/tool/index.js.map +0 -1
- package/dist/tool/logging.d.ts +0 -3
- package/dist/tool/logging.js +0 -11
- package/dist/tool/logging.js.map +0 -1
- package/dist/tool/options.d.ts +0 -6
- package/dist/tool/options.js +0 -41
- package/dist/tool/options.js.map +0 -1
- package/dist/tool/trx-tools.d.ts +0 -3
- package/dist/tool/trx-tools.js +0 -20
- package/dist/tool/trx-tools.js.map +0 -1
- package/dist/type/account.d.ts +0 -9
- package/dist/type/account.js.map +0 -1
- package/dist/type/common.d.ts +0 -18
- package/dist/type/common.js.map +0 -1
- package/dist/type/contract.d.ts +0 -10
- package/dist/type/contract.js.map +0 -1
- package/dist/type/index.d.ts +0 -5
- package/dist/type/index.js +0 -22
- package/dist/type/index.js.map +0 -1
- package/dist/type/lib-types.d.ts +0 -9
- package/dist/type/lib-types.js.map +0 -1
- package/dist/type/transact.d.ts +0 -7
- package/dist/type/transact.js.map +0 -1
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Monitor = void 0;
|
|
4
|
+
exports.assertSameNetwork = assertSameNetwork;
|
|
5
|
+
const mapping_1 = require("../blockchain/mapping");
|
|
6
|
+
const error_1 = require("../errors/error");
|
|
7
|
+
const types_1 = require("../store/types");
|
|
8
|
+
const stale_view_1 = require("../transport/stale-view");
|
|
9
|
+
const engine_1 = require("./engine");
|
|
10
|
+
const evaluate_1 = require("./evaluate");
|
|
11
|
+
const observations_1 = require("./observations");
|
|
12
|
+
const views_1 = require("./views");
|
|
13
|
+
const workers_1 = require("./workers");
|
|
14
|
+
const SETTLED = new Set(['final', 'failed', 'rejected', 'replaced', 'expired']);
|
|
15
|
+
const UNKNOWN = {
|
|
16
|
+
state: 'unknown',
|
|
17
|
+
evidence: 'observed',
|
|
18
|
+
confirmations: 0,
|
|
19
|
+
finality: 'none',
|
|
20
|
+
};
|
|
21
|
+
/** Proven and settled: nothing observed later may overwrite it. */
|
|
22
|
+
function isSettled(observation) {
|
|
23
|
+
return observation?.evidence === 'proven' && SETTLED.has(observation.state);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Watches Attempts on chain and moves their Operation on evidence.
|
|
27
|
+
* Observed data (a single endpoint's view, absence, `dropped`, `refused`, an unfinalized
|
|
28
|
+
* block) only ever produces non-terminal states; a terminal state needs `proven` evidence
|
|
29
|
+
* (finalized data confirmed by quorum proof reads). A stale view decides nothing.
|
|
30
|
+
*/
|
|
31
|
+
class Monitor {
|
|
32
|
+
deps;
|
|
33
|
+
/** The worker loop and recovery, over this monitor's checks. */
|
|
34
|
+
#workers;
|
|
35
|
+
constructor(deps) {
|
|
36
|
+
this.deps = deps;
|
|
37
|
+
this.#workers = new workers_1.Workers(deps, {
|
|
38
|
+
checkPass: (target, op, fence, signal) => this.#checkPass(target, op, fence, signal),
|
|
39
|
+
check: (target, op, fence, signal) => this.check(target, op, fence, signal),
|
|
40
|
+
find: (ref) => this.find(ref),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
get observationDeps() {
|
|
44
|
+
return {
|
|
45
|
+
operations: this.deps.stores.operations,
|
|
46
|
+
events: this.deps.events,
|
|
47
|
+
namespace: this.deps.namespace,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/** Finds a managed Operation by id, Attempt ref or observed canonical tx hash. */
|
|
51
|
+
async find(ref) {
|
|
52
|
+
const store = this.deps.stores.operations;
|
|
53
|
+
return ((await store.get(this.deps.namespace, ref)) ??
|
|
54
|
+
(await store.findByRef(this.deps.namespace, ref)));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* One evaluation pass: observe live Attempts, persist observations, apply the transition.
|
|
58
|
+
* `signal` is checked before every read, so an aborted pass stops after at most the
|
|
59
|
+
* read in flight; it then throws the signal's reason and decides nothing further.
|
|
60
|
+
*/
|
|
61
|
+
async check(target, op, fence, signal) {
|
|
62
|
+
return (await this.#checkPass(target, op, fence, signal)).record;
|
|
63
|
+
}
|
|
64
|
+
/** `check`, also telling whether the view was stale (it then decided nothing). */
|
|
65
|
+
async #checkPass(target, op, fence, signal) {
|
|
66
|
+
if ((0, types_1.isTerminal)(op.state) || engine_1.PRE_SIGNING_STATES.has(op.state))
|
|
67
|
+
return { record: op, stale: false };
|
|
68
|
+
const { pooled } = target;
|
|
69
|
+
signal?.throwIfAborted();
|
|
70
|
+
await pooled.transport.ensureFreshHealth(signal);
|
|
71
|
+
signal?.throwIfAborted();
|
|
72
|
+
const [head, finalized] = await Promise.all([
|
|
73
|
+
pooled.driver.reader.getBlockHeight(),
|
|
74
|
+
pooled.driver.reader.getFinalizedHeight(),
|
|
75
|
+
]);
|
|
76
|
+
if ((0, stale_view_1.isStaleView)(pooled.transport, head))
|
|
77
|
+
return { record: op, stale: true };
|
|
78
|
+
const observations = new Map();
|
|
79
|
+
for (const attempt of op.attempts) {
|
|
80
|
+
try {
|
|
81
|
+
observations.set(attempt.id, await this.observeAttempt(target, op, attempt, head, finalized, signal));
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (signal?.aborted || !(0, error_1.isCryptoAioError)(error) || !error.retryable)
|
|
85
|
+
throw error;
|
|
86
|
+
const current = await this.deps.stores.operations.getObservation(attempt.id);
|
|
87
|
+
if (current)
|
|
88
|
+
observations.set(attempt.id, current);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
record: await this.applyEvaluation(op, observations, fence, signal),
|
|
93
|
+
stale: false,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/** Current status of a managed Operation (after a check) or of an arbitrary transaction id. */
|
|
97
|
+
async status(target, ref, signal) {
|
|
98
|
+
let record = await this.find(ref);
|
|
99
|
+
if (!record)
|
|
100
|
+
return { status: await this.rawStatus(target, ref) };
|
|
101
|
+
assertSameNetwork(target.selection, record);
|
|
102
|
+
if (!(0, types_1.isTerminal)(record.state) && !engine_1.PRE_SIGNING_STATES.has(record.state)) {
|
|
103
|
+
try {
|
|
104
|
+
record = await this.check(target, record, undefined, signal);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
if (signal?.aborted || !(0, error_1.isCryptoAioError)(error) || !error.retryable)
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const observations = await (0, observations_1.loadObservations)(this.deps.stores.operations, record);
|
|
112
|
+
return { status: this.bestStatus(record, observations), record };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Polls until the wanted status: `confirmations` (default: the handle's) or, with
|
|
116
|
+
* `finality: 'final'`, proven finality for a managed Operation and observed finality for
|
|
117
|
+
* a transaction it does not manage. The caller's `signal` and the deadline bound
|
|
118
|
+
* every pass and sleep; a pass stops after at most the read in flight.
|
|
119
|
+
*/
|
|
120
|
+
async waitFor(target, ref, options = {}) {
|
|
121
|
+
const { signal } = options;
|
|
122
|
+
if (signal?.aborted)
|
|
123
|
+
throw signal.reason;
|
|
124
|
+
const lifecycle = this.deps.lifecycle();
|
|
125
|
+
const deadline = this.deps.clock.now() + (options.timeoutMs ?? lifecycle.waitTimeoutMs);
|
|
126
|
+
const poll = options.pollIntervalMs ?? lifecycle.pollIntervalMs;
|
|
127
|
+
const wanted = options.confirmations ?? target.selection.confirmations;
|
|
128
|
+
const wantFinal = options.finality === 'final';
|
|
129
|
+
let last;
|
|
130
|
+
const stopped = () => signal?.aborted
|
|
131
|
+
? signal.reason
|
|
132
|
+
: new error_1.TimeoutError('TIMEOUT', 'the transaction was not confirmed before the timeout', {
|
|
133
|
+
context: last?.record ? { operationId: last.record.id } : {},
|
|
134
|
+
});
|
|
135
|
+
// One signal for every pass and sleep: the caller's abort or the deadline.
|
|
136
|
+
const bound = new AbortController();
|
|
137
|
+
const finished = new AbortController();
|
|
138
|
+
const onAbort = () => bound.abort();
|
|
139
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
140
|
+
this.deps.clock
|
|
141
|
+
.sleep(Math.max(0, deadline - this.deps.clock.now()), finished.signal)
|
|
142
|
+
.then(onAbort, () => undefined);
|
|
143
|
+
try {
|
|
144
|
+
for (;;) {
|
|
145
|
+
if (bound.signal.aborted || this.deps.clock.now() >= deadline)
|
|
146
|
+
throw stopped();
|
|
147
|
+
let snapshot;
|
|
148
|
+
try {
|
|
149
|
+
snapshot = await this.status(target, ref, bound.signal);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
if (bound.signal.aborted)
|
|
153
|
+
throw stopped();
|
|
154
|
+
if (!(0, error_1.isCryptoAioError)(error) || !error.retryable)
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
157
|
+
if (snapshot) {
|
|
158
|
+
last = snapshot;
|
|
159
|
+
const { status, record } = snapshot;
|
|
160
|
+
if (record?.state === 'final')
|
|
161
|
+
return snapshot;
|
|
162
|
+
if (record && (record.state === 'failed' || record.state === 'expired')) {
|
|
163
|
+
throw (0, engine_1.rehydrateError)(record.error ?? this.defaultError(record), record.id);
|
|
164
|
+
}
|
|
165
|
+
if (record?.state === 'abandoned') {
|
|
166
|
+
throw new error_1.StateError('INVALID_TRANSITION', `operation '${record.id}' was abandoned`);
|
|
167
|
+
}
|
|
168
|
+
if (!record && status.state === 'failed' && status.finality === 'final') {
|
|
169
|
+
throw new error_1.ChainError('TX_REVERTED', 'the transaction was included but failed on chain');
|
|
170
|
+
}
|
|
171
|
+
const reached = wantFinal
|
|
172
|
+
? status.state === 'final' || unmanagedFinal(snapshot)
|
|
173
|
+
: status.state === 'final' ||
|
|
174
|
+
(status.state === 'included' && status.confirmations >= wanted);
|
|
175
|
+
if (reached)
|
|
176
|
+
return snapshot;
|
|
177
|
+
}
|
|
178
|
+
try {
|
|
179
|
+
await this.deps.clock.sleep(poll, bound.signal);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
throw stopped();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
finally {
|
|
187
|
+
finished.abort();
|
|
188
|
+
signal?.removeEventListener('abort', onAbort);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Yields each status change until the Operation is terminal, or until a transaction
|
|
193
|
+
* it does not manage reaches observed finality, whether it succeeded or reverted. Ends
|
|
194
|
+
* quietly when `signal` aborts.
|
|
195
|
+
*/
|
|
196
|
+
async *watch(target, ref, options = {}) {
|
|
197
|
+
const { signal } = options;
|
|
198
|
+
const poll = options.pollIntervalMs ?? this.deps.lifecycle().pollIntervalMs;
|
|
199
|
+
let last = '';
|
|
200
|
+
while (!signal?.aborted) {
|
|
201
|
+
let snapshot;
|
|
202
|
+
try {
|
|
203
|
+
snapshot = await this.status(target, ref, signal);
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
if (signal?.aborted)
|
|
207
|
+
return;
|
|
208
|
+
if (!(0, error_1.isCryptoAioError)(error) || !error.retryable)
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
if (snapshot) {
|
|
212
|
+
const { status, record } = snapshot;
|
|
213
|
+
const key = [
|
|
214
|
+
status.state,
|
|
215
|
+
status.evidence,
|
|
216
|
+
status.confirmations,
|
|
217
|
+
status.blockHash ?? '',
|
|
218
|
+
record?.state ?? '',
|
|
219
|
+
].join('|');
|
|
220
|
+
if (key !== last) {
|
|
221
|
+
last = key;
|
|
222
|
+
yield snapshot;
|
|
223
|
+
}
|
|
224
|
+
if (record ? (0, types_1.isTerminal)(record.state) : unmanagedFinal(snapshot))
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
await this.deps.clock.sleep(poll, signal);
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// ---- workers and recovery ------------------------------------------------------------
|
|
236
|
+
/** One worker pass (see `Workers.runOnce`); resolves to how many Operations it claimed. */
|
|
237
|
+
runOnce(options) {
|
|
238
|
+
return this.#workers.runOnce(options);
|
|
239
|
+
}
|
|
240
|
+
/** Runs worker passes until `signal` aborts (see `Workers.start`). */
|
|
241
|
+
start(options = {}) {
|
|
242
|
+
return this.#workers.start(options);
|
|
243
|
+
}
|
|
244
|
+
/** Startup recovery for this namespace; it never signs (see `Workers.recover`). */
|
|
245
|
+
recover(options = {}) {
|
|
246
|
+
return this.#workers.recover(options);
|
|
247
|
+
}
|
|
248
|
+
// ---- observation ---------------------------------------------------------------------
|
|
249
|
+
async observeAttempt(target, op, attempt, head, finalized, signal) {
|
|
250
|
+
const current = await this.deps.stores.operations.getObservation(attempt.id);
|
|
251
|
+
if (current && isSettled(current))
|
|
252
|
+
return current;
|
|
253
|
+
const { driver } = target.pooled;
|
|
254
|
+
const from = op.intent.from;
|
|
255
|
+
const now = this.deps.clock.now();
|
|
256
|
+
signal?.throwIfAborted();
|
|
257
|
+
const seen = await driver.reader.observe(attempt.ref, attempt.ordering, from);
|
|
258
|
+
signal?.throwIfAborted();
|
|
259
|
+
let reorgedFrom;
|
|
260
|
+
let patch;
|
|
261
|
+
if (seen.seen === 'block' && seen.blockHeight !== undefined) {
|
|
262
|
+
// The transaction is in another block than recorded: its old block was orphaned, once
|
|
263
|
+
// the quorum confirms it; one endpoint's other block alone decides nothing.
|
|
264
|
+
if (current?.blockHash !== undefined &&
|
|
265
|
+
seen.blockHash !== undefined &&
|
|
266
|
+
current.blockHash !== seen.blockHash) {
|
|
267
|
+
if (!(await this.orphaned(target, current)))
|
|
268
|
+
return current;
|
|
269
|
+
signal?.throwIfAborted();
|
|
270
|
+
reorgedFrom = current.blockHash;
|
|
271
|
+
}
|
|
272
|
+
patch = {
|
|
273
|
+
state: seen.success === false ? 'failed' : 'included',
|
|
274
|
+
evidence: 'observed',
|
|
275
|
+
confirmations: depth(head, seen.blockHeight),
|
|
276
|
+
blockHeight: seen.blockHeight,
|
|
277
|
+
blockHash: seen.blockHash,
|
|
278
|
+
...(seen.txHash !== undefined ? { txHash: seen.txHash } : {}),
|
|
279
|
+
// Why an included transaction failed, as the driver's fixed text; any earlier
|
|
280
|
+
// reason (a refusal, an old failure) is cleared otherwise.
|
|
281
|
+
reason: seen.success === false ? seen.reason : undefined,
|
|
282
|
+
firstSeenAt: current?.firstSeenAt ?? now,
|
|
283
|
+
lastSeenAt: now,
|
|
284
|
+
};
|
|
285
|
+
if (seen.blockHeight <= finalized)
|
|
286
|
+
patch = await this.proveFinal(target, op, attempt, patch, head, signal);
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
if (current?.blockHash !== undefined) {
|
|
290
|
+
// Absence (or a mempool sighting) of an included transaction is not evidence of a
|
|
291
|
+
// reorg by itself: a lagging or inconsistent endpoint shows the same. Only a
|
|
292
|
+
// quorum-served different block at the recorded height proves it; otherwise decide
|
|
293
|
+
// nothing.
|
|
294
|
+
if (!(await this.orphaned(target, current)))
|
|
295
|
+
return current;
|
|
296
|
+
signal?.throwIfAborted();
|
|
297
|
+
reorgedFrom = current.blockHash;
|
|
298
|
+
}
|
|
299
|
+
// Out of a block, an earlier failure's reason no longer applies (a refusal keeps
|
|
300
|
+
// its own, below). Clearing relies on `putObservation` replacing the whole record,
|
|
301
|
+
// a key set to `undefined` being absent.
|
|
302
|
+
const cleared = {
|
|
303
|
+
blockHash: undefined,
|
|
304
|
+
blockHeight: undefined,
|
|
305
|
+
confirmations: 0,
|
|
306
|
+
reason: undefined,
|
|
307
|
+
};
|
|
308
|
+
patch =
|
|
309
|
+
seen.seen === 'mempool'
|
|
310
|
+
? {
|
|
311
|
+
...cleared,
|
|
312
|
+
state: 'mempool',
|
|
313
|
+
evidence: 'observed',
|
|
314
|
+
firstSeenAt: current?.firstSeenAt ?? now,
|
|
315
|
+
lastSeenAt: now,
|
|
316
|
+
}
|
|
317
|
+
: {
|
|
318
|
+
...cleared,
|
|
319
|
+
...(await this.whenAbsent(target, op, attempt, current, now, signal)),
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
// This patch was derived from `current`; when another writer changed the
|
|
323
|
+
// observation meanwhile (possibly with stronger evidence), keep theirs and decide nothing.
|
|
324
|
+
let applied = false;
|
|
325
|
+
const saved = await (0, observations_1.writeObservation)(this.observationDeps, attempt, op.id, (stored) => {
|
|
326
|
+
applied = (stored?.version ?? null) === (current?.version ?? null);
|
|
327
|
+
return applied ? patch : undefined;
|
|
328
|
+
});
|
|
329
|
+
if (!applied)
|
|
330
|
+
return saved;
|
|
331
|
+
if (reorgedFrom !== undefined)
|
|
332
|
+
this.#reorged(op, attempt, reorgedFrom);
|
|
333
|
+
if (saved.state === 'dropped' &&
|
|
334
|
+
attempt.id === op.activeAttemptId &&
|
|
335
|
+
op.state !== 'stalled') {
|
|
336
|
+
signal?.throwIfAborted();
|
|
337
|
+
await this.#rebroadcastDropped(target, op, attempt, saved, now, signal);
|
|
338
|
+
}
|
|
339
|
+
return saved;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* A block at or below the finalized height becomes `final`/`failed` + `proven` only when
|
|
343
|
+
* the quorum proof confirms it. A retryable proof failure (e.g. PROVIDER_INCONSISTENT)
|
|
344
|
+
* decides nothing: the observed patch is kept.
|
|
345
|
+
*/
|
|
346
|
+
async proveFinal(target, op, attempt, patch, head, signal) {
|
|
347
|
+
let proof;
|
|
348
|
+
signal?.throwIfAborted();
|
|
349
|
+
try {
|
|
350
|
+
proof = await target.pooled.driver.proofs.includedFinal(attempt.ref, attempt.ordering, op.intent.from);
|
|
351
|
+
}
|
|
352
|
+
catch (error) {
|
|
353
|
+
if (!(0, error_1.isCryptoAioError)(error) || !error.retryable)
|
|
354
|
+
throw error;
|
|
355
|
+
return patch;
|
|
356
|
+
}
|
|
357
|
+
if (!proof.included)
|
|
358
|
+
return patch;
|
|
359
|
+
return {
|
|
360
|
+
...patch,
|
|
361
|
+
state: proof.success ? 'final' : 'failed',
|
|
362
|
+
evidence: 'proven',
|
|
363
|
+
blockHeight: proof.blockHeight,
|
|
364
|
+
blockHash: proof.blockHash,
|
|
365
|
+
txHash: proof.txHash,
|
|
366
|
+
confirmations: depth(head, proof.blockHeight),
|
|
367
|
+
reason: failureReason(proof),
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Whether the block recorded for `observation` is no longer the one at its height.
|
|
372
|
+
* Only the quorum-served hash decides; a disagreement or other retryable failure, or no
|
|
373
|
+
* block at that height yet, decides nothing (`false`).
|
|
374
|
+
*/
|
|
375
|
+
async orphaned(target, observation) {
|
|
376
|
+
const { blockHeight, blockHash } = observation;
|
|
377
|
+
if (blockHeight === undefined || blockHash === undefined)
|
|
378
|
+
return false;
|
|
379
|
+
let canonical;
|
|
380
|
+
try {
|
|
381
|
+
canonical = await target.pooled.driver.proofs.blockHash(blockHeight, 'latest');
|
|
382
|
+
}
|
|
383
|
+
catch (error) {
|
|
384
|
+
if (!(0, error_1.isCryptoAioError)(error) || !error.retryable)
|
|
385
|
+
throw error;
|
|
386
|
+
return false;
|
|
387
|
+
}
|
|
388
|
+
return canonical !== null && canonical !== blockHash;
|
|
389
|
+
}
|
|
390
|
+
/** The transaction is not visible anywhere we can see: only finalized proofs may declare it dead. */
|
|
391
|
+
async whenAbsent(target, op, attempt, current, now, signal) {
|
|
392
|
+
const { proofs } = target.pooled.driver;
|
|
393
|
+
const read = (work) => {
|
|
394
|
+
signal?.throwIfAborted();
|
|
395
|
+
return work();
|
|
396
|
+
};
|
|
397
|
+
// The built ordering (never the reservation, whose seqno `validUntil`
|
|
398
|
+
// the driver may have replaced while building).
|
|
399
|
+
const ordering = attempt.ordering;
|
|
400
|
+
const from = op.intent.from;
|
|
401
|
+
const slotted = ordering.kind === 'nonce' ||
|
|
402
|
+
ordering.kind === 'seqno' ||
|
|
403
|
+
ordering.kind === 'inputs';
|
|
404
|
+
const expiring = ordering.kind === 'expiry' || ordering.kind === 'seqno';
|
|
405
|
+
const deadSlot = slotted && (await read(() => proofs.slotConsumed(ordering, from, 'finalized')));
|
|
406
|
+
const deadExpiry = !deadSlot && expiring && (await read(() => proofs.expired(ordering)));
|
|
407
|
+
if (deadSlot || deadExpiry) {
|
|
408
|
+
const proof = await read(() => proofs.includedFinal(attempt.ref, ordering, from));
|
|
409
|
+
if (proof.included) {
|
|
410
|
+
return {
|
|
411
|
+
state: proof.success ? 'final' : 'failed',
|
|
412
|
+
evidence: 'proven',
|
|
413
|
+
blockHeight: proof.blockHeight,
|
|
414
|
+
blockHash: proof.blockHash,
|
|
415
|
+
txHash: proof.txHash,
|
|
416
|
+
reason: failureReason(proof),
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
return { state: deadSlot ? 'replaced' : 'expired', evidence: 'proven' };
|
|
420
|
+
}
|
|
421
|
+
if (slotted && (await read(() => proofs.slotConsumed(ordering, from, 'latest')))) {
|
|
422
|
+
return { state: 'replaced', evidence: 'observed' };
|
|
423
|
+
}
|
|
424
|
+
if (current?.state === 'refused') {
|
|
425
|
+
return { state: 'refused', evidence: 'observed', reason: current.reason };
|
|
426
|
+
}
|
|
427
|
+
const since = current?.lastSeenAt ?? current?.lastBroadcastAt ?? attempt.createdAt;
|
|
428
|
+
const dropped = now - since >= this.deps.lifecycle().droppedGracePeriodMs;
|
|
429
|
+
return { state: dropped ? 'dropped' : 'pending', evidence: 'observed' };
|
|
430
|
+
}
|
|
431
|
+
async applyEvaluation(op, observations, fence, signal) {
|
|
432
|
+
const evaluation = (0, evaluate_1.evaluateOperation)(op, observations);
|
|
433
|
+
const { winner } = evaluation;
|
|
434
|
+
if (winner) {
|
|
435
|
+
// The winner consumed the ordering slot: every other Attempt is proven replaced by it.
|
|
436
|
+
// As in `whenAbsent`, a proven `replaced` carries no reason: a refusal's no longer
|
|
437
|
+
// applies.
|
|
438
|
+
const linked = (o) => isSettled(o) && !(o?.state === 'replaced' && o.replacedBy === undefined);
|
|
439
|
+
for (const attempt of op.attempts) {
|
|
440
|
+
if (attempt.id === winner.id || linked(observations.get(attempt.id)))
|
|
441
|
+
continue;
|
|
442
|
+
await (0, observations_1.writeObservation)(this.observationDeps, attempt, op.id, (stored) => linked(stored)
|
|
443
|
+
? undefined
|
|
444
|
+
: {
|
|
445
|
+
state: 'replaced',
|
|
446
|
+
evidence: 'proven',
|
|
447
|
+
replacedBy: winner.ref.id,
|
|
448
|
+
reason: undefined,
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
// Failing an all-rejected Operation releases its nonce, so the engine applies it
|
|
453
|
+
// under the address lease; the monitor never makes a reservation-holding transition.
|
|
454
|
+
if (evaluation.error?.code === 'TX_REJECTED')
|
|
455
|
+
return this.failRejected(op, signal, fence);
|
|
456
|
+
const terminal = (0, types_1.isTerminal)(evaluation.state);
|
|
457
|
+
// A read-only pass (no fence) writes the Operation only when its state, outcome
|
|
458
|
+
// or error changes, never just to schedule it: a version bump would make a concurrent
|
|
459
|
+
// engine write (e.g. right after a broadcast) lose its compare-and-set. Scheduling
|
|
460
|
+
// (`nextCheckAt`) belongs to fenced workers and to engine transitions.
|
|
461
|
+
const changed = evaluation.state !== op.state ||
|
|
462
|
+
(evaluation.outcome !== undefined && evaluation.outcome !== op.outcome) ||
|
|
463
|
+
(evaluation.error !== undefined && evaluation.error.code !== op.error?.code);
|
|
464
|
+
if (!changed && !fence)
|
|
465
|
+
return op;
|
|
466
|
+
const clear = [];
|
|
467
|
+
if (terminal)
|
|
468
|
+
clear.push('nextCheckAt');
|
|
469
|
+
if (op.state === 'stalled' && evaluation.state !== 'stalled' && !evaluation.error)
|
|
470
|
+
clear.push('error');
|
|
471
|
+
const patch = {
|
|
472
|
+
...(evaluation.state !== op.state ? { state: evaluation.state } : {}),
|
|
473
|
+
...(evaluation.outcome ? { outcome: evaluation.outcome } : {}),
|
|
474
|
+
...(evaluation.error
|
|
475
|
+
? {
|
|
476
|
+
error: new error_1.ChainError(evaluation.error.code, evaluation.error.message, {
|
|
477
|
+
context: { operationId: op.id },
|
|
478
|
+
}).toJSON(),
|
|
479
|
+
}
|
|
480
|
+
: {}),
|
|
481
|
+
...(fence && !terminal
|
|
482
|
+
? { nextCheckAt: this.deps.clock.now() + this.deps.lifecycle().pollIntervalMs }
|
|
483
|
+
: {}),
|
|
484
|
+
...(clear.length > 0 ? { clear } : {}),
|
|
485
|
+
};
|
|
486
|
+
return this.deps.engine.update(op, patch, fence);
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Hands the all-rejected verdict to the engine: an unfenced pass (`tryOnce`) tries the
|
|
490
|
+
* lease once, a fenced one waits `acquireTimeoutMs`, and either wait is bounded by the
|
|
491
|
+
* pass `signal` (the caller's abort and, in `waitFor`, its deadline). A fenced pass's
|
|
492
|
+
* terminal write carries its claim `fence`, so a worker whose claim was taken over writes
|
|
493
|
+
* nothing. An unresolvable target leaves the Operation non-terminal.
|
|
494
|
+
*/
|
|
495
|
+
async failRejected(op, signal, fence) {
|
|
496
|
+
let target;
|
|
497
|
+
let failure;
|
|
498
|
+
try {
|
|
499
|
+
target = await this.deps.resolveTarget(op);
|
|
500
|
+
}
|
|
501
|
+
catch (error) {
|
|
502
|
+
failure = error;
|
|
503
|
+
}
|
|
504
|
+
if (!target) {
|
|
505
|
+
this.deps.log.warn('cannot resolve the target to fail a rejected operation', {
|
|
506
|
+
operationId: op.id,
|
|
507
|
+
code: (0, engine_1.errorCode)(failure),
|
|
508
|
+
});
|
|
509
|
+
return op;
|
|
510
|
+
}
|
|
511
|
+
// Every unfenced pass (`getTransactionStatus`, `watch`, `waitFor`), signalled or not,
|
|
512
|
+
// tries the lease once: a busy lease leaves the Operation for a later pass. Only a
|
|
513
|
+
// fenced worker pass waits `acquireTimeoutMs`.
|
|
514
|
+
return this.deps.engine.failRejected(target, op, {
|
|
515
|
+
signal,
|
|
516
|
+
...(fence ? { fence } : { acquireTimeoutMs: 0 }),
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
bestStatus(record, observations) {
|
|
520
|
+
const all = record.attempts
|
|
521
|
+
.map((a) => observations.get(a.id))
|
|
522
|
+
.filter((o) => o !== undefined);
|
|
523
|
+
const chosen = all.find((o) => o.state === 'final' || (o.state === 'failed' && o.evidence === 'proven')) ??
|
|
524
|
+
all
|
|
525
|
+
.filter((o) => o.state === 'included' || o.state === 'failed')
|
|
526
|
+
.sort((a, b) => b.confirmations - a.confirmations)[0] ??
|
|
527
|
+
(record.activeAttemptId ? observations.get(record.activeAttemptId) : undefined);
|
|
528
|
+
return chosen ? (0, views_1.statusOf)(chosen) : UNKNOWN;
|
|
529
|
+
}
|
|
530
|
+
async rawStatus(target, id) {
|
|
531
|
+
const { reader } = target.pooled.driver;
|
|
532
|
+
const [observation, head, finalized] = await Promise.all([
|
|
533
|
+
reader.observe({ id, idKind: 'tx-hash', canonical: true }, undefined, undefined),
|
|
534
|
+
reader.getBlockHeight(),
|
|
535
|
+
reader.getFinalizedHeight(),
|
|
536
|
+
]);
|
|
537
|
+
return (0, mapping_1.statusFromObservation)(observation, head, finalized);
|
|
538
|
+
}
|
|
539
|
+
defaultError(record) {
|
|
540
|
+
const code = record.state === 'expired' ? 'TX_EXPIRED' : 'TX_REJECTED';
|
|
541
|
+
return new error_1.ChainError(code, `operation ended in state '${record.state}'`).toJSON();
|
|
542
|
+
}
|
|
543
|
+
#reorged(op, attempt, previousBlockHash) {
|
|
544
|
+
this.deps.events.emit('tx.reorged', {
|
|
545
|
+
namespace: this.deps.namespace,
|
|
546
|
+
operationId: op.id,
|
|
547
|
+
attemptId: attempt.id,
|
|
548
|
+
previousBlockHash,
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
/**
|
|
552
|
+
* Resends the stored raw bytes of a dropped active Attempt, at most once per
|
|
553
|
+
* `rebroadcastIntervalMs`. The answer decides nothing: `dropped` is never terminal,
|
|
554
|
+
* and a refusal or rejection of bytes a node once held says nothing about them. An
|
|
555
|
+
* acceptance is remembered (`firstSeenAt`) like the engine's broadcast path does.
|
|
556
|
+
*/
|
|
557
|
+
async #rebroadcastDropped(target, op, attempt, observation, now, signal) {
|
|
558
|
+
if (now - (observation.lastBroadcastAt ?? 0) <
|
|
559
|
+
this.deps.lifecycle().rebroadcastIntervalMs)
|
|
560
|
+
return;
|
|
561
|
+
let accepted = false;
|
|
562
|
+
try {
|
|
563
|
+
const result = await target.pooled.driver.broadcaster.broadcast({ raw: attempt.raw, ref: attempt.ref }, signal ? { signal } : {});
|
|
564
|
+
accepted = result.kind === 'accepted' || result.kind === 'already-known';
|
|
565
|
+
}
|
|
566
|
+
catch (error) {
|
|
567
|
+
// The code only: an error message may carry detail that logs must not.
|
|
568
|
+
this.deps.log.debug('rebroadcast of a dropped attempt failed', {
|
|
569
|
+
operationId: op.id,
|
|
570
|
+
code: (0, engine_1.errorCode)(error),
|
|
571
|
+
});
|
|
572
|
+
}
|
|
573
|
+
await (0, observations_1.writeObservation)(this.observationDeps, attempt, op.id, (stored) => ({
|
|
574
|
+
lastBroadcastAt: now,
|
|
575
|
+
...(accepted ? { firstSeenAt: stored?.firstSeenAt ?? now } : {}),
|
|
576
|
+
}));
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
exports.Monitor = Monitor;
|
|
580
|
+
/** Refuses a stored Operation of another chain or network than `selection` (INVALID_INTENT). */
|
|
581
|
+
function assertSameNetwork(selection, record) {
|
|
582
|
+
const { chain, network } = selection;
|
|
583
|
+
if (record.context.chain !== chain.id || record.context.network !== network.id) {
|
|
584
|
+
throw new error_1.ValidationError('INVALID_INTENT', `operation '${record.id}' belongs to ${record.context.chain}:${record.context.network}, not ${chain.id}:${network.id}`);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
/**
|
|
588
|
+
* An unmanaged transaction has no proofs to wait for: its observed finality is the answer,
|
|
589
|
+
* whether it succeeded or reverted (`waitFor` rejects a reverted one with TX_REVERTED).
|
|
590
|
+
*/
|
|
591
|
+
function unmanagedFinal({ status, record }) {
|
|
592
|
+
return !record && status.finality === 'final';
|
|
593
|
+
}
|
|
594
|
+
function depth(head, height) {
|
|
595
|
+
const d = head - height + 1n;
|
|
596
|
+
return d > 0n ? Number(d) : 0;
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* A proven failure's fixed reason; a success clears any earlier reason. Drivers give a
|
|
600
|
+
* fixed text because a node's own text can carry addresses or amounts; the stored reason
|
|
601
|
+
* is sensitive data, and no event carries it.
|
|
602
|
+
*/
|
|
603
|
+
function failureReason(proof) {
|
|
604
|
+
return proof.success ? undefined : proof.reason;
|
|
605
|
+
}
|
|
606
|
+
//# sourceMappingURL=monitor.js.map
|