TezosSwift 1.1.1

TezosSwift 1.1.1

Ackee GithubJan MísařMarek Fort 维护。



 
依赖关系
BigInt~> 5.0.0
MnemonicKit>= 0
Sodium~> 0.8.0
 

  • Ackee

TezosSwift

CI Status Version License Carthage Compatible Platform

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)")
    }
})

注意:我们使用 TezMutez 结构来表示 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