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

syncDistributedEcdsaKey

syncDistributedEcdsaKey(driver:secretId:syncSessionId:curve:derivationCoin:derivationAccount:)

public func syncDistributedEcdsaKey(driver: ProtocolSwift, secretId: String, syncSessionId: String, curve: EcdsaCurve, derivationCoin: UInt32, derivationAccount: UInt32) async throws -> String

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

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

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

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

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

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

Пример

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

 // Генерируем рандомный session ID для новой сессии подписания
 let syncSessionId = UUID().uuidString

 // Выполняем ECDSA-over-secp256k1 процедуру синхронизации для ключа с путем ```m/44'/0'/0'/0'/0'```
 let publicKey = await syncDistributedEcdsaKey(secretId: String, syncSessionId: String, curve: EcdsaCurve, derivationCoin: UInt32, derivationAccount: UInt32)

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

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

Параметры

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

Возвращает

String

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