Arka Paymaster
Sponsor A Transaction
Arka Paymaster
Sponsor A Transaction
The below example shows full working code of a transaction being sponsored.
You must change the values in primeSdk.estimate() with your own API key.
import { ethers } from 'ethers';
import { PrimeSdk } from '../src';
import { printOp } from '../src/sdk/common/OperationUtils';
import * as dotenv from 'dotenv';
import { sleep } from '../src/sdk/common';
dotenv.config();
const recipient = '0x80a1874E1046B1cc5deFdf4D3153838B72fF94Ac'; // recipient wallet address
const value = '0.01'; // transfer value
async function main() {
// initializating sdk...
const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, {
chainId: Number(process.env.CHAIN_ID),
})
console.log('address: ', primeSdk.state.walletAddress)
// get address of EtherspotWallet...
const address: string = await primeSdk.getCounterFactualAddress();
console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`);
// clear the transaction batch
await primeSdk.clearUserOpsFromBatch();
// add transactions to the batch
const transactionBatch = await primeSdk.addUserOpsToBatch({ to: recipient, value: ethers.utils.parseEther(value) });
console.log('transactions: ', transactionBatch);
// get balance of the account address
const balance = await primeSdk.getNativeBalance();
console.log('balances: ', balance);
// estimate transactions added to the batch and get the fee data for the UserOp
const op = await primeSdk.estimate({
paymasterDetails: {
url: "https://arka.etherspot.io?apiKey=arka_public_key&chainId=YOUR_CHAIN_ID",
context: { mode: "sponsor" },
},
}); console.log(`Estimate UserOp: ${await printOp(op)}`);
// sign the UserOp and sending to the bundler...
const uoHash = await primeSdk.send(op);
console.log(`UserOpHash: ${uoHash}`);
// get transaction hash...
console.log('Waiting for transaction...');
let userOpsReceipt = null;
const timeout = Date.now() + 60000; // 1 minute timeout
while ((userOpsReceipt == null) && (Date.now() < timeout)) {
await sleep(2);
userOpsReceipt = await primeSdk.getUserOpReceipt(uoHash);
}
console.log('\x1b[33m%s\x1b[0m', `Transaction Receipt: `, userOpsReceipt);
}
main()
.catch(console.error)
.finally(() => process.exit());