axie-tools
Version:
TypeScript library and CLI tool for interacting with Axie Infinity marketplace and NFTs on Ronin network. Features marketplace operations (buy/sell/delist), batch transfers, and wallet information.
87 lines (80 loc) • 2.77 kB
text/typescript
import { parseUnits, Signer } from "ethers";
import { MARKETPLACE_GATEWAY_V_2 } from "@roninbuilders/contracts";
import { getAxieContract, getWETHContract } from "../contracts";
// check and approve the axie contract to transfer axies from address to the marketplace contract
export async function approveMarketplaceContract(signer: Signer) {
const axieContract = getAxieContract(signer);
const address = await signer.getAddress();
let isApproved = await axieContract.isApprovedForAll(
address,
MARKETPLACE_GATEWAY_V_2.address,
);
if (!isApproved) {
const axieContract = getAxieContract(signer);
console.log(
`Approving Marketplace (${MARKETPLACE_GATEWAY_V_2.address}) to handle Axies for ${address}`,
);
const tx = await axieContract.setApprovalForAll(
MARKETPLACE_GATEWAY_V_2.address,
true,
{
gasPrice: parseUnits("20", "gwei"),
},
);
const receipt = await tx.wait();
console.log("✅ Marketplace approved! Transaction hash:", receipt.hash);
console.log(
"🔗 View on Ronin Explorer:",
`https://explorer.roninchain.com/tx/${receipt.hash}`,
);
}
return isApproved;
}
export async function approveWETH(signer: Signer) {
const address = await signer.getAddress();
const wethContract = getWETHContract(signer);
const currentAllowance = await wethContract.allowance(
address,
MARKETPLACE_GATEWAY_V_2.address,
);
if (currentAllowance === 0n) {
const amountToApprove =
"115792089237316195423570985008687907853269984665640564039457584007913129639935";
console.log(
`Approving Marketplace (${MARKETPLACE_GATEWAY_V_2.address}) to spend ${amountToApprove} WETH for the address ${address}`,
);
const txApproveWETH = await wethContract.approve(
MARKETPLACE_GATEWAY_V_2.address,
amountToApprove,
{
gasPrice: parseUnits("20", "gwei"),
},
);
const txApproveReceipt = await txApproveWETH.wait();
console.log("✅ WETH approved! Transaction hash:", txApproveReceipt.hash);
}
return currentAllowance;
}
export async function approveBatchTransfer(
signer: Signer,
batchTransferAddress: string,
): Promise<void> {
const address = await signer.getAddress();
const axieContract = getAxieContract(signer);
const isApproved = await axieContract.isApprovedForAll(
address,
batchTransferAddress,
);
if (!isApproved) {
console.info("🛠️ Approving batch transfer contract...");
const approveTx = await axieContract.setApprovalForAll(
batchTransferAddress,
true,
{
gasPrice: parseUnits("20", "gwei"),
},
);
await approveTx.wait();
console.log("✅ Batch transfer contract approved, hash:", approveTx.hash);
}
}