import { Keypair, ComputeBudgetProgram } from "@solana/web3.js";
import {
createRpc,
bn,
buildAndSignTx,
sendAndConfirmTx,
dedupeSigner,
} from "@lightprotocol/stateless.js";
import {
createMint,
mintTo,
createLoadAtaInstructions,
getAssociatedTokenAddressInterface,
} from "@lightprotocol/compressed-token";
async function main() {
const rpc = createRpc();
const payer = Keypair.generate();
await rpc.requestAirdrop(payer.publicKey, 10e9);
const owner = Keypair.generate();
await rpc.requestAirdrop(owner.publicKey, 1e9);
const mintAuthority = Keypair.generate();
const mintKeypair = Keypair.generate();
const { mint } = await createMint(
rpc,
payer,
mintAuthority.publicKey,
9,
mintKeypair
);
await mintTo(rpc, payer, mint, owner.publicKey, mintAuthority, bn(1000));
// Get c-token ATA address
const ctokenAta = getAssociatedTokenAddressInterface(mint, owner.publicKey);
// Create load instructions
const ixs = await createLoadAtaInstructions(
rpc,
ctokenAta,
owner.publicKey,
mint,
payer.publicKey
);
if (ixs.length === 0) {
console.log("Nothing to load");
return;
}
// Build, sign, and send transaction
const { blockhash } = await rpc.getLatestBlockhash();
const additionalSigners = dedupeSigner(payer, [owner]);
const tx = buildAndSignTx(
[ComputeBudgetProgram.setComputeUnitLimit({ units: 500_000 }), ...ixs],
payer,
blockhash,
additionalSigners
);
const signature = await sendAndConfirmTx(rpc, tx);
console.log("Loaded tokens to hot balance");
console.log("Transaction:", signature);
}
main().catch(console.error);