Wie bringe ich Benutzer dazu, verschiedene Zeichenfolgen mit ihrem privaten Schlüssel separat zu signieren?

Hier ist das Szenario.

Benutzer kommen auf meine Website und registrieren sich (mit E-Mail und Passwort). Dann melden sie sich an. Danach fügen sie einen neuen Artikel hinzu (mit Namens- und Mengenfeldern). Nachdem ich auf Senden geklickt habe, Was passiert, ist in einem Front-End oder Back-End, generiere ich die gleiche Menge an UUIDs wie die von ihm angegebene Menge. Wenn er beispielsweise einen neuen Artikel hinzugefügt hat ("Toy123", 15), erzeuge ich 15 UUID-s auf dieser Seite. Dann muss dieser Benutzer diese UUIDS mit seinem privaten Schlüssel signieren. Die Sache ist, ich könnte alle 15 UUIDS zu einer machen und den Benutzer diese letzte mit seinem privaten Schlüssel signieren lassen, aber ich mag diese Option nicht, weil ich für jede UUID unterschiedliche Arten von Signaturen benötige, weil jede UUID jedes Element und jedes bedeutet Artikel ist anders. Also muss er diese uuids separat unterschreiben. Ich habe es mit Metamask versucht, aber es ist nicht großartig, denn um separat zu signieren, metamask öffnet einen Bestätigungsdialog für jede UUID. Stellen Sie sich vor, ein Benutzer hat 150 uuids, 150 Bestätigungsdialog angegeben? Scheint nicht toll zu sein. Deshalb möchte ich keine Metamaske verwenden. Die zweite Möglichkeit besteht darin, einen Benutzer nach seinem privaten Schlüssel zu fragen und dann jede UUID programmatisch zu signieren, aber wenn ich einen Benutzer nach seinem privaten Schlüssel frage, wird er Angst haben.

Ich habe versucht, die ganze Situation zu erklären, mit der ich konfrontiert bin. Die Frage ist: Was mache ich, um die UUIDs eines Benutzers separat mit seinem privaten Schlüssel zu signieren, ohne seinen privaten Schlüssel zu fragen? Ist das mit Metamask möglich?

Antworten (1)

Du kannst nicht. Metamask folgt einem 1-Dialog-, 1-Signatursystem für die Sicherheit der Benutzer. Wenn Sie solche Aktionen ausführen möchten, müssen Sie Ihre eigene Signatur implementieren (web3 bietet direkte Unterstützung dafür) und den Benutzer auffordern, den privaten Schlüssel einzugeben. Beachten Sie, dass Sie dies vollständig auf dem Gerät des Benutzers tun können und der Schlüssel nicht an Ihren Server gesendet werden muss.

Das heißt, Sie könnten dies immer noch mit 1 Sig/Batch tun. Lassen Sie den Benutzer einfach eine Merkle-Wurzel der n Werte signieren. Wenn der Benutzer zu irgendeinem Zeitpunkt in der Zukunft nur einen dieser n Werte übertragen/modifizieren/verkaufen möchte, können Sie eine neue Signatur für den alten Merkle-Stamm und die zu diesem Zeitpunkt stattfindende Transformation erstellen. Dies ermöglicht es Ihrem Benutzer immer noch, den Besitz nachzuweisen und Änderungen zu autorisieren, ohne dass zunächst n Sigs erforderlich sind.