Перейти к содержанию

Spatium SDK > syncDistributedEcdsaKey

syncDistributedEcdsaKey

suspend fun syncDistributedEcdsaKey(driver: ProtocolKotlin, secretId: String, syncSessionId: String, curve: EcdsaCurve, derivationCoin: UInt, derivationAccount: UInt): String

Выполняет процедуру синхронизации распределенного ключа (отдельный помощник)

Каждый секрет используется независимо для генерации фрагментов распределенного ключа (BIP-44 с путем m/44'/(coin)'/(account)'/0'/0'), и после с этими фрагментами выполняется синхронизация MPC ключа для получения составного публичного ключа для этой пары.

Вопреки тому, что каждая сессия содержит уникальный сет данных, полученный ключ детерминирован для последующих синхронизаций, например, каждый набор секретов, монета и аккаунт всегда создадут тот же составной ключ (и эфемерные приватные ключи)

В результате этой операции новые данные синхронизации сохранены в постоянное хранилище, доступ к которым можно получить с помощью session ID.

С этого момента можно свободно вызывать getEcdsaPublicKey(driver:secretId:syncSessionId:) или signEcdsaMessage(driver:secretId:syncSessionId:signSessionId:message:) пока данные синхронизации (или секрет) доступны в хранилище.

Возвращает

String

составной публичный ключ (который так же можно получить позже с помощью getEcdsaPublicKey(driver:secretId:syncSessionId:) позже)

  • См. также: ProtocolKotlin/syncDistributedEcdsaKey(secretId:syncSessionId:curve:derivationCoin:derivationAccount:)

Пример

// Считаем, что процедура синхронизации уже пройдена и соединение установлено

// Генерируем рандомный 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: UInt32, derivationAccount: UInt32)

// К этому моменту данные синхронизации уже сохранены в хранилище и составной ключ доступен к получению
val _publicKey = getEcdsaPublicKey(secretId: String, syncSessionId: String)

// Этот ключ, очевидно, является тем же ключом, который мы получаем из самой процедуры синхронизации
Assert.assertEquals(publicKey, _publicKey)

Параметры

androidJvm

Имя Описание
driver ProtocolKotlin имплементация
secretId ID (UUID) секрета используемого для синхронизации
syncSessionId ID (UUID) данной процедуры синхронизации
curve эллиптическая кривая (ECC) (на данный момент поддерживается только secp256k1)
derivationCoin coin свойство формирования HD ключа (BIP-44)
derivationAccount account свойство формирования HD ключа (BIP-44)