Erstatten Sie einige Ether aus dem Smart Contract zurück und senden Sie den Rest an ein Konto

Nehmen wir an, wir möchten eine Transaktion von x Ether durchführen und bei (x > 20) 5 % an den Absender zurückerstatten und den Rest an den ursprünglichen ursprünglichen Empfänger senden. Wie kann ich es in einem intelligenten Vertragscode implementieren und von der Konsole aus aufrufen? soll ich äther an vertrag und empfängeradresse in daten schicken oder so...

Antworten (1)

Unter Verwendung eines Abhebungsmusters, das eine bewährte Methode ist, würde es ungefähr so ​​​​aussehen. Falls es nicht klar ist, die Funktion ähnelt stark einem Geldautomaten.

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);
    }
}

Ich hoffe es hilft.

ps Entschuldigung für die Formatierung. Browser spielt heute nicht gut mit SE.