[英]Interacting with custom smart contract using web3swift
我正在使用 web3swift 庫,並且我設法進行了一些交易,主要是獲取(balanceOf、owner 等)。 我閱讀了整個自述文件(文檔),但我不太確定,我們可以使用這個庫從我們的自定義智能合約中調用函數嗎? 例如,我有商店智能合約,我想從中調用購買功能? 我看到我們可以轉移 eth 和 ERC20 代幣,但這對我來說還不夠。 對此有什么幫助嗎?
"是的,您可以調用自定義智能合約上的任何功能。 這是一個例子。
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
標識符為solidity的方法,因此您不需要為此付費,方法send()用於智能合約的方法,應該使用gas來執行。 我希望我的回答能幫到你! 如果有些事情仍然不清楚 - 隨意問! :)
我已經嘗試過這個解決方案,但看起來它不起作用。 在此處輸入圖像描述
ABI 已正確加載。 我正在調用的函數是這樣的。
let contractAddress = EthereumAddress("0x292A9B1e6Ae49ce03B4c0473D1a53330469aC4fd")!
let abiVersion = 2 // Contract ABI version
let amount = Web3.Utils.parseToBigUInt("0.001", units: .eth)
let parameters: [AnyObject] = [] // Parameters for contract method
let extraData: Data = Data() // Extra data for contract method
let contract = web3Provider.contract(abi, at: contractAddress, abiVersion: abiVersion)!
var options = TransactionOptions.defaultOptions
options.from = walletAddress
DispatchQueue.global(qos: .background).async {
let result = try! contract.method(contractMethod, parameters: [], transactionOptions: options)?.call(transactionOptions: options)
print(result)
}
這總是返回空數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.