TezosSwift
TezosSwift 是一个与 Tezos 区块链 兼容的 Swift 库。TezosSwift 通过 JSON API 实现与区块链的通信。如果使用来自 https://github.com/AckeeCZ/Tezos-iOS-Dev-Kit 的生成器,该代码还支持生成和调用智能合约!
该项目是从 https://github.com/keefertaylor/TezosKit 分叉的,相似度仍然很高。
功能
TezosSwift 提供了以下 RPC 的一等支持
- 获取账户余额
- 获取链头信息
- 获取账户受托人
- 生成和恢复钱包
- 在账户间发送交易
- 在单个请求中发送多个操作
- 设置受托人
- 注册为受托人
- 新增:组合支持!
- 还有更多!
该库是可扩展的,允许客户端代码轻松创建其他所需的 RPC 和签名操作。
TezosSwift 为您处理复杂的区块链交互
- 如果有需要,地址将自动显示
- 通过数组传入以发送多个操作
它还会解析数据并填充适当的模型,这样您就可以以类型安全的方式访问数据!
安装
CocoaPods
TezosSwift 支持通过 CocoaPods 进行安装。您可以通过将以下内容添加到您的 Podfile 中来依赖 TezosSwift
pod "TezosSwift"
如果您需要 Combine 支持,您可以添加
pod "TezosSwift/Combine"
入门
创建网络客户端
let publicNodeURL = URL(string: "https://rpc.tezrpc.me")!
let tezosClient = TezosClient(remoteNodeURL: publicNodeURL)
检索区块链数据
tezosClient.chainHead { result in
switch result {
case .success(let chainHead):
print(chainHead.chainId)
print(chainHead.protocol)
case .failure(let error):
print("Calling chain head failed with error: \(error)")
}
}
检索合约数据
tezosClient.balance(of: "KT1BVAXZQUc4BGo3WTJ7UML6diVaEbe4bLZA", completion: { result in
switch result {
case .success(let balance):
print(balance.humanReadableRepresentation)
case .failure(let error):
print("Getting balance failed with error: \(error)")
}
})
创建钱包
let wallet = Wallet()
print("New wallet mnemonic is: \(wallet.mnemonic)")
发送交易
tezosClient.send(amount: Tez(1), to: "tz1WRFiK6eGNvP3ioWkWeP6JwDaQjj95opnQ", from: wallet, completion: { result in
switch result {
case .success(let transactionHash):
print(transactionHash)
case .failure(let error):
print("Sending Tezos failed with error: \(error)")
}
})
注意:我们使用 Tez
和 Mutez
结构来表示 Tezos 和 Mutez 的数量。
一次性发送多个交易
以下是一个一次性发送多个交易的例子。您可以轻松地在一次调用中向 Jim 和 Bob 发送一些 XTZ。
let myWallet: Wallet = ...
let jimsAddress: String = tz1...
let bobsAddress: String = tz1...
let amountToSend = TezosBalance("2")!
let sendToJimOperation = TransactionOperation(amount: amountToSend,
source: myWallet,
destination: jimsAddress)
let sendToBobOperation = TransactionOperation(amount: amountToSend,
source: myWallet,
destination: bobsAddress)
let operations = [ sendToJimOperation, sendToBobOperation ]
tezosClient.forgeSignPreapplyAndInjectOperations(operations: operations,
source: myWallet.address,
keys: myWallet.keys) { result in
print("Sent Jim and Bob some XTZ! See: https://tzscan.io/\(result.value!)")
}
设置代表
let wallet = ...
let originatedAccountAddress = <Some Account Managed By Wallet>
let delegateAddress = ...
tezosClient.delegate(from: originatedAccountAddress,
to: delegateAddress,
keys: wallet.keys) { result in
print("Delegate for \(originatedAccountAddress) set to \(delegateAddress).")
print("See: https://tzscan.io/\(result.value!)")
}
Michelson 类型
Tezos 合同类型是使用 Michelson 本地编写的,因此在使用 Swift 时必须做出一些妥协。
其中之一是 Pair
- 很遗憾,Tuple
不能符合 Codable
,因此我们决定按参数逐个解析嵌套的成对参数,不考虑其他从左至右的技术细节。为使这一点更清楚,让我们看一下一个例子
参数 (pair (pair (pair string (list int)) (set nat)) bytes)
此 Michelson 参数随后转换为,因此它被这样调用
func call(param1: String, param2: [Int], param3: [UInt], param4: Data)
组合
在 TezosClient
上有扩展,实现了 Combine 行为 - 即
balance(of: "tezos_address")
也可以这样调用
balancePublisher(of: "tezos_address")
此方法返回一个 Publisher
,您可以订阅它。太棒了!
更多
费用
OperationFees
对象封装了费用、Gas 限制和存储限制,以便将操作注入区块链。每个 Operation
对象都包含一组默认费用。如果是向合约发送参数等操作,它将自动为您计算费用!客户端在创建操作时还可以传递自定义的 OperationFees
对象来定义自己的费用(请注意,这会覆盖自动计算的任何费用)。
贡献
我很高兴接受 pull request。
许可
MIT