首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >离线签署的合同抛出“超过挡油限值”。为什么我不能部署?

离线签署的合同抛出“超过挡油限值”。为什么我不能部署?
EN

Ethereum用户
提问于 2018-04-19 08:37:19
回答 1查看 277关注 0票数 0

我试图通过在脱机计算机上签署事务,然后将字节码传输到在线系统进行部署,从而将智能契约部署到Ethereum块链上。因此,我无法即时查询现时的汽油价格和汽油限额。

我得到一个'Error:返回的错误:超过块气体限制‘。

我认为部署合同的代价更多地取决于运行了多少函数和使用了多少资源,因此度量的大小可能过于粗糙,无法判断发生了什么,但我的是: 3984字节。

我目前的汽油限值为120万(120万),汽油价格为2千兆(20亿或20亿)。Note:我刚试过,用50万的气体限制,它失败了!WTF?

I不明白当 https://ethstats.net/ <#>consistently报告的块限制约为800万(800万)时,我是如何超过块限制的。

我正在使用多个solidity源文件,我将这些源文件读入sol_input_array中,然后以主文件为目标,该主文件使用parent_file_and_object字符串提取依赖程序的函数。

关于这个错误,互联网上似乎有更多的问题而不是答案,所以也许我们可以就一个详尽的清单进行协作,这样当我们遇到错误时,这个错误就不会那么令人费解了!

代码语言:javascript
复制
~$ geth version
Geth
Version: 1.8.2-stable
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.10
Operating System: darwin
GOPATH=
GOROOT=/usr/local/opt/go/libexec

项目版本数据:

代码语言:javascript
复制
Node:             v9.10.0
web3:             web3@1.0.0-beta.33
file-system (fs): mac:fs@0.0.1-security  linux: file-system@2.2.2
solc:             solc@0.4.21
ethereumjs-tx:    ethereumjs-tx@1.3.4 

这是我的合同签署功能:

代码语言:javascript
复制
function compile_and_sign_transaction_offline (p_key, address, gasPriceHex, parent_file_and_object){

    var privateKey = new Buffer(p_key, 'hex')

    const compiled_contract = solc.compile({sources: sol_input_array}, 1); 
    const bytecode = compiled_contract.contracts[parent_file_and_object].bytecode;
    const contractData = '0x' + bytecode;

    //I have currently have been testing gas prices of 1.2-3 Gwei
    const gasLimitHex = '0x124F80';     //1,200,000 gas

    const rawTx = { 
        nonce: 0x00,  
        gasPrice: gasPriceHex,
        gasLimit: gasLimitHex,
        data: contractData,
        from: address 
    };  

    const tx = new Tx(rawTx);
    tx.sign(privateKey);

    const serializedTx = tx.serialize();
    const signed_transaction = serializedTx.toString('hex');
    fs.writeFileSync("signed_tx", signed_transaction);
}
EN

回答 1

Ethereum用户

回答已采纳

发布于 2018-04-28 00:36:26

因此,这个函数工作得很好。问题出在通往封锁链的管道里。我不确定我的发件人函数、geth实例或我下载的区块链本身是否是问题所在。

但最疯狂的是,使用相同的代码(包括脱机签名和在线部署流程),我能够很好地部署到rinkeby,而部署到mainnet时返回了这个“超出块气体限制”的错误。

因此,孩子们,除了测试网测试之外,还要确保在发布前在do上测试!

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/46124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档