当前位置:首页 > 关注 >  > 正文
代码设置钱包(Tron)多签
来源:博客园  时间:2023-06-26 14:26:52
字号:


(资料图片仅供参考)

经常有人问我多签代码怎么写,官网有很多资料,都是稀里糊涂的没有完整的例子,而且也没有C#的例子,最近刚好有需求就自己动手写了。

代码

//封装private static async Task AccountPermissionUpdateAsync(string privateKey, string toAddress) {    var record = TronServiceExtension.GetRecord();    var transactionClient = record.TronClient?.GetTransaction();    var account = new TronAccount(privateKey, TronNetwork.MainNet);    var transactionExtention = await transactionClient?.CreateAccountPermissionUpdateTransactionAsync(account.Address, toAddress)!;    var transactionSigned = transactionClient.GetTransactionSign(transactionExtention.Transaction, privateKey);    var returnObj = await transactionClient.BroadcastTransactionAsync(transactionSigned);    return new { Result = returnObj.Result, Message = returnObj.Message, TransactionId = transactionExtention.Transaction.GetTxid() };}//调用var privateKey = ""; //这里设置需要被多签的私钥var ownerAddress = ""; //这里设置控制地址//注意被设置多签的地址,最少需要 100TRX 余额var result = await AccountPermissionUpdateAsync(privateKey, ownerAddress);Console.WriteLine(JsonConvert.SerializeObject(result));

Github 源码

https://github.com/jared1106/Tron.Wallet.Net

//接口Task CreateAccountPermissionUpdateTransactionAsync(string fromAddress, string toAddress);//实现public async Task CreateAccountPermissionUpdateTransactionAsync(string fromAddress, string toAddress) {    var wallet = _walletClient.GetProtocol();    var accountPermissionUpdateContract = new AccountPermissionUpdateContract {        OwnerAddress = _walletClient.ParseAddress(fromAddress),        Owner = new Permission() { PermissionName = "owner", Threshold = 1, Type = Permission.Types.PermissionType.Owner }    };    accountPermissionUpdateContract.Owner.Keys.Add(new Key { Address = _walletClient.ParseAddress(toAddress), Weight = 1 });    var activePermission = new Permission {       PermissionName = "active",       Threshold = 1, //授权需要的权重数量      Type = Permission.Types.PermissionType.Active,       // 7fff1fc0037e0000000000000000000000000000000000000000000000000000  包含了除更新权限以外的全部权限,Owner 默认都有,不需要设置      Operations = ByteString.CopyFrom("7fff1fc0037e0000000000000000000000000000000000000000000000000000".HexToByteArray())     };    var activeKey = new Key {       Address = _walletClient.ParseAddress(toAddress),  //授予地址      Weight = 1 //权重值    };    activePermission.Keys.Add(activeKey);    var permissions = new Google.Protobuf.Collections.RepeatedField {        activePermission    };    accountPermissionUpdateContract.Actives.Add(permissions);    return await wallet.AccountPermissionUpdateAsync(accountPermissionUpdateContract);}

引入依赖库

PM> Install-Package Tron.Wallet.Net

设置波场主网RPC信息(配置)

namespace Console1 {    using Tron.Wallet.Net;    public record TronRecord(IServiceProvider ServiceProvider, ITronClient TronClient, IOptions 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();            var options = provider.GetService>();            return new TronRecord(provider, client, options);        }    }}

参考

https://cn.developers.tron.network/reference/accountpermissionupdate

标签: