Datum för ögonblicksbild
BTC
Reservförhållande*
100.3 %
ETH
Reservförhållande*
101.3 %
SOL
Reservförhållande*
101.1 %
USDC
Reservförhållande*
105+ %
USDT
Reservförhållande*
105+ %
XRP
Reservförhållande*
100.6 %
ADA
Reservförhållande*
102.2 %
Ansvarsskyldighet och regelbundna granskningar
På Kraken erbjuder vi möjlighet att handla med avancerade digitala tillgångar, men vi vill även dra nytta av transparensen som blockkedjornas öppna källkod medför.
Våra regelbundna PoR-granskningar gör det enkelt för kunderna att verifiera att de saldon de innehar backas upp av verkliga tillgångar, allt med bara några få klick på kontot.
Med en avancerad kryptografisk redovisningsprocedur som utförs regelbundet av betrodda revisorer kan du med hjälp av PoR verifiera att Kraken uppfyller stränga standarder för redovisningsskyldighet och att den transparens som tidigare finansbolag erbjuder överskrids.
Vanliga frågor
Vad är PoR?
En PoR-granskning (Proof of Reserves eller bevis på reserver) är en procedur som utförs av en oberoende revisor. Avsikten är att bekräfta att förvaringsinstitutet innehar de tillgångar det säger sig inneha för kundernas räkning. Revisorn tar en anonymiserad ögonblicksbild av alla saldon som innehas och sammanställer dem i ett Merkleträd – en sekretessvänlig datastruktur som innefattar alla kundsaldon.

Därefter erhåller revisorn en Merklerot: ett kryptografiskt fingeravtryck som på ett unikt sätt identifierar kombinationen av dessa saldon vid den tidpunkt då ögonblicksbilden skapades.
Revisorn samlar sedan in digitala signaturer som skapats av Kraken, vilket bevisar ägarskap över adresserna med offentligt verifierbara saldon i kedjan. Slutligen jämför och bekräftar revisorn att dessa saldon överskrider eller stämmer överens med de klientsaldon som representeras i Merkle-trädet och därmed att kundens tillgångar är i Krakens kontroll.
Alla kunder kan oberoende kontrollera att deras saldo inkluderats i PoR-proceduren genom att jämföra utvalda data med Merkleroten. Alla ändringar som görs i resten av informationen, oavsett storlek, påverkar roten, vilket gör manipulering uppenbar.
Här finns vår PoR-rapport.
Vad visar PoR?
Spotsaldon
Granskningen innehåller alla dina saldon för tillgångar som omfattas och innehas vid tidpunkten då ögonblicksbilden tas. Vår senaste granskning omfattade följande tillgångar: Bitcoin (BTC), Ether (ETH), Solana (SOL), USD Coin (USDC), Tether (USDT) och Ripple (XRP).
Stakingsaldon
Om du har stakingsaldon på kedjan när ögonblicksbilden tas slås värdet av ditt stakingsaldo ihop med ditt spotsaldo till ett enda saldo.
Marginalhandel
Om du har marginalpositioner vid granskningstidpunkten ser du ditt totala saldo, justerat med värden för positiva positioner.
Exempel 1
Om du köpte 1 BTC/USD för 30 000 USD med marginal och din position är öppen speglar ditt PoR-saldo en positiv justering med +1 BTC för ditt BTC-saldo. Inga negativa justeringar av USD-saldot görs. Ditt BTC-tillgångssaldo som hålls i förvar hos Kraken omfattar då ditt BTC-saldo vid granskningstidpunkten, justerat med den positiva +1 BTC-justeringen för din marginalposition. Ditt USD-tillgångssaldo ändras inte.
Exempel 2
Om du köpte 1 BTC/ETH för 15 ETH med marginal och din position är öppen speglar ditt PoR-saldo en positiv justering med +15 ETH för ditt ETH-saldo. Inga negativa justeringar av BTC-saldot görs. Ditt ETH-tillgångssaldo som hålls i förvar hos Kraken omfattar ditt ETH-saldo vid granskningstidpunkten, justerat med den positiva +15 ETH-justeringen för dina marginalpositioner. Ditt BTC-tillgångssaldo som hålls i förvar hos Kraken ändras inte.
Obs: Terminsmetoden som beskrivs ovan trädde i kraft från och med PoS-granskningarna i maj 2023.
Terminssaldo
Om du har saldon i din terminsplånbok vid granskningstidpunkten finns det en separat PoR-post för terminernas säkerheter. För terminspositioner med en säkerhet justeras saldot med det orealiserade resultatet. Samma tillgångar omfattas som för spot- och marginaltillgångar och dessa ingår i samma Merkleträd (med ett eget Merklelöv-id).
Exempel 1
Om du hade 1 BTC i din terminsplånbok och du öppnar en position i eviga BTC-terminer med en säkerhet vars orealiserade resultat är −0,1 BTC är ditt BTC-saldo som hålls i förvar hos Kraken 0,9 BTC (1 BTC justerad för −0,1 BTC i orealiserat resultat).
Exempel 2
Om du hade 1 BTC i din terminsplånbok och du öppnar en position i eviga BTC-terminer med flera säkerheter vars orealiserade resultat är −100,0 USD är ditt BTC-saldo som hålls i förvar hos Kraken 1 BTC (1 BTC justeras inte med det orealiserade resultatet eftersom det uttrycks i USD och USD som tillgång inte omfattas av denna granskning).
Obs: Terminsmetoden som beskrivs ovan trädde i kraft från och med PoS-granskningarna i maj 2023.
Hur kontrollerar jag att mitt konto ingick i PoR-granskningen?
Enkel verifiering
Följ stegen nedan för att verifiera kryptografiskt att ditt Kraken-kontosaldo ingick i den senaste PoR-granskningen.
Obs: Den här verifieringen speglar bara dina kontosaldon för tillgångar som omfattas vid granskningstidpunkten. Den speglar inga efterföljande positioner eller transaktioner, inte heller saldon som innehas i tillgångar som inte omfattas av granskningen.
1. Logga in på ditt Kraken-konto och navigera till PoR-sidan i Kraken Pro-gränssnittet (pro.kraken.com) (Kontoikonen > Bevis på reserver).

2. Välj fliken Bevis på reserver. Detta omfattar våra senaste verifierade reservförhållanden samt specifik information för ditt konto. Ditt konto kommer att visa nyligen upprättade PoR-rapporter där ditt kontosaldo verifierades, inklusive rapportdatum, leverantör och granskningens omfattning.

3. Välj datum och klicka på Verifiera själv. Här finns en bekräftelse av de saldon som innehades vid granskningstidpunkten liksom en guide för hur du verifierar dina uppgifter.

Verifiera med revisor från tredje part
-
Använd ditt Merklelöv-id – kopiera de första 16 tecknen och ange dem i den oberoende revisorns verktyg för att hämta dina saldon och granska ditt id i Merkleträdet. Den oberoende revisorns verktyg öppnas i ett separat fönster.
Obs: Detta är tillgängligt från och med 2023 års granskningar och framåt. Verifieringsverktygen för tidigare granskningar finns på vår partners webbplats.

Verifiera med Kraken
- Verifiera ditt post-id – följ stegen för att återskapa ditt post-id, som unikt identifierar dina kontouppgifter och gransknings-id (unikt för varje rapportdatum).
- Verifiera ditt Merklelöv-id – följ stegen för att återskapa ditt Merklelöv-id, som unikt identifierar ditt konto tillsammans med de saldon som innehades vid granskningstidpunkten.
- Bekräfta ditt Merklelöv-id i Merkleträdet – bekräfta att ditt id finns i Merkleträdet och validera vägen till Merkleträdets rot, som verifieras av vår oberoende revisor och delas av alla kunder.
Obs: Detta är tillgängligt från och med 2023 års granskningar och framåt. Verifieringsverktygen för tidigare granskningar finns på vår partners webbplats.



Avancerad verifiering
Teknikkunniga kunder kan vilja rekonstruera hashvärdet för sin lövnod i Merkleträdet och kontrollera sina saldon i Merkleträdet programmatiskt istället för i de visuella verktyg som tillhandahålls av Kraken eller den oberoende revisorn.
Du kan utföra följande verifieringssteg med kod:
-
Du kan verifiera genereringen av Merkleträdets löv-id för ditt konto enligt stegen nedan.
-
Du kan sedan verifiera Merkleträdvägen för ditt löv-id och rekonstruera vägen från din position till rotnoden. Vi erbjuder full transparens och inkluderar även id:n för löv på samma nivå.
Nödvändiga steg, i pseudokod, för att rekonstruera post-id och Merklelövet från din kontokod, Krakens IIBAN, gransknings-id och saldon anges nedan. Observera att resultatet är känsligt för den särskilda formateringen av saldosträngar och ordningen på granskade tillgångar, som visas på PoR-sidan.
- 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 du har identifierat ditt Merklelöv kan du använda SHA256-verifiering med HEX-värden för att rekonstruera vägen i Merkleträdet.
Specifika exempel visas även i kodutdragen nedan. Det resulterande Merklelövet visas även i granskningsdetaljerna för att hjälpa dig att verifiera att rekonstruktionen är korrekt.
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_resultBrister och framtida förbättringar
I transparensens namn vill vi dela med oss av några brister i PoR-processen som vi har identifierat.
- I PoR ingår att bevisa kontrollen över tillgångar på kedjan vid granskningstidpunkten, men det kan inte bevisa exklusivt ägande av privata nycklar som i teorin kan ha blivit kopierade av en angripare.
- Proceduren kan inte identifiera några dolda hinder eller bevisa att tillgångarna inte hade lånats i syfte att klara granskningen. På ett liknande vis kan nycklar ha försvunnit eller tillgångar stulits sedan den senaste granskningen.
- Revisorn måste vara kompetent och oberoende för att minimera risken för dubbelspel hos den part som granskas eller maskopi bland parterna.
- Vi strävar efter att minska vissa av dessa brister genom att anlita ett respekterat, oberoende tredjepartsföretag för våra PoR-granskningar samt utföra dessa granskningar regelbundet. Vi erbjuder även transparens för dessa uppgifter direkt på vår kundplattform.
Reservförhållanden som markerats med en asterisk (*) ovan kan förändras väsentligt vid en jämförelse mellan Krakens PoR-rapporter på grund av produktförändringar och förbättringar i förvarsinfrastrukturen över tid, vilket kan påverka klassificeringen av vissa tillgångar som innehas i dessa plånböcker. I enlighet med aktuella rutiner ingår en förklaring av den specifika PoR-metodiken i alla rapporter.