# HDWalletKit **Repository Path**: ios_components/HDWalletKit ## Basic Information - **Project Name**: HDWalletKit - **Description**: HDWallet 包名修改 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-11-27 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [](https://travis-ci.com/essentiaone/HDWallet) [](https://codecov.io/gh/essentiaone/HDWallet/branch/develop) [](https://cocoadocs.org/docsets/HDWalletKit) [](https://cocoadocs.org/docsets/HDWalletKit) [](https://cocoadocs.org/docsets/HDWalletKit) # HDWalletKit HDWalletKit is a Swift framwork that enables you to create and use bitcoin HD wallet ([Hierarchical Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)) in your own app. You can check if the address generation is working right [here](https://iancoleman.io/bip39/). ## Features - HD and NonHD wallets support - Mnemonic recovery phrease in [BIP39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) - Keystore generation - Read keystore file - Sign ether transaction - ERC20 Tokens ## Installation ### CocoaPods
To integrate HDWalletKit into your Xcode project using CocoaPods, specify it in your Podfile
:
pod 'HDWalletKit'
### Carthage
To install with [Carthage](https://github.com/Carthage/Carthage), simply add this in your `Cartfile`:
```ruby
github "essentiaone/HDWallet"
```
## Communication
- If you **found a bug**, open an issue.
- If you **have a feature request**, open an issue.
- If you **want to contribute**, submit a pull request.
## How to use
#### Generate seed and convert it to mnemonic sentence.
```swift
let entropy = Data(hex: "000102030405060708090a0b0c0d0e0f")
let mnemonic = Mnemonic.create(entropy: entropy)
print(mnemonic)
// abandon amount liar amount expire adjust cage candy arch gather drum buyer
let seed = Mnemonic.createSeed(mnemonic: mnemonic)
print(seed.toHexString())
```
#### PrivateKey and key derivation (BIP39)
```swift
let mnemonic = Mnemonic.create()
let seed = Mnemonic.createSeed(mnemonic: mnemonic)
let privateKey = PrivateKey(seed: seed, coin: .bitcoin)
// BIP44 key derivation
// m/44'
let purpose = privateKey.derived(at: .hardened(44))
// m/44'/0'
let coinType = purpose.derived(at: .hardened(0))
// m/44'/0'/0'
let account = coinType.derived(at: .hardened(0))
// m/44'/0'/0'/0
let change = account.derived(at: .notHardened(0))
// m/44'/0'/0'/0/0
let firstPrivateKey = change.derived(at: .notHardened(0))
print(firstPrivateKey.publicKey.address)
```
#### Generate keystore file
```swift
let data = "abandon amount liar amount expire adjust cage candy arch gather drum buyer"
let keystore = try! KeystoreV3(data: data, password: "qwertyui")
let encodedKeystoreDaya = (try? keystore?.encodedData())
```
#### Open keystore file
```swift
let keystore = try! KeystoreV3(data: encodedKeystoreDaya, password: password)
guard let decoded = try? keystore?.getDecriptedKeyStore(password: password) else {
fatalError()
}
print(decoded)
```
#### Create your wallet and generate address
```swift
let mnemonic = Mnemonic.create()
let seed = Mnemonic.createSeed(mnemonic: mnemonic)
let network: Network = .main(.bitcoin)
let wallet = Wallet(seed: seed, network: network)
let account = wallet.generateAccount()
print(account)
```
#### Sign transaction by private key
```swift
let signer = EIP155Signer()
let rawTransaction1 = EthereumRawTransaction(
value: Wei("10000000000000000")!,
to: "0x34205555576717bBdF8158E2b2c9ed64EB1e6B85",
gasPrice: 99000000000,
gasLimit: 21000,
nonce: 2
)
guard let signed = try? signer.hash(rawTransaction: rawTransaction1).toHexString() else { return }
print(signed)
```
#### Create send ERC20 tokens transaction data
```swift
let erc20Token = ERC20(contractAddress: "0x8f0921f30555624143d427b340b1156914882c10", decimal: 18, symbol: "ESS")
let address = "0x2f5059f64D5C0c4895092D26CDDacC58751e0C3C"
let data = try! erc20Token.generateDataParameter(toAddress: address, amount: "3")
```
#### Create get balance ERC20 token transaction data
```swift
let erc20Token = ERC20(contractAddress: "0x8f0921f30555624143d427b340b1156914882c10", decimal: 18, symbol: "ESS")
let data = try! erc20Token.generateGetBalanceParameter(toAddress: "2f5059f64D5C0c4895092D26CDDacC58751e0C3C")
```
#### Convert non HD PrivateKey to Address
```swift
let privateKey = PrivateKey(pk: "L35qaFLpbCc9yCzeTuWJg4qWnTs9BaLr5CDYcnJ5UnGmgLo8JBgk", coin: .bitcoin)
print(privateKey.publicKey.address)
//128BCBZndgrPXzEgF4QbVR3jnQGwzRtEz5
```
## License
WalletKit is released under the [MIT License](https://github.com/essentiaone/HDWallet/blob/develop/LICENSE.md).