Transactions

在智能合約中使用“for循環”轉移乙太幣

  • October 24, 2017

我正在嘗試向將乙太幣存入我的合約的使用者發送資金。我目前正在通過列表address和循環發送這些地址來實現這一點。現在這適用於 2-3 個使用者(經過測試)。

我現在擔心的是,如果有大約 1000 個使用者我需要reward乙太幣。如果我的合約有足夠的乙太幣可以發送就足夠了fund + gas嗎?或者呼叫獎勵方法的交易是否需要發送足夠的乙太幣才能執行轉賬?

我見過一些眾所周知的合約讓使用者撤回他們的獎勵而不是自動發送獎勵。哪一個有效?如果兩者都有效,那麼推薦哪種方法?

強烈建議您要求使用者提取資金,而不是通過 for 循環將資金推送給使用者。

  1. 對於大量使用者來說,實現起來要困難得多,需要在循環中執行直到gas不足,在循環中保持位置,然後等到下一次執行。如果您不執行此操作,那麼當您的使用者數量太大而無法在不突破 gas 限制的情況下循環通過時,一個人將獲得報酬(永遠!)。
  2. 更大的問題是這是一個巨大的安全問題。如果其中一位使用者使用他的備份函式 revert(); 然後在他之後,沒有人能夠收到他們的乙太幣,因為在支付這個淘氣的使用者時,循環總是會失敗(恢復整個執行)。

發送付款的推送方法還有很多問題,但這些應該足夠了。

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