博客
关于我
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/

你可能感兴趣的文章
nfs复习
查看>>
NFS安装配置
查看>>
NFS的安装以及windows/linux挂载linux网络文件系统NFS
查看>>
NFS的常用挂载参数
查看>>
NFS网络文件系统
查看>>
nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
查看>>
NFV商用可行新华三vBRAS方案实践验证
查看>>
ng build --aot --prod生成文件报错
查看>>
ng 指令的自定义、使用
查看>>
nghttp3使用指南
查看>>
Nginx
查看>>
nginx + etcd 动态负载均衡实践(三)—— 基于nginx-upsync-module实现
查看>>
nginx + etcd 动态负载均衡实践(二)—— 组件安装
查看>>
nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
查看>>
Nginx + Spring Boot 实现负载均衡
查看>>
Nginx + uWSGI + Flask + Vhost
查看>>
Nginx - Header详解
查看>>
Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)
查看>>
nginx 1.24.0 安装nginx最新稳定版
查看>>
nginx 301 永久重定向
查看>>