Ich habe zwei Verträge erstellt, um Speicher- und Validierungsregeln zu trennen.
ValidationService.sol
pragma solidity ^0.4.16;
import "./Storage.sol";
contract ValidationService {
Storage public store;
constructor(address add) public{
store=Storage(add);
}
function getMyNumber() public constant returns (uint) {
return store.getNumber();
}
}
Speicher.sol
pragma solidity ^0.4.16;
contract Storage {
uint public mynum = 5;
function getNumber() public constant returns (uint) {
return mynum;
}
}
Ich habe die getMyNumber-Methode aufgerufen, die die getNumber-Methode des Speichervertrags aufgerufen hat, und sie sollte 5 als Ausgabe zurückgeben.
validationservice.getMyNumber.call()
Der obige Code funktioniert gut in der Remix- und Truffle-Entwicklungsumgebung, aber er funktioniert nicht in einem privaten Blockchain-Netzwerk mit Geth.
Wenn ich die getNumber-Methode des Speichervertrags direkt von der Geth-Konsole aus aufrufe, funktioniert es einwandfrei.
Kann jemand bitte anleiten, wo mein Fehler ist
Ich habe das Problem gelöst. Ich habe "byzantiumBlock": 0 in der Datei genesis.json verwendet und die private Blockchain neu erstellt.
Weitere Einzelheiten finden Sie unter
Danke euch allen
Das funktioniert gut. Der einzige Fall, in dem es nicht funktioniert, ist, wenn Sie bei der Bereitstellung nicht die richtige Adresse übergeben validationService
.
Hoffe das hilft
Wenn Sie unten Fehler erhalten-
call to ValidationService.getMyNumber errored: VM error: revert.
revert The transaction has been reverted to the initial state.
Note: The constructor should be payable if you send value. Debug the transaction to get more information.
dann verwenden Sie die falsche Adresse. Es wäre großartig, wenn Sie weitere Informationen zu dem Fehler mitteilen könnten, mit dem Sie konfrontiert sind.
Gunavant