The following code example is provided to help you understand the business process. For commercial use, you must handle parameter validation and exception handling on your own.
This example is tested on the Polygon-Amoy chain. Information used in the example can be retrieved from the Source directory. All ERC20 assets in the example have been pre-approved (authorized) to the contract amoy_contract_approveTrade. For any amounts involved, precision should be converted using toWei(amount, "decimal").
Code Example
javascriptCopy code// Import web3js libraryimport Web3 from'web3';import ApproveTradeABI from'../abi/ApproveTrade.json';// This example is tested on the Polygon-Amoy chainconstamoy_chainId=80002;constamoy_chainName="AMOY";constamoy_chainRpcUrl="https://polygon-amoy.infura.io/v3/4ba314367838400fb88f2a1d0e14d42d";constamoy_contract_approveTrade="0xF1831ebb3f92A8607E644A1E54Fde4b09F6FE5dE";constamoy_account="0xA3932E6Dbf96983Ffdf43974c0BF7edE9fed76DF";// Initialize web3 instance// WalletProvider or HttpProviderconstweb3=newWeb3("** Wallet **"); // window.ethereumconstContract=newweb3.eth.Contract(ApproveTradeABI, amoy_contract_approveTrade);// 1. Example parameters for loan cancellation// These parameters come from the market listing API, and are identical to those submitted during order creation.constmaker="0xA3932E6Dbf96983Ffdf43974c0BF7edE9fed76DF";consttaker="0x0000000000000000000000000000000000000000"; // Open to all buyers/lendersconstassets= [ {collection:"0x9A3fad316eB9cC7db65aB6f89672796574CD1B76", assetClass:"0x0000000000000000000000000000000000000721", amountOrID:"28308257", name: "Bored Ape Yacht Club", symbol:"BAYC", decimal: 0},
{collection:"0x9A3fad316eB9cC7db65aB6f89672796574CD1B76", assetClass:"0x0000000000000000000000000000000000000721", amountOrID:"28308487", name: "Bored Ape Yacht Club", symbol:"BAYC", decimal: 0},
{collection:"0x98700d8fF27Af5F16FdA3bE3bD30aa4585234DCa", assetClass:"0x0000000000000000000000000000000000000020", amountOrID: toWei(1,9), name: "WBTC", symbol:"Wrapped BTC", decimal: 9},
{collection:"0xc94BC02ecFf5f14b73fe1A3137bb587f5Fa62F5d", assetClass:"0x0000000000000000000000000000000000000020", amountOrID: toWei(1,6), name: "USDT", symbol:"Tether USD", decimal: 6}
];constcurrency= [ {collection:"0x0000000000000000000000000000000000000001", assetClass:"0x0000000000000000000000000000000000000000", amountOrID: toWei(1,18), name: "MATIC", symbol:"MATIC", decimal: 18}
];constdeadline="1728955149"; // End of fundraising time (in seconds)constduration="1036800"; // Loan duration (in seconds)constinterestPerSecond="3488077118214104000000000000"; // Interest per secondconstendTime="0"; // No end time specified for cancellationconst sig = "0x65ca1ca8dc706025eb125e40e059e1b768abf909956698237d3ed9eafb276ec03ddb9ef68364652c362f245fce464a286a0fc692470d09de741404621236a4db1b"; // Signature from order creation
// 2. Initiate the cancel order operationconsthandleCancel=Contract.methods.cancelOrder([ maker, taker,assets.map(item => { return [item.collection,item.assetClass,item.amountOrID] }), currency[0].collection, currency[0].amountOrID, deadline, duration, interestPerSecond, endTime, sig]).send({ from: amoy_account});handleCancel.then(receipt => {console.log(receipt);}).catch(error => {console.log(error);});
Key Notes:
Order Parameters: The order parameters for canceling the loan are the same as those used during the initial order creation. They can be retrieved from the market listing API.
Nonce: Ensure that the nonce is retrieved correctly if needed, as it's not required in this specific cancellation.
ERC20/721 Assets: The assets being canceled must be correctly structured, including precision conversion using toWei(amount, "decimal").
This example provides a clear starting point for implementing loan order cancellations on the Polygon-Amoy chain. Make sure to adjust the parameters as needed for your specific use case.