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?
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.
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 Multiownable
Vertrag und fügen onlyManyOwners
Sie 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 transferOwnership
Reihe von Brieftaschen und Methoden, die mit onlyManyOwners
Modifikator gekennzeichnet sind, nur dann ausführen, wenn der letzte Besitzer diese Methode mit denselben Argumenten wie alle anderen Besitzer aufruft.
Jeffrey Liang
Thomas JayRush