Ich habe einen Smart Contract erstellt (ERC20-Implantation). Der Vertrag läuft super mit testrpc, ropsten und rinkeby, aber ich möchte ihn in einem privaten Netzwerk verwenden. Wenn der Vertrag im privaten Netzwerk bereitgestellt wird, erhalten einige der Funktionen die Warnung „Gasanforderung der Funktion hoch: unendlich im Remix“, und wenn ich versuche, mit dem Vertrag zu kommunizieren, schlägt die Transaktion immer fehl. Gibt es einen Grund, warum ein Vertrag in einem Netzwerk perfekt funktioniert, aber nicht in dem anderen? Ich habe in meinem Genesis-Block ein sehr hohes "gasLimit" eingestellt
Genesis-Datei des privaten Netzwerks:
{
"config": {
"chainId": 51190,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x400",
"extraData" : "",
"gasLimit" : "0xffffd8",
"nonce" : "0x0000000000000042",
"mixhash" :
"0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" :
"0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
Soliditätscode:
myToken.sol:
constructor (address _interfaceData)
public
{
interfaceData = DataContract(_interfaceData);
}
function transfer(address _to, uint256 _value) public returns (bool) {
if (interfaceData.isTransferWhitelistOnly()) {
require(isUserAllowedToTransfer(msg.sender));
}
return super.transfer(_to, _value);
}
BasicToken.sol:
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
DataContract.sol:
bool public isTransferWhitelistOnly;
Jede Hilfe wird geschätzt
Ohne Details ist es nicht möglich zu wissen, dass dies "das" Problem ist, aber es ist ein Verdächtiger.
Der Byzantium Fork ist eine Protokolländerung. Folglich besteht eine Inkompatibilität zwischen kompiliertem Code ab einer bestimmten Version und Blockchain-Knoten, auf denen ein älteres Protokoll ausgeführt wird. Ihr privates Netzwerk besteht möglicherweise aus Knoten, die ein älteres Protokoll ausführen, als Ihr kompilierter Code erwartet.
Zusammenfassend lässt sich sagen, dass sich das Funktionsantwortformat weiterentwickelt hat, sodass die Dinge auf beiden Seiten dieselbe Grammatik verwenden müssen, sonst gibt es Probleme.
Sie sagen, dass der Code in verschiedenen öffentlichen Netzwerken ausgeführt wird, sodass davon ausgegangen werden kann, dass er den neuesten Knoten erwartet.
Ich hoffe es hilft.
Wiederholung 122442
Ismael