如何在TRON區(qū)塊鏈上查詢(xún)交易
本文轉(zhuǎn)載自微信公眾號(hào)「區(qū)塊鏈研究實(shí)驗(yàn)室」,作者鏈三豐。轉(zhuǎn)載本文請(qǐng)聯(lián)系區(qū)塊鏈研究實(shí)驗(yàn)室公眾號(hào)。
乙鎖鏈交易是兩個(gè)或多個(gè)地址之間交互的記錄。
在TRON區(qū)塊鏈上,通常有兩個(gè)交互地址,并且它們之間的交互可以采用許多不同的形式(例如,創(chuàng)建新帳戶(hù)或資產(chǎn),觸發(fā)智能合約,資產(chǎn)轉(zhuǎn)移等)。
每個(gè)事務(wù)都可以通過(guò)其哈希ID(包含64個(gè)字母數(shù)字字符)來(lái)唯一識(shí)別。
獲取有關(guān)交易或一組交易的信息是區(qū)塊鏈數(shù)據(jù)分析的核心。
本文演示了如何使用R包tronr(用于探索TRON網(wǎng)絡(luò)的工具箱)收集此類(lèi)信息。
查詢(xún)個(gè)人交易
tronr程序包中的幾個(gè)功能允許查詢(xún)事務(wù)數(shù)據(jù)。關(guān)鍵功能之一是get_tx_info_by_id(),它根據(jù)交易的ID(以嵌套tibble的形式)返回交易的屬性。這樣的ID可以利用其他幾種可以獲得tronr的功能,例如get_block_info(),get_blocks_for_time_range(),get_tx_for_time_range()等。這里是一個(gè)例子:
- require(tronr)
 - require(dplyr)
 - require(tidyr)
 - #> R toolbox to explore the TRON blockchain
 - #> Developed by Next Game Solutions (http://nextgamesolutions.com)
 - # Get transactions of the latest block:
 - latest_block <- get_block_info(latest = TRUE)
 - # Pick an example transaction:
 - tx_id <- latest_block$tx[[1]]$tx_id[1]
 - tx_id
 - # "074ce32ed2ca89c69e54e4ac4ff5ee825df33f6cf087d869c44dc3456f349855"
 - # Retrieve transaction attributes (see documentation for their
 - # definitions):
 - r1 <- get_tx_info_by_id(tx_id = tx_id, add_contract_data = FALSE)
 - glimpse(r1)
 - #> Rows: 1
 - #> Columns: 19
 - #> $ request_time <dttm> 2021-03-31 19:22:57
 - #> $ tx_id <chr> "074ce32ed2ca89c69e54e4ac4f...
 - #> $ block_number <chr> "28941541"
 - #> $ timestamp <dttm> 2021-03-31 19:19:06
 - #> $ contract_result <chr> "SUCCESS"
 - #> $ confirmed <lgl> TRUE
 - #> $ confirmations_count <int> 71
 - #> $ sr_confirm_list <list> [<tbl_df[19 x 3]>]
 - #> $ contract_type <chr> "TriggerSmartContract"
 - #> $ from_address <chr> "TSrS5zMUgzHe688XcZ4PnN5Y3c...
 - #> $ to_address <chr> "TDxYAUHTw7Tk9NQfDJk9wmcsb2...
 - #> $ is_contract_from_address <lgl> FALSE
 - #> $ is_contract_to_address <lgl> TRUE
 - #> $ costs <list> [<tbl_df[1 x 8]>]
 - #> $ trx_transfer <dbl> 9.906872
 - #> $ trc10_transfer <lgl> NA
 - #> $ trc20_transfer <list> [<tbl_df[1 x 9]>]
 - #> $ internal_tx <list> [<tbl_df[3 x 12]>]
 - #> $ info <lgl> NA
 
如果將add_contact_data參數(shù)設(shè)置為T(mén)RUE,則生成的小標(biāo)題還將具有名為的列contract_data。
該列將包含一個(gè)列表,其中包含執(zhí)行相關(guān)交易的智能合約生成的原始數(shù)據(jù)。該清單的實(shí)際內(nèi)容取決于每筆交易和各自合同的性質(zhì):
- r2 <- get_tx_info_by_id(tx_id = tx_id, add_contract_data = TRUE)
 - glimpse(r1)
 - #> Rows: 1
 - #> Columns: 20
 - #> $ request_time <dttm> 2021-03-31 19:28:23
 - #> $ tx_id <chr> "074ce32ed2ca89c69e54e4ac4f...
 - #> $ block_number <chr> "28941541"
 - #> $ timestamp <dttm> 2021-03-31 19:19:06
 - #> $ contract_result <chr> "SUCCESS"
 - #> $ confirmed <lgl> TRUE
 - #> $ confirmations_count <int> 180
 - #> $ sr_confirm_list <list> [<tbl_df[19 x 3]>]
 - #> $ contract_type <chr> "TriggerSmartContract"
 - #> $ from_address <chr> "TSrS5zMUgzHe688XcZ4PnN5Y3c...
 - #> $ to_address <chr> "TDxYAUHTw7Tk9NQfDJk9wmcsb2...
 - #> $ is_contract_from_address <lgl> FALSE
 - #> $ is_contract_to_address <lgl> TRUE
 - #> $ costs <list> [<tbl_df[1 x 8]>]
 - #> $ trx_transfer <dbl> 9.906872
 - #> $ trc10_transfer <lgl> NA
 - #> $ trc20_transfer <list> [<tbl_df[1 x 9]>]
 - #> $ internal_tx <list> [<tbl_df[3 x 12]>]
 - #> $ info <lgl> NA
 - #> $ contract_data <list> [["422f1043000000000000000...
 - r2$contract_data[[1]]
 - #> $data
 - #> [1]"422f1043000000000000000000000000000000000000000000000000...
 - #>
 - #> $owner_address
 - #> [1] "TSrS5zMUgzHe688XcZ4PnN5Y3cHQA3euWt"
 - #>
 - #> $contract_address
 - #> [1] "TDxYAUHTw7Tk9NQfDJk9wmcsb26S8kHbdF"
 - #> $call_value
 - #> [1] 9906872
 
請(qǐng)注意,在返回的tibbles所有令牌數(shù)量get_tx_info_by_id()(trx_transfer,trc10_transfer,trc20_transfer,和internal_tx)使用的整數(shù)和小數(shù)部分表示。
但如果是add_contract_data = TRUE,則返回的原始合同數(shù)據(jù)按“原樣”顯示(即無(wú)需任何解析或其他處理),因此該數(shù)據(jù)中存在的任何令牌量都使用機(jī)器級(jí)精度表示。
查詢(xún)時(shí)間范圍
要在特定時(shí)間段內(nèi)檢索交易及其屬性的列表,可以使用該get_tx_for_time_range()功能。與相比get_tx_info_by_id(),此函數(shù)有兩個(gè)附加參數(shù)定義了感興趣的時(shí)間范圍-min_timestamp和max_timestamp。這兩個(gè)附加參數(shù)都期望Unix時(shí)間戳(包括毫秒):
- tx_df <- get_tx_for_time_range(min_timestamp = "1577836800000",
 - max_timestamp = "1577836803000")
 - glimpse(tx_df)
 - #> Rows: 41
 - #> Columns: 20
 - #> $ request_time <dttm> 2021-03-31 19:45:21, 2...
 - #> $ tx_id <chr> "5f131118e7e24725906a72...
 - #> $ block_number <chr> "15860581", "15860581",...
 - #> $ timestamp <dttm> 2020-01-01, 2020-01-01...
 - #> $ contract_result <chr> "SUCCESS", "SUCCESS", "...
 - #> $ confirmed <lgl> TRUE, TRUE, TRUE, TRUE,...
 - #> $ confirmations_count <int> 13081480, 13081480, 130...
 - #> $ sr_confirm_list <list> [<tbl_df[19 x 3]>, <tb...
 - #> $ contract_type <chr> "TransferAssetContract"...
 - #> $ from_address <chr> "TXmUfpBfxRTdbZXhzuqEJK...
 - #> $ to_address <chr> "TCQBxaNNQ2h1HbrWxWSg7A...
 - #> $ is_contract_from_address <lgl> FALSE, FALSE, FALSE, FA...
 - #> $ is_contract_to_address <lgl> FALSE, TRUE, TRUE, TRUE...
 - #> $ costs <list> [<tbl_df[1 x 8]>, <tbl...
 - #> $ trx_transfer <dbl> 0.000, 200.000, 0.000, ...
 - #> $ trc10_transfer <list> [<tbl_df[1 x 5]>, NULL...
 - #> $ trc20_transfer <lgl> NA, NA, NA, NA, NA, NA,...
 - #> $ internal_tx <list> [NULL, NULL, <tbl_df[1...
 - #> $ info <lgl> NA, NA, NA, NA, NA, NA,...
 - #> $ contract_data <list> [[10000000, "1002830",...
 
請(qǐng)注意,get_tx_for_time_range()在后臺(tái)進(jìn)行了多個(gè)Tronscan API調(diào)用。
作為上發(fā)生的TRON blockchain交易的數(shù)量是非常大的,用戶(hù)因此宜選擇min_timestamp和max_timestamp是明智之舉。如果請(qǐng)求的時(shí)間范圍太大,則基礎(chǔ)Tronscan API返回的最大事務(wù)數(shù)將被限制為10000,并且處理時(shí)間可能會(huì)變得過(guò)長(zhǎng)。
在這種情況下,將感興趣的時(shí)間范圍劃分為較小的時(shí)間段可以幫助避免數(shù)據(jù)缺口。
查詢(xún)特定帳戶(hù)的交易
還可以使用該get_tx_info_by_account_address()功能來(lái)檢索特定帳戶(hù)的交易數(shù)據(jù)。此外,可以在特定時(shí)間范圍內(nèi)完成此操作:
- tx_df_acc <- get_tx_info_by_account_address(
 - address = "TAUN6FwrnwwmaEqYcckffC7wYmbaS6cBiX",
 - min_timestamp = "1577836800000",
 - max_timestamp = "1577838600000"
 - )
 - glimpse(tx_df_acc)
 - #> Rows: 18
 - #> Columns: 21
 - #> $ request_time <dttm> 2021-03-31 19:55:31, 2...
 - #> $ address <chr> "TAUN6FwrnwwmaEqYcckffC...
 - #> $ tx_id <chr> "36ec18062510f22a469bfb...
 - #> $ block_number <chr> "15860591", "15860591",...
 - #> $ timestamp <dttm> 2020-01-01 00:00:36, 2...
 - #> $ contract_result <chr> "SUCCESS", "SUCCESS", "...
 - #> $ confirmed <lgl> TRUE, TRUE, TRUE, TRUE,...
 - #> $ confirmations_count <int> 13081672, 13081672, 130...
 - #> $ sr_confirm_list <list> [<tbl_df[19 x 3]>, <tb...
 - #> $ contract_type <chr> "TransferContract", "Tr...
 - #> $ from_address <chr> "TAUN6FwrnwwmaEqYcckffC...
 - #> $ to_address <chr> "TDn2MK7n5SqVksSZtQDAhD...
 - #> $ is_contract_from_address <lgl> FALSE, FALSE, FALSE, FA...
 - #> $ is_contract_to_address <lgl> FALSE, FALSE, FALSE, FA...
 - #> $ costs <list> [<tbl_df[1 x 8]>, <tbl...
 - #> $ trx_transfer <dbl> 664296.00000, 925.55360...
 - #> $ trc10_transfer <list> [NULL, NULL, NULL, NUL...
 - #> $ trc20_transfer <lgl> NA, NA, NA, NA, NA, NA,...
 - #> $ internal_tx <lgl> NA, NA, NA, NA, NA, NA,...
 - #> $ info <lgl> NA, NA, NA, NA, NA, NA,...
 - #> $ contract_data <list> [[6.64296e+11, "TAUN6F...
 
現(xiàn)在,我們成功的使用R包在TRON區(qū)塊鏈查詢(xún)交易數(shù)據(jù),如有任何想法和疑問(wèn),歡迎在留言區(qū)留言。















 
 
 







 
 
 
 