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)