/* Javascript code fore make injection of web3. The code was based on https://github.com/TrustWallet/trust-wallet-ios */ configureWallet() configureWeb3() function configureWallet() { wallet.callbacks = {}; wallet.addCallback = function(id, cb, isRPC = true) { wallet.callbacks[id] = {cb, isRPC} } wallet.executeCallback = function(id, error, value) { console.log("executeCallback") let callback = wallet.callbacks[id] if (callback.isRPC) { if (error) { let response = {"id": id, jsonrpc: "2.0", result: null, error: {message: error}} callback.cb(response, null) } else { let response = {"id": id, jsonrpc: "2.0", result: value} callback.cb(null, response) } } else { callback(error, value) } delete wallet.callbacks[id] } wallet.sendTransaction = function(request, cb) { let tx = request.params[0] let id = request.id || 8888 wallet.addCallback(id, cb) let transactionString = JSON.stringify({"name": "sendTransaction", "object": tx, id: id}) wallet.sendTransactionJava(transactionString) } wallet.signTransaction = function(tx, cb) { console.log("signTransaction", JSON.stringify(tx)) let id = request.id || 8888 wallet.addCallback(id, cb) let transactionString = JSON.stringify({"name": "signTransaction", "object": tx, id: id}) console.log(transactionString) wallet.signTransactionJava(transactionString) } wallet.response = function(request, result) { return {"id": request.id, "jsonrpc": request.jsonrpc, "result": result} } } function configureWeb3() { var web3 = new Web3(); let walletProvider = new Web3.providers.HttpProvider(wallet.networkUrl()) walletProvider.isMetaMask = true web3.setProvider(walletProvider); window.web3 = web3; window.chrome = { webstore: true } web3.eth.defaultAccount = wallet.address() web3.version.getNetwork = function(cb) { cb(null, wallet.netId()) } web3.eth.getCoinbase = function(cb) { return cb(null, wallet.address()) } walletProvider.sendAsync = function(request, cb) { switch (request.method) { case "net_listening": cb(null, wallet.response(request, true)) break; case "net_version": cb(null, wallet.response(request, wallet.netId())) break; case "eth_accounts": cb(null, wallet.response(request, [wallet.address()])) break; case "eth_sendTransaction": wallet.sendTransaction(request, cb) break case "eth_coinbase": cb(null, wallet.response(request, wallet.address())) break default: Web3.providers.HttpProvider.prototype.sendAsync.apply(walletProvider, [request, cb]) break } } walletProvider.send = function(request) { switch (request.method) { case "net_listening": return true case "net_version": return wallet.response(request, wallet.netId()) case "eth_accounts": return wallet.response(request, [wallet.address()]) case "eth_coinbase": return wallet.response(request, wallet.address()) default: return Web3.providers.HttpProvider.prototype.send.apply(walletProvider, [request]) } } }