此时可以将IOS应用程序与以太坊网络上的ERC20令牌集成。
似乎有一个名为web3.swift的库,可以与以太坊集成。也许这是要走的路,但不知道它是否已准备好用于生产应用程序。
此外,似乎有一些关于Swift和区块链的在线课程,例如this one from Lynda和this one from Udemy,还有一些关于区块链集成的教程,例如this from AppCoda和this one,其中使用Tierion区块链作为服务。实际上,AWS,Azure等似乎都提供了区块链即服务。亚马逊通过以太坊提供托管区块链。
但是,我还没有看到专门解决如何将IOS应用程序与以太坊集成的任何内容。而且,如果它是由AWS在后端完成的,这是否违反了使用区块链来避免在服务器上集中化的目的?
我正在研究的用例是查看您拥有的令牌数量,并使用户能够将令牌用于服务。但是令牌将驻留在区块链上。
在此阶段是否有可能提供任何建议,如果可以的话,还提供了如何进行开发的建议。
答案 0 :(得分:2)
Infura服务在这里可能会有所帮助。创建帐户并设置项目后,将为您提供可以在特定的以太坊网络上执行写操作的节点(用于主网和一些测试网)。
以下是用Swift和Web3.swift编写的代码,可能会有所帮助:
func send(sender: String,
receiver: String,
senderSecret: String,
tokenContractAddress: String,
amount: Int,
completion: @escaping Result<Transaction, Error>) {
let web3 = Web3(rpcURL: "YOUR_INFURA_NODE_ID_GOES_HERE")
do {
let privateKey = try EthereumPrivateKey(hexPrivateKey: senderSecret)
let senderWallet = try EthereumAddress(hex: sender, eip55: true)
let receiverWallet = try EthereumAddress(hex: receiver, eip55: true)
let contract = web3.eth.Contract(
type: GenericERC20Contract.self,
address: try EthereumAddress(hex: tokenContractAddress, eip55: true)
)
firstly {
return web3.eth.getTransactionCount(address: privateKey.address, block: .latest)
}.compactMap { nonce in
guard let tx = contract
.transfer(to: receiverWallet, value: BigUInt(amount))
.createTransaction(
nonce: nonce,
from: senderWallet,
value: 0,
gas: 100000,
gasPrice: EthereumQuantity(quantity: 21.gwei)
) else { return nil }
return try tx.sign(with: privateKey, chainId: 3)
}.then { tx in
return web3.eth.sendRawTransaction(transaction: tx!)
}.done { hash in
let tx = Transaction(hash: hash)
completion.set(.success(tx))
}.catch { error in
completion.set(.failure(error))
}
} catch {
completion.set(.failure(error))
}
}
如果不需要启动交易,而您只想使用诸如代币供应/持有人余额/等之类的公共信息。-您可以尝试使用blockscout之类的开放式API获得所需的数据。