Contract-Development

你如何使用 Remix 將 Ether 作為函式發送到合約?

  • April 19, 2018

Solidity 新手…

使用 Remix 在私有區塊鏈上部署合約時,我無法執行應付功能。執行這些功能時,會顯示以下錯誤消息:所需的氣體超出限額或交易總是失敗。

程式碼是從這裡獲得的,並出於學習的目的進行了修改。

pragma solidity ^0.4.17;

contract depositTest {

   uint256 public fee = 2000000000000000000 wei;

   function depositUsingParameter(uint256 deposit) public payable {  //deposit ETH using a parameter
       require(msg.value == deposit);
       deposit = msg.value;
   }

   function depositUsingVariable() public payable { //deposit ETH using a variable
       require(msg.value == fee);
       fee = msg.value;
   }

   function getContractBalance() public view returns (uint256) { //view amount of ETH the contract contains
       return address(this).balance;
   }

   function withdraw() public { //withdraw all ETH previously sent to this contract
       msg.sender.transfer(address(this).balance);
   }

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

程式碼是正確的,但我對如何訪問 Ether 並將其發送到合約的機制缺乏了解。我將解釋以幫助他人提高知識…

該函式depositUsingParameter建立由乙太所有者提供的所需。由於合約不能自動從 Ether 所有者的錢包中提取資金,因此 Ether 所有者必須同意通過在“價值”欄位中提供金額來執行該功能。(此欄位位於 Remix 的“執行”選項卡中)。

如果我想執行該depositUsingParameter功能…

  1. 我必須先將我想存入的金額放在“價值”欄位中。

Remix - 執行選項卡界面 - 首先添加你要存入的 Ether 數量 2. 接下來,在 depositUsingParameter 欄位中添加相同的 Wei 值。

在 depositUsingParameter 欄位中添加相同的 Wei 值

這允許函式的成功執行。

對於 function depositUsingVariable,Ether 的是預先確定的。在這種情況下,2 ETH。乙太幣所有者需要在 value 欄位中提供 2 ETH(如上圖所示)才能使函式成功執行。

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