使用web3swift与自定义智能合约进行交互

时间:2018-07-12 13:40:52

标签: ethereum smartcontracts web3swift

我正在使用web3swift库,我设法进行了一些交易,大部分都得到了(balanceOf,owner等)。我阅读了整个自述文件(文档),但是我不确定,我们可以使用该库从自定义智能合约中调用函数吗?例如,我有商店智能合约,我想从中调用购买功能吗?我看到我们可以转让eth和ERC20令牌,但这对我来说还不够。有什么帮助吗?

1 个答案:

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

希望我的回答对您有所帮助!如果仍然不清楚,请随时提出! :)