2017-09-28 3 views
1
contract FirstContract { 

    function createOtherContract() payable returns(address) { 
     // this function is payable. I want to take this 
     // value and use it when creating an instance of 
     // SecondContract 
    } 
} 

contract SecondContract { 
    function SecondContract() payable { 
     // SecondContract's constructor which is also payable 
    } 

    function acceptEther() payable { 
     // Some function which accepts ether 
    } 
} 

FirstContract wird von der js-App erstellt, wenn der Benutzer auf eine Schaltfläche auf der Website klickt. dann möchte ich eine Instanz des zweiten Vertrages erstellen und den Äther dem neuen Vertrag übergeben. Ich kann nicht herausfinden, wie man den Konstruktor von SecondContract vom ersten Vertrag an anruft, während man Ether sendet.Kann ich eth über einen Konstruktor aus einem anderen Vertrag an einen Vertrag senden.

+0

Sie teilen das zweite Erstellen Vertrag und Versand Eth in zwei separate Aussagen. Erstellen Sie einfach eine separate Funktion mit diesen beiden Codezeilen. Wenn Sie diese Funktion aufrufen, wird die gesamte Transaktion zurückgesetzt, wenn eine der Zeilen fehlschlägt. –

Antwort

0

Edit: Ich fand die Lösung dafür:

pragma solidity ^0.4.0; 

contract B { 
    function B() payable {} 
} 

contract A { 
    address child; 

    function test() { 
     child = (new B).value(10)(); //construct a new B with 10 wei 
    } 
} 

Quelle: http://solidity.readthedocs.io/en/develop/frequently-asked-questions.html#how-do-i-initialize-a-contract-with-only-a-specific-amount-of-wei

Code verwenden es in etwa wie folgt aussehen: kann

pragma solidity ^0.4.0; 

contract FirstContract { 

    function createOtherContract() payable returns(address) { 
     return (new SecondContract).value(msg.value)(); 
    } 
} 

contract SecondContract { 
    function SecondContract() payable { 
    } 

    function acceptEther() payable { 
     // Some function which accepts ether 
    } 
} 
Verwandte Themen