pragma solidity ^0.4.0;
contract exchange {
mapping (address => uint256) public balances;
event PaymentDone(string s);
function Channel( uint value) payable {
balances[msg.sender] -=value;
balances[this] +=value;
}
function CloseChannel( address to,uint value) {
if (to.send(value)) {
PaymentDone("Done");
}
}
}
Sí. Cambié el nombre de muchas cosas mientras lo resolvía.
Este contrato acepta depósitos ETH y realiza un seguimiento de quién depositó. tiene el ETH. Luego, permite que los depositantes se retiren a sí mismos o se transfieran a otra persona. No permite a los depositantes sobregirar sus cuentas.
Sin pruebas, por lo que no hay garantía ;-)
pragma solidity ^0.4.11;
contract Exchange {
mapping (address => uint256) public balances;
event LogDeposit(address sender, uint amount);
event LogWithdrawal(address receiver, uint amount);
event LogTransfer(address sender, address to, uint amount);
function deposit() payable returns(bool success) {
balances[msg.sender] +=msg.value;
LogDeposit(msg.sender, msg.value);
return true;
}
function withdraw(uint value) returns(bool success) {
if(balances[msg.sender] < value) throw;
balances[msg.sender] -= value;
msg.sender.transfer(value);
LogWithdrawal(msg.sender, value);
return true;
}
function transfer(address to, uint value) returns(bool success) {
if(balances[msg.sender] < value) throw;
balances[msg.sender] -= value;
to.transfer(value);
LogTransfer(msg.sender, to, value);
return true;
}
}
Casi olvido. Para retirarse del ejemplo anterior, la sintaxis de Truffle se vería así:
var exchange;
Exchange.deployed().then(function(instance) { exchange = instance; });
var amount = 10; // for example
exchange.withdraw(amount); // a good start, but look into promises and .then
Espero eso ayude.