Go-Ethereum

分流器觸點:是否缺少應付修飾符?

  • June 24, 2017

我正在使用 geth javascript 控制台,嘗試使用 ReplaySafeSplit v2 合約0xaBbb6bEbFA05aA13e908EaA492Bd7a8343760477此處的程式碼)拆分 pre-fork ETH。

我這樣做如下:

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')})

但是,這會導致:Error: Cannot send value to non-payable function

據我目前了解,從 v0.4.0 版本開始,需要使用payable在此處說明)顯式修改功能。ReplaySafeSplit 合約似乎是使用 v0.3.5 編譯的,並且該split函式不包含此修飾符。

這是否會阻止我的交易通過 geth 內置的某種機制進行?通過查看契約的交易歷史,我可以看到正在進行正常交易,因此契約顯然是可用的。

geth有解決方法嗎?我在某個地方有什麼問題嗎?

自部署EIP 155以來,不再需要重放保護。

但是如果你真的需要它,你可以修改"payable":true之前添加的合約 ABI "type":"function"。我自己沒有對此進行測試,因此您應該先嘗試少量。

引用自:https://ethereum.stackexchange.com/questions/18585