Snapshot date
BTC
Reserve ratio
114.9%
Client assets
167.188,68 BTC
Kraken wallet
192.091,25 BTC
ETH
Reserve ratio
102%
Client assets
2.615.058,41 ETH
Kraken wallet
2.668.515,05 ETH
SOL
Reserve ratio
102.2%
Client assets
11.978.631,38 SOL
Kraken wallet
12.247.079,24 SOL
USDC
Reserve ratio
201.5%
Client assets
434.793.248,24 USDC
Kraken wallet
875.869.530,89 USDC
USDT
Reserve ratio
146.3%
Client assets
438.566.548,67 USDT
Kraken wallet
641.762.826,35 USDT
XRP
Reserve ratio
102.3%
Client assets
1.093.097.598,06 XRP
Kraken wallet
1.117.851.623,53 XRP
ADA
Reserve ratio
100.5%
Client assets
1.135.094.982,69 ADA
Kraken wallet
1.140.915.541,42 ADA
Verantwortlichkeit, regelmäßige Prüfungen
Bei Kraken bieten wir dir nicht nur die Möglichkeit, modernste digitale Assets zu traden, wir arbeiten auch daran, die Transparenz der Open-Source-Blockchains, auf denen sie betrieben werden, zu nutzen.
Mit unseren regelmäßigen Überprüfungen zum Nachweis von Rücklagen können Kunden mit nur wenigen Klicks in ihrem Konto überprüfen, ob ihre Guthaben durch echte Assets gedeckt sind.
Mit dem fortschrittlichen kryptografischen Buchhaltungsverfahren Nachweis von Rücklagen, das regelmäßig von vertrauenswürdigen Wirtschaftsprüfern durchgeführt wird, kannst du überprüfen, ob Kraken strenge Standards für die Rechenschaftspflicht einhält und die von alten Finanzunternehmen gebotene Transparenz übertrifft.
Frequently Asked Questions
What is Proof of Reserves?
Eine Überprüfung des Nachweis von Rücklagen (PoR) ist ein Verfahren, das von einem unabhängigen Buchhalter durchgeführt wird. Damit soll bestätigt werden, dass eine Depotbank die Assets, die sie beansprucht, im Namen ihrer Kunden hält. Dieser Prüfer erstellt einen anonymisierten Snapshot aller Guthaben und fasst sie in einem Hash-Baum zusammen (eine datenschutzfreundliche Datenstruktur, die alle Kundenguthaben zusammenfasst).
Von dort erhält der Wirtschaftsprüfer eine Merkle-Root, einen kryptografischen Fingerabdruck, der die Kombination dieser Guthaben zum Zeitpunkt der Erstellung des Snapshots eindeutig identifiziert.
Der Wirtschaftsprüfer sammelt dann von Kraken erstellte digitale Signaturen, die den Besitz der On-Chain-Adressen mit öffentlich überprüfbaren Guthaben belegen. Abschließend vergleicht und überprüft der Wirtschaftsprüfer, ob diese Guthaben die im Hash-Baum dargestellten Kundenguthaben übersteigen oder mit ihnen übereinstimmen und ob die Kunden-Assets daher der Kontrolle von Kraken unterliegen.
Jeder Kunde kann unabhängig überprüfen, ob sein Guthaben in das Verfahren zum Nachweis von Rücklagen einbezogen wurde, indem er ausgewählte Daten mit der Merkle-Root vergleicht. Alle an den übrigen Daten vorgenommenen Änderungen – egal wie klein sie sind, wirken sich auf die Root aus – und legen Manipulationen offen.
What does Proof of Reserves cover?
Spot-Guthaben
Die Überprüfung umfasst all deine Guthaben in den im Rahmen des Geltungsbereichs enthaltenen Assets, die zum Zeitpunkt der Erstellung des Snapshots geführt wurden. Die folgenden Assets sind zum Zeitpunkt der letzten Überprüfung Gegenstand des Geltungsbereichs: Bitcoin (BTC), Ether (ETH), Solana (SOL), USD Coin (USDC), Tether (USDT) und Ripple (XRP).
Staking-Guthaben
Wenn dir zum Zeitpunkt des Snapshots Guthaben für On-Chain-Staking zugewiesen waren, wird der Wert deines gestakten Guthabens mit deinem Spot-Guthaben zu einem einzigen Guthaben zusammengefasst.
Margin-Trading
Wenn du zu diesem Zeitpunkt Margin-Positionen hattest, würde dein Gesamtguthaben um die positiven Positionswerte angepasst werden.
Beispiel 1
Wenn du 1 BTC/USD @ 30,000 USD als Margin gekauft hast und deine Position offen ist, wird dein Reserveguthaben eine positive Anpassung deines BTC-Guthabens um +1 BTC widerspiegeln. Dein USD-Guthaben wird nicht negativ angepasst. Dein BTC-Guthaben, das unter Kraken-Verwahrung gehalten wird, beinhaltet dein BTC-Guthaben zu diesem Zeitpunkt, bereinigt um die positive Anpassung von + 1 BTC für deine Margin-Positionen. Dein USD-Asset-Guthaben bleibt gleich.
Beispiel 2
Wenn du 1 BTC/ETH @ 15 ETH als Margin verkauft hast und deine Position offen ist, wird dein Reserveguthaben eine positive Anpassung deines ETH-Guthabens um +15 ETH widerspiegeln. Dein BTC-Guthaben wird nicht negativ angepasst. Dein ETH-Guthaben, das unter Kraken-Verwahrung gehalten wird, beinhaltet dein ETH-Guthaben zu diesem Zeitpunkt, bereinigt um die positive Anpassung von + 15 ETH für deine Margin-Positionen. Dein BTC-Guthaben, das von Kraken verwahrt wird, bleibt gleich.
Hinweis: Die oben beschriebene Futures-Methode gilt ab der Überprüfung des Nachweis von Rücklagen im Mai 2023.
Futures-Guthaben
Wenn du zum Zeitpunkt der Überprüfung Guthaben in deiner Futures-Wallet hattest, existiert ein separater Datensatz zum Nachweis von Rücklagen für deine Futures-Sicherheitsguthaben. Deine Guthaben werden um nicht realisierte Gewinne und Verluste für einfach besicherte Futures-Trades berichtigt. Dies beinhaltet dieselben im Geltungsbereich enthaltenen Assets wie für Spot und Margin und wird Teil desselben Hash-Baums sein (mit einer eigenen Hash-Baum-ID).
Beispiel 1
Wenn du 1 BTC in deiner Futures-Wallet hattest und eine mehrseitig besicherte Position in BTC Perp eröffnest, die einen unrealisierten Gewinn und Verlust von -0,1 USD hat, dann beträgt dein BTC-Guthaben, das von Kraken verwahrt wird, 0.9 BTC (dein 1 BTC wird durch den nicht realisierten Gewinn und Verlust von -0,1 BTC berichtigt).
Beispiel 2
Wenn du 1 BTC in deiner Futures-Wallet hattest und eine mehrseitig besicherte Position in BTC Perp eröffnest, die einen unrealisierten Gewinn und Verlust von -100,0 USD hat, dann beträgt dein BTC-Guthaben, das von Kraken verwahrt wird, 1 BTC (dein 1 BTC wird nicht durch die nicht realisierte Gewinn- und Verlustrechnung berichtigt, da diese in USD erfasst wird und USD nicht Gegenstand dieser Überprüfung ist).
Hinweis: Die oben beschriebene Futures-Methode gilt ab der Überprüfung des Nachweis von Rücklagen im Mai 2023.
How do I verify that my account was included in the Proof of Reserves review?
Einfache Verifizierung
Gehe wie folgt vor, um kryptografisch zu überprüfen, ob dein Kraken-Kontoguthaben in der letzten Überprüfung des Nachweis von Rücklagen enthalten ist.
Hinweis: Diese Verifizierung spiegelt nur die Guthaben deines Kontos in den im Geltungsbereich enthaltenen Assets zum Zeitpunkt der Prüfung wider. Es wird weder nachfolgende Trades oder Transaktionen noch Guthaben in Assets widerspiegeln, die nicht im Geltungsbereich enthalten sind.
1. Melde dich in deinem Kraken-Konto an und navigiere auf der Kraken Pro-Oberfläche (pro.kraken.com) zur Seite „Nachweis von Rücklagen“ (Kontosymbol > Nachweis von Rücklagen).
2. Wähle die Registerkarte Nachweis von Rücklagen aus. Dazu gehören unsere neuesten verifizierten Reservequoten sowie Informationen, die für dein Konto spezifisch sind. Auf deinem Konto werden aktuelle Nachweise von Rücklagen angezeigt, in denen dein Kontostand überprüft wurde, einschließlich des Datums des Berichts, des Anbieters und des Umfangs der Bewertung.
3. Wähle das Datum aus und klicke auf Verifiziere dich. Hier findest du eine Bestätigung der zum Zeitpunkt der Prüfung vorhandenen Guthaben sowie eine Anleitung zur Überprüfung deiner Daten.
Mit dem externen Wirtschaftsprüfer verifizieren
-
Verwende deine Merkle-Leaf-ID: Kopiere die ersten 16 Zeichen und gib sie in die Tools des Buchhalters eines Drittanbieters ein, um dein Guthaben abzurufen und deine ID im Hash-Baum-Pfad zu überprüfen. Das Tool des Buchhalters eines Drittanbieters wird in einem separaten Fenster geöffnet.
Hinweis: Dies ist ab den Prüfungen 2023 möglich. Für frühere Prüfungen findest du auf der Webseite unseres Partners die Verifizierungstools.
Mit Kraken verifizieren
- Bestätige deine Datensatz-ID: Befolge die Schritte, um deine Datensatz-ID neu zu erstellen, die deine Kontodaten und die Bewertungs-ID eindeutig identifiziert (für jedes Berichtsdatum eindeutig).
- Verifiziere deine Merkle Leaf ID: Befolge die Schritte, um deine Merkle-Leaf-ID neu zu erstellen, die dein Konto zusammen mit den zum Zeitpunkt der Überprüfung befindlichen Guthaben eindeutig identifiziert.
- Bestätige deine Merkle-Leaf-ID im Hash-Baum: Bestätige, dass deine ID zum Hash-Baum gehört und validiere den Pfad zum Hash-Baum, der von unserem externen Buchhalter verifiziert und von allen Kunden geteilt wird.
Hinweis: Dies ist ab den Prüfungen 2023 möglich. Für frühere Prüfungen findest du auf der Webseite unseres Partners die Verifizierungstools.
Erweiterte Verifizierung
Technisch versierte Kunden möchten möglicherweise ihren speziellen Hash-Baum-Leaf-Node-Hash unabhängig rekonstruieren und ihre Guthaben programmgesteuert im Hash-Baum nachschlagen, anstatt in den von Kraken oder einem Buchhalter von Drittanbietern bereitgestellten visuellen Tools.
Du kannst die folgenden Überprüfungsschritte im Code ausführen:
-
Du kannst die Generierung deiner Hash-Baum-Leaf-ID für dein Konto mit den unten beschriebenen Schritten überprüfen.
-
Anschließend kannst du deinen Hash-Baum-Pfad für die Leaf-ID überprüfen und den Pfad von deiner Position zum Stammknoten rekonstruieren. Wir bieten volle Transparenz und geben auch deine Geschwisterblatt-IDs an.
Die erforderlichen Schritte (in Pseudocode), um die Datensatz-ID und Merkle-Leaf aus deinem Kontocode, deiner Kraken IBAN, deiner Bewertungs-ID und deinen Guthaben zu rekonstruieren, werden unten beschrieben. Beachte, dass die Ergebnisse von der speziellen Zeichenkettenformatierung der Guthaben und der Reihenfolge der geprüften Assets abhängig sind, wie sie auf der Seite für den Nachweis von Rücklagen angezeigt wird.
- Datensatz-ID = SHA256(concatenate(Account Code, Kraken IIBAN, Review ID))
- Guthaben = ""
- Für jedes Asset:
- Balances = concatenate(Asset, ":", AssetBalances[asset])
- Merkle-Hash = concatenate(Record ID, “,”, Balances)
- Merkle-Leaf = substring(SHA256(Merkle Hash), 0, 16)
Nachdem dein Merkle-Leaf identifiziert wurde, kannst du eine SHA256-Prüfung mit HEX-Werten verwenden, um den Hash-Baum-Pfad zu rekonstruieren.
Spezifische Beispiele werden auch in den folgenden Codefragmenten demonstriert. Das resultierende Merkle-Leaf ist auch in den Testdetails sichtbar, um zu bestätigen, dass du es korrekt rekonstruiert hast.
Python
import hashlib
# Merkle Leaf ID calculation
account_code = "8dc20f34da8cea8dd0f46b001694f5123ecd30d786c5eb92ad1a013703a4f8d1"
iiban = "AB12C34DEFG5KSQI"
review_id = "PR30SEP24"
record_id = hashlib.sha256((account_code + iiban + review_id).encode('utf-8')).hexdigest()
balances = "BTC:0.00093799,ETH:0.0422125592,SOL:0.0,USDC:0.0,USDT:6.72754,XRP:0.0"
print("Record ID: {}".format(record_id))
print("Merkle Hash: {}".format((record_id + "," + balances)))
hash_result = hashlib.sha256((record_id + "," + balances).encode('utf-8')).hexdigest()
print("SHA Result: {}".format(hash_result))
print("Merkle Leaf: {}".format(hash_result[0:16]))
#Merkle Tree Path function
def mix(x, y):
a = bytes.fromhex(x)
b = bytes.fromhex(y)
d = hashlib.sha256()
d.update(a)
d.update(b)
return d.hexdigest()
Rust
use sha2::{Digest, Sha256};
//Merkle Leaf ID calculation
const ACCOUNT_CODE: &str = "8dc20f34da8cea8dd0f46b001694f5123ecd30d786c5eb92ad1a013703a4f8d1";
const IIBAN: &str = "AB12C34DEFG5KSQI";
const REVIEW_ID: &str = "PR30SEP24";
const BALANCES: &str = "BTC:0.00093799,ETH:0.0422125592,SOL:0.0,USDC:0.0,USDT:6.72754,XRP:0.0";
fn main() {
let mut record_hasher: Sha256 = Default::default();
record_hasher.update(ACCOUNT_CODE);
record_hasher.update(IIBAN);
record_hasher.update(REVIEW_ID);
let record_id = format!("{:x}", record_hasher.finalize());
let merkle_hash = format!("{},{}", record_id, BALANCES);
let mut merkle_hasher: Sha256 = Default::default();
merkle_hasher.update(&merkle_hash);
let merkle_result = format!("{:x}", merkle_hasher.finalize());
println!("Record ID: {}", record_id);
println!("Merkle Hash: {}", merkle_hash);
println!("SHA Result: {}", merkle_result);
println!("Merkle Leaf: {}", &merkle_result[..16]);
}
//Merkle Tree Path function
fn mix(x: &str, y: &str) -> Result<String, hex::FromHexError> {
let mut leaves_hasher: Sha256 = Default::default();
let a = hex::decode(x)?;
let b = hex::decode(y)?;
leaves_hasher.update(&a);
leaves_hasher.update(&b);
Ok(hex::encode(leaves_hasher.finalize()))
}
fn main() {
println!("{}", mix("f42372aeb1be7296", "dfcced6ec3235f5e").unwrap());
assert_eq!(
mix("f42372aeb1be7296", "dfcced6ec3235f5e").unwrap(),
"ad86a5ee2f21347403ce07e365530604690454fa76787e76be9d2f6efdceeabf"
);
}
Go
package main
import (
"crypto/sha256"
"fmt"
)
//Merkle Leaf ID Calculation
func main() {
accountCode := "8dc20f34da8cea8dd0f46b001694f5123ecd30d786c5eb92ad1a013703a4f8d1"
iiban := "AB12C34DEFG5KSQI"
reviewId := "PR30SEP24"
secret := accountCode + iiban + reviewId
data := []byte(secret)
hash := sha256.Sum256(data)
recordId := string(hash[:])
fmt.Printf("Record ID: %x\n", recordId)
balances := "BTC:0.00093799,ETH:0.0422125592,SOL:0.0,USDC:0.0,USDT:6.72754,XRP:0.0"
merkleHash := fmt.Sprintf("%x%s%s", recordId, ",", balances)
fmt.Printf("Merkle Hash: %s\n", merkleHash)
hashResult := sha256.Sum256([]byte(merkleHash))
hashResultStr := string(hashResult[:])
fmt.Printf("SHA Result: %x\n", hashResultStr)
fmt.Printf("Merkle Leaf: %x\n", hashResultStr[0:8])
}
//Merkle Tree path hashing
func mix(x, y string) (string, error) {
// Convert the hex strings to bytes
a, err := hex.DecodeString(x)
if err != nil {
return "", err
}
b, err := hex.DecodeString(y)
if err != nil {
return "", err
}
h := sha256.New()
h.Write(a)
h.Write(b)
// Get the final hash value as a byte slice
hashed := h.Sum(nil)
// Convert the hash to a hex string and return it
return hex.EncodeToString(hashed), nil
}
func main() {
result, _ := mix("f42372aeb1be7296", "dfcced6ec3235f5e")
fmt.Println(result)
}
Bash
#!/bin/bash
#Merkle Leaf ID calculation
ACCOUNT_CODE="8dc20f34da8cea8dd0f46b001694f5123ecd30d786c5eb92ad1a013703a4f8d1"
IIBAN="AB12C34DEFG5KSQI"
REVIEW_ID="PR30SEP24"
RECORD_ID=$(echo -n "${ACCOUNT_CODE}${IIBAN}${REVIEW_ID}" | sha256sum | head -c 64)
BALANCES="BTC:0.00093799,ETH:0.0422125592,SOL:0.0,USDC:0.0,USDT:6.72754,XRP:0.0"
MERKLE_HASH="${RECORD_ID},${BALANCES}"
HASH_RESULT=$(echo -n ${MERKLE_HASH} | sha256sum | head -c 64)
echo "Record ID: ${RECORD_ID}"
echo "Merkle Hash: ${MERKLE_HASH}"
echo "SHA Result: ${HASH_RESULT}"
echo "Merkle Leaf: $(echo -n ${HASH_RESULT} | head -c 16)"
#Merkle Tree Path function
hex_string1="f42372aeb1be7296"
hex_string2="dfcced6ec3235f5e"
# convert hex strings to binary, concatenate them and then hash
hash_result=$(echo -n "$(echo -n $hex_string1 | xxd -r -p)$(echo -n $hex_string2 | xxd -r -p)" | sha256sum | awk '{ print $1 }')
echo $hash_result
Shortcomings and future improvements
Im Interesse der Transparenz möchten wir einige der von uns festgestellten Mängel beim Verfahren zum Nachweis von Rücklagen aufzeigen.
- Ein Nachweis von Rücklagen beinhaltet den Nachweis der Kontrolle über die On-Chain-Mittel zum Zeitpunkt der Prüfung, kann jedoch nicht den ausschließlichen Besitz von privaten Schlüsseln nachweisen, die theoretisch von einem Angreifer dupliziert worden sein könnten.
- Das Verfahren kann keine versteckten Belastungen aufdecken oder nachweisen, dass die Mittel nicht zum Zweck des Bestehens der Prüfung geliehen wurden. Der Geldfluss ist jedoch auf der Blockchain sichtbar, da wir Transparenz über die Adressen bieten, an denen sich unsere Assets befinden. Ebenso sind seit der letzten Prüfung möglicherweise Schlüssel verloren gegangen oder Geld gestohlen worden.
- Der Prüfer muss kompetent und unabhängig sein, um das Risiko von Doppelarbeit durch den Prüfling oder Absprachen zwischen den Parteien zu minimieren.
- Wir versuchen, einige dieser Mängel zu beheben, indem wir für unseren Nachweis von Rücklagen eine angesehene, unabhängige Drittfirma beauftragen und diese Prüfungen in regelmäßigen Abständen durchführen. Wir bieten auch Transparenz über diese Daten direkt auf unserer Kundenplattform.