Proof of Reserves

Bevis på at pengene dine er trygge – når som helst du ønsker det.

Dato for øyeblikksbilde

BTC icon

BTC

Reserveandel*

100.3 %

ETH icon

ETH

Reserveandel*

101.3 %

SOL icon

SOL

Reserveandel*

101.1 %

USDC icon

USDC

Reserveandel*

105 %+

USDT icon

USDT

Reserveandel*

105 %+

XRP icon

XRP

Reserveandel*

100.6 %

ADA icon

ADA

Reserveandel*

102.2 %

Ansvarlighet, vanlige gjennomganger

Hos Kraken tilbyr vi ikke bare muligheten til å handle banebrytende digitale eiendeler, vi jobber med å utnytte åpenheten til blokkjeder med den åpne kildekoden de bruker.

Våre regelmessige gjennomganger av Proof of Reserves gjør det enkelt for kundene å verifisere at saldoen de har innenfor omfanget, er støttet av reelle eiendeler, alt med bare noen få enkle klikk på kontoen deres.

Proof of Reserves er en avansert kryptografisk regnskapsprosedyre som utføres regelmessig av pålitelige regnskapsførere, og som lar deg verifisere at Kraken oppfyller strenge standarder for ansvarlighet og overgår den åpenheten som tilbys av eldre finansselskaper.

Ofte stilte spørsmål

Hva er Proof of Reserves?

En gjennomgang av Proof of Reserves (PoR) er en prosedyre som utføres av en uavhengig tredjeparts regnskapsfører. Dette har til hensikt å bekrefte at en depotmottaker oppbevarer de eiendelene den hevder å oppbevare på vegne av kundene sine. Regnskapsføreren tar et anonymisert øyeblikksbilde av alle saldoer og samler dem i et Merkle-tre – en personvernvennlig datastruktur som inneholder alle kunders saldoer.

Merkle Root Hash

Derfra får regnskapsføreren en Merkle-rot: et kryptografisk fingeravtrykk som unikt identifiserer kombinasjonen av disse saldoene på det tidspunktet da øyeblikksbildet ble opprettet.

Regnskapsføreren samler deretter inn digitale signaturer produsert av Kraken, som beviser eierskap over adressene i kjeden med offentlig verifiserbare saldoer. Til slutt sammenligner og verifiserer regnskapsføreren at disse saldoene overstiger eller samsvarer med kundesaldoene som er representert i Merkle-treet, og at kundemidlene dermed er under Krakens kontroll.

Alle kunder kan selvstendig kontrollere om deres saldo ble inkludert i prosedyren for Proof of Reserves ved å sammenligne utvalgte data med Merkle-roten. Alle endringer som gjøres i resten av dataene, uansett hvor små de er, vil påvirke roten – noe som gjør manipulering åpenbart.

Du finner Proof of Reserves-rapporten vår her.

Hva dekker Proof of Reserves?

Spotsaldoer

Gjennomgangen inneholder alle saldoene dine i de aktuelle eiendelene som du var investert i da øyeblikksbildet ble tatt. Følgende eiendeler er omfattet av den siste gjennomgangen: Bitcoin (BTC), Ether (ETH), Solana (SOL), USD Coin (USDC), Tether (USDT) og Ripple (XRP).

Staking-saldoer

Hvis du hadde saldoer allokert til on-chain staking på tidspunktet for øyeblikksbildet, vil verdien av den stakede saldoen din bli slått sammen med spotsaldoen din under én enkelt saldo.

Marginhandel

Hvis du hadde marginposisjoner på det tidspunktet, vil du se at totalsaldoen din ble justert med verdiene fra positive posisjoner.

Eksempel 1

Hvis du kjøpte 1 BTC/USD til 30 000 USD på margin, og posisjonen din er åpen, vil Proof of Reserves-saldoen vise en positiv justering på +1 BTC i BTC-saldoen din. Det skjer ikke en negativ justering av USD-saldoen din. BTC-eiendelssaldoen din som forvaltes av Kraken, vil inkludere BTC-saldoen din på det aktuelle tidspunktet, justert med den positive + 1 BTC-justeringen for marginposisjonen din. Saldoen på USD-eiendelene dine forblir den samme.

Eksempel 2

Hvis du solgte 1 BTC/USD til 15 ETH på margin, og posisjonen din er åpen, vil Proof of Reserves-saldoen vise en positiv justering på +15 ETH på ETH-saldoen din. Det skjer ikke en negativ justering av BTC-saldoen din. ETH-eiendelssaldoen din som forvaltes av Kraken, vil inkludere ETH-saldoen din på det aktuelle tidspunktet, justert med en positiv + 15 ETH-justering for marginposisjonene dine. BTC-eiendelssaldoen din som forvaltes av Kraken, forblir den samme.

Merk: Futures-metoden som står beskrevet ovenfor, trer i kraft fra og med Proof of Reserve-gjennomgangene som starter mai 2023.

Futures-saldoer

Hvis du hadde saldoer i futures-lommeboken din på gjennomgangstidspunktet, finnes det et separat Proof of Reserves-register for futures-sikringssaldoen din. Saldoene dine justeres av urealisert fortjeneste og tap for futureshandlene dine med enkeltsikkerhet. Dette vil inkludere de samme omfattende eiendelene som for spot og margin, og vil være del av samme Merkle-tre (med sin egen Merkle Leaf ID). 

Eksempel 1

Hvis du hadde 1 BTC i futures-lommeboken din, og du åpnet en posisjon i BTC Perp Single Collateral, som har –0,1 BTC i urealisert fortjeneste og tap, vil BTC-saldoen din som forvaltes av Kraken, være 0,9 BTC (din 1 BTC, justert med –0,1 BTC for urealisert fortjeneste og tap).

Eksempel 2

Hvis du hadde 1 BTC i futures-lommeboken din, og du åpnet en posisjon i BTC Perp Multi-Collateral, som har –100,0 USD i urealisert fortjeneste og tap, vil BTC-saldoen din som forvaltes av Kraken, være 1 BTC (din 1 BTC er ikke justert av urealisert fortjeneste og tap, da dette spores i USD, og USD ikke er en del av denne gjennomgangen).

Merk: Futures-metoden som står beskrevet ovenfor, trer i kraft fra og med Proof of Reserve-gjennomgangene som starter mai 2023. 

Hvordan verifiserer jeg at kontoen min var del av Proof of Reserves-gjennomgangen?

Enkel verifisering

Følg trinnene nedenfor for å kryptografisk verifisere at saldoen på Kraken-kontoen din er inkludert i den siste Proof of Reserves-gjennomgangen.

Merk: Denne verifiseringen vil kun gjenspeile saldoen på kontoen din i de aktuelle eiendelene på tidspunktet for gjennomgangen. Den gjenspeiler ikke påfølgende handler eller transaksjoner, og den vil ikke gjenspeile saldoer i eiendeler som faller utenfor omfanget.

1. Logg inn på Kraken-kontoen din, og naviger til Proof of Reserves-siden i Kraken Pro-grensesnittet (pro.kraken.com) (Konto-ikon > Proof of Reserves). 

Kraken Proof of Reserves review list

2. Velg Proof of Reserves-fanen. Dette vil omfatte vår sist verifiserte reserveandeler samt informasjon som er spesifikk for kontoen din. Kontoen din viser dine siste Proof of Reserves-rapporter der kontosaldoen din ble verifisert, inkludert datoen til rapporten, leverandøren og vurderingsomfanget. 

Kraken Proof of Reserves review list

3. Velg datoen og klikk på Bekreft selv. Her finner du bekreftelse på saldoene du hadde på gjennomgangstidspunktet, samt en veiledning om hvordan du kan bekrefte opplysningene dine.

Kraken audit details

Bekreft med tredjeparts regnskapsfører

  • Bruk din Merkle Leaf ID – kopier de første 16 tegnene og skriv dem inn i tredjeparts regnskapsførers verktøy for å hente saldoene dine og gjennomgå ID-en din i Merkle-trebanen. Verktøyet til tredjeparts regnskapsfører åpnes i et separat vindu. 

Merk: Dette har vært tilgjengelig fra og med 2023-gjennomganger. For tidligere gjennomgang kan du se nettstedet til partneren vår for å finne verifiseringsverktøyene.

Kraken audit details

Verifiser med Kraken

  • Verifiser din Record ID – følg trinnene for å gjenskape din Record ID, som unikt identifiserer kontoopplysningene dine og din Review ID (unik for hver rapporteringsdato)
  • Verifiser din Merkle Leaf ID – følg trinnene for å gjenskape din Merkle Leaf ID, som unikt identifiserer kontoen din sammen med saldoene ved tidspunktet for gjennomgangen 
  • Bekreft din Merkle Leaf ID i Merkle-treet – bekreft at ID-en din tilhører Merkle-treet, og valider banen til Merkle-treroten, som er verifisert av vår tredjeparts regnskapsfører og deles av alle kunder

Merk: Dette har vært tilgjengelig fra og med 2023-gjennomganger. For tidligere gjennomgang kan du se nettstedet til partneren vår for å finne verifiseringsverktøyene.

Kraken audit details
Kraken audit details
Kraken audit details

Avansert verifisering

Teknisk kyndige kunder kan ønske å rekonstruere sin spesifikke bladnode-hash i Merkle-treet uavhengig og slå opp saldoene i Merkle-treet programmatisk, i stedet for i verktøyene til Kraken eller den tredjeparts regnskapsføreren. 

Du kan utføre følgende verifiseringstrinn i kode:

  1. Du kan verifisere genereringen av din Merkle Tree Leaf ID for kontoen din ved å følge trinnene nedenfor.  

  2. Deretter kan du verifisere Merkle-trebanen din for Leaf ID og gjenskape banen fra posisjonen din til rotnoden. Vi tilbyr full åpenhet og tar også med dine sibling leaf ID-er. 

De nødvendige trinnene, i pseudokode, for å gjenskape Record ID og Merkle Leaf fra kontokoden din, Kraken IIBAN, Review ID and saldoene står beskrevet nedenfor. Merk at resultatene er følsomme for den spesifikke strengformateringen av saldoer og rekkefølgen på de gjennomgåtte eiendelene, som vist på Proof of Reserves-siden.

  • Record ID = SHA256(concatenate(Account Code, Kraken IIBAN, Review ID))
  • Balances = ""
  • ForEach Asset:
    • Balances = concatenate(Asset, ":", AssetBalances[asset])
  • Merkle Hash = concatenate(Record ID, “,”, Balances)
  • Merkle Leaf = substring(SHA256(Merkle Hash), 0, 16)

Når ditt Merkle Leaf er identifisert, kan du bruke en SHA256-verifisering med HEX-verdier for å gjenskape Merkle-trebanen.

Spesifikke eksempler er også demonstrert i kodebitene nedenfor. Det resulterende Merkle Leaf er også synlig i gjennomgangsdetaljene for å bekrefte at du har gjenskapt dette riktig.

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

Mangler og fremtidige forbedringer

For å være så åpen som mulig ønsker vi å dele noen av manglene til Proof of Reserves-prosessen som vi har identifisert.

  • Proof of Reserves innebærer å gi kontroll over midler på kjeden på gjennomgangstidspunktet, men kan ikke bevise eksklusiv besittelse av private nøkler som teoretisk sett kan ha blitt duplisert av en angriper.
  • Prosedyren kan ikke identifisere eventuelle skjulte heftelser eller bevise at midler ikke er lånt for å bestå gjennomgangen. Nøkler kan ha gått tapt eller midler kan ha blitt stjålet siden siste gjennomgang.
  • Regnskapsføreren må være kompetent og uavhengig for å minimere risikoen for uredelighet fra den kontrollerte parten eller ulovlig samarbeid mellom partene.
  • Vi har som mål å redusere noen av disse manglene ved å benytte et velrenommert, uavhengig tredjeparts selskap for vår Proof of Reserves, og vi utfører gjennomgangene med jevne mellomrom. Vi er også åpne om disse dataene direkte på kundeplattformen vår. 
Opprett konto

Tallene for reserveandel som er merket med asterisk (*) ovenfor, kan endres vesentlig når de sammenlignes med Krakens Proof of Reserves-rapporter på grunn av produktendringer og forbedringer til vår oppbevaringsstruktur over tid, som kan påvirke klassifiseringen av visse eiendeler i disse lommebøkene. I tråd med gjeldende praksis oppgis det en forklaring av presis metode for Proof of Reserves i alle rapporter.