Solidity

僅在專用網路上出現 OpenZeppelin MintableToken 錯誤

  • August 30, 2018

我通過 geth 命令啟動了一個新的專用網路。

geth --networkid "198"  --nodiscover --datadir "~/test-geth" --rpc --rpcaddr "0.0.0.0" --rpcport "8545" --rpccorsdomain "*" --rpcvhosts "*" --rpcapi web3,eth,personal,miner,net,txpool,debug --unlock 0,1 --password /home/user/.gethpasswd --mine --minerthreads 1 --targetgaslimit 6721975 --gasprice "100000"

並將我的令牌部署到這個網路。“松露編譯”和“松露遷移”成功。但是 sendTransaction 每次都失敗……

我用松露調試器進行了調試。這是“sendTransaction”的結果。

MintedCrowdsale.sol:

24:   {
25:     // Potentially dangerous assumption about the type of the token.
26:     require(MintableToken(address(token)).mint(_beneficiary, _tokenAmount));
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

debug(development:0xb76ce508...)> i

Transaction halted with a RUNTIME ERROR.

This is likely due to an intentional halting expression, like assert(), require() or revert(). It can also be due to out-of-gas exceptions. Please inspect your transaction parameters and contract code to determine the meaning of this error.

我認為這個錯誤可能是由於“transferOwnership”失敗而發生的,但是松露調試器說“transferOwnership”成功了。

而且,奇怪的是,使用 ganache-cli 或 Ropsten 測試網時沒有出現錯誤……

我只在 geth 命令建立的專用網路上收到錯誤。

請告訴我是否有人對這個問題有建議。

現在我有一個解決方案。

我的創世區塊設置錯誤。

這個設置對我來說很好。

{
 "config": {
   "chainId": 198,
   "HomesteadBlock":      0,
   "DAOForkBlock": 0,
   "DAOForkSupport":      true,
   "EIP150Block":         0,
   "EIP155Block":         0,
   "EIP158Block":         0,
   "ByzantiumBlock":      0
 },
 "nonce": "0x0000000000000042",
 "timestamp": "0x0",
 "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
 "extraData": "",
 "gasLimit": "0x8000000",
 "difficulty": "0x4000",
 "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
 "coinbase": "0x3333333333333333333333333333333333333333",
 "alloc": {}
}

而且,在 migrations/2_deploy_contracts.js

module.exports = function(deployer, network, accounts) {


   const wallet = accounts[0];

導致gaslimit錯誤。

module.exports = function(deployer, network, accounts) {


   const wallet = "<your address>";

沒關係。

引用自:https://ethereum.stackexchange.com/questions/57646