最近因為在幫忙處理一些鏈上數據的問題,主要針對 Tron 鏈,因為需要一整個區塊的資料
我發現其實有蠻多辦法可以拿到的,今天這方法算是可以解決部分問題..
主要試因為我要判斷抓取錢包位置,並且要判斷交易 USDT,不過這篇文章的重點先放在如何撈取整個完整的區塊資料
我是使用 v1/blocks/{blockNum}/events 來做到,接下來就不廢話直接給程式碼
1. 我有用到 RestSharp,記得先安裝
2. 因為他一筆回來只有 200 個,但是在撈取 json 的時候 ,在 meta => links 如果是有網址的就得繼續撈下去

所以就得透過迴圈一直撈下去,這邊我就簡單做出撈出 Block 的資料,並且判斷 from , to 不是空的交易資訊,我就列出 txid , from, to , 交易金額
中間他回應的錢包也不是用 trx 錢包的格式所以要稍微轉換一下
BlockData.cs
public class BlockData
{
public List<Datum> data { get; set; }
public bool success { get; set; }
public Meta meta { get; set; }
public class Datum
{
public int block_number { get; set; }
public object block_timestamp { get; set; }
public string caller_contract_address { get; set; }
public string contract_address { get; set; }
public int event_index { get; set; }
public string event_name { get; set; }
public Result result { get; set; }
public ResultType result_type { get; set; }
public string @event { get; set; }
public string transaction_id { get; set; }
public class Result
{
[JsonProperty("0")]
public string _0 { get; set; }
[JsonProperty("1")]
public string _1 { get; set; }
[JsonProperty("2")]
public string _2 { get; set; }
public string from { get; set; }
public string to { get; set; }
public string value { get; set; }
}
public class ResultType
{
public string from { get; set; }
public string to { get; set; }
public string value { get; set; }
}
}
public class Meta
{
public long at { get; set; }
public string fingerprint { get; set; }
public Links links { get; set; }
public int page_size { get; set; }
}
public class Links
{
public string next { get; set; }
}
}c-sharp-convert-wallet-to-trx-wallet.cs
public static string GetBase58CheckAddress(string ethAddress)
{
string fixaddress = "0x41" + TronNet.ByteArrary.RemoveHexPrefix(ethAddress);
byte[] addressBytes = TronNet.ByteArrary.HexToByteArray(fixaddress);
byte[] hash0 = ToSHA256(addressBytes);
byte[] hash1 = ToSHA256(hash0);
var checkSum = hash1.Take(4).ToArray();
return Base58Encoding.Encode(addressBytes.Concat(checkSum).ToArray());
}
public static byte[] ToSHA256(byte[] data)
{
using (var alg = SHA256.Create())
{
var hashValue = alg.ComputeHash(data);
return hashValue;
}
}c-sharp-tron-grid-get-block-transaction-info.cs
/// <summary>
/// 透過 trongrid 取得 block 中的 transaction
/// </summary>
/// <param name="blockNum">Block Number </param>
static void GetBlockData(string blockNum)
{
string baseUrl = $"https://api.trongrid.io/v1/blocks/{blockNum}/events";
var allTransactions = new List<BlockData.Datum>();
using (HttpClient client = new HttpClient())
{
string nextPage = baseUrl;
while (!string.IsNullOrEmpty(nextPage))
{
var response = client.GetStringAsync(nextPage).Result;
var blockData = JsonConvert.DeserializeObject<BlockData>(response);
foreach (var d in blockData.data) {
if (d.result.from != null && d.result.to != null) {
Console.WriteLine("txid:" + d.transaction_id + ", from:" + GetBase58CheckAddress(d.result.from) + " , to:" + GetBase58CheckAddress(d.result.to));
}
}
// 暫存交易資料
if (blockData.data != null)
{
allTransactions.AddRange(blockData.data);
}
if (blockData.meta.links != null)
{
nextPage = blockData.meta != null ? blockData.meta.fingerprint : "";
if (!string.IsNullOrEmpty(blockData.meta.links.next))
{
nextPage = blockData.meta.links.next;
}
}
else
{
break;
}
}
}
Console.WriteLine($"獲取到 {allTransactions.Count} 筆交易");
}
result:
挑出來一筆做們做驗證

Transaction ff67cb02dd3b358f4e8c0b1aa9de90e819ec9c564832d961619973f0d393ee9a | TRONSCAN
程式印出來的
txid:ff67cb02dd3b358f4e8c0b1aa9de90e819ec9c564832d961619973f0d393ee9a, from:TT27CwjDsqWxrFLzs96xeKVhFhihkD1DjG , to:TEk2MfjDGuM4UMgmCqZwj2WRgtkwbmtrL7 ,amount:1442000000
大概先筆記到這邊 ,希望有快速幫到需要的你
reference:
https://developers.tron.network/reference/get-events-by-block-number
api.trongrid.io/v1/blocks/64991111/events
---
請你暫時把你的勇氣給我 在夢想快消失的時候 讓我的 Code 用力的穿過天空 為愛我的人做一秒英雄 如果這篇文章有幫助到您,簡單留個言,或是幫我按個讚,讓我有寫下去的動力…
Yesterday I wrote down the code. I bet I could be your hero. I am a mighty little programmer.