在 send() 调用内的“options”对象中不包括“gas”或“gasPrice”属性

Posted

技术标签:

【中文标题】在 send() 调用内的“options”对象中不包括“gas”或“gasPrice”属性【英文标题】:Not including 'gas' or 'gasPrice' attributes in the 'options' object inside of a send() call 【发布时间】:2021-09-14 20:25:42 【问题描述】:

这是一个 web3 问题:有谁知道当您未指定 gasgasPrice 时,智能合约方法的 send() 函数调用默认是什么?它会自动分配足够的gas并计算当前的平均gasPrice吗?这些属性是否总是可选的,或者在某些情况下必须包含其中任何一个?

【问题讨论】:

【参考方案1】:

从documentation 来看,gasgas 似乎总是可选的。

不幸的是,文档没有说明在未提供时默认设置的内容,但在代码中出现了快速峰值(希望这是正确的代码路径),它似乎在内部调用 getGasPrice 以获取 gas 价格和然后默认 gasPrice 为那个。


    // Send the actual transaction
    if (isSendTx && _.isObject(payload.params[0]) && typeof payload.params[0].gasPrice === 'undefined') 

        var getGasPrice = (new Method(
            name: 'getGasPrice',
            call: 'eth_gasPrice',
            params: 0
        )).createFunction(method.requestManager);

        getGasPrice(function (err, gasPrice) 

            if (gasPrice) 
                payload.params[0].gasPrice = gasPrice;
            

            if (isSendTx) 
                setTimeout(() => 
                    defer.eventEmitter.emit('sending', payload);
                , 0);
            

            sendRequest(payload, method);
        );

GitHub Source

【讨论】:

以上是关于在 send() 调用内的“options”对象中不包括“gas”或“gasPrice”属性的主要内容,如果未能解决你的问题,请参考以下文章

python中ruby obj.send的等价物

XMLHttpRequest之status

使用 dbus-send 的 DBus 自省对象树

Laravel - 根据键值删除数组内的对象 - array_filter

如何根据对象属性字符串过滤“ngFor”循环内的项目

第3章 第2节 Ajax