|
|
|
'use strict'
|
|
|
|
const Web3 = require('web3')
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
loadWeb3: function (url) {
|
|
|
|
if (!url) url = 'http://localhost:8545'
|
|
|
|
const web3 = new Web3()
|
|
|
|
web3.setProvider(new web3.providers.HttpProvider(url))
|
|
|
|
this.extend(web3)
|
|
|
|
return web3
|
|
|
|
},
|
|
|
|
|
|
|
|
extendWeb3: function (web3) {
|
|
|
|
this.extend(web3)
|
|
|
|
},
|
|
|
|
|
|
|
|
setProvider: function (web3, url) {
|
|
|
|
web3.setProvider(new web3.providers.HttpProvider(url))
|
|
|
|
},
|
|
|
|
|
|
|
|
web3DebugNode: function (network) {
|
|
|
|
if (web3DebugNodes[network]) {
|
|
|
|
return this.loadWeb3(web3DebugNodes[network])
|
|
|
|
}
|
|
|
|
return null
|
|
|
|
},
|
|
|
|
|
|
|
|
extend: function (web3) {
|
|
|
|
if (!web3.extend) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
// DEBUG
|
|
|
|
const methods = []
|
|
|
|
if (!(web3.debug && web3.debug.preimage)) {
|
|
|
|
methods.push(new web3.extend.Method({
|
|
|
|
name: 'preimage',
|
|
|
|
call: 'debug_preimage',
|
|
|
|
inputFormatter: [null],
|
|
|
|
params: 1
|
|
|
|
}))
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!(web3.debug && web3.debug.traceTransaction)) {
|
|
|
|
methods.push(new web3.extend.Method({
|
|
|
|
name: 'traceTransaction',
|
|
|
|
call: 'debug_traceTransaction',
|
|
|
|
inputFormatter: [null, null],
|
|
|
|
params: 2
|
|
|
|
}))
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!(web3.debug && web3.debug.storageRangeAt)) {
|
|
|
|
methods.push(new web3.extend.Method({
|
|
|
|
name: 'storageRangeAt',
|
|
|
|
call: 'debug_storageRangeAt',
|
|
|
|
inputFormatter: [null, null, null, null, null],
|
|
|
|
params: 5
|
|
|
|
}))
|
|
|
|
}
|
|
|
|
if (methods.length > 0) {
|
|
|
|
web3.extend({
|
|
|
|
property: 'debug',
|
|
|
|
methods: methods,
|
|
|
|
properties: []
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const web3DebugNodes = {
|
|
|
|
'Main': 'https://mainnet.infura.io/remix',
|
|
|
|
'Rinkeby': 'https://remix-rinkeby.ethdevops.io',
|
|
|
|
'Ropsten': 'https://remix-ropsten.ethdevops.io',
|
|
|
|
'Goerli': 'https://remix-goerli.ethdevops.io',
|
|
|
|
'Kovan': 'https://remix-kovan.ethdevops.io'
|
|
|
|
}
|