###### tags: `區塊鏈秘技` # 【區塊鏈秘技 Day1】快速架設tron 全節點 ## 1. 為甚麼需要架設tron節點? tronscan提供的api與第三方提供的api都有使用次數的限制,自己架設節點可以避免這個問題。 - [![N|tronscan](https://tronscan.org/static/media/logo_left.75928ad1b469e9b7f18200c4605d3396.svg)](https://docs.tronscan.org/getting-started/api-keys?_ga=2.230779164.2007612761.1694138442-88243335.1692694816) - [OKLINK](https://www.oklink.com/docs/en/#welcome-to-oklink-api) ## 2. 如何解決? 架設Tron全節點可提高區塊鏈網絡的分散性、參與共識運行、確保交易安全、支援去中心化應用(DApps)的運行,同時有助於獲得網絡獎勵及參與治理,增強Tron生態系統的穩定性和可信度。 - 架設tron全節點,可以取得完整的交易資訊 ## 3. 電腦配置 ### 一般規格 - CPU: 16核心 - 記憶體: 32G - SSD: 5T (歷史交易紀錄已經快1.9T) - 100 MB/s (網路速度) - linux 作業系統 ### 超級驗證節點規格 (需要加入私鑰,且為tron質押排名前16名才有資格) - CPU: 32核心 - 記憶體: 64G - SSD: 5T (歷史交易紀錄已經快1.9T) - 100 MB/s (網路速度) - linux 作業系統 tron 全節點架設資訊 [java-tron](https://github.com/tronprotocol/java-tron) on GitHub. ## 開始架設 下載tron節點專案 ```sh git clone https://github.com/tronprotocol/java-tron.git ``` 安裝JDK8與JRE8 ```sh sudo apt-get install openjdk-8-jdk sudo apt install openjdk-8-jre-headless #安裝要檢查是否安裝成功 java -version # 檢查JDK8版本 javac -version # 檢查JDE8版本 ``` 切換到java-tron資料夾 ```sh cd java-tron ``` 建立Fullnode.jar檔 ```sh ./gradlew clean build -x test # (Fullnode.jar會放在java-tron/build/libs) ``` 切換到java-tron/build/libs路徑底下 ```sh cd java-tron/build/libs ``` <br> :::success 建立main_net_config.conf (建立tron 節點的conifg檔,要將main_net_config.conf放置在java-tron/build/libs路徑下) ::: ```sh vim main_net_config.conf # 建立檔案(一開始為空的,只有檔名) ``` 將官方文件的main_net_config.conf 內容,複製到自己的main_net_config.conf裡面 (https://github.com/tronprotocol/tron-deployment/blob/master/main_net_config.conf) 在main_net_config.conf 裡加入參數搜尋jsonrpc,修改一下參數(註解要移除) before: https://hackmd.io/_uploads/SkSAkMOCn.png after: https://hackmd.io/_uploads/Sy1QWMuA2.png (設置的原因: api 要調用50545與8090端口,50545端口需要設定才能開啟,8090本來就打開了) <br> :::success 設定supportConstant為true(預設為false),避免tron在解析合約資料時產生CONTRACT_VALIDATE_ERROR的錯誤。 ::: - before ![](https://hackmd.io/_uploads/ry9v_o6Ch.png) - after ![](https://hackmd.io/_uploads/ryT6dopC2.png) <br> :::success 開啟端口50545與50555 ::: - before ![](https://hackmd.io/_uploads/SyOcG61xa.png) - after ![](https://hackmd.io/_uploads/rkEKG6Jla.png) 運行節點(要先切換到java-tron/build/libs) ```sh java -Xmx24g -XX:+UseConcMarkSweepGC -jar FullNode.jar -c main_net_config.conf ``` :::success 開啟同步InternalTransaction ::: ![](https://hackmd.io/_uploads/rJKAewcea.png) ![](https://hackmd.io/_uploads/r14bbv9lp.png) 將saveInternalTx設為true(原本是false) # 缺點: `經過上述步驟之後,tron節點同步速度非常慢` # 優化: - java-tron的DB分成levelDB與rocksDB,conifg 預設為levelDB,官方的歷史交易資料也是使用levelDB。rocksDB可以設置資料備援與叫好的擴充性。levelDB與rocksDB不能混用,會報錯誤。 1. 建議下載tron官方的歷史交易資料 (https://backup.trongrid.io/)(https://tronprotocol.github.io/documentation-en/using_javatron/backup_restore/) 2. 目前tron官方歷史交易資料為1.9T,下載會很久,建議(多執行續下載)使用指令 ```sh # 第一次使用需要安裝 sudo apt-get install axel nohup axel -a -n 40 https://fullnode-backup-3.s3-ap-southeast-1.amazonaws.com/FullNode-54424085-4.7.2-output-directory.tgz # nohup (背景程式執行) # axel: 這是要執行的命令,通常用於加速文件下載。 # -a: 這是一個選項(也可以稱為參數),它通常用於啟用axel的多線程下載功能,這可以加速文件的下載速度。 # -n 40: 這是另一個選項,它指定了同時使用的下載連接的數量。在這個情況下,設置為40,表示同時使用40個連接下載文件。 ``` 3. 解壓縮FullNode-54424085–4.7.2-output-directory.tgz ```sh nohup tar xvf FullNode-54424085–4.7.2-output-directory.tgz ``` 4. 解壓縮之後產生一個資料夾(output-directory 內有所有交易資料) 5. 查詢資料夾的容量是否正確 ```sh du -h output-directory #查詢資料夾容量 ``` 6. 將output-directory資料夾移動到java-tron/build/libs底下(若有相同檔名就會一個檔案在移動or取代原本的output-directory資料夾) 7. 啟動節點同步 ```sh nohup java -Xmx24g -XX:+UseConcMarkSweepGC -jar FullNode.jar -c main_net_config.conf -d output-directory ``` 8. 檢查節點是否在運行 ```sh sudo ps aux | grep [F]ullNode ``` ## 使用api ###### 查詢最新的block數_8090 port & 50545 port 1. curl http://192.168.200.159:8090/wallet/getnowblock (192.168.200.159 `自己的內部網路IP`,http不加憑證) 2. curl -X POST ‘http://192.168.200.159:50545/jsonrpc' — data ‘{“jsonrpc”:”2.0",”method”:”eth_blockNumber”,”params”:[],”id”:64}’ 3. curl -X POST 'http://192.168.200.159:50545/jsonrpc' — data '{“jsonrpc”:”2.0”,”method”:”eth_blockNumber”,”params”:[],”id”:64} ' ## 參考文件 | 參考文章 | README | | ------ | ------ | | java-tron | https://github.com/tronprotocol/java-tron | | main_net_config.conf | https://github.com/tronprotocol/tron-deployment/blob/master/main_net_config.conf | | tron_backup | https://backup.trongrid.io/ | |TRON_InternalTransaction.md|https://github.com/tronprotocol/documentation/blob/master/English_Documentation/TRON_Virtual_Machine/InternalTransaction.md|