@xchainjs/xchain-solana 0.0.9 → 0.0.11
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/lib/client.d.ts +2 -2
- package/lib/index.esm.js +9 -7
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +9 -7
- package/lib/index.js.map +1 -1
- package/lib/types.d.ts +1 -0
- package/package.json +1 -1
package/lib/client.d.ts
CHANGED
|
@@ -98,7 +98,7 @@ export declare class Client extends BaseXChainClient {
|
|
|
98
98
|
* @param {TxParams} params The transfer options.
|
|
99
99
|
* @returns {TxHash} The transaction hash.
|
|
100
100
|
*/
|
|
101
|
-
transfer({ walletIndex, recipient, asset, amount, memo, limit, priorityFee, }: TxParams): Promise<string>;
|
|
101
|
+
transfer({ walletIndex, recipient, asset, amount, memo, limit, priorityFee, allowOwnerOffCurve, }: TxParams): Promise<string>;
|
|
102
102
|
/**
|
|
103
103
|
* Broadcast a transaction to the network
|
|
104
104
|
* @param {string} txHex Raw transaction to broadcast
|
|
@@ -111,7 +111,7 @@ export declare class Client extends BaseXChainClient {
|
|
|
111
111
|
* @param {TxParams&Address} params - The transfer options.
|
|
112
112
|
* @returns {Promise<PreparedTx>} The raw unsigned transaction.
|
|
113
113
|
*/
|
|
114
|
-
prepareTx({ sender, recipient, asset, amount, memo, limit, priorityFee, }: TxParams & {
|
|
114
|
+
prepareTx({ sender, recipient, asset, amount, memo, limit, priorityFee, allowOwnerOffCurve, }: TxParams & {
|
|
115
115
|
sender: Address;
|
|
116
116
|
}): Promise<PreparedTx>;
|
|
117
117
|
private getPrivateKeyPair;
|
package/lib/index.esm.js
CHANGED
|
@@ -268,7 +268,7 @@ class Client extends BaseXChainClient {
|
|
|
268
268
|
* @param {TxParams} params The transfer options.
|
|
269
269
|
* @returns {TxHash} The transaction hash.
|
|
270
270
|
*/
|
|
271
|
-
transfer({ walletIndex, recipient, asset, amount, memo, limit, priorityFee, }) {
|
|
271
|
+
transfer({ walletIndex, recipient, asset, amount, memo, limit, priorityFee, allowOwnerOffCurve, }) {
|
|
272
272
|
return __awaiter(this, void 0, void 0, function* () {
|
|
273
273
|
return this.roundRobinTransfer({
|
|
274
274
|
walletIndex,
|
|
@@ -278,6 +278,7 @@ class Client extends BaseXChainClient {
|
|
|
278
278
|
memo,
|
|
279
279
|
limit,
|
|
280
280
|
priorityFee,
|
|
281
|
+
allowOwnerOffCurve,
|
|
281
282
|
});
|
|
282
283
|
});
|
|
283
284
|
}
|
|
@@ -297,7 +298,7 @@ class Client extends BaseXChainClient {
|
|
|
297
298
|
* @param {TxParams&Address} params - The transfer options.
|
|
298
299
|
* @returns {Promise<PreparedTx>} The raw unsigned transaction.
|
|
299
300
|
*/
|
|
300
|
-
prepareTx({ sender, recipient, asset, amount, memo, limit, priorityFee, }) {
|
|
301
|
+
prepareTx({ sender, recipient, asset, amount, memo, limit, priorityFee, allowOwnerOffCurve, }) {
|
|
301
302
|
return __awaiter(this, void 0, void 0, function* () {
|
|
302
303
|
return this.roundRobinPrepareTx({
|
|
303
304
|
sender,
|
|
@@ -307,6 +308,7 @@ class Client extends BaseXChainClient {
|
|
|
307
308
|
memo,
|
|
308
309
|
limit,
|
|
309
310
|
priorityFee,
|
|
311
|
+
allowOwnerOffCurve,
|
|
310
312
|
});
|
|
311
313
|
});
|
|
312
314
|
}
|
|
@@ -472,7 +474,7 @@ class Client extends BaseXChainClient {
|
|
|
472
474
|
else {
|
|
473
475
|
// Token transfer
|
|
474
476
|
const mintAddress = new PublicKey(getContractAddressFromAsset(params.asset));
|
|
475
|
-
const associatedTokenAddress = getAssociatedTokenAddressSync(mintAddress, toPubkey);
|
|
477
|
+
const associatedTokenAddress = getAssociatedTokenAddressSync(mintAddress, toPubkey, params.allowOwnerOffCurve);
|
|
476
478
|
try {
|
|
477
479
|
yield getAccount(provider.solanaProvider, associatedTokenAddress, undefined, TOKEN_PROGRAM_ID);
|
|
478
480
|
transaction.add(createTransferInstruction(sender.publicKey, // Should be Token account, but as it new KeyPair for estimation, sender public key
|
|
@@ -577,7 +579,7 @@ class Client extends BaseXChainClient {
|
|
|
577
579
|
* @returns {TxHash} The transaction hash.
|
|
578
580
|
* @throws {Error} if there is no provider able to make the transfer
|
|
579
581
|
*/
|
|
580
|
-
roundRobinTransfer({ walletIndex, recipient, asset, amount, memo, limit, priorityFee, }) {
|
|
582
|
+
roundRobinTransfer({ walletIndex, recipient, asset, amount, memo, limit, priorityFee, allowOwnerOffCurve, }) {
|
|
581
583
|
return __awaiter(this, void 0, void 0, function* () {
|
|
582
584
|
try {
|
|
583
585
|
const senderKeyPair = this.getPrivateKeyPair(walletIndex || 0);
|
|
@@ -585,7 +587,7 @@ class Client extends BaseXChainClient {
|
|
|
585
587
|
if (asset && !eqAsset(asset, this.getAssetInfo().asset)) {
|
|
586
588
|
// Check if receipt token account is created, otherwise, create it
|
|
587
589
|
const mintAddress = new PublicKey(getContractAddressFromAsset(asset));
|
|
588
|
-
yield getOrCreateAssociatedTokenAccount(provider.solanaProvider, senderKeyPair, mintAddress, new PublicKey(recipient));
|
|
590
|
+
yield getOrCreateAssociatedTokenAccount(provider.solanaProvider, senderKeyPair, mintAddress, new PublicKey(recipient), allowOwnerOffCurve);
|
|
589
591
|
}
|
|
590
592
|
const { rawUnsignedTx } = yield this.prepareTx({
|
|
591
593
|
sender: senderKeyPair.publicKey.toBase58(),
|
|
@@ -639,7 +641,7 @@ class Client extends BaseXChainClient {
|
|
|
639
641
|
* @returns {Promise<PreparedTx>} The raw unsigned transaction.
|
|
640
642
|
* @throws {Error} if there is no provider able to prepare transaction
|
|
641
643
|
*/
|
|
642
|
-
roundRobinPrepareTx({ sender, recipient, asset, amount, memo, limit, priorityFee, }) {
|
|
644
|
+
roundRobinPrepareTx({ sender, recipient, asset, amount, memo, limit, priorityFee, allowOwnerOffCurve, }) {
|
|
643
645
|
return __awaiter(this, void 0, void 0, function* () {
|
|
644
646
|
try {
|
|
645
647
|
for (const provider of this.providers) {
|
|
@@ -672,7 +674,7 @@ class Client extends BaseXChainClient {
|
|
|
672
674
|
}
|
|
673
675
|
throw error;
|
|
674
676
|
}
|
|
675
|
-
const toAssociatedAccount = getAssociatedTokenAddressSync(mintAddress, toPubkey);
|
|
677
|
+
const toAssociatedAccount = getAssociatedTokenAddressSync(mintAddress, toPubkey, allowOwnerOffCurve);
|
|
676
678
|
let toTokenAccount;
|
|
677
679
|
try {
|
|
678
680
|
toTokenAccount = yield getAccount(provider.solanaProvider, toAssociatedAccount);
|
package/lib/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/const.ts","../src/utils.ts","../src/client.ts"],"sourcesContent":["import { ExplorerProvider, Network } from '@xchainjs/xchain-client'\nimport { Asset, AssetType } from '@xchainjs/xchain-util'\n\nimport { SOLClientParams } from './types'\n\n/**\n * Solana chain symbol\n */\nexport const SOLChain = 'SOL' as const\n\n/**\n * Solana native asset decimals\n */\nexport const SOL_DECIMALS = 9\n\n/**\n * Solana native asset\n */\nexport const SOLAsset: Asset = {\n chain: 'SOL',\n ticker: 'SOL',\n symbol: 'SOL',\n type: AssetType.NATIVE,\n}\n\nconst mainnetExplorer = new ExplorerProvider(\n 'https://explorer.solana.com/',\n 'https://explorer.solana.com/address/%%ADDRESS%%',\n 'https://explorer.solana.com/tx/%%TX_ID%%',\n)\n\nexport const defaultSolanaParams: SOLClientParams = {\n network: Network.Mainnet,\n rootDerivationPaths: {\n [Network.Mainnet]: \"m/44'/501'/\",\n [Network.Testnet]: \"m/44'/501'/\",\n [Network.Stagenet]: \"m/44'/501'/\",\n },\n explorerProviders: {\n [Network.Mainnet]: mainnetExplorer,\n [Network.Testnet]: new ExplorerProvider(\n 'https://explorer.solana.com/?cluster=testnet',\n 'https://explorer.solana.com/address/%%ADDRESS%%?cluster=testnet',\n 'https://explorer.solana.com/tx/%%TX_ID%%?cluster=testnet',\n ),\n [Network.Stagenet]: mainnetExplorer,\n },\n}\n","import { Cluster } from '@solana/web3.js'\nimport { Network } from '@xchainjs/xchain-client'\n\nexport const getSolanaNetwork = (network: Network): Cluster => {\n const networkMap: { [key in Network]: Cluster } = {\n [Network.Mainnet]: 'mainnet-beta',\n [Network.Stagenet]: 'mainnet-beta',\n [Network.Testnet]: 'testnet',\n }\n return networkMap[network]\n}\n","import { fetchAllDigitalAsset, fetchDigitalAsset, mplTokenMetadata } from '@metaplex-foundation/mpl-token-metadata'\nimport { PublicKey as UmiPubliKey, Umi, publicKey } from '@metaplex-foundation/umi'\nimport { createUmi } from '@metaplex-foundation/umi-bundle-defaults'\nimport { isAddress } from '@solana/addresses'\nimport {\n Account,\n TOKEN_PROGRAM_ID,\n TokenAccountNotFoundError,\n TokenInvalidAccountOwnerError,\n createTransferInstruction,\n getAccount,\n getAssociatedTokenAddressSync,\n getOrCreateAssociatedTokenAccount,\n} from '@solana/spl-token'\nimport {\n ComputeBudgetProgram,\n Connection,\n Keypair,\n ParsedTransactionWithMeta,\n PublicKey,\n SendTransactionError,\n SystemProgram,\n Transaction,\n TransactionInstruction,\n clusterApiUrl,\n} from '@solana/web3.js'\nimport {\n AssetInfo,\n BaseXChainClient,\n ExplorerProviders,\n FeeOption,\n FeeType,\n Fees,\n Network,\n PreparedTx,\n TxHash,\n TxHistoryParams,\n TxType,\n} from '@xchainjs/xchain-client'\nimport { getSeed } from '@xchainjs/xchain-crypto'\nimport {\n Address,\n TokenAsset,\n assetAmount,\n assetFromStringEx,\n assetToBase,\n baseAmount,\n eqAsset,\n getContractAddressFromAsset,\n} from '@xchainjs/xchain-util'\nimport bs58 from 'bs58'\nimport { HDKey } from 'micro-ed25519-hdkey'\n\nimport { SOLAsset, SOLChain, SOL_DECIMALS, defaultSolanaParams } from './const'\nimport { TokenAssetData } from './solana-types'\nimport { Balance, SOLClientParams, Tx, TxFrom, TxParams, TxTo, TxsPage } from './types'\nimport { getSolanaNetwork } from './utils'\n\ntype Providers = {\n solanaProvider: Connection\n umiProvider: Umi\n}\n\nexport class Client extends BaseXChainClient {\n private explorerProviders: ExplorerProviders\n private providers: Providers[]\n private clientUrls?: Record<Network, string[]>\n\n constructor(params: SOLClientParams = defaultSolanaParams) {\n super(SOLChain, {\n ...defaultSolanaParams,\n ...params,\n })\n this.explorerProviders = params.explorerProviders\n this.clientUrls = params.clientUrls\n\n if (!this.clientUrls) {\n const solanaProvider = new Connection(clusterApiUrl(getSolanaNetwork(this.getNetwork())))\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n this.providers = [\n {\n solanaProvider,\n umiProvider,\n },\n ]\n } else {\n this.providers = this.clientUrls[this.getNetwork()].map((url) => {\n const solanaProvider = new Connection(url)\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n return {\n solanaProvider,\n umiProvider,\n }\n })\n }\n }\n\n /**\n * Set or update the current network.\n * @param {Network} network The network to set\n * @returns {void}\n */\n public setNetwork(network: Network): void {\n super.setNetwork(network)\n if (!this.clientUrls) {\n const solanaProvider = new Connection(clusterApiUrl(getSolanaNetwork(this.getNetwork())))\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n this.providers = [\n {\n solanaProvider,\n umiProvider,\n },\n ]\n } else {\n this.providers = this.clientUrls[this.getNetwork()].map((url) => {\n const solanaProvider = new Connection(url)\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n return {\n solanaProvider,\n umiProvider,\n }\n })\n }\n }\n\n /**\n * Get information about the native asset of the Solana.\n *\n * @returns {AssetInfo} Information about the native asset.\n */\n public getAssetInfo(): AssetInfo {\n return {\n asset: SOLAsset,\n decimal: SOL_DECIMALS,\n }\n }\n\n /**\n * Get the explorer URL.\n *\n * @returns {string} The explorer URL.\n */\n public getExplorerUrl(): string {\n return this.explorerProviders[this.getNetwork()].getExplorerUrl()\n }\n\n /**\n * Get the explorer url for the given address.\n *\n * @param {Address} address\n * @returns {string} The explorer url for the given address.\n */\n public getExplorerAddressUrl(address: Address): string {\n return this.explorerProviders[this.getNetwork()].getExplorerAddressUrl(address)\n }\n\n /**\n * Get the explorer url for the given transaction id.\n *\n * @param {string} txID\n * @returns {string} The explorer url for the given transaction id.\n */\n public getExplorerTxUrl(txID: TxHash): string {\n return this.explorerProviders[this.getNetwork()].getExplorerTxUrl(txID)\n }\n\n /**\n * Get the full derivation path based on the wallet index.\n * @param {number} walletIndex The HD wallet index\n * @returns {string} The full derivation path\n */\n public getFullDerivationPath(walletIndex: number): string {\n if (!this.rootDerivationPaths) {\n throw Error('Can not generate derivation path due to root derivation path is undefined')\n }\n return `${this.rootDerivationPaths[this.getNetwork()]}${walletIndex}'`\n }\n\n /**\n * Get the current address asynchronously.\n *\n * @param {number} index The index of the address. Default 0\n * @returns {Address} The Solana address related to the index provided.\n * @throws {\"Phrase must be provided\"} Thrown if the phrase has not been set before.\n */\n public async getAddressAsync(index?: number): Promise<string> {\n return this.getPrivateKeyPair(index || 0).publicKey.toBase58()\n }\n\n /**\n * Get the current address synchronously.\n * @deprecated\n */\n public getAddress(): string {\n throw Error('Sync method not supported')\n }\n\n /**\n * Validate the given Solana address.\n * @param {string} address Solana address to validate.\n * @returns {boolean} `true` if the address is valid, `false` otherwise.\n */\n public validateAddress(address: Address): boolean {\n return isAddress(address)\n }\n\n /**\n * Retrieves the balance of a given address.\n * @param {Address} address - The address to retrieve the balance for.\n * @param {TokenAsset[]} assets - Assets to retrieve the balance for (optional).\n * @returns {Promise<Balance[]>} An array containing the balance of the address.\n */\n public async getBalance(address: Address, assets?: TokenAsset[]): Promise<Balance[]> {\n return this.roundRobinGetBalance(address, assets)\n }\n\n /**\n * Get transaction fees.\n *\n * @param {TxParams} params - The transaction parameters.\n * @returns {Fees} The average, fast, and fastest fees.\n * @throws {\"Params need to be passed\"} Thrown if parameters are not provided.\n */\n public async getFees(params?: TxParams): Promise<Fees> {\n if (!params) throw new Error('Params need to be passed')\n return this.roundRobinGetFees(params)\n }\n\n /**\n * Get the transaction details of a given transaction ID.\n *\n * @param {string} txId The transaction ID.\n * @returns {Tx} The transaction details.\n */\n public async getTransactionData(txId: string): Promise<Tx> {\n const transaction = await this.roundRobinGetTransactionData(txId)\n if (!transaction) throw Error('Can not find transaction')\n\n return this.parseTransaction(transaction)\n }\n\n /**\n * Get the transaction history of a given address with pagination options.\n *\n * @param {TxHistoryParams} params The options to get transaction history.\n * @returns {TxsPage} The transaction history.\n */\n public async getTransactions(params?: TxHistoryParams): Promise<TxsPage> {\n return this.roundRobinGetTransactions(params)\n }\n\n /**\n * Transfers SOL or Solana token\n *\n * @param {TxParams} params The transfer options.\n * @returns {TxHash} The transaction hash.\n */\n public async transfer({\n walletIndex,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n }: TxParams): Promise<string> {\n return this.roundRobinTransfer({\n walletIndex,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n })\n }\n\n /**\n * Broadcast a transaction to the network\n * @param {string} txHex Raw transaction to broadcast\n * @returns {TxHash} The hash of the transaction broadcasted\n */\n public async broadcastTx(txHex: string): Promise<TxHash> {\n return this.roundRobinBroadcastTx(txHex)\n }\n\n /**\n * Prepares a transaction for transfer.\n *\n * @param {TxParams&Address} params - The transfer options.\n * @returns {Promise<PreparedTx>} The raw unsigned transaction.\n */\n public async prepareTx({\n sender,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n }: TxParams & { sender: Address }): Promise<PreparedTx> {\n return this.roundRobinPrepareTx({\n sender,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n })\n }\n\n private getPrivateKeyPair(index: number): Keypair {\n if (!this.phrase) throw new Error('Phrase must be provided')\n\n const seed = getSeed(this.phrase)\n const hd = HDKey.fromMasterSeed(seed.toString('hex'))\n\n return Keypair.fromSeed(hd.derive(this.getFullDerivationPath(index)).privateKey)\n }\n\n private async parseTransaction(tx: ParsedTransactionWithMeta): Promise<Tx> {\n const from: TxFrom[] = []\n const to: TxTo[] = []\n\n tx.transaction.message.accountKeys.forEach((accountKey, index) => {\n if (accountKey.writable) {\n const preBalance = tx.meta?.preBalances[index]\n const postBalance = tx.meta?.postBalances[index]\n\n if (preBalance !== undefined && postBalance !== undefined) {\n if (postBalance > preBalance) {\n to.push({\n amount: baseAmount(postBalance - preBalance, this.getAssetInfo().decimal),\n asset: this.getAssetInfo().asset,\n to: accountKey.pubkey.toBase58(),\n })\n } else if (preBalance > postBalance) {\n from.push({\n amount: baseAmount(preBalance - postBalance, this.getAssetInfo().decimal),\n asset: this.getAssetInfo().asset,\n from: accountKey.pubkey.toBase58(),\n })\n }\n }\n }\n })\n\n // Tokens transfer\n if (tx.meta?.preTokenBalances && tx.meta?.postTokenBalances) {\n for (let i = 0; i < tx.meta?.postTokenBalances.length; i++) {\n const postBalance = tx.meta.postTokenBalances[i]\n\n const preBalance = tx.meta.preTokenBalances.find(\n (preTokenBalance) => preTokenBalance.accountIndex === postBalance.accountIndex,\n )\n\n const postBalanceAmount = postBalance.uiTokenAmount.uiAmount || 0\n const preBalanceAmount = preBalance?.uiTokenAmount.uiAmount || 0\n\n if (preBalance !== null && postBalance !== null) {\n const assetDecimals = tx.meta.postTokenBalances[i].uiTokenAmount.decimals\n const mintAddress = tx.meta.postTokenBalances[i].mint\n const owner = tx.meta.postTokenBalances[i].owner\n\n try {\n for (const provider of this.providers) {\n const tokenMetadata = await fetchDigitalAsset(provider.umiProvider, publicKey(mintAddress))\n\n if (owner) {\n if (postBalanceAmount > preBalanceAmount) {\n to.push({\n amount: assetToBase(assetAmount(postBalanceAmount - preBalanceAmount, assetDecimals)),\n asset: assetFromStringEx(\n `SOL.${tokenMetadata.metadata.symbol.trim()}-${mintAddress}`,\n ) as TokenAsset,\n to: owner,\n })\n } else if (preBalanceAmount > postBalanceAmount) {\n from.push({\n amount: assetToBase(assetAmount(preBalanceAmount - postBalanceAmount, assetDecimals)),\n asset: assetFromStringEx(\n `SOL.${tokenMetadata.metadata.symbol.trim()}-${mintAddress}`,\n ) as TokenAsset,\n from: owner,\n })\n }\n }\n }\n } catch {}\n }\n }\n }\n\n return {\n asset: this.getAssetInfo().asset,\n date: new Date((tx.blockTime || 0) * 1000),\n type: TxType.Transfer,\n hash: tx.transaction.signatures[0],\n from,\n to,\n }\n }\n\n /**\n * Retrieves the balance of a given address making a round robin over the providers.\n *\n * @param {Address} address - The address to retrieve the balance for.\n * @param {TokenAsset[]} assets - Assets to retrieve the balance for (optional).\n * @returns {Promise<Balance[]>} An array containing the balance of the address.\n * @throws {Error} if there is no provider able to retrieve the balances\n */\n private async roundRobinGetBalance(address: Address, assets?: TokenAsset[]): Promise<Balance[]> {\n try {\n for (const provider of this.providers) {\n const balances: Balance[] = []\n\n const nativeBalance = await provider.solanaProvider.getBalance(new PublicKey(address))\n\n balances.push({\n asset: SOLAsset,\n amount: baseAmount(nativeBalance, SOL_DECIMALS),\n })\n\n const tokenBalances = await provider.solanaProvider.getParsedTokenAccountsByOwner(new PublicKey(address), {\n programId: TOKEN_PROGRAM_ID,\n })\n\n const tokensToRequest = !assets\n ? tokenBalances.value\n : tokenBalances.value.filter((tokenBalance) => {\n const tokenData = tokenBalance.account.data.parsed as TokenAssetData\n return (\n assets.findIndex((asset) => {\n return asset.symbol.toLowerCase().includes(tokenData.info.mint.toLowerCase())\n }) !== -1\n )\n })\n\n const mintPublicKeys: UmiPubliKey[] = tokensToRequest.map((tokenBalance) => {\n const tokenData = tokenBalance.account.data.parsed as TokenAssetData\n return publicKey(tokenData.info.mint)\n })\n\n const assetsData = await fetchAllDigitalAsset(provider.umiProvider, mintPublicKeys)\n\n tokenBalances.value.forEach((balance) => {\n const parsedData = balance.account.data.parsed as TokenAssetData\n const assetData = assetsData.find((assetData) => assetData.publicKey.toString() === parsedData.info.mint)\n\n if (assetData) {\n balances.push({\n amount: baseAmount(parsedData.info.tokenAmount.amount, parsedData.info.tokenAmount.decimals),\n asset: assetFromStringEx(`SOL.${assetData.metadata.symbol.trim()}-${parsedData.info.mint}`) as TokenAsset,\n })\n }\n })\n\n return balances\n }\n } catch {}\n\n throw Error('No provider able to get balances.')\n }\n\n /**\n * Get transaction fees making a round robin over the providers.\n *\n * @param {TxParams} params - The transaction parameters.\n * @returns {Fees} The average, fast, and fastest fees.\n * @throws {Error} if there is no provider able to retrieve the fees\n */\n private async roundRobinGetFees(params: TxParams): Promise<Fees> {\n try {\n for (const provider of this.providers) {\n const sender = Keypair.generate()\n const toPubkey = new PublicKey(params.recipient)\n\n const transaction = new Transaction()\n\n transaction.recentBlockhash = await provider.solanaProvider\n .getLatestBlockhash()\n .then((block) => block.blockhash)\n transaction.feePayer = sender.publicKey\n\n let createAccountTxFee = 0\n if (!params.asset || eqAsset(params.asset, this.getAssetInfo().asset)) {\n // Native transfer\n transaction.add(\n SystemProgram.transfer({\n fromPubkey: sender.publicKey,\n toPubkey,\n lamports: params.amount.amount().toNumber(),\n }),\n )\n } else {\n // Token transfer\n const mintAddress = new PublicKey(getContractAddressFromAsset(params.asset as TokenAsset))\n const associatedTokenAddress = getAssociatedTokenAddressSync(mintAddress, toPubkey)\n\n try {\n await getAccount(provider.solanaProvider, associatedTokenAddress, undefined, TOKEN_PROGRAM_ID)\n transaction.add(\n createTransferInstruction(\n sender.publicKey, // Should be Token account, but as it new KeyPair for estimation, sender public key\n associatedTokenAddress,\n sender.publicKey,\n params.amount.amount().toNumber(),\n ),\n )\n } catch (error: unknown) {\n if (error instanceof TokenAccountNotFoundError || error instanceof TokenInvalidAccountOwnerError) {\n // recipient token account has to be created\n\n const dataLength = 165 // Normally used for Token accounts\n createAccountTxFee = await provider.solanaProvider.getMinimumBalanceForRentExemption(dataLength)\n\n transaction.add(\n createTransferInstruction(\n sender.publicKey, // Should be Token account, but as it new KeyPair for estimation, sender public key\n toPubkey, // Should be Token account, but as recipient token account should be created, recipient public key\n sender.publicKey,\n params.amount.amount().toNumber(),\n ),\n )\n }\n }\n }\n\n if (params.memo) {\n transaction.add(\n new TransactionInstruction({\n keys: [{ pubkey: sender.publicKey, isSigner: true, isWritable: true }],\n data: Buffer.from(params.memo, 'utf-8'),\n programId: new PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n }),\n )\n }\n\n if (params.priorityFee) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.priorityFee.amount().toNumber() / 10 ** 3,\n }),\n )\n }\n\n if (params.limit) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitLimit({\n units: params.limit,\n }),\n )\n }\n\n const fee = (await transaction.getEstimatedFee(provider.solanaProvider)) || 0\n\n return {\n type: FeeType.FlatFee,\n [FeeOption.Average]: baseAmount(fee + createAccountTxFee, SOL_DECIMALS),\n [FeeOption.Fast]: baseAmount(fee + createAccountTxFee, SOL_DECIMALS),\n [FeeOption.Fastest]: baseAmount(fee + createAccountTxFee, SOL_DECIMALS),\n }\n }\n } catch {}\n throw Error('No provider able to get fees.')\n }\n\n /**\n * Get the transaction details of a given transaction ID making a round robin over the providers.\n *\n * @param {string} txId The transaction ID.\n * @returns {Tx} The transaction details.\n * @throws {Error} if there is no provider able to retrieve the transaction data\n */\n private async roundRobinGetTransactionData(txId: string): Promise<ParsedTransactionWithMeta | null> {\n try {\n for (const provider of this.providers) {\n const transaction = await provider.solanaProvider.getParsedTransaction(txId)\n return transaction\n }\n } catch {}\n throw Error('No provider able to get transaction data.')\n }\n\n /**\n * Get the transaction history of a given address with pagination options making a round robin over the providers.\n *\n * @param {TxHistoryParams} params The options to get transaction history.\n * @returns {TxsPage} The transaction history.\n * @throws {Error} if there is no provider able to retrieve the transactions\n */\n private async roundRobinGetTransactions(params?: TxHistoryParams): Promise<TxsPage> {\n try {\n for (const provider of this.providers) {\n const signatures = await provider.solanaProvider.getSignaturesForAddress(\n new PublicKey(params?.address || (await this.getAddressAsync())),\n )\n\n const transactions = await provider.solanaProvider.getParsedTransactions(\n signatures.map(({ signature }) => signature),\n )\n\n const results = await Promise.allSettled(\n transactions\n .filter((transaction) => !!transaction)\n .map((transaction) => this.parseTransaction(transaction as ParsedTransactionWithMeta)),\n )\n\n const txs: Tx[] = []\n\n results.forEach((result) => {\n if (result.status === 'fulfilled') {\n txs.push(result.value)\n }\n })\n\n return {\n txs,\n total: txs.length,\n }\n }\n } catch {}\n\n throw Error('No provider able to get transactions.')\n }\n\n /**\n * Transfers SOL or Solana token making a round robin over the providers\n *\n * @param {TxParams} params The transfer options.\n * @returns {TxHash} The transaction hash.\n * @throws {Error} if there is no provider able to make the transfer\n */\n private async roundRobinTransfer({\n walletIndex,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n }: TxParams): Promise<string> {\n try {\n const senderKeyPair = this.getPrivateKeyPair(walletIndex || 0)\n for (const provider of this.providers) {\n if (asset && !eqAsset(asset, this.getAssetInfo().asset)) {\n // Check if receipt token account is created, otherwise, create it\n const mintAddress = new PublicKey(getContractAddressFromAsset(asset as TokenAsset))\n await getOrCreateAssociatedTokenAccount(\n provider.solanaProvider,\n senderKeyPair,\n mintAddress,\n new PublicKey(recipient),\n )\n }\n\n const { rawUnsignedTx } = await this.prepareTx({\n sender: senderKeyPair.publicKey.toBase58(),\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n })\n\n const transaction = Transaction.from(bs58.decode(rawUnsignedTx))\n\n transaction.sign(senderKeyPair)\n\n return this.broadcastTx(bs58.encode(transaction.serialize()))\n }\n } catch {}\n\n throw Error('No provider able to transfer.')\n }\n\n /**\n * Broadcast a transaction to the network making a round robin over the providers\n *\n * @param {string} txHex Raw transaction to broadcast\n * @returns {TxHash} The hash of the transaction broadcasted\n * @throws {Error} if there is no provider able to broadcast transaction\n */\n private async roundRobinBroadcastTx(txHex: string): Promise<TxHash> {\n try {\n for (const provider of this.providers) {\n try {\n const transaction = Transaction.from(bs58.decode(txHex))\n return await provider.solanaProvider.sendRawTransaction(transaction.serialize())\n } catch (e: unknown) {\n if (e instanceof SendTransactionError) {\n console.log(await e.getLogs(provider.solanaProvider))\n }\n throw Error('Can not broadcast transaction. Unknown error')\n }\n }\n } catch {}\n\n throw Error('No provider able to broadcast transaction.')\n }\n\n /**\n * Prepares a transaction for transfer making round robin over the providers.\n *\n * @param {TxParams&Address} params - The transfer options.\n * @returns {Promise<PreparedTx>} The raw unsigned transaction.\n * @throws {Error} if there is no provider able to prepare transaction\n */\n private async roundRobinPrepareTx({\n sender,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n }: TxParams & { sender: Address }): Promise<PreparedTx> {\n try {\n for (const provider of this.providers) {\n const transaction = new Transaction()\n\n const fromPubkey = new PublicKey(sender)\n const toPubkey = new PublicKey(recipient)\n\n transaction.recentBlockhash = await provider.solanaProvider\n .getLatestBlockhash()\n .then((block) => block.blockhash)\n transaction.feePayer = new PublicKey(sender)\n\n if (!asset || eqAsset(asset, this.getAssetInfo().asset)) {\n // Native transfer\n transaction.add(\n SystemProgram.transfer({\n fromPubkey,\n toPubkey,\n lamports: amount.amount().toNumber(),\n }),\n )\n } else {\n // Token transfer\n const mintAddress = new PublicKey(getContractAddressFromAsset(asset as TokenAsset))\n\n const fromAssociatedAccount = getAssociatedTokenAddressSync(mintAddress, fromPubkey)\n let fromTokenAccount: Account\n try {\n fromTokenAccount = await getAccount(provider.solanaProvider, fromAssociatedAccount)\n } catch (error) {\n if (error instanceof TokenAccountNotFoundError || error instanceof TokenInvalidAccountOwnerError) {\n throw Error('Can not find sender Token account')\n }\n throw error\n }\n\n const toAssociatedAccount = getAssociatedTokenAddressSync(mintAddress, toPubkey)\n let toTokenAccount: Account\n try {\n toTokenAccount = await getAccount(provider.solanaProvider, toAssociatedAccount)\n } catch (error) {\n if (error instanceof TokenAccountNotFoundError || error instanceof TokenInvalidAccountOwnerError) {\n throw Error('Can not find recipient Token account. Create it first')\n }\n throw error\n }\n\n transaction.add(\n createTransferInstruction(\n fromTokenAccount.address,\n toTokenAccount.address,\n fromPubkey,\n amount.amount().toNumber(),\n ),\n )\n }\n\n if (memo) {\n transaction.add(\n new TransactionInstruction({\n keys: [{ pubkey: fromPubkey, isSigner: true, isWritable: true }],\n data: Buffer.from(memo, 'utf-8'),\n programId: new PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n }),\n )\n }\n\n if (priorityFee) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: priorityFee.amount().toNumber() / 10 ** 3,\n }),\n )\n }\n\n if (limit) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitLimit({\n units: limit,\n }),\n )\n }\n\n return { rawUnsignedTx: bs58.encode(transaction.serialize({ verifySignatures: false })) }\n }\n } catch {}\n\n throw Error('No provider able to prepare transaction')\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/const.ts","../src/utils.ts","../src/client.ts"],"sourcesContent":["import { ExplorerProvider, Network } from '@xchainjs/xchain-client'\nimport { Asset, AssetType } from '@xchainjs/xchain-util'\n\nimport { SOLClientParams } from './types'\n\n/**\n * Solana chain symbol\n */\nexport const SOLChain = 'SOL' as const\n\n/**\n * Solana native asset decimals\n */\nexport const SOL_DECIMALS = 9\n\n/**\n * Solana native asset\n */\nexport const SOLAsset: Asset = {\n chain: 'SOL',\n ticker: 'SOL',\n symbol: 'SOL',\n type: AssetType.NATIVE,\n}\n\nconst mainnetExplorer = new ExplorerProvider(\n 'https://explorer.solana.com/',\n 'https://explorer.solana.com/address/%%ADDRESS%%',\n 'https://explorer.solana.com/tx/%%TX_ID%%',\n)\n\nexport const defaultSolanaParams: SOLClientParams = {\n network: Network.Mainnet,\n rootDerivationPaths: {\n [Network.Mainnet]: \"m/44'/501'/\",\n [Network.Testnet]: \"m/44'/501'/\",\n [Network.Stagenet]: \"m/44'/501'/\",\n },\n explorerProviders: {\n [Network.Mainnet]: mainnetExplorer,\n [Network.Testnet]: new ExplorerProvider(\n 'https://explorer.solana.com/?cluster=testnet',\n 'https://explorer.solana.com/address/%%ADDRESS%%?cluster=testnet',\n 'https://explorer.solana.com/tx/%%TX_ID%%?cluster=testnet',\n ),\n [Network.Stagenet]: mainnetExplorer,\n },\n}\n","import { Cluster } from '@solana/web3.js'\nimport { Network } from '@xchainjs/xchain-client'\n\nexport const getSolanaNetwork = (network: Network): Cluster => {\n const networkMap: { [key in Network]: Cluster } = {\n [Network.Mainnet]: 'mainnet-beta',\n [Network.Stagenet]: 'mainnet-beta',\n [Network.Testnet]: 'testnet',\n }\n return networkMap[network]\n}\n","import { fetchAllDigitalAsset, fetchDigitalAsset, mplTokenMetadata } from '@metaplex-foundation/mpl-token-metadata'\nimport { PublicKey as UmiPubliKey, Umi, publicKey } from '@metaplex-foundation/umi'\nimport { createUmi } from '@metaplex-foundation/umi-bundle-defaults'\nimport { isAddress } from '@solana/addresses'\nimport {\n Account,\n TOKEN_PROGRAM_ID,\n TokenAccountNotFoundError,\n TokenInvalidAccountOwnerError,\n createTransferInstruction,\n getAccount,\n getAssociatedTokenAddressSync,\n getOrCreateAssociatedTokenAccount,\n} from '@solana/spl-token'\nimport {\n ComputeBudgetProgram,\n Connection,\n Keypair,\n ParsedTransactionWithMeta,\n PublicKey,\n SendTransactionError,\n SystemProgram,\n Transaction,\n TransactionInstruction,\n clusterApiUrl,\n} from '@solana/web3.js'\nimport {\n AssetInfo,\n BaseXChainClient,\n ExplorerProviders,\n FeeOption,\n FeeType,\n Fees,\n Network,\n PreparedTx,\n TxHash,\n TxHistoryParams,\n TxType,\n} from '@xchainjs/xchain-client'\nimport { getSeed } from '@xchainjs/xchain-crypto'\nimport {\n Address,\n TokenAsset,\n assetAmount,\n assetFromStringEx,\n assetToBase,\n baseAmount,\n eqAsset,\n getContractAddressFromAsset,\n} from '@xchainjs/xchain-util'\nimport bs58 from 'bs58'\nimport { HDKey } from 'micro-ed25519-hdkey'\n\nimport { SOLAsset, SOLChain, SOL_DECIMALS, defaultSolanaParams } from './const'\nimport { TokenAssetData } from './solana-types'\nimport { Balance, SOLClientParams, Tx, TxFrom, TxParams, TxTo, TxsPage } from './types'\nimport { getSolanaNetwork } from './utils'\n\ntype Providers = {\n solanaProvider: Connection\n umiProvider: Umi\n}\n\nexport class Client extends BaseXChainClient {\n private explorerProviders: ExplorerProviders\n private providers: Providers[]\n private clientUrls?: Record<Network, string[]>\n\n constructor(params: SOLClientParams = defaultSolanaParams) {\n super(SOLChain, {\n ...defaultSolanaParams,\n ...params,\n })\n this.explorerProviders = params.explorerProviders\n this.clientUrls = params.clientUrls\n\n if (!this.clientUrls) {\n const solanaProvider = new Connection(clusterApiUrl(getSolanaNetwork(this.getNetwork())))\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n this.providers = [\n {\n solanaProvider,\n umiProvider,\n },\n ]\n } else {\n this.providers = this.clientUrls[this.getNetwork()].map((url) => {\n const solanaProvider = new Connection(url)\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n return {\n solanaProvider,\n umiProvider,\n }\n })\n }\n }\n\n /**\n * Set or update the current network.\n * @param {Network} network The network to set\n * @returns {void}\n */\n public setNetwork(network: Network): void {\n super.setNetwork(network)\n if (!this.clientUrls) {\n const solanaProvider = new Connection(clusterApiUrl(getSolanaNetwork(this.getNetwork())))\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n this.providers = [\n {\n solanaProvider,\n umiProvider,\n },\n ]\n } else {\n this.providers = this.clientUrls[this.getNetwork()].map((url) => {\n const solanaProvider = new Connection(url)\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n return {\n solanaProvider,\n umiProvider,\n }\n })\n }\n }\n\n /**\n * Get information about the native asset of the Solana.\n *\n * @returns {AssetInfo} Information about the native asset.\n */\n public getAssetInfo(): AssetInfo {\n return {\n asset: SOLAsset,\n decimal: SOL_DECIMALS,\n }\n }\n\n /**\n * Get the explorer URL.\n *\n * @returns {string} The explorer URL.\n */\n public getExplorerUrl(): string {\n return this.explorerProviders[this.getNetwork()].getExplorerUrl()\n }\n\n /**\n * Get the explorer url for the given address.\n *\n * @param {Address} address\n * @returns {string} The explorer url for the given address.\n */\n public getExplorerAddressUrl(address: Address): string {\n return this.explorerProviders[this.getNetwork()].getExplorerAddressUrl(address)\n }\n\n /**\n * Get the explorer url for the given transaction id.\n *\n * @param {string} txID\n * @returns {string} The explorer url for the given transaction id.\n */\n public getExplorerTxUrl(txID: TxHash): string {\n return this.explorerProviders[this.getNetwork()].getExplorerTxUrl(txID)\n }\n\n /**\n * Get the full derivation path based on the wallet index.\n * @param {number} walletIndex The HD wallet index\n * @returns {string} The full derivation path\n */\n public getFullDerivationPath(walletIndex: number): string {\n if (!this.rootDerivationPaths) {\n throw Error('Can not generate derivation path due to root derivation path is undefined')\n }\n return `${this.rootDerivationPaths[this.getNetwork()]}${walletIndex}'`\n }\n\n /**\n * Get the current address asynchronously.\n *\n * @param {number} index The index of the address. Default 0\n * @returns {Address} The Solana address related to the index provided.\n * @throws {\"Phrase must be provided\"} Thrown if the phrase has not been set before.\n */\n public async getAddressAsync(index?: number): Promise<string> {\n return this.getPrivateKeyPair(index || 0).publicKey.toBase58()\n }\n\n /**\n * Get the current address synchronously.\n * @deprecated\n */\n public getAddress(): string {\n throw Error('Sync method not supported')\n }\n\n /**\n * Validate the given Solana address.\n * @param {string} address Solana address to validate.\n * @returns {boolean} `true` if the address is valid, `false` otherwise.\n */\n public validateAddress(address: Address): boolean {\n return isAddress(address)\n }\n\n /**\n * Retrieves the balance of a given address.\n * @param {Address} address - The address to retrieve the balance for.\n * @param {TokenAsset[]} assets - Assets to retrieve the balance for (optional).\n * @returns {Promise<Balance[]>} An array containing the balance of the address.\n */\n public async getBalance(address: Address, assets?: TokenAsset[]): Promise<Balance[]> {\n return this.roundRobinGetBalance(address, assets)\n }\n\n /**\n * Get transaction fees.\n *\n * @param {TxParams} params - The transaction parameters.\n * @returns {Fees} The average, fast, and fastest fees.\n * @throws {\"Params need to be passed\"} Thrown if parameters are not provided.\n */\n public async getFees(params?: TxParams): Promise<Fees> {\n if (!params) throw new Error('Params need to be passed')\n return this.roundRobinGetFees(params)\n }\n\n /**\n * Get the transaction details of a given transaction ID.\n *\n * @param {string} txId The transaction ID.\n * @returns {Tx} The transaction details.\n */\n public async getTransactionData(txId: string): Promise<Tx> {\n const transaction = await this.roundRobinGetTransactionData(txId)\n if (!transaction) throw Error('Can not find transaction')\n\n return this.parseTransaction(transaction)\n }\n\n /**\n * Get the transaction history of a given address with pagination options.\n *\n * @param {TxHistoryParams} params The options to get transaction history.\n * @returns {TxsPage} The transaction history.\n */\n public async getTransactions(params?: TxHistoryParams): Promise<TxsPage> {\n return this.roundRobinGetTransactions(params)\n }\n\n /**\n * Transfers SOL or Solana token\n *\n * @param {TxParams} params The transfer options.\n * @returns {TxHash} The transaction hash.\n */\n public async transfer({\n walletIndex,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n allowOwnerOffCurve,\n }: TxParams): Promise<string> {\n return this.roundRobinTransfer({\n walletIndex,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n allowOwnerOffCurve,\n })\n }\n\n /**\n * Broadcast a transaction to the network\n * @param {string} txHex Raw transaction to broadcast\n * @returns {TxHash} The hash of the transaction broadcasted\n */\n public async broadcastTx(txHex: string): Promise<TxHash> {\n return this.roundRobinBroadcastTx(txHex)\n }\n\n /**\n * Prepares a transaction for transfer.\n *\n * @param {TxParams&Address} params - The transfer options.\n * @returns {Promise<PreparedTx>} The raw unsigned transaction.\n */\n public async prepareTx({\n sender,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n allowOwnerOffCurve,\n }: TxParams & { sender: Address }): Promise<PreparedTx> {\n return this.roundRobinPrepareTx({\n sender,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n allowOwnerOffCurve,\n })\n }\n\n private getPrivateKeyPair(index: number): Keypair {\n if (!this.phrase) throw new Error('Phrase must be provided')\n\n const seed = getSeed(this.phrase)\n const hd = HDKey.fromMasterSeed(seed.toString('hex'))\n\n return Keypair.fromSeed(hd.derive(this.getFullDerivationPath(index)).privateKey)\n }\n\n private async parseTransaction(tx: ParsedTransactionWithMeta): Promise<Tx> {\n const from: TxFrom[] = []\n const to: TxTo[] = []\n\n tx.transaction.message.accountKeys.forEach((accountKey, index) => {\n if (accountKey.writable) {\n const preBalance = tx.meta?.preBalances[index]\n const postBalance = tx.meta?.postBalances[index]\n\n if (preBalance !== undefined && postBalance !== undefined) {\n if (postBalance > preBalance) {\n to.push({\n amount: baseAmount(postBalance - preBalance, this.getAssetInfo().decimal),\n asset: this.getAssetInfo().asset,\n to: accountKey.pubkey.toBase58(),\n })\n } else if (preBalance > postBalance) {\n from.push({\n amount: baseAmount(preBalance - postBalance, this.getAssetInfo().decimal),\n asset: this.getAssetInfo().asset,\n from: accountKey.pubkey.toBase58(),\n })\n }\n }\n }\n })\n\n // Tokens transfer\n if (tx.meta?.preTokenBalances && tx.meta?.postTokenBalances) {\n for (let i = 0; i < tx.meta?.postTokenBalances.length; i++) {\n const postBalance = tx.meta.postTokenBalances[i]\n\n const preBalance = tx.meta.preTokenBalances.find(\n (preTokenBalance) => preTokenBalance.accountIndex === postBalance.accountIndex,\n )\n\n const postBalanceAmount = postBalance.uiTokenAmount.uiAmount || 0\n const preBalanceAmount = preBalance?.uiTokenAmount.uiAmount || 0\n\n if (preBalance !== null && postBalance !== null) {\n const assetDecimals = tx.meta.postTokenBalances[i].uiTokenAmount.decimals\n const mintAddress = tx.meta.postTokenBalances[i].mint\n const owner = tx.meta.postTokenBalances[i].owner\n\n try {\n for (const provider of this.providers) {\n const tokenMetadata = await fetchDigitalAsset(provider.umiProvider, publicKey(mintAddress))\n\n if (owner) {\n if (postBalanceAmount > preBalanceAmount) {\n to.push({\n amount: assetToBase(assetAmount(postBalanceAmount - preBalanceAmount, assetDecimals)),\n asset: assetFromStringEx(\n `SOL.${tokenMetadata.metadata.symbol.trim()}-${mintAddress}`,\n ) as TokenAsset,\n to: owner,\n })\n } else if (preBalanceAmount > postBalanceAmount) {\n from.push({\n amount: assetToBase(assetAmount(preBalanceAmount - postBalanceAmount, assetDecimals)),\n asset: assetFromStringEx(\n `SOL.${tokenMetadata.metadata.symbol.trim()}-${mintAddress}`,\n ) as TokenAsset,\n from: owner,\n })\n }\n }\n }\n } catch {}\n }\n }\n }\n\n return {\n asset: this.getAssetInfo().asset,\n date: new Date((tx.blockTime || 0) * 1000),\n type: TxType.Transfer,\n hash: tx.transaction.signatures[0],\n from,\n to,\n }\n }\n\n /**\n * Retrieves the balance of a given address making a round robin over the providers.\n *\n * @param {Address} address - The address to retrieve the balance for.\n * @param {TokenAsset[]} assets - Assets to retrieve the balance for (optional).\n * @returns {Promise<Balance[]>} An array containing the balance of the address.\n * @throws {Error} if there is no provider able to retrieve the balances\n */\n private async roundRobinGetBalance(address: Address, assets?: TokenAsset[]): Promise<Balance[]> {\n try {\n for (const provider of this.providers) {\n const balances: Balance[] = []\n\n const nativeBalance = await provider.solanaProvider.getBalance(new PublicKey(address))\n\n balances.push({\n asset: SOLAsset,\n amount: baseAmount(nativeBalance, SOL_DECIMALS),\n })\n\n const tokenBalances = await provider.solanaProvider.getParsedTokenAccountsByOwner(new PublicKey(address), {\n programId: TOKEN_PROGRAM_ID,\n })\n\n const tokensToRequest = !assets\n ? tokenBalances.value\n : tokenBalances.value.filter((tokenBalance) => {\n const tokenData = tokenBalance.account.data.parsed as TokenAssetData\n return (\n assets.findIndex((asset) => {\n return asset.symbol.toLowerCase().includes(tokenData.info.mint.toLowerCase())\n }) !== -1\n )\n })\n\n const mintPublicKeys: UmiPubliKey[] = tokensToRequest.map((tokenBalance) => {\n const tokenData = tokenBalance.account.data.parsed as TokenAssetData\n return publicKey(tokenData.info.mint)\n })\n\n const assetsData = await fetchAllDigitalAsset(provider.umiProvider, mintPublicKeys)\n\n tokenBalances.value.forEach((balance) => {\n const parsedData = balance.account.data.parsed as TokenAssetData\n const assetData = assetsData.find((assetData) => assetData.publicKey.toString() === parsedData.info.mint)\n\n if (assetData) {\n balances.push({\n amount: baseAmount(parsedData.info.tokenAmount.amount, parsedData.info.tokenAmount.decimals),\n asset: assetFromStringEx(`SOL.${assetData.metadata.symbol.trim()}-${parsedData.info.mint}`) as TokenAsset,\n })\n }\n })\n\n return balances\n }\n } catch {}\n\n throw Error('No provider able to get balances.')\n }\n\n /**\n * Get transaction fees making a round robin over the providers.\n *\n * @param {TxParams} params - The transaction parameters.\n * @returns {Fees} The average, fast, and fastest fees.\n * @throws {Error} if there is no provider able to retrieve the fees\n */\n private async roundRobinGetFees(params: TxParams): Promise<Fees> {\n try {\n for (const provider of this.providers) {\n const sender = Keypair.generate()\n const toPubkey = new PublicKey(params.recipient)\n\n const transaction = new Transaction()\n\n transaction.recentBlockhash = await provider.solanaProvider\n .getLatestBlockhash()\n .then((block) => block.blockhash)\n transaction.feePayer = sender.publicKey\n\n let createAccountTxFee = 0\n if (!params.asset || eqAsset(params.asset, this.getAssetInfo().asset)) {\n // Native transfer\n transaction.add(\n SystemProgram.transfer({\n fromPubkey: sender.publicKey,\n toPubkey,\n lamports: params.amount.amount().toNumber(),\n }),\n )\n } else {\n // Token transfer\n const mintAddress = new PublicKey(getContractAddressFromAsset(params.asset as TokenAsset))\n const associatedTokenAddress = getAssociatedTokenAddressSync(mintAddress, toPubkey, params.allowOwnerOffCurve)\n\n try {\n await getAccount(provider.solanaProvider, associatedTokenAddress, undefined, TOKEN_PROGRAM_ID)\n transaction.add(\n createTransferInstruction(\n sender.publicKey, // Should be Token account, but as it new KeyPair for estimation, sender public key\n associatedTokenAddress,\n sender.publicKey,\n params.amount.amount().toNumber(),\n ),\n )\n } catch (error: unknown) {\n if (error instanceof TokenAccountNotFoundError || error instanceof TokenInvalidAccountOwnerError) {\n // recipient token account has to be created\n\n const dataLength = 165 // Normally used for Token accounts\n createAccountTxFee = await provider.solanaProvider.getMinimumBalanceForRentExemption(dataLength)\n\n transaction.add(\n createTransferInstruction(\n sender.publicKey, // Should be Token account, but as it new KeyPair for estimation, sender public key\n toPubkey, // Should be Token account, but as recipient token account should be created, recipient public key\n sender.publicKey,\n params.amount.amount().toNumber(),\n ),\n )\n }\n }\n }\n\n if (params.memo) {\n transaction.add(\n new TransactionInstruction({\n keys: [{ pubkey: sender.publicKey, isSigner: true, isWritable: true }],\n data: Buffer.from(params.memo, 'utf-8'),\n programId: new PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n }),\n )\n }\n\n if (params.priorityFee) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.priorityFee.amount().toNumber() / 10 ** 3,\n }),\n )\n }\n\n if (params.limit) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitLimit({\n units: params.limit,\n }),\n )\n }\n\n const fee = (await transaction.getEstimatedFee(provider.solanaProvider)) || 0\n\n return {\n type: FeeType.FlatFee,\n [FeeOption.Average]: baseAmount(fee + createAccountTxFee, SOL_DECIMALS),\n [FeeOption.Fast]: baseAmount(fee + createAccountTxFee, SOL_DECIMALS),\n [FeeOption.Fastest]: baseAmount(fee + createAccountTxFee, SOL_DECIMALS),\n }\n }\n } catch {}\n throw Error('No provider able to get fees.')\n }\n\n /**\n * Get the transaction details of a given transaction ID making a round robin over the providers.\n *\n * @param {string} txId The transaction ID.\n * @returns {Tx} The transaction details.\n * @throws {Error} if there is no provider able to retrieve the transaction data\n */\n private async roundRobinGetTransactionData(txId: string): Promise<ParsedTransactionWithMeta | null> {\n try {\n for (const provider of this.providers) {\n const transaction = await provider.solanaProvider.getParsedTransaction(txId)\n return transaction\n }\n } catch {}\n throw Error('No provider able to get transaction data.')\n }\n\n /**\n * Get the transaction history of a given address with pagination options making a round robin over the providers.\n *\n * @param {TxHistoryParams} params The options to get transaction history.\n * @returns {TxsPage} The transaction history.\n * @throws {Error} if there is no provider able to retrieve the transactions\n */\n private async roundRobinGetTransactions(params?: TxHistoryParams): Promise<TxsPage> {\n try {\n for (const provider of this.providers) {\n const signatures = await provider.solanaProvider.getSignaturesForAddress(\n new PublicKey(params?.address || (await this.getAddressAsync())),\n )\n\n const transactions = await provider.solanaProvider.getParsedTransactions(\n signatures.map(({ signature }) => signature),\n )\n\n const results = await Promise.allSettled(\n transactions\n .filter((transaction) => !!transaction)\n .map((transaction) => this.parseTransaction(transaction as ParsedTransactionWithMeta)),\n )\n\n const txs: Tx[] = []\n\n results.forEach((result) => {\n if (result.status === 'fulfilled') {\n txs.push(result.value)\n }\n })\n\n return {\n txs,\n total: txs.length,\n }\n }\n } catch {}\n\n throw Error('No provider able to get transactions.')\n }\n\n /**\n * Transfers SOL or Solana token making a round robin over the providers\n *\n * @param {TxParams} params The transfer options.\n * @returns {TxHash} The transaction hash.\n * @throws {Error} if there is no provider able to make the transfer\n */\n private async roundRobinTransfer({\n walletIndex,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n allowOwnerOffCurve,\n }: TxParams): Promise<string> {\n try {\n const senderKeyPair = this.getPrivateKeyPair(walletIndex || 0)\n for (const provider of this.providers) {\n if (asset && !eqAsset(asset, this.getAssetInfo().asset)) {\n // Check if receipt token account is created, otherwise, create it\n const mintAddress = new PublicKey(getContractAddressFromAsset(asset as TokenAsset))\n\n await getOrCreateAssociatedTokenAccount(\n provider.solanaProvider,\n senderKeyPair,\n mintAddress,\n new PublicKey(recipient),\n allowOwnerOffCurve,\n )\n }\n\n const { rawUnsignedTx } = await this.prepareTx({\n sender: senderKeyPair.publicKey.toBase58(),\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n })\n\n const transaction = Transaction.from(bs58.decode(rawUnsignedTx))\n\n transaction.sign(senderKeyPair)\n\n return this.broadcastTx(bs58.encode(transaction.serialize()))\n }\n } catch {}\n\n throw Error('No provider able to transfer.')\n }\n\n /**\n * Broadcast a transaction to the network making a round robin over the providers\n *\n * @param {string} txHex Raw transaction to broadcast\n * @returns {TxHash} The hash of the transaction broadcasted\n * @throws {Error} if there is no provider able to broadcast transaction\n */\n private async roundRobinBroadcastTx(txHex: string): Promise<TxHash> {\n try {\n for (const provider of this.providers) {\n try {\n const transaction = Transaction.from(bs58.decode(txHex))\n return await provider.solanaProvider.sendRawTransaction(transaction.serialize())\n } catch (e: unknown) {\n if (e instanceof SendTransactionError) {\n console.log(await e.getLogs(provider.solanaProvider))\n }\n throw Error('Can not broadcast transaction. Unknown error')\n }\n }\n } catch {}\n\n throw Error('No provider able to broadcast transaction.')\n }\n\n /**\n * Prepares a transaction for transfer making round robin over the providers.\n *\n * @param {TxParams&Address} params - The transfer options.\n * @returns {Promise<PreparedTx>} The raw unsigned transaction.\n * @throws {Error} if there is no provider able to prepare transaction\n */\n private async roundRobinPrepareTx({\n sender,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n allowOwnerOffCurve,\n }: TxParams & { sender: Address }): Promise<PreparedTx> {\n try {\n for (const provider of this.providers) {\n const transaction = new Transaction()\n const fromPubkey = new PublicKey(sender)\n const toPubkey = new PublicKey(recipient)\n\n transaction.recentBlockhash = await provider.solanaProvider\n .getLatestBlockhash()\n .then((block) => block.blockhash)\n transaction.feePayer = new PublicKey(sender)\n\n if (!asset || eqAsset(asset, this.getAssetInfo().asset)) {\n // Native transfer\n transaction.add(\n SystemProgram.transfer({\n fromPubkey,\n toPubkey,\n lamports: amount.amount().toNumber(),\n }),\n )\n } else {\n // Token transfer\n const mintAddress = new PublicKey(getContractAddressFromAsset(asset as TokenAsset))\n const fromAssociatedAccount = getAssociatedTokenAddressSync(mintAddress, fromPubkey)\n let fromTokenAccount: Account\n try {\n fromTokenAccount = await getAccount(provider.solanaProvider, fromAssociatedAccount)\n } catch (error) {\n if (error instanceof TokenAccountNotFoundError || error instanceof TokenInvalidAccountOwnerError) {\n throw Error('Can not find sender Token account')\n }\n throw error\n }\n\n const toAssociatedAccount = getAssociatedTokenAddressSync(mintAddress, toPubkey, allowOwnerOffCurve)\n let toTokenAccount: Account\n try {\n toTokenAccount = await getAccount(provider.solanaProvider, toAssociatedAccount)\n } catch (error) {\n if (error instanceof TokenAccountNotFoundError || error instanceof TokenInvalidAccountOwnerError) {\n throw Error('Can not find recipient Token account. Create it first')\n }\n throw error\n }\n\n transaction.add(\n createTransferInstruction(\n fromTokenAccount.address,\n toTokenAccount.address,\n fromPubkey,\n amount.amount().toNumber(),\n ),\n )\n }\n\n if (memo) {\n transaction.add(\n new TransactionInstruction({\n keys: [{ pubkey: fromPubkey, isSigner: true, isWritable: true }],\n data: Buffer.from(memo, 'utf-8'),\n programId: new PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n }),\n )\n }\n\n if (priorityFee) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: priorityFee.amount().toNumber() / 10 ** 3,\n }),\n )\n }\n\n if (limit) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitLimit({\n units: limit,\n }),\n )\n }\n\n return { rawUnsignedTx: bs58.encode(transaction.serialize({ verifySignatures: false })) }\n }\n } catch {}\n\n throw Error('No provider able to prepare transaction')\n }\n}\n"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -274,7 +274,7 @@ class Client extends xchainClient.BaseXChainClient {
|
|
|
274
274
|
* @param {TxParams} params The transfer options.
|
|
275
275
|
* @returns {TxHash} The transaction hash.
|
|
276
276
|
*/
|
|
277
|
-
transfer({ walletIndex, recipient, asset, amount, memo, limit, priorityFee, }) {
|
|
277
|
+
transfer({ walletIndex, recipient, asset, amount, memo, limit, priorityFee, allowOwnerOffCurve, }) {
|
|
278
278
|
return __awaiter(this, void 0, void 0, function* () {
|
|
279
279
|
return this.roundRobinTransfer({
|
|
280
280
|
walletIndex,
|
|
@@ -284,6 +284,7 @@ class Client extends xchainClient.BaseXChainClient {
|
|
|
284
284
|
memo,
|
|
285
285
|
limit,
|
|
286
286
|
priorityFee,
|
|
287
|
+
allowOwnerOffCurve,
|
|
287
288
|
});
|
|
288
289
|
});
|
|
289
290
|
}
|
|
@@ -303,7 +304,7 @@ class Client extends xchainClient.BaseXChainClient {
|
|
|
303
304
|
* @param {TxParams&Address} params - The transfer options.
|
|
304
305
|
* @returns {Promise<PreparedTx>} The raw unsigned transaction.
|
|
305
306
|
*/
|
|
306
|
-
prepareTx({ sender, recipient, asset, amount, memo, limit, priorityFee, }) {
|
|
307
|
+
prepareTx({ sender, recipient, asset, amount, memo, limit, priorityFee, allowOwnerOffCurve, }) {
|
|
307
308
|
return __awaiter(this, void 0, void 0, function* () {
|
|
308
309
|
return this.roundRobinPrepareTx({
|
|
309
310
|
sender,
|
|
@@ -313,6 +314,7 @@ class Client extends xchainClient.BaseXChainClient {
|
|
|
313
314
|
memo,
|
|
314
315
|
limit,
|
|
315
316
|
priorityFee,
|
|
317
|
+
allowOwnerOffCurve,
|
|
316
318
|
});
|
|
317
319
|
});
|
|
318
320
|
}
|
|
@@ -478,7 +480,7 @@ class Client extends xchainClient.BaseXChainClient {
|
|
|
478
480
|
else {
|
|
479
481
|
// Token transfer
|
|
480
482
|
const mintAddress = new web3_js.PublicKey(xchainUtil.getContractAddressFromAsset(params.asset));
|
|
481
|
-
const associatedTokenAddress = splToken.getAssociatedTokenAddressSync(mintAddress, toPubkey);
|
|
483
|
+
const associatedTokenAddress = splToken.getAssociatedTokenAddressSync(mintAddress, toPubkey, params.allowOwnerOffCurve);
|
|
482
484
|
try {
|
|
483
485
|
yield splToken.getAccount(provider.solanaProvider, associatedTokenAddress, undefined, splToken.TOKEN_PROGRAM_ID);
|
|
484
486
|
transaction.add(splToken.createTransferInstruction(sender.publicKey, // Should be Token account, but as it new KeyPair for estimation, sender public key
|
|
@@ -583,7 +585,7 @@ class Client extends xchainClient.BaseXChainClient {
|
|
|
583
585
|
* @returns {TxHash} The transaction hash.
|
|
584
586
|
* @throws {Error} if there is no provider able to make the transfer
|
|
585
587
|
*/
|
|
586
|
-
roundRobinTransfer({ walletIndex, recipient, asset, amount, memo, limit, priorityFee, }) {
|
|
588
|
+
roundRobinTransfer({ walletIndex, recipient, asset, amount, memo, limit, priorityFee, allowOwnerOffCurve, }) {
|
|
587
589
|
return __awaiter(this, void 0, void 0, function* () {
|
|
588
590
|
try {
|
|
589
591
|
const senderKeyPair = this.getPrivateKeyPair(walletIndex || 0);
|
|
@@ -591,7 +593,7 @@ class Client extends xchainClient.BaseXChainClient {
|
|
|
591
593
|
if (asset && !xchainUtil.eqAsset(asset, this.getAssetInfo().asset)) {
|
|
592
594
|
// Check if receipt token account is created, otherwise, create it
|
|
593
595
|
const mintAddress = new web3_js.PublicKey(xchainUtil.getContractAddressFromAsset(asset));
|
|
594
|
-
yield splToken.getOrCreateAssociatedTokenAccount(provider.solanaProvider, senderKeyPair, mintAddress, new web3_js.PublicKey(recipient));
|
|
596
|
+
yield splToken.getOrCreateAssociatedTokenAccount(provider.solanaProvider, senderKeyPair, mintAddress, new web3_js.PublicKey(recipient), allowOwnerOffCurve);
|
|
595
597
|
}
|
|
596
598
|
const { rawUnsignedTx } = yield this.prepareTx({
|
|
597
599
|
sender: senderKeyPair.publicKey.toBase58(),
|
|
@@ -645,7 +647,7 @@ class Client extends xchainClient.BaseXChainClient {
|
|
|
645
647
|
* @returns {Promise<PreparedTx>} The raw unsigned transaction.
|
|
646
648
|
* @throws {Error} if there is no provider able to prepare transaction
|
|
647
649
|
*/
|
|
648
|
-
roundRobinPrepareTx({ sender, recipient, asset, amount, memo, limit, priorityFee, }) {
|
|
650
|
+
roundRobinPrepareTx({ sender, recipient, asset, amount, memo, limit, priorityFee, allowOwnerOffCurve, }) {
|
|
649
651
|
return __awaiter(this, void 0, void 0, function* () {
|
|
650
652
|
try {
|
|
651
653
|
for (const provider of this.providers) {
|
|
@@ -678,7 +680,7 @@ class Client extends xchainClient.BaseXChainClient {
|
|
|
678
680
|
}
|
|
679
681
|
throw error;
|
|
680
682
|
}
|
|
681
|
-
const toAssociatedAccount = splToken.getAssociatedTokenAddressSync(mintAddress, toPubkey);
|
|
683
|
+
const toAssociatedAccount = splToken.getAssociatedTokenAddressSync(mintAddress, toPubkey, allowOwnerOffCurve);
|
|
682
684
|
let toTokenAccount;
|
|
683
685
|
try {
|
|
684
686
|
toTokenAccount = yield splToken.getAccount(provider.solanaProvider, toAssociatedAccount);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/const.ts","../src/utils.ts","../src/client.ts"],"sourcesContent":["import { ExplorerProvider, Network } from '@xchainjs/xchain-client'\nimport { Asset, AssetType } from '@xchainjs/xchain-util'\n\nimport { SOLClientParams } from './types'\n\n/**\n * Solana chain symbol\n */\nexport const SOLChain = 'SOL' as const\n\n/**\n * Solana native asset decimals\n */\nexport const SOL_DECIMALS = 9\n\n/**\n * Solana native asset\n */\nexport const SOLAsset: Asset = {\n chain: 'SOL',\n ticker: 'SOL',\n symbol: 'SOL',\n type: AssetType.NATIVE,\n}\n\nconst mainnetExplorer = new ExplorerProvider(\n 'https://explorer.solana.com/',\n 'https://explorer.solana.com/address/%%ADDRESS%%',\n 'https://explorer.solana.com/tx/%%TX_ID%%',\n)\n\nexport const defaultSolanaParams: SOLClientParams = {\n network: Network.Mainnet,\n rootDerivationPaths: {\n [Network.Mainnet]: \"m/44'/501'/\",\n [Network.Testnet]: \"m/44'/501'/\",\n [Network.Stagenet]: \"m/44'/501'/\",\n },\n explorerProviders: {\n [Network.Mainnet]: mainnetExplorer,\n [Network.Testnet]: new ExplorerProvider(\n 'https://explorer.solana.com/?cluster=testnet',\n 'https://explorer.solana.com/address/%%ADDRESS%%?cluster=testnet',\n 'https://explorer.solana.com/tx/%%TX_ID%%?cluster=testnet',\n ),\n [Network.Stagenet]: mainnetExplorer,\n },\n}\n","import { Cluster } from '@solana/web3.js'\nimport { Network } from '@xchainjs/xchain-client'\n\nexport const getSolanaNetwork = (network: Network): Cluster => {\n const networkMap: { [key in Network]: Cluster } = {\n [Network.Mainnet]: 'mainnet-beta',\n [Network.Stagenet]: 'mainnet-beta',\n [Network.Testnet]: 'testnet',\n }\n return networkMap[network]\n}\n","import { fetchAllDigitalAsset, fetchDigitalAsset, mplTokenMetadata } from '@metaplex-foundation/mpl-token-metadata'\nimport { PublicKey as UmiPubliKey, Umi, publicKey } from '@metaplex-foundation/umi'\nimport { createUmi } from '@metaplex-foundation/umi-bundle-defaults'\nimport { isAddress } from '@solana/addresses'\nimport {\n Account,\n TOKEN_PROGRAM_ID,\n TokenAccountNotFoundError,\n TokenInvalidAccountOwnerError,\n createTransferInstruction,\n getAccount,\n getAssociatedTokenAddressSync,\n getOrCreateAssociatedTokenAccount,\n} from '@solana/spl-token'\nimport {\n ComputeBudgetProgram,\n Connection,\n Keypair,\n ParsedTransactionWithMeta,\n PublicKey,\n SendTransactionError,\n SystemProgram,\n Transaction,\n TransactionInstruction,\n clusterApiUrl,\n} from '@solana/web3.js'\nimport {\n AssetInfo,\n BaseXChainClient,\n ExplorerProviders,\n FeeOption,\n FeeType,\n Fees,\n Network,\n PreparedTx,\n TxHash,\n TxHistoryParams,\n TxType,\n} from '@xchainjs/xchain-client'\nimport { getSeed } from '@xchainjs/xchain-crypto'\nimport {\n Address,\n TokenAsset,\n assetAmount,\n assetFromStringEx,\n assetToBase,\n baseAmount,\n eqAsset,\n getContractAddressFromAsset,\n} from '@xchainjs/xchain-util'\nimport bs58 from 'bs58'\nimport { HDKey } from 'micro-ed25519-hdkey'\n\nimport { SOLAsset, SOLChain, SOL_DECIMALS, defaultSolanaParams } from './const'\nimport { TokenAssetData } from './solana-types'\nimport { Balance, SOLClientParams, Tx, TxFrom, TxParams, TxTo, TxsPage } from './types'\nimport { getSolanaNetwork } from './utils'\n\ntype Providers = {\n solanaProvider: Connection\n umiProvider: Umi\n}\n\nexport class Client extends BaseXChainClient {\n private explorerProviders: ExplorerProviders\n private providers: Providers[]\n private clientUrls?: Record<Network, string[]>\n\n constructor(params: SOLClientParams = defaultSolanaParams) {\n super(SOLChain, {\n ...defaultSolanaParams,\n ...params,\n })\n this.explorerProviders = params.explorerProviders\n this.clientUrls = params.clientUrls\n\n if (!this.clientUrls) {\n const solanaProvider = new Connection(clusterApiUrl(getSolanaNetwork(this.getNetwork())))\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n this.providers = [\n {\n solanaProvider,\n umiProvider,\n },\n ]\n } else {\n this.providers = this.clientUrls[this.getNetwork()].map((url) => {\n const solanaProvider = new Connection(url)\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n return {\n solanaProvider,\n umiProvider,\n }\n })\n }\n }\n\n /**\n * Set or update the current network.\n * @param {Network} network The network to set\n * @returns {void}\n */\n public setNetwork(network: Network): void {\n super.setNetwork(network)\n if (!this.clientUrls) {\n const solanaProvider = new Connection(clusterApiUrl(getSolanaNetwork(this.getNetwork())))\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n this.providers = [\n {\n solanaProvider,\n umiProvider,\n },\n ]\n } else {\n this.providers = this.clientUrls[this.getNetwork()].map((url) => {\n const solanaProvider = new Connection(url)\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n return {\n solanaProvider,\n umiProvider,\n }\n })\n }\n }\n\n /**\n * Get information about the native asset of the Solana.\n *\n * @returns {AssetInfo} Information about the native asset.\n */\n public getAssetInfo(): AssetInfo {\n return {\n asset: SOLAsset,\n decimal: SOL_DECIMALS,\n }\n }\n\n /**\n * Get the explorer URL.\n *\n * @returns {string} The explorer URL.\n */\n public getExplorerUrl(): string {\n return this.explorerProviders[this.getNetwork()].getExplorerUrl()\n }\n\n /**\n * Get the explorer url for the given address.\n *\n * @param {Address} address\n * @returns {string} The explorer url for the given address.\n */\n public getExplorerAddressUrl(address: Address): string {\n return this.explorerProviders[this.getNetwork()].getExplorerAddressUrl(address)\n }\n\n /**\n * Get the explorer url for the given transaction id.\n *\n * @param {string} txID\n * @returns {string} The explorer url for the given transaction id.\n */\n public getExplorerTxUrl(txID: TxHash): string {\n return this.explorerProviders[this.getNetwork()].getExplorerTxUrl(txID)\n }\n\n /**\n * Get the full derivation path based on the wallet index.\n * @param {number} walletIndex The HD wallet index\n * @returns {string} The full derivation path\n */\n public getFullDerivationPath(walletIndex: number): string {\n if (!this.rootDerivationPaths) {\n throw Error('Can not generate derivation path due to root derivation path is undefined')\n }\n return `${this.rootDerivationPaths[this.getNetwork()]}${walletIndex}'`\n }\n\n /**\n * Get the current address asynchronously.\n *\n * @param {number} index The index of the address. Default 0\n * @returns {Address} The Solana address related to the index provided.\n * @throws {\"Phrase must be provided\"} Thrown if the phrase has not been set before.\n */\n public async getAddressAsync(index?: number): Promise<string> {\n return this.getPrivateKeyPair(index || 0).publicKey.toBase58()\n }\n\n /**\n * Get the current address synchronously.\n * @deprecated\n */\n public getAddress(): string {\n throw Error('Sync method not supported')\n }\n\n /**\n * Validate the given Solana address.\n * @param {string} address Solana address to validate.\n * @returns {boolean} `true` if the address is valid, `false` otherwise.\n */\n public validateAddress(address: Address): boolean {\n return isAddress(address)\n }\n\n /**\n * Retrieves the balance of a given address.\n * @param {Address} address - The address to retrieve the balance for.\n * @param {TokenAsset[]} assets - Assets to retrieve the balance for (optional).\n * @returns {Promise<Balance[]>} An array containing the balance of the address.\n */\n public async getBalance(address: Address, assets?: TokenAsset[]): Promise<Balance[]> {\n return this.roundRobinGetBalance(address, assets)\n }\n\n /**\n * Get transaction fees.\n *\n * @param {TxParams} params - The transaction parameters.\n * @returns {Fees} The average, fast, and fastest fees.\n * @throws {\"Params need to be passed\"} Thrown if parameters are not provided.\n */\n public async getFees(params?: TxParams): Promise<Fees> {\n if (!params) throw new Error('Params need to be passed')\n return this.roundRobinGetFees(params)\n }\n\n /**\n * Get the transaction details of a given transaction ID.\n *\n * @param {string} txId The transaction ID.\n * @returns {Tx} The transaction details.\n */\n public async getTransactionData(txId: string): Promise<Tx> {\n const transaction = await this.roundRobinGetTransactionData(txId)\n if (!transaction) throw Error('Can not find transaction')\n\n return this.parseTransaction(transaction)\n }\n\n /**\n * Get the transaction history of a given address with pagination options.\n *\n * @param {TxHistoryParams} params The options to get transaction history.\n * @returns {TxsPage} The transaction history.\n */\n public async getTransactions(params?: TxHistoryParams): Promise<TxsPage> {\n return this.roundRobinGetTransactions(params)\n }\n\n /**\n * Transfers SOL or Solana token\n *\n * @param {TxParams} params The transfer options.\n * @returns {TxHash} The transaction hash.\n */\n public async transfer({\n walletIndex,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n }: TxParams): Promise<string> {\n return this.roundRobinTransfer({\n walletIndex,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n })\n }\n\n /**\n * Broadcast a transaction to the network\n * @param {string} txHex Raw transaction to broadcast\n * @returns {TxHash} The hash of the transaction broadcasted\n */\n public async broadcastTx(txHex: string): Promise<TxHash> {\n return this.roundRobinBroadcastTx(txHex)\n }\n\n /**\n * Prepares a transaction for transfer.\n *\n * @param {TxParams&Address} params - The transfer options.\n * @returns {Promise<PreparedTx>} The raw unsigned transaction.\n */\n public async prepareTx({\n sender,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n }: TxParams & { sender: Address }): Promise<PreparedTx> {\n return this.roundRobinPrepareTx({\n sender,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n })\n }\n\n private getPrivateKeyPair(index: number): Keypair {\n if (!this.phrase) throw new Error('Phrase must be provided')\n\n const seed = getSeed(this.phrase)\n const hd = HDKey.fromMasterSeed(seed.toString('hex'))\n\n return Keypair.fromSeed(hd.derive(this.getFullDerivationPath(index)).privateKey)\n }\n\n private async parseTransaction(tx: ParsedTransactionWithMeta): Promise<Tx> {\n const from: TxFrom[] = []\n const to: TxTo[] = []\n\n tx.transaction.message.accountKeys.forEach((accountKey, index) => {\n if (accountKey.writable) {\n const preBalance = tx.meta?.preBalances[index]\n const postBalance = tx.meta?.postBalances[index]\n\n if (preBalance !== undefined && postBalance !== undefined) {\n if (postBalance > preBalance) {\n to.push({\n amount: baseAmount(postBalance - preBalance, this.getAssetInfo().decimal),\n asset: this.getAssetInfo().asset,\n to: accountKey.pubkey.toBase58(),\n })\n } else if (preBalance > postBalance) {\n from.push({\n amount: baseAmount(preBalance - postBalance, this.getAssetInfo().decimal),\n asset: this.getAssetInfo().asset,\n from: accountKey.pubkey.toBase58(),\n })\n }\n }\n }\n })\n\n // Tokens transfer\n if (tx.meta?.preTokenBalances && tx.meta?.postTokenBalances) {\n for (let i = 0; i < tx.meta?.postTokenBalances.length; i++) {\n const postBalance = tx.meta.postTokenBalances[i]\n\n const preBalance = tx.meta.preTokenBalances.find(\n (preTokenBalance) => preTokenBalance.accountIndex === postBalance.accountIndex,\n )\n\n const postBalanceAmount = postBalance.uiTokenAmount.uiAmount || 0\n const preBalanceAmount = preBalance?.uiTokenAmount.uiAmount || 0\n\n if (preBalance !== null && postBalance !== null) {\n const assetDecimals = tx.meta.postTokenBalances[i].uiTokenAmount.decimals\n const mintAddress = tx.meta.postTokenBalances[i].mint\n const owner = tx.meta.postTokenBalances[i].owner\n\n try {\n for (const provider of this.providers) {\n const tokenMetadata = await fetchDigitalAsset(provider.umiProvider, publicKey(mintAddress))\n\n if (owner) {\n if (postBalanceAmount > preBalanceAmount) {\n to.push({\n amount: assetToBase(assetAmount(postBalanceAmount - preBalanceAmount, assetDecimals)),\n asset: assetFromStringEx(\n `SOL.${tokenMetadata.metadata.symbol.trim()}-${mintAddress}`,\n ) as TokenAsset,\n to: owner,\n })\n } else if (preBalanceAmount > postBalanceAmount) {\n from.push({\n amount: assetToBase(assetAmount(preBalanceAmount - postBalanceAmount, assetDecimals)),\n asset: assetFromStringEx(\n `SOL.${tokenMetadata.metadata.symbol.trim()}-${mintAddress}`,\n ) as TokenAsset,\n from: owner,\n })\n }\n }\n }\n } catch {}\n }\n }\n }\n\n return {\n asset: this.getAssetInfo().asset,\n date: new Date((tx.blockTime || 0) * 1000),\n type: TxType.Transfer,\n hash: tx.transaction.signatures[0],\n from,\n to,\n }\n }\n\n /**\n * Retrieves the balance of a given address making a round robin over the providers.\n *\n * @param {Address} address - The address to retrieve the balance for.\n * @param {TokenAsset[]} assets - Assets to retrieve the balance for (optional).\n * @returns {Promise<Balance[]>} An array containing the balance of the address.\n * @throws {Error} if there is no provider able to retrieve the balances\n */\n private async roundRobinGetBalance(address: Address, assets?: TokenAsset[]): Promise<Balance[]> {\n try {\n for (const provider of this.providers) {\n const balances: Balance[] = []\n\n const nativeBalance = await provider.solanaProvider.getBalance(new PublicKey(address))\n\n balances.push({\n asset: SOLAsset,\n amount: baseAmount(nativeBalance, SOL_DECIMALS),\n })\n\n const tokenBalances = await provider.solanaProvider.getParsedTokenAccountsByOwner(new PublicKey(address), {\n programId: TOKEN_PROGRAM_ID,\n })\n\n const tokensToRequest = !assets\n ? tokenBalances.value\n : tokenBalances.value.filter((tokenBalance) => {\n const tokenData = tokenBalance.account.data.parsed as TokenAssetData\n return (\n assets.findIndex((asset) => {\n return asset.symbol.toLowerCase().includes(tokenData.info.mint.toLowerCase())\n }) !== -1\n )\n })\n\n const mintPublicKeys: UmiPubliKey[] = tokensToRequest.map((tokenBalance) => {\n const tokenData = tokenBalance.account.data.parsed as TokenAssetData\n return publicKey(tokenData.info.mint)\n })\n\n const assetsData = await fetchAllDigitalAsset(provider.umiProvider, mintPublicKeys)\n\n tokenBalances.value.forEach((balance) => {\n const parsedData = balance.account.data.parsed as TokenAssetData\n const assetData = assetsData.find((assetData) => assetData.publicKey.toString() === parsedData.info.mint)\n\n if (assetData) {\n balances.push({\n amount: baseAmount(parsedData.info.tokenAmount.amount, parsedData.info.tokenAmount.decimals),\n asset: assetFromStringEx(`SOL.${assetData.metadata.symbol.trim()}-${parsedData.info.mint}`) as TokenAsset,\n })\n }\n })\n\n return balances\n }\n } catch {}\n\n throw Error('No provider able to get balances.')\n }\n\n /**\n * Get transaction fees making a round robin over the providers.\n *\n * @param {TxParams} params - The transaction parameters.\n * @returns {Fees} The average, fast, and fastest fees.\n * @throws {Error} if there is no provider able to retrieve the fees\n */\n private async roundRobinGetFees(params: TxParams): Promise<Fees> {\n try {\n for (const provider of this.providers) {\n const sender = Keypair.generate()\n const toPubkey = new PublicKey(params.recipient)\n\n const transaction = new Transaction()\n\n transaction.recentBlockhash = await provider.solanaProvider\n .getLatestBlockhash()\n .then((block) => block.blockhash)\n transaction.feePayer = sender.publicKey\n\n let createAccountTxFee = 0\n if (!params.asset || eqAsset(params.asset, this.getAssetInfo().asset)) {\n // Native transfer\n transaction.add(\n SystemProgram.transfer({\n fromPubkey: sender.publicKey,\n toPubkey,\n lamports: params.amount.amount().toNumber(),\n }),\n )\n } else {\n // Token transfer\n const mintAddress = new PublicKey(getContractAddressFromAsset(params.asset as TokenAsset))\n const associatedTokenAddress = getAssociatedTokenAddressSync(mintAddress, toPubkey)\n\n try {\n await getAccount(provider.solanaProvider, associatedTokenAddress, undefined, TOKEN_PROGRAM_ID)\n transaction.add(\n createTransferInstruction(\n sender.publicKey, // Should be Token account, but as it new KeyPair for estimation, sender public key\n associatedTokenAddress,\n sender.publicKey,\n params.amount.amount().toNumber(),\n ),\n )\n } catch (error: unknown) {\n if (error instanceof TokenAccountNotFoundError || error instanceof TokenInvalidAccountOwnerError) {\n // recipient token account has to be created\n\n const dataLength = 165 // Normally used for Token accounts\n createAccountTxFee = await provider.solanaProvider.getMinimumBalanceForRentExemption(dataLength)\n\n transaction.add(\n createTransferInstruction(\n sender.publicKey, // Should be Token account, but as it new KeyPair for estimation, sender public key\n toPubkey, // Should be Token account, but as recipient token account should be created, recipient public key\n sender.publicKey,\n params.amount.amount().toNumber(),\n ),\n )\n }\n }\n }\n\n if (params.memo) {\n transaction.add(\n new TransactionInstruction({\n keys: [{ pubkey: sender.publicKey, isSigner: true, isWritable: true }],\n data: Buffer.from(params.memo, 'utf-8'),\n programId: new PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n }),\n )\n }\n\n if (params.priorityFee) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.priorityFee.amount().toNumber() / 10 ** 3,\n }),\n )\n }\n\n if (params.limit) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitLimit({\n units: params.limit,\n }),\n )\n }\n\n const fee = (await transaction.getEstimatedFee(provider.solanaProvider)) || 0\n\n return {\n type: FeeType.FlatFee,\n [FeeOption.Average]: baseAmount(fee + createAccountTxFee, SOL_DECIMALS),\n [FeeOption.Fast]: baseAmount(fee + createAccountTxFee, SOL_DECIMALS),\n [FeeOption.Fastest]: baseAmount(fee + createAccountTxFee, SOL_DECIMALS),\n }\n }\n } catch {}\n throw Error('No provider able to get fees.')\n }\n\n /**\n * Get the transaction details of a given transaction ID making a round robin over the providers.\n *\n * @param {string} txId The transaction ID.\n * @returns {Tx} The transaction details.\n * @throws {Error} if there is no provider able to retrieve the transaction data\n */\n private async roundRobinGetTransactionData(txId: string): Promise<ParsedTransactionWithMeta | null> {\n try {\n for (const provider of this.providers) {\n const transaction = await provider.solanaProvider.getParsedTransaction(txId)\n return transaction\n }\n } catch {}\n throw Error('No provider able to get transaction data.')\n }\n\n /**\n * Get the transaction history of a given address with pagination options making a round robin over the providers.\n *\n * @param {TxHistoryParams} params The options to get transaction history.\n * @returns {TxsPage} The transaction history.\n * @throws {Error} if there is no provider able to retrieve the transactions\n */\n private async roundRobinGetTransactions(params?: TxHistoryParams): Promise<TxsPage> {\n try {\n for (const provider of this.providers) {\n const signatures = await provider.solanaProvider.getSignaturesForAddress(\n new PublicKey(params?.address || (await this.getAddressAsync())),\n )\n\n const transactions = await provider.solanaProvider.getParsedTransactions(\n signatures.map(({ signature }) => signature),\n )\n\n const results = await Promise.allSettled(\n transactions\n .filter((transaction) => !!transaction)\n .map((transaction) => this.parseTransaction(transaction as ParsedTransactionWithMeta)),\n )\n\n const txs: Tx[] = []\n\n results.forEach((result) => {\n if (result.status === 'fulfilled') {\n txs.push(result.value)\n }\n })\n\n return {\n txs,\n total: txs.length,\n }\n }\n } catch {}\n\n throw Error('No provider able to get transactions.')\n }\n\n /**\n * Transfers SOL or Solana token making a round robin over the providers\n *\n * @param {TxParams} params The transfer options.\n * @returns {TxHash} The transaction hash.\n * @throws {Error} if there is no provider able to make the transfer\n */\n private async roundRobinTransfer({\n walletIndex,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n }: TxParams): Promise<string> {\n try {\n const senderKeyPair = this.getPrivateKeyPair(walletIndex || 0)\n for (const provider of this.providers) {\n if (asset && !eqAsset(asset, this.getAssetInfo().asset)) {\n // Check if receipt token account is created, otherwise, create it\n const mintAddress = new PublicKey(getContractAddressFromAsset(asset as TokenAsset))\n await getOrCreateAssociatedTokenAccount(\n provider.solanaProvider,\n senderKeyPair,\n mintAddress,\n new PublicKey(recipient),\n )\n }\n\n const { rawUnsignedTx } = await this.prepareTx({\n sender: senderKeyPair.publicKey.toBase58(),\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n })\n\n const transaction = Transaction.from(bs58.decode(rawUnsignedTx))\n\n transaction.sign(senderKeyPair)\n\n return this.broadcastTx(bs58.encode(transaction.serialize()))\n }\n } catch {}\n\n throw Error('No provider able to transfer.')\n }\n\n /**\n * Broadcast a transaction to the network making a round robin over the providers\n *\n * @param {string} txHex Raw transaction to broadcast\n * @returns {TxHash} The hash of the transaction broadcasted\n * @throws {Error} if there is no provider able to broadcast transaction\n */\n private async roundRobinBroadcastTx(txHex: string): Promise<TxHash> {\n try {\n for (const provider of this.providers) {\n try {\n const transaction = Transaction.from(bs58.decode(txHex))\n return await provider.solanaProvider.sendRawTransaction(transaction.serialize())\n } catch (e: unknown) {\n if (e instanceof SendTransactionError) {\n console.log(await e.getLogs(provider.solanaProvider))\n }\n throw Error('Can not broadcast transaction. Unknown error')\n }\n }\n } catch {}\n\n throw Error('No provider able to broadcast transaction.')\n }\n\n /**\n * Prepares a transaction for transfer making round robin over the providers.\n *\n * @param {TxParams&Address} params - The transfer options.\n * @returns {Promise<PreparedTx>} The raw unsigned transaction.\n * @throws {Error} if there is no provider able to prepare transaction\n */\n private async roundRobinPrepareTx({\n sender,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n }: TxParams & { sender: Address }): Promise<PreparedTx> {\n try {\n for (const provider of this.providers) {\n const transaction = new Transaction()\n\n const fromPubkey = new PublicKey(sender)\n const toPubkey = new PublicKey(recipient)\n\n transaction.recentBlockhash = await provider.solanaProvider\n .getLatestBlockhash()\n .then((block) => block.blockhash)\n transaction.feePayer = new PublicKey(sender)\n\n if (!asset || eqAsset(asset, this.getAssetInfo().asset)) {\n // Native transfer\n transaction.add(\n SystemProgram.transfer({\n fromPubkey,\n toPubkey,\n lamports: amount.amount().toNumber(),\n }),\n )\n } else {\n // Token transfer\n const mintAddress = new PublicKey(getContractAddressFromAsset(asset as TokenAsset))\n\n const fromAssociatedAccount = getAssociatedTokenAddressSync(mintAddress, fromPubkey)\n let fromTokenAccount: Account\n try {\n fromTokenAccount = await getAccount(provider.solanaProvider, fromAssociatedAccount)\n } catch (error) {\n if (error instanceof TokenAccountNotFoundError || error instanceof TokenInvalidAccountOwnerError) {\n throw Error('Can not find sender Token account')\n }\n throw error\n }\n\n const toAssociatedAccount = getAssociatedTokenAddressSync(mintAddress, toPubkey)\n let toTokenAccount: Account\n try {\n toTokenAccount = await getAccount(provider.solanaProvider, toAssociatedAccount)\n } catch (error) {\n if (error instanceof TokenAccountNotFoundError || error instanceof TokenInvalidAccountOwnerError) {\n throw Error('Can not find recipient Token account. Create it first')\n }\n throw error\n }\n\n transaction.add(\n createTransferInstruction(\n fromTokenAccount.address,\n toTokenAccount.address,\n fromPubkey,\n amount.amount().toNumber(),\n ),\n )\n }\n\n if (memo) {\n transaction.add(\n new TransactionInstruction({\n keys: [{ pubkey: fromPubkey, isSigner: true, isWritable: true }],\n data: Buffer.from(memo, 'utf-8'),\n programId: new PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n }),\n )\n }\n\n if (priorityFee) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: priorityFee.amount().toNumber() / 10 ** 3,\n }),\n )\n }\n\n if (limit) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitLimit({\n units: limit,\n }),\n )\n }\n\n return { rawUnsignedTx: bs58.encode(transaction.serialize({ verifySignatures: false })) }\n }\n } catch {}\n\n throw Error('No provider able to prepare transaction')\n }\n}\n"],"names":["AssetType","ExplorerProvider","Network","BaseXChainClient","Connection","clusterApiUrl","createUmi","mplTokenMetadata","isAddress","getSeed","HDKey","Keypair","baseAmount","fetchDigitalAsset","publicKey","assetToBase","assetAmount","assetFromStringEx","TxType","PublicKey","TOKEN_PROGRAM_ID","fetchAllDigitalAsset","Transaction","eqAsset","SystemProgram","getContractAddressFromAsset","getAssociatedTokenAddressSync","getAccount","createTransferInstruction","TokenAccountNotFoundError","TokenInvalidAccountOwnerError","TransactionInstruction","ComputeBudgetProgram","FeeType","FeeOption","getOrCreateAssociatedTokenAccount","bs58","SendTransactionError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/const.ts","../src/utils.ts","../src/client.ts"],"sourcesContent":["import { ExplorerProvider, Network } from '@xchainjs/xchain-client'\nimport { Asset, AssetType } from '@xchainjs/xchain-util'\n\nimport { SOLClientParams } from './types'\n\n/**\n * Solana chain symbol\n */\nexport const SOLChain = 'SOL' as const\n\n/**\n * Solana native asset decimals\n */\nexport const SOL_DECIMALS = 9\n\n/**\n * Solana native asset\n */\nexport const SOLAsset: Asset = {\n chain: 'SOL',\n ticker: 'SOL',\n symbol: 'SOL',\n type: AssetType.NATIVE,\n}\n\nconst mainnetExplorer = new ExplorerProvider(\n 'https://explorer.solana.com/',\n 'https://explorer.solana.com/address/%%ADDRESS%%',\n 'https://explorer.solana.com/tx/%%TX_ID%%',\n)\n\nexport const defaultSolanaParams: SOLClientParams = {\n network: Network.Mainnet,\n rootDerivationPaths: {\n [Network.Mainnet]: \"m/44'/501'/\",\n [Network.Testnet]: \"m/44'/501'/\",\n [Network.Stagenet]: \"m/44'/501'/\",\n },\n explorerProviders: {\n [Network.Mainnet]: mainnetExplorer,\n [Network.Testnet]: new ExplorerProvider(\n 'https://explorer.solana.com/?cluster=testnet',\n 'https://explorer.solana.com/address/%%ADDRESS%%?cluster=testnet',\n 'https://explorer.solana.com/tx/%%TX_ID%%?cluster=testnet',\n ),\n [Network.Stagenet]: mainnetExplorer,\n },\n}\n","import { Cluster } from '@solana/web3.js'\nimport { Network } from '@xchainjs/xchain-client'\n\nexport const getSolanaNetwork = (network: Network): Cluster => {\n const networkMap: { [key in Network]: Cluster } = {\n [Network.Mainnet]: 'mainnet-beta',\n [Network.Stagenet]: 'mainnet-beta',\n [Network.Testnet]: 'testnet',\n }\n return networkMap[network]\n}\n","import { fetchAllDigitalAsset, fetchDigitalAsset, mplTokenMetadata } from '@metaplex-foundation/mpl-token-metadata'\nimport { PublicKey as UmiPubliKey, Umi, publicKey } from '@metaplex-foundation/umi'\nimport { createUmi } from '@metaplex-foundation/umi-bundle-defaults'\nimport { isAddress } from '@solana/addresses'\nimport {\n Account,\n TOKEN_PROGRAM_ID,\n TokenAccountNotFoundError,\n TokenInvalidAccountOwnerError,\n createTransferInstruction,\n getAccount,\n getAssociatedTokenAddressSync,\n getOrCreateAssociatedTokenAccount,\n} from '@solana/spl-token'\nimport {\n ComputeBudgetProgram,\n Connection,\n Keypair,\n ParsedTransactionWithMeta,\n PublicKey,\n SendTransactionError,\n SystemProgram,\n Transaction,\n TransactionInstruction,\n clusterApiUrl,\n} from '@solana/web3.js'\nimport {\n AssetInfo,\n BaseXChainClient,\n ExplorerProviders,\n FeeOption,\n FeeType,\n Fees,\n Network,\n PreparedTx,\n TxHash,\n TxHistoryParams,\n TxType,\n} from '@xchainjs/xchain-client'\nimport { getSeed } from '@xchainjs/xchain-crypto'\nimport {\n Address,\n TokenAsset,\n assetAmount,\n assetFromStringEx,\n assetToBase,\n baseAmount,\n eqAsset,\n getContractAddressFromAsset,\n} from '@xchainjs/xchain-util'\nimport bs58 from 'bs58'\nimport { HDKey } from 'micro-ed25519-hdkey'\n\nimport { SOLAsset, SOLChain, SOL_DECIMALS, defaultSolanaParams } from './const'\nimport { TokenAssetData } from './solana-types'\nimport { Balance, SOLClientParams, Tx, TxFrom, TxParams, TxTo, TxsPage } from './types'\nimport { getSolanaNetwork } from './utils'\n\ntype Providers = {\n solanaProvider: Connection\n umiProvider: Umi\n}\n\nexport class Client extends BaseXChainClient {\n private explorerProviders: ExplorerProviders\n private providers: Providers[]\n private clientUrls?: Record<Network, string[]>\n\n constructor(params: SOLClientParams = defaultSolanaParams) {\n super(SOLChain, {\n ...defaultSolanaParams,\n ...params,\n })\n this.explorerProviders = params.explorerProviders\n this.clientUrls = params.clientUrls\n\n if (!this.clientUrls) {\n const solanaProvider = new Connection(clusterApiUrl(getSolanaNetwork(this.getNetwork())))\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n this.providers = [\n {\n solanaProvider,\n umiProvider,\n },\n ]\n } else {\n this.providers = this.clientUrls[this.getNetwork()].map((url) => {\n const solanaProvider = new Connection(url)\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n return {\n solanaProvider,\n umiProvider,\n }\n })\n }\n }\n\n /**\n * Set or update the current network.\n * @param {Network} network The network to set\n * @returns {void}\n */\n public setNetwork(network: Network): void {\n super.setNetwork(network)\n if (!this.clientUrls) {\n const solanaProvider = new Connection(clusterApiUrl(getSolanaNetwork(this.getNetwork())))\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n this.providers = [\n {\n solanaProvider,\n umiProvider,\n },\n ]\n } else {\n this.providers = this.clientUrls[this.getNetwork()].map((url) => {\n const solanaProvider = new Connection(url)\n const umiProvider = createUmi(solanaProvider).use(mplTokenMetadata())\n return {\n solanaProvider,\n umiProvider,\n }\n })\n }\n }\n\n /**\n * Get information about the native asset of the Solana.\n *\n * @returns {AssetInfo} Information about the native asset.\n */\n public getAssetInfo(): AssetInfo {\n return {\n asset: SOLAsset,\n decimal: SOL_DECIMALS,\n }\n }\n\n /**\n * Get the explorer URL.\n *\n * @returns {string} The explorer URL.\n */\n public getExplorerUrl(): string {\n return this.explorerProviders[this.getNetwork()].getExplorerUrl()\n }\n\n /**\n * Get the explorer url for the given address.\n *\n * @param {Address} address\n * @returns {string} The explorer url for the given address.\n */\n public getExplorerAddressUrl(address: Address): string {\n return this.explorerProviders[this.getNetwork()].getExplorerAddressUrl(address)\n }\n\n /**\n * Get the explorer url for the given transaction id.\n *\n * @param {string} txID\n * @returns {string} The explorer url for the given transaction id.\n */\n public getExplorerTxUrl(txID: TxHash): string {\n return this.explorerProviders[this.getNetwork()].getExplorerTxUrl(txID)\n }\n\n /**\n * Get the full derivation path based on the wallet index.\n * @param {number} walletIndex The HD wallet index\n * @returns {string} The full derivation path\n */\n public getFullDerivationPath(walletIndex: number): string {\n if (!this.rootDerivationPaths) {\n throw Error('Can not generate derivation path due to root derivation path is undefined')\n }\n return `${this.rootDerivationPaths[this.getNetwork()]}${walletIndex}'`\n }\n\n /**\n * Get the current address asynchronously.\n *\n * @param {number} index The index of the address. Default 0\n * @returns {Address} The Solana address related to the index provided.\n * @throws {\"Phrase must be provided\"} Thrown if the phrase has not been set before.\n */\n public async getAddressAsync(index?: number): Promise<string> {\n return this.getPrivateKeyPair(index || 0).publicKey.toBase58()\n }\n\n /**\n * Get the current address synchronously.\n * @deprecated\n */\n public getAddress(): string {\n throw Error('Sync method not supported')\n }\n\n /**\n * Validate the given Solana address.\n * @param {string} address Solana address to validate.\n * @returns {boolean} `true` if the address is valid, `false` otherwise.\n */\n public validateAddress(address: Address): boolean {\n return isAddress(address)\n }\n\n /**\n * Retrieves the balance of a given address.\n * @param {Address} address - The address to retrieve the balance for.\n * @param {TokenAsset[]} assets - Assets to retrieve the balance for (optional).\n * @returns {Promise<Balance[]>} An array containing the balance of the address.\n */\n public async getBalance(address: Address, assets?: TokenAsset[]): Promise<Balance[]> {\n return this.roundRobinGetBalance(address, assets)\n }\n\n /**\n * Get transaction fees.\n *\n * @param {TxParams} params - The transaction parameters.\n * @returns {Fees} The average, fast, and fastest fees.\n * @throws {\"Params need to be passed\"} Thrown if parameters are not provided.\n */\n public async getFees(params?: TxParams): Promise<Fees> {\n if (!params) throw new Error('Params need to be passed')\n return this.roundRobinGetFees(params)\n }\n\n /**\n * Get the transaction details of a given transaction ID.\n *\n * @param {string} txId The transaction ID.\n * @returns {Tx} The transaction details.\n */\n public async getTransactionData(txId: string): Promise<Tx> {\n const transaction = await this.roundRobinGetTransactionData(txId)\n if (!transaction) throw Error('Can not find transaction')\n\n return this.parseTransaction(transaction)\n }\n\n /**\n * Get the transaction history of a given address with pagination options.\n *\n * @param {TxHistoryParams} params The options to get transaction history.\n * @returns {TxsPage} The transaction history.\n */\n public async getTransactions(params?: TxHistoryParams): Promise<TxsPage> {\n return this.roundRobinGetTransactions(params)\n }\n\n /**\n * Transfers SOL or Solana token\n *\n * @param {TxParams} params The transfer options.\n * @returns {TxHash} The transaction hash.\n */\n public async transfer({\n walletIndex,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n allowOwnerOffCurve,\n }: TxParams): Promise<string> {\n return this.roundRobinTransfer({\n walletIndex,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n allowOwnerOffCurve,\n })\n }\n\n /**\n * Broadcast a transaction to the network\n * @param {string} txHex Raw transaction to broadcast\n * @returns {TxHash} The hash of the transaction broadcasted\n */\n public async broadcastTx(txHex: string): Promise<TxHash> {\n return this.roundRobinBroadcastTx(txHex)\n }\n\n /**\n * Prepares a transaction for transfer.\n *\n * @param {TxParams&Address} params - The transfer options.\n * @returns {Promise<PreparedTx>} The raw unsigned transaction.\n */\n public async prepareTx({\n sender,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n allowOwnerOffCurve,\n }: TxParams & { sender: Address }): Promise<PreparedTx> {\n return this.roundRobinPrepareTx({\n sender,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n allowOwnerOffCurve,\n })\n }\n\n private getPrivateKeyPair(index: number): Keypair {\n if (!this.phrase) throw new Error('Phrase must be provided')\n\n const seed = getSeed(this.phrase)\n const hd = HDKey.fromMasterSeed(seed.toString('hex'))\n\n return Keypair.fromSeed(hd.derive(this.getFullDerivationPath(index)).privateKey)\n }\n\n private async parseTransaction(tx: ParsedTransactionWithMeta): Promise<Tx> {\n const from: TxFrom[] = []\n const to: TxTo[] = []\n\n tx.transaction.message.accountKeys.forEach((accountKey, index) => {\n if (accountKey.writable) {\n const preBalance = tx.meta?.preBalances[index]\n const postBalance = tx.meta?.postBalances[index]\n\n if (preBalance !== undefined && postBalance !== undefined) {\n if (postBalance > preBalance) {\n to.push({\n amount: baseAmount(postBalance - preBalance, this.getAssetInfo().decimal),\n asset: this.getAssetInfo().asset,\n to: accountKey.pubkey.toBase58(),\n })\n } else if (preBalance > postBalance) {\n from.push({\n amount: baseAmount(preBalance - postBalance, this.getAssetInfo().decimal),\n asset: this.getAssetInfo().asset,\n from: accountKey.pubkey.toBase58(),\n })\n }\n }\n }\n })\n\n // Tokens transfer\n if (tx.meta?.preTokenBalances && tx.meta?.postTokenBalances) {\n for (let i = 0; i < tx.meta?.postTokenBalances.length; i++) {\n const postBalance = tx.meta.postTokenBalances[i]\n\n const preBalance = tx.meta.preTokenBalances.find(\n (preTokenBalance) => preTokenBalance.accountIndex === postBalance.accountIndex,\n )\n\n const postBalanceAmount = postBalance.uiTokenAmount.uiAmount || 0\n const preBalanceAmount = preBalance?.uiTokenAmount.uiAmount || 0\n\n if (preBalance !== null && postBalance !== null) {\n const assetDecimals = tx.meta.postTokenBalances[i].uiTokenAmount.decimals\n const mintAddress = tx.meta.postTokenBalances[i].mint\n const owner = tx.meta.postTokenBalances[i].owner\n\n try {\n for (const provider of this.providers) {\n const tokenMetadata = await fetchDigitalAsset(provider.umiProvider, publicKey(mintAddress))\n\n if (owner) {\n if (postBalanceAmount > preBalanceAmount) {\n to.push({\n amount: assetToBase(assetAmount(postBalanceAmount - preBalanceAmount, assetDecimals)),\n asset: assetFromStringEx(\n `SOL.${tokenMetadata.metadata.symbol.trim()}-${mintAddress}`,\n ) as TokenAsset,\n to: owner,\n })\n } else if (preBalanceAmount > postBalanceAmount) {\n from.push({\n amount: assetToBase(assetAmount(preBalanceAmount - postBalanceAmount, assetDecimals)),\n asset: assetFromStringEx(\n `SOL.${tokenMetadata.metadata.symbol.trim()}-${mintAddress}`,\n ) as TokenAsset,\n from: owner,\n })\n }\n }\n }\n } catch {}\n }\n }\n }\n\n return {\n asset: this.getAssetInfo().asset,\n date: new Date((tx.blockTime || 0) * 1000),\n type: TxType.Transfer,\n hash: tx.transaction.signatures[0],\n from,\n to,\n }\n }\n\n /**\n * Retrieves the balance of a given address making a round robin over the providers.\n *\n * @param {Address} address - The address to retrieve the balance for.\n * @param {TokenAsset[]} assets - Assets to retrieve the balance for (optional).\n * @returns {Promise<Balance[]>} An array containing the balance of the address.\n * @throws {Error} if there is no provider able to retrieve the balances\n */\n private async roundRobinGetBalance(address: Address, assets?: TokenAsset[]): Promise<Balance[]> {\n try {\n for (const provider of this.providers) {\n const balances: Balance[] = []\n\n const nativeBalance = await provider.solanaProvider.getBalance(new PublicKey(address))\n\n balances.push({\n asset: SOLAsset,\n amount: baseAmount(nativeBalance, SOL_DECIMALS),\n })\n\n const tokenBalances = await provider.solanaProvider.getParsedTokenAccountsByOwner(new PublicKey(address), {\n programId: TOKEN_PROGRAM_ID,\n })\n\n const tokensToRequest = !assets\n ? tokenBalances.value\n : tokenBalances.value.filter((tokenBalance) => {\n const tokenData = tokenBalance.account.data.parsed as TokenAssetData\n return (\n assets.findIndex((asset) => {\n return asset.symbol.toLowerCase().includes(tokenData.info.mint.toLowerCase())\n }) !== -1\n )\n })\n\n const mintPublicKeys: UmiPubliKey[] = tokensToRequest.map((tokenBalance) => {\n const tokenData = tokenBalance.account.data.parsed as TokenAssetData\n return publicKey(tokenData.info.mint)\n })\n\n const assetsData = await fetchAllDigitalAsset(provider.umiProvider, mintPublicKeys)\n\n tokenBalances.value.forEach((balance) => {\n const parsedData = balance.account.data.parsed as TokenAssetData\n const assetData = assetsData.find((assetData) => assetData.publicKey.toString() === parsedData.info.mint)\n\n if (assetData) {\n balances.push({\n amount: baseAmount(parsedData.info.tokenAmount.amount, parsedData.info.tokenAmount.decimals),\n asset: assetFromStringEx(`SOL.${assetData.metadata.symbol.trim()}-${parsedData.info.mint}`) as TokenAsset,\n })\n }\n })\n\n return balances\n }\n } catch {}\n\n throw Error('No provider able to get balances.')\n }\n\n /**\n * Get transaction fees making a round robin over the providers.\n *\n * @param {TxParams} params - The transaction parameters.\n * @returns {Fees} The average, fast, and fastest fees.\n * @throws {Error} if there is no provider able to retrieve the fees\n */\n private async roundRobinGetFees(params: TxParams): Promise<Fees> {\n try {\n for (const provider of this.providers) {\n const sender = Keypair.generate()\n const toPubkey = new PublicKey(params.recipient)\n\n const transaction = new Transaction()\n\n transaction.recentBlockhash = await provider.solanaProvider\n .getLatestBlockhash()\n .then((block) => block.blockhash)\n transaction.feePayer = sender.publicKey\n\n let createAccountTxFee = 0\n if (!params.asset || eqAsset(params.asset, this.getAssetInfo().asset)) {\n // Native transfer\n transaction.add(\n SystemProgram.transfer({\n fromPubkey: sender.publicKey,\n toPubkey,\n lamports: params.amount.amount().toNumber(),\n }),\n )\n } else {\n // Token transfer\n const mintAddress = new PublicKey(getContractAddressFromAsset(params.asset as TokenAsset))\n const associatedTokenAddress = getAssociatedTokenAddressSync(mintAddress, toPubkey, params.allowOwnerOffCurve)\n\n try {\n await getAccount(provider.solanaProvider, associatedTokenAddress, undefined, TOKEN_PROGRAM_ID)\n transaction.add(\n createTransferInstruction(\n sender.publicKey, // Should be Token account, but as it new KeyPair for estimation, sender public key\n associatedTokenAddress,\n sender.publicKey,\n params.amount.amount().toNumber(),\n ),\n )\n } catch (error: unknown) {\n if (error instanceof TokenAccountNotFoundError || error instanceof TokenInvalidAccountOwnerError) {\n // recipient token account has to be created\n\n const dataLength = 165 // Normally used for Token accounts\n createAccountTxFee = await provider.solanaProvider.getMinimumBalanceForRentExemption(dataLength)\n\n transaction.add(\n createTransferInstruction(\n sender.publicKey, // Should be Token account, but as it new KeyPair for estimation, sender public key\n toPubkey, // Should be Token account, but as recipient token account should be created, recipient public key\n sender.publicKey,\n params.amount.amount().toNumber(),\n ),\n )\n }\n }\n }\n\n if (params.memo) {\n transaction.add(\n new TransactionInstruction({\n keys: [{ pubkey: sender.publicKey, isSigner: true, isWritable: true }],\n data: Buffer.from(params.memo, 'utf-8'),\n programId: new PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n }),\n )\n }\n\n if (params.priorityFee) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.priorityFee.amount().toNumber() / 10 ** 3,\n }),\n )\n }\n\n if (params.limit) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitLimit({\n units: params.limit,\n }),\n )\n }\n\n const fee = (await transaction.getEstimatedFee(provider.solanaProvider)) || 0\n\n return {\n type: FeeType.FlatFee,\n [FeeOption.Average]: baseAmount(fee + createAccountTxFee, SOL_DECIMALS),\n [FeeOption.Fast]: baseAmount(fee + createAccountTxFee, SOL_DECIMALS),\n [FeeOption.Fastest]: baseAmount(fee + createAccountTxFee, SOL_DECIMALS),\n }\n }\n } catch {}\n throw Error('No provider able to get fees.')\n }\n\n /**\n * Get the transaction details of a given transaction ID making a round robin over the providers.\n *\n * @param {string} txId The transaction ID.\n * @returns {Tx} The transaction details.\n * @throws {Error} if there is no provider able to retrieve the transaction data\n */\n private async roundRobinGetTransactionData(txId: string): Promise<ParsedTransactionWithMeta | null> {\n try {\n for (const provider of this.providers) {\n const transaction = await provider.solanaProvider.getParsedTransaction(txId)\n return transaction\n }\n } catch {}\n throw Error('No provider able to get transaction data.')\n }\n\n /**\n * Get the transaction history of a given address with pagination options making a round robin over the providers.\n *\n * @param {TxHistoryParams} params The options to get transaction history.\n * @returns {TxsPage} The transaction history.\n * @throws {Error} if there is no provider able to retrieve the transactions\n */\n private async roundRobinGetTransactions(params?: TxHistoryParams): Promise<TxsPage> {\n try {\n for (const provider of this.providers) {\n const signatures = await provider.solanaProvider.getSignaturesForAddress(\n new PublicKey(params?.address || (await this.getAddressAsync())),\n )\n\n const transactions = await provider.solanaProvider.getParsedTransactions(\n signatures.map(({ signature }) => signature),\n )\n\n const results = await Promise.allSettled(\n transactions\n .filter((transaction) => !!transaction)\n .map((transaction) => this.parseTransaction(transaction as ParsedTransactionWithMeta)),\n )\n\n const txs: Tx[] = []\n\n results.forEach((result) => {\n if (result.status === 'fulfilled') {\n txs.push(result.value)\n }\n })\n\n return {\n txs,\n total: txs.length,\n }\n }\n } catch {}\n\n throw Error('No provider able to get transactions.')\n }\n\n /**\n * Transfers SOL or Solana token making a round robin over the providers\n *\n * @param {TxParams} params The transfer options.\n * @returns {TxHash} The transaction hash.\n * @throws {Error} if there is no provider able to make the transfer\n */\n private async roundRobinTransfer({\n walletIndex,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n allowOwnerOffCurve,\n }: TxParams): Promise<string> {\n try {\n const senderKeyPair = this.getPrivateKeyPair(walletIndex || 0)\n for (const provider of this.providers) {\n if (asset && !eqAsset(asset, this.getAssetInfo().asset)) {\n // Check if receipt token account is created, otherwise, create it\n const mintAddress = new PublicKey(getContractAddressFromAsset(asset as TokenAsset))\n\n await getOrCreateAssociatedTokenAccount(\n provider.solanaProvider,\n senderKeyPair,\n mintAddress,\n new PublicKey(recipient),\n allowOwnerOffCurve,\n )\n }\n\n const { rawUnsignedTx } = await this.prepareTx({\n sender: senderKeyPair.publicKey.toBase58(),\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n })\n\n const transaction = Transaction.from(bs58.decode(rawUnsignedTx))\n\n transaction.sign(senderKeyPair)\n\n return this.broadcastTx(bs58.encode(transaction.serialize()))\n }\n } catch {}\n\n throw Error('No provider able to transfer.')\n }\n\n /**\n * Broadcast a transaction to the network making a round robin over the providers\n *\n * @param {string} txHex Raw transaction to broadcast\n * @returns {TxHash} The hash of the transaction broadcasted\n * @throws {Error} if there is no provider able to broadcast transaction\n */\n private async roundRobinBroadcastTx(txHex: string): Promise<TxHash> {\n try {\n for (const provider of this.providers) {\n try {\n const transaction = Transaction.from(bs58.decode(txHex))\n return await provider.solanaProvider.sendRawTransaction(transaction.serialize())\n } catch (e: unknown) {\n if (e instanceof SendTransactionError) {\n console.log(await e.getLogs(provider.solanaProvider))\n }\n throw Error('Can not broadcast transaction. Unknown error')\n }\n }\n } catch {}\n\n throw Error('No provider able to broadcast transaction.')\n }\n\n /**\n * Prepares a transaction for transfer making round robin over the providers.\n *\n * @param {TxParams&Address} params - The transfer options.\n * @returns {Promise<PreparedTx>} The raw unsigned transaction.\n * @throws {Error} if there is no provider able to prepare transaction\n */\n private async roundRobinPrepareTx({\n sender,\n recipient,\n asset,\n amount,\n memo,\n limit,\n priorityFee,\n allowOwnerOffCurve,\n }: TxParams & { sender: Address }): Promise<PreparedTx> {\n try {\n for (const provider of this.providers) {\n const transaction = new Transaction()\n const fromPubkey = new PublicKey(sender)\n const toPubkey = new PublicKey(recipient)\n\n transaction.recentBlockhash = await provider.solanaProvider\n .getLatestBlockhash()\n .then((block) => block.blockhash)\n transaction.feePayer = new PublicKey(sender)\n\n if (!asset || eqAsset(asset, this.getAssetInfo().asset)) {\n // Native transfer\n transaction.add(\n SystemProgram.transfer({\n fromPubkey,\n toPubkey,\n lamports: amount.amount().toNumber(),\n }),\n )\n } else {\n // Token transfer\n const mintAddress = new PublicKey(getContractAddressFromAsset(asset as TokenAsset))\n const fromAssociatedAccount = getAssociatedTokenAddressSync(mintAddress, fromPubkey)\n let fromTokenAccount: Account\n try {\n fromTokenAccount = await getAccount(provider.solanaProvider, fromAssociatedAccount)\n } catch (error) {\n if (error instanceof TokenAccountNotFoundError || error instanceof TokenInvalidAccountOwnerError) {\n throw Error('Can not find sender Token account')\n }\n throw error\n }\n\n const toAssociatedAccount = getAssociatedTokenAddressSync(mintAddress, toPubkey, allowOwnerOffCurve)\n let toTokenAccount: Account\n try {\n toTokenAccount = await getAccount(provider.solanaProvider, toAssociatedAccount)\n } catch (error) {\n if (error instanceof TokenAccountNotFoundError || error instanceof TokenInvalidAccountOwnerError) {\n throw Error('Can not find recipient Token account. Create it first')\n }\n throw error\n }\n\n transaction.add(\n createTransferInstruction(\n fromTokenAccount.address,\n toTokenAccount.address,\n fromPubkey,\n amount.amount().toNumber(),\n ),\n )\n }\n\n if (memo) {\n transaction.add(\n new TransactionInstruction({\n keys: [{ pubkey: fromPubkey, isSigner: true, isWritable: true }],\n data: Buffer.from(memo, 'utf-8'),\n programId: new PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n }),\n )\n }\n\n if (priorityFee) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: priorityFee.amount().toNumber() / 10 ** 3,\n }),\n )\n }\n\n if (limit) {\n transaction.add(\n ComputeBudgetProgram.setComputeUnitLimit({\n units: limit,\n }),\n )\n }\n\n return { rawUnsignedTx: bs58.encode(transaction.serialize({ verifySignatures: false })) }\n }\n } catch {}\n\n throw Error('No provider able to prepare transaction')\n }\n}\n"],"names":["AssetType","ExplorerProvider","Network","BaseXChainClient","Connection","clusterApiUrl","createUmi","mplTokenMetadata","isAddress","getSeed","HDKey","Keypair","baseAmount","fetchDigitalAsset","publicKey","assetToBase","assetAmount","assetFromStringEx","TxType","PublicKey","TOKEN_PROGRAM_ID","fetchAllDigitalAsset","Transaction","eqAsset","SystemProgram","getContractAddressFromAsset","getAssociatedTokenAddressSync","getAccount","createTransferInstruction","TokenAccountNotFoundError","TokenInvalidAccountOwnerError","TransactionInstruction","ComputeBudgetProgram","FeeType","FeeOption","getOrCreateAssociatedTokenAccount","bs58","SendTransactionError"],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED