首页 > 其他分享 >波场(Tron)USDT 合约授权(Approve)以及授权转账(TransferFrom)

波场(Tron)USDT 合约授权(Approve)以及授权转账(TransferFrom)

时间:2023-09-25 11:47:11浏览次数:30  
标签:转账 Tron USDT spenderAddress new var 授权 fromAddress string

授权(Approve)

private static async Task<string> ApproveAsync(string privateKey, string spenderAddress, decimal amount) {
	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 = 60 * 1000000L;//手续费上限
	return await contractClient.ApproveAsync(contractAddress, account, spenderAddress, amount, feeAmount);//广播交易
}

转账(TransferFrom)

private static async Task<string> TransferFromAsync(string privateKey, string fromAddress, 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 = 60 * 1000000L;//手续费上限
	return await contractClient.TransferFromAsync(contractAddress, account, fromAddress, toAddress, amount, memo, feeAmount);//广播交易
}

聪明的人可能会联想到前段时间很热的0U转账的问题,这个操作其实就是省略掉了 Approve 的过程,直接调用 TransferFrom 由于转账金额是 0,不会发生实际转账操作,但是区块链的交易广播是成功的,所以导致转账记录被记录在账本上,然后小白盲目在交易记录里面复制到了陷阱地址,这个要是放在之前都不能讲,因为很多人导致这个问题转错账,受到不少损失。
但是现在波场基本上修复了这个问题,虽然没有从合约根本上解决,但这类的交易记录默认已经没有办法从区块浏览器和钱包里面复制了,虽然治标不治本。

调用

var privateKey1 = "";
var spenderAddress = "";

var result = await ApproveAsync(privateKey1, spenderAddress, 100);
Console.WriteLine(JsonConvert.SerializeObject(result));

var privateKey2 = "";
var fromAddress = "";
var toAddress = "";

//fromAddress 是 privateKey1 对应的地址,不是 spenderAddress
//privateKey2 是 spenderAddress 对应的私钥
var result = await TransferFromAsync(privateKey2, fromAddress, toAddress,100);
Console.WriteLine(JsonConvert.SerializeObject(result));

引入依赖库

PM> Install-Package Tron.Wallet.Net

配置主网信息已经 API Key

namespace Console1 {
    using 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 = "80a8b20f-a917-43a9-a2f1-809fe6eec0d6";
            });
            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);
        }
    }
}

标签:转账,Tron,USDT,spenderAddress,new,var,授权,fromAddress,string
From: https://www.cnblogs.com/lijingkun/p/17727608.html

相关文章

  • 新版绿豆视频APP视频免授权源码 V6.6插件版
    简介:新版绿豆视频APP视频免授权源码插件版后端插件开源,可直接反编译修改方便对接苹果cms,自定义DIY页面布局!绿豆影视APP对接苹果cms所有页面皆可通过后端自由定制此版本后端源码+前端是壳(反编译版本)五款个人中心主题自由切换个人中心背景图后台可控后台控制幻灯片背景虚幻支持信......
  • PostgreSQL高可用集群项目实战之Patroni
    一、风哥PG-DBA培训19:PostgreSQL高可用集群项目实战之Patroni课程目标:本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL主从复制与高可用集群阶段之PostgreSQL高可用集群项目实战之Patroni,学完本课程可以掌握Patroni运行架构与基础知识,PostgreSQL+Patroni......
  • PG-DBA培训19:PostgreSQL高可用集群项目实战之Patroni
    一、风哥PG-DBA培训19:PostgreSQL高可用集群项目实战之Patroni课程目标:本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL主从复制与高可用集群阶段之PostgreSQL高可用集群项目实战之Patroni,学完本课程可以掌握Patroni运行架构与基础知识,PostgreSQL+Patroni集......
  • electron 收集主页 目录
     dd Electron官网1:【electron】打包执行npmrunmake报错......
  • 02_electron快速建立项目
    一、安装yarn  在此之前可以先安装git:Git-Downloads(git-scm.com)  下面就是yarn安装的代码,在终端输入即可。npminstall--globalyarn   检查是否安装成功:yarn--version 二、快速建立一个electron项目  其实在GettingStarted-ElectronForge就提......
  • Redis漏洞总结--未授权--沙箱绕过--(CNVD-2015-07557)&&(CNVD-2019-21763)&&(CVE-2022
    Redis未授权--沙箱绕过--(CNVD-2015-07557)&&(CNVD-2019-21763)&&(CVE-2022-0543)环境复现采用Vulfocus靶场进行环境复现,官网docker搭建有问题,具体搭建教程参考vulfocus不能同步的解决方法/vulfocus同步失败CNVD-2015-07557未授权访问影响版本Redis<=5.0.5漏洞探测使用端......
  • vue-cli-service electron:serve zsh: command not
    vue-cli-serviceelectron:servezsh:commandnotfound:vue-cli-service尝试一进入项目清除缓存npmcacheclean--force重新安装npminstall尝试二npminstall-gelectron-buildernpminstall尝试三sudorm-rfnode_modulespackage-lock.json&&npminstall这......
  • KingbaseES 数据库中不同user的视图访问授权
    前言本文的目的是实现u1用户访问ud用户下的视图权限。测试登录system用户并创建schema,user,并授权schema的有关权限给ud用户TEST=#selectcurrent_user;current_user--------------system(1row)TEST=#createschemaud;CREATESCHEMATEST=#TEST=#createuserud;......
  • 【漏洞复现】JumpServer未授权访问漏洞(CVE-2023-42442)
    1、简介JumpServer是一款符合4A规范的开源堡垒机,帮助企业以更安全的方式管控和登录各种类型的资产,实现事前授权、事中监察、事后审计,满足等保合规要求。2、漏洞描述JumpServer在3.0.0-3.6.3版本存在未授权访问漏洞。由于系统权限配置存在不合理,导致未授权攻击者可以直接访问......
  • Springboot简单功能示例-5 使用JWT进行授权认证
    springboot-sample介绍springboot简单示例-使用JWT进行授权认证跳转到发行版查看发行版说明软件架构(当前发行版)Springboot3.1.3hutoolbcprov-jdk18on安装教程gitclone--branch自定义加密进行登录验证[email protected]:simen_net/springboot-sample.git主要功......