Bevis for reserver

Bevis for, at dine midler er i sikkerhed – til enhver tid.

Dato for snapshot

BTC icon

BTC

Reservekvote*

100.3 %

ETH icon

ETH

Reservekvote*

101.3 %

SOL icon

SOL

Reservekvote*

101.1 %

USDC icon

USDC

Reservekvote*

105 %+

USDT icon

USDT

Reservekvote*

105 %+

XRP icon

XRP

Reservekvote*

100.6 %

ADA icon

ADA

Reservekvote*

102.2 %

Regnskabspligt; regelmæssige evalueringer

Hos Kraken tilbyder vi dig ikke kun at handle med banebrydende digitale aktiver – vi arbejder på at anvende gennemskueligheden af de open-source blockchains, de kører på.

Vores regelmæssige gennemgang af bevis for reserver gør det nemt for kunderne at kontrollere, at de aktuelle saldi, de har, understøttes af virkelige aktiver, alt sammen med nogle få nemme klik på deres konto.

En avanceret kryptografisk regnskabsprocedure, der regelmæssigt udføres af pålidelige revisorer, Bevis for reserver, lader dig verificere, at Kraken overholder strenge standarder for ansvarlighed og overgår den gennemsigtighed, der tilbydes af ældre finansielle virksomheder.

Hyppige spørgsmål

Hvad er bevis for reserver?

En evaluering af et bevis på reserver (PoR) er en procedure, som udføres af en uafhængig revisor fra tredjepart. Den har til formål at bekræfte, at en depotbank opbevarer de aktiver, som denne angiver, på vegne af dennes kunder. Denne revisor tager et anonymiseret snapshot af alle saldi og samler dem i et Merkle-træ – en privatlivsvenlig datastruktur, der sammenfatter alle kundesaldi.

Merkle Root Hash

Derfra henter revisoren en Merkle-rod: Et kryptografisk fingeraftryk, der entydigt identificerer kombinationen af disse saldi på det tidspunkt, hvor snapshottet blev taget.

Revisoren indsamler derefter digitale underskrifter fra Kraken, som beviser ejerskab over on-chain-adresserne med offentligt verificerbare saldi. Endelig sammenligner og bekræfter revisoren, at disse saldi overstiger eller svarer til de klientsaldi, der er repræsenteret i Merkle-træet, og at klientaktiverne derfor er under Kraks kontrol.

En kunde kan uafhængigt kontrollere, hvorvidt dennes saldo blev medtaget i processen til reservebeviser ved at sammenligne udvalgte data med Merkle-roden. Alle ændringer, der foretages af resten af dataene, uanset hvor små de er, påvirker roden, hvilket gør manipulation tydelig.

Du kan finde vores rapport om reservebeviser her.

Hvad dækker reservebeviser?

Spot-saldi

Evalueringen vil indeholde alle dine saldi i de omfattede aktiver, og som du ejer på det tidspunkt, hvor snapshottet blev taget. Følgende aktiver er omfattet i henhold til den seneste evaluering: Bitcoin (BTC), Ether (ETH), Solana (SOL), USD Coin (USDC), Tether (USDT) og Ripple (XRP).

Staking-saldi

Hvis du havde saldi, som var fordelt til on-chain staking på det tidspunkt, hvor snapshottet blev taget, vil værdien af din stakede saldo blive sammenlagt med din spotsaldo under en enkelt saldo.

Marginhandler

Hvis du havde marginpositioner på dette tidspunkt, ville du få justeret din samlede saldo som følge af positive positioners værdi.

Eksempel 1

Hvis du købte 1 BTC/USD @ 30.000 USD på margin, og din position er åben, vil saldoen i dit reservebevis afspejle en positiv justering af din BTC-saldo på +1 BTC. Der vil ikke være nogen negativ justering af din USD-saldo. Din BTC-aktivsaldo, som opbevares i Krakens depotbank, vil omfatte din BTC-saldo på det tidspunkt, justeret iht. den positive + 1 BTC-justering af din marginposition. Din USD-aktivsaldo forbliver den samme.

Eksempel 2

Hvis du solgte 1 BTC/ETH @ 15 ETH på margin, og din position er åben, vil saldoen i dit reservebevis afspejle en positiv justering af din ETH-saldo på +15 ETH. Der vil ikke være nogen negativ justering af din BTC-saldo. Din ETH-aktivsaldo, som opbevares i Kraken-depotbanken, vil omfatte din ETH-saldo på dette tidspunkt, justeret iht. den positive + 15 ETH-justering som følge af dine marginpositioner. Din BTC-aktivsaldo, som opbevares i Kraken-depotbanken, vil forblive den samme.

Bemærk: Den fremgangsmåde vedrørende futures, som er beskrevet ovenfor, gælder fra evalueringerne af reservebevis fra maj 2023.

Futuressaldi

Hvis du havde saldi i din futures-tegnebog på det tidspunkt, hvor evalueringen blev foretaget, foreligger der en separat registrering i reservebeviserne vedrørende dine saldi til sikkerhedsstillelse for futures. Dine saldi bliver justeret af uindfriede indtjening og tab i forbindelse med handler med futures, hvor én type aktiv benyttes som sikkerhedsstillelse. Dette vil omfatte de samme aktiver, som indgår ved spot og margin, og det vil være en del af det samme Merkle-træ (med sit eget Merkle-ID på et blad). 

Eksempel 1

Hvis du havde 1 BTC i din futures-tegnebog, og du åbner en position i BTC Perp med én type aktiv som sikkerhedsstillelse, som har -0,1 BTC uindfriet indtjening og tab, vil din BTC-saldo, som opbevares i Kraken-depotbanken, være 0,9 BTC (din ene BTC, justeret med -0,1 BTC pga. uindfriet indtjening og tab).

Eksempel 2

Hvis du havde 1 BTC i din futures-tegnebog, og du åbner en position i BTC Perp med flere typer aktiv som sikkerhedsstillelse, som har -100,0 USD uindfriet indtjening og tab, vil din BTC-saldo, som opbevares i Kraken-depotbanken, være 1 BTC (din ene BTC justeres ikke af uindfriet indtjening og tab, eftersom dette spores i USD, og USD ikke er et aktiv, som indgår i denne evaluering).

Bemærk: Den fremgangsmåde vedrørende futures, som er beskrevet ovenfor, gælder fra evalueringerne af reservebevis fra maj 2023. 

Hvordan kontrollerer jeg, at min konto er omfattet af evalueringen af reservebeviser?

Simpel verificering

Følg nedenstående trin for at kontrollere kryptografisk, at saldoen på din Kraken-konto er omfattet af den seneste evaluering af reservebeviser.

Bemærk: Denne kontrol afspejler kun dine konto-saldi i de aktiver, der er omfattet på det tidspunkt, hvor evalueringen blev foretaget. Den afspejler hverken nogen efterfølgende handler eller transaktioner; heller ikke saldi med aktiver, der ikke er omfattet.

1. Log ind på din Kraken-konto, og gå til siden "Bevis for reserver" på Kraken Pro-grænsefladen (pro.kraken.com) (Konto-ikon > Bevis for reserver). 

Kraken Proof of Reserves review list

2. Vælg fanen Bevis for reserver . Dette vil omfatte de af vores reserveandele, som sidst er blevet kontrolleret, samt specifikke oplysninger om din konto. Din konto vil vise de seneste rapporter vedrørende reservebeviser, hvor din kontosaldo er blevet kontrolleret, herunder datoen for rapporten, udbyderen og omfanget af vurderingen. 

Kraken Proof of Reserves review list

3. Vælg datoen, og klik på Verificer dig selv. Her finder du en bekræftelse af de saldi, du havde på det tidspunkt, hvor evalueringen blev udført, samt en vejledning i, hvordan du kontrollerer dine oplysninger.

Kraken audit details

Kontroller med tredjepartsrevisoren

  • Brug dit ID fra Merkle-bladet – kopiér de første 16 tegn, og sæt dem ind i tredjeparts-revisorens værktøjer for at hente dine saldi og evaluere dit ID i Merkle-træets sti. Tredjeparts-revisorens værktøj åbner i et separat vindue. 

Bemærk: Dette har været tilgængeligt fra 2023-evalueringerne og fremefter. Hvis du vil se forudgående evalueringer, henviser vi til vores partners hjemmeside, hvor kontrolværktøjerne kan findes.

Kraken audit details

Bekræft med Kraken

  • Kontrollér dit registrerings-ID – følg processen for at gendanne dit registrerings-ID, som udelukkende identificerer dine kontooplysninger og evaluerings-ID'et (unikt for hver rapporteringsdato).
  • Kontrollér dit ID fra Merkle-bladet – følg processen for at gendanne dit Merkle-blads ID, som udelukkende identificerer din konto sammen med de saldi, du har på det tidspunkt, hvor evalueringssnapshottet blev taget. 
  • Bekræft dit Merkle-blads ID i Merkle-træet – bekræft, at dit ID hører til Merkle-træet, og godkend stien til Merkle-træets rod, som kontrolleres af vores tredjeparts-revisor og er fælles for alle kunder.

Bemærk: Dette har været tilgængeligt fra 2023-evalueringerne og fremefter. Hvis du vil se forudgående evalueringer, henviser vi til vores partners hjemmeside, hvor kontrolværktøjerne kan findes.

Kraken audit details
Kraken audit details
Kraken audit details

Avanceret verificering

Teknologisk kyndige kunder vil somme tider gerne kunne gendanne knude-hashkrypteringen fra bladet på deres Merkle-træ uafhængigt og finde deres saldi i Merkle-træet programmatisk i stedet for i de visuelle værktøjer, der er rådighed hos Kraken eller tredjeparts-revisoren. 

Du kan udføre følgende kontroltrin i kode:

  1. Du kan kontrollere genereringen af Merkle-træets blad-ID for din konto vha. nedenstående trin.  

  2. Derefter kan du kontrollere dit Merkle-træs sti til blad-ID'et og gendanne stien fra din position til rodens knude. Vi giver fuld gennemskuelighed og medtager også søskende-bladenes ID'er. 

De nødvendige trin, i pseudokode, til at gendanne registrerings-ID'et og Merkle-bladet fra din kontokode, Kraken IIBAN, evaluerings-ID samt saldi er anført nedenfor. Bemærk, at resultaterne er følsomme over for den særlige strengformatering af saldi og rækkefølgen af de aktiver, der evalueres, som det fremgår på siden Bevis for reserver.

  • Registrerings-ID = SHA256(sammenkæde(Kontokode, Kraken IIBAN, Evaluerings-ID))
  • Saldi = ""
  • For hvert aktiv:
    • Saldi = sammenkæde(Aktiv, ":", AktivSaldi[asset])
  • Merkle-hashkryptering = sammenkæde(Registrerings-ID, “,”, Saldi)
  • Merkle-blad = understreng(SHA256(Merkle-hash), 0, 16)

Når dit Merkle-blad er blevet identificeret, kan du bruge en SHA256-verifikation med HEX-værdier til at gendanne Merkle-træets sti.

Der vises også konkrete eksempler i nedenstående kodeudsnit. Det deraf følgende Merkle-blad kan også ses i evalueringsoplysningerne som hjælp til at bekræfte, at du har gendannet det korrekt.

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 kommende forbedringer

Som fortalere for gennemskuelighed vil vi gerne dele nogle af de mangler, vi har fundet i processen vedrørende reservebeviser.

  • Et bevis for reserver indebærer et bevis for, at der er kontrol over on-chain-midler på det tidspunkt, hvor evalueringen blev udført, men kan ikke bevise eksklusivt ejerskab af private nøgler, som teoretisk kan være blevet kopieret af en angriber.
  • Proceduren kan ikke identificere nogen skjulte hindringer eller bevise, at midlerne ikke er blevet lånt for at kunne bestå evalueringen. Ligeledes kan nøglerne være blevet tabt eller midlerne stjålet siden sidste evaluering.
  • Revisoren skal være kompetent og uafhængig for at minimere risikoen for duplikater hos den undersøgte part eller for hemmeligt samarbejde parterne imellem.
  • Vi bestræber os på at begrænse nogle af disse mangler ved at samarbejde med et afholdt, uafhængigt tredjepartsfirma vedrørende vores reservebeviser og udføre disse evalueringer med faste intervaller. Vi giver også gennemskuelighed direkte på vores kundeplatform, hvad angår disse data. 
Opret konto

Reservekvotetallene, der er markeret med en asterisk (*) ovenfor, kan ændre sig væsentligt ved sammenligning med Krakens rapporter med bevis for reserver pga. produktændringer og -forbedringer i vores infrastruktur til opbevaring hen over tid, hvilket kan påvirke klassificeringen af bestemte aktiver, der opbevares i disse wallets. I tråd med aktuel praksis er en forklaring på den præcise Bevis for reserver-metodologi inkluderet i alle rapporter.