ContractCodegen 0.1

ContractCodegen 0.1

Ackee GithubMarek FortJan Mísař 维护。



 
依赖
EtherKit~> 0.2.0
ReactiveSwift~> 4.0
 

  • Ackee

ackee|Ethereum-iOS-Dev-Kit

Ethereum iOS Dev Kit

安装

根据您的偏好和需求,有多种方式可以安装 ContractCodegen 到您的机器或项目中。请注意,如果您不使用 Cocoapods 安装 ContractCodegen,您将需要自己导入 EtherKitReactiveSwift

下载最新版本的 ZIP 文件

我们推荐您在项目目录内解压缩 ZIP 文件并将其内容提交到 git。这样,所有同事都将在这个项目中使用相同的 ContractCodegen 版本。

如果您在名为 contractcodegen 的文件夹中解压缩了 ZIP 文件,您可以使用以下方式调用它

contractcodegen/bin/contractcodegen …

通过 CocoaPods

如果您使用 CocoaPods,您只需在 Podfile 中添加 pod 'ContractCodegen'

这将下载 ContractCodegen 的二进制文件和依赖项,在下次执行 pod install 时下载到 Pods/ 目录。

由于您可以在 Podfile 中指定 ContractCodegen 的确切版本,因此这确保了所有同事将在此项目中使用相同的 ContractCodegen 版本。

您可以从终端调用 ContractCodegen

Pods/ContractCodegen/ContractCodegen/bin/contractcodegen …

注意:ContractCodegen 并不是一个 pod,因为它不是在运行时依赖于您的代码的库;通过 Cocoapods 进行安装只是将 ContractCodegen 二进制文件安装到 Pods/ 目录的一种技巧,但在您的 Xcode 的 Pods.xcodeproj 中,您不会在 Pods/ContractCodegen 组中看到任何 swift 文件。这是正常的:ContractCodegen 二进制文件仍然位于 Finder 中的该文件夹中。


系统范围内安装
  1. 切换到解压缩后的目录
  2. 运行make install
  3. 然后只需通过contractgen ...简单地调用contractgen即可

iOS MVVM项目模板

我们还创建了iOS MVVM项目模板,因此设置项目从未如此简单。轻松遵循安装说明。完成后,将name_of_your_abi.json文件添加到Resources。然后,将ContractCodegen添加到您的Podfile,运行pod install,并在项目根目录中运行此命令。

Pods/ContractCodegen/ContractCodegen/bin/contractgen HelloContract NameOfYourProject/Resources/abi.json -x NameOfYourProject.xcodeproj -o NameOfYourProject/Model/Generated/GeneraredContracts

使用方法

代码生成

标准用法如下:contractgen 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 ReactiveSwift
import EtherKit 
let helloWorldContractAddress = try! Address(describing: "0x7cA5E6a3200A758B146C17D4E3a4E47937e79Af5")
let query = EtherQuery(URL(string: "infrastructure-url")!, connectionMode: .http)
query.helloContract(at: helloWorldContractAddress).greet(greetString: "Greetings!").send(using: key, amount: Wei(1)).start()

应使用协议PrivateKeyTypekey(更多请参阅EtherKit文档)。注意当前创建的代码只与ReactiveSwift一起使用。

如果合约函数是不可支付的,语法几乎相同(省略了amount

query.helloContract(at: helloWorldContractAddress).greet(greetString: "Greetings!").send(using: key).start()

调用结果要么是事务的Hash,要么是EtherKitError