HSBitcoinKit 0.4.1

HSBitcoinKit 0.4.1

Horizontal Systems 维护。



 
依赖
HSCryptoKit~> 1.1.0
HSHDWalletKit~> 1.0.3
Alamofire~> 4.8.0
ObjectMapper~> 3.3.0
RxSwift~> 4.0
BigInt~> 3.1.0
RealmSwift~> 3.11.0
RxRealm~> 0.7.0
 

BitcoinKit-iOS

Swift 的比特币和比特币现金(ABC)SPV 钱包工具包。这是一个完整的 SPV 节点实现,包括钱包创建/恢复、与网络的同步、发送/接收交易等。

特性

  • 完整的 SPV 实现以支持快速移动性能
  • 发送/接收旧版交易(P2PKHP2PKP2SH
  • 发送/接收 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)

这两个网络都可以配置为在 mainNettestNet 上运行。

附加参数
  • confirmationsThreshold:未使用输出在进入交易中可用所需的最小确认次数(默认:6
  • minLogLevel:如果需要,可以配置为调试目的。

启动和停止

BitcoinKit 需要用 start 命令启动,但无需停止。只要可能,它将保持同步状态。

try bitcoinKit.start()

从设备清除数据

BitcoinKit 使用内部数据库存储从区块链获取的数据。可以使用 clear 命令停止并清除所有存储的数据。

try bitcoinKit.clear()

获取钱包数据

BitcoinKit 保存所有从区块链获取并需要与区块链网络一起工作的数据。

当前余额

余额以萨托希为单位提供

bitcoinKit.balance

// 2937096768

上次区块信息

上次区块信息包含headerHashheighttimestamp,可用于向用户显示同步信息

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 许可协议