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

syncDistributedEddsaKey

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

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

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

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

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

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

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

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

Пример

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

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

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

 // К этому моменту данные синхронизации уже сохранены в хранилище и составной ключ доступен к получению
 let _publicKey = await getEddsaPublicKey(driver: ProtocolSwift, 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

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