Ist es möglich, das Guthaben eines Vertrags von einem anderen Vertrag zu übertragen?

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?

Ich verstehe nicht ganz, was du vorhast. Versuchen Sie, das Guthaben von B auf A (Verkäufer) zu übertragen? Wenn ja, müssen Sie das in Vertrag B tun - so können Sie keine Bilanz ziehen . Sie sagen, Sie versuchen, den "Saldo von Vertrag B von Vertrag A" zu übertragen, was keinen Sinn ergibt.
@LauriPeltonen Ich möchte den Restbetrag von Vertrag B an eine Ethereum-Adresse überweisen, die der Verkäufer ist. Der Verkäufer ist in Vertrag A verfügbar.
@LauriPeltonen Meinst du, es ist nicht möglich, den Ether eines Kontrakts von einem anderen Kontrakt zu übertragen? Bitte erkläre

Antworten (1)

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 depositund 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);
    }
 }
Ich möchte mich nicht auf einen Vertrag festlegen. Ich möchte das Guthaben von Vertrag B an eine Ethereum-Adresse überweisen, die in Vertrag A verfügbar ist.
Meine Antwort bearbeitet. Entschuldigung für dieses Missverständnis
was ist in funktionsübertragung bilanz von vertrag b? Ist es die Ethereum-Adresse, an die ich überweisen möchte?
Das ist eine Funktion, um das Vertragsguthaben (B) an eine Ethereum-Adresse zu übertragen. Sie können dies nicht direkt von A aus tun. Also muss A B anrufen, um die Überweisung durchzuführen.
Ich habe es gerade versucht. Es wird erfolgreich ausgeführt, aber ich kann keine Änderung im Äther des Empfängers feststellen. Warum passiert das?
Gibt es einen Fonds in B? Was ist das Gleichgewicht von B?
es waren 50 Äther. Ich habe es gerade noch einmal mit 10 und 5 und 50 Ether probiert und es hat perfekt funktioniert!! .. vielleicht habe ich etwas falsch gemacht!! VIELEN DANK! Ich saß buchstäblich tagelang fest!
Cool. Schön, dass es funktioniert hat. Vergessen Sie jedoch nicht, einen Modifikator zu implementieren, damit nur Vertrag A das Guthaben von B übertragen kann. Sonst könnte jeder den Vertrag abschöpfen...
Wie erstelle ich einen Modifikator, der Vertrag A zulässt. Verwendet er auch msg.sender?