9

I want to use web3 to call evm_snapshot (only available on testrpc). This is not in web3's list of methods, but I don't want to have to make an actual http call.

Jehan
  • 783
  • 1
  • 7
  • 11

3 Answers3

11

In addition to sendAsync, you can extend web3 like so:

    web3._extend({
        property: 'evm',
        methods: [new web3._extend.Method({
            name: 'snapshot',
            call: 'evm_snapshot',
            params: 0,
            outputFormatter: toIntVal
        })]
    });

    web3._extend({
        property: 'evm',
        methods: [new web3._extend.Method({
            name: 'revert',
            call: 'evm_revert',
            params: 1,
            inputFormatter: [toIntVal]
        })]
    });

That way you can use the command just like any other method, so it's far more readable.

Also, if you don't want to deal with implementing these methods yourself, you can use my extended web3

Tjaden Hess
  • 37,046
  • 10
  • 91
  • 118
8

Looks like I can use web3.currentProvider.sendAsync().

web3.currentProvider.sendAsync({
  method: "eth_getBalance",
  params: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', 'latest'],
  jsonrpc: "2.0",
  id: new Date().getTime()
} function (error, result) {...})
Jehan
  • 783
  • 1
  • 7
  • 11
0

Improving a bit Jehan's answer:

  window.ethereum.sendAsync({
  method: "eth_getBalance",
  params: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', 'latest'],
  jsonrpc: "2.0",
  id: new Date().getTime()
} , function (error, result){
           console.log(result);
       });