Kann ich einen Vertrag mit einem Keyholder für ein Multisig-Wallet abschließen?

Wie der Titel schon sagt, möchte ich einen Smart Contract zu einem der Keyholder einer Multisig-Wallet machen, damit Transaktionen aus der Wallet genehmigt werden können, wenn sie bestimmte Bedingungen erfüllen. Ich denke, das sollte möglich sein, aber ich bin mir nicht sicher, welche Methode der einfachen Multisig-Wallet mein Vertrag aufrufen soll. Wie kann mein Vertrag auch wissen, wann es angebracht ist, die Methode aufzurufen, oder ruft die Multisig-Brieftasche selbst tatsächlich die Konten der einzelnen Schlüsselinhaber auf und ich muss nur eine Antwort angeben?

Antworten (3)

Wenn ich Ihren Anwendungsfall richtig verstehe, möchten Sie einen Vertrag abschließen, der eine Transaktion autorisiert, indem Sie an einer Multisig-Brieftasche teilnehmen. Wenn sich diese Transaktion auf der Blockchain befindet, ist diese Funktion Ethereum eigen. Sie können einen Transaktionsvertrag einrichten, der nicht nur die Genehmigung von Benutzern, sondern auch von anderen Teilnehmerverträgen einholt.

Diese Teilnehmerverträge können in Solidity so programmiert werden, dass sie eine Instanz des Transaktionsvertrags nach Erfüllung bestimmter Bedingungen genehmigen.

Ich hoffe, das beantwortet Ihre Frage.

Als Antwort auf Ihre zweite Frage kann ein Vertrag keine Transaktion initiieren, daher wird er niemals wissen können, wann es angebracht ist, etwas zu tun.

Der Vertrag muss durch eine Transaktion ausgelöst werden, die von einem externen Konto (einem regulären Benutzerkonto) oder einer Art Oracle wie Oraclize.it gesendet wird.

Nur zur Anmerkung: Wenn der Vertrag Transaktionen signieren kann, bedeutet dies, dass sein privater Schlüssel offen in der Blockchain gespeichert werden muss (oder der Schlüssel wird jedes Mal an den Vertrag gesendet, wenn er etwas signieren muss). In beiden Fällen kann jeder den privaten Schlüssel sehen und daher kann jeder Transaktionen von diesem Konto aus signieren. Aus Ihrer Frage geht nicht hervor, dass Sie dies erkennen.

Ah okay. Aber könnte der Vertrag die Transaktion nur genehmigen, nicht wirklich unterzeichnen?
Könnten Sie nicht einfach die Multi-Sig ändern, um richtig auf die Bedingungen zu reagieren, die Sie im ursprünglichen Beitrag erwähnt haben? Warum einen zweiten Vertrag erstellen? Warum bauen Sie die Bedingungen nicht einfach in die Multi-Sig selbst ein? Entschuldigung - ich bin gerade etwas verwirrt.

Gestern habe ich den universellen Solidity Smart Contract für Multi-Signatur verschickt: https://github.com/bitclave/Multiownable

Wenn Sie es gestern verwenden, können Sie jeder Smart-Contract-Methode problemlos Multi-Signatur-Funktionen hinzufügen. Unterklassen Sie einfach den MultiownableVertrag und fügen onlyManyOwnersSie den Methoden, die Sie schützen möchten, einen Modifikator hinzu. Dies ist ein Beispiel für die einfachste Multisig-Wallet, die Sie sich vorstellen können:

contract SimplestMultiWallet is Multiownable {
    function transferTo(address to, uint256 amount) onlyManyOwners {
        to.transfer(amount);
    }
}

Technisch gesehen können Sie eine transferOwnershipReihe von Brieftaschen und Methoden, die mit onlyManyOwnersModifikator gekennzeichnet sind, nur dann ausführen, wenn der letzte Besitzer diese Methode mit denselben Argumenten wie alle anderen Besitzer aufruft.