HDWalletSwiftSdk 0.4.1

HDWalletSwiftSdk 0.4.1

Serhiy Bezpalyi 维护。



 
依赖关系
secp256k1.swift~> 0.1.4
CryptoSwift~> 1.0.0
 

  • 作者
  • impl

Build Status Black Duck Security Risk Badge w/ Version Badge w/ Platform Badge w/ Licence

HDWalletKit

HDWalletKit 是一个 Swift 框架,可以使您在自己的应用中创建和使用比特币 HD 钱包(分层确定性钱包)。

您可以在[这里](https://iancoleman.io/bip39/)检查地址生成是否正常工作。

特点

  • 支持 HD 和 非HD 钱包
  • 支持 BIP39 的助记词恢复短语
  • 生成 Keystore
  • 读取 Keystore 文件
  • 签名以太坊交易
  • ERC20 令牌
  • 签名基于 UTXO 的交易

安装

CocoaPods

要使用 CocoaPods 将 HDWalletKit 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它

pod 'HDWalletKit'

Carthage

使用Carthage安装,只需在您的Cartfile中添加以下内容

github "serhiy1017/HDWalletSwiftSdk"

通信

  • 如果您发现了一个错误,请创建一个问题。
  • 如果您有功能请求,请创建一个问题。
  • 如果您想贡献,请提交一个代码合并请求。

如何使用

生成种子并将其转换为助记词

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())

私钥和密钥派生(BIP39)

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)

生成密钥库文件

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())

打开密钥库文件

let keystore = try! KeystoreV3(data: encodedKeystoreDaya, password: password)
guard let decoded = try? keystore?.getDecriptedKeyStore(password: password) else {
fatalError()
}
print(decoded)

创建您的钱包并生成地址

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)

使用私钥签署以太坊交易

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)

使用私钥签署比特币交易

获取UTXO,可以使用(https://github.com/essentiaone/essentia-bridges-api-ios

let address = try LegacyAddress("1HLqrFX5fYwKriU7LRKMQGhwpz5HuszjnK", coin: .bitcoin)
let utxoWallet = UTXOWallet(privateKey: "Kz9UKkL6bKE92QPxQbPcqkCZTnCyLVyfRNFRSbToNjyb4bx321fh")
let signedTx = try utxoWallet.createTransaction(to: address, amount: 0, utxos: utxos)

创建发送ERC20代币的交易数据

let erc20Token = ERC20(contractAddress: "0x8f0921f30555624143d427b340b1156914882c10", decimal: 18, symbol: "ESS")
let address = "0x2f5059f64D5C0c4895092D26CDDacC58751e0C3C"
let data = try! erc20Token.generateDataParameter(toAddress: address, amount: "3") 

创建获取ERC20代币余额的交易数据

let erc20Token = ERC20(contractAddress: "0x8f0921f30555624143d427b340b1156914882c10", decimal: 18, symbol: "ESS")
let data = try! erc20Token.generateGetBalanceParameter(toAddress: "2f5059f64D5C0c4895092D26CDDacC58751e0C3C")

将非HD私钥转换为地址

let privateKey = PrivateKey(pk: "L35qaFLpbCc9yCzeTuWJg4qWnTs9BaLr5CDYcnJ5UnGmgLo8JBgk", coin: .bitcoin)
print(privateKey.publicKey.address)
//128BCBZndgrPXzEgF4QbVR3jnQGwzRtEz5

许可证

WalletKit 是根据 MIT 许可证发布的。