Vertrauliche Zahlungen - Überblick
Die Oracle Blockchain Platform Digital Assets Edition verwendet Pedersen-Verpflichtungen, um die Datensicherheit zu gewährleisten.
Zero-Knowledge-Beweise
Zero-Knowledge-Protokolle (ZKPs) sind kryptografische Protokolle, mit denen ein ehrlicher Prover die Wahrheit einer Aussage einem Verifizierer demonstrieren kann, ohne zusätzliche Informationen preiszugeben. Ein unehrlicher Prover kann einen Verifizierer nicht davon überzeugen, dass eine falsche Aussage wahr ist. ZKPs stellen sicher, dass keine sensiblen Daten über die Gültigkeit der Forderung hinaus offengelegt werden. ZKPs ermöglichen es, bestimmte Eigenschaften eines geheimen Wertes nachzuweisen, z. B. zu bestätigen, dass er in einen Bereich fällt oder das Ergebnis einer bestimmten Berechnung ist, ohne den Wert selbst aufzudecken.
Pedersen Verpflichtungen
Zero-Knowledge-Beweise hängen von Verpflichtungssystemen ab, bei denen sich jemand zu einem bestimmten Wert verpflichten kann, während er vor anderen verborgen bleibt. Die Oracle Blockchain Platform Digital Assets Edition verwendet Pedersen-Verpflichtungen. Pedersen-Verpflichtungen verwenden zufällige Werte, die als Blindfaktoren bezeichnet werden, zusammen mit elliptischer Kurvenkryptografie, um sowohl Geheimhaltung als auch Unveränderlichkeit sicherzustellen. Pedersen-Verpflichtungen sind homomorph; mit anderen Worten, sie unterstützen die Durchführung mathematischer Operationen wie Addition und Subtraktion von Verpflichtungen unter Beibehaltung der Beziehungen zwischen den zugrunde liegenden Werten. Pedersen-Verpflichtungen werden in privaten Transaktionsprotokollen, sicheren Multiparty-Berechnungen und anonymen Zugangsdatensystemen verwendet.
Mit vertraulichen Zahlungen arbeiten
Sie verwenden den Header Confidential-Transaction
in einer Transaktionsanforderung, um das Feature "Vertrauliche Zahlungen" zu aktivieren.
Wenn Sie den Confidential-Transaction
-Header senden, der in einer Anforderung auf true gesetzt ist, generiert der REST-Proxy in Oracle Blockchain Platform eine eindeutige Zufallszahl (den für eine Pedersen-Verpflichtung erforderlichen Blinding-Faktor) und übergibt sie in der transienten Karte. Dies wird vom Chaincode verwendet, um die Eingabe zu verarbeiten und die sensiblen Informationen in einer privaten Datenerfassung statt in der Statusdatenbank zu speichern.
Transaktionsinformationen
Alle Tokenvorgänge (Kontoerstellung, Minting, Transfer, Burning usw.) generieren einen Transaktionsdatensatz, damit die Transaktionshistorie verfolgt werden kann. Transaktionsdaten werden an zwei Stellen gespeichert: das öffentliche Hauptbuch (Staatsdatenbank) und eine private Datenerfassung. Bei vertraulichen Zahlungen werden die sensiblen Daten in Klartext nur in den privaten Datensammlungen der an der Transaktion beteiligten Organisationen gespeichert. Die folgende Tabelle zeigt, wo Transaktionswerte für eine bestimmte Transaktions-ID gespeichert werden.
Öffentliches Buch (Statusdatenbank) | Private Datenerfassung |
---|---|
|
|
Tokenkontoinformationen
Ebenso werden Informationen zu Tokenkonten im öffentlichen Ledger und einer privaten Datenerfassung gespeichert. Die folgende Tabelle zeigt, wo Transaktionswerte für eine bestimmte Token-Konto-ID gespeichert werden.
Öffentliches Buch (Statusdatenbank) | Private Datenerfassung |
---|---|
|
|
- Der
account_id
-Schlüssel, der für jeden Benutzer im System eindeutig ist. Typisch ist der SHA-256-Hash derorgId
(MSP-ID) unduserId
(Benutzername oder E-Mail) in Kombination mit anderen Präfixen oder Suffixen. - In den öffentlichen Büchern werden alle Kontenschlüssel eines Benutzers gespeichert. Benutzer können mehrere fungible Tokenaccounts haben, eines für jedes Token.
- Tokendetails werden in den Feldern
token_type
,token_id
undtoken_name
gespeichert. - Die Felder
balance
undonhold_balance
enthalten den Pedersen-Verpflichtungshash, der den tatsächlichen Textwert des Saldos darstellt, der in der privaten Datenerfassung gespeichert ist.
- Der
account_id
-Schlüssel, der zuvor beschrieben wurde. - Die Felder
balance
undonhold_balance
enthalten den tatsächlichen Textwert dieser Salden. - In den Feldern
balance_blinding_factor
undon_hold_balance_blinding_factor
wird der Zufallsschlüssel gespeichert, der zum Erstellen der Verpflichtungenbalance
undonhold_balance
verwendet wird, die im öffentlichen Buch gespeichert sind. - Tägliche Transaktionsdetails werden in den Feldern
max_daily_amount
,daily_amount
,max_daily_transactions
,daily_transactions
undcurrent_date
gespeichert.
Typische Vorgänge mit vertraulichen Zahlungen
Der Workflow, wenn Sie Token mintieren, übertragen, halten oder brennen, während Sie vertrauliche Zahlungen verwenden, umfasst zusätzliche Schritte, um die Datenintegrität sicherzustellen.
Prägetoken
issueTokens
-API auf.
- Im Fall vertraulicher Zahlungen verwendet die Methode
issueTokens
den Werttoken_id
als Eingabe. Außerdem ist ein Blinding-Faktor erforderlich, der vom REST-Proxy zusammen mit der in der transienten Zuordnung übergebenen Tokenmenge gesendet wird. - Nach der Überprüfung wird die Pedersen-Verpflichtung aus dem Blinding-Faktor und der Menge der zu prägenden Token generiert.
- Die Gesamtmenge wird dann sowohl im öffentlichen Buch als auch in der privaten Datenerfassung aktualisiert. Im öffentlichen Hauptbuch wird die Pedersen-Verpflichtung, die den bestehenden Saldo darstellt, mit der Pederson-Verpflichtung erhöht, die die Anzahl der abgebauten (ausgestellten) Token darstellt. Der tatsächliche Wert des in der privaten Datenerhebung gespeicherten Guthabens wird entsprechend erhöht.
- Der Blinding-Faktor wird ebenfalls aktualisiert, so dass jederzeit der Balance- und Blinding-Faktor in der privaten Datenerfassung verwendet werden kann, um die entsprechende Verpflichtung zu überprüfen, die im öffentlichen Ledger gespeichert ist.
Token innerhalb einer Organisation übertragen
transferTokens
-API auf.
- Im Fall der vertraulichen Zahlungen verwendet die Methode
transferTokens
die Parametertoken_id
und optional als Eingabe. Außerdem ist ein Blinding-Faktor erforderlich, der vom REST-Proxy zusammen mit den WertenuserId
undorgId
für den Empfänger und der in der transienten Zuordnung übergebenen Tokenmenge gesendet wird. - Nach der Überprüfung wird die Pedersen-Verpflichtung aus dem Blinding-Faktor und der Menge der zu übertragenden Token generiert.
- Die Anzahl der Token im Konto des Absenders wird verringert, und die Menge im Konto des Empfängers wird erhöht, sowohl im öffentlichen Buch als auch in der privaten Datenerfassung. Im öffentlichen Hauptbuch wird die Pedersen-Verpflichtung, die den vorhandenen Saldo des Absenders darstellt, durch die Pedersen-Verpflichtung verringert, die die Menge der übertragenen Token darstellt. Für den Empfänger wird das Gleichgewicht auf die gleiche Weise erhöht. Die Istwerte des Absendersaldos und des Empfängersaldos werden in der privaten Datenerfassung aktualisiert.
- Der Blinding-Faktor wird ebenfalls aktualisiert, so dass jederzeit der Balance- und Blinding-Faktor in der privaten Datenerfassung verwendet werden kann, um die entsprechende Verpflichtung zu überprüfen, die im öffentlichen Ledger gespeichert ist.
Token zwischen Organisationen übertragen
holdTokens
auf, um den Übertragungsbetrag zu extrahieren und zu sperren.
- Im Fall der vertraulichen Zahlungen verwendet die Methode
holdTokens
die Wertetoken_id
,operation_id
undexpiration_time
als Eingabe und erfordert außerdem einen Blinding-Faktor, der vom REST-Proxy zusammen mit den Wertennotary_user_id
,notary_org_id
,to_user_id
undto_org_id
und der in der transienten Zuordnung übergebenen Tokenmenge gesendet wird. - Nach der Überprüfung wird die Pedersen-Verpflichtung aus dem Blinding-Faktor und der Menge der zu haltenden Token generiert.
- Ein Sperrobjekt und ein Absenderobjekt werden erstellt.
- Die Saldenverpflichtungen, Istsalden und Transaktionsobjekte werden im öffentlichen Buch und in den privaten Datenerfassungen für beide Organisationen gespeichert. Dadurch werden alle Salden entsprechend aktualisiert.
Token halten
Wie bereits erwähnt, werden Sperrvorgänge verwendet, um Token zwischen Organisationen zu übertragen. Sperrenvorgänge verwenden Halte-, Absender- und Empfängerobjekte, ähnlich wie Transaktions- und Tokenkontenobjekte, die Daten sowohl im öffentlichen Buch als auch in der privaten Datenerfassung speichern. Hold-Operationen können auch für Transfers in derselben Organisation verwendet werden. In diesem Fall werden Absender- und Empfängerobjekte nicht erstellt, und die Übertragung erfolgt als regulärer Token Taxonomy Framework-Vorgang mit Pedersen-Verpflichtungen. Die folgende Tabelle zeigt, wo Transaktionswerte für eine bestimmte Sperrtransaktions-ID gespeichert werden.
Im vertraulichen Modus umfassen Übertragungen zwischen Organisationen zwei private Datensammlungen. Anstatt das Schlüssel/Wert-Paar des Kontos zu ändern, wird für Lastschriften während des Sperrvorgangs ein Absenderobjekt erstellt. Für Gutschriften wird ein Empfängerobjekt erstellt (wenn die API executeHoldReceiver
ausgeführt wird). Der Saldo wird im Absenderobjekt platziert. Der gutgeschriebene Betrag wird im Empfängerobjekt platziert, das dem Empfänger zugewiesen ist. Wenn der Lastschriftvorgang abgeschlossen ist, wird das Absenderobjekt nicht mehr verwendet und kann gelöscht werden. Ebenso kann das Empfängerobjekt gelöscht werden, nachdem der Saldo vom Empfängerobjekt auf das Konto des Empfängers verschoben wurde.
Öffentliches Buch (Statusdatenbank) | Private Datenerfassung |
---|---|
|
|
Die folgende Tabelle zeigt die Informationen für das Absenderobjekt, das für zwischenbetriebliche Transfers und Sperren erstellt wird.
Öffentliches Buch (Statusdatenbank) | Private Datenerfassung |
---|---|
|
|
Die folgende Tabelle zeigt die Informationen für das Empfängerobjekt, das für zwischenbetriebliche Transfers und Sperren erstellt wird.
Öffentliches Buch (Statusdatenbank) | Private Datenerfassung |
---|---|
|
|
- Im Fall der vertraulichen Zahlungen verwendet die Methode
holdTokens
die Parametertoken_id
und optional als Eingabe. Außerdem ist ein Blinding-Faktor erforderlich, der vom REST-Proxy zusammen mit den WertenuserId
undorgId
für den Empfänger und der in der transienten Zuordnung übergebenen Tokenmenge gesendet wird. - Der Sperrvorgang muss von einem Notar genehmigt oder abgelehnt werden.
- Wenn der Notar den Sperrvorgang genehmigt, wird die Menge vom Absender belastet und Objekte gesperrt, und ein Transaktionsobjekt wird erstellt. Ein Empfängerobjekt wird ebenfalls erstellt, und die Menge wird dem Empfängerobjekt gutgeschrieben.
- Wenn der Notar die Sperre zurückweist, wird die gesperrte Menge dem Konto des Absenders gutgeschrieben, und ein Transaktionsobjekt wird erstellt.
- Die Saldenverpflichtungen, Istsalden und Transaktionsobjekte werden im öffentlichen Buch und in der privaten Datenerfassung gespeichert. Dadurch werden alle Salden entsprechend aktualisiert.
Token brennen
burnTokens
-API auf.
- Im Fall vertraulicher Zahlungen verwendet die Methode
burnTokens
den Werttoken_id
als Eingabe. Außerdem ist ein Blinding-Faktor erforderlich, der vom REST-Proxy zusammen mit der in der transienten Zuordnung übergebenen Tokenmenge gesendet wird. - Nach der Überprüfung wird die Pedersen-Verpflichtung aus dem Blinding-Faktor und der Menge der zu brennenden Token generiert.
- Die Gesamtmenge wird dann sowohl im öffentlichen Buch als auch in der privaten Datenerfassung aktualisiert. Im öffentlichen Ledger wird die Pedersen-Verpflichtung, die den vorhandenen Saldo repräsentiert, mit der Pederson-Verpflichtung verringert, die die Anzahl der verbrannten Token darstellt. Der tatsächliche Wert des in der privaten Datenerfassung gespeicherten Saldos wird entsprechend verringert.
- Der Blinding-Faktor wird ebenfalls aktualisiert, so dass jederzeit der Balance- und Blinding-Faktor in der privaten Datenerfassung verwendet werden kann, um die entsprechende Verpflichtung zu überprüfen, die im öffentlichen Ledger gespeichert ist.