@getomnichain/omnichain 0.5.0 → 0.6.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 +134 -0
- package/README.md +5 -3
- package/dist/cjs/address.factory.js +7 -4
- package/dist/cjs/address.factory.js.map +1 -1
- package/dist/cjs/asset_balance.js +7 -0
- package/dist/cjs/asset_balance.js.map +1 -0
- package/dist/cjs/asset_map.js +45 -0
- package/dist/cjs/asset_map.js.map +1 -0
- package/dist/cjs/asset_registry.js +21 -0
- package/dist/cjs/asset_registry.js.map +1 -0
- package/dist/cjs/bip39.js +88 -0
- package/dist/cjs/bip39.js.map +1 -0
- package/dist/cjs/bytes_from_hex.js +34 -0
- package/dist/cjs/bytes_from_hex.js.map +1 -0
- package/dist/cjs/chain_type.js +35 -0
- package/dist/cjs/chain_type.js.map +1 -0
- package/dist/cjs/index.js +12 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/network_type.js +5 -2
- package/dist/cjs/network_type.js.map +1 -1
- package/dist/cjs/python_builtins.js +225 -0
- package/dist/cjs/python_builtins.js.map +1 -0
- package/dist/cjs/python_json.js +120 -0
- package/dist/cjs/python_json.js.map +1 -0
- package/dist/cjs/python_pydantic.js +50 -0
- package/dist/cjs/python_pydantic.js.map +1 -0
- package/dist/cjs/python_repr.js +172 -0
- package/dist/cjs/python_repr.js.map +1 -0
- package/dist/cjs/signed_transaction.js +24 -0
- package/dist/cjs/signed_transaction.js.map +1 -0
- package/dist/cjs/solana/solana_chain.js +89 -25
- package/dist/cjs/solana/solana_chain.js.map +1 -1
- package/dist/cjs/solana/solana_transaction_status.js +39 -3
- package/dist/cjs/solana/solana_transaction_status.js.map +1 -1
- package/dist/cjs/stellar/index.js +26 -0
- package/dist/cjs/stellar/index.js.map +1 -0
- package/dist/cjs/stellar/stellar_address.js +25 -0
- package/dist/cjs/stellar/stellar_address.js.map +1 -0
- package/dist/cjs/stellar/stellar_asset.js +155 -0
- package/dist/cjs/stellar/stellar_asset.js.map +1 -0
- package/dist/cjs/stellar/stellar_assets.js +26 -0
- package/dist/cjs/stellar/stellar_assets.js.map +1 -0
- package/dist/cjs/stellar/stellar_chain.js +1334 -0
- package/dist/cjs/stellar/stellar_chain.js.map +1 -0
- package/dist/cjs/stellar/stellar_chains.js +28 -0
- package/dist/cjs/stellar/stellar_chains.js.map +1 -0
- package/dist/cjs/stellar/stellar_gas_pricing.js +22 -0
- package/dist/cjs/stellar/stellar_gas_pricing.js.map +1 -0
- package/dist/cjs/stellar/stellar_strkey.js +71 -0
- package/dist/cjs/stellar/stellar_strkey.js.map +1 -0
- package/dist/cjs/stellar/stellar_transaction_status.js +72 -0
- package/dist/cjs/stellar/stellar_transaction_status.js.map +1 -0
- package/dist/cjs/stellar/stellar_transactions.js +475 -0
- package/dist/cjs/stellar/stellar_transactions.js.map +1 -0
- package/dist/cjs/stellar/stellar_wallet.js +195 -0
- package/dist/cjs/stellar/stellar_wallet.js.map +1 -0
- package/dist/cjs/token.js +3 -1
- package/dist/cjs/token.js.map +1 -1
- package/dist/cjs/transaction_json.js +85 -0
- package/dist/cjs/transaction_json.js.map +1 -0
- package/dist/cjs/transaction_prerequisite.js +19 -0
- package/dist/cjs/transaction_prerequisite.js.map +1 -0
- package/dist/cjs/transaction_simulation.js +21 -0
- package/dist/cjs/transaction_simulation.js.map +1 -0
- package/dist/cjs/tron/index.js +32 -0
- package/dist/cjs/tron/index.js.map +1 -0
- package/dist/cjs/tron/tron_abi.js +287 -0
- package/dist/cjs/tron/tron_abi.js.map +1 -0
- package/dist/cjs/tron/tron_address.js +38 -0
- package/dist/cjs/tron/tron_address.js.map +1 -0
- package/dist/cjs/tron/tron_asset.js +56 -0
- package/dist/cjs/tron/tron_asset.js.map +1 -0
- package/dist/cjs/tron/tron_assets.js +17 -0
- package/dist/cjs/tron/tron_assets.js.map +1 -0
- package/dist/cjs/tron/tron_base58.js +95 -0
- package/dist/cjs/tron/tron_base58.js.map +1 -0
- package/dist/cjs/tron/tron_canonical_transaction.js +268 -0
- package/dist/cjs/tron/tron_canonical_transaction.js.map +1 -0
- package/dist/cjs/tron/tron_chain.js +809 -0
- package/dist/cjs/tron/tron_chain.js.map +1 -0
- package/dist/cjs/tron/tron_chains.js +19 -0
- package/dist/cjs/tron/tron_chains.js.map +1 -0
- package/dist/cjs/tron/tron_client.js +327 -0
- package/dist/cjs/tron/tron_client.js.map +1 -0
- package/dist/cjs/tron/tron_contract.js +195 -0
- package/dist/cjs/tron/tron_contract.js.map +1 -0
- package/dist/cjs/tron/tron_gas_pricing.js +21 -0
- package/dist/cjs/tron/tron_gas_pricing.js.map +1 -0
- package/dist/cjs/tron/tron_keys.js +251 -0
- package/dist/cjs/tron/tron_keys.js.map +1 -0
- package/dist/cjs/tron/tron_transaction_builder.js +196 -0
- package/dist/cjs/tron/tron_transaction_builder.js.map +1 -0
- package/dist/cjs/tron/tron_transaction_status.js +118 -0
- package/dist/cjs/tron/tron_transaction_status.js.map +1 -0
- package/dist/cjs/tron/tron_transactions.js +192 -0
- package/dist/cjs/tron/tron_transactions.js.map +1 -0
- package/dist/cjs/tron/tron_wallet.js +152 -0
- package/dist/cjs/tron/tron_wallet.js.map +1 -0
- package/dist/cjs/unsigned_transaction.js +12 -0
- package/dist/cjs/unsigned_transaction.js.map +1 -1
- package/dist/cjs/wallet.base.js +29 -0
- package/dist/cjs/wallet.base.js.map +1 -0
- package/dist/esm/address.factory.d.ts.map +1 -1
- package/dist/esm/address.factory.js +7 -4
- package/dist/esm/address.factory.js.map +1 -1
- package/dist/esm/asset_balance.d.ts +5 -0
- package/dist/esm/asset_balance.d.ts.map +1 -0
- package/dist/esm/asset_balance.js +3 -0
- package/dist/esm/asset_balance.js.map +1 -0
- package/dist/esm/asset_map.d.ts +12 -0
- package/dist/esm/asset_map.d.ts.map +1 -0
- package/dist/esm/asset_map.js +40 -0
- package/dist/esm/asset_map.js.map +1 -0
- package/dist/esm/asset_registry.d.ts +6 -0
- package/dist/esm/asset_registry.d.ts.map +1 -0
- package/dist/esm/asset_registry.js +15 -0
- package/dist/esm/asset_registry.js.map +1 -0
- package/dist/esm/bip39.d.ts +4 -0
- package/dist/esm/bip39.d.ts.map +1 -0
- package/dist/esm/bip39.js +83 -0
- package/dist/esm/bip39.js.map +1 -0
- package/dist/esm/bytes_from_hex.d.ts +2 -0
- package/dist/esm/bytes_from_hex.d.ts.map +1 -0
- package/dist/esm/bytes_from_hex.js +31 -0
- package/dist/esm/bytes_from_hex.js.map +1 -0
- package/dist/esm/chain_type.d.ts +29 -0
- package/dist/esm/chain_type.d.ts.map +1 -0
- package/dist/esm/chain_type.js +32 -0
- package/dist/esm/chain_type.js.map +1 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/network_type.d.ts +3 -2
- package/dist/esm/network_type.d.ts.map +1 -1
- package/dist/esm/network_type.js +6 -3
- package/dist/esm/network_type.js.map +1 -1
- package/dist/esm/python_builtins.d.ts +13 -0
- package/dist/esm/python_builtins.d.ts.map +1 -0
- package/dist/esm/python_builtins.js +212 -0
- package/dist/esm/python_builtins.js.map +1 -0
- package/dist/esm/python_json.d.ts +9 -0
- package/dist/esm/python_json.d.ts.map +1 -0
- package/dist/esm/python_json.js +117 -0
- package/dist/esm/python_json.js.map +1 -0
- package/dist/esm/python_pydantic.d.ts +11 -0
- package/dist/esm/python_pydantic.d.ts.map +1 -0
- package/dist/esm/python_pydantic.js +39 -0
- package/dist/esm/python_pydantic.js.map +1 -0
- package/dist/esm/python_repr.d.ts +17 -0
- package/dist/esm/python_repr.d.ts.map +1 -0
- package/dist/esm/python_repr.js +160 -0
- package/dist/esm/python_repr.js.map +1 -0
- package/dist/esm/signed_transaction.d.ts +17 -0
- package/dist/esm/signed_transaction.d.ts.map +1 -0
- package/dist/esm/signed_transaction.js +19 -0
- package/dist/esm/signed_transaction.js.map +1 -0
- package/dist/esm/solana/solana_chain.d.ts.map +1 -1
- package/dist/esm/solana/solana_chain.js +90 -26
- package/dist/esm/solana/solana_chain.js.map +1 -1
- package/dist/esm/solana/solana_transaction_status.d.ts +40 -2
- package/dist/esm/solana/solana_transaction_status.d.ts.map +1 -1
- package/dist/esm/solana/solana_transaction_status.js +38 -2
- package/dist/esm/solana/solana_transaction_status.js.map +1 -1
- package/dist/esm/stellar/index.d.ts +10 -0
- package/dist/esm/stellar/index.d.ts.map +1 -0
- package/dist/esm/stellar/index.js +10 -0
- package/dist/esm/stellar/index.js.map +1 -0
- package/dist/esm/stellar/stellar_address.d.ts +8 -0
- package/dist/esm/stellar/stellar_address.d.ts.map +1 -0
- package/dist/esm/stellar/stellar_address.js +21 -0
- package/dist/esm/stellar/stellar_address.js.map +1 -0
- package/dist/esm/stellar/stellar_asset.d.ts +52 -0
- package/dist/esm/stellar/stellar_asset.d.ts.map +1 -0
- package/dist/esm/stellar/stellar_asset.js +147 -0
- package/dist/esm/stellar/stellar_asset.js.map +1 -0
- package/dist/esm/stellar/stellar_assets.d.ts +11 -0
- package/dist/esm/stellar/stellar_assets.d.ts.map +1 -0
- package/dist/esm/stellar/stellar_assets.js +23 -0
- package/dist/esm/stellar/stellar_assets.js.map +1 -0
- package/dist/esm/stellar/stellar_chain.d.ts +173 -0
- package/dist/esm/stellar/stellar_chain.d.ts.map +1 -0
- package/dist/esm/stellar/stellar_chain.js +1325 -0
- package/dist/esm/stellar/stellar_chain.js.map +1 -0
- package/dist/esm/stellar/stellar_chains.d.ts +5 -0
- package/dist/esm/stellar/stellar_chains.d.ts.map +1 -0
- package/dist/esm/stellar/stellar_chains.js +25 -0
- package/dist/esm/stellar/stellar_chains.js.map +1 -0
- package/dist/esm/stellar/stellar_gas_pricing.d.ts +13 -0
- package/dist/esm/stellar/stellar_gas_pricing.d.ts.map +1 -0
- package/dist/esm/stellar/stellar_gas_pricing.js +18 -0
- package/dist/esm/stellar/stellar_gas_pricing.js.map +1 -0
- package/dist/esm/stellar/stellar_strkey.d.ts +3 -0
- package/dist/esm/stellar/stellar_strkey.d.ts.map +1 -0
- package/dist/esm/stellar/stellar_strkey.js +67 -0
- package/dist/esm/stellar/stellar_strkey.js.map +1 -0
- package/dist/esm/stellar/stellar_transaction_status.d.ts +39 -0
- package/dist/esm/stellar/stellar_transaction_status.d.ts.map +1 -0
- package/dist/esm/stellar/stellar_transaction_status.js +68 -0
- package/dist/esm/stellar/stellar_transaction_status.js.map +1 -0
- package/dist/esm/stellar/stellar_transactions.d.ts +166 -0
- package/dist/esm/stellar/stellar_transactions.d.ts.map +1 -0
- package/dist/esm/stellar/stellar_transactions.js +451 -0
- package/dist/esm/stellar/stellar_transactions.js.map +1 -0
- package/dist/esm/stellar/stellar_wallet.d.ts +43 -0
- package/dist/esm/stellar/stellar_wallet.d.ts.map +1 -0
- package/dist/esm/stellar/stellar_wallet.js +190 -0
- package/dist/esm/stellar/stellar_wallet.js.map +1 -0
- package/dist/esm/token.d.ts +1 -0
- package/dist/esm/token.d.ts.map +1 -1
- package/dist/esm/token.js +3 -1
- package/dist/esm/token.js.map +1 -1
- package/dist/esm/transaction_json.d.ts +21 -0
- package/dist/esm/transaction_json.d.ts.map +1 -0
- package/dist/esm/transaction_json.js +75 -0
- package/dist/esm/transaction_json.js.map +1 -0
- package/dist/esm/transaction_prerequisite.d.ts +17 -0
- package/dist/esm/transaction_prerequisite.d.ts.map +1 -0
- package/dist/esm/transaction_prerequisite.js +13 -0
- package/dist/esm/transaction_prerequisite.js.map +1 -0
- package/dist/esm/transaction_simulation.d.ts +20 -0
- package/dist/esm/transaction_simulation.d.ts.map +1 -0
- package/dist/esm/transaction_simulation.js +17 -0
- package/dist/esm/transaction_simulation.js.map +1 -0
- package/dist/esm/tron/index.d.ts +16 -0
- package/dist/esm/tron/index.d.ts.map +1 -0
- package/dist/esm/tron/index.js +16 -0
- package/dist/esm/tron/index.js.map +1 -0
- package/dist/esm/tron/tron_abi.d.ts +3 -0
- package/dist/esm/tron/tron_abi.d.ts.map +1 -0
- package/dist/esm/tron/tron_abi.js +283 -0
- package/dist/esm/tron/tron_abi.js.map +1 -0
- package/dist/esm/tron/tron_address.d.ts +10 -0
- package/dist/esm/tron/tron_address.d.ts.map +1 -0
- package/dist/esm/tron/tron_address.js +34 -0
- package/dist/esm/tron/tron_address.js.map +1 -0
- package/dist/esm/tron/tron_asset.d.ts +19 -0
- package/dist/esm/tron/tron_asset.d.ts.map +1 -0
- package/dist/esm/tron/tron_asset.js +51 -0
- package/dist/esm/tron/tron_asset.js.map +1 -0
- package/dist/esm/tron/tron_assets.d.ts +10 -0
- package/dist/esm/tron/tron_assets.d.ts.map +1 -0
- package/dist/esm/tron/tron_assets.js +14 -0
- package/dist/esm/tron/tron_assets.js.map +1 -0
- package/dist/esm/tron/tron_base58.d.ts +7 -0
- package/dist/esm/tron/tron_base58.d.ts.map +1 -0
- package/dist/esm/tron/tron_base58.js +84 -0
- package/dist/esm/tron/tron_base58.js.map +1 -0
- package/dist/esm/tron/tron_canonical_transaction.d.ts +164 -0
- package/dist/esm/tron/tron_canonical_transaction.d.ts.map +1 -0
- package/dist/esm/tron/tron_canonical_transaction.js +262 -0
- package/dist/esm/tron/tron_canonical_transaction.js.map +1 -0
- package/dist/esm/tron/tron_chain.d.ts +136 -0
- package/dist/esm/tron/tron_chain.d.ts.map +1 -0
- package/dist/esm/tron/tron_chain.js +801 -0
- package/dist/esm/tron/tron_chain.js.map +1 -0
- package/dist/esm/tron/tron_chains.d.ts +5 -0
- package/dist/esm/tron/tron_chains.d.ts.map +1 -0
- package/dist/esm/tron/tron_chains.js +16 -0
- package/dist/esm/tron/tron_chains.js.map +1 -0
- package/dist/esm/tron/tron_client.d.ts +56 -0
- package/dist/esm/tron/tron_client.d.ts.map +1 -0
- package/dist/esm/tron/tron_client.js +319 -0
- package/dist/esm/tron/tron_client.js.map +1 -0
- package/dist/esm/tron/tron_contract.d.ts +69 -0
- package/dist/esm/tron/tron_contract.d.ts.map +1 -0
- package/dist/esm/tron/tron_contract.js +190 -0
- package/dist/esm/tron/tron_contract.js.map +1 -0
- package/dist/esm/tron/tron_gas_pricing.d.ts +12 -0
- package/dist/esm/tron/tron_gas_pricing.d.ts.map +1 -0
- package/dist/esm/tron/tron_gas_pricing.js +17 -0
- package/dist/esm/tron/tron_gas_pricing.js.map +1 -0
- package/dist/esm/tron/tron_keys.d.ts +61 -0
- package/dist/esm/tron/tron_keys.d.ts.map +1 -0
- package/dist/esm/tron/tron_keys.js +228 -0
- package/dist/esm/tron/tron_keys.js.map +1 -0
- package/dist/esm/tron/tron_transaction_builder.d.ts +56 -0
- package/dist/esm/tron/tron_transaction_builder.d.ts.map +1 -0
- package/dist/esm/tron/tron_transaction_builder.js +188 -0
- package/dist/esm/tron/tron_transaction_builder.js.map +1 -0
- package/dist/esm/tron/tron_transaction_status.d.ts +54 -0
- package/dist/esm/tron/tron_transaction_status.d.ts.map +1 -0
- package/dist/esm/tron/tron_transaction_status.js +113 -0
- package/dist/esm/tron/tron_transaction_status.js.map +1 -0
- package/dist/esm/tron/tron_transactions.d.ts +96 -0
- package/dist/esm/tron/tron_transactions.d.ts.map +1 -0
- package/dist/esm/tron/tron_transactions.js +181 -0
- package/dist/esm/tron/tron_transactions.js.map +1 -0
- package/dist/esm/tron/tron_wallet.d.ts +43 -0
- package/dist/esm/tron/tron_wallet.d.ts.map +1 -0
- package/dist/esm/tron/tron_wallet.js +148 -0
- package/dist/esm/tron/tron_wallet.js.map +1 -0
- package/dist/esm/unsigned_transaction.d.ts +5 -0
- package/dist/esm/unsigned_transaction.d.ts.map +1 -1
- package/dist/esm/unsigned_transaction.js +12 -0
- package/dist/esm/unsigned_transaction.js.map +1 -1
- package/dist/esm/wallet.base.d.ts +32 -0
- package/dist/esm/wallet.base.d.ts.map +1 -0
- package/dist/esm/wallet.base.js +23 -0
- package/dist/esm/wallet.base.js.map +1 -0
- package/docs/README.md +16 -7
- package/docs/solana.md +23 -0
- package/docs/stellar.md +113 -0
- package/docs/tron.md +103 -0
- package/package.json +14 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tron_transactions.js","sourceRoot":"","sources":["../../../tron/tron_transactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Chain } from '../chain.base.ts';
|
|
2
|
+
import { ChainType, WalletFamily } from '../chain_type.ts';
|
|
3
|
+
import { AbstractTransactionPrerequisite } from '../transaction_prerequisite.ts';
|
|
4
|
+
import { UnsignedTransaction } from '../unsigned_transaction.ts';
|
|
5
|
+
import { AbstractBip32StyleSingleAccountWallet, AbstractSignedMessage } from '../wallet.base.ts';
|
|
6
|
+
import { TronSignedMessage } from './tron_chain.ts';
|
|
7
|
+
import { TronContract } from './tron_contract.ts';
|
|
8
|
+
import { TronPublicKey } from './tron_keys.ts';
|
|
9
|
+
import { TronHandledApprovePrerequisiteResponse, TronSignedTransaction } from './tron_transactions.ts';
|
|
10
|
+
export interface TronDerivationPathArgs {
|
|
11
|
+
purpose?: number;
|
|
12
|
+
coinType?: number;
|
|
13
|
+
account?: number;
|
|
14
|
+
change?: number;
|
|
15
|
+
index?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class TronWallet extends AbstractBip32StyleSingleAccountWallet {
|
|
18
|
+
#private;
|
|
19
|
+
readonly publicKey: TronPublicKey;
|
|
20
|
+
private readonly _address;
|
|
21
|
+
constructor(privateKeyStr: string);
|
|
22
|
+
get privateKeyHex(): string;
|
|
23
|
+
static chainType(): ChainType;
|
|
24
|
+
static walletFamily(): WalletFamily;
|
|
25
|
+
chainType(): ChainType;
|
|
26
|
+
walletFamily(): WalletFamily;
|
|
27
|
+
static fromMnemonic(mnemonicStr: string, opts?: {
|
|
28
|
+
derivationPath?: string;
|
|
29
|
+
}): TronWallet;
|
|
30
|
+
static derivationPath(args?: TronDerivationPathArgs): string;
|
|
31
|
+
get address(): string;
|
|
32
|
+
static deriveAddressFromPrivateKey(privateKeyStr: string): string;
|
|
33
|
+
static derivePrivateKeyFromMnemonic(mnemonicStr: string, derivationPath: string): string;
|
|
34
|
+
handleTransactionPrerequisite(prerequisite: AbstractTransactionPrerequisite, chain: Chain, opts?: {
|
|
35
|
+
feeLimitSun?: number;
|
|
36
|
+
}): Promise<TronHandledApprovePrerequisiteResponse>;
|
|
37
|
+
_broadcastApprove(contract: TronContract, spenderContractAddress: string, amount: bigint, feeLimitSun: number): Promise<string>;
|
|
38
|
+
signTransaction(transaction: UnsignedTransaction, chain: Chain): Promise<TronSignedTransaction>;
|
|
39
|
+
signMessage(message: string): TronSignedMessage;
|
|
40
|
+
verifySignature(message: string, signedMessage: AbstractSignedMessage): boolean;
|
|
41
|
+
private static assertDerivationPath;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=tron_wallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tron_wallet.d.ts","sourceRoot":"","sources":["../../../tron/tron_wallet.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAG3D,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,qCAAqC,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,EAGL,iBAAiB,EAKlB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAkB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAEL,sCAAsC,EACtC,qBAAqB,EAEtB,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,UAAW,SAAQ,qCAAqC;;IACnE,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAGlC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,aAAa,EAAE,MAAM;IASjC,IAAI,aAAa,IAAI,MAAM,CAE1B;IAMD,MAAM,CAAC,SAAS,IAAI,SAAS;IAI7B,MAAM,CAAC,YAAY,IAAI,YAAY;IAInC,SAAS,IAAI,SAAS;IAItB,YAAY,IAAI,YAAY;IAI5B,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,UAAU;IAM5F,MAAM,CAAC,cAAc,CAAC,IAAI,GAAE,sBAA2B,GAAG,MAAM;IAYhE,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,MAAM,CAAC,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAKjE,MAAM,CAAC,4BAA4B,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM;IAOlF,6BAA6B,CACjC,YAAY,EAAE,+BAA+B,EAC7C,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GAClC,OAAO,CAAC,sCAAsC,CAAC;IAwD5C,iBAAiB,CAAC,QAAQ,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAc/H,eAAe,CAAC,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAgBrG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB;IAI/C,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,qBAAqB,GAAG,OAAO;IAI/E,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAKpC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { HDNodeWallet } from 'ethers';
|
|
2
|
+
import { mnemonicToSeedBip39 } from "../bip39.js";
|
|
3
|
+
import { ChainType, WalletFamily } from "../chain_type.js";
|
|
4
|
+
import { ChainError, ChainErrorKinds } from "../errors.js";
|
|
5
|
+
import { pyEncodeUtf8 } from "../python_builtins.js";
|
|
6
|
+
import { AbstractBip32StyleSingleAccountWallet } from "../wallet.base.js";
|
|
7
|
+
import { DEFAULT_TRC20_APPROVE_FEE_LIMIT_SUN, TronChain, TronSignedMessage, ZERO_RESET_APPROVAL_TRC20_ADDRESSES, pyTruthy, tronBroadcastErrorKind, zeroResetApprovalKey, } from "./tron_chain.js";
|
|
8
|
+
import { TronPrivateKey } from "./tron_keys.js";
|
|
9
|
+
import { TronApproveTransactionPrerequisite, TronHandledApprovePrerequisiteResponse, TronSignedTransaction, TronUnsignedTransaction, } from "./tron_transactions.js";
|
|
10
|
+
const TRON_DERIVATION_PATH_REGEX = /^m\/44'\/195'\/\d+'\/\d+'?\/\d+'?$/;
|
|
11
|
+
export class TronWallet extends AbstractBip32StyleSingleAccountWallet {
|
|
12
|
+
publicKey;
|
|
13
|
+
#privateKeyHex;
|
|
14
|
+
#privateKey;
|
|
15
|
+
_address;
|
|
16
|
+
constructor(privateKeyStr) {
|
|
17
|
+
super();
|
|
18
|
+
const normalized = privateKeyStr.startsWith('0x') ? privateKeyStr.slice(2) : privateKeyStr;
|
|
19
|
+
this.#privateKey = TronPrivateKey.fromHex(normalized);
|
|
20
|
+
this.#privateKeyHex = normalized;
|
|
21
|
+
this.publicKey = this.#privateKey.publicKey;
|
|
22
|
+
this._address = TronWallet.deriveAddressFromPrivateKey(privateKeyStr);
|
|
23
|
+
}
|
|
24
|
+
get privateKeyHex() {
|
|
25
|
+
return this.#privateKeyHex;
|
|
26
|
+
}
|
|
27
|
+
[Symbol.for('nodejs.util.inspect.custom')]() {
|
|
28
|
+
return `TronWallet { address: '${this._address}' }`;
|
|
29
|
+
}
|
|
30
|
+
static chainType() {
|
|
31
|
+
return ChainType.TRON;
|
|
32
|
+
}
|
|
33
|
+
static walletFamily() {
|
|
34
|
+
return WalletFamily.TRON;
|
|
35
|
+
}
|
|
36
|
+
chainType() {
|
|
37
|
+
return TronWallet.chainType();
|
|
38
|
+
}
|
|
39
|
+
walletFamily() {
|
|
40
|
+
return TronWallet.walletFamily();
|
|
41
|
+
}
|
|
42
|
+
static fromMnemonic(mnemonicStr, opts = {}) {
|
|
43
|
+
const derivationPath = opts.derivationPath ?? "m/44'/195'/0'/0/0";
|
|
44
|
+
TronWallet.assertDerivationPath(derivationPath);
|
|
45
|
+
return new TronWallet(TronWallet.derivePrivateKeyFromMnemonic(mnemonicStr, derivationPath));
|
|
46
|
+
}
|
|
47
|
+
static derivationPath(args = {}) {
|
|
48
|
+
const purpose = args.purpose ?? 44;
|
|
49
|
+
const coinType = args.coinType ?? 195;
|
|
50
|
+
if (purpose !== 44) {
|
|
51
|
+
throw new ChainError(ChainErrorKinds.InvalidArgument, `Invalid purpose ${purpose} for Tron BIP44, expected 44.`);
|
|
52
|
+
}
|
|
53
|
+
if (coinType !== 195) {
|
|
54
|
+
throw new ChainError(ChainErrorKinds.InvalidArgument, `Invalid coin_type ${coinType} for Tron, expected 195.`);
|
|
55
|
+
}
|
|
56
|
+
return `m/44'/195'/${args.account ?? 0}'/${args.change ?? 0}/${args.index ?? 0}`;
|
|
57
|
+
}
|
|
58
|
+
get address() {
|
|
59
|
+
return this._address;
|
|
60
|
+
}
|
|
61
|
+
static deriveAddressFromPrivateKey(privateKeyStr) {
|
|
62
|
+
const normalized = privateKeyStr.startsWith('0x') ? privateKeyStr.slice(2) : privateKeyStr;
|
|
63
|
+
return TronPrivateKey.fromHex(normalized).publicKey.toBase58CheckAddress();
|
|
64
|
+
}
|
|
65
|
+
static derivePrivateKeyFromMnemonic(mnemonicStr, derivationPath) {
|
|
66
|
+
TronWallet.assertDerivationPath(derivationPath);
|
|
67
|
+
const seed = mnemonicToSeedBip39(mnemonicStr);
|
|
68
|
+
const node = HDNodeWallet.fromSeed(seed).derivePath(derivationPath);
|
|
69
|
+
return node.privateKey.slice(2);
|
|
70
|
+
}
|
|
71
|
+
async handleTransactionPrerequisite(prerequisite, chain, opts = {}) {
|
|
72
|
+
if (!(prerequisite instanceof TronApproveTransactionPrerequisite)) {
|
|
73
|
+
throw new ChainError(ChainErrorKinds.FeatureNotSupported, `TronWallet does not support prerequisite ${prerequisite?.constructor?.name ?? typeof prerequisite}`);
|
|
74
|
+
}
|
|
75
|
+
const tronChain = assertTronChain(chain);
|
|
76
|
+
if (tronChain.chainId !== prerequisite.chainId) {
|
|
77
|
+
throw new ChainError(ChainErrorKinds.InvalidArgument, `Invalid chain with id ${tronChain.chainId} for handling prerequisite ${String(prerequisite)} with chain id ${prerequisite.chainId}`, { chainId: tronChain.chainId });
|
|
78
|
+
}
|
|
79
|
+
if (prerequisite.asset.contractAddress === null) {
|
|
80
|
+
throw new ChainError(ChainErrorKinds.InvalidArgument, 'TronWallet cannot handle TronApproveTransactionPrerequisite with asset contract address of Null, it must be trc20 token address', { chainId: tronChain.chainId });
|
|
81
|
+
}
|
|
82
|
+
const feeLimitSun = opts.feeLimitSun ?? DEFAULT_TRC20_APPROVE_FEE_LIMIT_SUN;
|
|
83
|
+
const contract = await tronChain.getTrc20Contract(prerequisite.asset.contractAddress);
|
|
84
|
+
const currentAllowance = BigInt(await contract.callView('allowance', prerequisite.walletAddress, prerequisite.spenderContractAddress));
|
|
85
|
+
if (currentAllowance >= prerequisite.amount) {
|
|
86
|
+
return new TronHandledApprovePrerequisiteResponse({ skipped: true, txHash: null });
|
|
87
|
+
}
|
|
88
|
+
if (prerequisite.walletAddress !== this.address) {
|
|
89
|
+
throw new ChainError(ChainErrorKinds.InvalidArgument, `TronWallet ${this.address} cannot handle approve prerequisite for ${prerequisite.walletAddress}`, { chainId: tronChain.chainId });
|
|
90
|
+
}
|
|
91
|
+
const needsZeroReset = currentAllowance > 0n &&
|
|
92
|
+
(prerequisite.requiresZeroResetFirst ||
|
|
93
|
+
ZERO_RESET_APPROVAL_TRC20_ADDRESSES.has(zeroResetApprovalKey(tronChain.chainId, prerequisite.asset.contractAddress)));
|
|
94
|
+
let zeroResetTxHash = null;
|
|
95
|
+
if (needsZeroReset) {
|
|
96
|
+
zeroResetTxHash = await this._broadcastApprove(contract, prerequisite.spenderContractAddress, 0n, feeLimitSun);
|
|
97
|
+
await sleep(3 * tronChain.blockTimeSeconds * 1000);
|
|
98
|
+
}
|
|
99
|
+
const txHash = await this._broadcastApprove(contract, prerequisite.spenderContractAddress, prerequisite.amount, feeLimitSun);
|
|
100
|
+
return new TronHandledApprovePrerequisiteResponse({ skipped: false, txHash, zeroResetTxHash });
|
|
101
|
+
}
|
|
102
|
+
async _broadcastApprove(contract, spenderContractAddress, amount, feeLimitSun) {
|
|
103
|
+
const builder = (await contract.buildCall('approve', spenderContractAddress, amount)).withOwner(this.address).feeLimit(feeLimitSun);
|
|
104
|
+
const transaction = await builder.build();
|
|
105
|
+
const signed = transaction.sign(this.#privateKey);
|
|
106
|
+
let result;
|
|
107
|
+
try {
|
|
108
|
+
result = await signed.broadcast();
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
112
|
+
throw new ChainError(tronBroadcastErrorKind(error), error.message, { txHash: signed.txid }, error);
|
|
113
|
+
}
|
|
114
|
+
return pyTruthy(result.txid) ? result.txid : signed.txid;
|
|
115
|
+
}
|
|
116
|
+
async signTransaction(transaction, chain) {
|
|
117
|
+
if (!(transaction instanceof TronUnsignedTransaction)) {
|
|
118
|
+
throw new ChainError(ChainErrorKinds.InvalidArgument, `Invalid transaction ${String(transaction)}, expected TronUnsignedTransaction`);
|
|
119
|
+
}
|
|
120
|
+
const tronChain = assertTronChain(chain);
|
|
121
|
+
if (tronChain.chainId !== transaction.chainId) {
|
|
122
|
+
throw new ChainError(ChainErrorKinds.InvalidArgument, `Invalid chain id ${tronChain.chainId} for signing transaction with chain id ${transaction.chainId}`, { chainId: tronChain.chainId });
|
|
123
|
+
}
|
|
124
|
+
const signed = transaction.transaction.sign(this.#privateKey);
|
|
125
|
+
return new TronSignedTransaction({ chainId: transaction.chainId, signedTransaction: signed });
|
|
126
|
+
}
|
|
127
|
+
signMessage(message) {
|
|
128
|
+
return new TronSignedMessage(this.#privateKey.signMsg(pyEncodeUtf8(message)).hex());
|
|
129
|
+
}
|
|
130
|
+
verifySignature(message, signedMessage) {
|
|
131
|
+
return TronChain.verifySignature(this.publicKey, message, signedMessage);
|
|
132
|
+
}
|
|
133
|
+
static assertDerivationPath(derivationPath) {
|
|
134
|
+
if (!TRON_DERIVATION_PATH_REGEX.test(derivationPath)) {
|
|
135
|
+
throw new ChainError(ChainErrorKinds.InvalidArgument, `Invalid Tron derivation path: ${derivationPath}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function assertTronChain(chain) {
|
|
140
|
+
if (!(chain instanceof TronChain)) {
|
|
141
|
+
throw new ChainError(ChainErrorKinds.InvalidArgument, `Invalid chain ${String(chain)}, expected TronChain`);
|
|
142
|
+
}
|
|
143
|
+
return chain;
|
|
144
|
+
}
|
|
145
|
+
function sleep(ms) {
|
|
146
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=tron_wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tron_wallet.js","sourceRoot":"","sources":["../../../tron/tron_wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { NetworkType } from './network_type.ts';
|
|
2
|
+
import { PyJsonDumpsOptions } from './python_json.ts';
|
|
3
|
+
import { JsonDict, JsonTransactionInput } from './transaction_json.ts';
|
|
2
4
|
export declare abstract class UnsignedTransaction {
|
|
3
5
|
readonly chainId: number;
|
|
4
6
|
readonly networkType: NetworkType;
|
|
5
7
|
protected constructor(chainId: number, networkType: NetworkType);
|
|
8
|
+
static fromJson(data: JsonTransactionInput): UnsignedTransaction;
|
|
9
|
+
toJson(): JsonDict;
|
|
10
|
+
toJsonStr(opts?: PyJsonDumpsOptions): string;
|
|
6
11
|
}
|
|
7
12
|
//# sourceMappingURL=unsigned_transaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unsigned_transaction.d.ts","sourceRoot":"","sources":["../../unsigned_transaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"unsigned_transaction.d.ts","sourceRoot":"","sources":["../../unsigned_transaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAe,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAuB,MAAM,uBAAuB,CAAC;AAE5F,8BAAsB,mBAAmB;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAElC,SAAS,aAAa,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW;IAK/D,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,GAAG,mBAAmB;IAIhE,MAAM,IAAI,QAAQ;IAQlB,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,MAAM;CAG7C"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { ChainError, ChainErrorKinds } from "./errors.js";
|
|
2
|
+
import { pyJsonDumps } from "./python_json.js";
|
|
3
|
+
import { transactionFromJson } from "./transaction_json.js";
|
|
1
4
|
export class UnsignedTransaction {
|
|
2
5
|
chainId;
|
|
3
6
|
networkType;
|
|
@@ -5,5 +8,14 @@ export class UnsignedTransaction {
|
|
|
5
8
|
this.chainId = chainId;
|
|
6
9
|
this.networkType = networkType;
|
|
7
10
|
}
|
|
11
|
+
static fromJson(data) {
|
|
12
|
+
return transactionFromJson(this, UnsignedTransaction.fromJson, data);
|
|
13
|
+
}
|
|
14
|
+
toJson() {
|
|
15
|
+
throw new ChainError(ChainErrorKinds.FeatureNotSupported, `${this.constructor.name} does not implement toJson()`, { chainId: this.chainId });
|
|
16
|
+
}
|
|
17
|
+
toJsonStr(opts) {
|
|
18
|
+
return pyJsonDumps(this.toJson(), opts);
|
|
19
|
+
}
|
|
8
20
|
}
|
|
9
21
|
//# sourceMappingURL=unsigned_transaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unsigned_transaction.js","sourceRoot":"","sources":["../../unsigned_transaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"unsigned_transaction.js","sourceRoot":"","sources":["../../unsigned_transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAsB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAkC,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5F,MAAM,OAAgB,mBAAmB;IAC9B,OAAO,CAAS;IAChB,WAAW,CAAc;IAElC,YAAsB,OAAe,EAAE,WAAwB;QAC7D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAA0B;QACxC,OAAO,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAwB,CAAC;IAC9F,CAAC;IAED,MAAM;QACJ,MAAM,IAAI,UAAU,CAClB,eAAe,CAAC,mBAAmB,EACnC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,8BAA8B,EACtD,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAC1B,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,IAAyB;QACjC,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Chain } from './chain.base.ts';
|
|
2
|
+
import { ChainType, WalletFamily } from './chain_type.ts';
|
|
3
|
+
import { AbstractBroadcastTransactionResponse, AbstractSignedTransaction } from './signed_transaction.ts';
|
|
4
|
+
import { AbstractHandledPrerequisiteResponse, AbstractTransactionPrerequisite } from './transaction_prerequisite.ts';
|
|
5
|
+
import { UnsignedTransaction } from './unsigned_transaction.ts';
|
|
6
|
+
export declare abstract class AbstractSignedMessage {
|
|
7
|
+
readonly signature: string;
|
|
8
|
+
protected constructor(signature: string);
|
|
9
|
+
}
|
|
10
|
+
export interface SignedTransactionBroadcaster {
|
|
11
|
+
broadcastSignedTransaction(signedTransaction: AbstractSignedTransaction): Promise<AbstractBroadcastTransactionResponse>;
|
|
12
|
+
}
|
|
13
|
+
export interface SignAndBroadcastTransactionRequest {
|
|
14
|
+
transaction: UnsignedTransaction;
|
|
15
|
+
chain: Chain & SignedTransactionBroadcaster;
|
|
16
|
+
handlePrerequisites: boolean;
|
|
17
|
+
prerequisites?: AbstractTransactionPrerequisite[];
|
|
18
|
+
}
|
|
19
|
+
export declare abstract class AbstractWallet {
|
|
20
|
+
abstract chainType(): ChainType;
|
|
21
|
+
abstract walletFamily(): WalletFamily;
|
|
22
|
+
abstract handleTransactionPrerequisite(prerequisite: AbstractTransactionPrerequisite, chain: Chain): Promise<AbstractHandledPrerequisiteResponse>;
|
|
23
|
+
handleTransactionPrerequisites(prerequisites: AbstractTransactionPrerequisite[], chain: Chain): Promise<void>;
|
|
24
|
+
signAndBroadcastTransaction(req: SignAndBroadcastTransactionRequest): Promise<AbstractBroadcastTransactionResponse>;
|
|
25
|
+
abstract signTransaction(transaction: UnsignedTransaction, chain: Chain): Promise<AbstractSignedTransaction>;
|
|
26
|
+
abstract signMessage(message: string): AbstractSignedMessage;
|
|
27
|
+
abstract verifySignature(message: string, signedMessage: AbstractSignedMessage): boolean;
|
|
28
|
+
}
|
|
29
|
+
export declare abstract class AbstractBip32StyleSingleAccountWallet extends AbstractWallet {
|
|
30
|
+
abstract get address(): string;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=wallet.base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.base.d.ts","sourceRoot":"","sources":["../../wallet.base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,oCAAoC,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAC1G,OAAO,EAAE,mCAAmC,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AACrH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,8BAAsB,qBAAqB;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,SAAS,aAAa,SAAS,EAAE,MAAM;CAGxC;AAED,MAAM,WAAW,4BAA4B;IAC3C,0BAA0B,CAAC,iBAAiB,EAAE,yBAAyB,GAAG,OAAO,CAAC,oCAAoC,CAAC,CAAC;CACzH;AAED,MAAM,WAAW,kCAAkC;IACjD,WAAW,EAAE,mBAAmB,CAAC;IACjC,KAAK,EAAE,KAAK,GAAG,4BAA4B,CAAC;IAC5C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,+BAA+B,EAAE,CAAC;CACnD;AAED,8BAAsB,cAAc;IAClC,QAAQ,CAAC,SAAS,IAAI,SAAS;IAE/B,QAAQ,CAAC,YAAY,IAAI,YAAY;IAErC,QAAQ,CAAC,6BAA6B,CACpC,YAAY,EAAE,+BAA+B,EAC7C,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,mCAAmC,CAAC;IAEzC,8BAA8B,CAAC,aAAa,EAAE,+BAA+B,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7G,2BAA2B,CAAC,GAAG,EAAE,kCAAkC,GAAG,OAAO,CAAC,oCAAoC,CAAC;IAQzH,QAAQ,CAAC,eAAe,CAAC,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAE5G,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB;IAE5D,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,qBAAqB,GAAG,OAAO;CACzF;AAED,8BAAsB,qCAAsC,SAAQ,cAAc;IAChF,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC;CAChC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class AbstractSignedMessage {
|
|
2
|
+
signature;
|
|
3
|
+
constructor(signature) {
|
|
4
|
+
this.signature = signature;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class AbstractWallet {
|
|
8
|
+
async handleTransactionPrerequisites(prerequisites, chain) {
|
|
9
|
+
for (const prerequisite of prerequisites) {
|
|
10
|
+
await this.handleTransactionPrerequisite(prerequisite, chain);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
async signAndBroadcastTransaction(req) {
|
|
14
|
+
if (req.handlePrerequisites === true) {
|
|
15
|
+
await this.handleTransactionPrerequisites(req.prerequisites ?? [], req.chain);
|
|
16
|
+
}
|
|
17
|
+
const signed = await this.signTransaction(req.transaction, req.chain);
|
|
18
|
+
return req.chain.broadcastSignedTransaction(signed);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class AbstractBip32StyleSingleAccountWallet extends AbstractWallet {
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=wallet.base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.base.js","sourceRoot":"","sources":["../../wallet.base.ts"],"names":[],"mappings":"AAMA,MAAM,OAAgB,qBAAqB;IAChC,SAAS,CAAS;IAE3B,YAAsB,SAAiB;QACrC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAaD,MAAM,OAAgB,cAAc;IAUlC,KAAK,CAAC,8BAA8B,CAAC,aAAgD,EAAE,KAAY;QACjG,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,6BAA6B,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,2BAA2B,CAAC,GAAuC;QACvE,IAAI,GAAG,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QACtE,OAAO,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;CAOF;AAED,MAAM,OAAgB,qCAAsC,SAAQ,cAAc;CAEjF"}
|
package/docs/README.md
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
A service-agnostic abstraction layer for talking to blockchain networks. One
|
|
4
4
|
shape (`Chain`, `Token`, `Address`, `UnsignedTransaction`) covers EVM
|
|
5
5
|
(Ethereum / Arbitrum / Base / BNB / …), UTXO (Bitcoin / Litecoin /
|
|
6
|
-
Dogecoin), Solana, and TON, with the same call surface
|
|
7
|
-
underlying network.
|
|
6
|
+
Dogecoin), Solana, Stellar, Tron, and TON, with the same call surface
|
|
7
|
+
regardless of underlying network.
|
|
8
8
|
|
|
9
9
|
This repository is the canonical source for the SDK. It is consumed by
|
|
10
10
|
sister services (depositron, pluton-back-end, gasless) as a git submodule
|
|
@@ -18,7 +18,8 @@ mounted at each service's own `chain` directory.
|
|
|
18
18
|
| `Token` | [token.ts](../token.ts) | Abstract base for an on-chain asset — `chainId`, `symbol`, `identifier` (or `NATIVE_TOKEN_IDENTIFIER`), `decimals` |
|
|
19
19
|
| `Address` | [address.ts](../address.ts) | Abstract address with `canonical()` + `networkType` |
|
|
20
20
|
| `UnsignedTransaction` | [unsigned_transaction.ts](../unsigned_transaction.ts) | Abstract base for an unsigned tx; per-chain subclasses add the bytes |
|
|
21
|
-
| `NetworkType` | [network_type.ts](../network_type.ts) | Enum (`EVM`, `COSMOS`, `TON`, `SOLANA`, `BTC`) + `registerNonEvmChain(chainId, type)` registry |
|
|
21
|
+
| `NetworkType` | [network_type.ts](../network_type.ts) | Enum (`EVM`, `COSMOS`, `TON`, `SOLANA`, `BTC`, `TRON`, `STELLAR`) + `registerNonEvmChain(chainId, type)` registry |
|
|
22
|
+
| Python base types | [chain_type.ts](../chain_type.ts), [transaction_prerequisite.ts](../transaction_prerequisite.ts), [signed_transaction.ts](../signed_transaction.ts), [transaction_simulation.ts](../transaction_simulation.ts), [wallet.base.ts](../wallet.base.ts), [asset_balance.ts](../asset_balance.ts), [transaction_json.ts](../transaction_json.ts) | Ports of omnichain-py `base/base.py`: `ChainType`, `WalletFamily`, `FiatCurrency`, prerequisites + `UnsignedTransactionWithPrerequisites`, signed transaction + broadcast response, simulation result, signed message + wallet bases, asset balance, and the `{type, chain_id, …}` JSON envelope (`UnsignedTransaction.fromJson` / `AbstractSignedTransaction.fromJson` dispatch on `type`). Used by Stellar and Tron |
|
|
22
23
|
| `TransactionStatus` | [transaction_status.ts](../transaction_status.ts) | Abstract base — chainId, status, inclusionAt, error, balanceChanges. Per-network subclasses: `EvmTransactionStatus` (+logs, +fees), `SolanaTransactionStatus` (+fees), `UtxoTransactionStatus` (+outputs, +vsize, +confirmations, +fees) |
|
|
23
24
|
| `AssetBalanceChange` | [transaction_status.ts](../transaction_status.ts) | Per-(wallet, asset) balance delta. `.balanceChangeMr: bigint` is the source of truth; `.balanceChangeHr: Decimal` is a lazy accessor derived via exact string-shift (never loses wei). `.fromHr(hr, decimals)` factory for Python-parity construction. `NestedBalanceChanges = Map<wallet, Map<assetHash, {token, change}>>` |
|
|
24
25
|
| `AbstractGasPricing` + subclasses | [abstract_gas_pricing.ts](../abstract_gas_pricing.ts), [evm/evm_gas_pricing.ts](../evm/evm_gas_pricing.ts), [solana/solana_gas_pricing.ts](../solana/solana_gas_pricing.ts), [utxo/utxo_gas_pricing.ts](../utxo/utxo_gas_pricing.ts) | Python-parity explicit-fee override types. `GasPricingType = FeePriority \| AbstractGasPricing`. Type surface only in Wave 2B — per-chain builders don't consume `CreateTransferRequest.gasPricing` yet |
|
|
@@ -34,6 +35,8 @@ mounted at each service's own `chain` directory.
|
|
|
34
35
|
| **EVM** (Ethereum, Arbitrum, Base, BNB, …) | [evm/](../evm) | `EvmChain` over `ethers.js` v6 + ERC-20 support — see [evm.md](./evm.md) |
|
|
35
36
|
| **UTXO** (Bitcoin, Litecoin, Dogecoin + testnets) | [utxo/](../utxo) | `UtxoChain` + `BtcChain` over `bitcoinjs-lib` v7 + `coininfo` — see [utxo.md](./utxo.md) |
|
|
36
37
|
| **Solana** (mainnet, devnet, testnet) | [solana/](../solana) | `SolanaChain` over `@solana/web3.js` v1 + SPL Token / Token-2022 — see [solana.md](./solana.md) |
|
|
38
|
+
| **Stellar** (mainnet, testnet) | [stellar/](../stellar) | `StellarChain` over `@stellar/stellar-sdk` (Horizon + Soroban RPC); import from `@getomnichain/omnichain/stellar` — see [stellar.md](./stellar.md) |
|
|
39
|
+
| **Tron** (mainnet, Shasta) | [tron/](../tron) | `TronChain` over the TronGrid HTTP API (tronpy port); import from `@getomnichain/omnichain/tron` — see [tron.md](./tron.md) |
|
|
37
40
|
| **TON** | [ton/](../ton) | `TonAddress` only (no full chain yet) |
|
|
38
41
|
|
|
39
42
|
## Quickstart
|
|
@@ -170,8 +173,9 @@ NetworkType` (`network_type.ts`).
|
|
|
170
173
|
Behavior in v0:
|
|
171
174
|
|
|
172
175
|
- **Static seeds at module load** (from `chain_ids.ts`): BTC family
|
|
173
|
-
(`-1/-2/-3`), Solana family (`-2000/-2001/-2002`),
|
|
174
|
-
(`-
|
|
176
|
+
(`-1/-2/-3`), Solana family (`-2000/-2001/-2002`), Stellar family
|
|
177
|
+
(`-3500/-3501`), TON family (`-4000/-4001`), Tron family
|
|
178
|
+
(`728126428/2494104990`).
|
|
175
179
|
- **`networkTypeOf(chainId)`**: returns the registered NetworkType if
|
|
176
180
|
present. For unregistered positive ids returns `EVM`. For unregistered
|
|
177
181
|
negative ids throws `ChainError(ChainNotSupported)` — fail-closed so a
|
|
@@ -192,8 +196,9 @@ Behavior in v0:
|
|
|
192
196
|
|
|
193
197
|
`addressFor(chainId, raw)` reads from this registry via `networkTypeOf`
|
|
194
198
|
and dispatches to the appropriate `Address` subclass — currently EVM,
|
|
195
|
-
Solana, BTC, TON
|
|
196
|
-
(
|
|
199
|
+
Solana, BTC, TON, Tron (`TronAddress`, canonical base58check `T…`) and
|
|
200
|
+
Stellar (`StellarAddress`, `G…`/`M…`). The COSMOS family throws
|
|
201
|
+
`ChainNotSupported` (no Address parser yet).
|
|
197
202
|
|
|
198
203
|
## Chain IDs
|
|
199
204
|
|
|
@@ -203,7 +208,9 @@ Solana, BTC, TON. TRON and COSMOS families throw `ChainNotSupported`
|
|
|
203
208
|
- BTC family: `-1` mainnet, `-2` testnet, `-3` signet
|
|
204
209
|
- LTC `-10`, DOGE `-12`, DASH `-14`, ZEC `-16`, BCH `-18` (mainnets only — testnets for these families are not defined in v0)
|
|
205
210
|
- Solana `-2000` mainnet, `-2001` testnet, `-2002` devnet
|
|
211
|
+
- Stellar `-3500` mainnet, `-3501` testnet
|
|
206
212
|
- TON `-4000` mainnet, `-4001` testnet
|
|
213
|
+
- Tron keeps its real positive ids (`728126428` mainnet, `2494104990` Shasta)
|
|
207
214
|
Consumers **should not** invent overlapping negative IDs for their own
|
|
208
215
|
chains. `registerNonEvmChain` throws `ChainError(InvalidArgument)` on
|
|
209
216
|
family conflict. Notable overlap: TON's native `global_id = -3` collides
|
|
@@ -272,3 +279,5 @@ Add `Foo` enum value to [network_type.ts](../network_type.ts), create
|
|
|
272
279
|
- [evm.md](./evm.md) — EVM chains and ERC-20
|
|
273
280
|
- [utxo.md](./utxo.md) — Bitcoin / Litecoin / Dogecoin, fee estimation, asset filtering
|
|
274
281
|
- [solana.md](./solana.md) — Solana, SPL Token, Token-2022, priority-fee model
|
|
282
|
+
- [stellar.md](./stellar.md) — Stellar classic + Soroban, trustlines, SEP-5/SEP-53 wallet
|
|
283
|
+
- [tron.md](./tron.md) — Tron TRX + TRC-20, energy fees, approvals, canonical transactions
|
package/docs/solana.md
CHANGED
|
@@ -161,6 +161,29 @@ decodes these into a `NestedBalanceChanges` — the same nested Map shape EVM em
|
|
|
161
161
|
and returns a `SolanaTransactionStatus` (extends `TransactionStatus`) with `fees:
|
|
162
162
|
SolanaTransactionFees` alongside. Wallet keys are the raw base58 (case-sensitive).
|
|
163
163
|
|
|
164
|
+
**Finality fields (RIN-296).** The status also carries four fields populated by firing
|
|
165
|
+
`getSignatureStatus` in parallel with `getTransaction`:
|
|
166
|
+
|
|
167
|
+
- `slot: number | null` — from `getTransaction.slot` on the Success path; from
|
|
168
|
+
`getSignatureStatus.slot` on the ledger-pruned fallback.
|
|
169
|
+
- `confirmations: number | null` — the raw RPC count (0..31) for non-final states,
|
|
170
|
+
normalised to the exported `SOLANA_FINALIZED_CONFIRMATIONS = 32` when the RPC reports
|
|
171
|
+
`null` (rooted). Saturates at 32 — consumers running a uniform `confirmationBlocks: 64`
|
|
172
|
+
gate across families should either special-case Solana or bound at 32.
|
|
173
|
+
- `confirmationStatus: 'processed' | 'confirmed' | 'finalized' | null` — raw RPC string.
|
|
174
|
+
- `signers: readonly string[]` — base58 signer keys in message order
|
|
175
|
+
(`staticAccountKeys[0..header.numRequiredSignatures]`). Empty on the ledger-pruned
|
|
176
|
+
fallback and on `notFound`.
|
|
177
|
+
|
|
178
|
+
**No `blockNumber`.** Solana slots are not block heights (skipped slots exist) and
|
|
179
|
+
`getChainTipHeight` returns a block height (0.3.3 fix). Consumers deriving finality from
|
|
180
|
+
`blockNumber` on other families must gate Solana on `confirmations`.
|
|
181
|
+
|
|
182
|
+
**Sig-status soft-fail (D2).** If `getSignatureStatus` errors while `getTransaction`
|
|
183
|
+
succeeds, the returned Success/Failed status keeps `slot` + `signers` populated but
|
|
184
|
+
`confirmations`/`confirmationStatus` are `null`. The whole read is not thrown — a working
|
|
185
|
+
tx read shouldn't fail because a metadata enrichment call failed.
|
|
186
|
+
|
|
164
187
|
Fallback path when `getTransaction` returns null:
|
|
165
188
|
- `getSignatureStatus` yields no value at all → `NotFound`.
|
|
166
189
|
- `getSignatureStatus` reports `finalized`/`confirmed` with `err` set →
|
package/docs/stellar.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Stellar
|
|
2
|
+
|
|
3
|
+
`@getomnichain/omnichain/stellar` is a port of omnichain-py's `impl/stellar` (`chains.py`, `assets.py`, `base.py`). Method names are camelCased, keyword arguments become one options object, and the behaviour — RPC calls, balance-change rules, fees, prerequisites, JSON wire format — is the Python behaviour. It is built on `@stellar/stellar-sdk` 15.x, the JS counterpart of Python's `stellar-sdk`.
|
|
4
|
+
|
|
5
|
+
The family is imported from `@getomnichain/omnichain/stellar` only. Like Python's `import omnichain`, the root entry does not load it.
|
|
6
|
+
|
|
7
|
+
## Chains and assets
|
|
8
|
+
|
|
9
|
+
| Export | Value |
|
|
10
|
+
|---|---|
|
|
11
|
+
| `StellarMainnet` | chain id `-3500`, Horizon `https://horizon.stellar.org`, Soroban RPC `https://mainnet.sorobanrpc.com`, explorer + Stellar Expert API `stellar.expert/explorer/public`, namespace `stellar:pubnet` |
|
|
12
|
+
| `StellarTestnet` | chain id `-3501`, Horizon `https://horizon-testnet.stellar.org`, Soroban RPC `https://soroban-testnet.stellar.org`, namespace `stellar:testnet` |
|
|
13
|
+
| `STELLAR_XLM`, `STELLAR_USDC`, `STELLAR_EURC`, `STELLAR_BNUSD` | mainnet native, SAC USDC/EURC, non-SAC Soroban BnUSD (18 decimals) |
|
|
14
|
+
| `STELLAR_TESTNET_XLM`, `STELLAR_TESTNET_USDC`, `STELLAR_TESTNET_EURC` | testnet counterparts |
|
|
15
|
+
| `STELLAR_MAINNET_STABLECOINS_PEG` | `USDC → USD`, `EURC → EUR` |
|
|
16
|
+
|
|
17
|
+
Block time is 5 s. RPC URLs resolve exactly like Python: constructor `horizonUrl` / `sorobanRpcUrl`, then `<NAME>_HORIZON_URL` / `<NAME>_SOROBAN_RPC_URL` (name upper-cased, spaces → `_`), then `STELLAR_<chainId>_HORIZON_URL` / `STELLAR_<chainId>_SOROBAN_RPC_URL`, then the defaults above.
|
|
18
|
+
|
|
19
|
+
`StellarAsset` has three shapes, validated at construction:
|
|
20
|
+
|
|
21
|
+
| Shape | Construct with | Identifier | Decimals |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| Native XLM | `issuer: null`, no contract id (or the network native contract id) | network native contract (`CAS3J7…` / `CDLZFC…`) | 7 |
|
|
24
|
+
| SAC (classic asset) | `code` + `issuer`, or `chain.createSacToken(code, issuer)` | contract id derived from code + issuer + network | 7 |
|
|
25
|
+
| Non-SAC Soroban token | `contractId` + `decimals`, or `await chain.createNonSacToken(contractId)` | the contract id | from the contract |
|
|
26
|
+
|
|
27
|
+
`chain.resolveAsset(contractId)` reads `decimals()` and `name()` through a Soroban simulation and returns the right shape (`"native"`, `"CODE:ISSUER"` or a plain token). `createAsset()` throws, as in Python.
|
|
28
|
+
|
|
29
|
+
## Moving funds
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import { Decimal } from 'decimal.js';
|
|
33
|
+
import { StellarMainnet, STELLAR_USDC, StellarWallet } from '@getomnichain/omnichain/stellar';
|
|
34
|
+
|
|
35
|
+
const { transaction, prerequisites } = await StellarMainnet.createTransferTransaction({
|
|
36
|
+
asset: STELLAR_USDC,
|
|
37
|
+
amountHr: new Decimal('25'),
|
|
38
|
+
senderAddress: sender,
|
|
39
|
+
receiverAddress: receiver,
|
|
40
|
+
memoText: 'invoice-42',
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- Native XLM or a SAC asset paid to an account (`G…`/`M…`) becomes a classic `Payment`. Anything else — a non-SAC token, or any asset paid to a contract (`C…`) — becomes a Soroban `transfer(from, to, amount)` invocation. Soroban transfers cannot carry a memo and the call throws if one is given.
|
|
45
|
+
- A SAC asset paid to an account always returns a `StellarChangeTrustLineTransactionPrerequisite` for the receiver (max limit `922337203685.4775807`). The receiver's wallet handles it with `handleTransactionPrerequisite`, which skips when the line is already high enough.
|
|
46
|
+
- `gasPricing` takes `FeePriority` (SLOW/NORMAL = network base fee, FAST = 2×) or `new StellarGasPricing({ baseFeeStroops })`; the result is never below 100 stroops.
|
|
47
|
+
- `createExactInSwapTransaction` asks Horizon for strict-send paths, takes the first route and sets `destMin = destination_amount × (1 − slippage/100)` rounded half-up to the receive asset's decimals.
|
|
48
|
+
- The unsigned transaction holds the *intent*. `buildTransactionEnvelope(chain)` loads the sequence number, fills the base fee, applies a 300 s time bound and, for Soroban, runs `prepareTransaction`.
|
|
49
|
+
|
|
50
|
+
## Signing and broadcasting
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
const wallet = StellarWallet.fromMnemonic(mnemonic); // m/44'/148'/0' (SEP-5)
|
|
54
|
+
await wallet.handleTransactionPrerequisites(prerequisites, StellarMainnet);
|
|
55
|
+
const signed = await wallet.signTransaction(transaction, StellarMainnet);
|
|
56
|
+
const response = await StellarMainnet.broadcastSignedTransaction(signed);
|
|
57
|
+
if (!response.isBroadcastConfirmed) {
|
|
58
|
+
// The tx may still be on-chain: check getTransactionStatus(response.txHash) before re-signing.
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
External signers call `transaction.buildTransactionEnvelope(chain)`, sign `envelope.hash()` and submit `envelope.toXDR()` through `chain.broadcast(xdr)` (the TS `Chain` adapter, which throws on rejection) or wrap it in `StellarSignedTransaction` for `broadcastSignedTransaction` (which never throws and returns `broadcastError`).
|
|
63
|
+
|
|
64
|
+
`StellarWallet` mirrors Python: `fromSecret`, `fromMnemonic(mnemonic, { derivationPath, passphrase })` (English BIP-39 checked exactly like python-mnemonic, SLIP-0010 ed25519, hardened-only `m/44'/148'/<account>'`), `derivationPath()`, `ensureMinimumTrustLine`, `closeTrustLine`, `handleTransactionPrerequisite`, `signTransaction`, `signMessage` / `verifySignature` (SEP-53) and `requestTestnetFaucetStroops` (Friendbot).
|
|
65
|
+
|
|
66
|
+
## Reading state
|
|
67
|
+
|
|
68
|
+
- `getAssetBalance(asset, owner)` — native XLM returns the *available* balance: total minus `(2 + subentries + sponsoring − sponsored) × 0.5 XLM`. SAC assets read the trustline; non-SAC tokens call `balance()` on the contract.
|
|
69
|
+
- `getWalletBalance(owner)`, `getTrustLineLimit(owner, asset)`, `getAccountNextSequence(owner)`, `getBaseFee()`.
|
|
70
|
+
- `getTransactionStatus(hash, { filteredWallets, filteredAssets })`:
|
|
71
|
+
- Classic transactions aggregate Horizon effects (`account_credited/debited`, `contract_credited/debited`, `account_created`). The starting balance of an account created by a Soroban native transfer is counted once.
|
|
72
|
+
- Soroban transactions decode SEP-41 `transfer` events from diagnostic events, read from Soroban RPC when it exposes `events.diagnosticEventsXdr`, otherwise from the Stellar Expert API.
|
|
73
|
+
- The fee is debited from the fee account in every successful status, regardless of the filters (Python behaviour). `memo` and `fees` are set on the status.
|
|
74
|
+
- `simulateTransaction({ transaction, senderWalletAddress })` — Soroban: `simulateTransaction` events + `minResourceFee`; classic: deltas predicted from the operations plus the fee.
|
|
75
|
+
|
|
76
|
+
## Differences from omnichain-py
|
|
77
|
+
|
|
78
|
+
| Python | TS | Why |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| Any Horizon error on the transaction lookup during status (429, 5xx) is reported as `NotFound` | Only a 404 is `NotFound`; other failures of that lookup throw `ChainError(RpcError)`. The follow-up ledger and effects lookups raise the stellar-sdk error, as in Python | A rate limit must not look like a dropped transaction |
|
|
81
|
+
| Non-SAC `getAssetBalance` divides with a float; other conversions use the 28-digit `Decimal` context | Exact decimal conversion everywhere | Avoids precision loss on 18-decimal tokens |
|
|
82
|
+
| Invalid secret seed error message contains the seed | Message omits the seed | Secrets never go into error strings |
|
|
83
|
+
| `secret_seed` / `_keypair` are plain attributes | `#private` fields; `wallet.secretSeed` still returns the seed | `JSON.stringify` and the default `util.inspect` of a wallet never print the seed |
|
|
84
|
+
| A zero `Payment` amount or `dest_min` (100 % slippage) builds, and the network rejects it at submit | `ChainError(InvalidArgument)` at build time; other amount errors use stellar-sdk's texts | stellar-sdk JS cannot build a zero operation |
|
|
85
|
+
| Soroban RPC response without an `events` object raises `AttributeError` | Falls back to Stellar Expert | Older RPC versions omit `events` |
|
|
86
|
+
| stellar-sdk rejects an amount by its `Decimal` exponent (`Decimal('1.00000000')`, `'1E+8'`) | The value's decimal places are checked | `decimal.js` normalises trailing zeros and exponents |
|
|
87
|
+
| `logger.info/warning` calls | No logging | The TS SDK has no logger |
|
|
88
|
+
|
|
89
|
+
The TS `Chain` adapters (`getBalance`, `createTransferUnsignedTransaction`, `broadcast`, `verifyMessageSignature`, `getChainTipHeight`) wrap the methods above.
|
|
90
|
+
- `createTransferUnsignedTransaction` rejects `isFullBalance`, because Python ignores the flag and the TS request has no amount when it is set.
|
|
91
|
+
- `createTransferUnsignedTransaction` can only return a transaction, so it refuses a transfer whose trustline prerequisite is still pending: the receiver has no trustline for the asset, or its limit is below the maximum, which is the check Python's `ensure_minimum_trust_line` makes. Use `createTransferTransaction` and handle the prerequisite with the receiver's wallet.
|
|
92
|
+
- `StellarChain` constructs for any chain id and never touches the network-type registry, as Python's constructor registers nothing.
|
|
93
|
+
- `broadcastSignedTransaction` posts the envelope and takes Horizon's `hash` like Python, without decoding `result_xdr`. The `broadcast` adapter returns the hash of the signed envelope (lowercase) and throws `RpcError` if Horizon answers a different one, compared case-insensitively.
|
|
94
|
+
- Soroban: a JSON-RPC error response is thrown as `SorobanRpcErrorResponse` (`ChainError(RpcError)`) with the server's message, `code` and `data`, as in Python, also with an HTTP error status. Other transport errors are `RpcError` with their own message. Contract calls return the simulation `results` as Python does, so a simulation error fails at `results[0]` with Python's `'NoneType' object is not subscriptable`. `prepare` assembles the transaction like stellar-sdk Python's `_assemble_transaction`: the fee is the classic fee plus `minResourceFee`. A `getTransaction` reply that fails Python's `GetTransactionResponse` model falls back to Stellar Expert, as in Python.
|
|
95
|
+
- `getBaseFee` follows stellar-sdk Python's `_handle_base_fee`: an empty `_embedded`, an empty `records` list or an empty first record gives 100, and the fee goes through Python's `int()`.
|
|
96
|
+
- `broadcast` maps a Horizon `400` on submit to `ChainError(BroadcastRejected)` with the result codes, and so does a SEP-29 memo-required refusal, which stellar-sdk raises before sending anything. Timeouts and other failures are `RpcError`, because the transaction may still land. A `200` without `hash` is Python's `KeyError('hash')`: `broadcastSignedTransaction` returns it as `broadcastError` and `broadcast` throws `RpcError`.
|
|
97
|
+
- Horizon and Soroban requests use stellar-sdk Python's `AiohttpClient` limits: 11 s for GET, 33 s for POST, at most 9 redirects (aiohttp's `max_redirects=10` raises on the 10th), and no proxy from the environment. The Stellar Expert call uses aiohttp's 300 s default.
|
|
98
|
+
- Credit asset codes are kept exactly as given, as in stellar-sdk Python. The JS `Asset` constructor uppercases `xlm`, so assets are built with the exact code, and predicted balance changes read operation assets from the XDR.
|
|
99
|
+
|
|
100
|
+
`addressFor` / `@IsAddress` validate `G…` / `M…` addresses without loading `@stellar/stellar-sdk`. `STELLAR_MAINNET_STABLECOINS_PEG` and `getWalletBalance` return an `AssetMap`, which looks assets up by value like a Python `dict`.
|
|
101
|
+
|
|
102
|
+
## Known upstream behaviour
|
|
103
|
+
|
|
104
|
+
- Soroban RPC currently returns diagnostic events at the top level of `getTransaction`, not under `events`, so Python — and therefore this port — resolves historical Soroban transactions through the Stellar Expert API.
|
|
105
|
+
- SDF's public Horizon keeps roughly one year of history; older transactions return `NotFound` from both SDKs.
|
|
106
|
+
|
|
107
|
+
## Known issues shared with omnichain-py
|
|
108
|
+
|
|
109
|
+
These are bugs in omnichain-py itself. They are kept for parity and tracked to be fixed in both SDKs:
|
|
110
|
+
|
|
111
|
+
- RIN-316 — any contract can emit a `transfer` event carrying a SAC topic and pose as USDC / XLM in status, and `resolveAsset` returns XLM for any contract whose `name()` is `"native"`.
|
|
112
|
+
- RIN-319 — a decimals fallback of 7 is cached after an RPC error, and Horizon effects are read from the first page (200) only.
|
|
113
|
+
- The ID of a muxed `M…` receiver is stripped to its `G…` account when a transfer is built.
|