Ist es möglich, mit der Funktion CloseChannel() Ether von der Vertragsadresse an meine Kontoadresse zu senden, und wie lautet der Truffle-Befehl?

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

Antworten (1)

Ja. Ich habe viele Sachen umbenannt, während ich daran gearbeitet habe.

Dieser Vertrag akzeptiert ETH-Einzahlungen und verfolgt, wer eingezahlt hat. es hält die ETH. Dann können die Einleger an sich selbst abheben oder an jemand anderen überweisen. Es lässt Einleger ihre Konten nicht überziehen.

Kein Test, also keine Garantie ;-)

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

Fast vergessen. Um vom obigen Beispiel abzurücken, würde die Truffle-Syntax in etwa so aussehen:

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

Ich hoffe es hilft.