Data do instantâneo
BTC
Rácio de reservas*
100.3%
ETH
Rácio de reservas*
101.3%
SOL
Rácio de reservas*
101.1%
USDC
Rácio de reservas*
105%+
USDT
Rácio de reservas*
105%+
XRP
Rácio de reservas*
100.6%
ADA
Rácio de reservas*
102.2%
Responsabilidade, revisões regulares
Na Kraken não nos limitamos a oferecer-lhe a capacidade para negociar em criptoativos topo de gama. Estamos a trabalhar para que possa beneficiar de transparência nas blockchains de código aberto nas quais esses criptoativos operam.
As nossas revisões regulares de prova de reservas tornam fácil para os clientes verificarem se os saldos abrangidos que possuem são suportados por ativos reais, tudo com apenas alguns cliques fáceis na conta.
Um procedimento avançado de contabilidade criptográfica realizado regularmente por contabilistas de confiança, a prova de reservas permite-lhe verificar se a Kraken está a cumprir normas rigorosas de responsabilidade e a exceder a transparência oferecida pelas sociedades financeiras tradicionais.
Perguntas frequentes
O que é a prova de reservas?
Uma revisão da prova de reservas (PoR) é um procedimento que é realizado por um contabilista terceiro independente. Isto destina-se a confirmar que um depositário possui os ativos que afirma manter em nome dos seus clientes. Este contabilista captura um instantâneo anonimizado de todos os saldos mantidos e agrega-os numa árvore de Merkle, uma estrutura de dados que preserva a privacidade e engloba todos os saldos dos clientes.

A partir daí, o contabilista obtém uma raiz de Merkle: uma impressão digital criptográfica que identifica exclusivamente a combinação destes saldos no momento em que o instantâneo foi criado.
O contabilista recolhe então as assinaturas digitais produzidas pela Kraken, que comprovam a propriedade dos endereços na cadeia com saldos validáveis publicamente. Por fim, o contabilista compara e verifica se estes saldos excedem ou correspondem aos saldos dos clientes representados na árvore de Merkle e, por conseguinte, se os ativos dos clientes estão sob o controlo da Kraken.
Qualquer cliente pode verificar de forma independente se o seu saldo foi incluído no procedimento de prova de reservas comparando dados selecionados com a raiz de Merkle. Quaisquer alterações efetuadas nos restantes dados, por mais pequenas que sejam, afetarão a raiz, tornando a adulteração óbvia.
O nosso relatório de prova de reservas pode ser encontrado aqui.
O que é que a prova de reservas abrange?
Saldos à vista
A revisão irá conter todos os seus saldos em ativos abrangidos, mantidos no momento em que o instantâneo foi captado. Os ativos que se seguem são abrangidos pela revisão mais recente: Bitcoin (BTC), Ether (ETH), Solana (SOL), USD Coin (USDC), Tether (USDT), e Ripple (XRP).
Saldos de staking
Se os seus saldos alocados para colocação em stake na cadeia no momento do instantâneo, o valor do seu saldo em stake será agregado ao seu saldo à vista num único saldo.
Negociação com margem
Se tinha posições com margem nesse momento, então deverá ver o seu saldo total ajustado pelos valores de posição positivos.
Exemplo 1
Se comprou 1 BTC/USD a 30 000 USD com margem e a sua posição está aberta, o seu saldo de prova de reservas irá refletir um ajuste positivo de +1 BTC no seu saldo BTC. Não vai existir um ajuste negativo ao seu saldo USD. O seu saldo do ativo BTC mantido sob custódia da Kraken irá incluir o seu saldo BTC a qualquer momento, ajustado pelo ajuste positivo de + 1 BTC para a sua posição com margem. O saldo do seu ativo de USD permanecerá o mesmo.
Exemplo 2
Se vendeu 1 BTC/ETH a 15 ETH com margem e a sua posição está aberta, o seu saldo de prova de reservas irá refletir um ajuste positivo de +15 ETH no seu saldo ETH. Não vai existir um ajuste negativo no seu saldo BTC. O seu saldo do ativo ETH mantido sob custódia da Kraken irá incluir o seu saldo ETH a qualquer momento, ajustado pelo ajuste positivo de + 15 ETH para as suas posições com margem. O seu saldo de ativo BTC mantido sob custódia da Kraken irá permanecer o mesmo.
Observação: A metodologia de futuros descrita acima entrou em vigor com as avaliações de prova de reservas em maio de 2023.
Saldos de futuros
Se tiver saldos na sua carteira de futuros no momento da revisão, irá existir um registo de prova de reservas em separado para os saldos colaterais de futuros. Os seus saldos são ajustados pelas perdas e lucros não realizados para negociações de futuros de garantia única. Isto irá incluir os mesmos ativos abrangidos para à vista e com margem e será parte da mesma árvore de Merkle (com o seu próprio ID de folha de Merkle).
Exemplo 1
Se tiver 1 BTC na sua carteira de futuros e abrir uma posição de garantia simples PERP BTC, que tem lucros e perdas não realizados de -0,1 BTC, então o seu saldo BTC mantido sob a custódia da Kraken será de 0,9 BTC (a sua 1 BTC, ajustada pelos P&L não realizados de -0,1 BTC).
Exemplo 2
Se tivesse 1 BTC na sua carteira de futuros e abrisse uma posição de Garantia múltipla PERP BTC, que tivesse Lucros e perdas de -100,00 USD não realizados, então o seu saldo BTC mantido sob a custódia da Kraken seria de 1 BTC (A sua 1 BTC não é ajustada pelos P&L não realizados, dado que tal é monitorizado em USD e os USD não estão abrangidos no ativo para esta revisão).
Observação: A metodologia de futuros descrita acima entrou em vigor com as avaliações de prova de reservas em maio de 2023.
Como posso confirmar que a minha conta foi incluída na avaliação da prova de reservas?
Verificação simples
Siga os passos abaixo para verificar criptograficamente a inclusão do saldo da sua conta Kraken na mais recente revisão de prova de reservas.
Observação: Esta verificação apenas vai refletir os saldos da sua conta nos ativos abrangidos no momento da revisão. Esta não vai refletir quaisquer negociações ou transações subsequentes, nem vai refletir saldos mantidos nos ativos que não estão abrangidos.
1. Inicie sessão na sua conta Kraken e navegue para a página de prova de reservas na interface da Kraken Pro (pro.kraken.com) (Ícone de conta > Prova de reservas).

2. Selecione o separador Prova de reservas. Isto irá incluir a nossa rácio de reservas verificada mais recente, assim como as informações específicas à sua conta. A sua conta irá apresentar os relatórios de prova de reservas recentes no qual o saldo da sua conta foi verificado, incluindo a data do relatório, o fornecedor e o âmbito da avaliação.

3. Selecionar a data e clicar em Validar por si. Aqui, poderá encontrar confirmação do saldo mantido no momento da revisão, assim como um guia sobre como verificar os seus detalhes.

Validar com contabilista externo
-
Utilizar o seu ID de folha de Merkle – copie os 16 primeiros caracteres e introduza-os nas ferramentas do contabilista terceiro para obter os seus saldos e rever o seu ID no caminho da árvore de Merkle. A ferramenta do contabilista terceiro irá abrir numa janela separada.
Observação: Isto foi disponibilizado a partir das avaliações de 2023 e posteriores. Para obter as avaliações anteriores, consulte a página web do nosso parceiro para encontrar as ferramentas de verificação.

Validar com a Kraken
- Verifique a sua ID de registo – siga os passos para recriar os seu ID de registo, que identifica de forma única os detalhes da sua conta e a ID da revisão (única para cada data de relatório)
- Verifique o seu ID de folha de Merkle – siga os passos para recrear o seu ID de folha de Merkle, o que identifica de forma única a sua conta, juntamente com os saldos mantidos no momento do instantâneo da revisão
- Confirme o seu ID de folha de Merkle na árvore de Merkle – confirme que o seu ID pertence à árvore de Merkle e valide o caminho até à raiz da árvore de Merkle, que é verificado pelo nosso contabilista terceiro e partilhado por todos os clientes
Observação: Isto foi disponibilizado a partir das avaliações de 2023 e posteriores. Para obter as avaliações anteriores, consulte a página web do nosso parceiro para encontrar as ferramentas de verificação.



Verificação avançada
Os clientes com conhecimentos tecnológicos podem optar por reconstruir de modo independente os seus hash do nó de folha da árvore de Merkle em particular e pesquisar os seus saldos programaticamente na árvore de Merkle em vez de utilizarem as ferramentas visuais proporcionadas pela Kraken ou por um contabilista terceiro.
Pode realizar os seguintes passos de verificação por código:
-
Pode verificar a geração do seu ID de folha de árvore de Merkle para a sua conta com os passos descritos abaixo.
-
Pode, em seguida, verificar o seu caminho para a árvore de Merkle para o ID da folha e reconstruir o caminho a partir da sua posição no nó de raiz. Proporcionamos uma transparência total e também incluímos os ID das folhas irmãs.
Os passos necessários, em pseudocódigo, para reconstruir o ID de registo e a folha de Merkle a partir do seu código de conta, IIBAN Kraken, ID da revisão e saldos são descritos abaixo. Tenha em atenção que os resultados são sensíveis à cadeia de formatação específica dos saldos e à ordem dos ativos revistos, conforme apresentado na página de prova de reservas.
- ID de registo = SHA256(concatenar(Código de conta, IIBAN Kraken, ID da revisão))
- Saldos = ""
- Para cada ativo:
- Saldos = concatenar(Ativo, ":", Saldos de ativo[asset])
- Hash de Merkle = concatenar(ID de registo, “,”, saldos)
- Folha de Merkle = subcadeia(SHA256(Hash de Merkle), 0, 16)
Após a sua folha de Merkle ser identificada, pode utilizar uma verificação SHA256 com valores HEX para reconstruir o caminho da árvore de Merkle.
Também são demonstrados exemplos específicos nos fragmentos de código abaixo. A folha de Merkle resultante também é visível nos detalhes de revisão, para ajudar a confirmar que os reconstituiu corretamente.
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_resultLacunas e melhorias futuras
Dado o interesse em defender a transparência gostaríamos de partilhar algumas das lacunas que identificamos no processo de prova de reservas.
- Uma prova de reservas envolve provar o controlo sobre os fundos na cadeia no momento da revisão, mas não pode provar a propriedade exclusiva de chaves privadas que podem ter sido, teoricamente, duplicadas por um atacante.
- O procedimento não consegue identificar quaisquer impedimentos ocultos ou provar que fundos não foram emprestados com o objetivo de obter uma aprovação na revisão. De forma semelhante, chaves podem ter sido perdidas ou fundos roubados desde a última revisão.
- O contabilista deve ser competente e independente para minimizar o risco de falsidade da parte do examinado ou de colusão entre as partes.
- Procuramos mitigar algumas destas lacunas ao envolver uma empresa terceira, independente e respeitada para as nossas provas de reserva e para a realização destas revisões a um ritmo regular. Também garantimos transparência sobre estes dados diretamente na nossa plataforma de cliente.
Os números de rácio de reservas assinalados com um asterisco (*) podem variar significativamente quando se comparam os relatórios da prova de reservas da Kraken, devido a alterações de produto e melhorias da nossa infraestrutura de custódia ao longo do tempo, o que pode afetar a classificação de determinados ativos detidos nessas carteiras. Para consistência com a prática atual, é incluída uma explicação precisa da metodologia da prova de reservas em todos os relatórios.