TezosGen 1.1.0

TezosGen 1.1.0

Ackee GithubMarek Fort 维护。



TezosGen 1.1.0

  • 作者:
  • Ackee

Tezos iOS 开发套件

CI Status Version License Swift Package Manager compatible Platform

安装

根据您的偏好和需求,安装 TezosGen 到您的机器或项目中有多种可能性。请注意,如果您不使用 Cocoapods 安装 TezosGen,您必须自己导入 TezosSwift

下载最新发布版本的 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 中。


全局安装
  1. 使用 cd 进入解压缩的目录
  2. make install
  3. 然后使用 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()
    }
})

wallettezosClient 应该使用 TezosSwift 来创建。注意,目前创建的代码只能与 ReactiveSwift 一起工作。

调用结果可能是事务的 String 哈希或者一个 TezosError