Go-Ethereum

如何從 react-native 與 Geth mobile 互動

  • July 28, 2017

我正在開發一個 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,它從 中獲取nodesingleton在其上執行某些操作(在我的例子中是一個簡單的getBalanceAt查詢)。

test如果您正確註冊了包裝模組,則可以使用回調從 React-Native 呼叫此方法。像這樣:

NativeModules.TestNative.test("tojavandback", (str) => {
   Alert.alert(str);
})

在我的例子中,這會輸出給定地址的乙太幣數量。這只是一個簡單的範例,但整個端到端互動都有效。

希望這可以幫助。

引用自:https://ethereum.stackexchange.com/questions/21591