BlockChainKit 1.4.6

BlockChainKit 1.4.6

Archie维护。



 
依赖
CryptoSwift~> 1.0.0
BigInt~> 4.0.0
secp256k1.swift~> 0.1.0
 

BlockChainKit

CI Status Version License Platform

🔏BlockChainKit🔏

BlockChainKit是一个Swif库,提供8种语言的助记词生成和验证(🇹🇼🇺🇸🇪🇸🇯🇵🇰🇷🇫🇷🇮🇹🇨🇳),并且实现了NSLinguisticTagger来自动检测助记词语言,您不需要设置语言🌍.

它还提供了使用Ethereum.RawTransaction创建原始交易的功能,支持Ethereum和ERC-20代币,.sign(privateKey: Data, chainID: Int)运行良好💪.

2019-11-12

ETH的输入支持小数。

2019-10-18

现在您可以在Ethereum签名中设置自定义ChainID。

2019-10-15

支持CIC签名功能。

2019-06-04

支持使用以下方式为Bitcoin签名交易:

  • 发送方和接收方地址
  • 私钥WIF
  • 未支出交易
  • 金额

用法

创建助记词

// default is 128 bytes to create mnemonic with 12 words 
let mnemonic = Mnemonic.create()

// create mnemonic with 15, 18, 21, 24 words by different strength
let mnemonicWith160Bytes = Mnemonic.create(strength: .words15)
let mnemonicWith192Bytes = Mnemonic.create(strength: .words18)
let mnemonicWith224Bytes = Mnemonic.create(strength: .words21)
let mnemonicWith256Bytes = Mnemonic.create(strength: .words24)

验证助记词

do {
  try Mnemonic.valdiate(mnemonic)
} catch {
  if let error = error as? MnemonicError {
    switch error {
      case .length: // length should be 12, 15, 18, 21, 24
      case .invalid: // validate mnemonic with check sum
      case let .words(words): // contains invalid words
    }
  }
}

// valdiate with specific language
try Mnemonic.valdiate(mnemonic, wordlist: .English)

从助记词创建种子

Mnemonic.createSeed(mnemonic).toHexString()

从种子创建私钥和公钥

let node = HDNode(seed: seed)
let BIP32RootKey = node.privateExtendedKey()

Base58 编码和解码

do {
  try Base58.encode(node.privateExtendedKey())
} catch {
  if let error = error as? BaseCodableError {
    switch error {
      case .decode: // decode error
      case .encode: // encode error
    }
  }
}

并提供了一种协议来实现指定基数的编码或解码。

// you can create a new base with alphabet
struct Base58: BaseCodable {
  static let alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
}

衍生

// BTC - m/44'/0'/0'
let account = node.derived(.hardened(44)).derived(.hardened(0)).derived(.hardened(0))
// BTC - m/44'/0'/0'/0
let chain = account.derived(.notHardened(0))
// BTC - m/44'/0'/0'/0/0
let addressNode = chain.derived(.notHardened(0))
let BTCPrivateKey = addressNode.WIF() 

// ETH - m/44'/60'/0'/0/0
let ETHAccount = node.derived(.hardened(44)).derived(.hardened(60)).derived(.hardened(0))
let ETHPrivateKey = ETHAccount.derived(.notHardened(0)).derived(.notHardened(0)).ethPrivateKey

从私钥创建以太坊地址

let address = Ethereum.address(privateKey: privateKey)

从私钥创建比特币地址

let address = Bitcoin.address(privateKey: privateKey)

创建一个以太坊交易

let rawTransaction = Ethereum.RawTransaction(nonce: "0x6e",
                                             gasPrice: "0x040000000000",
                                             gasLimit: "0x060000",
                                             toAddress: "0x85b7ca161C311d9A5f0077d5048CAdFace89a267",
                                             value: "0x015950000000000000000000",
                                             data: "")
// chainID supports zero, mainnet = 1, morden = 2, ropsten = 3, rinkeby = 4, goerli = 5, kovan = 42
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md
//
try rawTransaction.sign(privateKey: privateKeyData, chainID: .mainnet)

// Create a BNB
// contract: 0xB8c77482e45F1F44dE1745F52C74426C631bDD52
let ERC20Transaction = Ethereum.RawTransaction(nonce: "0x6e",
                                               gasPrice: "0x040000000000",
                                               gasLimit: "0x060000",
                                               toAddress: "0x85b7ca161C311d9A5f0077d5048CAdFace89a267",
                                               value: "0x015950000000000000000000",
                                               contract: "0xB8c77482e45F1F44dE1745F52C74426C631bDD52")

try ERC20Transaction.sign(privateKey: privateKeyData, chainID: .mainnet)

创建一个比特币交易

// sign with from address, to address, amount, uxtos and wif of private key
let rawTransaction = try Bitcoin.sign(from: fromAddress,
                                      to: toAddress,
                                      amount: amount,
                                      unspentTransactions: uxtos,
                                      wif: wif)        

// version 1.3.3 supports extend output
let output = BTCTransactionOutput(opReturnAddress: String)
let rawTransaction = try Bitcoin.sign(from: fromAddress,
                                      to: toAddress,
                                      amount: amount,
                                      unspentTransactions: uxtos,
                                      wif: wif,
                                      extendOutput: output)

创建一个CIC交易

// version 1.4.0 supports
let parameter = CIC.CICSignParameter(privateKey: "d03353d9ea60e4a2277c1fcf35b858a46c6f60001a8a5ddd32b48f234ee0b9ca",
                                     address: "cxf431130f518b149fed3d6dfb485741954ed4d2d1",
                                     balance: "100000000000000000",
                                     type: "cic",
                                     fee: "100000000000000000",
                                     nonce: "31",
                                     coin: "cic")
let rawTransaction = CIC.sign(parameter: parameter)

特性

  • BIP32
  • BIP39
  • BIP44
  • BIP55
  • ETH交易签名
  • ETH ERC-20交易签名
  • BTC交易签名
  • CIC交易签名

要求

  • iOS 11.0+
  • Xcode 10.2
  • Swift 5.1

安装

BlockChainKit通过CocoaPods提供。要安装它,只需将以下行添加到您的Podfile中

pod 'BlockChainKit', '~> 1.4.6'

作者

Archie[email protected]

捐赠

  • 比特币地址 - 1GxDDqxBWUfAEgkWiPv2fJowB54gPMnrQr
  • 以太坊地址 - 0x85b7ca161C311d9A5f0077d5048CAdFace89a267

许可证

BlockChainKit 遵循 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。