Ich hatte einen DAO Smart Contract erstellt, bei dem etwa 20 Personen für Vorschläge stimmen. Sie machen jeweils neue Tx.
Das Offline-Signieren ist schön, um die Benzinkosten zu minimieren. Sie fragen sich, wie das Offline-Signieren mit Vertragsfunktionen funktioniert, auch wenn mehrere Personen unterschiedliche Stimmen unterzeichnen?
Ich habe gehört, dass mehrere Personen ihr Guthaben im Kanalstatus des Beleuchtungsnetzwerks signieren.
Sie verwenden das Signieren auf die gleiche Weise, als ob eine Person signieren würde. Jede Person muss die Transaktionskosten bezahlen, die für die Einreichung ihrer Unterschrift erforderlich sind. Sie könnten jedoch eine einzelne Funktion erstellen, die automatisch alle signierten Nachrichten etwas billiger analysiert, als wenn Sie eine neue Transaktion zum Analysieren jeder signierten Nachricht einreichen würden. Sie könnten möglicherweise so etwas wie Merkle Airdrops implementieren ( https://blog.ricmoo.com/merkle-air-drops-e6406945584d )
Es gibt ein paar Fallstricke, die mit der Überprüfung signierter Nachrichten einhergehen. Ich habe eine Reihe von Verträgen und ein Python-Unterzeichnerprogramm, die den zum Signieren von Nachrichten erforderlichen Arbeitsablauf demonstrieren:
Beim Signieren von Nachrichten werden ihnen die folgenden Daten vorangestellt: https://github.com/postables/Postables-Payment-Channel/blob/7d2f91bb060f80b139cab72b5fdff79d116f6210/solidity/ChannelsV4.sol#L12
Ich habe auch ein Python-Skript, das zum Signieren von Nachrichten verwendet werden kann: https://github.com/postables/Postables-Payment-Channel/blob/develop/python/signer.py
Die folgende Solidity-Funktion beschreibt, wie die signierte ORIGINAL- Nachricht zusammen mit dem Unterzeichner der signierten Nachricht überprüft wird : https://github.com/postables/Postables-Payment-Channel/blob/7d2f91bb060f80b139cab72b5fdff79d116f6210/solidity/ChannelsV4.sol# L257
Die folgende Solidity-Funktion beschreibt, wie der Unterzeichner einer Nachricht überprüft wird: https://github.com/postables/Postables-Payment-Channel/blob/7d2f91bb060f80b139cab72b5fdff79d116f6210/solidity/ChannelsV4.sol#L192
Ja, Sie können Personen offline unterschreiben lassen, alle Unterschriften zusammentragen und als Teil des Datenabschnitts einer einzelnen Transaktion senden und den Vertrag die Anzahl gültiger Unterschriften überprüfen lassen. Dies sollte Ihnen Benzin sparen und ermöglicht oft einen einfacheren Vertrag.
Sehen Sie sich dieses Beispiel einer Multisig-Wallet an, die so funktioniert: https://medium.com/@ChrisLundkvist/exploring-simpler-ethereum-multisig-contracts-b71020c19037
Denken Sie jedoch daran, dass jede von Ihnen hinzugefügte Signatur die Gaskosten der Transaktion erhöht, die sie sendet, und dass das Gesamtgas, das Sie in einer einzelnen Transaktion verwenden können, durch das Blockgaslimit begrenzt ist, das sich ändern kann. Wenn also die Anzahl der möglicherweise erforderlichen Unterschriften hoch oder unbegrenzt ist, müssen Sie den Vertrag möglicherweise trotzdem so schreiben, dass die Unterschriften auf mehrere Transaktionen aufgeteilt werden können.
Sowmay Jain
hextet