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