Splitterkontakt: Fehlt kostenpflichtiger Modifikator?

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 splitFunktion 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?

Antworten (1)

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":truevorher ändern "type":"function". Ich habe das nicht selbst getestet, also solltest du es zuerst mit einer kleinen Menge versuchen.

Danke. Ich war schließlich zu dem Schluss gekommen, dass kein Schutz mehr erforderlich ist, nachdem ich auf EIP155 gestoßen war. Es laufen jedoch immer noch viele Transaktionen. Ich habe auch darüber nachgedacht, eine modifizierte ABI zu verwenden (obwohl ich es nicht versucht habe). Aber ich fragte mich, ob eine Abweichung vom "offiziellen" ABI (a) überhaupt funktionieren würde, oder (b) zu unerwarteten Problemen führen würde?