Ich verwende einen öffentlichen Knoten als meinen Web3-Anbieter, daher muss ich alle Transaktionen manuell signieren. Dazu gehören Transaktionen, die Verträge erstellen.
Derzeit verwende ich die folgende Methode, um Verträge bereitzustellen.
/* I create the contract first. */
var contractAbi = ... (I load this from a file.)
var contractBytecode = ... (I load this from another file.)
var contract = new web3.eth.Contract(contractAbi);
/* Then I get the data encoded with constructor parameters. */
var contractDeployInfo = contract.deploy({
data: contractBytecode,
arguments: [constructorParam1, constructorParam2]
});
/* Data field of the transaction. */
var transactionData = contractDeployInfo.encodeABI();
/* Then I estimate the gas, using the provided method. */
contractDeployInfo.estimateGas().then(gas => {
// Use this gas estimate to create raw transaction,
// sign it, send it, and so on.
})
Die Transaktion wird durchgeführt, und der Vertrag wird bereitgestellt.
Die von zurückgegebene Gasschätzung gibt jedoch contract.deploy().estimateGas()
nur Gas zurück, das ausreicht, um den Vertrag an die Bergleute weiterzuleiten, aber nicht ausreicht, um den Erbauer des Vertrags tatsächlich auszuführen.
Als Ergebnis habe ich einen leeren Vertrag ohne Daten in der Vertragsadresse, die im Transaktionsbeleg angegeben ist.
Soll ich die Gasschätzung des Vertragserstellers berechnen und diese zum Gaslimit in meinen Transaktionen hinzufügen?
Diese „Duplikat“ -Frage ( So schätzen Sie Gas bei Vertragserstellung/Bereitstellung in einer privaten Ethereum-Blockchain ) verwendet eine ältere Version der Web3-Bibliothek. Ich bezog mich auch auf die neu eingeführte Bereitstellungsfunktion.
Sie können den Vertrag in Ihrem development
TestrPC bereitstellen und das Gas für diese Transaktion überprüfen.
const tx = await MyContract.new();
const gasUsed = tx.receipt.gasUsed;
Hoffe das hilft.
Xavier Leprêtre B9lab
Black Ops