使用 Web3 与智能合约交互
1. 燃气(Gas)和燃气价格
以太坊区块链的运行并非免费,需要有人来维护,这里指的是运行以太坊节点以确认交易的矿工。他们会从以太坊软件本身获得奖励(ETH),此外,还会得到交易费用,即燃气和燃气价格。
设置交易费用的目的是防止用户发送垃圾交易。如果交易免费,可能会有人创建两个账户,在它们之间来回转账。而且,这也让愿意支付更多费用的用户的交易获得更高优先级。如果有两笔相似的交易,第一笔交易附带更多燃气,那么它在矿工的待办列表中优先级更高。燃气较少的交易最终也会被确认,只是需要多等待一会儿。
燃气是你愿意为本次交易分配的燃气量。例如,在之前的脚本中,你可能分配 20,000 燃气来创建一个转账交易。对于更复杂的交易,如执行智能合约中的复杂方法,可能需要更多燃气。如果分配的燃气不足,交易将被拒绝,并且你会损失已使用的燃气。但如果分配的燃气过多,交易成功后,剩余的燃气会返还给你。不过,如果智能合约中的方法调用失败(如断言 1 == 2
),你将损失直到断言行所使用的所有燃气(剩余燃气会退还),所以需要找到一个平衡点。
燃气价格是燃气的单价,你需要用持有的 ETH 来购买燃气。可以在历史交易中查看燃气价格,在以太坊主网中,可以在 https://www.ethgasstation.info/ 查看。
要估算交易所需的燃气,需要了解 Solidity 或 Vyper 编程语言的细节。不过幸运的是,web3 库有估算燃气使用量的方法。创建一个名为 est