Balances

如何創建契約來管理客戶餘額?

  • April 1, 2019

我想實現這樣的事情:測試在賬戶之間進行乙太幣轉移的條件。3 個帳戶

在此處輸入圖像描述

我在傳遞函式方面遇到困難。

要以穩固的方式發送 Ether,您只需要執行以下操作:

recipient.transfer(amount);

whererecipient是類型的變數address。請注意,這既可以是外部擁有的賬戶(通常是人類),也可以是智能合約。

例如,要將合約餘額中的錢匯給交易的發送者,您可以:

msg.sender.transfer(amount);

poly 填充在哪裡msg.sender,它是簽署發送到契約的交易的帳戶。

您可以在文件中閱讀更多相關資訊:

沒有辦法寫一份契約來從別人的賬戶中消費。合約可以接收資金、持有資金、賬戶資金和發送資金。

ATM 可能是最簡單的支架。“客戶”可以存取資金。資金在 ATM 內“混合”,其中有一個總計(手頭資金又名address(this).balance)。ATM 的工作是處理會計,因此它會釋放所有欠個人的錢,但不會超過應有的金額。

pragma solidity 0.4.25;

contract ATM {

   mapping(address => uint) public balances; // balances of all users

   event LogDeposit(address sender, uint amount);
   event LogWithdrawal(address receiver, uint amount);

   // send money to the contract

   function depositFunds() public payable returns(bool success) { // we accept all funds
       require(msg.value > 0); // needs to make sense
       balances[msg.sender] += msg.value; // credit the sender account
       emit LogDeposit(msg.sender, msg.value); // emit event
       return true; // return success 
   }

   // take money from the contract

   function withdrawFunds(uint amount) public returns(bool success) {
       require(amount > 0); // needs to make sense
       require(balances[msg.sender] >= amount); // requester is owed money?
       balances[msg.sender] -= amount; // debit requester account
       emit LogWithdrawal(msg.sender, amount); // emit event
       msg.sender.transfer(amount); // send funds
       return true; // return success
   }
}

如果不清楚,這public mapping意味著任何人都可以檢查欠任何地址的餘額。這意味著 Alice 和 Bob 可以檢查合約持有的資金。他們可以使用該withdrawFunds()功能提取資金。

如果您想要一個合約來調解 Alice 和 Bob 之間的交易,您需要 Alice 和 Bob 將資產轉移到合約的安全保管中。然後,當觸發事件發生時,更新內部會計。出於技術原因,通常最好使用 ATM 範例中的“提款模式”。如果 Alice 和 Bob 想從合約中刪除資金,他們將與合約互動以請求他們的資金。

希望能幫助到你。

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