¿Es posible enviar ether desde la dirección del contrato a la dirección de mi cuenta usando la función CloseChannel() y cuál será el comando Truffle?

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

Respuestas (1)

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.