import { playgroundHelper } from "../../helpers/helpers"; import { stablecoinVaultConstants } from "../constants"; import { actionCreators, createTransaction } from "@near-js/transactions"; import { baseDecode } from "@near-js/utils"; import { Account } from "@near-js/accounts"; // Transfer parameters const BASE_ASSET_CONTRACT = stablecoinVaultConstants.ASSET_ACCOUNT_ID; // Replace with actual MT contract const TOKEN_ID = stablecoinVaultConstants.BASE_TOKEN_ID; const TRANSFER_AMOUNT = "799990000"; // 1 USDC with 6 decimals console.log("Initiating multi-token transfer via vault transaction..."); // Get current block hash and vault account info const block = await playgroundHelper.provider.block({ finality: "near-final", }); const derivedAccount = new Account( playgroundHelper.vaultContractId, playgroundHelper.provider ); const allKeys = await derivedAccount.getAccessKeyList(); const matchingKey = allKeys.keys.find( (e) => e.public_key === playgroundHelper.vaultPublicKey.toString() ); if (!matchingKey) { throw new Error("Key not found"); } // Create NEAR transaction for mt_transfer const transaction = createTransaction( playgroundHelper.vaultContractId, playgroundHelper.vaultPublicKey, BASE_ASSET_CONTRACT, // receiver_id for mt_transfer BigInt(matchingKey.access_key.nonce) + 1n, [ actionCreators.functionCall( "mt_transfer", { receiver_id: stablecoinVaultConstants.NEAR_CHAINSIG_DERIVED_ACCOUNT, token_id: TOKEN_ID, amount: TRANSFER_AMOUNT, memo: "Transfer to chain signature derived account", }, 30000000000000n, // 30 TGas 1n // 1 yoctoNEAR ), ], baseDecode(block.header.hash) ); // Encode transaction as base64 const encodedTx = Buffer.from(transaction.encode()).toString("base64"); // Execute transfer transaction using the vault's propose_execution const transferResult = await playgroundHelper.account.callFunction({ contractId: playgroundHelper.vaultContractId, methodName: "propose_execution", args: { policy_id: "near_native_mt_transfer", // Policy for mt_transfer operations function_args: encodedTx, deadline_hours: 1, }, gas: 50000000000000n, // 50 TGas }); console.log("Multi-token transfer transaction proposed:", transferResult); console.log( `Transferring ${TRANSFER_AMOUNT} ${TOKEN_ID} to ${stablecoinVaultConstants.NEAR_CHAINSIG_DERIVED_ACCOUNT}` );