TrustCore核心类整理(swift版本)

一、关键枚举

》路径协议类型

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、对象初始化方式:

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) 

//以下两个可以不用

public init(strength: Int32, passphrase: String)
//通过data流初始化
public init(data: Data, passphrase: String) 

》主要类方法:

// 1、判断是否是合法的助记词:
public static func isValid(mnemonic: String) -> Bool
// 获取扩展公钥 xpub
public static func getPublicKeyFromExtended(extended: String, derivationPath: String) -> PublicKey?

》主要对象方法:

//获取主私钥
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
//获取扩展私钥
public func getExtendedPrivateKey(purpose: Purpose, coin: CoinType, version: HDVersion) -> String
//获取扩展公钥
public func getExtendedPublicKey(purpose: Purpose, coin: CoinType, version: HDVersion) -> String 

四、StoredKey类

》属性

identifier: String
name: String
isMnemonic: Bool
accountCount: Int

》初始化

//创建
public init(name: String, password: Data)
//导入
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?
//获取一个币的账户
public func accountForCoin(coin: CoinType, wallet: HDWallet?) -> Account? 
//移除币种
public func removeAccountForCoin(coin: CoinType) -> Void 
//增加一个账户
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?
//根据密码获取HD钱包对象
public func wallet(password: Data) -> HDWallet?
//导出json格式
public func exportJSON() -> Data? 
// 加密密码从私钥重新派生地址。
public func fixAddresses(password: Data) -> Bool

五、Wallet 类 (Sources)

》核心属性

identifier: String
keyURL: URL -- 本地磁盘存储的路径
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 //扩展公钥
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 

签名验证

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 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349