我正在使用web3swift库,我设法进行了一些交易,大部分都得到了(balanceOf,owner等)。我阅读了整个自述文件(文档),但是我不确定,我们可以使用该库从自定义智能合约中调用函数吗?例如,我有商店智能合约,我想从中调用购买功能吗?我看到我们可以转让eth和ERC20令牌,但这对我来说还不够。有什么帮助吗?
答案 0 :(得分:3)
是的,您可以在自定义智能合约上调用任何功能。这是一个例子。
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 IDE获取合同的ABI。call
方法适用于具有固定标识符view
的方法,因此您无需为此付费,而send()方法适用于应以加油费执行的智能合约方法。希望我的回答对您有所帮助!如果仍然不清楚,请随时提出! :)