The BitcoinKit library is a Swift implementation of the Bitcoin protocol, supporting both of BCH and BTC. Our mission is improving the mobile ecosystem for Bitcoin developers.
It allows maintaining a wallet and sending/receiving transactions without needing a full blockchain node. It comes with a simple wallet app showing how to use it.
Release notes are here.
- Encoding/decoding addresses: base58, Cashaddr, SLP, P2PKH, P2SH, WIF format.
- Transaction building blocks: inputs, outputs, scripts.
- EC keys and signatures.
- BIP32, BIP44 hierarchical deterministic wallets.
- BIP39 implementation.
- SPV features are under construction. The following functions cannot work well sometimes.
- Send/receive transactions.
- See current balance in a wallet.
// from Testnet Cashaddr
let cashaddrTest = try AddressFactory.create("bchtest:pr6m7j9njldwwzlg9v7v53unlr4jkmx6eyvwc0uz5t")
// from Mainnet Cashaddr
let cashaddrMain = try AddressFactory.create("bitcoincash:qpjdpjrm5zvp2al5u4uzmp36t9m0ll7gd525rss978")
// from Testnet Slpaddr
let cashaddrTest = try AddressFactory.create("slptest:qzpf2p6x77e956f6y2mwd55f4hqqnqdfnsqucg4m85")
// from Mainnet Slpaddr
let cashaddrMain = try AddressFactory.create("simpleledger:qzpf2p6x77e956f6y2mwd55f4hqqnqdfnsnps0cmvt")
// from Base58 format
let address = try AddressFactory.create("1AC4gh14wwZPULVPCdxUkgqbtPvC92PQPN")
let privateKey = PrivateKey(network: .testnet) // You can choose .mainnet or .testnet
let wallet = Wallet(privateKey: privateKey)
let wallet = try Wallet(wif: "92pMamV6jNyEq9pDpY4f6nBy9KpV2cfJT4L5zDUYiGqyQHJfF1K")
// Generate mnemonic
let mnemonic = try Mnemonic.generate()
// Generate seed from the mnemonic
let seed = Mnemonic.seed(mnemonic: mnemonic)
let wallet = HDWallet(seed: seed, network: .testnet)
let mnemonic = try Mnemonic.generate()
let seed = Mnemonic.seed(mnemonic: mnemonic)
let privateKey = HDPrivateKey(seed: seed, network: .testnet)
// m/0'
let m0prv = try! privateKey.derived(at: 0, hardened: true)
// m/0'/1
let m01prv = try! m0prv.derived(at: 1)
// m/0'/1/2'
let m012prv = try! m01prv.derived(at: 2, hardened: true)
let keychain = HDKeychain(seed: seed, network: .mainnet)
let privateKey = try! keychain.derivedKey(path: "m/44'/1'/0'/0/0")
let extendedKey = privateKey.extended()
let blockStore = try! SQLiteBlockStore.default()
let blockChain = BlockChain(network: .testnet, blockStore: blockStore)
let peerGroup = PeerGroup(blockChain: blockChain)
let peerGroup.delegate = self
let peerGroup.start()
- iOS 9.0+ / Mac OS X 10.11+ / tvOS 9.0+ / watchOS 2.0+
- Xcode 9.0+
- Swift 4.1+
CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:
$ gem install cocoapods
CocoaPods 1.5.0+ is required to build BitcoinKit.
To integrate BitcoinKit into your Xcode project using CocoaPods, specify it in your Podfile
:
platform :ios, '10.0'
use_frameworks!
target '<Your Target Name>' do
pod 'BitcoinKit', :git => 'https://github.com/jbdtky/BitcoinKit.git'
end
Then, run the following command:
$ pod install
BitcoinKit is available through Swift Package Manager. To install it, simply add the following lines to dependencies of your Package.swift:
.package(url: "https://github.com/jbdtky/BitcoinKit.git", .upToNextMinor(from: "0.1.0"))
Note that following data types and features are currently not supported on Linux platform.
Peer
andPeerGroup
- SQLite based BlockStore
Contributions to BitcoinKit are welcome and encouraged! Feel free to open issues, drop us pull requests.
Visit my twitter (@jbdtky)
BitcoinKit is available under the MIT license. See the LICENSE file for more info.
This project exists thanks to all the people who contribute. See the contributors