Solidity

從智能合約中退還一些乙太幣並將其餘的發送到一個帳戶

  • May 2, 2018

假設我們要進行 x 乙太幣的交易,如果 (x>20) 將 5% 退還給發送者並將其餘部分發送給原始初始接收者。如何在智能合約程式碼中實現它,並從控制台呼叫它?我應該以數據或類似的方式將乙太幣發送到契約和接收者的地址嗎?

使用一個最佳實踐的退出模式,它看起來像這樣。如果不清楚,該功能很像 ATM。

pragma solidity ^0.4.18;

contract Refund {

   mapping(address => uint) public balances;

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

   function withdrawFunds(uint amount) public returns(bool success) {
       require(amount >= balances[msg.sender]);
       LogWithdrawal(msg.sender, amount);
       msg.sender.transfer(amount);
       return true;
   }

   function () public payable {
       require(msg.value > 0);
       uint change;
       uint dep;
       if(msg.value > 20) {
           dep = 20;
           change = msg.value - change;
       }
       balances[msg.sender] += dep;
       if(change > 0) balances[msg.sender] += change;
       LogDeposit(msg.sender, msg.value);
   }
}

希望能幫助到你。

ps 抱歉格式化。瀏覽器今天在 SE 上表現不佳。

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