PocketAion 0.0.14

PocketAion 0.0.14

Pabel Nunez L.维护。



 
依赖项
Pocket~> 0.0.3
BigInt~> 3.1
SwiftyJSON~> 4.0
 

PocketAion 0.0.14

  • Pabel Nunez L.和Luis C. de Leon

Pocket IOS AION插件

AION IOS插件,用于连接任何与AION兼容的Pocket节点。有关Pocket节点的更多信息,您可以在此处查看仓库:这里

安装

需要在Podfile中安装以下pod

pod 'PocketAion', '~> 0.0.14'

关于此插件

此插件允许您的应用程序向支持AION网络的所有给定Pocket节点发送TransactionQuery对象。

Transaction是指任何更改网络状态的调用:将AION从一个账户发送到另一个账户,调用智能合约等。

Query是指任何从当前网络状态读取数据的调用:获取账户余额,从智能合约中读取等。

子网络注意事项

在贫困网络术语中,任何给定的并行网络都是一个去中心化系统,例如在AION的情况下,除了主网络(子网络256)之外,您还可以访问精通测试网络(子网络32)。在连接到自定义网络的情况下,请确保您要连接的贫困节点支持给定的子网络。

这有助于用户在不同的网络之间切换,或者用于建立应用程序测试环境和生产环境之间的差异。

使用贫困Ios插件

只需导入PocketAion类并调用以下描述的任何函数。此外,您还可以使用以下函数将创建的TransactionQuery对象异步或同步地发送到您的配置贫困节点。

配置对象

任何给定的PocketAion实例的构造函数需要一个实现Configuration接口的类。让我们看一下下面的例子

1- 在您的appDelegate中导入PocketPocketAion

2- 将Configuration协议添加到类中:class AppDelegate: UIResponder, UIApplicationDelegate, Configuration, {

3- 实现nodeURL与节点URL:var nodeURL: URL { get { return URL.init(string: "https://aion.pokt.network")! } }

4- 在指定了URL之后,我们需要在Application函数中设置贫困的configurationPocket.shared.setConfiguration(config: self)

创建和导入钱包

遵循下面的例子来创建一个AION钱包

let wallet = try PocketAion.createWallet(subnetwork: subnetwork, data: nil)

导入时,需要定义

1- 公钥

2- 私钥

3- 子网络

4- 数据

let privateKey = "0x";
let address = "0x";
let subnetwork = "32";

var importedWallet = try PocketAion.importWallet(privateKey: privateKey, subnetwork: subnetwork, address: address, data: nil)

发送交易

发送交易的要求需要定义:

1- 子网络:256(主网络),32(精通测试网)。2- 随机数:钱包交易计数。3- 钱包:通过创建新的钱包或导入钱包。4- 发往:我们想要发送资金的地址。5- 价值:我们想要发送的AION数量。6- 数据(可选):交易中的十六进制编码数据(如果发送到智能合约)或发送到钱包的原始数据。7- NRG(能量):我们愿意在此交易中执行的总体计算步骤。8- NRG价格(能量价格)

要发送交易,请使用 eth 命名空间中的 sendTransaction 函数,如下例所示


try? PocketAion.eth.sendTransaction(wallet: account, nonce: BigInt(1), to: "0x0", data: "", value: BigInt.init(20000000000), gasPrice: BigInt(10000000000), gas: BigInt(21000)) { (result, error) in
  // Result is the transaction hash
}

查询数据

PocketAION当前支持两个命名空间:neteth,它们包含在执行每个命名空间时调用的预构建 RPC Methods。在下面的示例中,您将了解如何使用这两个命名空间之一获取钱包余额。

try? PocketAion.eth.getBalance(address: "0x0...", subnetwork: "32", blockTag: BlockTag.init(block: .LATEST), handler: { (result, error) in
    // result is returned as a BigInt, also can be converted using the .toString() function
    // error if any contains a description of the error, returned by the Pocket Node
})

与智能合约交互

在与智能合约交互之前。我们还需要初始化一个 AionContract 类 的实例,需要指定4个参数

1- PocketAION实例

2- 智能合约的ABI

3- 合约地址

4- 子网络

初始化 AionContract 实例

以下是如何初始化您的 AionContract 的示例

let pocketAion = PocketAion.init()
let contractAddress = "0x0..."
guard let contractABI = JSON.init(parseJSON: "[...]").array else {
    // if there was an error parsing the JSON array
    throw PocketPluginError.Aion.executionError("Failed to retrieve JSON ABI")
    return nil
}
// Finally initialize your AionContract
let aionContract = try AionContract.init(pocketAion: pocketAion, abiDefinition: contractABI, contractAddress: contractAddress, subnetwork: "32")

向智能合约写入

在我们向合约写入之前,我们需要定义

1- 函数名称

2- 函数参数

3- 随机数

4- NRG(能量)

5- NRG价格(能量价格)

6- 价值

参数满足后,现在我们可以调用 executeFunction

` let wallet = "0x0" let funcParams = Any functParams.append(BigInt.init(1)) // 对于这个智能合约,我们将发送1 let nrg = BigInt.init(50000) let nrgPrice = BigInt.init(10000000000) let nonce = BigInt.init(0) let value = BigInt.init(0)

尝试执行以下函数:aionContract.executeFunction(functionName: "addToState", wallet: wallet, functionParams: funcParams, nonce: nonce, nrg: nrg, nrgPrice: nrgPrice, value: value, handler: { (result, error) in // 结果将包含交易哈希 // 如果有错误,则包含从 Pocket Node 发送的错误 }) `

调用 AionContract 函数

调用智能合约函数时有两个主要区别:调用它是否会改变智能合约的状态。这由 JSON 中的 constant 属性指示。

要读取智能合约,您需要使用以下参数调用 executeConstantFunction 调用,以下是一个示例

1- 函数名称

2- 函数参数

3- 地址(可选)

4- NRG(能量,可选)

5- NRG 价格(能量价格,可选)

6- 价值(可选)

try? contract.executeConstantFunction(functionName: "multiply", fromAdress: nil, functionParams: [any](), nrg: nil, nrgPrice: nil, value: nil, handler: { (result, error) in
    // Result will be a hex string representing the number 20: 0x14
    // Error, if any, will be the error returned by the Pocket Node
})

参考资料

请参阅 AION JSON RPC 文档 此处,获取有关您可以从应用程序中调用的可用 RPC 方法的更多信息。