contract A{
address public seller;
function A(){
seller = 0xdd870fa1b7c4700f2bd7f44238821c26f7392148;
}
function transfer_from_B(address b){
seller.transfer(b.balance);//ERROR
}
}
contract B{
function deposit() payable{
}
}
Ich erhalte eine Fehlermeldung, wenn ich versuche, das Guthaben von Vertrag B von Vertrag A zu übertragen. Ist das nicht möglich?
Lösung 1
Um eine Zahlungsüberweisung an einen Smart Contract zu akzeptieren, müssen Sie die Standardfunktion überschreiben function ()
und so machen payable
, dass Ether akzeptiert werden.
function () public payable {}
Lösung 2
Andernfalls können Sie die Funktion direkt aufrufen deposit
und den Wertbetrag, den Sie übertragen möchten, zu dieser Funktion hinzufügen.
seller.deposit().value(b.balance);
Edit: Missverständnis.
Ein Smart Contract kann seinen Saldo nicht im Namen eines anderen Contracts senden. Sie müssen eine Übertragungsfunktion auf Smart Contract B erstellen und von A aus aufrufen.
contract A{
address public seller;
function A(){
seller = 0xdd870fa1b7c4700f2bd7f44238821c26f7392148;
}
function transfer_from_B(address b){
b.transferBalance(seller)
}
}
contract B{
function transferBalance(to) { // add modifier onlyA
to.transfer(this.balance);
}
}
Lauri Peltonen
Haya Raed
Haya Raed