Mein Code ist:
function sendEth(fromAddress, secret, toAddress, amount) {
let params = {
to: toAddress,
from: fromAddress,
value: web3.utils.toWei(amount + '', 'ether')
};
console.log(params);
return Promise.all([web3.eth.estimateGas(params), web3.eth.getGasPrice()])
.then((response) => {
const estimatedGas = response[0];
const gasPrice = response[1];
params.gas = estimatedGas;
params.gasPrice = web3.utils.toWei(1.1 * gasPrice + ''); // Use 10% more gas than recommended
params.value = web3.utils.toWei(params.value - params.gas * params.gasPrice + '');
return web3.eth.accounts.signTransaction(params, secret);
})
.then((signedTx) => {
return web3.eth.sendSignedTransaction(signedTx.rawTransaction);
});
}
Aber ich bekomme einen Fehler:
Error: while converting number to string, invalid number value '-1.1549989999999999e+23', should be a number matching (^-?[0-9.]+).
Javascript unterstützt keine Zahlen mit beliebiger Genauigkeit, die für Berechnungen mit Ether-Werten erforderlich sind (Ether hat 18 Dezimalstellen!).
Web3 v1.0 umschließt numerische Werte in bn.js- Objekten. Anstatt reguläre mathematische Operatoren (+, -, *, / usw.) zu verwenden, müssen Sie arithmetische Methoden aus bn.js verwenden:
Anstatt a * b + c
zu tun a.mul(b).add(c)
. Zum Konvertieren in das bn.js-Format bietet web3 die Funktion web3.utils.toBN()
.
Ihre Gasberechnungen können beispielsweise wie folgt durchgeführt werden:
params.gasPrice = web3.utils.toBN(gasPrice)
.mul(web3.utils.toBN(11))
.div(web3.utils.toBN(10)); // gasPrice * 1.1
params.value = web3.utils.toBN(params.value)
.sub(
web3.utils.toBN(params.gas).mul(
web3.utils.toBN(params.gasPrice)
)
); // value - (gas * gasPrice)
Schamon
times 1.1
direkt zu tun?