Contract-Development

要求:如何避免我的智能合約的使用者失去他們的乙太幣

  • July 10, 2017

我有一個智能合約彩票,要求人們向其地址發送恰好 0.2 個乙太幣才能參與。

在建構子中:

   ante = 0.2 ether;

在應付函式中

require(msg.value == ante);

如果有人發送了錯誤的金額,他們不僅會失去 0.2 個乙太幣,而且還會受到額外乙太幣的懲罰。我嘗試故意從 Metamask 發送 0.3 個乙太幣,但我從我的測試帳戶中失去了 0.45 個乙太幣。

我該如何避免這種情況?

謝謝

require()介紹之前,習慣做法是:

if(msg.value != ante) throw;// 還給它,恢復狀態變化,異常停止

**他們不會失去乙太。**它作為恢復所有狀態更改的一部分被發回throw;。更準確地說,由於導致的交易throw總體上是無效的,因此乙太幣一開始就不會被發送。

希望能幫助到你。

您可以嘗試safeSend退款(減少汽油費)。乙太坊鬧鐘會退款,例如: http ://www.ethereum-alarm-clock.com/source/v0.7.0/

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