Tezos iOS 开发套件
安装
根据您的偏好和需求,安装 TezosGen 到您的机器或项目中有多种可能性。请注意,如果您不使用 Cocoapods
安装 TezosGen
,您必须自己导入 TezosSwift
。
下载最新发布版本的 ZIP
- 前往最新发布的 GitHub 页面
- 下载与该发布相关联的
TezosGen-x.y.z.zip
文件 - 将 zip 存档的内容解压缩到项目目录中
我们建议您在项目目录内 解压缩 ZIP 并 将其内容提交到 git。这样,所有同事将为该项目使用相同的 TezosGen 版本。
如果您在名为 TezosGen
的文件夹中解压缩了 ZIP 文件,然后可以这样做:
TezosGen/bin/tezosgen …
通过 CocoaPods
如果您正在使用 CocoaPods,您可以直接在 Podfile
中添加 pod 'TezosGen'
。
这将使 Cocoapods
在您的下一次 pod install
执行过程中下载 TezosGen
的二进制文件和依赖项到 Pods/
。
鉴于您可以在 Podfile
中指定 TezosGen
的确切版本,这确保了 所有同事将为该项目使用相同的 TezosGen 版本。
然后您可以从终端调用 TezosGen
Pods/TezosGen/TezosGen/bin/tezosgen …
注意:TezosGen 并不是一个 pod,因为它不是一个在运行时依赖于您的代码库;因此,通过 CocoaPods 的安装只是一个在中 Pods/ 文件夹中安装 TezosGen 二进制文件的技巧,但您在 Xcode 的 Pods.xcodeproj 中看不到 Pods/TezosGen 组中的任何 swift 文件。这是正常的:TezosGen 二进制文件仍然位于在该文件夹的 Finder 中。
全局安装
- 前往最新发布的 GitHub 页面
- 下载与该发布相关联的
TezosGen-x.y.z.zip
文件 - 解压缩 zip 存档的内容
- 使用
cd
进入解压缩的目录 make install
- 然后使用
tezosgen ...
调用 tezosgen
iOS MVVM 项目模板
我们还创建了 iOS MVVM 项目模板,因此设置您的项目从未如此简单。轻松遵循安装说明。完成后,将 name_of_your_abi.json
文件添加到 Resources
。然后,将 TezosGen
添加到您的 Podfile
,运行 pod install
,并在项目根目录中运行此命令:
Pods/TezosGen/TezosGen/bin/tezosgen HelloContract NameOfYourProject/Resources/abi.json -x NameOfYourProject.xcodeproj -o NameOfYourProject/Model/Generated/GeneraredContracts
使用方法
示例
如何获取合约规范
为了生成智能合约代码,我们首先需要其规范。要查找它,只需运行 curl https://url_to_your_node/chains/main/blocks/head/context/contracts/contract_address | tr -d '\n'
。
结果可能看起来像这样:
{"manager":"tz1dD918PXDuUHV6Mh6z2QqMukA67YULuhqd","balance":"21000000","spendable":false,"delegate":{"setable":false},"script":{"code":[{"prim":"parameter","args":[{"prim":"set","args":[{"prim":"nat"}]}]},{"prim":"storage","args":[{"prim":"set","args":[{"prim":"nat"}]}]},{"prim":"code","args":[[{"prim":"CDR"},{"prim":"NIL","args":[{"prim":"operation"}]},{"prim":"PAIR"}]]}],"storage":[{"int":"1"},{"int":"2"},{"int":"3"}]},"counter":"0"}
我们需要为我们的生成器的是隐藏在code
键下,我们需要获取参数和存储。因此,这个合约规范,经过一些修改后,将像这样
{"parameter": {"prim":"set","args":[{"prim":"nat"}]}, "storage": {"prim":"set","args":[{"prim":"nat"}]}}
为了进一步说明,规范应该这样写
{"parameter": {code_specified_under_args_for_parameter}, "storage": {code_specified_under_args_for_parameter}
默认情况下,参数从数字一开始索引以提高可读性,但是您也可以为参数命名!如果合同本身中的值已经命名,您将免费获得此功能。要这样做,它将像这样:{"parameter": {"prim":"set", "annots":["%first"],"args":[{"prim":"nat"}]}, "storage": {"prim":"set","args":[{"prim":"nat"}]}}
(即在类型中添加一个新的键值对 "annots":["%desired_name"]
)
Codegen
标准用法如下:tezosgen HelloContract path_to_abi/abi.json -x path_to_xcodeproj/project.xcodeproj -o relative_output_path
请注意,输出路径选项(《--output》)应该相对于您的项目 - 如果您的生成文件在《YourProjectName/MainFolder/GeneratedContracts》文件夹中,则应写出《--output MainFolder/GeneratedContracts》。为了您的项目能够绑定,您还必须设置《--xcode》选项。否则,您将不得不手动将文件拖到您的项目中。
生成代码的使用
使用由《codegen》创建的代码进行标准调用的样子
import TezosSwift
tezosClient.optionalStringContract(at: "KT1Rh4iEMxBLJbDbz7iAB6FGLJ3mSCx3qFrW").call(param1: "hello").send(from: wallet, amount: Tez(1), completion: { result in
switch result {
case .failure(let error):
XCTFail("Failed with error: \(error)")
testCompletionExpectation.fulfill()
case .success(_):
testCompletionExpectation.fulfill()
}
})
wallet
和 tezosClient
应该使用 TezosSwift 来创建。注意,目前创建的代码只能与 ReactiveSwift
一起工作。
调用结果可能是事务的 String
哈希或者一个 TezosError
。