Ethereum 使用web3swift与自定义智能合约交互
我正在使用web3swift库,我设法完成了一些事务,主要是GET(balanceOf、owner等)。我阅读了整个自述文件(文档),但我不太确定,我们可以使用这个库调用自定义智能合约中的函数吗?例如,我有商店智能合约,我想从中调用buy函数?我看到我们可以转让eth和ERC20代币,但这对我来说还不够。有什么帮助吗?是的,您可以调用自定义智能合约上的任何函数。这里有一个例子Ethereum 使用web3swift与自定义智能合约交互,ethereum,smartcontracts,web3swift,Ethereum,Smartcontracts,Web3swift,我正在使用web3swift库,我设法完成了一些事务,主要是GET(balanceOf、owner等)。我阅读了整个自述文件(文档),但我不太确定,我们可以使用这个库调用自定义智能合约中的函数吗?例如,我有商店智能合约,我想从中调用buy函数?我看到我们可以转让eth和ERC20代币,但这对我来说还不够。有什么帮助吗?是的,您可以调用自定义智能合约上的任何函数。这里有一个例子 let infura = Web3.InfuraMainnetWeb3() // 1
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))
}
}
}
call
method适用于标识符为view
的方法,因此您不会为其付费,method send()适用于智能合约的方法,这些方法应使用gas支付执行费用我希望我的回答能帮助你!如果仍有不清楚的地方,请随时询问!:) 我有同样的问题,除了在这里简要讨论外,在项目的任何地方都看不到答案:我在这里提出了一个问题供大家参考:@mattgabor回购协议的官方支持者将其移至感谢答案。这是可行的,我自己用与此非常相似的代码实现了。@maptuhec很高兴听到这个消息!你能接受这种情况下的答案吗?:)谢谢你的回答。你怎么知道参数类型?我正在尝试使用如下类型的Solidy函数:函数get_data_string_by_id(uint256 tokenId){..}+看起来像Web3Options。defaultOptions()不推荐使用吗?可能使用:let infura=Web3.InfuraMainnetWeb3()+infura.transactionOptions.from=address