Contract-Development
要求:如何避免我的智能合約的使用者失去他們的乙太幣
我有一個智能合約彩票,要求人們向其地址發送恰好 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/