Spatium SDK > SpatiumProtocol > syncDistributedEcdsaKey
syncDistributedEcdsaKey
open suspend override fun syncDistributedEcdsaKey(secretId: String, syncSessionId: String, curve: EcdsaCurve, derivationCoin: UInt, derivationAccount: UInt): String
Выполняет процедуру синхронизации распределенного ключа (отдельный помощник)
Каждый секрет используется независимо для генерации фрагментов распределенного ключа (BIP-44 с путем m/44'/(coin)'/(account)'/0'/0'
), и после с этими фрагментами выполняется синхронизация MPC ключа для получения составного публичного ключа для этой пары.
Вопреки тому, что каждая сессия содержит уникальный сет данных, полученный ключ детерминирован для последующих синхронизаций, например, каждый набор секретов, монета и аккаунт всегда создадут тот же составной ключ (и эфемерные приватные ключи)
В результате этой операции новые данные синхронизации сохранены в постоянное хранилище, доступ к которым можно получить с помощью session ID.
С этого момента можно свободно вызывать getEcdsaPublicKey(secretId, syncSessionId)
или signEcdsaMessage(secretId, syncSessionId, signSessionId, message)
пока данные синхронизации (или секрет) доступны в хранилище.
Возвращает
составной публичный ключ (который также можно получить позже с помощью getEcdsaPublicKey(secretId, syncSessionId)
позже)
Пример
// Считаем, что процедура синхронизации уже пройдена и соединение установлено
// Генерируем рандомный session ID для новой сессии подписания
val syncSessionId = UUID.randomUUID().toString()
// Выполняем ECDSA-over-secp256k1 процедуру синхронизации для ключа с путем ```m/44'/0'/0'/0'/0'```
val publicKey = syncDistributedEcdsaKey(secretId: String, syncSessionId: String, curve: EcdsaCurve, derivationCoin: UInt, derivationAccount: UInt)
// К этому моменту данные синхронизации уже сохранены в хранилище и составной ключ доступен к получению
val _publicKey = getEcdsaPublicKey(secretId: String, syncSessionId: String)
// Этот ключ, очевидно, является тем же ключом, который мы получаем из самой процедуры синхронизации
Assert.assertEquals(publicKey, _publicKey)
Параметры
androidJvm
Имя | Описание |
---|---|
secretId | ID (UUID) секрета используемого для синхронизации |
syncSessionId | ID (UUID) данной процедуры синхронизации |
curve | эллиптическая кривая (ECC) (на данный момент поддерживается только secp256k1 ) |
derivationCoin | coin свойство формирования HD ключа (BIP-44) |
derivationAccount | account свойство формирования HD ключа (BIP-44) |