export const TEST_PrivateTransfer = async (
encryptionKey: string,
railgunWalletInfo: RailgunWalletInfo,
memoText: string | undefined, // optional memo text for the transfer
sendWithPublicWallet: boolean = true
) => {
console.log("TEST_PrivateTransfer");
const { wallet } = getProviderWallet();
// get gas estimate,
// generate proof,
// populate tx
const erc20AmountRecipients: RailgunERC20AmountRecipient[] = [
serializeERC20Transfer(
TEST_TOKEN, // WETH
1n,
railgunWalletInfo.railgunAddress
),
];
// dependent if !sendWithPublicWallet
const { broadcaster, feeTokenDetails } = await getFeeTokenDetails(
TEST_NETWORK,
TEST_TOKEN,
sendWithPublicWallet
);
const { gasEstimate, originalGasDetails, estimatedGasDetails } =
await erc20PrivateTransferGasEstimate(
encryptionKey,
TEST_NETWORK,
railgunWalletInfo.id,
erc20AmountRecipients,
sendWithPublicWallet,
feeTokenDetails,
memoText // optional memo text for the transfer
);
const transactionGasDetails = await getGasDetailsForTransaction(
TEST_NETWORK,
gasEstimate,
sendWithPublicWallet, // true if using public wallet
wallet
);
// only do this if !sendWithPublicWallet
const broadcasterDetails = await getBroadcasterDetails(
estimatedGasDetails,
broadcaster,
feeTokenDetails
);
console.log("Private ERC20 TX gasEstimate: ", gasEstimate);
const overallBatchMinGasPrice = calculateGasPrice(transactionGasDetails);
// generate proof
await erc20PrivateTransferGenerateProof(
encryptionKey,
TEST_NETWORK,
railgunWalletInfo.id,
erc20AmountRecipients,
overallBatchMinGasPrice /* overallBatchMinGasPrice */,
true /* showSenderAddressToRecipient */,
sendWithPublicWallet /*true if using public wallet*/,
broadcasterDetails?.broadcasterFeeERC20AmountRecipient /* pass the broadcaster fee recipient */,
memoText /* memoText */
);
// populate tx
const transaction = await erc20PrivateTransferPopulateTransaction(
TEST_NETWORK,
railgunWalletInfo.id,
erc20AmountRecipients,
overallBatchMinGasPrice,
transactionGasDetails,
sendWithPublicWallet,
broadcasterDetails?.broadcasterFeeERC20AmountRecipient /* pass the broadcaster fee recipient */,
true /* showSenderAddressToRecipient */,
memoText /* memoText (optional) */
);
console.log("ERC20 transaction: ", transaction);
The
};