2018年9月6日 星期四

在 Java 存取 Ethereum 區塊鏈:透過 ethereumj

嗯…標題寫是這樣寫啦,不過其實因為實驗到一半就終止了,因此這篇其實只是留下一點點紀錄而已,並不會真的有完整的範例和說明。

概念上來說,ethereumj 其實跟 geth 和 parity 沒什麼兩樣,是一個能夠用來跑以太坊客戶端的函式庫,只是它是用 Java 寫的。因此 ethereumj 可以支援 CPU 挖礦,但基本上這太沒效率了,所以應該也不會有人想這麼幹就是。

基本的 Maven 設定和啟動可以參考我一開始實驗時寫的奈米專案 ethereumj-example 裡的 pom.xml 和程式碼。裡面做的事情就是,寫一個要用來設定 ethereumj 的設定檔 ropsten-net.conf。這個設定檔的主要內容是參考 ethereumj 函式庫中的 ropsten.conf,只有在裡面追加了啟動 fast sync 的設定而已。也就是說,載入這個設定檔以後,ethereumj 啟動時會連上 ropsten 測試鏈,並且以 fast sync 模式開始跟其他節點做區塊同步。

其他更進階一點的操作就請參考官方的範例 [2-3] 了,大體上來說都是寫 Listener 並且註冊到 Ethereum instance 上,以讓 Ethereum instance 在每次接收到新的區塊時,可以去觸發我們註冊的 Listener 做特定的工作。舉例來說,要發佈一個交易時,我們會想要確認這個交易到底有沒有被其他礦工打包放進區塊鏈,這時就可以註冊一個 Listener 去聽後續狀況,只要在大概 15 個區塊內發現我們發出的交易的 txhash,就表示交易已經正確被寫進區塊鏈了。

除了 Listener 以外,還有一個用法應該是單純只想讀取狀態而沒有要發起任何交易的狀況,這時可能會用類似這種操作:

  • 取得某個地址的餘額:ethereum.getRepository().getBalance(addressBytes)
  • 呼叫某個智能合約以取得變數:ethereum.callConstantFunction(….)

這些都可以從官方的範例中慢慢找出來 XD,例如上面兩個都可以在 EventListenerSample.java 裡面找到。

參考資料
  1. ethereumj
  2. ethereumj samples
  3. ethereumj.starter
  4. ethereumj - Add "light client" support

沒有留言: