Go-Ethereum

發送多個輸出的智能合約

  • April 23, 2022

我目前正在學習智能合約,對它們的實際工作方式有點困惑。

我的網站允許使用者將 ETH 從他們的現場錢包發送到場外的另一個地址。在此期間,我想在我的網站上扣除 1% 的費用。

是否可以通過智能合約來做到這一點?

我現在使用solidity所做的是開發了這個非常基本的契約:

pragma solidity ^0.4.18;

contract MultiSend
{
   function multiSendETH(address[] memory addresses, uint[] memory values) public payable
   {
       // Validate addresses and values match
       if(addresses.length != values.length)
       {
           return;
       }

       else
       {
           for(uint i = 0; i < addresses.length; i++)
           {
               address(addresses[i]).transfer(values[i]);
           }

           msg.sender.transfer(this.balance);
       }
   }
}

我已經通過 remix.ethereum.org 成功部署了它,值為 1 wei。

每次有人從我的網站提款時,是否可以一遍又一遍地重複使用相同的智能合約?

或者我是否必須創建價值與提取的價值相等的智能合約?

我的問題是智能合約需要一些時間才能被探勘並變得可用,因此採用這種方法為其提供資金並提取適當的價值,並且合約可用和可以執行的時間跨度將有一些延遲並且不利於使用者體驗。

我希望有可能重用這個智能合約,並可能添加一個從哪個錢包發送的參數?那可能嗎?

也可以從這一行獲取交易 ID:

address(addresses[i]).transfer(values[i]);

還是我對智能合約的理解完全不正確?

我想這樣稱呼它:

addresses = ['0xTheirOutputAddress', '0xMySiteAddress']
fee = total * 0.01
values    = [total - fee, fee]
w3.contract.multiSendETH(addresses, values).call()

我建議您花一些時間,一一面對這個問題,並蒐索它們是否已經得到解答。

如果沒有,請為每個人提出一個詳細而簡單的問題。

比我了解更多的人將能夠幫助您,但現在您有多個問題,而且非常混亂。只是想幫忙。

順便一提:

  • 我相信你可以在契約中支付“費用”,如果我記得我在哪裡看到了一個例子,我會再次評論。
  • 視情況而定,但通常我認為最好重用契約。

當然,您可以對所有交易使用相同的合約。事實上,這意味著你會被這樣使用。您只需部署一次,所有交易都由同一個合約執行。

您需要澄清“我的網站地址”是什麼意思,因為您寫“費用”的方式將保留在契約中。您仍需要將費用轉移到您的“網站”。

不過,我在您的程式碼中看到的是,您沒有驗證“值”是否與呼叫此函式的人轉移的 ETH 數量有任何關係。這就是您的契約將破裂的地方。

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