智能合约开发The contract code couldn't be stored

问题描述

当合约编写完后,执行truffle compile编译没有报错,但truffle migrate进行合约部署时提示:”he contract code couldn’t be stored, please check your gas amount.”;

具体的错误信息如下图所示:

刚开始以为是Ganache的GAS PRICE,GAS LIMIT设置有问题,调大后发觉问题仍然存在。
注:每笔交易都被要求包括一个gas limit(有的时候被称为startGas)和一个交易愿为单位gas支付的费用。矿工可以有选择的打包这些交易并收取这些费用。在现实中,今天所有的交易最终都是由矿工选择的,但是用户所选择支付的交易费用多少会影响到该交易被打包所需等待的时长。如果该交易由于计算,包括原始消息和一些触发的其他消息,需要使用的gas数量小于或等于所设置的gas limit,那么这个交易会被处理。如果gas总消耗超过gas limit,那么所有的操作都会被复原,但交易是成立的并且交易费任会被矿工收取。区块链会显示这笔交易完成尝试,但因为没有提供足够的gas导致所有的合约命令都被复原。

一个交易的交易费由两个因素组成:

  • gasUsed:该交易消耗的总gas数量

  • gasPrice:该交易中单位gas的价格(用以太币计算)

再尝试调整truffle.js把gas设置为一个较高的值:

1
2
3
4
5
6
7
8
9
10
module.exports = {
networks: {
development: {
host: "localhost",
port: 7545,
gas: 800000000, //愿意为本次部署最多支付多少gas
network_id: "*"
}
}
};

问题依旧存在!!!

后面进行代码排查,发现只需要把部署合约的is ERC721继承关系去掉,truffle migrate的时候就可以成功。最后发现,原来是继承关系中,必需实现父contract中的接口方法,否则部署的时候就会报错!Mark!为什么编译的时候不报错呢:)

在逐一实现ERC721的接口方法后,再进行编译部署,此时可成功部署:

Thank you for your support!