Flutter RPC通信插件dero_rpc_api的使用

发布于 1周前 作者 htzhanglong 来自 Flutter

Flutter RPC通信插件dero_rpc_api的使用

特性

dero_rpc_api 提供了与 Dero 守护进程(derod)和钱包(wallet)进行交互的完整 RPC 方法集。这些方法定义在 Dero API 中。

Dero守护进程

DerodRepository 类提供了以下方法:

  • Ping
  • GetInfo
  • GetHeight
  • GetBlock
  • GetBlockCount
  • GetBlockHeaderByHash
  • GetBlockHeaderByTopoHeight
  • GetTxPool
  • GetTransaction
  • GetLastBlockHeader
  • GetSC
  • GetGasEstimate
  • NameToAddress
  • GetRandomAddress
  • SendRawTransaction
  • GetBlockTemplate
  • SubmitBlock
  • GetEncryptedBalance

钱包

WalletRepository 类提供了以下方法:

  • Ping
  • GetAddress
  • GetBalance
  • GetHeight
  • GetTransferbyTXID
  • GetTransfers
  • MakeIntegratedAddress
  • SplitIntegratedAddress
  • QueryKey
  • Transfer
  • scinvoke

RPC负载参数

  • 支持的数据类型 DataType
  • 内置的参数名称 Argument
  • 参数类型的别名 Arguments

使用方法

以下是使用 dero_rpc_api 查询 Dero 守护进程和钱包的方法示例。

查询Dero守护进程

import 'dart:io';

import 'package:dero_rpc_api/dero_rpc_api.dart';

const String derodSimulatorAddr = '127.0.0.1:20000';

Future<void> main() async {
  final derodRepository = DerodRepository(rpcAddress: derodSimulatorAddr)..start();

  try {
    // 打印Dero网络信息。
    derodRepository.listenDerodEvent(
      onNewHeight: (event) async {
        final info = await derodRepository.getInfo();
        print(info);
      },
    );

    // 获取硬编码的名称服务智能合约并打印所有注册的名称。
    final getSCParams = GetSCParams(scid: '0000000000000000000000000000000000000000000000000000000000000001');
    final getScResult = await derodRepository.getSC(getSCParams);
    print(getScResult.variableStringKeys);
  } catch (e) {
    print(e);
  }
  // await derodRepository.close();
}

查询钱包

import 'dart:io';

import 'package:dero_rpc_api/dero_rpc_api.dart';

const String walletSimulatorAddr = '127.0.0.1:30000';

Future<void> main() async {
  final walletRepository = WalletRepository(rpcAddress: walletSimulatorAddr)..start();

  try {
    // 创建一个集成地址并打印它。
    final integratedAddressParams = MakeIntegratedAddressParams(
      payloadRPC: [
        Argument(
          name: 'identifier',
          datatype: DataType.dataString,
          value: 'my_payment_identifier',
        ),
      ],
    );

    final makeIntegratedAddressResult = await walletRepository.makeIntegratedAddress(integratedAddressParams);
    print(makeIntegratedAddressResult.integratedAddress);

    // 发送1个dero到另一个钱包,并在交易载荷中包含一条消息。
    // 记住,1 dero = 100000个原子单位。
    final transferParams = TransferParams(
      transfers: [
        Transfer(
          destination: 'Ez3kiel',
          amount: 100000,
          payloadRPC: [
            Argument(
              name: 'comment',
              datatype: DataType.dataString,
              value: 'my secret message ...',
            ),
          ],
        ),
      ],
    );
    final transferResult = await walletRepository.transfer(transferParams);

    // 打印txid。
    print(transferResult.txid);
  } catch (e) {
    print(e);
  }

  await walletRepository.close();
  // exit(0);
}

捐赠

如果您觉得这个包有用,请考虑捐赠:

发送任意金额到以下地址:

dero1qy5a6wk2r9mq3e5kagku4kdrhq407qhvht8qke5sxpm9u8lqmph3vqgl3nz8t

或者使用我的命名地址:

Ez3kiel

更多关于Flutter RPC通信插件dero_rpc_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter RPC通信插件dero_rpc_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个使用Flutter RPC通信插件dero_rpc_api的示例代码。这个示例将展示如何在Flutter应用中配置和使用dero_rpc_api插件来进行RPC通信。

首先,确保你已经在pubspec.yaml文件中添加了dero_rpc_api依赖:

dependencies:
  flutter:
    sdk: flutter
  dero_rpc_api: ^最新版本号  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,我们编写一个Flutter应用来使用dero_rpc_api插件。这个示例将展示如何连接到Dero RPC服务器并获取一些基本信息,如网络高度和节点信息。

import 'package:flutter/material.dart';
import 'package:dero_rpc_api/dero_rpc_api.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String networkHeight = 'Loading...';
  String nodeInfo = 'Loading...';
  bool isLoading = true;

  @override
  void initState() {
    super.initState();
    _fetchData();
  }

  Future<void> _fetchData() async {
    // 配置RPC客户端
    final rpcClient = DeroRpcClient('http://<your-dero-node-rpc-address>:<port>', '<your-rpc-password>');

    try {
      // 获取网络高度
      final networkHeightResponse = await rpcClient.getNetworkHeight();
      setState(() {
        networkHeight = 'Network Height: ${networkHeightResponse.height}';
      });

      // 获取节点信息
      final nodeInfoResponse = await rpcClient.getNodeInfo();
      setState(() {
        nodeInfo = 'Node Info: ${nodeInfoResponse.toString()}';
        isLoading = false;
      });
    } catch (e) {
      setState(() {
        networkHeight = 'Error: ${e.toString()}';
        nodeInfo = 'Error: ${e.toString()}';
        isLoading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Dero RPC API Example'),
        ),
        body: Center(
          child: isLoading
              ? CircularProgressIndicator()
              : Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Text(networkHeight),
                    SizedBox(height: 20),
                    Text(nodeInfo),
                  ],
                ),
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个Flutter应用,并在initState方法中调用_fetchData方法来获取数据。
  2. DeroRpcClient被实例化并配置为连接到Dero RPC服务器。你需要替换<your-dero-node-rpc-address><port>为你的Dero节点的RPC地址和端口,<your-rpc-password>为你的RPC密码。
  3. 使用getNetworkHeightgetNodeInfo方法从Dero节点获取网络高度和节点信息。
  4. 使用setState方法更新UI以显示获取到的数据或错误信息。

请注意,在实际应用中,你应该考虑更安全地处理RPC密码(例如,使用环境变量或安全的存储机制),并且应该添加更多的错误处理和用户反馈机制。

回到顶部