UNPKG

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.

74 lines (63 loc) 2.24 kB
import { type Signer, parseUnits } from "ethers"; import { getAxieContract, getBatchTransferContract } from "./contracts"; import { approveBatchTransfer } from "./marketplace/approve"; export async function transferAxie( signer: Signer, addressTo: string, axieId: string | number, ) { const addressFrom = await signer.getAddress(); console.log( `Transferring axie ${axieId} from ${addressFrom} to ${addressTo}`, ); const writeAxieContract = getAxieContract(signer); const formattedAxieId = typeof axieId === "string" ? axieId : axieId.toString(); const tx = await writeAxieContract[ "safeTransferFrom(address,address,uint256)" ]( addressFrom, addressTo.replace("ronin:", "0x").toLowerCase(), formattedAxieId, { gasPrice: parseUnits("20", "gwei") }, ); const receipt = await tx.wait(); return receipt; } export async function batchTransferAxies( signer: Signer, addressTo: string, axieIds: Array<string | number>, ) { // check if the batch contract is approved to transfer the axies from addressFrom const writeBatchTransferContract = getBatchTransferContract(signer); const writeAxieContract = getAxieContract(signer); const batchTransferAddress = await writeBatchTransferContract.getAddress(); const axieContractAddress = await writeAxieContract.getAddress(); await approveBatchTransfer(signer, batchTransferAddress); const addressFrom = await signer.getAddress(); console.log( `Transferring ${axieIds.length} axies from ${addressFrom} to ${addressTo}`, ); // convert axieIds to an array of strings const axies: string[] = axieIds.map((axieId) => { return typeof axieId === "string" ? axieId : axieId.toString(); }); if (axies.length === 0) { throw new Error("You must provide at least one axie ID"); } // batch Transfer, call the function this way since it's overloaded const tx = await writeBatchTransferContract[ "safeBatchTransfer(address,uint256[],address)" ]( axieContractAddress, axies, addressTo.replace("ronin:", "0x").toLowerCase(), { gasPrice: parseUnits("20", "gwei"), }, ); // wait for tx to be mined and get receipt const receipt = await tx.wait(); return receipt; }