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

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

希望我的回答对您有所帮助!如果还有什么不清楚 - 请随时提问! :)