主页 > imtoken钱包如何解除授权 > 区块链合约交互web3

区块链合约交互web3

imtoken钱包如何解除授权 2023-08-09 05:12:44

遵循ERC20规则,

钱包中可以有多种代币:USDT、DFI、DFA

1、合约交互前波场usdt支付接口,需要判断purchasePool合约是否仍允许从账户(钱包内账户)中提取本合约(DFA)中的ERC20dfaContract金额

等待 this.contract.ERC20dfaContract.methods.allowance(this.address, this.addressMap.AcceleratePool).call();

ERC20dfaContract:这是dfa合约地址

ERC20dfaContract: 新窗口.web3.eth.Contract(ERC20Token, address.DFAToken)

purchasePool:这是矿池的合约地址

purchasePool: new window.web3.eth.Contract(DistributionInAbi, address.AcceleratePool),

ERC20Token:是ERC20的abi,address.DFAToken:是创建合约的token地址,

this.address 这是钱包的账户地址

this.addressMap.AcceleratePool:这是矿池的代币地址

注意:如果返回值为0,可以直接授权。 如果不为0,则不能授权。 如果一定要授权,需要在授权前将返回值设置为0。

2. 授权(ERC20dfaContract允许矿池(AcceleratePool)从中转出这么多钱)

this.contract.ERC20dfaContract.methods.approve(this.addressMap.AcceleratePool,"转多少钱")

.send({ from: this.address, gas: approveGas })

.then((result) => {}).catch(() => {});

3.充值(矿池里的合约方法,自己写的合约,按照合约接口操作)

this.contract.purchasePool.methods.purchase(input).send({from:this.address,gas:getPurchaseGas}).then((result)=>{}).catch(()=>{})

purchase:这是合约中的充值方式

4.赎回(池中的合约方法,自己写的合约,按照合约接口操作)

this.contract.purchasePool.methods.claim().send({ from: this.address, gas: claimGas }).then((result) => {}).catch(() => {});

注意:充值和赎回不是查询,而是需要消耗gas波场usdt支付接口,所以每次转账和赎回都需要查询消耗的gas(上面的getPurchaseGas)

async getPurchaseGas(){return await this.contract.purchasePool.methods.purchase(this.input).estimateGas({from:this.address})},

*这是充电气体消耗的例子