Back

blockchain - web3 - contract.method.send 之后的event的调用顺序:sent > sending > receipt

发布时间: 2022-07-09 02:28:00

官方文档:https://web3js.readthedocs.io/en/v1.7.3/web3-eth-contract.html#methods-mymethod-send

Promievent:  https://github.com/naddison36/promievent

例如,

下面的代码:

var Contract = require('web3-eth-contract')

run()

async function run(){

  Contract.setProvider('ws://localhost:8545')

  let contractAbi = [{"inputs":[],"name":"getNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"store","outputs":[],"stateMutability":"nonpayable","type":"function"}]
  let contractAddress = '0x5FbDB2315678afecb367f032d93F642f64180aa3'
  var contract = new Contract(contractAbi, contractAddress)
  let from = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'
  await contract.methods.getNumber().send({from: from})
    .then(console.log)

await contract.methods.store(333).send({from: from}) .once('sent', (payload) => { console.info("-- in sent..., payload: ", payload) }) .once('sending', (payload) => { console.info("-- in sending..., payload: ", payload) }) .once("transactionHash" , (txHash) => { console.log(`Mining transaction ... network: ${network}, tx: ${txHash}`) // console.log(`https://${network}.etherscan.io/tx/${txhash}`) }) .once('receipt', (receipt) => { console.info("-- in receipt...", receipt) console.log('====== total: ') console.log(receipt) console.log('====== events.Minted: ', receipt.events.Minted) // Success, you've minted the NFT. The transaction is now on chain! console.log( `Success: The NFT has been minted and mined in block ${receipt.blockNumber}`) callback() }) .on('confirmation', (confNumber, receipt, lastBlockHash) => { console.info("-- in confirm...", receipt) }) .on('error', (error) => { console.error(`An error happened: ${error}`) callback() }) } process.exit() // 如果是node的话 }

调用之后,他们的顺序是:

sent

sending

receipt

contract.method.<my_method>.send 之后,获得对象是:PromiEvents

供我们参考的东东(不是官方,但是模仿官方):https://github.com/naddison36/promievent 

once 与 on 的区别:

once : 只运行一次的 callback

on: 运行好多次

Back