crypto-aio 0.0.3 → 0.2.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 +167 -0
- package/README.md +163 -13
- 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 +386 -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 +175 -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 +139 -0
- package/dist/adapters/evm/ethers-client.js.map +1 -0
- package/dist/adapters/evm/fees.d.ts +103 -0
- package/dist/adapters/evm/fees.js +277 -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 +12 -0
- package/dist/adapters/evm/index.js.map +1 -0
- package/dist/adapters/evm/network.d.ts +65 -0
- package/dist/adapters/evm/network.js +150 -0
- package/dist/adapters/evm/network.js.map +1 -0
- package/dist/adapters/evm/plugin.d.ts +35 -0
- package/dist/adapters/evm/plugin.js +150 -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 +370 -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 +83 -0
- package/dist/adapters/evm/reader.js +326 -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 +10 -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 +265 -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 +26 -0
- package/dist/adapters/evm/web3-client.js +176 -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 +556 -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 +77 -0
- package/dist/adapters/solana/fees.js +214 -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/message.d.ts +15 -0
- package/dist/adapters/solana/message.js +120 -0
- package/dist/adapters/solana/message.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 +44 -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 +124 -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 +61 -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 +755 -0
- package/dist/adapters/ton/proofs.js.map +1 -0
- package/dist/adapters/ton/reader.d.ts +235 -0
- package/dist/adapters/ton/reader.js +976 -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 +74 -0
- package/dist/adapters/ton/trace.js +303 -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 +41 -0
- package/dist/adapters/tron/abi.js +112 -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 +569 -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 +52 -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 +371 -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 +57 -0
- package/dist/adapters/tron/reader.js +220 -0
- package/dist/adapters/tron/reader.js.map +1 -0
- package/dist/adapters/tron/tokens.d.ts +9 -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 +100 -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 +63 -0
- package/dist/adapters/utxo/context.js +125 -0
- package/dist/adapters/utxo/context.js.map +1 -0
- package/dist/adapters/utxo/decode.d.ts +22 -0
- package/dist/adapters/utxo/decode.js +121 -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 +79 -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 +100 -0
- package/dist/adapters/utxo/esplora.js +498 -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 +66 -0
- package/dist/adapters/utxo/proofs.js +469 -0
- package/dist/adapters/utxo/proofs.js.map +1 -0
- package/dist/adapters/utxo/rawblock.d.ts +46 -0
- package/dist/adapters/utxo/rawblock.js +159 -0
- package/dist/adapters/utxo/rawblock.js.map +1 -0
- package/dist/adapters/utxo/rawtx.d.ts +73 -0
- package/dist/adapters/utxo/rawtx.js +264 -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 +179 -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 +180 -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 +62 -0
- package/dist/core/container/container.js +500 -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 +379 -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 +163 -0
- package/dist/core/errors/codes.js +53 -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 +106 -0
- package/dist/core/lifecycle/engine-rules.js +267 -0
- package/dist/core/lifecycle/engine-rules.js.map +1 -0
- package/dist/core/lifecycle/engine.d.ts +502 -0
- package/dist/core/lifecycle/engine.js +1750 -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 +77 -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 +616 -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 +88 -0
- package/dist/core/lifecycle/workers.js +347 -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 +38 -0
- package/dist/core/model/ids.js +14 -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 +28 -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 +123 -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 +358 -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 +161 -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/format.d.ts +20 -0
- package/dist/core/store/format.js +86 -0
- package/dist/core/store/format.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 +258 -0
- package/dist/core/store/types.js +119 -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 +1703 -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 +159 -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 +35 -0
- package/dist/core/util/json.js +174 -0
- package/dist/core/util/json.js.map +1 -0
- package/dist/core/util/names.d.ts +27 -0
- package/dist/core/util/names.js +56 -0
- package/dist/core/util/names.js.map +1 -0
- package/dist/index.d.ts +65 -14
- package/dist/index.js +107 -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 +737 -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 +68 -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 +38 -0
- package/dist/testing/faulty-store.js +71 -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 +198 -45
- package/dist/libs/eth/account.d.ts +0 -9
- package/dist/libs/eth/account.js +0 -58
- package/dist/libs/eth/account.js.map +0 -1
- package/dist/libs/eth/contract.d.ts +0 -7
- package/dist/libs/eth/contract.js +0 -42
- package/dist/libs/eth/contract.js.map +0 -1
- package/dist/libs/eth/index.d.ts +0 -24
- package/dist/libs/eth/index.js +0 -72
- package/dist/libs/eth/index.js.map +0 -1
- package/dist/libs/eth/transact.d.ts +0 -7
- package/dist/libs/eth/transact.js +0 -26
- package/dist/libs/eth/transact.js.map +0 -1
- package/dist/libs/index.d.ts +0 -2
- package/dist/libs/index.js +0 -19
- package/dist/libs/index.js.map +0 -1
- package/dist/libs/trx/account.d.ts +0 -9
- package/dist/libs/trx/account.js +0 -55
- package/dist/libs/trx/account.js.map +0 -1
- package/dist/libs/trx/contract.d.ts +0 -7
- package/dist/libs/trx/contract.js +0 -27
- package/dist/libs/trx/contract.js.map +0 -1
- package/dist/libs/trx/index.d.ts +0 -22
- package/dist/libs/trx/index.js +0 -64
- package/dist/libs/trx/index.js.map +0 -1
- package/dist/libs/trx/transact.d.ts +0 -7
- package/dist/libs/trx/transact.js +0 -26
- package/dist/libs/trx/transact.js.map +0 -1
- package/dist/tool/common.d.ts +0 -28
- package/dist/tool/common.js +0 -33
- package/dist/tool/common.js.map +0 -1
- package/dist/tool/eth-tools.d.ts +0 -3
- package/dist/tool/eth-tools.js +0 -33
- package/dist/tool/eth-tools.js.map +0 -1
- package/dist/tool/index.d.ts +0 -5
- package/dist/tool/index.js +0 -22
- package/dist/tool/index.js.map +0 -1
- package/dist/tool/logging.d.ts +0 -3
- package/dist/tool/logging.js +0 -11
- package/dist/tool/logging.js.map +0 -1
- package/dist/tool/options.d.ts +0 -6
- package/dist/tool/options.js +0 -41
- package/dist/tool/options.js.map +0 -1
- package/dist/tool/trx-tools.d.ts +0 -3
- package/dist/tool/trx-tools.js +0 -20
- package/dist/tool/trx-tools.js.map +0 -1
- package/dist/type/account.d.ts +0 -9
- package/dist/type/account.js.map +0 -1
- package/dist/type/common.d.ts +0 -18
- package/dist/type/common.js.map +0 -1
- package/dist/type/contract.d.ts +0 -10
- package/dist/type/contract.js.map +0 -1
- package/dist/type/index.d.ts +0 -5
- package/dist/type/index.js +0 -22
- package/dist/type/index.js.map +0 -1
- package/dist/type/lib-types.d.ts +0 -9
- package/dist/type/lib-types.js.map +0 -1
- package/dist/type/transact.d.ts +0 -7
- package/dist/type/transact.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/solana/index.ts"],"names":[],"mappings":";;;AAiBA,mCAAoD;AAA3C,kHAAA,wBAAwB,OAAA;AACjC,qCAAgF;AAAvE,yHAAA,8BAA8B,OAAA;AAAE,8GAAA,mBAAmB,OAAA","sourcesContent":["/**\n * `crypto-aio/solana`: the SDK-free Solana types, and the `crypto-aio/native` client type:\n * importing this entry types `native(bc, '@solana/web3.js')` as a `Connection` wired to the\n * handle's transport (HTTP JSON-RPC only; subscriptions have no transport bridge).\n *\n * @module crypto-aio/solana\n */\nimport type { Connection } from '@solana/web3.js';\n\n// Augments the package entry's map. SDK types appear only here, so the main entry's\n// typings name no SDK.\ndeclare module '../../index' {\n interface NativeClientMap {\n '@solana/web3.js': Connection;\n }\n}\n\nexport { SOLANA_PEER_DEPENDENCIES } from './plugin';\nexport { DEFAULT_MAX_COMPUTE_UNIT_PRICE, SOLANA_CAPABILITIES } from './network';\nexport type {\n SolanaExpiryOrdering,\n SolanaExt,\n SolanaFeeDetails,\n SolanaFeeOverride,\n SolanaTokenAccount,\n} from './types';\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** The bytes of a canonical base58 string of `length` bytes, or `null`. */
|
|
2
|
+
export declare function decodeBase58(value: unknown, length: number): Uint8Array | null;
|
|
3
|
+
export declare const encodeBase58: (bytes: Uint8Array) => string;
|
|
4
|
+
/** A 32-byte account address (on or off the ed25519 curve: PDAs are addresses too). */
|
|
5
|
+
export declare const isAddress: (value: unknown) => value is string;
|
|
6
|
+
/** A 64-byte transaction signature. */
|
|
7
|
+
export declare const isSignature: (value: unknown) => value is string;
|
|
8
|
+
/**
|
|
9
|
+
* The address of a wallet's ed25519 public key: exactly 32 bytes that decode to a point on
|
|
10
|
+
* the curve and not of small order. Anything else (a 64-byte secret key, a 32-byte seed
|
|
11
|
+
* that is off the curve, the identity point) is refused with `INVALID_ADDRESS`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function addressFromPublicKey(publicKey: Uint8Array): string;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isSignature = exports.isAddress = exports.encodeBase58 = void 0;
|
|
4
|
+
exports.decodeBase58 = decodeBase58;
|
|
5
|
+
exports.addressFromPublicKey = addressFromPublicKey;
|
|
6
|
+
/**
|
|
7
|
+
* Strict, SDK-free decoding of Solana keys and signatures. Only canonical
|
|
8
|
+
* base58 of exactly 32 (keys) or 64 (signatures) bytes is accepted, so the driver never
|
|
9
|
+
* relies on an SDK's leniency (`new PublicKey()` also takes numbers, arrays and BNs).
|
|
10
|
+
*/
|
|
11
|
+
const ed25519_1 = require("@noble/curves/ed25519");
|
|
12
|
+
const base_1 = require("@scure/base");
|
|
13
|
+
const error_1 = require("../../core/errors/error");
|
|
14
|
+
const ALPHABET = /^[1-9A-HJ-NP-Za-km-z]+$/;
|
|
15
|
+
/**
|
|
16
|
+
* The longest base58 text of `length` bytes: 44 characters for a key, 88 for a signature.
|
|
17
|
+
* base58 decoding is O(n²), so longer text is refused before it is decoded.
|
|
18
|
+
*/
|
|
19
|
+
const maxChars = (length) => Math.ceil((length * 8) / Math.log2(58));
|
|
20
|
+
/** The bytes of a canonical base58 string of `length` bytes, or `null`. */
|
|
21
|
+
function decodeBase58(value, length) {
|
|
22
|
+
if (typeof value !== 'string' || value.length === 0)
|
|
23
|
+
return null;
|
|
24
|
+
if (value.length > maxChars(length))
|
|
25
|
+
return null;
|
|
26
|
+
if (!ALPHABET.test(value))
|
|
27
|
+
return null;
|
|
28
|
+
let bytes;
|
|
29
|
+
try {
|
|
30
|
+
bytes = base_1.base58.decode(value);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
// Canonical: exactly `length` bytes, and re-encoding gives the same text back.
|
|
36
|
+
if (bytes.length !== length || base_1.base58.encode(bytes) !== value)
|
|
37
|
+
return null;
|
|
38
|
+
return bytes;
|
|
39
|
+
}
|
|
40
|
+
const encodeBase58 = (bytes) => base_1.base58.encode(bytes);
|
|
41
|
+
exports.encodeBase58 = encodeBase58;
|
|
42
|
+
/** A 32-byte account address (on or off the ed25519 curve: PDAs are addresses too). */
|
|
43
|
+
const isAddress = (value) => decodeBase58(value, 32) !== null;
|
|
44
|
+
exports.isAddress = isAddress;
|
|
45
|
+
/** A 64-byte transaction signature. */
|
|
46
|
+
const isSignature = (value) => decodeBase58(value, 64) !== null;
|
|
47
|
+
exports.isSignature = isSignature;
|
|
48
|
+
/**
|
|
49
|
+
* The address of a wallet's ed25519 public key: exactly 32 bytes that decode to a point on
|
|
50
|
+
* the curve and not of small order. Anything else (a 64-byte secret key, a 32-byte seed
|
|
51
|
+
* that is off the curve, the identity point) is refused with `INVALID_ADDRESS`.
|
|
52
|
+
*/
|
|
53
|
+
function addressFromPublicKey(publicKey) {
|
|
54
|
+
if (!(publicKey instanceof Uint8Array) || publicKey.length !== 32) {
|
|
55
|
+
throw new error_1.ValidationError('INVALID_ADDRESS', 'a Solana public key is exactly 32 bytes');
|
|
56
|
+
}
|
|
57
|
+
let point;
|
|
58
|
+
try {
|
|
59
|
+
point = ed25519_1.ed25519.ExtendedPoint.fromHex(publicKey);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
throw new error_1.ValidationError('INVALID_ADDRESS', 'the public key is not a point on the ed25519 curve');
|
|
63
|
+
}
|
|
64
|
+
if (point.isSmallOrder()) {
|
|
65
|
+
throw new error_1.ValidationError('INVALID_ADDRESS', 'the public key has small order');
|
|
66
|
+
}
|
|
67
|
+
return base_1.base58.encode(publicKey);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/adapters/solana/keys.ts"],"names":[],"mappings":";;;AAkBA,oCAaC;AAiBD,oDAoBC;AApED;;;;GAIG;AACH,mDAAgD;AAChD,sCAAqC;AACrC,mDAA0D;AAE1D,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAE3C;;;GAGG;AACH,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAErF,2EAA2E;AAC3E,SAAgB,YAAY,CAAC,KAAc,EAAE,MAAc;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,KAAiB,CAAC;IACtB,IAAI,CAAC;QACH,KAAK,GAAG,aAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,+EAA+E;IAC/E,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,aAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC3E,OAAO,KAAK,CAAC;AACf,CAAC;AAEM,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAU,EAAE,CAAC,aAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAAnE,QAAA,YAAY,gBAAuD;AAEhF,uFAAuF;AAChF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAmB,EAAE,CAC3D,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC;AADtB,QAAA,SAAS,aACa;AAEnC,uCAAuC;AAChC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAmB,EAAE,CAC7D,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC;AADtB,QAAA,WAAW,eACW;AAEnC;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,SAAqB;IACxD,IAAI,CAAC,CAAC,SAAS,YAAY,UAAU,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAClE,MAAM,IAAI,uBAAe,CACvB,iBAAiB,EACjB,yCAAyC,CAC1C,CAAC;IACJ,CAAC;IACD,IAAI,KAAuD,CAAC;IAC5D,IAAI,CAAC;QACH,KAAK,GAAG,iBAAO,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,uBAAe,CACvB,iBAAiB,EACjB,oDAAoD,CACrD,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,uBAAe,CAAC,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,aAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC","sourcesContent":["/**\n * Strict, SDK-free decoding of Solana keys and signatures. Only canonical\n * base58 of exactly 32 (keys) or 64 (signatures) bytes is accepted, so the driver never\n * relies on an SDK's leniency (`new PublicKey()` also takes numbers, arrays and BNs).\n */\nimport { ed25519 } from '@noble/curves/ed25519';\nimport { base58 } from '@scure/base';\nimport { ValidationError } from '../../core/errors/error';\n\nconst ALPHABET = /^[1-9A-HJ-NP-Za-km-z]+$/;\n\n/**\n * The longest base58 text of `length` bytes: 44 characters for a key, 88 for a signature.\n * base58 decoding is O(n²), so longer text is refused before it is decoded.\n */\nconst maxChars = (length: number): number => Math.ceil((length * 8) / Math.log2(58));\n\n/** The bytes of a canonical base58 string of `length` bytes, or `null`. */\nexport function decodeBase58(value: unknown, length: number): Uint8Array | null {\n if (typeof value !== 'string' || value.length === 0) return null;\n if (value.length > maxChars(length)) return null;\n if (!ALPHABET.test(value)) return null;\n let bytes: Uint8Array;\n try {\n bytes = base58.decode(value);\n } catch {\n return null;\n }\n // Canonical: exactly `length` bytes, and re-encoding gives the same text back.\n if (bytes.length !== length || base58.encode(bytes) !== value) return null;\n return bytes;\n}\n\nexport const encodeBase58 = (bytes: Uint8Array): string => base58.encode(bytes);\n\n/** A 32-byte account address (on or off the ed25519 curve: PDAs are addresses too). */\nexport const isAddress = (value: unknown): value is string =>\n decodeBase58(value, 32) !== null;\n\n/** A 64-byte transaction signature. */\nexport const isSignature = (value: unknown): value is string =>\n decodeBase58(value, 64) !== null;\n\n/**\n * The address of a wallet's ed25519 public key: exactly 32 bytes that decode to a point on\n * the curve and not of small order. Anything else (a 64-byte secret key, a 32-byte seed\n * that is off the curve, the identity point) is refused with `INVALID_ADDRESS`.\n */\nexport function addressFromPublicKey(publicKey: Uint8Array): string {\n if (!(publicKey instanceof Uint8Array) || publicKey.length !== 32) {\n throw new ValidationError(\n 'INVALID_ADDRESS',\n 'a Solana public key is exactly 32 bytes',\n );\n }\n let point: ReturnType<typeof ed25519.ExtendedPoint.fromHex>;\n try {\n point = ed25519.ExtendedPoint.fromHex(publicKey);\n } catch {\n throw new ValidationError(\n 'INVALID_ADDRESS',\n 'the public key is not a point on the ed25519 curve',\n );\n }\n if (point.isSmallOrder()) {\n throw new ValidationError('INVALID_ADDRESS', 'the public key has small order');\n }\n return base58.encode(publicKey);\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SolanaInstruction } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* `findProgramAddressSync`: the first bump from 255 down whose address is off the curve,
|
|
4
|
+
* so no private key can sign for it. A seed is at most 32 bytes, as the runtime requires.
|
|
5
|
+
*/
|
|
6
|
+
export declare function programAddress(seeds: readonly Uint8Array[], programId: string): string;
|
|
7
|
+
/** The associated token account of `owner` for `mint` (classic Token program). */
|
|
8
|
+
export declare function associatedTokenAddress(owner: string, mint: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* A legacy message by the Solana message rules, as `@solana/web3.js` compiles it: the
|
|
11
|
+
* payer first, then the signers (writable, then read-only) and the non-signers (writable,
|
|
12
|
+
* then read-only), each group in order of first appearance, an instruction's program id
|
|
13
|
+
* before its accounts; an account is a signer or writable when any use makes it one.
|
|
14
|
+
*/
|
|
15
|
+
export declare function compileLegacyMessage(payer: string, recentBlockhash: string, instructions: readonly SolanaInstruction[]): Uint8Array;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.programAddress = programAddress;
|
|
4
|
+
exports.associatedTokenAddress = associatedTokenAddress;
|
|
5
|
+
exports.compileLegacyMessage = compileLegacyMessage;
|
|
6
|
+
/**
|
|
7
|
+
* The two pieces of Solana's wire format the driver builds itself, SDK-free: a legacy
|
|
8
|
+
* message and a program-derived address. Both used to come from `@solana/web3.js`, whose
|
|
9
|
+
* 3.x line dropped the synchronous derivation and rebuilt its classes on Kit; owning them
|
|
10
|
+
* keeps every signed byte independent of the SDK version a user installs. `codec.test.ts`
|
|
11
|
+
* checks both against `@solana/web3.js` 1.99 and frozen vectors.
|
|
12
|
+
*/
|
|
13
|
+
const ed25519_1 = require("@noble/curves/ed25519");
|
|
14
|
+
const sha256_1 = require("@noble/hashes/sha256");
|
|
15
|
+
const base_1 = require("@scure/base");
|
|
16
|
+
const error_1 = require("../../core/errors/error");
|
|
17
|
+
const programs_1 = require("./programs");
|
|
18
|
+
const wire_1 = require("./wire");
|
|
19
|
+
const PDA_MARKER = new TextEncoder().encode('ProgramDerivedAddress');
|
|
20
|
+
/** A 32-byte public key from its base58 text; the inputs are already validated. */
|
|
21
|
+
function key(address) {
|
|
22
|
+
const bytes = base_1.base58.decode(address);
|
|
23
|
+
if (bytes.length !== 32) {
|
|
24
|
+
throw new error_1.ValidationError('INVALID_ADDRESS', 'a Solana key is 32 bytes');
|
|
25
|
+
}
|
|
26
|
+
return bytes;
|
|
27
|
+
}
|
|
28
|
+
/** Whether `bytes` is a point of the ed25519 curve, i.e. could have a private key. */
|
|
29
|
+
function onCurve(bytes) {
|
|
30
|
+
try {
|
|
31
|
+
ed25519_1.ed25519.ExtendedPoint.fromHex(bytes);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* `findProgramAddressSync`: the first bump from 255 down whose address is off the curve,
|
|
40
|
+
* so no private key can sign for it. A seed is at most 32 bytes, as the runtime requires.
|
|
41
|
+
*/
|
|
42
|
+
function programAddress(seeds, programId) {
|
|
43
|
+
const program = key(programId);
|
|
44
|
+
for (let bump = 255; bump >= 0; bump--) {
|
|
45
|
+
const hash = sha256_1.sha256
|
|
46
|
+
.create()
|
|
47
|
+
.update(Uint8Array.from(seeds.flatMap((seed) => [...seed])))
|
|
48
|
+
.update(Uint8Array.of(bump))
|
|
49
|
+
.update(program)
|
|
50
|
+
.update(PDA_MARKER)
|
|
51
|
+
.digest();
|
|
52
|
+
if (!onCurve(hash))
|
|
53
|
+
return base_1.base58.encode(hash);
|
|
54
|
+
}
|
|
55
|
+
// Each bump has a one-in-two chance; all 256 failing does not happen.
|
|
56
|
+
throw new error_1.ValidationError('INVALID_ADDRESS', 'no program address for these seeds');
|
|
57
|
+
}
|
|
58
|
+
/** The associated token account of `owner` for `mint` (classic Token program). */
|
|
59
|
+
function associatedTokenAddress(owner, mint) {
|
|
60
|
+
return programAddress([key(owner), key(programs_1.TOKEN_PROGRAM), key(mint)], programs_1.ASSOCIATED_TOKEN_PROGRAM);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* A legacy message by the Solana message rules, as `@solana/web3.js` compiles it: the
|
|
64
|
+
* payer first, then the signers (writable, then read-only) and the non-signers (writable,
|
|
65
|
+
* then read-only), each group in order of first appearance, an instruction's program id
|
|
66
|
+
* before its accounts; an account is a signer or writable when any use makes it one.
|
|
67
|
+
*/
|
|
68
|
+
function compileLegacyMessage(payer, recentBlockhash, instructions) {
|
|
69
|
+
const meta = new Map();
|
|
70
|
+
const note = (address, signer, writable) => {
|
|
71
|
+
const seen = meta.get(address);
|
|
72
|
+
meta.set(address, {
|
|
73
|
+
signer: (seen?.signer ?? false) || signer,
|
|
74
|
+
writable: (seen?.writable ?? false) || writable,
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
note(payer, true, true);
|
|
78
|
+
for (const ix of instructions) {
|
|
79
|
+
note(ix.programId, false, false);
|
|
80
|
+
for (const account of ix.accounts)
|
|
81
|
+
note(account.address, account.signer, account.writable);
|
|
82
|
+
}
|
|
83
|
+
const entries = [...meta.entries()];
|
|
84
|
+
const group = (signer, writable) => entries
|
|
85
|
+
.filter(([, m]) => m.signer === signer && m.writable === writable)
|
|
86
|
+
.map(([address]) => address);
|
|
87
|
+
const writableSigners = group(true, true);
|
|
88
|
+
const readonlySigners = group(true, false);
|
|
89
|
+
const writableOthers = group(false, true);
|
|
90
|
+
const readonlyOthers = group(false, false);
|
|
91
|
+
const keys = [
|
|
92
|
+
...writableSigners,
|
|
93
|
+
...readonlySigners,
|
|
94
|
+
...writableOthers,
|
|
95
|
+
...readonlyOthers,
|
|
96
|
+
];
|
|
97
|
+
// Indices are single bytes in a legacy message.
|
|
98
|
+
if (keys.length > 256) {
|
|
99
|
+
throw new error_1.ValidationError('INVALID_INTENT', 'too many accounts for one message');
|
|
100
|
+
}
|
|
101
|
+
const index = new Map(keys.map((address, i) => [address, i]));
|
|
102
|
+
const parts = [
|
|
103
|
+
Uint8Array.of(writableSigners.length + readonlySigners.length, readonlySigners.length, readonlyOthers.length),
|
|
104
|
+
(0, wire_1.encodeLength)(keys.length),
|
|
105
|
+
...keys.map(key),
|
|
106
|
+
key(recentBlockhash),
|
|
107
|
+
(0, wire_1.encodeLength)(instructions.length),
|
|
108
|
+
];
|
|
109
|
+
for (const ix of instructions) {
|
|
110
|
+
parts.push(Uint8Array.of(index.get(ix.programId)), (0, wire_1.encodeLength)(ix.accounts.length), Uint8Array.from(ix.accounts.map((a) => index.get(a.address))), (0, wire_1.encodeLength)(ix.data.length), ix.data);
|
|
111
|
+
}
|
|
112
|
+
const out = new Uint8Array(parts.reduce((n, part) => n + part.length, 0));
|
|
113
|
+
let offset = 0;
|
|
114
|
+
for (const part of parts) {
|
|
115
|
+
out.set(part, offset);
|
|
116
|
+
offset += part.length;
|
|
117
|
+
}
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/adapters/solana/message.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The two pieces of Solana's wire format the driver builds itself, SDK-free: a legacy\n * message and a program-derived address. Both used to come from `@solana/web3.js`, whose\n * 3.x line dropped the synchronous derivation and rebuilt its classes on Kit; owning them\n * keeps every signed byte independent of the SDK version a user installs. `codec.test.ts`\n * checks both against `@solana/web3.js` 1.99 and frozen vectors.\n */\nimport { ed25519 } from '@noble/curves/ed25519';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { base58 } from '@scure/base';\nimport { ValidationError } from '../../core/errors/error';\nimport { ASSOCIATED_TOKEN_PROGRAM, TOKEN_PROGRAM } from './programs';\nimport type { SolanaInstruction } from './types';\nimport { encodeLength } from './wire';\n\nconst PDA_MARKER = new TextEncoder().encode('ProgramDerivedAddress');\n\n/** A 32-byte public key from its base58 text; the inputs are already validated. */\nfunction key(address: string): Uint8Array {\n const bytes = base58.decode(address);\n if (bytes.length !== 32) {\n throw new ValidationError('INVALID_ADDRESS', 'a Solana key is 32 bytes');\n }\n return bytes;\n}\n\n/** Whether `bytes` is a point of the ed25519 curve, i.e. could have a private key. */\nfunction onCurve(bytes: Uint8Array): boolean {\n try {\n ed25519.ExtendedPoint.fromHex(bytes);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * `findProgramAddressSync`: the first bump from 255 down whose address is off the curve,\n * so no private key can sign for it. A seed is at most 32 bytes, as the runtime requires.\n */\nexport function programAddress(seeds: readonly Uint8Array[], programId: string): string {\n const program = key(programId);\n for (let bump = 255; bump >= 0; bump--) {\n const hash = sha256\n .create()\n .update(Uint8Array.from(seeds.flatMap((seed) => [...seed])))\n .update(Uint8Array.of(bump))\n .update(program)\n .update(PDA_MARKER)\n .digest();\n if (!onCurve(hash)) return base58.encode(hash);\n }\n // Each bump has a one-in-two chance; all 256 failing does not happen.\n throw new ValidationError('INVALID_ADDRESS', 'no program address for these seeds');\n}\n\n/** The associated token account of `owner` for `mint` (classic Token program). */\nexport function associatedTokenAddress(owner: string, mint: string): string {\n return programAddress(\n [key(owner), key(TOKEN_PROGRAM), key(mint)],\n ASSOCIATED_TOKEN_PROGRAM,\n );\n}\n\n/**\n * A legacy message by the Solana message rules, as `@solana/web3.js` compiles it: the\n * payer first, then the signers (writable, then read-only) and the non-signers (writable,\n * then read-only), each group in order of first appearance, an instruction's program id\n * before its accounts; an account is a signer or writable when any use makes it one.\n */\nexport function compileLegacyMessage(\n payer: string,\n recentBlockhash: string,\n instructions: readonly SolanaInstruction[],\n): Uint8Array {\n const meta = new Map<string, { signer: boolean; writable: boolean }>();\n const note = (address: string, signer: boolean, writable: boolean) => {\n const seen = meta.get(address);\n meta.set(address, {\n signer: (seen?.signer ?? false) || signer,\n writable: (seen?.writable ?? false) || writable,\n });\n };\n note(payer, true, true);\n for (const ix of instructions) {\n note(ix.programId, false, false);\n for (const account of ix.accounts)\n note(account.address, account.signer, account.writable);\n }\n const entries = [...meta.entries()];\n const group = (signer: boolean, writable: boolean) =>\n entries\n .filter(([, m]) => m.signer === signer && m.writable === writable)\n .map(([address]) => address);\n const writableSigners = group(true, true);\n const readonlySigners = group(true, false);\n const writableOthers = group(false, true);\n const readonlyOthers = group(false, false);\n const keys = [\n ...writableSigners,\n ...readonlySigners,\n ...writableOthers,\n ...readonlyOthers,\n ];\n // Indices are single bytes in a legacy message.\n if (keys.length > 256) {\n throw new ValidationError('INVALID_INTENT', 'too many accounts for one message');\n }\n const index = new Map(keys.map((address, i) => [address, i]));\n const parts: Uint8Array[] = [\n Uint8Array.of(\n writableSigners.length + readonlySigners.length,\n readonlySigners.length,\n readonlyOthers.length,\n ),\n encodeLength(keys.length),\n ...keys.map(key),\n key(recentBlockhash),\n encodeLength(instructions.length),\n ];\n for (const ix of instructions) {\n parts.push(\n Uint8Array.of(index.get(ix.programId) as number),\n encodeLength(ix.accounts.length),\n Uint8Array.from(ix.accounts.map((a) => index.get(a.address) as number)),\n encodeLength(ix.data.length),\n ix.data,\n );\n }\n const out = new Uint8Array(parts.reduce((n, part) => n + part.length, 0));\n let offset = 0;\n for (const part of parts) {\n out.set(part, offset);\n offset += part.length;\n }\n return out;\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Capability } from '../../core/model/capability';
|
|
2
|
+
import type { ChainInfo, NetworkInfo } from '../../core/model/chain';
|
|
3
|
+
/** Every capability a Solana network has; a network may remove some. */
|
|
4
|
+
export declare const SOLANA_CAPABILITIES: readonly Capability[];
|
|
5
|
+
/**
|
|
6
|
+
* The highest compute-unit price a transfer signs unless the handle's `maxComputeUnitPrice`
|
|
7
|
+
* option allows more: 10,000,000 micro-lamports per compute unit. A speed's
|
|
8
|
+
* price comes from one endpoint's `getRecentPrioritizationFees` and its limit from one
|
|
9
|
+
* endpoint's simulation (up to 1,400,000 units), so this operator bound is the only one no
|
|
10
|
+
* node can raise. At the largest limit it caps a transfer's priority fee at 14,000,000
|
|
11
|
+
* lamports (0.014 SOL).
|
|
12
|
+
*/
|
|
13
|
+
export declare const DEFAULT_MAX_COMPUTE_UNIT_PRICE = 10000000n;
|
|
14
|
+
export interface SolanaNetworkConfig {
|
|
15
|
+
/** The genesis hash every endpoint must report (`getGenesisHash`). */
|
|
16
|
+
readonly genesisHash: string;
|
|
17
|
+
readonly capabilities: ReadonlySet<Capability>;
|
|
18
|
+
/**
|
|
19
|
+
* The largest compute-unit price a transfer signs, in micro-lamports per compute unit:
|
|
20
|
+
* from 999 (the largest build variant, which a speed keeps at the bound) to 2^64 − 1.
|
|
21
|
+
*/
|
|
22
|
+
readonly maxComputeUnitPrice: bigint;
|
|
23
|
+
}
|
|
24
|
+
export declare function solanaNetworkConfig(chain: ChainInfo, network: NetworkInfo, options?: Readonly<Record<string, unknown>>): SolanaNetworkConfig;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_MAX_COMPUTE_UNIT_PRICE = exports.SOLANA_CAPABILITIES = void 0;
|
|
4
|
+
exports.solanaNetworkConfig = solanaNetworkConfig;
|
|
5
|
+
/**
|
|
6
|
+
* What the Solana driver needs from a network's registry entry and the handle's options,
|
|
7
|
+
* validated once when a driver is created, so inconsistent data or an unknown option fails
|
|
8
|
+
* with `CONFIG_INVALID` instead of misbehaving.
|
|
9
|
+
*/
|
|
10
|
+
const error_1 = require("../../core/errors/error");
|
|
11
|
+
const names_1 = require("../../core/util/names");
|
|
12
|
+
const fees_1 = require("./fees");
|
|
13
|
+
const keys_1 = require("./keys");
|
|
14
|
+
/** Every capability a Solana network has; a network may remove some. */
|
|
15
|
+
exports.SOLANA_CAPABILITIES = Object.freeze([
|
|
16
|
+
'tokens',
|
|
17
|
+
'memo',
|
|
18
|
+
'block-scan',
|
|
19
|
+
'address-history',
|
|
20
|
+
'expiry',
|
|
21
|
+
]);
|
|
22
|
+
/**
|
|
23
|
+
* The highest compute-unit price a transfer signs unless the handle's `maxComputeUnitPrice`
|
|
24
|
+
* option allows more: 10,000,000 micro-lamports per compute unit. A speed's
|
|
25
|
+
* price comes from one endpoint's `getRecentPrioritizationFees` and its limit from one
|
|
26
|
+
* endpoint's simulation (up to 1,400,000 units), so this operator bound is the only one no
|
|
27
|
+
* node can raise. At the largest limit it caps a transfer's priority fee at 14,000,000
|
|
28
|
+
* lamports (0.014 SOL).
|
|
29
|
+
*/
|
|
30
|
+
exports.DEFAULT_MAX_COMPUTE_UNIT_PRICE = 10000000n;
|
|
31
|
+
const U64_MAX = 2n ** 64n - 1n;
|
|
32
|
+
/**
|
|
33
|
+
* The only driver option (`HandleOptions.options`) the Solana driver reads. Any other key is
|
|
34
|
+
* refused, so a typo, or another family's option such as Tron's `maxFeeLimit`, fails loudly
|
|
35
|
+
* instead of leaving the default in place.
|
|
36
|
+
*/
|
|
37
|
+
const OPTION_KEYS = Object.freeze(['maxComputeUnitPrice']);
|
|
38
|
+
/** A price bound: a bigint of micro-lamports per compute unit that leaves room for a variant. */
|
|
39
|
+
function priceBound(value, name, fail) {
|
|
40
|
+
if (typeof value !== 'bigint' || value < fees_1.MAX_PRICE_VARIANT || value > U64_MAX) {
|
|
41
|
+
fail(`${name} must be a bigint of micro-lamports per compute unit from 999 to 2^64 − 1`);
|
|
42
|
+
}
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
function solanaNetworkConfig(chain, network, options = {}) {
|
|
46
|
+
const fail = (reason) => {
|
|
47
|
+
throw new error_1.ConfigError('CONFIG_INVALID', `Solana network ${chain.id}:${network.id}: ${reason}`);
|
|
48
|
+
};
|
|
49
|
+
if (chain.model !== 'account' || chain.ordering !== 'expiry') {
|
|
50
|
+
fail('the chain must use the account model and expiry ordering');
|
|
51
|
+
}
|
|
52
|
+
if (chain.schemes.length !== 1 || chain.schemes[0] !== 'ed25519') {
|
|
53
|
+
fail(`its only scheme must be 'ed25519'`);
|
|
54
|
+
}
|
|
55
|
+
if (chain.nativeAsset.decimals !== 9)
|
|
56
|
+
fail('the native asset has 9 decimals (lamports)');
|
|
57
|
+
if ((0, keys_1.decodeBase58)(network.identity, 32) === null) {
|
|
58
|
+
fail('its identity must be the base58 genesis hash');
|
|
59
|
+
}
|
|
60
|
+
if (network.feeModel !== 'solana')
|
|
61
|
+
fail(`its fee model must be 'solana'`);
|
|
62
|
+
const { finality } = network;
|
|
63
|
+
if (finality.kind !== 'commitment' || finality.level !== 'finalized') {
|
|
64
|
+
fail(`its finality must be the 'finalized' commitment`);
|
|
65
|
+
}
|
|
66
|
+
if (network.replacement !== undefined)
|
|
67
|
+
fail('Solana has no replace or cancel');
|
|
68
|
+
const capabilities = new Set(exports.SOLANA_CAPABILITIES);
|
|
69
|
+
for (const c of network.capabilities?.add ?? [])
|
|
70
|
+
capabilities.add(c);
|
|
71
|
+
for (const c of network.capabilities?.remove ?? [])
|
|
72
|
+
capabilities.delete(c);
|
|
73
|
+
for (const c of ['replace-fee', 'cancel', 'batch-transfer']) {
|
|
74
|
+
if (capabilities.has(c))
|
|
75
|
+
fail(`the Solana driver cannot offer '${c}'`);
|
|
76
|
+
}
|
|
77
|
+
if (!capabilities.has('expiry'))
|
|
78
|
+
fail(`'expiry' is how Solana orders transactions`);
|
|
79
|
+
// The refusal lists the accepted name and shows neither the caller's key, which
|
|
80
|
+
// may be a pasted secret, nor its value.
|
|
81
|
+
for (const key of Object.keys(options)) {
|
|
82
|
+
if (!OPTION_KEYS.includes(key)) {
|
|
83
|
+
fail((0, names_1.unknownName)('option', OPTION_KEYS));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// The handle's option, else the network entry's own, else the default. A network value
|
|
87
|
+
// is checked even where an option overrides it.
|
|
88
|
+
const own = network.params?.maxComputeUnitPrice;
|
|
89
|
+
const networkBound = own === undefined ? undefined : priceBound(own, 'params.maxComputeUnitPrice', fail);
|
|
90
|
+
const maxComputeUnitPrice = options.maxComputeUnitPrice !== undefined
|
|
91
|
+
? priceBound(options.maxComputeUnitPrice, 'maxComputeUnitPrice', fail)
|
|
92
|
+
: (networkBound ?? exports.DEFAULT_MAX_COMPUTE_UNIT_PRICE);
|
|
93
|
+
return { genesisHash: network.identity, capabilities, maxComputeUnitPrice };
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/adapters/solana/network.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * What the Solana driver needs from a network's registry entry and the handle's options,\n * validated once when a driver is created, so inconsistent data or an unknown option fails\n * with `CONFIG_INVALID` instead of misbehaving.\n */\nimport { ConfigError } from '../../core/errors/error';\nimport type { Capability } from '../../core/model/capability';\nimport type { ChainInfo, NetworkInfo } from '../../core/model/chain';\nimport { unknownName } from '../../core/util/names';\nimport { MAX_PRICE_VARIANT } from './fees';\nimport { decodeBase58 } from './keys';\n\n/** Every capability a Solana network has; a network may remove some. */\nexport const SOLANA_CAPABILITIES: readonly Capability[] = Object.freeze([\n 'tokens',\n 'memo',\n 'block-scan',\n 'address-history',\n 'expiry',\n]);\n\n/**\n * The highest compute-unit price a transfer signs unless the handle's `maxComputeUnitPrice`\n * option allows more: 10,000,000 micro-lamports per compute unit. A speed's\n * price comes from one endpoint's `getRecentPrioritizationFees` and its limit from one\n * endpoint's simulation (up to 1,400,000 units), so this operator bound is the only one no\n * node can raise. At the largest limit it caps a transfer's priority fee at 14,000,000\n * lamports (0.014 SOL).\n */\nexport const DEFAULT_MAX_COMPUTE_UNIT_PRICE = 10_000_000n;\nconst U64_MAX = 2n ** 64n - 1n;\n\nexport interface SolanaNetworkConfig {\n /** The genesis hash every endpoint must report (`getGenesisHash`). */\n readonly genesisHash: string;\n readonly capabilities: ReadonlySet<Capability>;\n /**\n * The largest compute-unit price a transfer signs, in micro-lamports per compute unit:\n * from 999 (the largest build variant, which a speed keeps at the bound) to 2^64 − 1.\n */\n readonly maxComputeUnitPrice: bigint;\n}\n\n/**\n * The only driver option (`HandleOptions.options`) the Solana driver reads. Any other key is\n * refused, so a typo, or another family's option such as Tron's `maxFeeLimit`, fails loudly\n * instead of leaving the default in place.\n */\nconst OPTION_KEYS: readonly string[] = Object.freeze(['maxComputeUnitPrice']);\n\n/** A price bound: a bigint of micro-lamports per compute unit that leaves room for a variant. */\nfunction priceBound(\n value: unknown,\n name: string,\n fail: (reason: string) => never,\n): bigint {\n if (typeof value !== 'bigint' || value < MAX_PRICE_VARIANT || value > U64_MAX) {\n fail(\n `${name} must be a bigint of micro-lamports per compute unit from 999 to 2^64 − 1`,\n );\n }\n return value as bigint;\n}\n\nexport function solanaNetworkConfig(\n chain: ChainInfo,\n network: NetworkInfo,\n options: Readonly<Record<string, unknown>> = {},\n): SolanaNetworkConfig {\n const fail = (reason: string): never => {\n throw new ConfigError(\n 'CONFIG_INVALID',\n `Solana network ${chain.id}:${network.id}: ${reason}`,\n );\n };\n if (chain.model !== 'account' || chain.ordering !== 'expiry') {\n fail('the chain must use the account model and expiry ordering');\n }\n if (chain.schemes.length !== 1 || chain.schemes[0] !== 'ed25519') {\n fail(`its only scheme must be 'ed25519'`);\n }\n if (chain.nativeAsset.decimals !== 9)\n fail('the native asset has 9 decimals (lamports)');\n if (decodeBase58(network.identity, 32) === null) {\n fail('its identity must be the base58 genesis hash');\n }\n if (network.feeModel !== 'solana') fail(`its fee model must be 'solana'`);\n const { finality } = network;\n if (finality.kind !== 'commitment' || finality.level !== 'finalized') {\n fail(`its finality must be the 'finalized' commitment`);\n }\n if (network.replacement !== undefined) fail('Solana has no replace or cancel');\n const capabilities = new Set<Capability>(SOLANA_CAPABILITIES);\n for (const c of network.capabilities?.add ?? []) capabilities.add(c);\n for (const c of network.capabilities?.remove ?? []) capabilities.delete(c);\n for (const c of ['replace-fee', 'cancel', 'batch-transfer'] as const) {\n if (capabilities.has(c)) fail(`the Solana driver cannot offer '${c}'`);\n }\n if (!capabilities.has('expiry')) fail(`'expiry' is how Solana orders transactions`);\n // The refusal lists the accepted name and shows neither the caller's key, which\n // may be a pasted secret, nor its value.\n for (const key of Object.keys(options)) {\n if (!OPTION_KEYS.includes(key)) {\n fail(unknownName('option', OPTION_KEYS));\n }\n }\n // The handle's option, else the network entry's own, else the default. A network value\n // is checked even where an option overrides it.\n const own = network.params?.maxComputeUnitPrice;\n const networkBound =\n own === undefined ? undefined : priceBound(own, 'params.maxComputeUnitPrice', fail);\n const maxComputeUnitPrice =\n options.maxComputeUnitPrice !== undefined\n ? priceBound(options.maxComputeUnitPrice, 'maxComputeUnitPrice', fail)\n : (networkBound ?? DEFAULT_MAX_COMPUTE_UNIT_PRICE);\n return { genesisHash: network.identity as string, capabilities, maxComputeUnitPrice };\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Solana family plugin: the chain, tokens and provider presets as data, plus
|
|
3
|
+
* one adapter manifest. SDK-free: only the manifest's `load()` requires the `@solana/web3.js`
|
|
4
|
+
* module, and with it the SDK.
|
|
5
|
+
*/
|
|
6
|
+
import type { AdapterManifest, PeerDependency } from '../../core/driver/types';
|
|
7
|
+
import type { Plugin } from '../../core/registry/plugin';
|
|
8
|
+
/** The SDK versions this adapter is validated against, keyed by library. */
|
|
9
|
+
export declare const SOLANA_PEER_DEPENDENCIES: Readonly<Record<'@solana/web3.js', PeerDependency>>;
|
|
10
|
+
/**
|
|
11
|
+
* The `@solana/web3.js` manifest, built once, at module level, like the presets. Plugins
|
|
12
|
+
* compare functions by identity, so every `solanaPlugin()` carries the same `load`
|
|
13
|
+
* function and registering it again is the same plugin, not a conflicting one
|
|
14
|
+
* (`CONFIG_INVALID`).
|
|
15
|
+
*/
|
|
16
|
+
export declare const solanaManifest: AdapterManifest;
|
|
17
|
+
/** The built-in Solana family: mainnet, devnet and testnet. */
|
|
18
|
+
export declare function solanaPlugin(): Plugin;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.solanaManifest = exports.SOLANA_PEER_DEPENDENCIES = void 0;
|
|
4
|
+
exports.solanaPlugin = solanaPlugin;
|
|
5
|
+
const chains_1 = require("./chains");
|
|
6
|
+
const network_1 = require("./network");
|
|
7
|
+
const presets_1 = require("./presets");
|
|
8
|
+
const tokens_1 = require("./tokens");
|
|
9
|
+
/** The SDK versions this adapter is validated against, keyed by library. */
|
|
10
|
+
exports.SOLANA_PEER_DEPENDENCIES = Object.freeze({
|
|
11
|
+
'@solana/web3.js': Object.freeze({
|
|
12
|
+
name: '@solana/web3.js',
|
|
13
|
+
range: '^1.99.0 || ^3.0.0',
|
|
14
|
+
}),
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* The `@solana/web3.js` manifest, built once, at module level, like the presets. Plugins
|
|
18
|
+
* compare functions by identity, so every `solanaPlugin()` carries the same `load`
|
|
19
|
+
* function and registering it again is the same plugin, not a conflicting one
|
|
20
|
+
* (`CONFIG_INVALID`).
|
|
21
|
+
*/
|
|
22
|
+
exports.solanaManifest = Object.freeze({
|
|
23
|
+
family: 'solana',
|
|
24
|
+
library: '@solana/web3.js',
|
|
25
|
+
chains: Object.freeze(['solana']),
|
|
26
|
+
capabilities: network_1.SOLANA_CAPABILITIES,
|
|
27
|
+
peerDependencies: Object.freeze([exports.SOLANA_PEER_DEPENDENCIES['@solana/web3.js']]),
|
|
28
|
+
load: async () => {
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
30
|
+
const mod = require('./web3');
|
|
31
|
+
return mod.web3DriverFactory;
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
/** The built-in Solana family: mainnet, devnet and testnet. */
|
|
35
|
+
function solanaPlugin() {
|
|
36
|
+
return {
|
|
37
|
+
name: 'solana',
|
|
38
|
+
chains: [chains_1.SOLANA_CHAIN],
|
|
39
|
+
adapters: [exports.solanaManifest],
|
|
40
|
+
presets: presets_1.SOLANA_PRESETS,
|
|
41
|
+
assets: tokens_1.SOLANA_TOKENS,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/adapters/solana/plugin.ts"],"names":[],"mappings":";;;AA8CA,oCAQC;AA3CD,qCAAwC;AACxC,uCAAgD;AAChD,uCAA2C;AAC3C,qCAAyC;AAEzC,4EAA4E;AAC/D,QAAA,wBAAwB,GAEjC,MAAM,CAAC,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC;QAC/B,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,mBAAmB;KAC3B,CAAC;CACH,CAAC,CAAC;AAEH;;;;;GAKG;AACU,QAAA,cAAc,GAAoB,MAAM,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,iBAAiB;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;IACjC,YAAY,EAAE,6BAAmB;IACjC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,gCAAwB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC9E,IAAI,EAAE,KAAK,IAA4B,EAAE;QACvC,iEAAiE;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAA4B,CAAC;QACzD,OAAO,GAAG,CAAC,iBAAiB,CAAC;IAC/B,CAAC;CACF,CAAC,CAAC;AAEH,+DAA+D;AAC/D,SAAgB,YAAY;IAC1B,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,CAAC,qBAAY,CAAC;QACtB,QAAQ,EAAE,CAAC,sBAAc,CAAC;QAC1B,OAAO,EAAE,wBAAc;QACvB,MAAM,EAAE,sBAAa;KACtB,CAAC;AACJ,CAAC","sourcesContent":["/**\n * The Solana family plugin: the chain, tokens and provider presets as data, plus\n * one adapter manifest. SDK-free: only the manifest's `load()` requires the `@solana/web3.js`\n * module, and with it the SDK.\n */\nimport type {\n AdapterManifest,\n DriverFactory,\n PeerDependency,\n} from '../../core/driver/types';\nimport type { Plugin } from '../../core/registry/plugin';\nimport { SOLANA_CHAIN } from './chains';\nimport { SOLANA_CAPABILITIES } from './network';\nimport { SOLANA_PRESETS } from './presets';\nimport { SOLANA_TOKENS } from './tokens';\n\n/** The SDK versions this adapter is validated against, keyed by library. */\nexport const SOLANA_PEER_DEPENDENCIES: Readonly<\n Record<'@solana/web3.js', PeerDependency>\n> = Object.freeze({\n '@solana/web3.js': Object.freeze({\n name: '@solana/web3.js',\n range: '^1.99.0 || ^3.0.0',\n }),\n});\n\n/**\n * The `@solana/web3.js` manifest, built once, at module level, like the presets. Plugins\n * compare functions by identity, so every `solanaPlugin()` carries the same `load`\n * function and registering it again is the same plugin, not a conflicting one\n * (`CONFIG_INVALID`).\n */\nexport const solanaManifest: AdapterManifest = Object.freeze({\n family: 'solana',\n library: '@solana/web3.js',\n chains: Object.freeze(['solana']),\n capabilities: SOLANA_CAPABILITIES,\n peerDependencies: Object.freeze([SOLANA_PEER_DEPENDENCIES['@solana/web3.js']]),\n load: async (): Promise<DriverFactory> => {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const mod = require('./web3') as typeof import('./web3');\n return mod.web3DriverFactory;\n },\n});\n\n/** The built-in Solana family: mainnet, devnet and testnet. */\nexport function solanaPlugin(): Plugin {\n return {\n name: 'solana',\n chains: [SOLANA_CHAIN],\n adapters: [solanaManifest],\n presets: SOLANA_PRESETS,\n assets: SOLANA_TOKENS,\n };\n}\n"]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SOLANA_PRESETS = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Solana provider presets. Only URL templates verified against the provider's own
|
|
6
|
+
* documentation are listed; a preset refuses every other cluster with `CONFIG_INVALID`.
|
|
7
|
+
* Keyed URLs are `Secret`s, so the key never reaches logs or errors.
|
|
8
|
+
*/
|
|
9
|
+
const error_1 = require("../../core/errors/error");
|
|
10
|
+
const secret_1 = require("../../core/secret/secret");
|
|
11
|
+
const freeze_1 = require("../../core/util/freeze");
|
|
12
|
+
/** The rate-limited public endpoints the Solana documentation lists (not for production). */
|
|
13
|
+
const PUBLIC = {
|
|
14
|
+
mainnet: 'https://api.mainnet.solana.com',
|
|
15
|
+
devnet: 'https://api.devnet.solana.com',
|
|
16
|
+
testnet: 'https://api.testnet.solana.com',
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* The public RPC's published per-IP limits: 100 requests per 10 s, 40 per 10 s for a
|
|
20
|
+
* single method, 40 concurrent connections, so 4 rps. The transport's bucket is per
|
|
21
|
+
* endpoint, not per method, and the published per-method figure does not hold for
|
|
22
|
+
* `getBlock`: devnet and testnet answered HTTP 429 (`Retry-After: 10`) after about 6
|
|
23
|
+
* `getBlock` calls per 10 s in September 2026. This rate does not keep a block scan or a
|
|
24
|
+
* window proof under that; a scan waits out each 429 and falls behind, and a window proof
|
|
25
|
+
* completes over many passes. The preset still keeps the published rate: a keyless preset
|
|
26
|
+
* sets only a rate its operator publishes, since a guessed one throttles for nothing or
|
|
27
|
+
* protects nothing.
|
|
28
|
+
*/
|
|
29
|
+
const PUBLIC_RPS = 4;
|
|
30
|
+
/** `https://<host>.g.alchemy.com/v2/<key>`. */
|
|
31
|
+
const ALCHEMY = { mainnet: 'solana-mainnet', devnet: 'solana-devnet' };
|
|
32
|
+
/** `https://<host>.infura.io/v3/<key>`. */
|
|
33
|
+
const INFURA = { mainnet: 'solana-mainnet', devnet: 'solana-devnet' };
|
|
34
|
+
/** `https://rpc.ankr.com/<path>/<key>`. */
|
|
35
|
+
const ANKR = { mainnet: 'solana', devnet: 'solana_devnet' };
|
|
36
|
+
const supports = (table) => (chain, network) => chain === 'solana' && Object.hasOwn(table, network);
|
|
37
|
+
function entry(table, input) {
|
|
38
|
+
const value = Object.hasOwn(table, input.network) ? table[input.network] : undefined;
|
|
39
|
+
// Unreachable through the catalog, which asks `supports` first.
|
|
40
|
+
if (value === undefined)
|
|
41
|
+
throw new Error(`no entry for ${input.chain}:${input.network}`);
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
/** The revealed key; the error names the preset and network, never the key. */
|
|
45
|
+
function apiKeyOf(name, input) {
|
|
46
|
+
const key = input.apiKey === undefined ? undefined : (0, secret_1.reveal)(input.apiKey);
|
|
47
|
+
if (typeof key !== 'string' || key.trim() === '') {
|
|
48
|
+
throw new error_1.ConfigError('CONFIG_INVALID', `provider preset '${name}' requires a non-empty apiKey for ${input.chain}:${input.network}`);
|
|
49
|
+
}
|
|
50
|
+
return key;
|
|
51
|
+
}
|
|
52
|
+
function keyed(name, table, url) {
|
|
53
|
+
return {
|
|
54
|
+
name,
|
|
55
|
+
kind: 'rpc',
|
|
56
|
+
requiresApiKey: true,
|
|
57
|
+
supports: supports(table),
|
|
58
|
+
endpoints: (input) => [
|
|
59
|
+
{ name, url: (0, secret_1.secret)(url(entry(table, input), apiKeyOf(name, input))) },
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
exports.SOLANA_PRESETS = (0, freeze_1.deepFreeze)([
|
|
64
|
+
{
|
|
65
|
+
name: 'public',
|
|
66
|
+
kind: 'rpc',
|
|
67
|
+
production: false,
|
|
68
|
+
supports: supports(PUBLIC),
|
|
69
|
+
endpoints: (input) => [
|
|
70
|
+
{ name: 'public', url: entry(PUBLIC, input), rateLimit: { rps: PUBLIC_RPS } },
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
keyed('alchemy', ALCHEMY, (host, key) => `https://${host}.g.alchemy.com/v2/${key}`),
|
|
74
|
+
keyed('infura', INFURA, (host, key) => `https://${host}.infura.io/v3/${key}`),
|
|
75
|
+
keyed('ankr', ANKR, (path, key) => `https://rpc.ankr.com/${path}/${key}`),
|
|
76
|
+
]);
|
|
77
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../src/adapters/solana/presets.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Solana provider presets. Only URL templates verified against the provider's own\n * documentation are listed; a preset refuses every other cluster with `CONFIG_INVALID`.\n * Keyed URLs are `Secret`s, so the key never reaches logs or errors.\n */\nimport { ConfigError } from '../../core/errors/error';\nimport type { PresetInput, ProviderPreset } from '../../core/registry/providers';\nimport { reveal, secret } from '../../core/secret/secret';\nimport type { EndpointConfig } from '../../core/transport/types';\nimport { deepFreeze } from '../../core/util/freeze';\n\ntype Table = Readonly<Record<string, string>>;\n\n/** The rate-limited public endpoints the Solana documentation lists (not for production). */\nconst PUBLIC: Table = {\n mainnet: 'https://api.mainnet.solana.com',\n devnet: 'https://api.devnet.solana.com',\n testnet: 'https://api.testnet.solana.com',\n};\n\n/**\n * The public RPC's published per-IP limits: 100 requests per 10 s, 40 per 10 s for a\n * single method, 40 concurrent connections, so 4 rps. The transport's bucket is per\n * endpoint, not per method, and the published per-method figure does not hold for\n * `getBlock`: devnet and testnet answered HTTP 429 (`Retry-After: 10`) after about 6\n * `getBlock` calls per 10 s in September 2026. This rate does not keep a block scan or a\n * window proof under that; a scan waits out each 429 and falls behind, and a window proof\n * completes over many passes. The preset still keeps the published rate: a keyless preset\n * sets only a rate its operator publishes, since a guessed one throttles for nothing or\n * protects nothing.\n */\nconst PUBLIC_RPS = 4;\n\n/** `https://<host>.g.alchemy.com/v2/<key>`. */\nconst ALCHEMY: Table = { mainnet: 'solana-mainnet', devnet: 'solana-devnet' };\n\n/** `https://<host>.infura.io/v3/<key>`. */\nconst INFURA: Table = { mainnet: 'solana-mainnet', devnet: 'solana-devnet' };\n\n/** `https://rpc.ankr.com/<path>/<key>`. */\nconst ANKR: Table = { mainnet: 'solana', devnet: 'solana_devnet' };\n\nconst supports =\n (table: Table) =>\n (chain: string, network: string): boolean =>\n chain === 'solana' && Object.hasOwn(table, network);\n\nfunction entry(table: Table, input: PresetInput): string {\n const value = Object.hasOwn(table, input.network) ? table[input.network] : undefined;\n // Unreachable through the catalog, which asks `supports` first.\n if (value === undefined)\n throw new Error(`no entry for ${input.chain}:${input.network}`);\n return value;\n}\n\n/** The revealed key; the error names the preset and network, never the key. */\nfunction apiKeyOf(name: string, input: PresetInput): string {\n const key: unknown = input.apiKey === undefined ? undefined : reveal(input.apiKey);\n if (typeof key !== 'string' || key.trim() === '') {\n throw new ConfigError(\n 'CONFIG_INVALID',\n `provider preset '${name}' requires a non-empty apiKey for ${input.chain}:${input.network}`,\n );\n }\n return key;\n}\n\nfunction keyed(\n name: string,\n table: Table,\n url: (value: string, key: string) => string,\n): ProviderPreset {\n return {\n name,\n kind: 'rpc',\n requiresApiKey: true,\n supports: supports(table),\n endpoints: (input): readonly EndpointConfig[] => [\n { name, url: secret(url(entry(table, input), apiKeyOf(name, input))) },\n ],\n };\n}\n\nexport const SOLANA_PRESETS: readonly ProviderPreset[] = deepFreeze([\n {\n name: 'public',\n kind: 'rpc',\n production: false,\n supports: supports(PUBLIC),\n endpoints: (input: PresetInput) => [\n { name: 'public', url: entry(PUBLIC, input), rateLimit: { rps: PUBLIC_RPS } },\n ],\n },\n keyed('alchemy', ALCHEMY, (host, key) => `https://${host}.g.alchemy.com/v2/${key}`),\n keyed('infura', INFURA, (host, key) => `https://${host}.infura.io/v3/${key}`),\n keyed('ankr', ANKR, (path, key) => `https://rpc.ankr.com/${path}/${key}`),\n]);\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { SolanaInstruction } from './types';
|
|
2
|
+
export declare const SYSTEM_PROGRAM = "11111111111111111111111111111111";
|
|
3
|
+
export declare const TOKEN_PROGRAM = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
|
|
4
|
+
export declare const TOKEN_2022_PROGRAM = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb";
|
|
5
|
+
export declare const ASSOCIATED_TOKEN_PROGRAM = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
|
|
6
|
+
export declare const MEMO_PROGRAM = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr";
|
|
7
|
+
/** The first Memo program; still parsed on received transactions. */
|
|
8
|
+
export declare const MEMO_V1_PROGRAM = "Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo";
|
|
9
|
+
export declare const COMPUTE_BUDGET_PROGRAM = "ComputeBudget111111111111111111111111111111";
|
|
10
|
+
export declare const VOTE_PROGRAM = "Vote111111111111111111111111111111111111111";
|
|
11
|
+
/** Classic Token program account sizes (bytes). */
|
|
12
|
+
export declare const MINT_SIZE = 82;
|
|
13
|
+
export declare const TOKEN_ACCOUNT_SIZE = 165;
|
|
14
|
+
/** A transaction's maximum serialized size (the network packet limit). */
|
|
15
|
+
export declare const MAX_TRANSACTION_SIZE = 1232;
|
|
16
|
+
/** The compute-unit limit of one transaction, and the default per instruction. */
|
|
17
|
+
export declare const MAX_COMPUTE_UNIT_LIMIT = 1400000n;
|
|
18
|
+
export declare const DEFAULT_INSTRUCTION_COMPUTE_UNITS = 200000n;
|
|
19
|
+
/** Memo text limit (UTF-8 bytes): a library policy that keeps every transfer well under
|
|
20
|
+
* the packet limit. */
|
|
21
|
+
export declare const MAX_MEMO_BYTES = 256;
|
|
22
|
+
/** ComputeBudget `SetComputeUnitLimit` (2, u32). */
|
|
23
|
+
export declare function setComputeUnitLimit(units: bigint): SolanaInstruction;
|
|
24
|
+
/** ComputeBudget `SetComputeUnitPrice` (3, u64 micro-lamports). */
|
|
25
|
+
export declare function setComputeUnitPrice(microLamports: bigint): SolanaInstruction;
|
|
26
|
+
/** System `Transfer` (2, u64 lamports). */
|
|
27
|
+
export declare function systemTransfer(from: string, to: string, lamports: bigint): SolanaInstruction;
|
|
28
|
+
/** Associated Token Account `CreateIdempotent` (1). */
|
|
29
|
+
export declare function createAssociatedTokenAccountIdempotent(payer: string, associated: string, owner: string, mint: string): SolanaInstruction;
|
|
30
|
+
/** Token `TransferChecked` (12, u64 amount, u8 decimals). */
|
|
31
|
+
export declare function transferChecked(source: string, mint: string, destination: string, authority: string, amount: bigint, decimals: number): SolanaInstruction;
|
|
32
|
+
/** Memo v2: the UTF-8 text, no accounts. */
|
|
33
|
+
export declare function memo(text: string): SolanaInstruction;
|
|
34
|
+
/** A classic Token mint (82 bytes): its decimals, when initialized. */
|
|
35
|
+
export declare function decodeMint(data: Uint8Array): {
|
|
36
|
+
readonly decimals: number;
|
|
37
|
+
} | null;
|
|
38
|
+
/** A classic Token account (165 bytes): mint, owner, amount and state. */
|
|
39
|
+
export declare function decodeTokenAccount(data: Uint8Array): {
|
|
40
|
+
readonly mint: Uint8Array;
|
|
41
|
+
readonly owner: Uint8Array;
|
|
42
|
+
readonly amount: bigint;
|
|
43
|
+
readonly frozen: boolean;
|
|
44
|
+
} | null;
|