Skip to content

Instantly share code, notes, and snippets.

@nickborysov
Last active February 22, 2018 12:58
Show Gist options
  • Select an option

  • Save nickborysov/008d274a4584efcc7f989f81fb578707 to your computer and use it in GitHub Desktop.

Select an option

Save nickborysov/008d274a4584efcc7f989f81fb578707 to your computer and use it in GitHub Desktop.
/*
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])
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment