Bewijs van reserves

Bewijs dat je middelen veilig zijn, wanneer je maar wilt.

Datum snapshot

BTC icon

BTC

Reserveratio*

100.3%

ETH icon

ETH

Reserveratio*

101.3%

SOL icon

SOL

Reserveratio*

101.1%

USDC icon

USDC

Reserveratio*

105%+

USDT icon

USDT

Reserveratio*

105%+

XRP icon

XRP

Reserveratio*

100.6%

ADA icon

ADA

Reserveratio*

102.2%

Verantwoording, regelmatige beoordelingen

Bij Kraken bieden we u niet alleen de mogelijkheid om te traden in de allernieuwste digitale assets, we werken er ook aan om de transparantie van de opensourceblockchains waarop ze opereren te vergroten.

Met onze geregelde Proof of Reserves-controles kunnen klanten gemakkelijk controleren of de door hen aangehouden tegoeden worden gedekt door werkelijke assets, hetgeen ze kunnen doen met slechts een paar eenvoudige klikken in hun account.

Proof of Reserves is een geavanceerde cryptografische boekhoudprocedure die regelmatig wordt uitgevoerd door vertrouwde accountants. Hiermee kan je controleren of Kraken voldoet aan strenge normen voor verantwoording, die de transparantie die wordt geboden door traditionele financiële instellingen overtreffen.

Veelgestelde vragen

Wat is Proof of Reserves?

Een Proof of Reserves-beoordeling (PoR) is een procedure die wordt uitgevoerd door een onafhankelijke accountant van een derde partij. Dit is bedoeld om te bevestigen dat een bewaarder de activa aanhoudt die het beweert aan te houden namens zijn klanten. Deze accountant neemt een geanonimiseerde momentopname van alle aangehouden tegoeden en voegt deze samen in een merkle-boom,een privacyvriendelijke gegevensstructuur die alle tegoeden van cliënten.

Merkle Root Hash

Van daaruit verkrijgt de accountant een merkle-boom: een cryptografische vingerafdruk die op unieke wijze de combinatie van deze saldi identificeert op het moment dat de momentopname werd gemaakt.

De accountant verzamelt vervolgens digitale handtekeningen die door Kraken zijn geproduceerd en die het eigendom bewijzen van de on-chain adressen met openbaar verifieerbare saldi. Tot slot vergelijkt en verifieert de accountant of deze tegoeden hoger zijn dan, of overeenkomen met, de tegoeden van klanten zoals deze in de Merkle-boom zijn weergegeven, en dus dat de assets van de klant onder het beheer van Kraken vallen.

Elke klant kan onafhankelijk verifiëren of zijn saldo werd opgenomen in de Proof of Reserves-procedure door geselecteerde gegevens te vergelijken met de merkle-boom. Wijzigingen die in de rest van de gegevens worden aangebracht, hoe klein dan ook, hebben invloed op de root - wat knoeien duidelijk maakt.

Ons rapport Bewijs van reserves kan hier worden gevonden.

Wat houdt Proof of Reserves in?

Spotsaldi

Het overzicht bevat al uw saldi van de activa die binnen het bereik vallen, op het moment dat de momentopname werd gemaakt. De volgende activa vallen binnen het bereik van de meest recente beoordeling: Bitcoin (BTC), Ether (ETH), Solana (SOL), USD Coin (USDC), Tether (USDT) en Ripple (XRP).

Stakingtegoeden

Als je op het moment van de snapshot tegoed hebt toegewezen aan on-chain staking, wordt de waarde van je gestakete tegoed samengevoegd met je spottegoed onder één enkel tegoed.

Margin trading

Als je op dat moment margeposities had, dan zou je totale saldo worden aangepast met de positieve positiewaarden.

Voorbeeld 1

Als je 30.000 BTC/USD @ 1 USD op marge hebt gekocht en je positie is open, dan zal je Proof-of-Reserves-saldo een positieve +1 BTC-aanpassing van je BTC-saldo weergeven. Er zal geen negatieve aanpassing zijn van uw USD-saldo. Uw BTC-activasaldo onder bewaring van Kraken zal uw BTC-saldo op dat moment bevatten, aangepast met de positieve + 1 BTC aanpassing voor uw margepositie. Uw USD-activasaldo blijft hetzelfde.

Voorbeeld 2

Als je 15 BTC/ETH @ 15 ETH op marge hebt verkocht en je positie is open, dan zal je Proof of Reserves-saldo een positieve +15 ETH-aanpassing aan je ETH-saldo weergeven. Er zal geen negatieve aanpassing zijn van uw BTC-saldo. Uw ETH-activasaldo onder bewaring van Kraken zal uw ETH-saldo op dat moment bevatten, aangepast met de positieve +15 ETH-aanpassing voor uw margeposities. Uw BTC-activasaldo onder bewaring van Kraken zal hetzelfde blijven.

Opmerking: De hierboven beschreven futuresmethodologie is van kracht vanaf de Proof of Reserves-beoordelingen van mei 2023.

Futuressaldi

Als u op het moment van de beoordeling saldi in uw futuresportfolio had, zal er een aparte Proof of Reserves-record bestaan voor uw futuresonderpandssaldi. Uw saldi worden aangepast met ongerealiseerde winst en verlies voor futurestransacties met enkel onderpand. Dit omvat dezelfde activa die binnen het bereik vallen als voor spot en marge en maakt deel uit van dezelfde merkle-boom (met een eigen merkle-boom-ID). 

Voorbeeld 1

Als je 1 BTC in je futureswallet had en je opent een positie in BTC Perp Single Collateral, die een ongerealiseerde winst en verlies van -0,1 BTC heeft, dan zal je BTC-saldo onder bewaring van Kraken 0,9 BTC zijn (je 1 BTC, aangepast met -0,1 BTC voor ongerealiseerde winst en verlies).

Voorbeeld 2

Als je 1 BTC in je futureswallet had en je opent een positie in BTC Perp Multi-Collateral, die een ongerealiseerde winst en verlies van USD -100 heeft, dan zal je BTC-saldo in bewaring bij Kraken 1 BTC zijn (je 1 BTC wordt niet gecorrigeerd met de ongerealiseerde winst en verlies, omdat die wordt bijgehouden in USD. USD is geen asset die binnen het bereik valt in het kader van deze beoordeling).

Opmerking: De hierboven beschreven futuresmethodologie is van kracht vanaf de Proof of Reserves-beoordelingen van mei 2023. 

Hoe verifieer ik dat mijn account is opgenomen in de beoordeling van het Bewijs van reserves?

Eenvoudige verificatie

Volg de onderstaande stappen om cryptografisch te verifiëren of uw Kraken-accountsaldo is opgenomen in de meest recente beoordeling voor Proof of Reserves.

Opmerking: Deze verificatie weerspiegelt alleen de tegoeden van je account in de assets die binnen het bereik vallen op het moment van de beoordeling. Het weerspiegelt geen latere transacties, noch weerspiegelt het saldi in activa die niet binnen het bereik vallen.

1. Log in op je Kraken-account en navigeer naar de pagina Proof of Reserves in de Kraken Pro-interface (pro.kraken.com) (accountpictogram > Proof of Reserves). 

Kraken Proof of Reserves review list

2. Selecteer het tabblad Proof of Reserves. Dit bevat onze meest recente geverifieerde reserveverhoudingen, evenals specifieke informatie voor uw account. Uw account toont recente rapporten voor Proof of Reserves waarin uw accountsaldo werd geverifieerd, inclusief de datum van het rapport, de provider en het beoordelingsbereik. 

Kraken Proof of Reserves review list

3. Selecteer de datum en klik op Verifieer uzelf. Hier vindt u een bevestiging van de saldi op het moment van de beoordeling, evenals een gids voor het verifiëren van uw gegevens.

Kraken audit details

Verifiëren bij de onafhankelijke accountant

  • Gebruik je merkle-blad-ID - kopieer de eerste 16 tekens en voer ze in de tools van de externe accountant in om je tegoeden op te vragen en je ID in het merkle-boompad te bekijken. De tool van de externe accountant wordt in een apart venster geopend. 

Opmerking: dit is beschikbaar vanaf 2023 beoordelingen. Raadpleeg voor eerdere beoordelingen de webpagina van onze partner voor de verificatietools.

Kraken audit details

Verifiëren bij Kraken

  • Verifieer je record-ID - volg de stappen om je record-ID opnieuw te maken, die je accountgegevens en de beoordelings-ID (uniek voor elke rapportdatum) uniek identificeert
  • Verifieer je merkle-blad-ID - volg de stappen om je merkle-blad-ID opnieuw te maken, die je account uniek identificeert, samen met de tegoeden op het moment van de momentopname van de beoordeling 
  • Bevestig je merkle-blad-ID in de merkle-boom - bevestig dat je ID bij de merkle-boom hoort en valideer het pad naar het merkle-boomhoofd, die wordt geverifieerd door onze externe accountant en wordt gedeeld door alle klanten

Opmerking: dit is beschikbaar vanaf 2023 beoordelingen. Raadpleeg voor eerdere beoordelingen de webpagina van onze partner voor de verificatietools.

Kraken audit details
Kraken audit details
Kraken audit details

Geavanceerde verificatie

Technisch onderlegde klanten willen misschien zelf hun specifieke hash van het bladknooppunt van de merkle-boom reconstrueren en hun tegoeden in de merkle-boom programmatisch opzoeken, in plaats van in de visuele tools van Kraken of een externe accountant. 

U kunt de volgende verificatiestappen in code uitvoeren:

  1. Je kunt het genereren van je merkle-boomblad-ID voor je account verifiëren met de hieronder beschreven stappen.  

  2. Vervolgens kunt u uw merkle-boompad voor de blad-ID verifiëren en het pad van uw positie naar het hoofdknooppunt reconstrueren. Wij bieden volledige transparantie en nemen ook je zusterblad-ID's op. 

De vereiste stappen, in pseudocode, om het record-ID en merkle-blad te reconstrueren op basis van uw accountcode, Kraken IIBAN, beoordelings-ID en saldi, worden hieronder beschreven. Merk op dat de resultaten gevoelig zijn voor de specifieke tekenreeksindeling van saldi en de volgorde van de beoordeelde activa, zoals weergegeven op de pagina Proof of Reserves.

  • Record-ID = SHA256 (aaneengeschakeld (Account Code, Kraken IIBAN, beoordelings-ID))
  • Tegoeden = ""
  • Voor elk activum:
    • Tegoeden = aaneengeschakeld (Asset, ":", AssetBalances[asset])
  • Merkle-hash = aaneengeschakeld (record-ID, ",", tegoeden)
  • Merkle-blad = substring (SHA256 (merkle-hash), 0, 16)

Nadat uw merkle-blad is geïdentificeerd, kunt u een SHA256-verificatie met HEX-waarden gebruiken om het merkle-boompad te reconstrueren.

Specifieke voorbeelden worden ook gedemonstreerd in de onderstaande codefragmenten. Het resulterende merkle-blad is ook zichtbaar in de beoordelingsdetails, zodat je kunt bevestigen dat je dit correct hebt gereconstrueerd.

python

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

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

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

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

Tekortkomingen en toekomstige verbeteringen

In het belang van transparantie willen we graag enkele tekortkomingen in het proces Bewijs van reserves met je delen die we hebben geïdentificeerd.

  • Een Proof of Reserves bewijst de controle over geld van de keten op het moment van de beoordeling, maar kan niet het exclusieve bezit van privésleutels bewijzen die theoretisch door een aanvaller gedupliceerd kunnen zijn.
  • De procedure kan geen verborgen lasten identificeren of bewijzen dat er geen geld geleend is om voor de beoordeling te slagen. Ook kunnen er sleutels verloren zijn gegaan of geld gestolen zijn sinds de laatste beoordeling.
  • De accountant moet competent en onafhankelijk zijn om het risico van dubbelhartigheid van de kant van de onderzochte of samenspanning tussen de partijen te minimaliseren.
  • We proberen een aantal van deze tekortkomingen te beperken door een gerespecteerd, onafhankelijk extern bedrijf in te schakelen voor ons Proof of Reserves en door deze beoordelingen regelmatig uit te voeren. Wij bieden ook transparantie over deze gegevens direct in ons klantenplatform. 
Account maken

De hierboven met een asterisk (*) gemarkeerde reservehoudingen kunnen aanzienlijk veranderen bij het vergelijken van Bewijs van reserves-rapporten van Kraken als gevolg van productwijzigingen en verbeteringen aan onze bewaarinfrastructuur in de loop van de tijd, wat van invloed kan zijn op de classificatie van bepaalde assets die in deze wallets worden aangehouden. In overeenstemming met de huidige praktijk wordt in alle rapporten een uitleg van de precieze Bewijs van reserves-methodologie opgenomen.