Ich versuche, meinen Vertrag mit dem neuesten ganache-cli v6.0.3 (ganache-core: 2.0.2) mit Remix (http!-Version) auf http://remix.ethereum.org zu testen und bereitzustellen . Nachdem ich also ganache-cli ohne zusätzliche Parameter auf dem Standardport 8545 gestartet habe, verbinde ich mich mit Remix über den Web3-Provider http://127.0.0.1:8545 und meine Konten werden angezeigt, wie von Ganache angezeigt.
Dies ist der Vertrag, den ich bereitstellen möchte:
pragma solidity ^0.4.20;
contract Test {
uint[4] public arr; // [0,0,0,0]
event TestLog(string logmessage);
function Test() public {
arr[0] = 1; // [1,0,0,0]
}
function checkArray() public {
if(arr[0] == 1) { // arr == [1,?,?,?]
arr[1] = 1;
arr[0] = 0; // switch values [0,1,0,0]
}
TestLog("some log");
}
}
Es funktioniert gut mit der eingebauten Javascript-VM in Remix:[vm] from:0xca3...a733c, to:Test.checkArray() 0x692...77b3a, value:0 wei, data:0x7b3...f7296, 1 logs, hash:0xa6f...87209
Wenn ich versuche, die checkArray-Funktion in Remix auszuführen, die über den Web3-Provider mit Ganache verbunden ist, erhalte ich eine transact to Test.checkArray errored: VM Exception while processing transaction: out of gas
Fehlermeldung.
Was mache ich hier falsch? Das Aufstocken von gasLimit mit ganache-cli -l 5000000
hat nicht geholfen, ebenso wie noch höhere Werte und ein Folgetest mit einem sehr kleinen gasPrice und einem hohen Gaslimit. Ist es ein Remix-Problem, beim Erstellen der Transaktion falsche Gaslimits auf der Remix-Website festzulegen? Ich habe es auch auf einem privaten Geth-Knoten mit dem gleichen Ergebnis versucht: kein Benzin mehr ...
Jede Hilfe gerne willkommen!
Dies scheint ein Testrpc/Ganache-Bug zu sein. Die Leitung, die Probleme macht, ist das Setzen bzw. Zurücksetzen des Array-Wertes an Position 0 auf Null arr[0] = 0;
.
Ich habe Rinkeby mit demselben Vertrag verwendet und es funktioniert wie ursprünglich erwartet. Sie können es hier testen: https://rinkeby.etherscan.io/address/0x78aC7667BdeDC3b1CdF43611AdF7a88e05b600F5
Da dies einige sehr grundlegende Funktionen sind, muss ich sagen: was zum Teufel?
Meiner Meinung nach ist die Einstellung arr[0]
falsch, da dieses Element nicht vorhanden ist. Es ist / war immer am Ende des Arrays. Verwenden Sie arr.push(1)
, um die Länge des Arrays zu erweitern.
Ich hoffe es hilft.