Solidity
如何將payable函式的函式參數用於require語句?
function createCampaign(uint deposit, address ll) public payable{ dpst = deposit; require(msg.value > (40*dpst)/100 wei); address newCampaign = address((new Campaign).value(msg.value)(deposit, ll, token_address, 1)); token_instance.setAllowance(dpst, token_holder, newCampaign); deployedCampaigns.push(newCampaign); }
這是我的一段程式碼。在此支付功能中,發送的最低 wei 金額應至少為存款的 40%。要求功能是否正確實現?
改變這個:
require(msg.value > 40 * dpst / 100)
為此,為了避免精度損失:
require(msg.value * 100 > 40 * dpst)
然後到這個,為了避免溢出:
require(msg.value.mul(100) > dpst.mul(40))
然後到此,為了減少失敗的機會:
require(msg.value.mul(10) > dpst.mul(4))
那麼對此,為了更加減少失敗的機會:
require(msg.value.mul(5) > dpst.mul(2))
順便說一句,
at least 40%
您可以(並且應該)使用>=
而不是>
.
是的,這行得通。但是,有幾點需要注意。
1)您應該使用OpenZeppelin 的 Safemath進行這些操作以避免溢出。您的程式碼如下所示:
function createCampaign(uint deposit, address ll) public payable{ dpst = deposit; require(msg.value > (40.add(dpst)).div(100 wei));
2)您不需要指定
wei
. 您可以簡單地除以 100。3)您不需要設置
dpst = deposit
. 您可以簡單地deposit
在整個功能中使用。