Дата снимка
BTC
Коэффициент резервирования
100.3 %
ETH
Коэффициент резервирования
101.3 %
SOL
Коэффициент резервирования
101.1 %
USDC
Коэффициент резервирования
105%+
USDT
Коэффициент резервирования
105%+
XRP
Коэффициент резервирования
100.6 %
ADA
Коэффициент резервирования
102.2 %
Ответственность, регулярные проверки
Kraken не просто предлагает возможность торговать передовыми цифровыми активами – мы стремимся использовать прозрачность открытых блокчейнов, на которых они функционируют.
Регулярно проводимое подтверждение резервов позволяет легко проверить, насколько ваши балансы подкреплены реальными активами. Вам нужно лишь выполнить несколько простых действий в вашем аккаунте.
Подтверждение резервов, представляющее собой расширенную процедуру криптографического учета, регулярно проводимую надежными бухгалтерами, позволяет убедиться в том, что Kraken соблюдает строгие стандарты отчетности и обеспечивает более высокий уровень прозрачности по сравнению с тем, что предлагают традиционные финансовые компании.
Часто задаваемые вопросы
Что такое подтверждение резервов?
Проверка подтверждения резервов (PoR) – это процедура, проводимая независимым сторонним бухгалтером. Ее цель – подтвердить, что хранитель действительно, согласно заявлениям, держит активы от имени своих клиентов. Этот бухгалтер делает анонимизированный снимок всех балансов и объединяет их в дерево Меркла – структуру данных, обеспечивающую конфиденциальность, в которой содержатся балансы всех клиентов.
Затем бухгалтер получает корень Меркла – криптографический отпечаток, который однозначно идентифицирует комбинацию этих балансов на момент создания снимка.
После этого бухгалтер собирает цифровые подписи, сгенерированные Kraken, которые подтверждают право собственности на ончейн-адреса с публично верифицируемыми балансами. И наконец, бухгалтер выполняет сравнение и подтверждает, что эти балансы превышают балансы клиентов, представленные в дереве Меркла, или совпадают с ними и, соответственно, что клиентские активы находятся под контролем Kraken.
Любой клиент может самостоятельно убедиться в том, что его баланс был включен в процедуру подтверждения резервов, сопоставив отдельные фрагменты данных с корнем Меркла. Любые изменения, внесенные в остальную часть данных, сколь бы незначительными они ни были, отразятся на корне, и это позволит обнаружить несанкционированное вмешательство.
Наш отчет о подтверждении резервов можно найти здесь.
Что включает в себя подтверждение резервов?
Спотовые балансы
Отчет будет включать все ваши балансы в соответствующих активах на момент создания снимка. Следующие активы вошли в отчет в рамках последней проверки: Bitcoin (BTC), Ether (ETH), Solana (SOL), USD Coin (USDC), Tether (USDT) и Ripple (XRP).
Стейкинговые балансы
Если на момент создания снимка у вас были балансы, задействованные в ончейн-стейкинге, их стоимость будет объединена в общую сумму с вашим спотовым балансом.
Маржинальная торговля
Если на тот момент у вас были открыты маржинальные позиции, то ваш общий баланс будет скорректирован с учетом положительной стоимости этих позиций.
Пример 1
Если вы купили 1 BTC/USD по цене 30 000 USD на марже и ваша позиция открыта, то на вашем балансе подтверждения резервов будет отражено положительное изменение в +1 BTC к вашему балансу BTC. Отрицательные корректировки вашего баланса в USD отражены не будут. Ваш баланс BTC, находящийся на хранении у Kraken, будет включать ваш баланс BTC на момент проверки с учетом положительной корректировки +1 BTC за вашу маржинальную позицию. Ваш баланс активов USD останется прежним.
Пример 2
Если вы продали 1 BTC/ETH по цене 15 ETH на марже и ваша позиция открыта, то на вашем балансе подтверждения резервов будет отражено положительное изменение в +15 ETH к вашему балансу ETH. Отрицательные корректировки вашего баланса в BTC отражены не будут. Ваш баланс ETH, находящийся на хранении у Kraken, будет включать ваш баланс ETH на момент проверки с учетом положительной корректировки +15 ETH за ваши маржинальные позиции. Ваш баланс активов BTC, находящийся на хранении у Kraken, останется прежним.
Обратите внимание. Методология для фьючерсов, описанная выше, применяется для проверок подтверждения резервов, начиная с мая 2023 года.
Фьючерсные балансы
Если на момент проверки у вас были балансы на фьючерсном кошельке, то для ваших залоговых балансов по фьючерсам будет создана отдельная запись в рамках отчета о подтверждении резервов. Ваши балансы корректируются с учетом нереализованной прибыли и убытков по однозалоговым фьючерсным сделкам. Отчет будет включать те же подлежащие проверке активы, что и для спотовых и маржинальных балансов, и станет частью того же дерева Меркла (с отдельным идентификатором листа Меркла).
Пример 1
Если в вашем фьючерсном кошельке есть 1 BTC и вы открыли позицию по бессрочному однозалоговому фьючерсу на BTC с нереализованной прибылью/убытком в -0,1 BTC, то ваш баланс BTC, находящийся на хранении у Kraken, составит 0,9 BTC (ваш 1 BTC с учётом корректировки на -0,1 BTC по нереализованной прибыли/убытку).
Пример 2
Если в вашем фьючерсном кошельке есть 1 BTC и вы открыли позицию по бессрочному мультизалоговому фьючерсу на BTC с нереализованной прибылью/убытком в -100 долл. США, то ваш баланс BTC, находящийся на хранении у Kraken, составит 1 BTC (ваш 1 BTC не будет скорректирован по нереализованной прибыли/убытку, так как она отслеживается в долларах США, а доллары США не входят в область данной проверки).
Обратите внимание. Методология для фьючерсов, описанная выше, применяется для проверок подтверждения резервов, начиная с мая 2023 года.
Как я могу убедиться, что мой аккаунт был включен в проверку подтверждения резервов?
Простая верификация
Выполните следующие шаги, чтобы криптографическим образом подтвердить включение баланса вашего аккаунта Kraken в последнюю проверку подтверждения резервов.
Обратите внимание. Это подтверждение отразит только балансы вашего аккаунта в соответствующих активах на момент проведения проверки. В нем не будут учитываться последующие сделки или транзакции, а также балансы в активах, не входящих в область проверки.
1. Войдите в свой аккаунт Kraken и перейдите на страницу подтверждения резервов в интерфейсе Kraken Pro (pro.kraken.com) (Значок аккаунта > Подтверждение резервов).
2. Нажмите на вкладку Подтверждение резервов. В ней будут отражены последние подтвержденные коэффициенты резервов, а также информация, относящаяся непосредственно к вашему аккаунту. В вашем аккаунте будут отображаться последние отчеты по подтверждению резервов, в которых был проверен баланс вашего счета, включая дату отчета, его поставщика и область проверки.
3. Выберите дату и нажмите Проверить самостоятельно. Здесь вы найдете подтверждение балансов, находившихся на хранении на момент проверки, а также инструкцию по проверке ваших данных.
Подтвердите с помощью стороннего бухгалтера
-
Используйте свой идентификатор листа Меркла – скопируйте первые 16 символов и введите их в инструменты стороннего бухгалтера, чтобы увидеть свои балансы и проверить свой идентификатор на пути дерева Меркла. Инструмент стороннего бухгалтера откроется в новом окне.
Обратите внимание. Эта возможность доступна начиная с проверок 2023 года. Для предыдущих проверок обращайтесь на сайт нашего партнера, где доступны необходимые инструменты для проверки.
Проверка с помощью Kraken
- Подтвердите идентификатор записи – выполните шаги для восстановления вашего идентификатора записи, который уникально идентифицирует данные вашего аккаунта, и идентификатора проверки (уникального для каждой даты отчета).
- Подтвердите идентификатор листа Меркла – выполните шаги для восстановления вашего идентификатора листа Меркла, который вместе с балансами, находившимися на хранении на момент создания снимка проверки, уникально идентифицирует ваш аккаунт.
- Подтвердите идентификатор листа Меркла на дереве Меркла – убедитесь, что ваш идентификатор принадлежит к данному дереву Меркла и проверьте путь к корню дерева Меркла, который верифицируется сторонним бухгалтером и является общим для всех клиентов.
Обратите внимание. Эта возможность доступна начиная с проверок 2023 года. Для предыдущих проверок обращайтесь на сайт нашего партнера, где доступны необходимые инструменты для проверки.
Расширенная верификация
Технически грамотные клиенты могут самостоятельно восстановить узел своего листа на дереве Меркла и найти свои балансы на этом дереве с помощью программы, вместо того чтобы использовать визуальные инструменты, предоставленные Kraken или сторонним бухгалтером.
Вы можете выполнить следующие шаги проверки с помощью кода.
-
Вы можете проверить создание идентификатора листа дерева Меркла для вашего аккаунта, выполнив следующие шаги.
-
Затем вы можете проверить путь до вашего идентификатора листа на дереве Меркла и восстановить путь от вашей позиции до корневого узла. Мы обеспечиваем полную прозрачность и предоставляем идентификаторы соседних листов на дереве Меркла.
Шаги, необходимые для восстановления идентификатора записи и листа Меркла на основе вашего кода аккаунта, IIBAN Kraken, идентификатора проверки и балансов, приведены ниже в виде псевдокода. Обратите внимание, что результаты чувствительны к определенному форматированию строк с балансами и порядку отображения активов, как это представлено на странице подтверждения резервов.
- 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)
Когда ваш лист Меркла будет идентифицирован, вы сможете использовать верификацию SHA256 со значениями HEX для восстановления пути на дереве Меркла.
Конкретные примеры также показаны в приведенных ниже фрагментах кода. Полученный лист Меркла также отображается в подробных сведениях о проверке, чтобы вы могли убедиться в правильности его восстановления.
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_resultНедостатки и будущие улучшения
В стремлении к максимальной прозрачности мы хотим поделиться некоторыми недостатками процесса подтверждения резервов, которые были нами выявлены.
- Подтверждение резервов подразумевает подтверждение контроля над средствами в блокчейне на момент проверки, но не может доказать исключительное владение закрытыми ключами, которые теоретически могли быть скопированы злоумышленником.
- Процедура не может выявить скрытые обременения или доказать, что средства не были взяты в долг с целью прохождения проверки. Также с момента последней проверки закрытые ключи могут быть утрачены, а средства – украдены.
- Бухгалтер должен быть компетентным и независимым, чтобы минимизировать риск мошенничества со стороны проверяемого или сговора между участниками.
- Мы стремимся снизить влияние некоторых из этих недостатков, сотрудничая с уважаемой независимой сторонней организацией для проведения подтверждения резервов и выполняя такие проверки регулярно. Мы также обеспечиваем прозрачность этих данных непосредственно на нашей клиентской платформе.
The reserve ratio figures marked with an asterisk (*) above may change materially when comparing Kraken's Proof of Reserves reports due to product changes and enhancements to our custodial infrastructure across time, which may affect the classification of certain of the assets held in these wallets. Consistent with current practice, an explanation of the precise Proof of Reserves methodology is included in all Reports.