我正在使用web3swift库,我成功地完成了一些事务,主要是gets (balanceOf、owner等)。我阅读了整个自述文件(文档),但我不太确定,我们是否可以使用这个库来调用自定义智能契约中的函数?例如,我有商店智能合同,我想从它调用购买功能?我看到我们可以传输eth和ERC20令牌,但这对我来说还不够。在这方面有什么帮助吗?
发布于 2018-08-22 10:53:26
是的,您可以在自定义智能契约上调用任何函数。下面是一个例子。
let infura = Web3.InfuraMainnetWeb3()
// 1
let contract = infura.contract(someABI, at: ethContractAddress, abiVersion: 2)
// 2
var options = Web3Options.defaultOptions()
options.from = address
// 3
let transactionIntermediate = contract?.method("accountExists", parameters:[address] as [AnyObject], options: options)
// 4
let result = transactionIntermediate!.call(options: options)
switch result {
// 5
case .success(let res):
let ans = res["0"] as! Bool
DispatchQueue.main.async {
completion(Result.Success(ans))
}
case .failure(let error):
DispatchQueue.main.async {
completion(Result.Error(error))
}
}
} let ethContractAddress = EthereumAddress("0xfa28eC7198028438514b49a3CF353BcA5541ce1d")!您可以直接从Remix获得合同的ABI。call方法用于具有view标识符的方法,因此您不会为此付费,方法send()用于智能契约的方法,这些方法应该在执行时使用gas支付。我希望我的回答能帮助你!如果有什么事情还不清楚,请随便问!:)
https://stackoverflow.com/questions/51307215
复制相似问题