【问题标题】:Interacting with custom smart contract using web3swift使用 web3swift 与自定义智能合约交互
【发布时间】:2018-12-20 18:40:04
【问题描述】:

我正在使用 web3swift 库,并且我设法进行了一些交易,主要是获取(balanceOf、owner 等)。我阅读了整个自述文件(文档),但我不太确定,我们可以使用这个库从我们的自定义智能合约中调用函数吗?例如,我有商店智能合约,我想从中调用购买功能?我看到我们可以转移 eth 和 ERC20 代币,但这对我来说还不够。有什么帮助吗?

【问题讨论】:

标签: ethereum smartcontracts web3swift


【解决方案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))
            }
        }
    }  
  1. 设置合同和 ABI。您需要数据或字符串格式的合约地址。 let ethContractAddress = EthereumAddress("0xfa28eC7198028438514b49a3CF353BcA5541ce1d")! 您可以直接从 Remix IDE 获取合同的 ABI。
  2. 设置所需的所有选项。
  3. 可能是答案的主要部分之一 - 在这里您使用合约方法名称创建交易并将该方法所需的所有参数放入其中。 4.在这里您可以调用或发送交易。 call 方法是针对带有 view 标识符的方法,所以你不会为此付费,方法 send() 是针对智能合约的方法,应该用 gas 支付执行。
  4. 这里你只是解析结果,由方法返回。您应该知道要从具体方法中获取的变量的数据类型,以便正确解析它们。

希望我的回答对你有帮助!如果仍有不清楚的地方 - 请随时提问! :)

【讨论】:

  • 感谢您的回答。这行得通,我设法通过与此非常相似的代码自己做到了。
  • @maptuhec 很高兴听到这个消息!在这种情况下,您能接受答案吗? :)
  • 感谢您的回答。你怎么知道参数类型?我正在尝试使用像这样键入的 solitidy 函数: function get_data_string_by_id(uint256 tokenId){..}
  • + 好像 Web3Options.defaultOptions() 已被弃用? github.com/matter-labs/web3swift/pull/120 也许使用:让 infura = Web3.InfuraMainnetWeb3() + infura.transactionOptions.from = address
  • 你找到uint256的解决方案了吗,我也有同样的问题?
猜你喜欢
  • 2021-03-12
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多