智能合约nonce交易查询加速及取消
前言
作为开发者,从部署合约到合约的调用,会由于gas 费用等原因,会产生莫名的各种原因。
例:Error processing transaction request: Transaction gas price supplied is too low. There is another transaction with same nonce in the queue. Try increasing the gas price or incrementing the nonce.
该如何是好呢,唯有把原理搞清楚,单点的知识点或零散的知识点,对于解决问题已经没有帮助了,唯有系统性的理解,方能斩妖除魔。
言归正传:当前的交易有多少,哪些交易处于未完结状态 1.1 返回指定地址的交易数量 curl -X POST --data "{"jsonrpc":"2.0","method":"eth_getTransactionCount", "params":["0x88463907954AF22b463D5f3d2c85843C6dFBd39E","latest"],"id":1}" https://kovan.infura.io/v3/1a63956db7574409bbb5eac5f4ae7e79 1.2 根据交易hash(txhash)查询交易 curl -X POST --data "{"jsonrpc":"2.0","method":"eth_getTransactionByHash", "params":["0x7419216815991d6c7aef8c948e6d136276cc47970cd4e1f824c83e4b989ac94b"],"id":1}" https://kovan.infura.io/v3/1a63956db7574409bbb5eac5f4ae7e79
2、加速当前的交易 1)、假设有笔交易 A:gas price = 5,nonce = 1 ,由于 gas price 太低,广播后,交易一直处于 pending 状态。 2)、创建交易 B,调整 gas price 为更合理的水平,例如 10、20 ,nonce = 1 ,再次发布交易。矿工就会选择 price 更高的交易 A 打包。 3)、此时在矿工的交易池端,B 交易被打包了,矿工会检查 A 交易,发现 nonce 已经存在了,认为 A 是不合理的交易,则会自动丢弃该交易
3、取消当前的交易 1)、基于加速交易的案例。 2)、创建交易 B,设置 value =0 ,收款方=发送方,设置更高的 gas price ,广播交易 3)、原来的交易被丢弃了,新交易会被矿工打包,不会丢失任何资金。但是你还是需要为 B 交易付出矿工费
4、元数据 语法: curl -X POST --data "{}" url {}:JSON RPC的json内容 url:测试链地址(查看上一章创建以太网测试地址) 3.1 客户端版本 curl -X POST --data "{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}" https://kovan.infura.io/v3/c71d6322d1b84d86a4749707609379dd 3.2 返回当前网络ID curl -X POST --data "{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}" url "1": Ethereum Mainnet "2": Morden Testnet (deprecated) "3": Ropsten Testnet "4": Rinkeby Testnet "42": Kovan Testnet 3.3 以太坊协议版本 curl -X POST --data "{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}" url 3.4 客户端是否在积极挖矿 curl -X POST --data "{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}" url 3.5 查询指定账户余额 curl -X POST --data "{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}" url