如何從 react-native 與 Geth mobile 互動
我正在開發一個 react-native dapp 以獲得一些經驗,但我正在努力從 javascript 端與 geth 進行互動。我目前只專注於Android。Geth 客戶端在應用程序啟動時成功執行,遵循本指南:Geth 移動介紹。由於 Geth 的新移動包不再執行 rpc,單獨的 web3 將無法解決問題。
我已經嘗試將 Geth 包裝在本機模組中,但據我所知,它無法訪問在主執行緒上執行的 Geth。
Status 也在做類似的事情,但我無法通過查看他們的程式碼來了解他們是如何做到的。
有沒有人想出如何做到這一點?
經過一些痛苦的調試,我今天設法做到了這一點。結果在這裡:https ://github.com/zupzup/react-native-ethereum-wallet
這還不是一個完整的範例,但它展示瞭如何與正在執行的 geth 節點進行互動。
這是我所做的:
第一步,在 build.gradle 中添加 geth 依賴:
compile 'org.ethereum:geth:1.6.7'
然後,在 MainActivity.java 中,嘗試讓節點執行。您將在 Android Monitor 中查看它是否正常執行。這看起來像這樣:
NodeConfig nc = new NodeConfig(); Node node = Geth.newNode(getFilesDir() + "/.eth1", nc);
然後,您需要某種方式將此節點公開給 Wrapping 模組。我只是為此使用了 Singleton,但我想在 Android 中有更簡潔的方法來共享狀態。
關於包裝,我只是使用了https://facebook.github.io/react-native/docs/native-modules-android.html上的官方文件。
基本上,我創建了一個方法
test
,它從 中獲取node
並singleton
在其上執行某些操作(在我的例子中是一個簡單的getBalanceAt
查詢)。
test
如果您正確註冊了包裝模組,則可以使用回調從 React-Native 呼叫此方法。像這樣:NativeModules.TestNative.test("tojavandback", (str) => { Alert.alert(str); })
在我的例子中,這會輸出給定地址的乙太幣數量。這只是一個簡單的範例,但整個端到端互動都有效。
希望這可以幫助。