博客
关于我
Omni Layer/USDT区块链.NET/C#开发包简介
阅读量:617 次
发布时间:2019-03-13

本文共 6761 字,大约阅读时间需要 22 分钟。

OmniTool.Net 开发包

OmniTool.Net 开发包为 .Net/C# 应用提供了快速支持 Omni Layer/USDT 数字资产的能力,适用于基于自有 Omni Layer 节点的应用场景,也支持基于第三方 API 服务和离线裸交易的轻量级部署场景。以下是开发包的详细介绍。


1. 开发包概述

OmniTool.Net 开发包主要包含以下功能特性:

  • 完善的 Omni Layer 节点 RPC API 封装:为开发者提供便捷的接口操作 Omni Layer网络。
  • 支持利用自有节点或第三方服务获取指定地址的比特币 UTXO 集合:帮助开发者快速获取所需的交易数据。
  • 支持离线生成 Omni 代币转账裸交易:允许在没有网络连接的情况下创建裸交易。
  • 支持利用自有节点或第三方服务广播裸交易:将生成的裸交易发送到目标网络。

此外,开发包支持本地部署的 OmniRaced 节点,也支持第三方服务提供的开放 API。新增第三方服务只需实现相应的接口,即可快速集成。


2. 主要类和接口

OmniTool.Net 的主要代码文件清单如下:

文件名 说明
OmniTool.sln OmniTool.Net 解决方案文件
OmniTool.csproj OmniTool.Net 开发库项目文件
OmniClient.cs Omni Layer/Btc RPC API 客户端
RpcModule.cs RPC API 模块实现类
ToolKit.cs 开发库入口类
IKeyStore.cs 密钥存储接口
IUtxoCollector.cs UTXO 采集器接口
IUtxoSelector.cs UTXO 选择器接口
IBroadcaster.cs 裸交易广播器接口
KeyStoreMemory.cs 内存密钥存储库实现类
KeyStoreSqlite.cs SQLite 密钥存储库实现类
UtxoCollectorRpc.cs 基于 RPC API 的 UTXO 采集器实现类
UtxoCollectorSmartbit.cs 基于云端第三方 API 的 UTXO 采集器实现类
UtxoSelectorDefault.cs UTXO 选择器接口默认策略实现类
BroadcasterRpc.cs 基于 RPC API 的裸交易广播器实现类
BroadcasterSmartbit.cs 基于云端第三方 API 的裸交易广播器实现类
UtxoBag.cs UTXO 集合类
Utxo.cs UTXO 模型类
KeyStoreItem.cs 密钥存储记录类
Utils.cs 辅助工具类
Demo.csproj OmniTool.Net 演示应用项目文件
Program.cs 演示应用入口代码
RpcClientDemo.cs Omni/Btc RPC API 客户端使用方法演示代码
MemoryKeyStoreDemo.csproj 内存密钥库使用方法演示代码
SqliteKeyStoreDemo.csproj SQLite 密钥库使用方法演示代码
BtcTxRpcDemo.cs 比特币转账交易演示代码,基于 RPC API
BtcTxCloudDemo.cs 比特币转账交易演示代码,基于第三方服务 API
OmniTxRpcDemo.cs Omni/USDT 代币转账交易演示代码,基于 RPC API
OmniTxCloudDemo.cs Omni/USDT 代币转账交易演示代码,基于第三方服务 API

3. OmniClient 类使用说明

OmniClient 类封装了比特币及 Omni Layer 的 RPC API 接口协议。创建 OmniClient 对象时,需要传入包含有效身份信息的节点 RPC URL。例如,安装在本机的 OmniCore 节点软件接入主网,其配置如下:

  • rpcuser:user
  • rpcpassword:123456
  • rpcport:8332

以下是创建 OmniClient 的示例代码:

// 使用 OmniTool; using OmniTool.OmniClient;OmniClient client = new OmniClient(    "http://user:123456@127.0.0.1:8332", // 节点 RPC API URL    "main" // 接入的 Bitcoin 网络);

OmniClient 类通过子模块概念将 Bitcoin 原有的 RPC 接口与 Omni 层的扩展接口分开管理。例如,获取某个地址的 USDT 代币余额需要调用 Omni 层的接口,方法如下:

var ret = client.Omni.GetBalance(    "1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P", // 账户地址    31 // USDT 资产 ID);Console.WriteLine(ret); // 打印返回结果

使用 OmniClient 进行简单的 USDT 转账:

var ret = client.Omni.Send(    "3M9qvHKtgARhqcMtM5cRT9VaiDJ5PSfQGY", // 转出地址    "37FaKponF7zqoMLUjEiko25pDiuVH5YLEa", // 转入地址    31, // USDT 资产 ID    "100.00" // 转移代币数量);Console.WriteLine(ret); // 打印交易哈希

4. ToolKit 类使用说明

如果不愿搭建 OmniCore 节点,而是希望基于第三方 API 为应用增加对 Omni Layer/USDT 的支持,可以使用 ToolKit 类。ToolKit 类的主要功能是根据私钥生成并广播 Omni 代币转账或比特币转账裸交易。

4.1 Omni/USDT 代币转账

以下是使用 ToolKit 实现的 Omni/USDT 代币转账示例代码:

// 使用 OmniTool; using OmniTool.ToolKit;String network = "main";Toolkit kit = new ToolKit(    network, // 接入的网络    new KeyStoreMemory(), // 使用内存密钥库    new UtxoCollectorSmartbit(network), // 使用云端 UTXO 采集器    new UtxoSelectorDefault(), // 使用默认策略 UTXO 选择器    new BroadcasterSmartbit(network) // 使用云端裸交易广播器);String privHex = "4aec8e45106....00d5c5a05b"; // 私钥:16进制字符串kit.AddKey(privHex); // 将私钥加入 ToolKitString from = kit.KeyStore.GetByKey(privHex).Address; // 私钥对应的地址作为发起账号String to = "1GxX5tQR1C.....x2zbdj4mMuDcWR"; // 接收地址String txid = kit.SendOmnicoin(    from, // 发送方地址    to, // 接收方地址    31, // 转账代币 ID:USDT=31    10000 // 转账代币数量);Console.WriteLine($"txid > {txid}"); // 打印交易哈希

4.2 比特币转账

以下是使用 ToolKit 实现的比特币转账示例代码:

// 使用 OmniTool; using OmniTool.ToolKit;String privHex = "4aec8e45106....00d5c5a05b"; // 私钥:16进制字符串kit.AddKey(privHex); // 将私钥加入 ToolKitString from = kit.KeyStore.GetByKey(privHex).Address; // 私钥对应的地址作为发起账号String to = "1GxX5tQR1C.....x2zbdj4mMuDcWR"; // 接收地址String txid = kit.SendBitcoin(    from, // 发送方地址    to, // 接收方地址    10000 // 转账比特币数量,单位:SATOSHI);Console.WriteLine($"txid > {txid}"); // 打印交易哈希

5. UTXO 采集器

OmniTool.Net 使用接口 IUtxoCollector 约定 UTXO 的采集功能。该接口的实现需要支持获取指定地址的候选 UTXO 集合,可指定多个地址。

5.1 接口方法

UtxoBag Collect(String[] addresses); // 提取并返回候选 UTXO 集合

5.2 实现类

  • UtxoCollectorSmartbit:基于云端第三方 API 实现的 UTXO 采集器
  • UtxoCollectorRpc:基于 OmniCore 节点 RPC API 实现的 UTXO 采集器

以下是使用 UtxoCollectorSmartbit 获取测试链某个指定地址的 UTXO 示例代码:

// 使用 OmniTool; using OmniTool.UtxoCollectorSmartbit;IUtxoCollector collector = new UtxoCollectorSmartbit("testnet"); // 测试链String[] addresses = new String[] { "1C3TZ...brS2xHM" }; // 地址清单UtxoBag collected = collector.Collect(addresses); // 获取 UTXO 集合Console.WriteLine($"Collected UTXOs: {collected.Total}"); // 打印 UTXO 总额

6. UTXO 选择器

OmniTool.Net 使用接口 IUtxoSelector 约定 UTXO 的筛选策略。该接口的实现需要根据目标金额从候选 UTXO 中选择可用 UTXO,并返回新的 UTXO 集合。

6.1 接口方法

UtxoBag Select(long target, UtxoBag collected); // 选择可消费 UTXO,返回 UTXO 集合

6.2 实现类

  • UtxoSelectorDefault:选择不少于 6 个确认的未消费 UTXO

以下是使用 UtxoSelectorDefault 从候选 UTXO 中选择至少 100000 SATOSHI 的示例代码:

// 使用 OmniTool; using OmniTool.UtxoSelectorDefault;IUtxoSelector selector = new UtxoSelectorDefault();UtxoBag collected = // 获取候选 UTXO 集合的代码;例如,调用 UtxoCollector.Collect()selector.Select(100000, collected); // 选择满足条件的 UTXOConsole.WriteLine($"Total > {selector.Selected.Total}"); // 打印选中的 UTXO 总额

7. 裸交易广播器

OmniTool.Net 使用接口 IBroadcaster 约定 裸交易 的广播功能。该接口的实现需要将裸交易发送到 Omni/Btc 网络中。

7.1 接口方法

String Broadcast(String rawtx); // 广播裸交易

7.2 实现类

  • BroadcasterSmartbit:基于云端第三方 API 的裸交易广播器
  • BroadcasterRpc:基于 OmniCore 节点 RPC API 的裸交易广播器

以下是使用 BroadcasterSmartbit 广播裸交易的示例代码:

// 使用 OmniTool; using OmniTool.BroadcasterSmartbit;IBroadcaster broadcaster = new BroadcasterSmartbit("testnet"); // 测试链String txid = broadcaster.Broadcast("01000000011da9283b4...59f58488ac00000000"); // 裸交易Console.WriteLine($"Broadcasted Transaction ID: {txid}"); // 打印交易哈希

8. 密钥存储接口

OmniTool.Net 使用接口 IKeyStore 约定 密钥存储 的功能规格。

8.1 接口方法

bool Add(KeyStoreItem item); // 存入密钥KeyStoreItem[] List(); // 浏览全部密钥KeyStoreItem GetByKey(); // 查询指定 16进制 私钥对应的密钥信息KeyStoreItem GetByWif(); // 查询指定 WIF 格式私钥对应的密钥信息KeyStoreItem GetByAddress(); // 查询指定地址对应的密钥信息KeyStoreItem GetByScript(); // 查询指定公钥脚本对应的密钥信息

8.2 实现类

  • KeyStoreMemory:基于内存字典实现的密钥存储库,适合调试
  • KeyStoreSqlite:基于 SQLite 数据库实现的密钥存储库,适合生产环境

以下是使用 KeyStoreSqlite 创建并查询密钥的示例代码:

// 使用 OmniTool; using OmniTool.KeyStoreSqlite;ToolKit kit = new ToolKit(    "testnet", // 测试链    keyStore: new KeyStoreSqlite("./testnet.wallet") // 密钥存储库);String addr1 = kit.NewAddress("SEGWIT-P2SH"); // 生成隔离见证 P2SH 地址String addr2 = kit.NewAddress("SEGWIT"); // 生成隔离见证地址String addr3 = kit.NewAddress("P2PKH"); // 生成 P2PKH 地址String addr4 = kit.AddKey("4aec8e45106....00d5c5a05b", "SEGWIT-P2SH"); // 导入 16进制 私钥String addr5 = kit.AddWif("cNJFgo1driF...SkdcF6JXXwHMm"); // 导入 WIF 格式私钥KeyStoreItem[] items = kit.List(); // 获取全部密钥记录foreach (var item in items) {    Console.WriteLine($"key > {item.Key}");    Console.WriteLine($"wif > {item.Wif}");    Console.WriteLine($"address > {item.Address}");    Console.WriteLine($"script > {item.Script}");}KeyStoreItem item = kit.GetByAddress(addr1); // 查询指定地址的密钥记录Console.WriteLine($"key > {item.Key}");

9. 下载地址

OmniTool.NET 下载地址:http://sc.hubwiz.com/codebag/omni-dotnet-lib/

转载地址:http://vlyaz.baihongyu.com/

你可能感兴趣的文章
Nginx配置TCP代理指南
查看>>
Nginx配置——不记录指定文件类型日志
查看>>
Nginx配置代理解决本地html进行ajax请求接口跨域问题
查看>>
Nginx配置参数中文说明
查看>>
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置如何一键生成
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
NHibernate学习[1]
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
查看>>