Solidity

如何將payable函式的函式參數用於require語句?

  • January 28, 2019
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在整個功能中使用。

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