# Loan - Cancel Order

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**

```javascript
javascriptCopy code// Import web3js library
import Web3 from 'web3';
import ApproveTradeABI from '../abi/ApproveTrade.json';

// This example is tested on the Polygon-Amoy chain
const amoy_chainId = 80002;
const amoy_chainName = "AMOY";
const amoy_chainRpcUrl = "https://polygon-amoy.infura.io/v3/4ba314367838400fb88f2a1d0e14d42d";
const amoy_contract_approveTrade = "0xF1831ebb3f92A8607E644A1E54Fde4b09F6FE5dE";
const amoy_account = "0xA3932E6Dbf96983Ffdf43974c0BF7edE9fed76DF";

// Initialize web3 instance
// WalletProvider or HttpProvider
const web3 = new Web3("** Wallet **"); // window.ethereum
const Contract = new web3.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.

const maker = "0xA3932E6Dbf96983Ffdf43974c0BF7edE9fed76DF";
const taker = "0x0000000000000000000000000000000000000000"; // Open to all buyers/lenders
const assets = [
    {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}
];
const currency = [
    {collection:"0x0000000000000000000000000000000000000001", assetClass:"0x0000000000000000000000000000000000000000", amountOrID: toWei(1,18), name: "MATIC", symbol:"MATIC", decimal: 18}
];
const deadline = "1728955149"; // End of fundraising time (in seconds)
const duration = "1036800"; // Loan duration (in seconds)
const interestPerSecond = "3488077118214104000000000000"; // Interest per second
const endTime = "0"; // No end time specified for cancellation
const sig = "0x65ca1ca8dc706025eb125e40e059e1b768abf909956698237d3ed9eafb276ec03ddb9ef68364652c362f245fce464a286a0fc692470d09de741404621236a4db1b"; // Signature from order creation

// 2. Initiate the cancel order operation
const handleCancel = 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**:

1. **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.
2. **Nonce**: Ensure that the nonce is retrieved correctly if needed, as it's not required in this specific cancellation.
3. **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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.paddlefi.com/api-documentation/tutorials/loan-cancel-order.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
