-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathVssStoreIdProvider.kt
More file actions
45 lines (37 loc) · 1.38 KB
/
VssStoreIdProvider.kt
File metadata and controls
45 lines (37 loc) · 1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package to.bitkit.data.backup
import com.synonym.vssclient.vssDeriveStoreId
import to.bitkit.data.keychain.Keychain
import to.bitkit.env.Env
import to.bitkit.utils.Logger
import to.bitkit.utils.ServiceError
import java.util.concurrent.ConcurrentHashMap
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class VssStoreIdProvider @Inject constructor(
private val keychain: Keychain,
) {
private val cacheMap: MutableMap<Int, String> = ConcurrentHashMap()
fun getVssStoreId(walletIndex: Int = 0): String {
synchronized(this) {
cacheMap[walletIndex]?.let { return it }
val mnemonicSecret = keychain.loadSecret(Keychain.Key.BIP39_MNEMONIC.name)
?: throw ServiceError.MnemonicNotFound()
val passphraseSecret = keychain.loadSecret(Keychain.Key.BIP39_PASSPHRASE.name)
val storeId = vssDeriveStoreId(
prefix = Env.vssStoreIdPrefix,
mnemonic = mnemonicSecret.use { String(it) },
passphrase = passphraseSecret?.use { String(it) },
)
cacheMap[walletIndex] = storeId
Logger.info("VSS store id setup for wallet[$walletIndex]: '$storeId'", context = TAG)
return storeId
}
}
fun clearCache() {
cacheMap.clear()
}
companion object {
private const val TAG = "VssStoreIdProvider"
}
}