Contract-Development
你如何使用 Remix 將 Ether 作為函式發送到合約?
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
功能…
- 我必須先將我想存入的金額放在“價值”欄位中。
2. 接下來,在 depositUsingParameter 欄位中添加相同的 Wei 值。
這允許函式的成功執行。
對於 function
depositUsingVariable
,Ether 的值是預先確定的。在這種情況下,2 ETH。乙太幣所有者需要在 value 欄位中提供 2 ETH(如上圖所示)才能使函式成功執行。