Solidity

我可以將乙太坊發送到其建構子之外的合約嗎?

  • October 24, 2016

我如何用 Ether 為 Solidity 合約提供資金?Solidity FAQ 中的範例http://solidity.readthedocs.io/en/develop/frequently-asked-questions.html#store-ether-in-a-contract通過合約的建構子為合約提供資金。你可以在建構子之外做同樣的事情嗎?

一些背景;我希望契約能夠通過類似的方式將乙太幣發送到某人的地址recipient.send(169000000000000000000);

無論如何,這是我geth控制台的輸出:

>eth.getBalance(eth.coinbase)
169531250000000000000

所以我有 ~169 乙太幣可以玩。偉大的!所以我嘗試了這個:

contract A {
   function fund() public {
       Funded(msg.sender,msg.value);
   }    
}

然後我想通過以下 .js 呼叫來資助它:

const exchangerContract = web3.eth.contract(exchangerAbi)
const contractAddress = '0x0d2bbe5af1fa1eaebc5ad6e27aa27a7328dc58bc'
const contract = exchangerContract.at(contractAddress)
contract.fund({from: web3.eth.accounts[0], value: web3.toWei(100,"ether")})

不幸的是,這似乎不起作用。當我載入控制台時,我得到以下資訊:

>eth.getBalance('0x0d2bbe5af1fa1eaebc5ad6e27aa27a7328dc58bc')
0

所以,想知道我的 .js 是否有問題,我在控制台中嘗試了同樣的方法:

>eth.sendTransaction({from: eth.coinbase, to: '0x0d2bbe5af1fa1eaebc5ad6e27aa27a7328dc58bc', value: web3.toWei(100, "ether")})
"0x136ae6919bd2640425b03633b6709c3863d96600da6ca0c61956f694bbe62384"
>eth.getBalance('0x0d2bbe5af1fa1eaebc5ad6e27aa27a7328dc58bc')
0

噓:(所以我想知道是否可以發送乙太幣!但是:

>personal.newAccount()
Passphrase: 
Repeat passphrase: 
"0x5e610b6696683e1c4173bd949279fd6127d8b808"
> eth.getBalance(eth.coinbase)
169531250000000000000
> eth.getBalance(eth.accounts[1])
0
> eth.sendTransaction({from: eth.coinbase, to: eth.accounts[1], value: web3.toWei(169, "ether")})
"0x136ae6919bd2640425b03633b6709c3863d96600da6ca0c61956f694bbe62384"
> eth.getBalance(eth.accounts[1])
169000000000000000000

所以看來我可以將乙太幣發送到一個非合約地址,畢竟。呸!

我如何對合約地址做同樣的事情?

的,乙太可以發送到其建構子之外的合約。

推薦的方法是呼叫合約中的函式(接收乙太幣/回退函式),該函式可以做更多的事情,而不僅僅是記錄一個事件

Solidity 0.4開始,payable修改器需要附加到函式或備份函式。

可以製作備份功能payable,但這意味著其他人可能會不小心將乙太幣發送到合約。這種消除了payableSolidity 添加的好處,這樣合約就不必實現自己的修飾符來拒絕乙太並將其附加到它們的大多數功能上。

想要接收 Ether 的函式必須指定新的應付修飾符(否則它們會拋出)。

想要通過簡單的“發送”接收 Ether 的合約必須使用 payable 修飾符實現備份功能。如果沒有定義應付回退函式並且沒有函式與簽名匹配,則合約現在會拋出。

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