在一笔交易中执行多个动作序列时,如何降低以太坊的GasCost?

问题描述

我正在尝试在单个事务中执行多个动作序列。但是,我想我最终会使用大量的GasCost,并且试图找到一种解决方案来优化代码以减少Gas Fees。这是我的设置。

我正在使用Web3的web3.eth.abi.encodefunctionCall将所有必需的动作编码为数组,然后将它们发送到我的智能合约代码,该代码for循环中执行每个动作。

JS文件

let abi1 = web3.eth.abi.encodefunctionCall( { "name": "deposit","type": "function","inputs": [ { "name": "_amount","type": "uint256" } ] },[web3.utils.toWei((1000).toString(),'Ether')] );

let abi2 = web3.eth.abi.encodefunctionCall( {"constant":false,"inputs":[],"name":"withdrawAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},[] );

以上内容存储在JS文件中的数组中。

addrs = [address1,address2];
actions = [abi1,abi2];

我正在将这些数组传递给我的智能合约,该合约会像-

function execute(address[] calldata _addrs,bytes[] calldata _actions)
{
     for(uint i = 0; i < _addrs.length; i++)
        address(_addrs[i]).call(_actions[i]);
}

我尝试使用以下代码获取Gas估算值:

const [gasPrice,gasCost] = await Promise.all([
   web3.eth.getGasPrice(),tx.estimateGas({from: address}),]);

console.log("gasPrice = ",gasPrice);
console.log("gasCost = ",gasCost);

我得到的估算值为-gasPrice: 66 GweigasCost: 1443172。但是,当我使用70 Gwei执行事务时,实际使用的 GasCost 3,314,500。我认为这太高了,因为,我看到类似的交易使用的GasCost较少,但是Gwei较高。这是否意味着我必须使用较高的Gwei来减少总的汽油费?

我想知道我可以采用的最佳编码方法,以优化智能合约的执行并减少汽油费。我确信还有许多其他方法可以在1个事务中执行这些动作序列。有人可以指出我正确的方向来实现这一目标吗?

谢谢。 ish

解决方法

我应该看到您完整的智能合约,以了解DApp的逻辑。但是,您可以在合同中采取以下一些常规技巧来降低天然气成本:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...