Solidity

如何成功將 Ether 發送到合約?

  • April 18, 2018

Solidity 新手…

我正在研究如何通過在函式中設置參數將乙太幣存入智能合約。根據函式接收到的值,msg.sender 能夠發送預定數量的乙太幣。

這個想法是,如果提供 1 - 3 的值,則從 msg.sender 向合約地址發送 24、12 或 6 個 Ether。我設置 z = j 以驗證該函式是否接收到該值。變數 t 是 Wei 中的值,設置為 msg.value。似乎 msg.value 已正確設置,因為 t 的值會根據提供的輸入值進行更新。

我遇到的問題是呼叫函式時沒有轉移乙太幣。有用的指導將不勝感激。

我正在使用 Remix 並確認所有帳戶都已解鎖。

下面是源碼…

pragma solidity ^0.4.18;

contract ETHTEST2 {
   mapping(address => uint256) public deposits; //depost

   uint256 public z;
   uint256 public t;

   function sendETHtoContract(uint256 j) public payable {  //msg.sender & msg.value test - Work in Progress

       if (j == 1){

           z = j;
           msg.value == t;
           t = 24000000000000000000 wei;
           address(this).transfer(msg.value);
           return;
       }

       if (j == 2){

           z = j;
           t = 12000000000000000000 wei;
           address(this).transfer(msg.value);
           return;
       }

       if (j == 3){

           z = j;
           t = 6000000000000000000 wei;
           address(this).transfer(msg.value);
           return;
       }

       if (j >=4 || j < 0){  //works
           revert();
           return;
       }

   }

   function getBalance() public view returns (uint256) {
       return address(this).balance;
   }

   function() public payable {
   // this function enables the contract to receive funds
   }

}

合約不能強行從錢包地址中提取 ETH,如果你想將 Ether 支付到合約中,你必須在呼叫函式時設置交易的“價值”(或者如果回退函式,則只需將 ETH 發送到合約地址允許)。

Using將從transfer合約轉移到另一個地址,因此,合約只是獲取 msg.sender 提供的 ETH,並將其傳遞給自己。address(this).transfer(msg.value)

function sendETHtoContract(uint256 j) public payable {
   //msg.value is the amount of wei that the msg.sender sent with this transaction. 
   //If the transaction doesn't fail, then the contract now has this ETH.
}

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