Ich verwende die Geth-Javascript-Konsole und versuche, die Pre-Fork-ETH mit dem ReplaySafeSplit v2-Vertrag 0xaBbb6bEbFA05aA13e908EaA492Bd7a8343760477
(Code hier ) aufzuteilen.
Ich mache das wie folgt:
splitteraddr = "0xaBbb6bEbFA05aA13e908EaA492Bd7a8343760477"
abi = [{"constant":false,"inputs":[{"name":"targetFork","type":"address"},{"name":"targetNoFork","type":"address"}],"name":"split","outputs":[{"name":"","type":"bool"}],"type":"function"}]
splitter = eth.contract(abi).at(splitteraddr)
preforkaddr = eth.accounts[0]
newethaddr = eth.accounts[1]
etcaddr = <a classic ether wallet address>
personal.unlockAccount(preforkaddr)
splitter.split.sendTransaction(newethaddr, etcaddr, {from: preforkaddr, value: web3.toWei(0.01, 'ether'), gas: 100000, gasPrice: web3.toWei(100, 'gwei')})
Daraus ergibt sich jedoch: Error: Cannot send value to non-payable function
.
Soweit ich das bisher verstanden habe, müssen Funktionen seit Version 0.4.0 von Solidity explizit mit payable
( hier angegeben ) geändert werden. Der ReplaySafeSplit-Vertrag scheint mit v0.3.5 kompiliert worden zu sein, und die split
Funktion enthält diesen Modifikator nicht.
Verhindert dies, dass meine Transaktion über einen in Geth integrierten Mechanismus stattfindet? Anhand des Transaktionsverlaufs des Vertrags kann ich erkennen, dass regelmäßige Transaktionen stattfinden, sodass der Vertrag eindeutig verwendbar ist.
Gibt es eine Problemumgehung in Geth? Verstehe ich irgendwo etwas falsch?
Seit dem Einsatz von EIP 155 wird der Wiedergabeschutz nicht mehr benötigt.
Aber wenn Sie es wirklich brauchen, können Sie die Vertrags-ABI-Hinzufügung "payable":true
vorher ändern "type":"function"
. Ich habe das nicht selbst getestet, also solltest du es zuerst mit einer kleinen Menge versuchen.
Nick101