Верните часть эфира со смарт-контракта и отправьте остаток на счет

Допустим, мы хотим совершить транзакцию x эфира и, если (x>20), вернуть 5% отправителю и отправить остаток исходному первоначальному получателю. Как я могу реализовать это в коде смарт-контракта и вызвать его из консоли? я должен отправить эфир на контракт и адрес получателя в данных или что-то в этом роде...

Ответы (1)

При использовании шаблона вывода средств, который является лучшей практикой, это будет выглядеть примерно так. Если это неясно, функция очень похожа на банкомат.

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.