BitcoinKit-iOS
Swift 的比特币和比特币现金(ABC)SPV 钱包工具包。这是一个完整的 SPV 节点实现,包括钱包创建/恢复、与网络的同步、发送/接收交易等。
特性
- 完整的 SPV 实现以支持快速移动性能
- 发送/接收旧版交易(P2PKH、P2PK、P2SH)
- 发送/接收 Segwit 交易(P2WPKH)
- 发送/接收与旧版钱包兼容的 Segwit 交易(P2WPKH-SH)
- 费用计算取决于发件人是否支付费用
- base58、bech32、cashaddr 地址的编码/解码
- BIP32 层次确定性钱包实现。
- BIP39 生成的确定性密钥的助记词。
- BIP44 确定性钱包的多账户层次。
- BIP21 URI 模式,包括支付地址、金额、标签和其他参数
- 实时费用率
使用
初始化
BitcoinKit
在初始化时需要您提供助记词。
let words = ["word1", ... , "word12"]
比特币
let bitcoinKit = BitcoinKit(withWords: words, coin: .bitcoin(network: .testNet), minLogLevel: .verbose)
比特币现金
let bitcoinCashKit = BitcoinKit(withWords: words, coin: .bitcoinCash(network: .testNet), minLogLevel: .verbose)
这两个网络都可以配置为在 mainNet
或 testNet
上运行。
附加参数
confirmationsThreshold
:未使用输出在进入交易中可用所需的最小确认次数(默认:6)minLogLevel
:如果需要,可以配置为调试目的。
启动和停止
BitcoinKit
需要用 start
命令启动,但无需停止。只要可能,它将保持同步状态。
try bitcoinKit.start()
从设备清除数据
BitcoinKit
使用内部数据库存储从区块链获取的数据。可以使用 clear
命令停止并清除所有存储的数据。
try bitcoinKit.clear()
获取钱包数据
BitcoinKit
保存所有从区块链获取并需要与区块链网络一起工作的数据。
当前余额
余额以萨托希
为单位提供
bitcoinKit.balance
// 2937096768
上次区块信息
上次区块信息包含headerHash
、height
和timestamp
,可用于向用户显示同步信息
bitcoinKit.lastBlockInfo
// ▿ Optional<BlockInfo>
// ▿ some : BlockInfo
// - headerHash : //"00000000000041ae2164b486398415cca902a41214cad72291ee04b212bed4c4"
// - height : 1446751
// ▿ timestamp : Optional<Int>
// - some : 1544097931
接收地址
获取一个你可以接收货币的地址。每次你实际收到包含该地址的货币交易后,接收地址都会改变
bitcoinKit.receiveAddress
// "mgv1KTzGZby57K5EngZVaPdPtphPmEWjiS"
交易
你可以如下获取所有交易
bitcoinKit.transactions
// ▿ 2 elements
// ▿ 0 : TransactionInfo
// - transactionHash : "0f83c9b330f936dc4a2458b7d3bb06dce6647a521bf6d98f9c9d3cdd5f6d2a73"
// ▿ from : 2 elements
// ▿ 0 : TransactionAddressInfo
// - address : "mft8jpnf3XwwqhaYSYMSXePFN85mGU4oBd"
// - mine : true
// ▿ 1 : TransactionAddressInfo
// - address : "mnNS5LEQDnYC2xqT12MnQmcuSvhfpem8gt"
// - mine : true
// ▿ to : 2 elements
// ▿ 0 : TransactionAddressInfo
// - address : "n43efNftHQ1cXYMZK4Dc53wgR6XgzZHGjs"
// - mine : false
// ▿ 1 : TransactionAddressInfo
// - address : "mrjQyzbX9SiJxRC2mQhT4LvxFEmt9KEeRY"
// - mine : true
// - amount : -800378
// ▿ blockHeight : Optional<Int>
// - some : 1446602
// ▿ timestamp : Optional<Int>
// - some : 1543995972
// ▿ 1 : TransactionInfo
// ...
创建新交易
为了创建新交易,请在BitcoinKit
上调用send(to: String, value: Int)
方法
try bitcoinKit.send(to: "mrjQyzbX9SiJxRC2mQhT4LvxFEmt9KEeRY", value: 1000000)
这首先验证给定的地址和金额,创建新交易,然后将其发送到对等网络。如果给定的地址/金额或网络存在任何错误,则抛出异常。
发送前验证交易
可以使用以下方法来验证地址和费用
try bitcoinKit.validate(address: "mrjQyzbX9SiJxRC2mQhT4LvxFEmt9KEeRY")
try bitcoinKit.fee(for: 1000000, toAddress: "mrjQyzbX9SiJxRC2mQhT4LvxFEmt9KEeRY", senderPay: true)
senderPay
参数定义了谁支付手续费
您可以使用parse
方法解析BIP21 URI。
bitcoinKit.parse(paymentAddress: "bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=50&label=Luke-Jr&message=Donation%20for%20project%20xyz")
// ▿ BitcoinPaymentData
// - address : "175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"
// - version : nil
// ▿ amount : Optional<Double>
// - some : 50.0
// ▿ label : Optional<String>
// - some : "Luke-Jr"
// ▿ message : Optional<String>
// - some : "Donation for project xyz"
// - parameters : nil
BitcoinKit
提供实时数据,如交易、区块、余额和工具状态。BitcoinKitDelegate
协议必须实现并设置到BitcoinKit
实例中,以接收这些数据。
class Manager {
init(words: [String]) {
bitcoinKit = BitcoinKit(withWords: words, coin: .bitcoin(network: .mainNet)
bitcoinKit.delegate = self
}
}
extension Manager: BitcoinKitDelegate {
public func transactionsUpdated(bitcoinKit: BitcoinKit, inserted: [TransactionInfo], updated: [TransactionInfo]) {
// do something with transactions
}
public func transactionsDeleted(hashes: [String]) {
// do something with transactions
}
public func balanceUpdated(bitcoinKit: BitcoinKit, balance: Int) {
// do something with balance
}
public func lastBlockInfoUpdated(bitcoinKit: BitcoinKit, lastBlockInfo: BlockInfo) {
// do something with lastBlockInfo
}
public func kitStateUpdated(state: BitcoinKit.KitState) {
// BitcoinKit.KitState can be one of 3 following states:
// .synced
// .syncing(progress: Double)
// .notSynced
//
// These states can be used to implement progress bar, etc
}
}
监听器事件在专用后台线程中运行。可以通过将delegateQueue
属性设置为DispatchQueue.main
来切换到主线程。
bitcoinKit.delegateQueue = DispatchQueue.main
- Xcode 10.0+
- Swift 4.1+
- iOS 11+
$ gem install cocoapods
CocoaPods 1.5.0+是构建BitcoinKit所必需的。
要使用CocoaPods将HSBitcoinKit整合到您的Xcode项目中,请在您的Podfile
中指定它:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!
target '<Your Target Name>' do
pod 'HSBitcoinKit'
end
然后,运行以下命令:
$ pod install
本库的所有特性都已在示例项目中使用。它可以作为一个使用本库的起点参考。
依赖关系
- HSHDWalletKit - 提供智能钱包相关特性,包括助记词生成。
- HSCryptoKit - 提供与区块链交互所需的加密函数。
许可证
HSBitcoinKit 工具包是开源的,并遵循MIT 许可协议。