sendWeb3Request method in StatusModule
This commit is contained in:
parent
441ca66e96
commit
a9d1426426
|
@ -32,6 +32,7 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
|
||||||
private ServiceConnector status = null;
|
private ServiceConnector status = null;
|
||||||
private ExecutorService executor = null;
|
private ExecutorService executor = null;
|
||||||
private boolean debug;
|
private boolean debug;
|
||||||
|
private Web3Bridge w3Bridge = new Web3Bridge();
|
||||||
|
|
||||||
StatusModule(ReactApplicationContext reactContext, boolean debug) {
|
StatusModule(ReactApplicationContext reactContext, boolean debug) {
|
||||||
super(reactContext);
|
super(reactContext);
|
||||||
|
@ -186,6 +187,7 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.w3Bridge = new Web3Bridge();
|
||||||
Thread thread = new Thread() {
|
Thread thread = new Thread() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
@ -481,4 +483,16 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
|
||||||
public void onConnectorDisconnected() {
|
public void onConnectorDisconnected() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ReactMethod
|
||||||
|
public void sendWeb3Request(final String host, final String payload, final Callback callback) {
|
||||||
|
Thread thread = new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
w3Bridge.sendRequest(host, payload, callback);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
thread.start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
package im.status.ethereum.module;
|
||||||
|
|
||||||
|
import android.os.Build;
|
||||||
|
import com.facebook.react.bridge.Callback;
|
||||||
|
import okhttp3.*;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
public class Web3Bridge {
|
||||||
|
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
|
||||||
|
private OkHttpClient client;
|
||||||
|
|
||||||
|
public Web3Bridge() {
|
||||||
|
OkHttpClient.Builder b = new OkHttpClient.Builder();
|
||||||
|
b.readTimeout(310, TimeUnit.SECONDS);
|
||||||
|
client = b.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendRequest(final String host, final String json, final Callback callback) {
|
||||||
|
|
||||||
|
RequestBody body = RequestBody.create(JSON, json);
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(host)
|
||||||
|
.post(body)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
try (Response response = client.newCall(request).execute()) {
|
||||||
|
String rpcResponse = response.body().string().trim();
|
||||||
|
|
||||||
|
callback.invoke(rpcResponse);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -312,6 +312,39 @@ RCT_EXPORT_METHOD(clearStorageAPIs) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_EXPORT_METHOD(sendWeb3Request:(NSString *)host
|
||||||
|
password:(NSString *)payload
|
||||||
|
callback:(RCTResponseSenderBlock)callback) {
|
||||||
|
|
||||||
|
NSData *postData = [payload dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
|
||||||
|
|
||||||
|
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
|
||||||
|
|
||||||
|
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
|
||||||
|
[request setURL:[NSURL URLWithString:host]];
|
||||||
|
[request setHTTPMethod:@"POST"];
|
||||||
|
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
|
||||||
|
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
|
||||||
|
[request setHTTPBody:postData];
|
||||||
|
[request setTimeoutInterval:310];
|
||||||
|
|
||||||
|
NSError *error;
|
||||||
|
|
||||||
|
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||||
|
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
|
||||||
|
|
||||||
|
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
||||||
|
NSString *strResponse = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
||||||
|
NSString *trimmedResponse = [strResponse stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
|
||||||
|
|
||||||
|
callback(@[trimmedResponse]);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[postDataTask resume];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
+ (void)signalEvent:(const char *) signal
|
+ (void)signalEvent:(const char *) signal
|
||||||
{
|
{
|
||||||
if(!signal){
|
if(!signal){
|
||||||
|
|
|
@ -74,7 +74,7 @@
|
||||||
"react-native-tcp": "^3.2.1",
|
"react-native-tcp": "^3.2.1",
|
||||||
"react-native-udp": "^2.0.0",
|
"react-native-udp": "^2.0.0",
|
||||||
"react-native-vector-icons": "^4.0.1",
|
"react-native-vector-icons": "^4.0.1",
|
||||||
"react-native-webview-bridge": "github:status-im/react-native-webview-bridge#react-native-0.40",
|
"react-native-webview-bridge": "github:status-im/react-native-webview-bridge#0.33.12",
|
||||||
"readable-stream": "^1.0.33",
|
"readable-stream": "^1.0.33",
|
||||||
"realm": "^0.14.3",
|
"realm": "^0.14.3",
|
||||||
"stream-browserify": "^1.0.0",
|
"stream-browserify": "^1.0.0",
|
||||||
|
|
|
@ -111,11 +111,8 @@ var protocol = window.location.protocol
|
||||||
var address = providerAddress || "http://localhost:8545";
|
var address = providerAddress || "http://localhost:8545";
|
||||||
console.log(protocol);
|
console.log(protocol);
|
||||||
if (typeof web3 === "undefined") {
|
if (typeof web3 === "undefined") {
|
||||||
if (protocol == "https:") {
|
if (protocol == "https:" || protocol == "http:") {
|
||||||
console.log("StatusHttpProvider");
|
console.log("StatusHttpProvider");
|
||||||
web3 = new Web3(new StatusHttpProvider(address));
|
web3 = new Web3(new StatusHttpProvider(address));
|
||||||
} else if (protocol == "http:") {
|
|
||||||
console.log("HttpProvider");
|
|
||||||
web3 = new Web3(new Web3.providers.HttpProvider(address));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
[status-im.handlers]
|
[status-im.handlers]
|
||||||
[status-im.subs]
|
[status-im.subs]
|
||||||
[status-im.components.react :refer [app-registry
|
[status-im.components.react :refer [app-registry
|
||||||
|
app-state
|
||||||
keyboard
|
keyboard
|
||||||
orientation
|
orientation
|
||||||
back-android
|
back-android
|
||||||
|
@ -75,6 +76,9 @@
|
||||||
current-view
|
current-view
|
||||||
:chat))
|
:chat))
|
||||||
|
|
||||||
|
(defn app-state-change-handler [state]
|
||||||
|
(dispatch [:app-state-change state]))
|
||||||
|
|
||||||
(defn app-root []
|
(defn app-root []
|
||||||
(let [signed-up? (subscribe [:signed-up?])
|
(let [signed-up? (subscribe [:signed-up?])
|
||||||
view-id (subscribe [:get :view-id])
|
view-id (subscribe [:get :view-id])
|
||||||
|
@ -102,10 +106,12 @@
|
||||||
"keyboardDidHide"
|
"keyboardDidHide"
|
||||||
#(when-not (= 0 @keyboard-height)
|
#(when-not (= 0 @keyboard-height)
|
||||||
(dispatch [:set :keyboard-height 0])))
|
(dispatch [:set :keyboard-height 0])))
|
||||||
(.hide splash-screen))
|
(.hide splash-screen)
|
||||||
|
(.addEventListener app-state "change" app-state-change-handler))
|
||||||
:component-will-unmount
|
:component-will-unmount
|
||||||
(fn []
|
(fn []
|
||||||
(.stop http-bridge))
|
(.stop http-bridge)
|
||||||
|
(.removeEventListener app-state "change" app-state-change-handler))
|
||||||
:render
|
:render
|
||||||
(fn []
|
(fn []
|
||||||
(when @view-id
|
(when @view-id
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
;; React Components
|
;; React Components
|
||||||
|
|
||||||
(def app-registry (get-react-property "AppRegistry"))
|
(def app-registry (get-react-property "AppRegistry"))
|
||||||
|
(def app-state (get-react-property "AppState"))
|
||||||
(def navigator (get-class "Navigator"))
|
(def navigator (get-class "Navigator"))
|
||||||
(def view (get-class "View"))
|
(def view (get-class "View"))
|
||||||
|
|
||||||
|
|
|
@ -158,3 +158,7 @@
|
||||||
|
|
||||||
(def adjust-resize 16)
|
(def adjust-resize 16)
|
||||||
(def adjust-pan 32)
|
(def adjust-pan 32)
|
||||||
|
|
||||||
|
(defn call-web3 [host payload callback]
|
||||||
|
(when status
|
||||||
|
(call-module #(.sendWeb3Request status host payload callback))))
|
||||||
|
|
|
@ -146,6 +146,16 @@
|
||||||
(fn [_ _]
|
(fn [_ _]
|
||||||
(log/debug "crypt initialized"))))
|
(log/debug "crypt initialized"))))
|
||||||
|
|
||||||
|
(register-handler :app-state-change
|
||||||
|
(u/side-effect!
|
||||||
|
(fn [{:keys [webview-bridge] :as db} [_ state]]
|
||||||
|
(case state
|
||||||
|
"background" (status/stop-rpc-server)
|
||||||
|
"active" (do (status/start-rpc-server)
|
||||||
|
(when webview-bridge
|
||||||
|
(.resetOkHttpClient webview-bridge)))
|
||||||
|
nil))))
|
||||||
|
|
||||||
;; -- User data --------------------------------------------------------------
|
;; -- User data --------------------------------------------------------------
|
||||||
(register-handler :load-user-phone-number
|
(register-handler :load-user-phone-number
|
||||||
(fn [db [_]]
|
(fn [db [_]]
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
(ns status-im.protocol.web3.utils
|
(ns status-im.protocol.web3.utils
|
||||||
(:require [cljs-time.core :refer [now]]
|
(:require [cljs-time.core :refer [now]]
|
||||||
[cljs-time.coerce :refer [to-long]]))
|
[cljs-time.coerce :refer [to-long]]
|
||||||
|
[status-im.utils.web-provider :as w3]))
|
||||||
|
|
||||||
(def web3 (js/require "web3"))
|
(def web3 (js/require "web3"))
|
||||||
|
|
||||||
|
@ -18,7 +19,7 @@
|
||||||
|
|
||||||
(defn make-web3 [rpc-url]
|
(defn make-web3 [rpc-url]
|
||||||
(->> rpc-url
|
(->> rpc-url
|
||||||
web3.providers.HttpProvider.
|
w3/get-provider
|
||||||
web3.))
|
web3.))
|
||||||
|
|
||||||
(defn timestamp []
|
(defn timestamp []
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
(ns status-im.utils.ethereum-network
|
(ns status-im.utils.ethereum-network
|
||||||
(:require [status-im.constants :as c]))
|
(:require [status-im.constants :as c]
|
||||||
|
[status-im.utils.web-provider :as w3]))
|
||||||
|
|
||||||
(def Web3 (js/require "web3"))
|
(def Web3 (js/require "web3"))
|
||||||
|
|
||||||
(defn web3 []
|
(defn web3 []
|
||||||
(Web3. (Web3.providers.HttpProvider. c/ethereum-rpc-url)))
|
(Web3. (w3/get-provider c/ethereum-rpc-url)))
|
||||||
|
|
||||||
(def networks
|
(def networks
|
||||||
{"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3" :mainnet
|
{"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3" :mainnet
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
(ns status-im.utils.web-provider
|
||||||
|
(:require [taoensso.timbre :as log]
|
||||||
|
[status-im.components.status :as status]))
|
||||||
|
|
||||||
|
(defn get-provider [rpc-url]
|
||||||
|
#js {:sendAsync (fn [payload callback]
|
||||||
|
(status/call-web3
|
||||||
|
rpc-url
|
||||||
|
(.stringify js/JSON payload)
|
||||||
|
(fn [response]
|
||||||
|
(if (= "" response)
|
||||||
|
(log/warn :web3-response-error)
|
||||||
|
(callback nil (.parse js/JSON response))))))})
|
Loading…
Reference in New Issue