Get Started

NuGet

You can run the following command to install the Tron.Wallet.Net in your project.

PM> Install-Package Tron.Wallet.Net

配置

public record TronRecord(IServiceProvider ServiceProvider, ITronClient? TronClient, IOptions<TronNetOptions>? Options);

public static class TronServiceExtension {
private static IServiceProvider AddTronNet() {
IServiceCollection services = new ServiceCollection();
services.AddTronNet(x =>
{
x.Network = TronNetwork.MainNet;
x.Channel = new GrpcChannelOption { Host = "grpc.trongrid.io", Port = 50051 };
x.SolidityChannel = new GrpcChannelOption { Host = "grpc.trongrid.io", Port = 50052 };
x.ApiKey = "api key"; //https://trongrid.io 邮箱注册申请,免费50万次调用
});
services.AddLogging();
return services.BuildServiceProvider();
} public static TronRecord GetRecord() {
var provider = AddTronNet();
var client = provider.GetService<ITronClient>();
var options = provider.GetService<IOptions<TronNetOptions>>(); return new TronRecord(provider, client, options);
}
}

转出/发送 TRX

private static async Task<dynamic> TrxTransferAsync(string privateKey, string to, long amount) {
var record = TronServiceExtension.GetRecord();
var transactionClient = record.TronClient?.GetTransaction(); var account = new TronAccount(privateKey, TronNetwork.MainNet); var transactionExtension = await transactionClient?.CreateTransactionAsync(account.Address, to, amount)!; var transactionId = transactionExtension.Txid.ToStringUtf8(); var transactionSigned = transactionClient.GetTransactionSign(transactionExtension.Transaction, privateKey);
var returnObj = await transactionClient.BroadcastTransactionAsync(transactionSigned); return new { Result = returnObj.Result, Message = returnObj.Message, TransactionId = transactionId };
}

转出/发送 USDT

private static async Task<string> EtherTransferAsync(string privateKey, string toAddress, decimal amount, string? memo) {
const string contractAddress = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"; var record = TronServiceExtension.GetRecord();
var contractClientFactory = record.ServiceProvider.GetService<IContractClientFactory>();
var contractClient = contractClientFactory?.CreateClient(ContractProtocol.TRC20); var account = new TronAccount(privateKey, TronNetwork.MainNet); const long feeAmount = 30 * 1000000L; return await contractClient.TransferAsync(contractAddress, account, toAddress, amount, memo, feeAmount);
}

这里要设置波场手续费上限,现在必须设置30TRX,否则有可能交易失败,太贵了。其它 trc20 合约也是一样的操作,替换掉合约地址即可。

注意trc20合约交易的 amount 是 decimal 类型,不需要转换成 long 型

static async Task Main(string[] args) {
Console.WriteLine("Program begin.."); var privateKey = "D95611A9AF2A2A45359106222ED1AFED48853D9A44DEFF8DC7913F5CBA727366"; //发送 trx
var result = await TrxTransferAsync(privateKey, "TGehVcNhud84JDCGrNHKVz9jEAVKUpbuiv", 10000000L);
Console.WriteLine(JsonConvert.SerializeObject(result)); //发送 trc20 token usdt
var transactionId = await EtherTransferAsync(privateKey, "TGehVcNhud84JDCGrNHKVz9jEAVKUpbuiv", 10, string.Empty);
Console.WriteLine(transactionId); Console.WriteLine("Program end..\r\nPress any key to exit.");
Console.ReadKey();
}

这个类库非常的简单,几乎不用去关心波场链的东西,只需要生成私钥和地址,就可以轻松完成对地址里面的 trx 和 usdt 等资产进行管理操作。

.NET Core 波场链离线签名、广播交易(发送 TRX和USDT)笔记的更多相关文章

  1. 使用Java SDK实现离线签名

    严格来说,tx-signer并不属于SDK,它是bytomd中构建交易.对交易签名两大模块的java实现版.因此,若想用tx-signer对交易进行离线签名,需要由你在本地保管好自己的私钥. 如果你的 ...

  2. C# 委托链、多路广播委托

    委托链.多路广播委托:也就是把多个委托链接在一起,我们把链接了多个方法的委托称为委托链或多路广播委托 例: class HelloWorld { //定义委托类型 delegate void Dele ...

  3. Android BroadcastReceiver实例Demo(有序广播的发送)

    上一篇简介了广播的发送,这篇主要介绍下,有序广播的发送. 设置完相关属性的时候,广播就会依照有序的方式进行发送: 发送顺序: 先发送第二条广播: 再发送第一条广播: 最后发送第三条广播. 代码例如以下 ...

  4. Android广播的发送与接收

    Android广播的发送与接收 效果图 广播发送 广播分为有序广播和无序广播 有序广播与无序广播的区别 无序广播:只要是广播接收者指定了接收的事件类型,就可以接收到发送出来的广播消息.不能修改消息. ...

  5. Udp广播的发送和接收(iOS + AsyncUdpSocket)下篇

    接上篇C#的Udp广播的发送和接收 http://www.cnblogs.com/JimmyBright/p/4637090.html ios中使用AsyncUdpSocket处理Udp的消息非常方便 ...

  6. Udp广播的发送与接收(C#+UdpClient) 上篇

    简介: Udp广播消息用在局域网的消息传递很方便.本文使用UdpClient类在WPF下实现Udp广播收发 发送: void MainWindow_Loaded(object sender, Rout ...

  7. .Net Core实现区块链初探

    区块链这么火,咱也跟个风.   一.前言 最近,银行总行关于数字货币即将推出的消息频传,把BTC也带得来了一波反弹. 借着这个风,我们也研究一下区块链.   通常大家说到区块链,实际包括两部分概念: ...

  8. Bytom Java版本离线签名

    比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom tx_s ...

  9. cpp 区块链模拟示例(六) 交易

    交易(transaction)是比特币的核心所在,而区块链的唯一目的,也正是为了能够安全可靠地存储交易.在区块链中,交易一旦被创建,就没有任何人能够再去修改或是删除它.在今天的文章中,我们会实现交易的 ...

  10. Web3区块链DAS域名注册教程 tron trx链波卡钱包地址解析 用户名转账 ENS

    而在去中心化系统中,大部分人充值.转账时,使用的都是区块链原生的长地址,比如: ETH 的地址: 0x9euo8sHip*******dHld90 CKB 的地址: ckHUEI829D******* ...

随机推荐

  1. C++基础之字符输出 cout

    找了一些视频教程,课程的示例是输入一个三角形 要输入这样的图案,思路是可以进行拆解,分为两三角形分别输出,先输入一部分,比如,先输出上半部分三角形: 找到规律,可以发现,上面的三角形是7颗星,也就是说 ...

  2. 1.3 ODBC 部署监控数据库

    一.安装ODBC 来自为知笔记(Wiz)

  3. codec

    1.codec究竟是什么 音频解码芯片:Audio codec,又叫声卡:本质就是ADC和DAC 2.codec的作用 在移动设备中,codec的作用可以归结为4种,分别如下: playback:对P ...

  4. linux查看已知进程PID所在的目录

    pwdx 命令 pwdx PID [was@CMTRMWAS1 ~]$ pwdx 31996 31996: /was/AppServer/profiles/AppSrv03

  5. Drf_序列化and反序列化基础

    序列化类 from rest_framework import serializers class BookSerializer(serializers.Serializer): # 要序列化的字段 ...

  6. DVWA-Brute Force(暴力破解)

    暴力破解漏洞,没有对登录框做登录限制,攻击者可以不断的尝试暴力枚举用户名和密码 LOW 审计源码 <?php // 通过GET请求获取Login传参, // isset判断一个变量是否已设置,判 ...

  7. Ocelot使用与设置路由Routing

    一.安装Ocelot 在程序包管理器控制台输入以下命令安装Ocelot Install-Package Ocelot 二.新建两个项目 我们新建两个.Net Core WebAPI项目如下:   直接 ...

  8. 自己动手从零写桌面操作系统GrapeOS系列教程——23.从硬盘读取文件

    学习操作系统原理最好的方法是自己写一个简单的操作系统. 本讲代码文件为boot.asm,要读取的文件为data.txt. 一.在FAT16系统中读取文件的流程 在GrapeOS中用到的文件少且小,所有 ...

  9. markdown---->Typora搭配uPic

    记录一下在mac上面使用Typora和uPic来发表博客的过程,图床用的是阿里Oss.We all, whether we know it or not, are fighting to make t ...

  10. Windows11快捷键大集合+手动给程序添加快捷键

    本文收集了170多个windows11上的快捷键,其中有少部分是windows11新添加的.大部分的win10快捷键也适用于win11.这些快捷键涵盖了系统设置.命令行程序执行.Snap布局切换.对话 ...