> For the complete documentation index, see [llms.txt](https://docs-bridgers-en.bridgers.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-bridgers-en.bridgers.xyz/bridgers-api-endpoints/contract-approval.md).

# Contract approval

## 1. EVM Chain

{% hint style="info" %}
This example uses the BSC chain USDT to apprive the contract 0xb685760ebd368a891f27ae547391f4e2a289895b
{% endhint %}

### abi File

{% file src="/files/j1jyiIq1s5lfckPRFW7d" %}

### Determine whether to approve and if gas is sufficient

```
// isApproved example
// USDT(BSC)  0x55d398326f99059ff775485246999027b3197955
 import { ethers } from "ethers";
 import abi from './abi'  // For details on the abi file, see the BridgersAbi.json file above
 import BigNumber from 'bignumber.js'

 const walletAddress = '0x6F14653a91AC36935bdB15db6ccC66dC57593653' // wallet address
 const contractAddress = '0x733dab9e78b67e1d4ccd1c2066f006d5eddf25be' //contract address
 const tokenContract = '0x55d398326f99059ff775485246999027b3197955' //token contract
 const provider = new ethers.providers.Web3Provider(window.ethereum, "any")
 const contract = new ethers.Contract(tokenContract, abi, provider)
 const fromNumber = 100 // 100 as a comparison quantity
 contract
  .allowance(walletAddress, contractAddress)
  .then((allowAmt) => {
    const num = new BigNumber(
     ethers.utils.formatUnits(allowAmt, 18),
    )
    const fromTokenNum = new BigNumber(fromNumber)
    console.log(num.toString())
    console.log(fromTokenNum.toString())
    if (num.gt(fromTokenNum)) {
        console.log('don`t need Approved')
    } else {
        console.log('need Approved')
    }
  })
  .catch( err => {
    //console.log(err)
  })
```

### approval code example

```
// Approved example
// USDT(BSC)  0x55d398326f99059ff775485246999027b3197955
 import { ethers } from "ethers";
 import abi from './abi'
 import BigNumber from 'bignumber.js'
 
 const walletAddress = '0x6F14653a91AC36935bdB15db6ccC66dC57593653' // wallet address
 const contractAddress = '0x733dab9e78b67e1d4ccd1c2066f006d5eddf25be' //contract address
 const tokenContract = '0x55d398326f99059ff775485246999027b3197955' //token contract
 const provider = new ethers.providers.Web3Provider(window.ethereum, "any")
 const signer = provider.getSigner()
 const contract = new ethers.Contract(tokenContract, abi, provider)
 contract.estimateGas
   .approve(contractAddress, ethers.constants.MaxUint256, {
     from: walletAddress,
   }).then(res => {
     contract.connect(signer)
       .approve(contractAddress, ethers.constants.MaxUint256, {
         from: walletAddress,
       })
       .then((res) => {
          console.log('user Approved ')
        })
       .catch((error) => {
          console.log('user cancle Approved ')
       })
  })
 let filter = contract.filters.Approval(
   walletAddress,
   contractAddress,
   null,
 )
 contract.on(filter, (from, to, amount, event) => {
   console.log('Approve success')
 })
```

## 2、TRON Chain

{% hint style="info" %}
This example uses the TRON chain USDT to apprive the contract TEorZTZ5MHx8SrvsYs1R3Ds5WvY1pVoMSA
{% endhint %}

### Determine whether to approve and if gas is sufficient

```
// isApproved example
// USDT(TRON)  TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t
 import { ethers } from "ethers";
 import BigNumber from 'bignumber.js'
 
const walletAddress = 'TV6MuMXfmLbBqPZvBHdwFsDnQeVfnmiuSi' // wallet address
const contractAddress = 'TEorZTZ5MHx8SrvsYs1R3Ds5WvY1pVoMSA' //contract address
const tokenContract = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t' //token contract
const fromNumber = 100 // 100 as a comparison quantity

let tronWeb = window.tronWeb
const contract = await tronWeb.contract().at(tokenContract );
const allowance = contract.allowance(walletAddress , contractAddress)
const allowAmt = await allowance.call()
const num = new BigNumber(
  ethers.utils.formatUnits(allowAmt, 6 ),
)
const fromTokenNum = new BigNumber(fromNumber)
console.log(num.toString())
console.log(fromTokenNum.toString())
if (num.gt(fromTokenNum)) {
   console.log('don`t need Approved')
} else {
  console.log('need Approved')
}
```

### approval code example

```
// Approved example
// USDT(TRON)  TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t
 import { ethers } from "ethers";
 import BigNumber from 'bignumber.js'
 
 const walletAddress = 'TV6MuMXfmLbBqPZvBHdwFsDnQeVfnmiuSi' // wallet address
 const contractAddress = 'TEorZTZ5MHx8SrvsYs1R3Ds5WvY1pVoMSA' //contract address
 const tokenContract = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t' //token contract
const contract = await tronWeb.contract().at(tokenContract);
contract.approve(contractAddress , ethers.constants.MaxUint256).send().then( (hash)=> {
    console.log('user Approved',hash)
    tronWeb.trx.getTransaction(hash).then((result) => {
      console.log('Approve success',result)
    })
}).catch(err => {
  console.log('user cancle Approved')
 })
```

### send coins code example

```
  const tronWeb = window.tronWeb
    const transaction = await tronWeb.transactionBuilder.triggerSmartContract(
      response.data.txData.tronRouterAddrees,  // From [Obtain callData] SWAP interface in the module to obtain the tronRouterAddrees field
      response.data.txData.functionName,  // From [Obtain callData] SWAP interface in the module to obtain the functionName field
      response.data.txData.options,// From [Obtain callData] SWAP interface in the module to obtain the options field
      response.data.txData.parameter,// From [Obtain callData] SWAP interface in the module to obtain the parameter field
      response.data.txData.fromAddress// From [Obtain callData] SWAP interface in the module to obtain the fromAddress field
    )
    let signedTx
    try{
      signedTx = await tronWeb.trx.sign(transaction.transaction)
    }catch{
      console.log("Signing failed")
    }
    tronWeb.trx.sendRawTransaction(signedTx)
    .then((broastTx) => {
      console.log(broastTx)
    }).catch( error => {
       console.log("Failed to send coins")
    })
```
