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.

Revisions

  1. nickborysov revised this gist Feb 22, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion wallet.js
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    /*
    Javascript code fore make injection of web3. The code was taken from https://github.com/TrustWallet/trust-wallet-ios
    Javascript code fore make injection of web3. The code was based on https://github.com/TrustWallet/trust-wallet-ios
    */

    configureWallet()
  2. nickborysov created this gist Feb 22, 2018.
    111 changes: 111 additions & 0 deletions wallet.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,111 @@
    /*
    Javascript code fore make injection of web3. The code was taken from 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])
    }
    }
    }