[C#] 透過 TronNet 產生 TRX 交易 基於 .netcore 3.1

2021-11-22


之前文章 創建了 波場 Tron 錢包,現在來處理一下交易,網路上竟然有在賣 C# for Tron 的套件,價值 4000 人民幣

看來這市場其實不小 ? 網路上其實有一些免費的套件,在這邊再次感謝無私的大大  Orz..

這一篇我們來敘述一下,如何使用官方 trongrid.io 然後使用套件將 trx 打到其它錢包。




1.創建 trx 錢包 - 詳細可以參考這一篇 產生 TRX 錢包,使用 ETH 錢包轉換 透過 Nethereum

2.領免費的測試 trx , 因為我使用的是 尼羅測試鏈 nile 所以可以到這裡領取  https://nileex.io/join/getJoinPage

3.記住我們是用 尼羅測試鏈 相關資訊 https://nileex.io/status/getStatusPage

4. 基本上我是基於 這個 source code  - https://github.com/stoway/TronNet ,但是該程式碼是使用 .Net5 ,但是因為手上專案關係

我改寫成 .Net Core 3.1 : https://github.com/donma/TronNetCore3.1,我把注入部分拿掉然後把範例改的比較好理解,當然你可以參考原本的

我只是改成我覺得比較好理解的型態...


5.相關測試資訊

測試錢包:

TNWFKAodrxankYgHg9nJmNbYTsqi8MtCWx

私鑰:

8ca224fec50afaffc70e445ae2d01434e666268298548f67597068735562ad10

收款錢包:

TRza1rbWRhgnRKvTSxnkzkz7RP1Xem6TFJ

交易數量:

2 trx

程式碼:

public static void TestTrxTransation() { var walletPrivateKey = "8ca224fec50afaffc70e445ae2d01434e666268298548f67597068735562ad10"; var ecKey = new TronECKey(walletPrivateKey, TronNetwork.MainNet); var from = ecKey.GetPublicAddress(); //收款錢包 var to = "TRza1rbWRhgnRKvTSxnkzkz7RP1Xem6TFJ"; //打出2顆 trx var amount = 2 * 1_000_000L; IServiceCollection services = new ServiceCollection(); services.AddTronNet(x => { x.Network = TronNetwork.MainNet; x.Channel = new GrpcChannelOption { Host = "47.252.19.181", Port = 50051 }; x.SolidityChannel = new GrpcChannelOption { Host = "47.252.19.181", Port = 50052 }; // x.ApiKey = "089bc2e1-6ae0-473e-a339-fe50fd68c558"; //原本以為要填寫&#65292;似乎不填寫也可以用 x.ApiKey = "apikey"; }); services.AddLogging(); var service = services.BuildServiceProvider(); var transactionClient = service.GetService<ITransactionClient>(); var transactionExtension = transactionClient.CreateTransactionAsync(from, to, amount).Result; var transactionSigned = transactionClient.GetTransactionSign(transactionExtension.Transaction, walletPrivateKey); //取得 sign var signed = JsonConvert.SerializeObject(transactionSigned); Console.WriteLine("-SIGN-"); Console.WriteLine(signed); Console.WriteLine("-TXID-"); Console.WriteLine(transactionSigned.GetTxid()); //送出 var result = transactionClient.BroadcastTransactionAsync(transactionSigned).Result; Console.WriteLine("-RESULT-"); Console.WriteLine(JsonConvert.SerializeObject(result)); }

Result:

-SIGN-

{"RawData":{"RefBlockBytes":[59,77],"RefBlockNum":0,"RefBlockHash":[157,15,173,83,195,68,61,49],"Expiration":1637592516000,"Auths":[],"Data":[],"Contract":[{"Type":1,"Parameter":{"TypeUrl":"type.googleapis.com/protocol.TransferContract","Value":[10,21,65,137,128,85,154,232,180,27,4,212,102,84,4,26,54,136,28,163,159,138,223,18,21,65,175,195,248,74,161,39,19,0,62,122,215,224,84,228,75,227,252,173,47,91,24,128,137,122]},"Provider":[],"ContractName":[],"PermissionId":0}],"Scripts":[],"Timestamp":637731821183793746,"FeeLimit":0},"Signature":[[171,73,211,102,188,94,9,170,89,31,250,95,175,244,41,151,118,43,36,28,214,77,238,169,57,241,222,216,33,12,74,87,109,71,227,170,143,195,141,141,241,35,194,196,234,184,16,63,5,136,41,81,54,80,154,24,180,223,235,141,180,27,90,69,0]],"Ret":[]}

-TXID-

ef437f33d65500b81ae65c4a8383cb51eae79325661e076ecc365c7fcc54cbf9

-RESULT-

{"Result":true,"Code":0,"Message":[]}


程式碼整理到很好懂,就先寫到這,之後再來想如果透過 C# 撰寫交易自己的幣

reference:
https://github.com/stoway/TronNet



當麻許的碎念筆記 2014 | Donma Hsu Design.