Dies ist mein Vertragskonstrukteur:
function MyContract ( address _owner , bytes32 [] _array ) { owner = _owner ;
require ( _array . length > 1 );
}
Die require(_array.length > 1)
dass der Vertrag fehlschlägt mit:
Error : VM Exception while processing transaction : invalid opcode at Object . InvalidResponse ( /usr/ local / lib / node_modules / truffle / build / cli . bundled . js : 37295 : 16 ) at / usr / local / lib / node_modules / truffle / build / cli . bundled . js : 224765 : 36 at / usr / local / lib / node_modules / truffle / build / cli . bundled . js : 66971 : 11 at / usr / local / lib / node_modules / truffle / build / cli . bundled . js : 208348 : 9 at XMLHttpRequest . request . onreadystatechange ( /usr/ local / lib / node_modules / truffle / build / cli . bundled . js : 209773 : 13 ) at XMLHttpRequestEventTarget . dispatchEvent ( /usr/ local / lib / node_modules / truffle / build / cli . bundled . js : 67130 : 18 ) at XMLHttpRequest . _setReadyState ( /usr/ local / lib / node_modules / truffle / build / cli . bundled . js : 67420 : 12 ) at XMLHttpRequest . _onHttpResponseEnd ( /usr/ local / lib / node_modules / truffle / build / cli . bundled . js : 67575 : 12 ) at IncomingMessage .< anonymous > ( /usr/ local / lib / node_modules / truffle / build / cli . bundled . js : 67535 : 24 ) at emitNone ( events . js : 110 : 20 )
Warum löst dies eine Ausnahme aus? Und wie löse ich das?
BEARBEITEN
contract ( 'MyContract' , function ( accounts ) {
const testParams = { _owner : accounts [ 0 ], _array : [ "first" , "second" , "third" ],
};
let testMyContract ; describe ( "New MyContract:" , async function () { before ( async function () { testMyContract = await MyContract . new (... Object . values ( testParams ));
}); it ( "sets the first account as the contract creator" , async function () {
let owner = await testMyContract . owner . call ();
assert . equal ( owner , accounts [ 0 ], "Owner does not match." );
}); it ( "sets the topic result names correctly" , async function () {
let resultName1 = await testMyContract . getResultName ( 0 );
assert . equal ( web3 . toUtf8 ( resultName1 ), testParams . _resultNames [ 0 ], "Result name 1 does not match." );
let resultName2 = await testMyContract . getResultName ( 1 );
assert . equal ( web3 . toUtf8 ( resultName2 ), testParams . _resultNames [ 1 ], "Result name 2 does not match." );
let resultName3 = await testMyContract . getResultName ( 2 );
assert . equal ( web3 . toUtf8 ( resultName3 ), testParams . _resultNames [ 2 ], "Result name 3 does not match." );
});
});
});
}
Migrationsskript
var SafeMath = artifacts . require ( "./SafeMath.sol" );
var MyContract = artifacts . require ( "./MyContract.sol" );
var MyContractCreator = artifacts . require ( "./MyContractCreator.sol" );
module . exports = function ( deployer ) { deployer . deploy ( SafeMath ); deployer . link ( SafeMath , MyContract ); deployer . deploy ( MyContract ); deployer . link ( MyContract , MyContractCreator ); deployer . deploy ( MyContractCreator );
};
Das Problem lag im Bereitstellungsskript. Es ist fehlgeschlagen, weil es keinen Parameter erhalten hat:
deployer . deploy ( MyContract );
Und wenn der Konstruktor aufgerufen wurde, schlägt er aufgrund der Anforderung fehl.
Stellen Sie diesen Vertrag entweder nicht bereit, übergeben Sie Dummy-Werte zum Testen (und entfernen Sie sie für die endgültige Bereitstellung).
deployer . deploy ( MyContract , "0x12341234" , [ "0x01" , "0x02" , 0x03 ]);
Eine andere Möglichkeit besteht darin, die Anforderung zu entfernen.
Ismael
Der Nomade
Ismael
Der Nomade
Ismael