一、關(guān)鍵枚舉
》路徑協(xié)議類型
public enum Purpose: UInt32, CaseIterable {
case bip44 = 44 //
case bip49 = 49 //隔離見證
case bip84 = 84 //bc1開頭的隔離見證方式
case bip1852 = 1852
}
》Coin類型
public enum CoinType: UInt32, CaseIterable {
case aeternity = 457
case aion = 425
case binance = 714
case bitcoin = 0
case bitcoinCash = 145
case bitcoinGold = 156
……
}
》簽名類型
public enum Curve: UInt32, CaseIterable, CustomStringConvertible {
case secp256k1 = 0
case ed25519 = 1
case ed25519Blake2bNano = 2
case curve25519 = 3
case nist256p1 = 4
case ed25519Extended = 5
}
》公鑰類型:
public enum PublicKeyType: UInt32, CaseIterable {
case secp256k1 = 0
case secp256k1Extended = 1
case nist256p1 = 2
case nist256p1Extended = 3
case ed25519 = 4
case ed25519Blake2b = 5
case curve25519 = 6
case ed25519Extended = 7
}
二丛忆、DerivationPath類:
》初始化方式:
1、對(duì)象初始化方式:
public init(purpose: Purpose, coin: UInt32, account: UInt32 = 0, change: UInt32 = 0, address: UInt32 = 0)
例如:
DerivationPath(purpose: .bip44, coin: bitcoin.slip44Id, account: 0, change: 0, address: 1).description
2仍秤、通過字符串(比如:m/10/0/2'/3
)初始化:
public init?(_ string: String)
三熄诡、HDWallet類(Generated)
》核心屬性
seed:String
mnemonic:String
》初始化:
通過助記詞和密碼 (常用):
public init(mnemonic: String, passphrase: String)
//以下兩個(gè)可以不用
public init(strength: Int32, passphrase: String)
//通過data流初始化
public init(data: Data, passphrase: String)
》主要類方法:
// 1、判斷是否是合法的助記詞:
public static func isValid(mnemonic: String) -> Bool
// 獲取擴(kuò)展公鑰 xpub
public static func getPublicKeyFromExtended(extended: String, derivationPath: String) -> PublicKey?
》主要對(duì)象方法:
//獲取主私鑰
public func getMasterKey(curve: Curve) -> PrivateKey
//獲取具體幣種的私鑰
public func getKeyForCoin(coin: CoinType) -> PrivateKey
//獲取具體幣種地址
public func getAddressForCoin(coin: CoinType) -> String
//獲取通過路徑字符串獲取私鑰
public func getKey(derivationPath: String) -> PrivateKey
//獲取BIP44的私鑰
public func getKeyBIP44(coin: CoinType, account: UInt32, change: UInt32, address: UInt32) -> PrivateKey
//獲取擴(kuò)展私鑰
public func getExtendedPrivateKey(purpose: Purpose, coin: CoinType, version: HDVersion) -> String
//獲取擴(kuò)展公鑰
public func getExtendedPublicKey(purpose: Purpose, coin: CoinType, version: HDVersion) -> String
四凰浮、StoredKey類
》屬性
identifier: String
name: String
isMnemonic: Bool
accountCount: Int
》初始化
//創(chuàng)建
public init(name: String, password: Data)
//導(dǎo)入
public static func importPrivateKey(privateKey: Data, name: String, password: Data, coin: CoinType) -> StoredKey?
public static func importHDWallet(mnemonic: String, name: String, password: Data, coin: CoinType) -> StoredKey?
public static func importJSON(json: Data) -> StoredKey?
》其他方法
//獲取索引賬戶
public func account(index: Int) -> Account?
//獲取一個(gè)幣的賬戶
public func accountForCoin(coin: CoinType, wallet: HDWallet?) -> Account?
//移除幣種
public func removeAccountForCoin(coin: CoinType) -> Void
//增加一個(gè)賬戶
public func addAccount(address: String, derivationPath: String, extetndedPublicKey: String) -> Void
//解密私鑰
public func decryptPrivateKey(password: Data) -> Data?
//保存
public func store(path: String) -> Bool
//解密助記詞
public func decryptMnemonic(password: Data) -> String?
//通過密碼獲取私鑰
public func privateKey(coin: CoinType, password: Data) -> PrivateKey?
//根據(jù)密碼獲取HD錢包對(duì)象
public func wallet(password: Data) -> HDWallet?
//導(dǎo)出json格式
public func exportJSON() -> Data?
// 加密密碼從私鑰重新派生地址苇本。
public func fixAddresses(password: Data) -> Bool
五、Wallet 類 (Sources)
》核心屬性
identifier: String
keyURL: URL -- 本地磁盤存儲(chǔ)的路徑
key: StoredKey --加密的key
accounts: [Account]
》初始化
public init(keyURL: URL, key: StoredKey)
》核心方法:
public func getAccount(password: String, coin: CoinType) throws -> Account
public func getAccounts(password: String, coins: [CoinType]) throws -> [Account]
public func privateKey(password: String, coin: CoinType) throws -> PrivateKey
六笛厦、Account 類 (Generated)
》核心屬性:
public var address: String //地址
public var derivationPath: String //路徑
public var extendedPublicKey: String //擴(kuò)展公鑰
public var coin: CoinType //幣種類型
》初始化:
public init(address: String, derivationPath: String, extendedPublicKey: String)
PrivateKey 類(Generated)
》屬性:
data:Data
》方法:
初始化:
public init?(data: Data)
public init?(key: PrivateKey)
判斷私鑰是否正確
public static func isValid(data: Data, curve: Curve) -> Bool
生成不同類型的公鑰
public func getPublicKeySecp256k1(compressed: Bool) -> PublicKey
public func getPublicKeyNist256p1() -> PublicKey
public func getPublicKeyEd25519() -> PublicKey
public func getPublicKeyEd25519Blake2b() -> PublicKey
public func getPublicKeyEd25519Extended() -> PublicKey
public func getPublicKeyCurve25519() -> PublicKey
簽名:
public func sign(digest: Data, curve: Curve) -> Data?
public func signAsDER(digest: Data, curve: Curve) -> Data?
public func signSchnorr(message: Data, curve: Curve) -> Data?
PublicKey 類(Generated)
》屬性:
isCompressed: Bool
compressed: PublicKey
uncompressed: PublicKey
data: Data
keyType: PublicKeyType
》方法:
初始化:
public init?(data: Data, type: PublicKeyType)
判斷公鑰是否正確
public static func isValid(data: Data, type: PublicKeyType) -> Bool
簽名驗(yàn)證
public func verify(signature: Data, message: Data) -> Bool
public func verifySchnorr(signature: Data, message: Data) -> Bool
AnySigner 類(Generated)
各種簽名方式
public static func sign<SigningOutput: Message>(input: SigningInput, coin: CoinType) -> SigningOutput
public static func nativeSign(data: Data, coin: CoinType) -> Data
public static func supportsJSON(coin: CoinType) -> Bool
public static func signJSON(_ json: String, key: Data, coin: CoinType) -> String
public static func encode(input: SigningInput, coin: CoinType) -> Data
public static func nativeEncode(data: Data, coin: CoinType) -> Data
public static func decode(data: Data, coin: CoinType) -> Data
public static func plan<TransactionPlan: Message>(input: SigningInput, coin: CoinType) -> TransactionPlan
public static func nativePlan(data: Data, coin: CoinType) -> Data