@swapkit/toolboxes 4.0.0-beta.35 → 4.0.0-beta.37
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/dist/chunk-4yap1fvd.js +1 -0
- package/dist/chunk-5yxc1e69.js +1 -0
- package/dist/chunk-6f98phv2.js +1 -0
- package/dist/chunk-9bqegm61.js +1 -0
- package/dist/chunk-fazw0jvt.js +1 -0
- package/dist/chunk-s47y8512.js +1 -0
- package/dist/chunk-vtd17cje.js +1 -0
- package/dist/chunk-zcdeg6h9.js +1 -0
- package/dist/src/cosmos/index.cjs +1 -0
- package/dist/src/cosmos/index.cjs.map +1 -1
- package/dist/src/cosmos/index.js +1 -0
- package/dist/src/cosmos/index.js.map +1 -1
- package/dist/src/evm/index.cjs +1 -0
- package/dist/src/evm/index.js +1 -0
- package/dist/src/index.cjs +3 -2
- package/dist/src/index.cjs.map +3 -3
- package/dist/src/index.js +3 -2
- package/dist/src/index.js.map +3 -3
- package/dist/src/near/index.cjs +3 -2
- package/dist/src/near/index.cjs.map +4 -4
- package/dist/src/near/index.js +3 -2
- package/dist/src/near/index.js.map +4 -4
- package/dist/src/radix/index.cjs +1 -0
- package/dist/src/radix/index.js +1 -0
- package/dist/src/ripple/index.cjs +1 -0
- package/dist/src/ripple/index.js +1 -0
- package/dist/src/solana/index.cjs +1 -0
- package/dist/src/solana/index.js +1 -0
- package/dist/src/substrate/index.cjs +1 -0
- package/dist/src/substrate/index.js +1 -0
- package/dist/src/tron/index.cjs +3 -2
- package/dist/src/tron/index.cjs.map +3 -3
- package/dist/src/tron/index.js +3 -2
- package/dist/src/tron/index.js.map +3 -3
- package/dist/src/utxo/index.cjs +1 -0
- package/dist/src/utxo/index.js +1 -0
- package/package.json +3 -3
- package/src/cosmos/util.ts +1 -1
- package/src/index.ts +3 -2
- package/src/near/helpers/core.ts +12 -10
- package/src/near/toolbox.ts +16 -5
- package/src/near/types.ts +2 -2
- package/src/tron/index.ts +1 -0
- package/src/tron/toolbox.ts +157 -9
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/near/toolbox.ts", "../src/near/helpers/core.ts", "../src/near/helpers/gasEstimation.ts", "../src/near/helpers/nep141.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {\n AssetValue,\n BaseDecimal,\n Chain,\n type DerivationPathArray,\n SKConfig,\n SwapKitError,\n} from \"@swapkit/helpers\";\nimport type { Account } from \"near-api-js\";\nimport type { SignedTransaction, Transaction } from \"near-api-js/lib/transaction\";\nimport {\n getFullAccessPublicKey,\n getNearSignerFromPhrase,\n getNearSignerFromPrivateKey,\n validateNearAddress,\n} from \"./helpers\";\nimport {\n GAS_COSTS,\n estimateBatchGas,\n getContractMethodGas,\n isAccountCreation,\n isBatchTransaction,\n isContractCall,\n isContractDeployment,\n isCustomEstimator,\n isSimpleTransfer,\n} from \"./helpers/gasEstimation\";\nimport { createNEP141Token } from \"./helpers/nep141\";\nimport type {\n NearCreateTransactionParams,\n NearFunctionCallParams,\n NearToolboxParams,\n NearTransferParams,\n} from \"./types\";\nimport type { NearContractInterface, NearGasEstimateParams } from \"./types/contract\";\n\nexport async function getNearToolbox(toolboxParams?: NearToolboxParams) {\n const { P, match } = await import(\"ts-pattern\");\n const { providers } = await import(\"near-api-js\");\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, async (params) => {\n const signer = await getNearSignerFromPhrase(params);\n return signer;\n })\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n const url = SKConfig.get(\"rpcUrls\")[Chain.Near];\n\n const provider = new providers.JsonRpcProvider({ url });\n\n async function getAccount(address?: string) {\n const { Account } = await import(\"near-api-js\");\n\n const _address = address || (await getAddress());\n\n const account = new Account(_address, provider, signer);\n\n return account;\n }\n\n async function getAddress() {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n const address = await signer.getAddress();\n return address;\n }\n\n async function transfer(params: NearTransferParams) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const { recipient, assetValue } = params;\n\n if (!validateNearAddress(recipient)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\");\n }\n\n const account = await getAccount();\n\n if (assetValue.isGasAsset === false) {\n // NEP-141 token transfer\n const contractId = assetValue.address;\n if (!contractId) {\n throw new SwapKitError(\"toolbox_near_missing_contract_address\");\n }\n\n const amount = assetValue.getBaseValue(\"string\");\n\n return callFunction({\n contractId,\n methodName: \"ft_transfer\",\n args: {\n receiver_id: recipient,\n amount,\n memo: params.memo,\n },\n });\n }\n\n try {\n const transferAmount = assetValue.getBaseValue(\"string\");\n\n const result = await account.transfer({\n receiverId: recipient,\n amount: transferAmount,\n });\n\n return result.transaction.hash;\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_transfer_failed\", { error });\n }\n }\n\n async function createTransaction(params: NearCreateTransactionParams) {\n const { recipient, assetValue, memo, feeRate: gas, attachedDeposit, sender: signerId } = params;\n\n // Handle NEP-141 token transfers\n if (!assetValue.isGasAsset) {\n const contractId = assetValue.address;\n if (!contractId) {\n throw new SwapKitError(\"toolbox_near_missing_contract_address\");\n }\n\n return createContractFunctionCall({\n sender: signerId,\n contractId,\n methodName: \"ft_transfer\",\n args: {\n receiver_id: recipient,\n amount: assetValue.getBaseValue(\"string\"),\n memo: memo || null,\n },\n gas: gas.toString() || \"100000000000000\", // 100 TGas default\n attachedDeposit: \"1\", // 1 yoctoNEAR required for NEP-141 transfers\n });\n }\n\n // Native NEAR transfer\n const { publicKey, nonce } = await getFullAccessPublicKey(provider, signerId);\n const baseAmount = assetValue.getBaseValue(\"bigint\");\n\n const { SCHEMA } = await import(\"near-api-js/lib/transaction\");\n const { transactions, utils } = await import(\"near-api-js\");\n\n const txActions = [transactions.transfer(baseAmount)];\n\n if (memo && attachedDeposit) {\n txActions.push(\n transactions.functionCall(\"memo\", { memo }, BigInt(gas), BigInt(attachedDeposit)),\n );\n }\n\n const block = await provider.block({ finality: \"final\" });\n const blockHash = utils.serialize.base_decode(block.header.hash);\n\n const transaction = transactions.createTransaction(\n signerId,\n publicKey,\n recipient,\n nonce,\n txActions,\n blockHash,\n );\n\n const serializedTx = utils.serialize.serialize(SCHEMA.Transaction, transaction);\n const serializedBase64 = Buffer.from(serializedTx).toString(\"base64\");\n\n return {\n serialized: serializedBase64,\n publicKey: publicKey.toString(),\n details: {\n signerId,\n nonce: nonce,\n blockHash: utils.serialize.base_encode(blockHash),\n },\n };\n }\n\n async function createContractFunctionCall(params: {\n sender: string;\n contractId: string;\n methodName: string;\n args: any;\n gas: string;\n attachedDeposit: string;\n }) {\n const { sender: accountId } = params;\n\n const { publicKey, nonce } = await getFullAccessPublicKey(provider, accountId);\n\n const { SCHEMA } = await import(\"near-api-js/lib/transaction\");\n const { transactions, utils } = await import(\"near-api-js\");\n const block = await provider.block({ finality: \"final\" });\n const blockHash = utils.serialize.base_decode(block.header.hash);\n\n const actions = [\n transactions.functionCall(\n params.methodName,\n Buffer.from(JSON.stringify(params.args)),\n BigInt(params.gas),\n BigInt(params.attachedDeposit),\n ),\n ];\n\n const transaction = transactions.createTransaction(\n accountId,\n publicKey,\n params.contractId,\n nonce,\n actions,\n blockHash,\n );\n\n const serializedTx = utils.serialize.serialize(SCHEMA.Transaction, transaction);\n const serializedBase64 = Buffer.from(serializedTx).toString(\"base64\");\n\n return {\n serialized: serializedBase64,\n publicKey: publicKey.toString(),\n details: {\n signerId: accountId,\n receiverId: params.contractId,\n methodName: params.methodName,\n nonce: nonce,\n blockHash: utils.serialize.base_encode(blockHash),\n },\n };\n }\n\n async function signTransaction(transaction: Transaction) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n // Use the new signer interface method\n const [_hash, signedTx] = await signer.signTransaction(transaction);\n return signedTx;\n }\n\n async function broadcastTransaction(signedTransaction: SignedTransaction) {\n const result = await provider.sendTransaction(signedTransaction);\n return result.transaction.hash;\n }\n\n async function estimateTransactionFee(params: NearTransferParams | NearGasEstimateParams) {\n if (\"assetValue\" in params) {\n const baseTransferCost = \"115123062500\"; // gas units for transfer\n const receiptCreationCost = \"108059500000\"; // gas units for receipt\n\n const totalGasUnits = BigInt(baseTransferCost) + BigInt(receiptCreationCost);\n\n const gasPrice = await getCurrentGasPrice();\n\n // NEAR doesn't support fee multipliers - gas price is fixed by the network\n const totalCostYocto = totalGasUnits * BigInt(gasPrice.toString());\n\n return AssetValue.from({\n chain: Chain.Near,\n value: totalCostYocto.toString(),\n fromBaseDecimal: BaseDecimal[Chain.Near],\n });\n }\n\n // Handle new gas estimation params\n const account = signer ? await getAccount() : undefined;\n return estimateGas(params, account);\n }\n\n async function getCurrentGasPrice() {\n try {\n const result = await provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"system\",\n method_name: \"gas_price\",\n args_base64: \"\",\n });\n\n return result;\n } catch {\n return \"100000000\"; // 0.0001 NEAR per Tgas\n }\n }\n\n async function createSubAccount(subAccountId: string, publicKey: string, initialBalance: string) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const account = await getAccount();\n const { utils } = await import(\"near-api-js\");\n\n const balanceInYocto = utils.format.parseNearAmount(initialBalance) || \"0\";\n\n const result = await account.createAccount(\n subAccountId,\n utils.PublicKey.fromString(publicKey),\n BigInt(balanceInYocto),\n );\n\n return result.transaction.hash;\n }\n\n async function callFunction(params: NearFunctionCallParams) {\n try {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const { transactions } = await import(\"near-api-js\");\n\n const { contractId, methodName, args, deposit } = params;\n const account = await getAccount();\n\n const estimatedGas = await estimateGas({\n methodName,\n args: args || {},\n contractId,\n });\n\n const functionAction = transactions.functionCall(\n methodName,\n args || {},\n estimatedGas.getBaseValue(\"bigint\"),\n BigInt(deposit || \"0\"),\n );\n\n const result = await account.signAndSendTransaction({\n receiverId: contractId,\n actions: [functionAction],\n });\n\n return result.transaction.hash;\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_transfer_failed\", { error });\n }\n }\n\n // Create typed contract interface\n async function createContract(contractInterface: NearContractInterface) {\n const { createNearContract } = await import(\"./helpers/contractFactory\");\n const account = await getAccount();\n\n return createNearContract({\n account,\n contractId: contractInterface.contractId,\n viewMethods: contractInterface.viewMethods,\n changeMethods: contractInterface.changeMethods,\n });\n }\n\n async function executeBatchTransaction(batch: { receiverId: string; actions: any[] }) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n if (batch.actions.length === 0) {\n throw new SwapKitError(\"toolbox_near_empty_batch\");\n }\n\n const account = await getAccount();\n\n // Use account.signAndSendTransaction for batch operations\n const result = await account.signAndSendTransaction({\n receiverId: batch.receiverId,\n actions: batch.actions,\n });\n\n return result.transaction.hash;\n }\n\n async function nep141(contractId: string) {\n const account = await getAccount();\n return createNEP141Token({ contractId, account });\n }\n\n async function getBalance(address: string) {\n try {\n const account = await getAccount(address);\n\n let nativeBalance: AssetValue;\n try {\n const value = await account.getBalance();\n\n nativeBalance = AssetValue.from({\n chain: Chain.Near,\n value,\n fromBaseDecimal: BaseDecimal[Chain.Near],\n });\n } catch {\n nativeBalance = AssetValue.from({\n chain: Chain.Near,\n value: \"0\",\n fromBaseDecimal: BaseDecimal[Chain.Near],\n });\n }\n\n // // Then, fetch token balances from API\n // let tokenBalances: AssetValue[] = [];\n // try {\n // const apiBalances = await SwapKitApi.getChainBalance({\n // chain: Chain.Near,\n // address,\n // scamFilter,\n // });\n\n // tokenBalances = apiBalances\n // .filter(({ identifier }) => identifier !== Chain.Near) // Filter out native NEAR\n // .map(({ identifier, value, decimal }) => {\n // return new AssetValue({\n // decimal: decimal || BaseDecimal[Chain.Near],\n // value,\n // identifier,\n // });\n // });\n // } catch (error) {\n // // If API fails, just return on-chain balance\n // console.warn(\"Failed to fetch token balances from API:\", error);\n // }\n\n // Merge native balance with token balances\n // return [nativeBalance, ...tokenBalances];\n return [nativeBalance];\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_balance_failed\", { error });\n }\n }\n\n async function estimateGas(params: NearGasEstimateParams, account?: Account) {\n const gasInTGas = await match(params)\n .when(isSimpleTransfer, () => GAS_COSTS.SIMPLE_TRANSFER)\n .when(isContractCall, (p) => getContractMethodGas(p.methodName))\n .when(isBatchTransaction, (p) => estimateBatchGas(p.actions))\n .when(isAccountCreation, () => GAS_COSTS.ACCOUNT_CREATION)\n .when(isContractDeployment, () => GAS_COSTS.CONTRACT_DEPLOYMENT)\n .when(isCustomEstimator, (p) => {\n if (!account) {\n throw new SwapKitError(\"toolbox_near_no_account\");\n }\n return p.customEstimator(account);\n })\n .otherwise(() => {\n throw new SwapKitError(\"toolbox_near_invalid_gas_params\");\n });\n\n // Convert TGas to gas price in NEAR\n const gasPrice = await getGasPrice();\n const gasInUnits = BigInt(gasInTGas) * BigInt(10 ** 12); // Convert TGas to gas units\n const costInYoctoNear = gasInUnits * BigInt(gasPrice);\n\n return AssetValue.from({\n chain: Chain.Near,\n value: costInYoctoNear,\n fromBaseDecimal: BaseDecimal[Chain.Near],\n });\n }\n\n // Get current gas price from network\n async function getGasPrice() {\n try {\n const result = await provider.gasPrice(null);\n return result.gas_price || \"100000000\";\n } catch (_error) {\n // Fallback to default\n return \"100000000\";\n }\n }\n\n return {\n getAddress,\n getPublicKey: async () => (signer ? (await signer.getPublicKey()).toString() : \"\"),\n provider,\n transfer,\n createTransaction,\n createContractFunctionCall,\n estimateTransactionFee,\n broadcastTransaction,\n signTransaction,\n getBalance,\n validateAddress: validateNearAddress,\n getSignerFromPhrase: (params: {\n phrase: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n }) => getNearSignerFromPhrase(params),\n getSignerFromPrivateKey: getNearSignerFromPrivateKey,\n callFunction,\n createSubAccount,\n createContract,\n executeBatchTransaction,\n nep141,\n getGasPrice,\n estimateGas,\n };\n}\n",
|
|
6
|
-
"import type { Provider } from \"@near-js/providers\";\nimport { type DerivationPathArray, SwapKitError, derivationPathToString } from \"@swapkit/helpers\";\nimport { type KeyPair, KeyPairSigner } from \"near-api-js\";\nimport type { NearSigner } from \"../types\";\n\nexport async function
|
|
5
|
+
"import {\n AssetValue,\n BaseDecimal,\n Chain,\n type DerivationPathArray,\n SKConfig,\n SwapKitError,\n} from \"@swapkit/helpers\";\nimport type { Account } from \"near-api-js\";\nimport type { SignedTransaction, Transaction } from \"near-api-js/lib/transaction\";\nimport {\n getFullAccessPublicKey,\n getNearSignerFromPhrase,\n getNearSignerFromPrivateKey,\n getValidateNearAddress,\n} from \"./helpers\";\nimport {\n GAS_COSTS,\n estimateBatchGas,\n getContractMethodGas,\n isAccountCreation,\n isBatchTransaction,\n isContractCall,\n isContractDeployment,\n isCustomEstimator,\n isSimpleTransfer,\n} from \"./helpers/gasEstimation\";\nimport { createNEP141Token } from \"./helpers/nep141\";\nimport type {\n NearCreateTransactionParams,\n NearFunctionCallParams,\n NearToolboxParams,\n NearTransferParams,\n} from \"./types\";\nimport type { NearContractInterface, NearGasEstimateParams } from \"./types/contract\";\n\nexport async function getNearToolbox(toolboxParams?: NearToolboxParams) {\n const { P, match } = await import(\"ts-pattern\");\n const { providers } = await import(\"near-api-js\");\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, async (params) => {\n const signer = await getNearSignerFromPhrase(params);\n return signer;\n })\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n const url = SKConfig.get(\"rpcUrls\")[Chain.Near];\n\n const provider = new providers.JsonRpcProvider({ url });\n\n async function getAccount(address?: string) {\n const { Account } = await import(\"near-api-js\");\n\n const _address = address || (await getAddress());\n\n const account = new Account(_address, provider, signer);\n\n return account;\n }\n\n async function getAddress() {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n const address = await signer.getAddress();\n return address;\n }\n\n async function transfer(params: NearTransferParams) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const { recipient, assetValue } = params;\n\n const nearValidateAddress = await getValidateNearAddress();\n\n if (!nearValidateAddress(recipient)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\");\n }\n\n const account = await getAccount();\n\n if (assetValue.isGasAsset === false) {\n // NEP-141 token transfer\n const contractId = assetValue.address;\n if (!contractId) {\n throw new SwapKitError(\"toolbox_near_missing_contract_address\");\n }\n\n const amount = assetValue.getBaseValue(\"string\");\n\n return callFunction({\n contractId,\n methodName: \"ft_transfer\",\n args: {\n receiver_id: recipient,\n amount,\n memo: params.memo,\n },\n });\n }\n\n try {\n const transferAmount = assetValue.getBaseValue(\"string\");\n\n const result = await account.transfer({\n receiverId: recipient,\n amount: transferAmount,\n });\n\n return result.transaction_outcome.id;\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_transfer_failed\", { error });\n }\n }\n\n async function createTransaction(params: NearCreateTransactionParams) {\n const { recipient, assetValue, memo, feeRate: gas, attachedDeposit, sender: signerId } = params;\n const validateNearAddress = await getValidateNearAddress();\n\n if (!validateNearAddress(recipient)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\", { address: recipient });\n }\n\n if (!validateNearAddress(signerId)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\", { address: signerId });\n }\n\n // Handle NEP-141 token transfers\n if (!assetValue.isGasAsset) {\n const contractId = assetValue.address;\n if (!contractId) {\n throw new SwapKitError(\"toolbox_near_missing_contract_address\");\n }\n\n return createContractFunctionCall({\n sender: signerId,\n contractId,\n methodName: \"ft_transfer\",\n args: {\n receiver_id: recipient,\n amount: assetValue.getBaseValue(\"string\"),\n memo: memo || null,\n },\n gas: gas.toString() || \"100000000000000\", // 100 TGas default\n attachedDeposit: \"1\", // 1 yoctoNEAR required for NEP-141 transfers\n });\n }\n\n // Native NEAR transfer\n const { publicKey, nonce } = await getFullAccessPublicKey(provider, signerId);\n const baseAmount = assetValue.getBaseValue(\"bigint\");\n\n const { SCHEMA } = await import(\"near-api-js/lib/transaction\");\n const { transactions, utils } = await import(\"near-api-js\");\n\n const txActions = [transactions.transfer(baseAmount)];\n\n if (memo && attachedDeposit) {\n txActions.push(\n transactions.functionCall(\"memo\", { memo }, BigInt(gas), BigInt(attachedDeposit)),\n );\n }\n\n const block = await provider.block({ finality: \"final\" });\n const blockHash = utils.serialize.base_decode(block.header.hash);\n\n const transaction = transactions.createTransaction(\n signerId,\n publicKey,\n recipient,\n nonce,\n txActions,\n blockHash,\n );\n\n const serializedTx = utils.serialize.serialize(SCHEMA.Transaction, transaction);\n const serializedBase64 = Buffer.from(serializedTx).toString(\"base64\");\n\n return {\n serialized: serializedBase64,\n publicKey: publicKey.toString(),\n details: {\n signerId,\n nonce: nonce,\n blockHash: utils.serialize.base_encode(blockHash),\n },\n };\n }\n\n async function createContractFunctionCall(params: {\n sender: string;\n contractId: string;\n methodName: string;\n args: any;\n gas: string;\n attachedDeposit: string;\n }) {\n const { sender: accountId } = params;\n\n const { publicKey, nonce } = await getFullAccessPublicKey(provider, accountId);\n\n const { SCHEMA } = await import(\"near-api-js/lib/transaction\");\n const { transactions, utils } = await import(\"near-api-js\");\n const block = await provider.block({ finality: \"final\" });\n const blockHash = utils.serialize.base_decode(block.header.hash);\n\n const actions = [\n transactions.functionCall(\n params.methodName,\n Buffer.from(JSON.stringify(params.args)),\n BigInt(params.gas),\n BigInt(params.attachedDeposit),\n ),\n ];\n\n const transaction = transactions.createTransaction(\n accountId,\n publicKey,\n params.contractId,\n nonce,\n actions,\n blockHash,\n );\n\n const serializedTx = utils.serialize.serialize(SCHEMA.Transaction, transaction);\n const serializedBase64 = Buffer.from(serializedTx).toString(\"base64\");\n\n return {\n serialized: serializedBase64,\n publicKey: publicKey.toString(),\n details: {\n signerId: accountId,\n receiverId: params.contractId,\n methodName: params.methodName,\n nonce: nonce,\n blockHash: utils.serialize.base_encode(blockHash),\n },\n };\n }\n\n async function signTransaction(transaction: Transaction) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n // Use the new signer interface method\n const [_hash, signedTx] = await signer.signTransaction(transaction);\n return signedTx;\n }\n\n async function broadcastTransaction(signedTransaction: SignedTransaction) {\n const result = await provider.sendTransaction(signedTransaction);\n return result.transaction.hash;\n }\n\n async function estimateTransactionFee(params: NearTransferParams | NearGasEstimateParams) {\n if (\"assetValue\" in params) {\n const baseTransferCost = \"115123062500\"; // gas units for transfer\n const receiptCreationCost = \"108059500000\"; // gas units for receipt\n\n const totalGasUnits = BigInt(baseTransferCost) + BigInt(receiptCreationCost);\n\n const gasPrice = await getCurrentGasPrice();\n\n // NEAR doesn't support fee multipliers - gas price is fixed by the network\n const totalCostYocto = totalGasUnits * BigInt(gasPrice.toString());\n\n return AssetValue.from({\n chain: Chain.Near,\n value: totalCostYocto.toString(),\n fromBaseDecimal: BaseDecimal[Chain.Near],\n });\n }\n\n // Handle new gas estimation params\n const account = signer ? await getAccount() : undefined;\n return estimateGas(params, account);\n }\n\n async function getCurrentGasPrice() {\n try {\n const result = await provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"system\",\n method_name: \"gas_price\",\n args_base64: \"\",\n });\n\n return result;\n } catch {\n return \"100000000\"; // 0.0001 NEAR per Tgas\n }\n }\n\n async function createSubAccount(subAccountId: string, publicKey: string, initialBalance: string) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const account = await getAccount();\n const { utils } = await import(\"near-api-js\");\n\n const balanceInYocto = utils.format.parseNearAmount(initialBalance) || \"0\";\n\n const result = await account.createAccount(\n subAccountId,\n utils.PublicKey.fromString(publicKey),\n BigInt(balanceInYocto),\n );\n\n return result.transaction.hash;\n }\n\n async function callFunction(params: NearFunctionCallParams) {\n try {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const { transactions } = await import(\"near-api-js\");\n\n const { contractId, methodName, args, deposit } = params;\n const account = await getAccount();\n\n const estimatedGas = await estimateGas({\n methodName,\n args: args || {},\n contractId,\n });\n\n const functionAction = transactions.functionCall(\n methodName,\n args || {},\n estimatedGas.getBaseValue(\"bigint\"),\n BigInt(deposit || \"0\"),\n );\n\n const result = await account.signAndSendTransaction({\n receiverId: contractId,\n actions: [functionAction],\n });\n\n return result.transaction_outcome.id;\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_transfer_failed\", { error });\n }\n }\n\n // Create typed contract interface\n async function createContract(contractInterface: NearContractInterface) {\n const { createNearContract } = await import(\"./helpers/contractFactory\");\n const account = await getAccount();\n\n return createNearContract({\n account,\n contractId: contractInterface.contractId,\n viewMethods: contractInterface.viewMethods,\n changeMethods: contractInterface.changeMethods,\n });\n }\n\n async function executeBatchTransaction(batch: { receiverId: string; actions: any[] }) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n if (batch.actions.length === 0) {\n throw new SwapKitError(\"toolbox_near_empty_batch\");\n }\n\n const account = await getAccount();\n\n // Use account.signAndSendTransaction for batch operations\n const result = await account.signAndSendTransaction({\n receiverId: batch.receiverId,\n actions: batch.actions,\n });\n\n return result.transaction.hash;\n }\n\n async function nep141(contractId: string) {\n const account = await getAccount();\n return createNEP141Token({ contractId, account });\n }\n\n async function getBalance(address: string) {\n try {\n const account = await getAccount(address);\n\n let nativeBalance: AssetValue;\n try {\n const value = await account.getBalance();\n\n nativeBalance = AssetValue.from({\n chain: Chain.Near,\n value,\n fromBaseDecimal: BaseDecimal[Chain.Near],\n });\n } catch {\n nativeBalance = AssetValue.from({\n chain: Chain.Near,\n value: \"0\",\n fromBaseDecimal: BaseDecimal[Chain.Near],\n });\n }\n\n // // Then, fetch token balances from API\n // let tokenBalances: AssetValue[] = [];\n // try {\n // const apiBalances = await SwapKitApi.getChainBalance({\n // chain: Chain.Near,\n // address,\n // scamFilter,\n // });\n\n // tokenBalances = apiBalances\n // .filter(({ identifier }) => identifier !== Chain.Near) // Filter out native NEAR\n // .map(({ identifier, value, decimal }) => {\n // return new AssetValue({\n // decimal: decimal || BaseDecimal[Chain.Near],\n // value,\n // identifier,\n // });\n // });\n // } catch (error) {\n // // If API fails, just return on-chain balance\n // console.warn(\"Failed to fetch token balances from API:\", error);\n // }\n\n // Merge native balance with token balances\n // return [nativeBalance, ...tokenBalances];\n return [nativeBalance];\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_balance_failed\", { error });\n }\n }\n\n async function estimateGas(params: NearGasEstimateParams, account?: Account) {\n const gasInTGas = await match(params)\n .when(isSimpleTransfer, () => GAS_COSTS.SIMPLE_TRANSFER)\n .when(isContractCall, (p) => getContractMethodGas(p.methodName))\n .when(isBatchTransaction, (p) => estimateBatchGas(p.actions))\n .when(isAccountCreation, () => GAS_COSTS.ACCOUNT_CREATION)\n .when(isContractDeployment, () => GAS_COSTS.CONTRACT_DEPLOYMENT)\n .when(isCustomEstimator, (p) => {\n if (!account) {\n throw new SwapKitError(\"toolbox_near_no_account\");\n }\n return p.customEstimator(account);\n })\n .otherwise(() => {\n throw new SwapKitError(\"toolbox_near_invalid_gas_params\");\n });\n\n // Convert TGas to gas price in NEAR\n const gasPrice = await getGasPrice();\n const gasInUnits = BigInt(gasInTGas) * BigInt(10 ** 12); // Convert TGas to gas units\n const costInYoctoNear = gasInUnits * BigInt(gasPrice);\n\n return AssetValue.from({\n chain: Chain.Near,\n value: costInYoctoNear,\n fromBaseDecimal: BaseDecimal[Chain.Near],\n });\n }\n\n // Get current gas price from network\n async function getGasPrice() {\n try {\n const result = await provider.gasPrice(null);\n return result.gas_price || \"100000000\";\n } catch (_error) {\n // Fallback to default\n return \"100000000\";\n }\n }\n\n return {\n getAddress,\n getPublicKey: async () => (signer ? (await signer.getPublicKey()).toString() : \"\"),\n provider,\n transfer,\n createTransaction,\n createContractFunctionCall,\n estimateTransactionFee,\n broadcastTransaction,\n signTransaction,\n getBalance,\n validateAddress: await getValidateNearAddress(),\n getSignerFromPhrase: (params: {\n phrase: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n }) => getNearSignerFromPhrase(params),\n getSignerFromPrivateKey: getNearSignerFromPrivateKey,\n callFunction,\n createSubAccount,\n createContract,\n executeBatchTransaction,\n nep141,\n getGasPrice,\n estimateGas,\n };\n}\n",
|
|
6
|
+
"import type { Provider } from \"@near-js/providers\";\nimport { type DerivationPathArray, SwapKitError, derivationPathToString } from \"@swapkit/helpers\";\nimport { type KeyPair, KeyPairSigner } from \"near-api-js\";\nimport type { NearSigner } from \"../types\";\n\nexport async function getValidateNearAddress() {\n const { validateAccountId } = await import(\"near-sdk-js\");\n return (address: string) => {\n // Use the official NEAR SDK validation function if available\n try {\n return validateAccountId(address);\n } catch {\n const ACCOUNT_ID_REGEX = /^(([a-z\\d]+[-_])*[a-z\\d]+\\.)*([a-z\\d]+[-_])*[a-z\\d]+$/;\n\n return address.length >= 2 && address.length <= 64 && ACCOUNT_ID_REGEX.test(address);\n }\n };\n}\n\nexport async function getNearSignerFromPhrase(params: {\n phrase: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n}) {\n const { parseSeedPhrase } = await import(\"near-seed-phrase\");\n const { KeyPair } = await import(\"near-api-js\");\n\n // Handle derivation path logic here\n // NEAR uses a 3-level derivation path: m/44'/397'/index'\n const index = params.index || 0;\n const derivationPath = params.derivationPath\n ? derivationPathToString(params.derivationPath.slice(0, 3) as [number, number, number])\n : `m/44'/397'/${index}'`;\n\n const { secretKey } = parseSeedPhrase(params.phrase, derivationPath);\n const keyPair = KeyPair.fromString(secretKey as any);\n\n return createNearSignerFromKeyPair(keyPair);\n}\n\nexport async function getNearSignerFromPrivateKey(privateKey: string) {\n const { KeyPair } = await import(\"near-api-js/lib/utils\");\n const keyPair = KeyPair.fromString(privateKey as any);\n return createNearSignerFromKeyPair(keyPair);\n}\n\nclass SKKeyPairSigner extends KeyPairSigner {\n #keyPair: KeyPair;\n\n constructor(keyPair: KeyPair) {\n super(keyPair);\n this.#keyPair = keyPair;\n }\n\n getAddress(): Promise<string> {\n // For implicit accounts, derive account ID from public key\n // NEAR implicit accounts use hex representation of the public key\n const publicKey = this.#keyPair.getPublicKey();\n const hexAddress = Buffer.from(publicKey.data).toString(\"hex\");\n return Promise.resolve(hexAddress);\n }\n}\n\nfunction createNearSignerFromKeyPair(keyPair: KeyPair): NearSigner {\n const keyPairSigner = new SKKeyPairSigner(keyPair);\n\n return keyPairSigner;\n}\n\nexport async function getFullAccessPublicKey(provider: Provider, accountId: string) {\n // Get the first full access key for the account\n const response = await provider.query({\n request_type: \"view_access_key_list\",\n finality: \"final\",\n account_id: accountId,\n });\n\n const fullAccessKey = (response as any).keys.find(\n (key: any) => key.access_key.permission === \"FullAccess\",\n );\n\n if (!fullAccessKey) {\n throw new SwapKitError(\"toolbox_near_invalid_address\");\n }\n\n const { utils } = await import(\"near-api-js\");\n const publicKey = utils.PublicKey.fromString(fullAccessKey.public_key);\n const nonce = (fullAccessKey.access_key.nonce as number) || 0;\n\n return { publicKey, nonce };\n}\n",
|
|
7
7
|
"import type { Account } from \"near-api-js\";\nimport type { NearGasEstimateParams } from \"../types/contract\";\n\n// Gas constants (in TGas - 10^12 gas units)\nexport const GAS_COSTS = {\n SIMPLE_TRANSFER: \"1\", // 1 TGas\n TOKEN_TRANSFER: \"100\", // 100 TGas\n CONTRACT_CALL: \"100\", // 100 TGas base\n ACCOUNT_CREATION: \"30\", // 30 TGas\n CONTRACT_DEPLOYMENT: \"200\", // 200 TGas\n ACCESS_KEY_ADDITION: \"5\", // 5 TGas\n ACCESS_KEY_DELETION: \"5\", // 5 TGas\n STAKE: \"10\", // 10 TGas\n STORAGE_DEPOSIT: \"100\", // 100 TGas\n} as const;\n\n// Type guards for discriminated union\nexport function isSimpleTransfer(\n params: NearGasEstimateParams,\n): params is { recipient: string; amount: string } {\n return \"recipient\" in params && \"amount\" in params && !(\"contractId\" in params);\n}\n\nexport function isContractCall(params: NearGasEstimateParams): params is {\n contractId: string;\n methodName: string;\n args?: Record<string, any>;\n attachedDeposit?: string;\n} {\n return \"contractId\" in params && \"methodName\" in params;\n}\n\nexport function isBatchTransaction(params: NearGasEstimateParams): params is { actions: any[] } {\n return \"actions\" in params;\n}\n\nexport function isAccountCreation(params: NearGasEstimateParams): params is {\n newAccountId: string;\n publicKey?: string;\n} {\n return \"newAccountId\" in params;\n}\n\nexport function isContractDeployment(\n params: NearGasEstimateParams,\n): params is { contractCode: Uint8Array } {\n return \"contractCode\" in params;\n}\n\nexport function isCustomEstimator(params: NearGasEstimateParams): params is {\n customEstimator: (account: Account) => Promise<string>;\n} {\n return \"customEstimator\" in params;\n}\n\n// Helper function to estimate gas for batch actions\nexport function estimateBatchGas(actions: any[]) {\n let totalGas = 0;\n\n for (const action of actions) {\n switch (action.enum) {\n case \"transfer\":\n totalGas += Number(GAS_COSTS.SIMPLE_TRANSFER);\n break;\n case \"functionCall\":\n totalGas += Number(GAS_COSTS.CONTRACT_CALL);\n break;\n case \"createAccount\":\n totalGas += Number(GAS_COSTS.ACCOUNT_CREATION);\n break;\n case \"deployContract\":\n totalGas += Number(GAS_COSTS.CONTRACT_DEPLOYMENT);\n break;\n case \"addKey\":\n totalGas += Number(GAS_COSTS.ACCESS_KEY_ADDITION);\n break;\n case \"deleteKey\":\n totalGas += Number(GAS_COSTS.ACCESS_KEY_DELETION);\n break;\n case \"stake\":\n totalGas += Number(GAS_COSTS.STAKE);\n break;\n default:\n totalGas += Number(GAS_COSTS.CONTRACT_CALL);\n }\n }\n\n return totalGas.toString();\n}\n\n// Helper function to get gas cost for contract methods\nexport function getContractMethodGas(methodName: string) {\n if (methodName === \"ft_transfer\" || methodName === \"ft_transfer_call\") {\n return GAS_COSTS.TOKEN_TRANSFER;\n }\n if (methodName === \"storage_deposit\") {\n return GAS_COSTS.STORAGE_DEPOSIT;\n }\n return GAS_COSTS.CONTRACT_CALL;\n}\n\n// Convert TGas string to gas units\nexport function tgasToGas(tgas: string): string {\n return (BigInt(tgas) * BigInt(10 ** 12)).toString();\n}\n\n// Convert gas units to TGas\nexport function gasToTGas(gas: string): string {\n return (BigInt(gas) / BigInt(10 ** 12)).toString();\n}\n",
|
|
8
8
|
"import type { Account, Contract } from \"near-api-js\";\nimport { createNearContract } from \"./contractFactory\";\n\nconst DEFAULT_STORAGE_DEPOSIT = \"1250000000000000000000\"; // 0.00125 NEAR\n\n// Define NEP-141 contract interface\ninterface NEP141Contract extends Contract {\n // View methods\n ft_balance_of(args: { account_id: string }): Promise<string>;\n ft_total_supply(): Promise<string>;\n ft_metadata(): Promise<any>;\n storage_balance_of(args: { account_id: string }): Promise<any>;\n storage_balance_bounds(): Promise<any>;\n\n // Change methods\n ft_transfer(args: any, gas: any, deposit: any): Promise<any>;\n ft_transfer_call(args: any, gas: any, deposit: any): Promise<any>;\n storage_deposit(args: any, gas: any, deposit: any): Promise<any>;\n storage_withdraw(args: any, gas: any, deposit: any): Promise<any>;\n storage_unregister(force?: boolean, gas?: any): Promise<any>;\n}\n\nexport async function createNEP141Token({\n contractId,\n account,\n}: {\n contractId: string;\n account: Account;\n}) {\n const BN = (await import(\"bn.js\")).default;\n\n const contract = await createNearContract<NEP141Contract>({\n account,\n contractId,\n viewMethods: [\n \"ft_balance_of\",\n \"ft_total_supply\",\n \"ft_metadata\",\n \"storage_balance_of\",\n \"storage_balance_bounds\",\n ],\n changeMethods: [\n \"ft_transfer\",\n \"ft_transfer_call\",\n \"storage_deposit\",\n \"storage_withdraw\",\n \"storage_unregister\",\n ],\n });\n\n // Helper to ensure storage before transfers\n const ensureStorageFor = async (accountId: string) => {\n const balance = await contract.storage_balance_of({ account_id: accountId });\n if (!balance) {\n // Get minimum storage requirement\n const bounds = await contract.storage_balance_bounds();\n const deposit = bounds?.min || DEFAULT_STORAGE_DEPOSIT;\n\n await contract.storage_deposit(\n { account_id: accountId },\n new BN(\"100000000000000\"), // 100 TGas\n new BN(deposit),\n );\n }\n };\n\n return {\n transfer: async (receiverId: string, amount: string, memo?: string) => {\n // Ensure recipient has storage before transfer\n await ensureStorageFor(receiverId);\n\n return contract.ft_transfer(\n { receiver_id: receiverId, amount, memo },\n new BN(\"100000000000000\"), // 100 TGas\n new BN(\"1\"), // 1 yoctoNEAR for security\n );\n },\n\n transferCall: async (receiverId: string, amount: string, msg: string, memo?: string) => {\n // Ensure recipient has storage before transfer\n await ensureStorageFor(receiverId);\n\n return contract.ft_transfer_call(\n { receiver_id: receiverId, amount, memo, msg },\n new BN(\"100000000000000\"), // 100 TGas\n new BN(\"1\"), // 1 yoctoNEAR for security\n );\n },\n\n balanceOf: (accountId: string) => contract.ft_balance_of({ account_id: accountId }),\n\n totalSupply: () => contract.ft_total_supply(),\n\n metadata: () => contract.ft_metadata(),\n\n storageBalanceOf: (accountId: string) => contract.storage_balance_of({ account_id: accountId }),\n\n storageDeposit: (accountId?: string, amount?: string) =>\n contract.storage_deposit(\n { account_id: accountId },\n new BN(\"100000000000000\"),\n new BN(amount || DEFAULT_STORAGE_DEPOSIT),\n ),\n\n ensureStorage: ensureStorageFor,\n\n // Raw contract access for advanced use cases\n contract,\n };\n}\n"
|
|
9
9
|
],
|
|
10
|
-
"mappings": "iGAAA,mBACE,iBACA,WACA,cAEA,mBACA,yBCLF,uBAAmC,6BAAc,0BACjD,wBAAuB,qBAGvB,eAAsB,
|
|
11
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "89D2B8868A9F612E64756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|
package/dist/src/radix/index.cjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
var I={};$(I,{radixValidateAddress:()=>Y,RadixToolbox:()=>B});module.exports=_(I);var M=require("@swapkit/helpers");function Y(j){return j.startsWith("account_rdx1")&&j.length===66}function q({networkApi:j}){return async function J(K){let N=await G({address:K,networkApi:j});return v({resources:N,networkApi:j})}}async function G({address:j,networkApi:J}){let K=!0,N,L=[],z=await x(J);while(K){let U={address:j,limit_per_page:100,cursor:N,at_ledger_state:{state_version:z}},O=await J.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:U});if(L=L.concat(O.items),O.next_cursor)N=O.next_cursor;else K=!1}return L}async function v({resources:j,networkApi:J}){let K=[],N=50,L=[];for(let z=0;z<j.length;z+=50)L.push(j.slice(z,z+50));for(let z of L){let U=z.map((H)=>H.resource_address),O=await J.state.getEntityDetailsVaultAggregated(U),W=new Map;for(let H of O)if(H.details!==void 0){let Q=H.metadata?.items.find((Z)=>Z.key==="symbol"),V=Q?.value.typed.type==="String"?Q.value.typed.value:"?";if(H.details.type==="FungibleResource")W.set(H.address,{decimals:H.details.divisibility,symbol:V})}for(let H of z)if(H.aggregation_level==="Global"){let Q=W.get(H.resource_address)||{decimals:0,symbol:"?"},V=M.AssetValue.from({asset:Q.symbol!==M.Chain.Radix?`${M.Chain.Radix}.${Q.symbol}-${H.resource_address}`:"XRD.XRD",value:H.amount});K.push(V)}}return K}async function x(j){return j.status.getCurrent().then((J)=>J.ledger_state.state_version)}var B=async({dappConfig:j}={})=>{let{RadixDappToolkit:J}=await import("@radixdlt/radix-dapp-toolkit"),{GatewayApiClient:K}=await import("@radixdlt/babylon-gateway-api-sdk"),N=j||M.SKConfig.get("integrations").radix,L=J({...N,networkId:N.network?.networkId||1}),z=K.initialize(L.gatewayApi.clientConfig);return{getAddress:()=>"",getBalance:q({networkApi:z}),networkApi:z,validateAddress:Y,signAndBroadcast:()=>{throw new M.SwapKitError("toolbox_radix_method_not_supported",{method:"signAndBroadcast"})}}};
|
|
2
2
|
|
|
3
3
|
//# debugId=F56FF472911CDA3064756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|
package/dist/src/radix/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import{d as W,e as X}from"../../chunk-s47y8512.js";import{AssetValue as _,Chain as Y,SKConfig as $,SwapKitError as q}from"@swapkit/helpers";function G(j){return j.startsWith("account_rdx1")&&j.length===66}function v({networkApi:j}){return async function J(K){let M=await x({address:K,networkApi:j});return B({resources:M,networkApi:j})}}async function x({address:j,networkApi:J}){let K=!0,M,L=[],z=await I(J);while(K){let Q={address:j,limit_per_page:100,cursor:M,at_ledger_state:{state_version:z}},N=await J.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:Q});if(L=L.concat(N.items),N.next_cursor)M=N.next_cursor;else K=!1}return L}async function B({resources:j,networkApi:J}){let K=[],M=50,L=[];for(let z=0;z<j.length;z+=50)L.push(j.slice(z,z+50));for(let z of L){let Q=z.map((H)=>H.resource_address),N=await J.state.getEntityDetailsVaultAggregated(Q),V=new Map;for(let H of N)if(H.details!==void 0){let O=H.metadata?.items.find((Z)=>Z.key==="symbol"),U=O?.value.typed.type==="String"?O.value.typed.value:"?";if(H.details.type==="FungibleResource")V.set(H.address,{decimals:H.details.divisibility,symbol:U})}for(let H of z)if(H.aggregation_level==="Global"){let O=V.get(H.resource_address)||{decimals:0,symbol:"?"},U=_.from({asset:O.symbol!==Y.Radix?`${Y.Radix}.${O.symbol}-${H.resource_address}`:"XRD.XRD",value:H.amount});K.push(U)}}return K}async function I(j){return j.status.getCurrent().then((J)=>J.ledger_state.state_version)}var T=async({dappConfig:j}={})=>{let{RadixDappToolkit:J}=await import("@radixdlt/radix-dapp-toolkit"),{GatewayApiClient:K}=await import("@radixdlt/babylon-gateway-api-sdk"),M=j||$.get("integrations").radix,L=J({...M,networkId:M.network?.networkId||1}),z=K.initialize(L.gatewayApi.clientConfig);return{getAddress:()=>"",getBalance:v({networkApi:z}),networkApi:z,validateAddress:G,signAndBroadcast:()=>{throw new q("toolbox_radix_method_not_supported",{method:"signAndBroadcast"})}}};export{G as radixValidateAddress,T as RadixToolbox};
|
|
2
2
|
|
|
3
3
|
//# debugId=327A752010E93B5364756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
var B={};U(B,{rippleValidateAddress:()=>$,hashes:()=>N.hashes,getRippleToolbox:()=>f});module.exports=P(B);var j=require("@swapkit/helpers"),M=require("xrpl"),N=require("xrpl"),_={ACCOUNT_NOT_FOUND:19};function L(z){let G=M.Wallet.fromMnemonic(z);return{getAddress:()=>Promise.resolve(G.address),signTransaction:(Y)=>Promise.resolve(G.sign(Y))}}function $(z){return M.isValidAddress(z)}var f=async(z={})=>{let G="signer"in z&&z.signer?z.signer:("phrase"in z)&&z.phrase?L(z.phrase):void 0,Y=j.SKConfig.get("rpcUrls")[j.Chain.Ripple];if(!Y)throw new j.SwapKitError({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:j.Chain.Ripple}});let Q=new M.Client(Y);await Q.connect();let Z=()=>{if(!G)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return G.getAddress()},W=async(q)=>{let J=q||await Z();try{let X=(await Q.request({command:"account_info",account:J})).result.account_data.Balance;return[j.AssetValue.from({chain:j.Chain.Ripple,value:X,fromBaseDecimal:j.BaseDecimal[j.Chain.Ripple]})]}catch(y){if(y.data.error_code===_.ACCOUNT_NOT_FOUND)return[j.AssetValue.from({chain:j.Chain.Ripple,value:0})];throw new j.SwapKitError("toolbox_ripple_get_balance_error",{info:{address:J,error:y}})}},H=async()=>{let J=(await Q.request({command:"fee"})).result.drops.open_ledger_fee;return j.AssetValue.from({chain:j.Chain.Ripple,value:j.SwapKitNumber.fromBigInt(BigInt(J),j.BaseDecimal[j.Chain.Ripple])})},k=async({assetValue:q,recipient:J,memo:y,sender:X})=>{if(!$(J))throw new j.SwapKitError({errorKey:"core_transaction_invalid_recipient_address"});let O=X||await Z();if(!q.isGasAsset||q.chain!==j.Chain.Ripple)throw new j.SwapKitError({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:q.toString()}});let I={TransactionType:"Payment",Account:O,Amount:M.xrpToDrops(q.getValue("string")),Destination:J};if(y)I.Memos=[{Memo:{MemoData:Buffer.from(y).toString("hex")}}];return await Q.autofill(I)},v=(q)=>{if(!G)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return G.signTransaction(q)},F=async(q)=>{let y=(await Q.submitAndWait(q)).result;if(y.validated)return y.hash;throw new j.SwapKitError({errorKey:"toolbox_ripple_broadcast_error",info:{chain:j.Chain.Ripple}})};return{signer:G,createSigner:L,getAddress:Z,validateAddress:$,getBalance:W,createTransaction:k,signTransaction:v,broadcastTransaction:F,transfer:async(q)=>{if(!G)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});let J=await G.getAddress(),y=await k({...q,sender:J}),X=await v(y);return F(X.tx_blob)},estimateTransactionFee:H,disconnect:()=>Q.disconnect()}};
|
|
2
2
|
|
|
3
3
|
//# debugId=505386E4B21E68DE64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|
package/dist/src/ripple/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import"../../chunk-s47y8512.js";import{AssetValue as $,BaseDecimal as L,Chain as J,SKConfig as U,SwapKitError as M,SwapKitNumber as _}from"@swapkit/helpers";import{Client as f,Wallet as B,isValidAddress as b,xrpToDrops as R}from"xrpl";import{hashes as V}from"xrpl";var D={ACCOUNT_NOT_FOUND:19};function N(y){let z=B.fromMnemonic(y);return{getAddress:()=>Promise.resolve(z.address),signTransaction:(Y)=>Promise.resolve(z.sign(Y))}}function W(y){return b(y)}var E=async(y={})=>{let z="signer"in y&&y.signer?y.signer:("phrase"in y)&&y.phrase?N(y.phrase):void 0,Y=U.get("rpcUrls")[J.Ripple];if(!Y)throw new M({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:J.Ripple}});let Q=new f(Y);await Q.connect();let Z=()=>{if(!z)throw new M({errorKey:"toolbox_ripple_signer_not_found"});return z.getAddress()},H=async(j)=>{let G=j||await Z();try{let X=(await Q.request({command:"account_info",account:G})).result.account_data.Balance;return[$.from({chain:J.Ripple,value:X,fromBaseDecimal:L[J.Ripple]})]}catch(q){if(q.data.error_code===D.ACCOUNT_NOT_FOUND)return[$.from({chain:J.Ripple,value:0})];throw new M("toolbox_ripple_get_balance_error",{info:{address:G,error:q}})}},O=async()=>{let G=(await Q.request({command:"fee"})).result.drops.open_ledger_fee;return $.from({chain:J.Ripple,value:_.fromBigInt(BigInt(G),L[J.Ripple])})},k=async({assetValue:j,recipient:G,memo:q,sender:X})=>{if(!W(G))throw new M({errorKey:"core_transaction_invalid_recipient_address"});let P=X||await Z();if(!j.isGasAsset||j.chain!==J.Ripple)throw new M({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:j.toString()}});let I={TransactionType:"Payment",Account:P,Amount:R(j.getValue("string")),Destination:G};if(q)I.Memos=[{Memo:{MemoData:Buffer.from(q).toString("hex")}}];return await Q.autofill(I)},v=(j)=>{if(!z)throw new M({errorKey:"toolbox_ripple_signer_not_found"});return z.signTransaction(j)},F=async(j)=>{let q=(await Q.submitAndWait(j)).result;if(q.validated)return q.hash;throw new M({errorKey:"toolbox_ripple_broadcast_error",info:{chain:J.Ripple}})};return{signer:z,createSigner:N,getAddress:Z,validateAddress:W,getBalance:H,createTransaction:k,signTransaction:v,broadcastTransaction:F,transfer:async(j)=>{if(!z)throw new M({errorKey:"toolbox_ripple_signer_not_found"});let G=await z.getAddress(),q=await k({...j,sender:G}),X=await v(q);return F(X.tx_blob)},estimateTransactionFee:O,disconnect:()=>Q.disconnect()}};export{W as rippleValidateAddress,V as hashes,E as getRippleToolbox};
|
|
2
2
|
|
|
3
3
|
//# debugId=AD02AAC0A5102C8964756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
var H={};I(H,{getSolanaToolbox:()=>N,getSolanaAddressValidator:()=>u,createKeysForPath:()=>j});module.exports=v(H);var p=require("@swapkit/helpers"),E=require("ts-pattern"),z=require("ts-pattern");async function F(T){try{let a=await fetch(`https://lite-api.jup.ag/tokens/v1/token/${T}`);if(!a.ok)return null;return await a.json()}catch{return null}}async function J(T){let a=await h(),{PublicKey:l}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:y}=await import("@solana/spl-token"),P=new l(T),o=[],S=await a.getBalance(P);if(S>0)o.push(p.AssetValue.from({chain:p.Chain.Solana,value:S,fromBaseDecimal:p.BaseDecimal[p.Chain.Solana]}));let x=await a.getParsedTokenAccountsByOwner(P,{programId:y});for(let{account:m}of x.value){let b=m.data.parsed.info,O=b.mint,R=b.tokenAmount.amount;if(Number(R)===0)continue;let G=await F(O),q=G?.symbol||"UNKNOWN",w=G?.decimals||b.tokenAmount.decimals;o.push(p.AssetValue.from({asset:`${p.Chain.Solana}.${q}-${O}`,value:R,fromBaseDecimal:w}))}return o}async function u(){let{PublicKey:T}=await import("@solana/web3.js");return(a)=>{try{let l=new T(a);return T.isOnCurve(l.toBytes())}catch(l){return!1}}}async function N(T){let a=T&&"index"in T?T.index||0:0,l=p.derivationPathToString(T&&"derivationPath"in T&&T.derivationPath?T.derivationPath:p.updateDerivationPath(p.NetworkDerivationPath[p.Chain.Solana],{index:a})),y=await z.match(T).with({phrase:E.P.string},({phrase:o})=>j({phrase:o,derivationPath:l})).with({signer:E.P.any},({signer:o})=>o).otherwise(()=>{return});function P(){return y?.publicKey?d(y.publicKey):""}return{getConnection:h,getAddress:P,createKeysForPath:j,getAddressFromPubKey:d,getPubkeyFromAddress:L,createTransaction:A(h),createTransactionFromInstructions:Z,getBalance:(o)=>{let S=o||P();if(!S)throw new p.SwapKitError("core_wallet_connection_not_found");return J(S)},transfer:_(h,y),broadcastTransaction:W(h),getAddressValidator:u,signTransaction:$(h,y),estimateTransactionFee:Q(h)}}function Q(T){return async({recipient:a,assetValue:l,memo:y,isProgramDerivedAddress:P,sender:o})=>{let S=await T(),m=(await A(T)({recipient:a,assetValue:l,memo:y,isProgramDerivedAddress:P,sender:o})).compileMessage(),b=await S.getFeeForMessage(m);if(b.value===null)throw new p.SwapKitError("toolbox_solana_fee_estimation_failed","Could not estimate Solana fee.");return p.AssetValue.from({chain:p.Chain.Solana,value:b.value,fromBaseDecimal:p.BaseDecimal[p.Chain.Solana]})}}async function h(){let{Connection:T}=await import("@solana/web3.js");return new T(p.SKConfig.get("rpcUrls").SOL,"confirmed")}function X(T){return async({assetValue:a,recipient:l,sender:y,isProgramDerivedAddress:P})=>{let o=await T(),S=await L(y);if(a.isGasAsset){let{Transaction:x,SystemProgram:m,PublicKey:b}=await import("@solana/web3.js");return new x().add(m.transfer({fromPubkey:S,lamports:a.getBaseValue("number"),toPubkey:new b(l)}))}if(a.address)return Y({amount:a.getBaseValue("number"),connection:o,decimals:a.decimal,from:S,recipient:l,tokenAddress:a.address,isProgramDerivedAddress:P});return}}async function Y({tokenAddress:T,recipient:a,from:l,connection:y,amount:P,decimals:o,isProgramDerivedAddress:S}){let{getAssociatedTokenAddress:x,getAccount:m,createAssociatedTokenAccountInstruction:b,createTransferCheckedInstruction:O}=await import("@solana/spl-token"),{Transaction:R,PublicKey:G}=await import("@solana/web3.js"),q=new R,w=new G(T),B=await x(w,l),U=new G(a),M=await x(w,U,S),V=!1;try{await m(y,M),V=!0}catch(K){}if(!V)q.add(b(l,M,U,w));return q.add(O(B,w,M,l,P,o)),q}function A(T){return async({recipient:a,assetValue:l,memo:y,isProgramDerivedAddress:P,sender:o})=>{let{createMemoInstruction:S}=await import("@solana/spl-memo"),x=await L(o),m=await u();if(!(P||m(a)))throw new p.SwapKitError("core_transaction_invalid_recipient_address");let b=await T(),O=await X(T)({assetValue:l,recipient:a,sender:o,isProgramDerivedAddress:P});if(!O)throw new p.SwapKitError("core_transaction_invalid_sender_address");if(y)O.add(S(y));let R=await b.getLatestBlockhash();return O.recentBlockhash=R.blockhash,O.feePayer=x,O}}async function Z({instructions:T}){let{Transaction:a}=await import("@solana/web3.js"),l=new a().add(...T);if(!l)throw new p.SwapKitError("core_transaction_invalid_sender_address");return l}function _(T,a){return async({recipient:l,assetValue:y,memo:P,isProgramDerivedAddress:o})=>{if(!a)throw new p.SwapKitError("core_transaction_invalid_sender_address");let S=a.publicKey?.toString()??(await a.connect()).publicKey.toString(),x=await A(T)({recipient:l,assetValue:y,memo:P,isProgramDerivedAddress:o,sender:S});if("connect"in a){let m=await a.signTransaction(x);return W(T)(m)}return x.sign(a),W(T)(x)}}function W(T){return async(a)=>{return(await T()).sendRawTransaction(a.serialize())}}function $(T,a){return async(l)=>{let{VersionedTransaction:y}=await import("@solana/web3.js");if(!a)throw new p.SwapKitError("toolbox_solana_no_signer");if(!(l instanceof y)){let o=await(await T()).getLatestBlockhash();l.recentBlockhash=o.blockhash,l.feePayer=a.publicKey||void 0}if("connect"in a)return await a.signTransaction(l);return await l.sign([a]),l}}async function j({phrase:T,derivationPath:a=p.DerivationPath.SOL}){let{HDKey:l}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:y}=await import("@scure/bip39"),{Keypair:P}=await import("@solana/web3.js"),o=y(T),S=l.fromMasterSeed(o);return P.fromSeed(S.derive(a,!0).privateKey)}function d(T){return T.toString()}async function L(T){let{PublicKey:a}=await import("@solana/web3.js");return new a(T)}
|
|
2
2
|
|
|
3
3
|
//# debugId=B225E47B580B7BAF64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|
package/dist/src/solana/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import{d as S,e as f}from"../../chunk-s47y8512.js";import{AssetValue as j,BaseDecimal as F,Chain as q,DerivationPath as Q,NetworkDerivationPath as X,SKConfig as Y,SwapKitError as R,derivationPathToString as Z,updateDerivationPath as _}from"@swapkit/helpers";import{P as d}from"ts-pattern";import{match as $}from"ts-pattern";async function v(T){try{let a=await fetch(`https://lite-api.jup.ag/tokens/v1/token/${T}`);if(!a.ok)return null;return await a.json()}catch{return null}}async function I(T){let a=await h(),{PublicKey:l}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:o}=await import("@solana/spl-token"),y=new l(T),p=[],P=await a.getBalance(y);if(P>0)p.push(j.from({chain:q.Solana,value:P,fromBaseDecimal:F[q.Solana]}));let x=await a.getParsedTokenAccountsByOwner(y,{programId:o});for(let{account:m}of x.value){let b=m.data.parsed.info,O=b.mint,w=b.tokenAmount.amount;if(Number(w)===0)continue;let M=await v(O),E=M?.symbol||"UNKNOWN",G=M?.decimals||b.tokenAmount.decimals;p.push(j.from({asset:`${q.Solana}.${E}-${O}`,value:w,fromBaseDecimal:G}))}return p}async function J(){let{PublicKey:T}=await import("@solana/web3.js");return(a)=>{try{let l=new T(a);return T.isOnCurve(l.toBytes())}catch(l){return!1}}}async function g(T){let a=T&&"index"in T?T.index||0:0,l=Z(T&&"derivationPath"in T&&T.derivationPath?T.derivationPath:_(X[q.Solana],{index:a})),o=await $(T).with({phrase:d.string},({phrase:p})=>z({phrase:p,derivationPath:l})).with({signer:d.any},({signer:p})=>p).otherwise(()=>{return});function y(){return o?.publicKey?B(o.publicKey):""}return{getConnection:h,getAddress:y,createKeysForPath:z,getAddressFromPubKey:B,getPubkeyFromAddress:L,createTransaction:A(h),createTransactionFromInstructions:k,getBalance:(p)=>{let P=p||y();if(!P)throw new R("core_wallet_connection_not_found");return I(P)},transfer:s(h,o),broadcastTransaction:u(h),getAddressValidator:J,signTransaction:C(h,o),estimateTransactionFee:H(h)}}function H(T){return async({recipient:a,assetValue:l,memo:o,isProgramDerivedAddress:y,sender:p})=>{let P=await T(),m=(await A(T)({recipient:a,assetValue:l,memo:o,isProgramDerivedAddress:y,sender:p})).compileMessage(),b=await P.getFeeForMessage(m);if(b.value===null)throw new R("toolbox_solana_fee_estimation_failed","Could not estimate Solana fee.");return j.from({chain:q.Solana,value:b.value,fromBaseDecimal:F[q.Solana]})}}async function h(){let{Connection:T}=await import("@solana/web3.js");return new T(Y.get("rpcUrls").SOL,"confirmed")}function K(T){return async({assetValue:a,recipient:l,sender:o,isProgramDerivedAddress:y})=>{let p=await T(),P=await L(o);if(a.isGasAsset){let{Transaction:x,SystemProgram:m,PublicKey:b}=await import("@solana/web3.js");return new x().add(m.transfer({fromPubkey:P,lamports:a.getBaseValue("number"),toPubkey:new b(l)}))}if(a.address)return D({amount:a.getBaseValue("number"),connection:p,decimals:a.decimal,from:P,recipient:l,tokenAddress:a.address,isProgramDerivedAddress:y});return}}async function D({tokenAddress:T,recipient:a,from:l,connection:o,amount:y,decimals:p,isProgramDerivedAddress:P}){let{getAssociatedTokenAddress:x,getAccount:m,createAssociatedTokenAccountInstruction:b,createTransferCheckedInstruction:O}=await import("@solana/spl-token"),{Transaction:w,PublicKey:M}=await import("@solana/web3.js"),E=new w,G=new M(T),N=await x(G,l),U=new M(a),W=await x(G,U,P),V=!1;try{await m(o,W),V=!0}catch(n){}if(!V)E.add(b(l,W,U,G));return E.add(O(N,G,W,l,y,p)),E}function A(T){return async({recipient:a,assetValue:l,memo:o,isProgramDerivedAddress:y,sender:p})=>{let{createMemoInstruction:P}=await import("@solana/spl-memo"),x=await L(p),m=await J();if(!(y||m(a)))throw new R("core_transaction_invalid_recipient_address");let b=await T(),O=await K(T)({assetValue:l,recipient:a,sender:p,isProgramDerivedAddress:y});if(!O)throw new R("core_transaction_invalid_sender_address");if(o)O.add(P(o));let w=await b.getLatestBlockhash();return O.recentBlockhash=w.blockhash,O.feePayer=x,O}}async function k({instructions:T}){let{Transaction:a}=await import("@solana/web3.js"),l=new a().add(...T);if(!l)throw new R("core_transaction_invalid_sender_address");return l}function s(T,a){return async({recipient:l,assetValue:o,memo:y,isProgramDerivedAddress:p})=>{if(!a)throw new R("core_transaction_invalid_sender_address");let P=a.publicKey?.toString()??(await a.connect()).publicKey.toString(),x=await A(T)({recipient:l,assetValue:o,memo:y,isProgramDerivedAddress:p,sender:P});if("connect"in a){let m=await a.signTransaction(x);return u(T)(m)}return x.sign(a),u(T)(x)}}function u(T){return async(a)=>{return(await T()).sendRawTransaction(a.serialize())}}function C(T,a){return async(l)=>{let{VersionedTransaction:o}=await import("@solana/web3.js");if(!a)throw new R("toolbox_solana_no_signer");if(!(l instanceof o)){let p=await(await T()).getLatestBlockhash();l.recentBlockhash=p.blockhash,l.feePayer=a.publicKey||void 0}if("connect"in a)return await a.signTransaction(l);return await l.sign([a]),l}}async function z({phrase:T,derivationPath:a=Q.SOL}){let{HDKey:l}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:o}=await import("@scure/bip39"),{Keypair:y}=await import("@solana/web3.js"),p=o(T),P=l.fromMasterSeed(p);return y.fromSeed(P.derive(a,!0).privateKey)}function B(T){return T.toString()}async function L(T){let{PublicKey:a}=await import("@solana/web3.js");return new a(T)}export{g as getSolanaToolbox,J as getSolanaAddressValidator,z as createKeysForPath};
|
|
2
2
|
|
|
3
3
|
//# debugId=C8EF78FCFAC60D3764756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
var q={};O(q,{substrateValidateAddress:()=>H,isKeyringPair:()=>p,getSubstrateToolbox:()=>D,createSubstrateToolbox:()=>S,createKeyring:()=>P,SubstrateNetwork:()=>d,PolkadotToolbox:()=>T,ChainflipToolbox:()=>_,BaseSubstrateToolbox:()=>A});module.exports=W(q);var u=require("@polkadot/util"),m=require("@polkadot/util-crypto"),i=require("@swapkit/helpers"),f=require("ts-pattern");var l=require("@swapkit/helpers");async function E(t,e,n){try{let r=await t.query.system?.account?.(n);if(!r)return[e.set(0)];let{data:{free:a}}=r,o=l.SwapKitNumber.fromBigInt(BigInt(a.toString()),e.decimal).getValue("string");return[e.set(o)]}catch(r){return console.error("Error fetching substrate balance:",r),[e.set(0)]}}async function K(t,e,n){try{let r=await t.query.flip?.account?.(n);if(!r)return[e.set(0)];let a=r.balance||r.data?.balance;if(!a||a.isEmpty)return[e.set(0)];let o=l.SwapKitNumber.fromBigInt(BigInt(a.toString()),e.decimal).getValue("string");return[e.set(o)]}catch(r){return console.error("Error fetching chainflip balance:",r),[e.set(0)]}}function I(t,e){return function n(r){let a=l.AssetValue.from({chain:t});switch(t){case l.Chain.Chainflip:return K(e,a,r);default:return E(e,a,r)}}}var j={prefix:0,network:"polkadot",displayName:"Polkadot Relay Chain",symbols:["DOT"],decimals:[10],standardAccount:"*25519",website:"https://polkadot.network"},N={prefix:2112,network:"chainflip",displayName:"Chainflip",symbols:["FLIP"],decimals:[18],standardAccount:"*25519",website:"https://chainflip.io/"},R={prefix:42,network:"substrate",displayName:"Substrate",symbols:[],decimals:[],standardAccount:"*25519",website:"https://substrate.io/"},d={DOT:j,FLIP:N,GENERIC:R};var T=({generic:t=!1,...e}={})=>{return S({chain:i.Chain.Polkadot,generic:t,...e})},_=async({generic:t=!1,...e}={})=>{return{...await S({chain:i.Chain.Chainflip,generic:t,...e})}};function D(t,e){switch(t){case i.Chain.Chainflip:return _(e);case i.Chain.Polkadot:return T(e);default:throw new i.SwapKitError("toolbox_substrate_not_supported",{chain:t})}}function p(t){return"address"in t}async function P(t,e){let{Keyring:n}=await import("@polkadot/api"),{cryptoWaitReady:r}=await import("@polkadot/util-crypto");return await r(),new n({type:"sr25519",ss58Format:e}).addFromUri(t)}var x=(t,e)=>t.rpc.system.accountNextIndex(e),w=(t,e)=>{try{let n=v(t,e);return C(n,"ss58",e),!0}catch(n){return!1}},h=(t,{recipient:e,assetValue:n})=>t.tx.balances?.transferAllowDeath?.(e,n.getBaseValue("number")),M=async(t,e,{recipient:n,assetValue:r,sender:a})=>{let o=h(t,{recipient:n,assetValue:r}),s=p(e);if(!o)return;let c=s?e.address:a;if(!c)throw new i.SwapKitError("core_transaction_invalid_sender_address");let y=await x(t,c);return(await o.signAndSend(s?e:c,{signer:s?void 0:e,nonce:y}))?.toString()},F=async(t,e,n,{recipient:r,assetValue:a,sender:o})=>{let s=h(t,{recipient:r,assetValue:a}),c=p(e)?e.address:o;if(!c)return;let y=await s?.paymentInfo(c,{nonce:await x(t,c)})||{partialFee:0};return n.set(i.SwapKitNumber.fromBigInt(BigInt(y.partialFee.toString()),n.decimal).getValue("string"))},G=async(t,e)=>{if(e)return t.send(e);return(await t.send()).toString()},B=async(t,e)=>{return await e.signAsync(t)},V=(t,e,n)=>{if(n)return e.signAndSend(t,n);return e.signAndSend(t).toString()},L=async({signer:t,address:e,tx:n,callback:r,api:a})=>{let o=await x(a,e);if(r)n.signAndSend(e,{nonce:o,signer:t},r);return n.signAndSend(e,{nonce:o,signer:t}).toString()};function U(t,e){let n=m.decodeAddress(t);return m.encodeAddress(n,e)}function v(t,e){return u.isHex(t)?u.hexToU8a(t):m.decodeAddress(t,void 0,e)}function C(t,e="ss58",n){if(e==="hex")return u.u8aToHex(t);return m.encodeAddress(t,n)}var A=({api:t,network:e,gasAsset:n,signer:r,chain:a})=>({api:t,network:e,gasAsset:n,decodeAddress:v,encodeAddress:C,convertAddress:U,getBalance:I(a||i.Chain.Polkadot,t),createKeyring:(o)=>P(o,e.prefix),getAddress:(o)=>{let s=o||r;if(!s)throw new i.SwapKitError("core_wallet_not_keypair_wallet");return p(s)?s.address:void 0},createTransaction:(o)=>h(t,o),validateAddress:(o)=>w(o,e.prefix),transfer:(o)=>{if(!r)throw new i.SwapKitError("core_wallet_not_keypair_wallet");return M(t,r,o)},estimateTransactionFee:(o)=>{if(!r)throw new i.SwapKitError("core_wallet_not_keypair_wallet");return F(t,r,n,o)},sign:(o)=>{if(!r)throw new i.SwapKitError("core_wallet_not_keypair_wallet");if(p(r))return B(r,o);throw new i.SwapKitError("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")},broadcast:G,signAndBroadcast:({tx:o,callback:s,address:c})=>{if(!r)throw new i.SwapKitError("core_wallet_not_keypair_wallet");if(p(r))return V(r,o,s);if(c)return L({signer:r,address:c,tx:o,callback:s,api:t});throw new i.SwapKitError("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")}}),H=({address:t,chain:e})=>{let{prefix:n}=e===i.Chain.Polkadot?d.DOT:d.FLIP;return w(t,n)||w(t,d.GENERIC.prefix)};async function S({generic:t,chain:e,...n}){let{ApiPromise:r,WsProvider:a}=await import("@polkadot/api"),o=new a(i.SKConfig.get("rpcUrls")[e]),s=await r.create({provider:o}),c=i.AssetValue.from({chain:e}),y=t?d.GENERIC:d[e],k=await f.match(n).with({phrase:f.P.string},({phrase:b})=>P(b,d[e].prefix)).with({signer:f.P.any},({signer:b})=>b).otherwise(()=>{return});return A({api:s,signer:k,gasAsset:c,network:y,chain:e})}
|
|
2
2
|
|
|
3
3
|
//# debugId=352CF3811C22866964756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import{d as y,e as f}from"../../chunk-s47y8512.js";import{hexToU8a as M,isHex as F,u8aToHex as G}from"@polkadot/util";import{decodeAddress as k,encodeAddress as I}from"@polkadot/util-crypto";import{AssetValue as B,Chain as l,SKConfig as V,SwapKitError as c,SwapKitNumber as L}from"@swapkit/helpers";import{P as S,match as U}from"ts-pattern";import{AssetValue as A,Chain as E,SwapKitNumber as x}from"@swapkit/helpers";async function K(t,e,n){try{let r=await t.query.system?.account?.(n);if(!r)return[e.set(0)];let{data:{free:i}}=r,o=x.fromBigInt(BigInt(i.toString()),e.decimal).getValue("string");return[e.set(o)]}catch(r){return console.error("Error fetching substrate balance:",r),[e.set(0)]}}async function j(t,e,n){try{let r=await t.query.flip?.account?.(n);if(!r)return[e.set(0)];let i=r.balance||r.data?.balance;if(!i||i.isEmpty)return[e.set(0)];let o=x.fromBigInt(BigInt(i.toString()),e.decimal).getValue("string");return[e.set(o)]}catch(r){return console.error("Error fetching chainflip balance:",r),[e.set(0)]}}function h(t,e){return function n(r){let i=A.from({chain:t});switch(t){case E.Chainflip:return j(e,i,r);default:return K(e,i,r)}}}var N={prefix:0,network:"polkadot",displayName:"Polkadot Relay Chain",symbols:["DOT"],decimals:[10],standardAccount:"*25519",website:"https://polkadot.network"},R={prefix:2112,network:"chainflip",displayName:"Chainflip",symbols:["FLIP"],decimals:[18],standardAccount:"*25519",website:"https://chainflip.io/"},D={prefix:42,network:"substrate",displayName:"Substrate",symbols:[],decimals:[],standardAccount:"*25519",website:"https://substrate.io/"},d={DOT:N,FLIP:R,GENERIC:D};var H=({generic:t=!1,...e}={})=>{return C({chain:l.Polkadot,generic:t,...e})},W=async({generic:t=!1,...e}={})=>{return{...await C({chain:l.Chainflip,generic:t,...e})}};function ce(t,e){switch(t){case l.Chainflip:return W(e);case l.Polkadot:return H(e);default:throw new c("toolbox_substrate_not_supported",{chain:t})}}function u(t){return"address"in t}async function T(t,e){let{Keyring:n}=await import("@polkadot/api"),{cryptoWaitReady:r}=await import("@polkadot/util-crypto");return await r(),new n({type:"sr25519",ss58Format:e}).addFromUri(t)}var g=(t,e)=>t.rpc.system.accountNextIndex(e),b=(t,e)=>{try{let n=_(t,e);return v(n,"ss58",e),!0}catch(n){return!1}},w=(t,{recipient:e,assetValue:n})=>t.tx.balances?.transferAllowDeath?.(e,n.getBaseValue("number")),O=async(t,e,{recipient:n,assetValue:r,sender:i})=>{let o=w(t,{recipient:n,assetValue:r}),a=u(e);if(!o)return;let s=a?e.address:i;if(!s)throw new c("core_transaction_invalid_sender_address");let p=await g(t,s);return(await o.signAndSend(a?e:s,{signer:a?void 0:e,nonce:p}))?.toString()},q=async(t,e,n,{recipient:r,assetValue:i,sender:o})=>{let a=w(t,{recipient:r,assetValue:i}),s=u(e)?e.address:o;if(!s)return;let p=await a?.paymentInfo(s,{nonce:await g(t,s)})||{partialFee:0};return n.set(L.fromBigInt(BigInt(p.partialFee.toString()),n.decimal).getValue("string"))},z=async(t,e)=>{if(e)return t.send(e);return(await t.send()).toString()},J=async(t,e)=>{return await e.signAsync(t)},Q=(t,e,n)=>{if(n)return e.signAndSend(t,n);return e.signAndSend(t).toString()},X=async({signer:t,address:e,tx:n,callback:r,api:i})=>{let o=await g(i,e);if(r)n.signAndSend(e,{nonce:o,signer:t},r);return n.signAndSend(e,{nonce:o,signer:t}).toString()};function Y(t,e){let n=k(t);return I(n,e)}function _(t,e){return F(t)?M(t):k(t,void 0,e)}function v(t,e="ss58",n){if(e==="hex")return G(t);return I(t,n)}var Z=({api:t,network:e,gasAsset:n,signer:r,chain:i})=>({api:t,network:e,gasAsset:n,decodeAddress:_,encodeAddress:v,convertAddress:Y,getBalance:h(i||l.Polkadot,t),createKeyring:(o)=>T(o,e.prefix),getAddress:(o)=>{let a=o||r;if(!a)throw new c("core_wallet_not_keypair_wallet");return u(a)?a.address:void 0},createTransaction:(o)=>w(t,o),validateAddress:(o)=>b(o,e.prefix),transfer:(o)=>{if(!r)throw new c("core_wallet_not_keypair_wallet");return O(t,r,o)},estimateTransactionFee:(o)=>{if(!r)throw new c("core_wallet_not_keypair_wallet");return q(t,r,n,o)},sign:(o)=>{if(!r)throw new c("core_wallet_not_keypair_wallet");if(u(r))return J(r,o);throw new c("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")},broadcast:z,signAndBroadcast:({tx:o,callback:a,address:s})=>{if(!r)throw new c("core_wallet_not_keypair_wallet");if(u(r))return Q(r,o,a);if(s)return X({signer:r,address:s,tx:o,callback:a,api:t});throw new c("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")}}),de=({address:t,chain:e})=>{let{prefix:n}=e===l.Polkadot?d.DOT:d.FLIP;return b(t,n)||b(t,d.GENERIC.prefix)};async function C({generic:t,chain:e,...n}){let{ApiPromise:r,WsProvider:i}=await import("@polkadot/api"),o=new i(V.get("rpcUrls")[e]),a=await r.create({provider:o}),s=B.from({chain:e}),p=t?d.GENERIC:d[e],P=await U(n).with({phrase:S.string},({phrase:m})=>T(m,d[e].prefix)).with({signer:S.any},({signer:m})=>m).otherwise(()=>{return});return Z({api:a,signer:P,gasAsset:s,network:p,chain:e})}export{de as substrateValidateAddress,u as isKeyringPair,ce as getSubstrateToolbox,C as createSubstrateToolbox,T as createKeyring,d as SubstrateNetwork,H as PolkadotToolbox,W as ChainflipToolbox,Z as BaseSubstrateToolbox};
|
|
2
2
|
|
|
3
3
|
//# debugId=D388955C3698ABE764756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
package/dist/src/tron/index.cjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var r={};a(r,{trc20ABI:()=>A,getTronPrivateKeyFromMnemonic:()=>V,getTronAddressValidator:()=>P,createTronToolbox:()=>v});module.exports=s(r);var y=require("@swapkit/helpers"),H=require("ts-pattern");var A=[{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"success",type:"bool"}],type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],type:"function"}];var F=require("tronweb");async function P(){return(X)=>{return F.TronWeb.isAddress(X)}}async function V({phrase:X,derivationPath:O,index:k}){let _=O||y.derivationPathToString(y.updateDerivationPath(y.NetworkDerivationPath[y.Chain.Tron],{index:k||0})),{HDKey:I}=await import("@scure/bip32"),{mnemonicToSeedSync:D}=await import("@scure/bip39"),J=D(X),Z=I.fromMasterSeed(J).derive(_);if(!Z.privateKey)throw new y.SwapKitError("toolbox_tron_no_signer");return Buffer.from(Z.privateKey).toString("hex")}async function i({phrase:X,derivationPath:O}){let{HDKey:k}=await import("@scure/bip32"),{mnemonicToSeedSync:_}=await import("@scure/bip39"),I=_(X),J=k.fromMasterSeed(I).derive(O);if(!J.privateKey)throw new y.SwapKitError("toolbox_tron_no_signer");let Y=Buffer.from(J.privateKey).toString("hex"),Z=new F.TronWeb({fullHost:y.SKConfig.get("rpcUrls")[y.Chain.Tron],privateKey:Y}),E=Z.address.fromPrivateKey(Y);return{getAddress:()=>Promise.resolve(typeof E==="string"?E:""),signTransaction:async(K)=>{return await Z.trx.sign(K,Y)}}}var v=async(X={})=>{let O=y.SKConfig.get("rpcUrls")[y.Chain.Tron],k=void 0,_=new F.TronWeb({fullHost:O,headers:void 0}),I="index"in X?X.index||0:0,D=y.derivationPathToString("derivationPath"in X&&X.derivationPath?X.derivationPath:y.updateDerivationPath(y.NetworkDerivationPath[y.Chain.Tron],{index:I})),J=await H.match(X).with({phrase:H.P.string},async({phrase:T})=>i({phrase:T,derivationPath:D})).with({signer:H.P.any},({signer:T})=>Promise.resolve(T)).otherwise(()=>Promise.resolve(void 0)),Y=async()=>{if(!J)throw new y.SwapKitError("toolbox_tron_no_signer");return await J.getAddress()},Z=()=>{return 1e8},E=268,K=13000,g=345,u=async()=>{try{let T=await _.trx.getChainParameters(),f={};for(let z of T)f[z.key]=z.value;return{energyFee:f.getEnergyFee||420,bandwidthFee:f.getTransactionFee||1000,createAccountFee:f.getCreateAccountFee||1e5}}catch{return{energyFee:420,bandwidthFee:1000,createAccountFee:1e5}}},w=async(T)=>{try{let f=await _.trx.getAccount(T);return f&&Object.keys(f).length>0}catch{return!1}},b=async(T)=>{try{let f=await _.trx.getAccountResources(T);return{bandwidth:{free:f.freeNetLimit-f.freeNetUsed,total:f.NetLimit||0,used:f.NetUsed||0},energy:{total:f.EnergyLimit||0,used:f.EnergyUsed||0}}}catch{return{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}},p=async(T,f=!0)=>{let{getBalance:z}=await import("../../chunk-5yxc1e69.js");try{let G=await z(y.Chain.Tron)(T,f);if(G.length>0)return G;let q=await _.trx.getBalance(T);return[y.AssetValue.from({chain:y.Chain.Tron,value:q,fromBaseDecimal:6})]}catch(G){y.warnOnce(!0,`Failed to get Tron balance for ${T}: ${G instanceof Error?G.message:G}`);try{let q=await _.trx.getBalance(T);return[y.AssetValue.from({chain:y.Chain.Tron,value:q,fromBaseDecimal:6})]}catch(q){return y.warnOnce(!0,`Failed to get native TRX balance for ${T}: ${q instanceof Error?q.message:q}`),[]}}},l=async({recipient:T,assetValue:f,memo:z})=>{if(!J)throw new y.SwapKitError("toolbox_tron_no_signer");let G=await Y();if(f.isGasAsset){let j=await _.transactionBuilder.sendTrx(T,f.getBaseValue("number"),G);if(z){let N=await _.transactionBuilder.addUpdateData(j,z,"utf8"),B=await J.signTransaction(N),{txid:C}=await _.trx.sendRawTransaction(B);return C}let L=await J.signTransaction(j),{txid:x}=await _.trx.sendRawTransaction(L);return x}let $=f.address;if(!$)throw new y.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:f.toString()});let U=Z(),Q=_.contract(A,$);if(!Q.methods?.transfer)throw new y.SwapKitError("toolbox_tron_token_transfer_failed");let R=await Q.methods.transfer(T,f.getBaseValue("string")).send({from:G,feeLimit:U,callValue:0});if(!R)throw new y.SwapKitError("toolbox_tron_token_transfer_failed");return R},h=async({assetValue:T,recipient:f,sender:z})=>{let G=T.isGasAsset;try{let q=z?z:J?await Y():void 0;if(!q)return G?y.AssetValue.from({chain:y.Chain.Tron,value:0.1,fromBaseDecimal:0}):y.AssetValue.from({chain:y.Chain.Tron,value:15,fromBaseDecimal:0});let $=await u(),Q=await w(f)?0:$.createAccountFee,R=await b(q);if(G){let S=R.bandwidth.free+(R.bandwidth.total-R.bandwidth.used),W=0;if(268>S)W=(268-S)*$.bandwidthFee;let t=Q+W;return y.AssetValue.from({chain:y.Chain.Tron,value:t,fromBaseDecimal:6})}let j=345,L=13000,x=R.bandwidth.free+(R.bandwidth.total-R.bandwidth.used),N=R.energy.total-R.energy.used,B=0;if(j>x)B=(j-x)*$.bandwidthFee;let C=0;if(L>N)C=(L-N)*$.energyFee;let d=Q+B+C;return y.AssetValue.from({chain:y.Chain.Tron,value:d,fromBaseDecimal:6})}catch(q){throw y.warnOnce(!0,`Failed to calculate exact fee, using conservative estimate: ${q instanceof Error?q.message:q}`),new y.SwapKitError("toolbox_tron_fee_estimation_failed",{error:q})}},c=async(T)=>{let{recipient:f,assetValue:z,memo:G,sender:q}=T;if(z.isGasAsset){let Q=await _.transactionBuilder.sendTrx(f,z.getBaseValue("number"),q);if(G)return _.transactionBuilder.addUpdateData(Q,G,"utf8");return Q}let U=z.address;if(!U)throw new y.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:z.toString()});try{let R=[{type:"address",value:f},{type:"uint256",value:z.getBaseValue("string")}],j={feeLimit:Z(),callValue:0};return(await _.transactionBuilder.triggerSmartContract(U,"transfer(address,uint256)",j,R,q)).transaction}catch(Q){throw new y.SwapKitError("toolbox_tron_transaction_creation_failed",{message:"Failed to create TRC20 transaction. This might be due to TronWeb 6.0.3 bug. Use the transfer method directly instead.",originalError:Q instanceof Error?Q.message:String(Q)})}},o=async(T)=>{if(!J)throw new y.SwapKitError("toolbox_tron_no_signer");return await J.signTransaction(T)},n=async(T)=>{let{txid:f}=await _.trx.sendRawTransaction(T);return f};return{tronWeb:_,getAddress:Y,validateAddress:await P(),getBalance:p,transfer:l,estimateTransactionFee:h,createTransaction:c,signTransaction:o,broadcastTransaction:n}};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=85AB30ED33F9CEC264756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/tron/toolbox.ts", "../src/tron/helpers/trc20.abi.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {\n AssetValue,\n Chain,\n NetworkDerivationPath,\n SKConfig,\n SwapKitError,\n derivationPathToString,\n updateDerivationPath,\n warnOnce,\n} from \"@swapkit/helpers\";\nimport { P, match } from \"ts-pattern\";\n\nimport { trc20ABI } from \"./helpers/trc20.abi.js\";\nimport type {\n TronCreateTransactionParams,\n TronSignedTransaction,\n TronSigner,\n TronToolboxOptions,\n TronTransaction,\n TronTransferParams,\n} from \"./types.js\";\n\nimport { TronWeb } from \"tronweb\";\n\nexport async function getTronAddressValidator() {\n return (address: string) => {\n return TronWeb.isAddress(address);\n };\n}\n\nexport async function getTronPrivateKeyFromMnemonic({\n phrase,\n derivationPath: customPath,\n index,\n}: {\n phrase: string;\n derivationPath?: string;\n index?: number;\n}) {\n const derivationPathToUse =\n customPath ||\n derivationPathToString(\n updateDerivationPath(NetworkDerivationPath[Chain.Tron], {\n index: index || 0,\n }),\n );\n\n const { HDKey } = await import(\"@scure/bip32\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n const derived = hdKey.derive(derivationPathToUse);\n\n if (!derived.privateKey) {\n throw new SwapKitError(\"toolbox_tron_no_signer\");\n }\n\n return Buffer.from(derived.privateKey).toString(\"hex\");\n}\n\nasync function createKeysForPath({\n phrase,\n derivationPath,\n}: {\n phrase: string;\n derivationPath: string;\n}) {\n const { HDKey } = await import(\"@scure/bip32\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n const derived = hdKey.derive(derivationPath);\n\n if (!derived.privateKey) {\n throw new SwapKitError(\"toolbox_tron_no_signer\");\n }\n\n // Convert private key to hex string for TronWeb\n const privateKeyHex = Buffer.from(derived.privateKey).toString(\"hex\");\n\n // Create TronWeb instance with the derived private key\n const tronWebWithKey = new TronWeb({\n fullHost: SKConfig.get(\"rpcUrls\")[Chain.Tron],\n privateKey: privateKeyHex,\n });\n\n const address = tronWebWithKey.address.fromPrivateKey(privateKeyHex);\n\n return {\n getAddress: () => Promise.resolve(typeof address === \"string\" ? address : \"\"),\n signTransaction: async (transaction: TronTransaction) => {\n const signedTx = await tronWebWithKey.trx.sign(transaction, privateKeyHex);\n return signedTx;\n },\n };\n}\n\nexport const createTronToolbox = async (options: TronToolboxOptions = {}) => {\n // Always get configuration from SKConfig\n const rpcUrl = SKConfig.get(\"rpcUrls\")[Chain.Tron];\n // Note: TRON API key support can be added to SKConfig apiKeys when needed\n const headers = undefined; // No API key needed for basic TronGrid access\n\n const tronWeb = new TronWeb({\n fullHost: rpcUrl,\n headers,\n });\n\n // Handle derivation path and index\n const index = \"index\" in options ? options.index || 0 : 0;\n const derivationPath = derivationPathToString(\n \"derivationPath\" in options && options.derivationPath\n ? options.derivationPath\n : updateDerivationPath(NetworkDerivationPath[Chain.Tron], { index }),\n );\n\n // Create signer based on options using pattern matching\n const signer: TronSigner | undefined = await match(options)\n .with({ phrase: P.string }, async ({ phrase }) => createKeysForPath({ phrase, derivationPath }))\n .with({ signer: P.any }, ({ signer }) => Promise.resolve(signer as TronSigner))\n .otherwise(() => Promise.resolve(undefined));\n\n const getAddress = async () => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n return await signer.getAddress();\n };\n\n const calculateFeeLimit = () => {\n return 100_000_000; // 100 TRX in SUN\n };\n\n const getBalance = async (address: string, scamFilter = true) => {\n const { getBalance: getBalanceFromApi } = await import(\"../utils.js\");\n\n try {\n // Use SwapKit API for comprehensive balance fetching (includes TRX + TRC20 tokens)\n const apiBalances = await getBalanceFromApi(Chain.Tron)(address, scamFilter);\n\n // If API returns balances, use those\n if (apiBalances.length > 0) {\n return apiBalances;\n }\n\n // Fallback to on-chain TRX balance if API fails or returns empty\n const trxBalanceInSun = await tronWeb.trx.getBalance(address);\n return [\n AssetValue.from({\n chain: Chain.Tron,\n value: trxBalanceInSun,\n fromBaseDecimal: 6, // TRX has 6 decimals\n }),\n ];\n } catch (error) {\n warnOnce(\n true,\n `Failed to get Tron balance for ${address}: ${error instanceof Error ? error.message : error}`,\n );\n\n // Final fallback: try to get just the native TRX balance\n try {\n const trxBalanceInSun = await tronWeb.trx.getBalance(address);\n return [\n AssetValue.from({\n chain: Chain.Tron,\n value: trxBalanceInSun,\n fromBaseDecimal: 6,\n }),\n ];\n } catch (fallbackError) {\n warnOnce(\n true,\n `Failed to get native TRX balance for ${address}: ${fallbackError instanceof Error ? fallbackError.message : fallbackError}`,\n );\n return [];\n }\n }\n };\n\n const transfer = async ({ recipient, assetValue, memo }: TronTransferParams) => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n\n const from = await getAddress();\n const isNative = assetValue.isGasAsset;\n\n if (isNative) {\n // Native TRX Transfer (amount in SUN - base units)\n const transaction = await tronWeb.transactionBuilder.sendTrx(\n recipient,\n assetValue.getBaseValue(\"number\"),\n from,\n );\n\n // Add memo if provided\n if (memo) {\n const transactionWithMemo = await tronWeb.transactionBuilder.addUpdateData(\n transaction,\n memo,\n \"utf8\",\n );\n const signedTx = await signer.signTransaction(transactionWithMemo);\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n return txid;\n }\n\n const signedTx = await signer.signTransaction(transaction);\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n return txid;\n }\n\n // TRC20 Token Transfer\n const contractAddress = assetValue.address;\n if (!contractAddress) {\n throw new SwapKitError(\"toolbox_tron_invalid_token_identifier\", {\n identifier: assetValue.toString(),\n });\n }\n\n const feeLimit = calculateFeeLimit();\n const contract = await tronWeb.contract(trc20ABI, contractAddress);\n\n if (!contract.methods?.transfer) {\n throw new SwapKitError(\"toolbox_tron_token_transfer_failed\");\n }\n\n const txid = await contract.methods\n .transfer(recipient, assetValue.getBaseValue(\"string\"))\n .send({\n from,\n feeLimit,\n callValue: 0,\n });\n\n if (!txid) {\n throw new SwapKitError(\"toolbox_tron_token_transfer_failed\");\n }\n\n return txid;\n };\n\n const estimateTransactionFee = ({ assetValue }: TronTransferParams) => {\n const isNative = assetValue.isGasAsset;\n\n if (isNative) {\n // Native TRX transfers typically consume bandwidth, which is free up to daily limit\n // Return a minimal fee estimation for bandwidth cost\n return AssetValue.from({ chain: Chain.Tron, value: 1 }); // 1 TRX\n }\n\n // TRC20 transfers consume energy, estimate higher fee\n return AssetValue.from({ chain: Chain.Tron, value: 10 }); // 10 TRX\n };\n\n const createTransaction = async (params: TronCreateTransactionParams) => {\n const { recipient, assetValue, memo, sender } = params;\n const isNative = assetValue.isGasAsset;\n\n if (isNative) {\n const transaction = await tronWeb.transactionBuilder.sendTrx(\n recipient,\n assetValue.getBaseValue(\"number\"),\n sender,\n );\n\n if (memo) {\n return tronWeb.transactionBuilder.addUpdateData(transaction, memo, \"utf8\");\n }\n\n return transaction;\n }\n\n // For TRC20, we would need to build the transaction manually\n // This is a simplified version - in practice, you'd build the contract call transaction\n const contractAddress = assetValue.address;\n if (!contractAddress) {\n throw new SwapKitError(\"toolbox_tron_invalid_token_identifier\", {\n identifier: assetValue.toString(),\n });\n }\n\n // Build TRC20 transfer transaction\n // First, try using triggerSmartContract (might work despite the known bug)\n try {\n const functionSelector = \"transfer(address,uint256)\";\n const parameter = [\n { type: \"address\", value: recipient },\n { type: \"uint256\", value: assetValue.getBaseValue(\"string\") },\n ];\n\n const options = {\n feeLimit: calculateFeeLimit(),\n callValue: 0,\n };\n\n const result = await tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n functionSelector,\n options,\n parameter,\n sender,\n );\n\n return result.transaction;\n } catch (error) {\n // If both methods fail, throw a descriptive error\n throw new SwapKitError(\"toolbox_tron_transaction_creation_failed\", {\n message:\n \"Failed to create TRC20 transaction. This might be due to TronWeb 6.0.3 bug. Use the transfer method directly instead.\",\n originalError: error instanceof Error ? error.message : String(error),\n });\n }\n };\n\n const signTransaction = async (transaction: TronTransaction) => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n return await signer.signTransaction(transaction);\n };\n\n const broadcastTransaction = async (signedTx: TronSignedTransaction) => {\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n return txid;\n };\n\n return {\n tronWeb,\n getAddress,\n validateAddress: await getTronAddressValidator(),\n getBalance,\n transfer,\n estimateTransactionFee,\n createTransaction,\n signTransaction,\n broadcastTransaction,\n };\n};\n",
|
|
5
|
+
"import {\n AssetValue,\n Chain,\n NetworkDerivationPath,\n SKConfig,\n SwapKitError,\n derivationPathToString,\n updateDerivationPath,\n warnOnce,\n} from \"@swapkit/helpers\";\nimport { P, match } from \"ts-pattern\";\n\nimport { trc20ABI } from \"./helpers/trc20.abi.js\";\nimport type {\n TronCreateTransactionParams,\n TronSignedTransaction,\n TronSigner,\n TronToolboxOptions,\n TronTransaction,\n TronTransferParams,\n} from \"./types.js\";\n\nimport { TronWeb } from \"tronweb\";\n\nexport async function getTronAddressValidator() {\n return (address: string) => {\n return TronWeb.isAddress(address);\n };\n}\n\nexport async function getTronPrivateKeyFromMnemonic({\n phrase,\n derivationPath: customPath,\n index,\n}: {\n phrase: string;\n derivationPath?: string;\n index?: number;\n}) {\n const derivationPathToUse =\n customPath ||\n derivationPathToString(\n updateDerivationPath(NetworkDerivationPath[Chain.Tron], {\n index: index || 0,\n }),\n );\n\n const { HDKey } = await import(\"@scure/bip32\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n const derived = hdKey.derive(derivationPathToUse);\n\n if (!derived.privateKey) {\n throw new SwapKitError(\"toolbox_tron_no_signer\");\n }\n\n return Buffer.from(derived.privateKey).toString(\"hex\");\n}\n\nasync function createKeysForPath({\n phrase,\n derivationPath,\n}: {\n phrase: string;\n derivationPath: string;\n}) {\n const { HDKey } = await import(\"@scure/bip32\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n const derived = hdKey.derive(derivationPath);\n\n if (!derived.privateKey) {\n throw new SwapKitError(\"toolbox_tron_no_signer\");\n }\n\n // Convert private key to hex string for TronWeb\n const privateKeyHex = Buffer.from(derived.privateKey).toString(\"hex\");\n\n // Create TronWeb instance with the derived private key\n const tronWebWithKey = new TronWeb({\n fullHost: SKConfig.get(\"rpcUrls\")[Chain.Tron],\n privateKey: privateKeyHex,\n });\n\n const address = tronWebWithKey.address.fromPrivateKey(privateKeyHex);\n\n return {\n getAddress: () => Promise.resolve(typeof address === \"string\" ? address : \"\"),\n signTransaction: async (transaction: TronTransaction) => {\n const signedTx = await tronWebWithKey.trx.sign(transaction, privateKeyHex);\n return signedTx;\n },\n };\n}\n\nexport const createTronToolbox = async (options: TronToolboxOptions = {}) => {\n // Always get configuration from SKConfig\n const rpcUrl = SKConfig.get(\"rpcUrls\")[Chain.Tron];\n // Note: TRON API key support can be added to SKConfig apiKeys when needed\n const headers = undefined; // No API key needed for basic TronGrid access\n\n const tronWeb = new TronWeb({\n fullHost: rpcUrl,\n headers,\n });\n\n // Handle derivation path and index\n const index = \"index\" in options ? options.index || 0 : 0;\n const derivationPath = derivationPathToString(\n \"derivationPath\" in options && options.derivationPath\n ? options.derivationPath\n : updateDerivationPath(NetworkDerivationPath[Chain.Tron], { index }),\n );\n\n // Create signer based on options using pattern matching\n const signer: TronSigner | undefined = await match(options)\n .with({ phrase: P.string }, async ({ phrase }) => createKeysForPath({ phrase, derivationPath }))\n .with({ signer: P.any }, ({ signer }) => Promise.resolve(signer as TronSigner))\n .otherwise(() => Promise.resolve(undefined));\n\n const getAddress = async () => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n return await signer.getAddress();\n };\n\n const calculateFeeLimit = () => {\n return 100_000_000; // 100 TRX in SUN\n };\n\n // Constants for TRON resource calculation\n const TRX_TRANSFER_BANDWIDTH = 268; // Bandwidth consumed by a TRX transfer\n const TRC20_TRANSFER_ENERGY = 13000; // Average energy consumed by TRC20 transfer\n const TRC20_TRANSFER_BANDWIDTH = 345; // Bandwidth consumed by TRC20 transfer\n\n /**\n * Get current chain parameters including resource prices\n */\n const getChainParameters = async () => {\n try {\n const parameters = await tronWeb.trx.getChainParameters();\n const paramMap: Record<string, number> = {};\n\n for (const param of parameters) {\n paramMap[param.key] = param.value;\n }\n\n return {\n energyFee: paramMap.getEnergyFee || 420, // SUN per energy unit\n bandwidthFee: paramMap.getTransactionFee || 1000, // SUN per bandwidth unit\n createAccountFee: paramMap.getCreateAccountFee || 100000, // 0.1 TRX in SUN\n };\n } catch {\n // Return default values if unable to fetch\n return {\n energyFee: 420,\n bandwidthFee: 1000,\n createAccountFee: 100000,\n };\n }\n };\n\n /**\n * Check if an address exists on the blockchain\n */\n const accountExists = async (address: string) => {\n try {\n const account = await tronWeb.trx.getAccount(address);\n return account && Object.keys(account).length > 0;\n } catch {\n return false;\n }\n };\n\n /**\n * Get account resources (bandwidth and energy)\n */\n const getAccountResources = async (address: string) => {\n try {\n const resources = await tronWeb.trx.getAccountResources(address);\n\n return {\n bandwidth: {\n free: resources.freeNetLimit - resources.freeNetUsed,\n total: resources.NetLimit || 0,\n used: resources.NetUsed || 0,\n },\n energy: {\n total: resources.EnergyLimit || 0,\n used: resources.EnergyUsed || 0,\n },\n };\n } catch {\n // Return default structure if unable to fetch\n return {\n bandwidth: { free: 600, total: 0, used: 0 }, // 600 free bandwidth daily\n energy: { total: 0, used: 0 },\n };\n }\n };\n\n const getBalance = async (address: string, scamFilter = true) => {\n const { getBalance: getBalanceFromApi } = await import(\"../utils.js\");\n\n try {\n // Use SwapKit API for comprehensive balance fetching (includes TRX + TRC20 tokens)\n const apiBalances = await getBalanceFromApi(Chain.Tron)(address, scamFilter);\n\n // If API returns balances, use those\n if (apiBalances.length > 0) {\n return apiBalances;\n }\n\n // Fallback to on-chain TRX balance if API fails or returns empty\n const trxBalanceInSun = await tronWeb.trx.getBalance(address);\n return [\n AssetValue.from({\n chain: Chain.Tron,\n value: trxBalanceInSun,\n fromBaseDecimal: 6, // TRX has 6 decimals\n }),\n ];\n } catch (error) {\n warnOnce(\n true,\n `Failed to get Tron balance for ${address}: ${error instanceof Error ? error.message : error}`,\n );\n\n // Final fallback: try to get just the native TRX balance\n try {\n const trxBalanceInSun = await tronWeb.trx.getBalance(address);\n return [\n AssetValue.from({\n chain: Chain.Tron,\n value: trxBalanceInSun,\n fromBaseDecimal: 6,\n }),\n ];\n } catch (fallbackError) {\n warnOnce(\n true,\n `Failed to get native TRX balance for ${address}: ${fallbackError instanceof Error ? fallbackError.message : fallbackError}`,\n );\n return [];\n }\n }\n };\n\n const transfer = async ({ recipient, assetValue, memo }: TronTransferParams) => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n\n const from = await getAddress();\n const isNative = assetValue.isGasAsset;\n\n if (isNative) {\n // Native TRX Transfer (amount in SUN - base units)\n const transaction = await tronWeb.transactionBuilder.sendTrx(\n recipient,\n assetValue.getBaseValue(\"number\"),\n from,\n );\n\n // Add memo if provided\n if (memo) {\n const transactionWithMemo = await tronWeb.transactionBuilder.addUpdateData(\n transaction,\n memo,\n \"utf8\",\n );\n const signedTx = await signer.signTransaction(transactionWithMemo);\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n return txid;\n }\n\n const signedTx = await signer.signTransaction(transaction);\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n return txid;\n }\n\n // TRC20 Token Transfer\n const contractAddress = assetValue.address;\n if (!contractAddress) {\n throw new SwapKitError(\"toolbox_tron_invalid_token_identifier\", {\n identifier: assetValue.toString(),\n });\n }\n\n const feeLimit = calculateFeeLimit();\n const contract = tronWeb.contract(trc20ABI, contractAddress);\n\n if (!contract.methods?.transfer) {\n throw new SwapKitError(\"toolbox_tron_token_transfer_failed\");\n }\n\n const txid = await contract.methods\n .transfer(recipient, assetValue.getBaseValue(\"string\"))\n .send({\n from,\n feeLimit,\n callValue: 0,\n });\n\n if (!txid) {\n throw new SwapKitError(\"toolbox_tron_token_transfer_failed\");\n }\n\n return txid;\n };\n\n const estimateTransactionFee = async ({\n assetValue,\n recipient,\n sender,\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n }: TronTransferParams & { sender?: string }) => {\n const isNative = assetValue.isGasAsset;\n\n try {\n // Get sender address\n const senderAddress = sender ? sender : signer ? await getAddress() : undefined;\n if (!senderAddress) {\n // If no signer, return conservative estimate\n return isNative\n ? AssetValue.from({ chain: Chain.Tron, value: 0.1, fromBaseDecimal: 0 })\n : AssetValue.from({ chain: Chain.Tron, value: 15, fromBaseDecimal: 0 });\n }\n\n // Get chain parameters for current resource prices\n const chainParams = await getChainParameters();\n\n // Check if recipient account exists (new accounts require activation fee)\n const recipientExists = await accountExists(recipient);\n const activationFee = recipientExists ? 0 : chainParams.createAccountFee;\n\n // Get account resources\n const resources = await getAccountResources(senderAddress);\n\n if (isNative) {\n // Calculate bandwidth needed for TRX transfer\n const bandwidthNeeded = TRX_TRANSFER_BANDWIDTH;\n const availableBandwidth =\n resources.bandwidth.free + (resources.bandwidth.total - resources.bandwidth.used);\n\n let bandwidthFee = 0;\n if (bandwidthNeeded > availableBandwidth) {\n // Need to burn TRX for bandwidth\n const bandwidthToBuy = bandwidthNeeded - availableBandwidth;\n bandwidthFee = bandwidthToBuy * chainParams.bandwidthFee;\n }\n\n // Total fee in SUN\n const totalFeeSun = activationFee + bandwidthFee;\n\n return AssetValue.from({\n chain: Chain.Tron,\n value: totalFeeSun,\n fromBaseDecimal: 6, // SUN to TRX\n });\n }\n\n // TRC20 Transfer - needs both bandwidth and energy\n const bandwidthNeeded = TRC20_TRANSFER_BANDWIDTH;\n const energyNeeded = TRC20_TRANSFER_ENERGY;\n\n const availableBandwidth =\n resources.bandwidth.free + (resources.bandwidth.total - resources.bandwidth.used);\n const availableEnergy = resources.energy.total - resources.energy.used;\n\n let bandwidthFee = 0;\n if (bandwidthNeeded > availableBandwidth) {\n const bandwidthToBuy = bandwidthNeeded - availableBandwidth;\n bandwidthFee = bandwidthToBuy * chainParams.bandwidthFee;\n }\n\n let energyFee = 0;\n if (energyNeeded > availableEnergy) {\n const energyToBuy = energyNeeded - availableEnergy;\n energyFee = energyToBuy * chainParams.energyFee;\n }\n\n // Total fee in SUN\n const totalFeeSun = activationFee + bandwidthFee + energyFee;\n\n return AssetValue.from({\n chain: Chain.Tron,\n value: totalFeeSun,\n fromBaseDecimal: 6, // SUN to TRX\n });\n } catch (error) {\n // Fallback to conservative estimates if calculation fails\n warnOnce(\n true,\n `Failed to calculate exact fee, using conservative estimate: ${error instanceof Error ? error.message : error}`,\n );\n\n throw new SwapKitError(\"toolbox_tron_fee_estimation_failed\", { error });\n }\n };\n\n const createTransaction = async (params: TronCreateTransactionParams) => {\n const { recipient, assetValue, memo, sender } = params;\n const isNative = assetValue.isGasAsset;\n\n if (isNative) {\n const transaction = await tronWeb.transactionBuilder.sendTrx(\n recipient,\n assetValue.getBaseValue(\"number\"),\n sender,\n );\n\n if (memo) {\n return tronWeb.transactionBuilder.addUpdateData(transaction, memo, \"utf8\");\n }\n\n return transaction;\n }\n\n // For TRC20, we would need to build the transaction manually\n // This is a simplified version - in practice, you'd build the contract call transaction\n const contractAddress = assetValue.address;\n if (!contractAddress) {\n throw new SwapKitError(\"toolbox_tron_invalid_token_identifier\", {\n identifier: assetValue.toString(),\n });\n }\n\n // Build TRC20 transfer transaction\n // First, try using triggerSmartContract (might work despite the known bug)\n try {\n const functionSelector = \"transfer(address,uint256)\";\n const parameter = [\n { type: \"address\", value: recipient },\n { type: \"uint256\", value: assetValue.getBaseValue(\"string\") },\n ];\n\n const options = {\n feeLimit: calculateFeeLimit(),\n callValue: 0,\n };\n\n const result = await tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n functionSelector,\n options,\n parameter,\n sender,\n );\n\n return result.transaction;\n } catch (error) {\n // If both methods fail, throw a descriptive error\n throw new SwapKitError(\"toolbox_tron_transaction_creation_failed\", {\n message:\n \"Failed to create TRC20 transaction. This might be due to TronWeb 6.0.3 bug. Use the transfer method directly instead.\",\n originalError: error instanceof Error ? error.message : String(error),\n });\n }\n };\n\n const signTransaction = async (transaction: TronTransaction) => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n return await signer.signTransaction(transaction);\n };\n\n const broadcastTransaction = async (signedTx: TronSignedTransaction) => {\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n return txid;\n };\n\n return {\n tronWeb,\n getAddress,\n validateAddress: await getTronAddressValidator(),\n getBalance,\n transfer,\n estimateTransactionFee,\n createTransaction,\n signTransaction,\n broadcastTransaction,\n };\n};\n",
|
|
6
6
|
"export const trc20ABI = [\n {\n constant: true,\n inputs: [{ name: \"_owner\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ name: \"balance\", type: \"uint256\" }],\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"_to\", type: \"address\" },\n { name: \"_value\", type: \"uint256\" },\n ],\n name: \"transfer\",\n outputs: [{ name: \"success\", type: \"bool\" }],\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"decimals\",\n outputs: [{ name: \"\", type: \"uint8\" }],\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"symbol\",\n outputs: [{ name: \"\", type: \"string\" }],\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"name\",\n outputs: [{ name: \"\", type: \"string\" }],\n type: \"function\",\n },\n] as const;\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "6IASO,IATP,8BAUA,wBCVO,IAAM,EAAW,CACtB,CACE,SAAU,GACV,OAAQ,CAAC,CAAE,KAAM,SAAU,KAAM,SAAU,CAAC,EAC5C,KAAM,YACN,QAAS,CAAC,CAAE,KAAM,UAAW,KAAM,SAAU,CAAC,EAC9C,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CACN,CAAE,KAAM,MAAO,KAAM,SAAU,EAC/B,CAAE,KAAM,SAAU,KAAM,SAAU,CACpC,EACA,KAAM,WACN,QAAS,CAAC,CAAE,KAAM,UAAW,KAAM,MAAO,CAAC,EAC3C,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CAAC,EACT,KAAM,WACN,QAAS,CAAC,CAAE,KAAM,GAAI,KAAM,OAAQ,CAAC,EACrC,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CAAC,EACT,KAAM,SACN,QAAS,CAAC,CAAE,KAAM,GAAI,KAAM,QAAS,CAAC,EACtC,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CAAC,EACT,KAAM,OACN,QAAS,CAAC,CAAE,KAAM,GAAI,KAAM,QAAS,CAAC,EACtC,KAAM,UACR,CACF,EDjBwB,IAAxB,qBAEA,eAAsB,CAAuB,EAAG,CAC9C,MAAO,CAAC,IAAoB,CAC1B,OAAO,UAAQ,UAAU,CAAO,GAIpC,eAAsB,CAA6B,EACjD,SACA,eAAgB,EAChB,SAKC,CACD,IAAM,EACJ,GACA,yBACE,uBAAqB,wBAAsB,QAAM,MAAO,CACtD,MAAO,GAAS,CAClB,CAAC,CACH,GAEM,SAAU,KAAa,yBACvB,sBAAuB,KAAa,wBAEtC,EAAO,EAAmB,CAAM,EAEhC,EADQ,EAAM,eAAe,CAAI,EACjB,OAAO,CAAmB,EAEhD,IAAK,EAAQ,WACX,MAAM,IAAI,eAAa,wBAAwB,EAGjD,OAAO,OAAO,KAAK,EAAQ,UAAU,EAAE,SAAS,KAAK,EAGvD,eAAe,CAAiB,EAC9B,SACA,kBAIC,CACD,IAAQ,SAAU,KAAa,yBACvB,sBAAuB,KAAa,wBAEtC,EAAO,EAAmB,CAAM,EAEhC,EADQ,EAAM,eAAe,CAAI,EACjB,OAAO,CAAc,EAE3C,IAAK,EAAQ,WACX,MAAM,IAAI,eAAa,wBAAwB,EAIjD,IAAM,EAAgB,OAAO,KAAK,EAAQ,UAAU,EAAE,SAAS,KAAK,EAG9D,EAAiB,IAAI,UAAQ,CACjC,SAAU,WAAS,IAAI,SAAS,EAAE,QAAM,MACxC,WAAY,CACd,CAAC,EAEK,EAAU,EAAe,QAAQ,eAAe,CAAa,EAEnE,MAAO,CACL,WAAY,IAAM,QAAQ,QAAQ,OAAO,IAAY,SAAW,EAAU,EAAE,EAC5E,gBAAiB,MAAO,IAAiC,CAEvD,OADiB,MAAM,EAAe,IAAI,KAAK,EAAa,CAAa,EAG7E,EAGK,IAAM,EAAoB,MAAO,EAA8B,CAAC,IAAM,CAE3E,IAAM,EAAS,WAAS,IAAI,SAAS,EAAE,QAAM,MAEvC,EAAU,OAEV,EAAU,IAAI,UAAQ,CAC1B,SAAU,EACV,QAJc,MAKhB,CAAC,EAGK,EAAQ,UAAW,EAAU,EAAQ,OAAS,EAAI,EAClD,EAAiB,yBACrB,mBAAoB,GAAW,EAAQ,eACnC,EAAQ,eACR,uBAAqB,wBAAsB,QAAM,MAAO,CAAE,OAAM,CAAC,CACvE,EAGM,EAAiC,MAAM,QAAM,CAAO,EACvD,KAAK,CAAE,OAAQ,IAAE,MAAO,EAAG,OAAS,YAAa,EAAkB,CAAE,SAAQ,gBAAe,CAAC,CAAC,EAC9F,KAAK,CAAE,OAAQ,IAAE,GAAI,EAAG,EAAG,YAAa,QAAQ,QAAQ,CAAoB,CAAC,EAC7E,UAAU,IAAM,QAAQ,QAAQ,MAAS,CAAC,EAEvC,EAAa,SAAY,CAC7B,IAAK,EAAQ,MAAM,IAAI,eAAa,wBAAwB,EAC5D,OAAO,MAAM,EAAO,WAAW,GAG3B,EAAoB,IAAM,CAC9B,MAAO,
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "85AB30ED33F9CEC264756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
package/dist/src/tron/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import{d as
|
|
1
|
+
import{d as k,e as D}from"../../chunk-s47y8512.js";import{AssetValue as I,Chain as X,NetworkDerivationPath as u,SKConfig as w,SwapKitError as Y,derivationPathToString as b,updateDerivationPath as p,warnOnce as K}from"@swapkit/helpers";import{P as g,match as fy}from"ts-pattern";var P=[{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"success",type:"bool"}],type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],type:"function"}];import{TronWeb as m}from"tronweb";async function l(){return(R)=>{return m.isAddress(R)}}async function Ty({phrase:R,derivationPath:U,index:x}){let T=U||b(p(u[X.Tron],{index:x||0})),{HDKey:L}=await import("@scure/bip32"),{mnemonicToSeedSync:N}=await import("@scure/bip39"),G=N(R),$=L.fromMasterSeed(G).derive(T);if(!$.privateKey)throw new Y("toolbox_tron_no_signer");return Buffer.from($.privateKey).toString("hex")}async function _y({phrase:R,derivationPath:U}){let{HDKey:x}=await import("@scure/bip32"),{mnemonicToSeedSync:T}=await import("@scure/bip39"),L=T(R),G=x.fromMasterSeed(L).derive(U);if(!G.privateKey)throw new Y("toolbox_tron_no_signer");let Z=Buffer.from(G.privateKey).toString("hex"),$=new m({fullHost:w.get("rpcUrls")[X.Tron],privateKey:Z}),E=$.address.fromPrivateKey(Z);return{getAddress:()=>Promise.resolve(typeof E==="string"?E:""),signTransaction:async(S)=>{return await $.trx.sign(S,Z)}}}var qy=async(R={})=>{let U=w.get("rpcUrls")[X.Tron],x=void 0,T=new m({fullHost:U,headers:void 0}),L="index"in R?R.index||0:0,N=b("derivationPath"in R&&R.derivationPath?R.derivationPath:p(u[X.Tron],{index:L})),G=await fy(R).with({phrase:g.string},async({phrase:f})=>_y({phrase:f,derivationPath:N})).with({signer:g.any},({signer:f})=>Promise.resolve(f)).otherwise(()=>Promise.resolve(void 0)),Z=async()=>{if(!G)throw new Y("toolbox_tron_no_signer");return await G.getAddress()},$=()=>{return 1e8},E=268,S=13000,h=345,c=async()=>{try{let f=await T.trx.getChainParameters(),y={};for(let q of f)y[q.key]=q.value;return{energyFee:y.getEnergyFee||420,bandwidthFee:y.getTransactionFee||1000,createAccountFee:y.getCreateAccountFee||1e5}}catch{return{energyFee:420,bandwidthFee:1000,createAccountFee:1e5}}},o=async(f)=>{try{let y=await T.trx.getAccount(f);return y&&Object.keys(y).length>0}catch{return!1}},n=async(f)=>{try{let y=await T.trx.getAccountResources(f);return{bandwidth:{free:y.freeNetLimit-y.freeNetUsed,total:y.NetLimit||0,used:y.NetUsed||0},energy:{total:y.EnergyLimit||0,used:y.EnergyUsed||0}}}catch{return{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}},d=async(f,y=!0)=>{let{getBalance:q}=await import("../../chunk-6f98phv2.js");try{let z=await q(X.Tron)(f,y);if(z.length>0)return z;let _=await T.trx.getBalance(f);return[I.from({chain:X.Tron,value:_,fromBaseDecimal:6})]}catch(z){K(!0,`Failed to get Tron balance for ${f}: ${z instanceof Error?z.message:z}`);try{let _=await T.trx.getBalance(f);return[I.from({chain:X.Tron,value:_,fromBaseDecimal:6})]}catch(_){return K(!0,`Failed to get native TRX balance for ${f}: ${_ instanceof Error?_.message:_}`),[]}}},t=async({recipient:f,assetValue:y,memo:q})=>{if(!G)throw new Y("toolbox_tron_no_signer");let z=await Z();if(y.isGasAsset){let O=await T.transactionBuilder.sendTrx(f,y.getBaseValue("number"),z);if(q){let C=await T.transactionBuilder.addUpdateData(O,q,"utf8"),A=await G.signTransaction(C),{txid:F}=await T.trx.sendRawTransaction(A);return F}let H=await G.signTransaction(O),{txid:B}=await T.trx.sendRawTransaction(H);return B}let j=y.address;if(!j)throw new Y("toolbox_tron_invalid_token_identifier",{identifier:y.toString()});let M=$(),J=T.contract(P,j);if(!J.methods?.transfer)throw new Y("toolbox_tron_token_transfer_failed");let Q=await J.methods.transfer(f,y.getBaseValue("string")).send({from:z,feeLimit:M,callValue:0});if(!Q)throw new Y("toolbox_tron_token_transfer_failed");return Q},i=async({assetValue:f,recipient:y,sender:q})=>{let z=f.isGasAsset;try{let _=q?q:G?await Z():void 0;if(!_)return z?I.from({chain:X.Tron,value:0.1,fromBaseDecimal:0}):I.from({chain:X.Tron,value:15,fromBaseDecimal:0});let j=await c(),J=await o(y)?0:j.createAccountFee,Q=await n(_);if(z){let V=Q.bandwidth.free+(Q.bandwidth.total-Q.bandwidth.used),v=0;if(268>V)v=(268-V)*j.bandwidthFee;let yy=J+v;return I.from({chain:X.Tron,value:yy,fromBaseDecimal:6})}let O=345,H=13000,B=Q.bandwidth.free+(Q.bandwidth.total-Q.bandwidth.used),C=Q.energy.total-Q.energy.used,A=0;if(O>B)A=(O-B)*j.bandwidthFee;let F=0;if(H>C)F=(H-C)*j.energyFee;let e=J+A+F;return I.from({chain:X.Tron,value:e,fromBaseDecimal:6})}catch(_){throw K(!0,`Failed to calculate exact fee, using conservative estimate: ${_ instanceof Error?_.message:_}`),new Y("toolbox_tron_fee_estimation_failed",{error:_})}},s=async(f)=>{let{recipient:y,assetValue:q,memo:z,sender:_}=f;if(q.isGasAsset){let J=await T.transactionBuilder.sendTrx(y,q.getBaseValue("number"),_);if(z)return T.transactionBuilder.addUpdateData(J,z,"utf8");return J}let M=q.address;if(!M)throw new Y("toolbox_tron_invalid_token_identifier",{identifier:q.toString()});try{let Q=[{type:"address",value:y},{type:"uint256",value:q.getBaseValue("string")}],O={feeLimit:$(),callValue:0};return(await T.transactionBuilder.triggerSmartContract(M,"transfer(address,uint256)",O,Q,_)).transaction}catch(J){throw new Y("toolbox_tron_transaction_creation_failed",{message:"Failed to create TRC20 transaction. This might be due to TronWeb 6.0.3 bug. Use the transfer method directly instead.",originalError:J instanceof Error?J.message:String(J)})}},a=async(f)=>{if(!G)throw new Y("toolbox_tron_no_signer");return await G.signTransaction(f)},r=async(f)=>{let{txid:y}=await T.trx.sendRawTransaction(f);return y};return{tronWeb:T,getAddress:Z,validateAddress:await l(),getBalance:d,transfer:t,estimateTransactionFee:i,createTransaction:s,signTransaction:a,broadcastTransaction:r}};export{P as trc20ABI,Ty as getTronPrivateKeyFromMnemonic,l as getTronAddressValidator,qy as createTronToolbox};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=EED46AFEC48D42F464756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.js.map
|