Ich habe folgenden Vertrag:
pragma solidity ^0.4.24;
contract MyContract {
address public owner;
bool public unlocked;
constructor() public {
owner = msg.sender;
unlocked = true;
}
function lock() external {
require(owner == msg.sender);
unlocked = false;
}
}
Ich verwende Ganache v6.1.0 konfiguriert mit --gasLimit=0xfffffffffff
und --port=8545
.
Dann lade ich diesen Vertrag hoch und versuche, die lock
Methode über web3 v1.0.0-beta.34 aufzurufen:
let fs = require("fs");
let Web3 = require("web3");
let web3 = new Web3("http://localhost:8545");
async function deploy(contractName) {
let abi = fs.readFileSync(contractName + ".abi").toString();
let bin = fs.readFileSync(contractName + ".bin").toString();
let contract = new web3.eth.Contract(JSON.parse(abi));
let handle = await send(contract.deploy({data: "0x" + bin}));
return new web3.eth.Contract(JSON.parse(abi), handle.contractAddress);
}
async function send(transaction) {
let gas = await transaction.estimateGas({from: PUBLIC_KEY});
let options = {
to : transaction._parent._address,
data: transaction.encodeABI(),
gas : gas
};
let signedTransaction = await web3.eth.accounts.signTransaction(options, PRIVATE_KEY);
let receipt = await web3.eth.sendSignedTransaction(signedTransaction.rawTransaction);
return receipt;
}
async function execute() {
let myContract = await deploy("MyContract");
let transaction = myContract.methods.lock();
await send(transaction);
}
execute();
Aufruf execute()
--> send(transaction)
--> web3.eth.sendSignedTransaction(...)
ergibt:
Grundgebühr übersteigt Gaslimit
Irgendeine Idee, was das verursacht?
Die einzige Beobachtung, die ich bisher als nützlich empfunden habe, ist, dass diese spezielle Transaktion eine sehr kleine Menge an Gas benötigt (etwa 13000) im Vergleich zu mindestens zweimal für jede andere Transaktion, die in meinem Skript ausgeführt wird.
Dieses Problem tritt übrigens nicht auf, wenn ich Parity anstelle von Ganache verwende.
Vielleicht ist das ein weiterer Hinweis.
Danke schön!
Ich glaube, das ist ein ganache
Fehler in eth_estimateGas
Bezug auf die Berechnung der Gasrückerstattung. (13000 ist weniger als die Mindesttransaktionskosten von 21000.)
Übrigens sieht es so aus, als ob der Fehler vielleicht gerade behoben wurde? Siehe https://github.com/trufflesuite/ganache-core/issues/26 .
Es könnte sich lohnen, die neueste Quelle von GitHub zu holen und damit zu testen.
/node_modules/ganache-cli
Ordner kopieren sollte. Habe ich recht? Können Sie mir sagen, welche Quelldatei ich aus diesem Repository nehmen soll?"ganache-cli": "6.1.8"
.
gute Stimmung
"ganache-cli": "6.1.8"
.