github.com/ethereum/go-ethereum@v1.10.9/internal/web3ext/web3ext.go (about)

     1  // Copyright 2015 The go-ethereum Authors
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-ethereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-ethereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  // package web3ext contains geth specific web3.js extensions.
    18  package web3ext
    19  
    20  var Modules = map[string]string{
    21  	"admin":    AdminJs,
    22  	"clique":   CliqueJs,
    23  	"ethash":   EthashJs,
    24  	"debug":    DebugJs,
    25  	"eth":      EthJs,
    26  	"miner":    MinerJs,
    27  	"net":      NetJs,
    28  	"personal": PersonalJs,
    29  	"rpc":      RpcJs,
    30  	"txpool":   TxpoolJs,
    31  	"les":      LESJs,
    32  	"vflux":    VfluxJs,
    33  }
    34  
    35  const CliqueJs = `
    36  web3._extend({
    37  	property: 'clique',
    38  	methods: [
    39  		new web3._extend.Method({
    40  			name: 'getSnapshot',
    41  			call: 'clique_getSnapshot',
    42  			params: 1,
    43  			inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter]
    44  		}),
    45  		new web3._extend.Method({
    46  			name: 'getSnapshotAtHash',
    47  			call: 'clique_getSnapshotAtHash',
    48  			params: 1
    49  		}),
    50  		new web3._extend.Method({
    51  			name: 'getSigners',
    52  			call: 'clique_getSigners',
    53  			params: 1,
    54  			inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter]
    55  		}),
    56  		new web3._extend.Method({
    57  			name: 'getSignersAtHash',
    58  			call: 'clique_getSignersAtHash',
    59  			params: 1
    60  		}),
    61  		new web3._extend.Method({
    62  			name: 'propose',
    63  			call: 'clique_propose',
    64  			params: 2
    65  		}),
    66  		new web3._extend.Method({
    67  			name: 'discard',
    68  			call: 'clique_discard',
    69  			params: 1
    70  		}),
    71  		new web3._extend.Method({
    72  			name: 'status',
    73  			call: 'clique_status',
    74  			params: 0
    75  		}),
    76  		new web3._extend.Method({
    77  			name: 'getSigner',
    78  			call: 'clique_getSigner',
    79  			params: 1,
    80  			inputFormatter: [null]
    81  		}),
    82  	],
    83  	properties: [
    84  		new web3._extend.Property({
    85  			name: 'proposals',
    86  			getter: 'clique_proposals'
    87  		}),
    88  	]
    89  });
    90  `
    91  
    92  const EthashJs = `
    93  web3._extend({
    94  	property: 'ethash',
    95  	methods: [
    96  		new web3._extend.Method({
    97  			name: 'getWork',
    98  			call: 'ethash_getWork',
    99  			params: 0
   100  		}),
   101  		new web3._extend.Method({
   102  			name: 'getHashrate',
   103  			call: 'ethash_getHashrate',
   104  			params: 0
   105  		}),
   106  		new web3._extend.Method({
   107  			name: 'submitWork',
   108  			call: 'ethash_submitWork',
   109  			params: 3,
   110  		}),
   111  		new web3._extend.Method({
   112  			name: 'submitHashrate',
   113  			call: 'ethash_submitHashrate',
   114  			params: 2,
   115  		}),
   116  	]
   117  });
   118  `
   119  
   120  const AdminJs = `
   121  web3._extend({
   122  	property: 'admin',
   123  	methods: [
   124  		new web3._extend.Method({
   125  			name: 'addPeer',
   126  			call: 'admin_addPeer',
   127  			params: 1
   128  		}),
   129  		new web3._extend.Method({
   130  			name: 'removePeer',
   131  			call: 'admin_removePeer',
   132  			params: 1
   133  		}),
   134  		new web3._extend.Method({
   135  			name: 'addTrustedPeer',
   136  			call: 'admin_addTrustedPeer',
   137  			params: 1
   138  		}),
   139  		new web3._extend.Method({
   140  			name: 'removeTrustedPeer',
   141  			call: 'admin_removeTrustedPeer',
   142  			params: 1
   143  		}),
   144  		new web3._extend.Method({
   145  			name: 'exportChain',
   146  			call: 'admin_exportChain',
   147  			params: 3,
   148  			inputFormatter: [null, null, null]
   149  		}),
   150  		new web3._extend.Method({
   151  			name: 'importChain',
   152  			call: 'admin_importChain',
   153  			params: 1
   154  		}),
   155  		new web3._extend.Method({
   156  			name: 'sleepBlocks',
   157  			call: 'admin_sleepBlocks',
   158  			params: 2
   159  		}),
   160  		new web3._extend.Method({
   161  			name: 'startHTTP',
   162  			call: 'admin_startHTTP',
   163  			params: 5,
   164  			inputFormatter: [null, null, null, null, null]
   165  		}),
   166  		new web3._extend.Method({
   167  			name: 'stopHTTP',
   168  			call: 'admin_stopHTTP'
   169  		}),
   170  		// This method is deprecated.
   171  		new web3._extend.Method({
   172  			name: 'startRPC',
   173  			call: 'admin_startRPC',
   174  			params: 5,
   175  			inputFormatter: [null, null, null, null, null]
   176  		}),
   177  		// This method is deprecated.
   178  		new web3._extend.Method({
   179  			name: 'stopRPC',
   180  			call: 'admin_stopRPC'
   181  		}),
   182  		new web3._extend.Method({
   183  			name: 'startWS',
   184  			call: 'admin_startWS',
   185  			params: 4,
   186  			inputFormatter: [null, null, null, null]
   187  		}),
   188  		new web3._extend.Method({
   189  			name: 'stopWS',
   190  			call: 'admin_stopWS'
   191  		}),
   192  	],
   193  	properties: [
   194  		new web3._extend.Property({
   195  			name: 'nodeInfo',
   196  			getter: 'admin_nodeInfo'
   197  		}),
   198  		new web3._extend.Property({
   199  			name: 'peers',
   200  			getter: 'admin_peers'
   201  		}),
   202  		new web3._extend.Property({
   203  			name: 'datadir',
   204  			getter: 'admin_datadir'
   205  		}),
   206  	]
   207  });
   208  `
   209  
   210  const DebugJs = `
   211  web3._extend({
   212  	property: 'debug',
   213  	methods: [
   214  		new web3._extend.Method({
   215  			name: 'accountRange',
   216  			call: 'debug_accountRange',
   217  			params: 6,
   218  			inputFormatter: [web3._extend.formatters.inputDefaultBlockNumberFormatter, null, null, null, null, null],
   219  		}),
   220  		new web3._extend.Method({
   221  			name: 'printBlock',
   222  			call: 'debug_printBlock',
   223  			params: 1,
   224  			outputFormatter: console.log
   225  		}),
   226  		new web3._extend.Method({
   227  			name: 'getBlockRlp',
   228  			call: 'debug_getBlockRlp',
   229  			params: 1
   230  		}),
   231  		new web3._extend.Method({
   232  			name: 'testSignCliqueBlock',
   233  			call: 'debug_testSignCliqueBlock',
   234  			params: 2,
   235  			inputFormatter: [web3._extend.formatters.inputAddressFormatter, null],
   236  		}),
   237  		new web3._extend.Method({
   238  			name: 'setHead',
   239  			call: 'debug_setHead',
   240  			params: 1
   241  		}),
   242  		new web3._extend.Method({
   243  			name: 'seedHash',
   244  			call: 'debug_seedHash',
   245  			params: 1
   246  		}),
   247  		new web3._extend.Method({
   248  			name: 'dumpBlock',
   249  			call: 'debug_dumpBlock',
   250  			params: 1,
   251  			inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter]
   252  		}),
   253  		new web3._extend.Method({
   254  			name: 'chaindbProperty',
   255  			call: 'debug_chaindbProperty',
   256  			params: 1,
   257  			outputFormatter: console.log
   258  		}),
   259  		new web3._extend.Method({
   260  			name: 'chaindbCompact',
   261  			call: 'debug_chaindbCompact',
   262  		}),
   263  		new web3._extend.Method({
   264  			name: 'verbosity',
   265  			call: 'debug_verbosity',
   266  			params: 1
   267  		}),
   268  		new web3._extend.Method({
   269  			name: 'vmodule',
   270  			call: 'debug_vmodule',
   271  			params: 1
   272  		}),
   273  		new web3._extend.Method({
   274  			name: 'backtraceAt',
   275  			call: 'debug_backtraceAt',
   276  			params: 1,
   277  		}),
   278  		new web3._extend.Method({
   279  			name: 'stacks',
   280  			call: 'debug_stacks',
   281  			params: 1,
   282  			inputFormatter: [null],
   283  			outputFormatter: console.log
   284  		}),
   285  		new web3._extend.Method({
   286  			name: 'freeOSMemory',
   287  			call: 'debug_freeOSMemory',
   288  			params: 0,
   289  		}),
   290  		new web3._extend.Method({
   291  			name: 'setGCPercent',
   292  			call: 'debug_setGCPercent',
   293  			params: 1,
   294  		}),
   295  		new web3._extend.Method({
   296  			name: 'memStats',
   297  			call: 'debug_memStats',
   298  			params: 0,
   299  		}),
   300  		new web3._extend.Method({
   301  			name: 'gcStats',
   302  			call: 'debug_gcStats',
   303  			params: 0,
   304  		}),
   305  		new web3._extend.Method({
   306  			name: 'cpuProfile',
   307  			call: 'debug_cpuProfile',
   308  			params: 2
   309  		}),
   310  		new web3._extend.Method({
   311  			name: 'startCPUProfile',
   312  			call: 'debug_startCPUProfile',
   313  			params: 1
   314  		}),
   315  		new web3._extend.Method({
   316  			name: 'stopCPUProfile',
   317  			call: 'debug_stopCPUProfile',
   318  			params: 0
   319  		}),
   320  		new web3._extend.Method({
   321  			name: 'goTrace',
   322  			call: 'debug_goTrace',
   323  			params: 2
   324  		}),
   325  		new web3._extend.Method({
   326  			name: 'startGoTrace',
   327  			call: 'debug_startGoTrace',
   328  			params: 1
   329  		}),
   330  		new web3._extend.Method({
   331  			name: 'stopGoTrace',
   332  			call: 'debug_stopGoTrace',
   333  			params: 0
   334  		}),
   335  		new web3._extend.Method({
   336  			name: 'blockProfile',
   337  			call: 'debug_blockProfile',
   338  			params: 2
   339  		}),
   340  		new web3._extend.Method({
   341  			name: 'setBlockProfileRate',
   342  			call: 'debug_setBlockProfileRate',
   343  			params: 1
   344  		}),
   345  		new web3._extend.Method({
   346  			name: 'writeBlockProfile',
   347  			call: 'debug_writeBlockProfile',
   348  			params: 1
   349  		}),
   350  		new web3._extend.Method({
   351  			name: 'mutexProfile',
   352  			call: 'debug_mutexProfile',
   353  			params: 2
   354  		}),
   355  		new web3._extend.Method({
   356  			name: 'setMutexProfileFraction',
   357  			call: 'debug_setMutexProfileFraction',
   358  			params: 1
   359  		}),
   360  		new web3._extend.Method({
   361  			name: 'writeMutexProfile',
   362  			call: 'debug_writeMutexProfile',
   363  			params: 1
   364  		}),
   365  		new web3._extend.Method({
   366  			name: 'writeMemProfile',
   367  			call: 'debug_writeMemProfile',
   368  			params: 1
   369  		}),
   370  		new web3._extend.Method({
   371  			name: 'traceBlock',
   372  			call: 'debug_traceBlock',
   373  			params: 2,
   374  			inputFormatter: [null, null]
   375  		}),
   376  		new web3._extend.Method({
   377  			name: 'traceBlockFromFile',
   378  			call: 'debug_traceBlockFromFile',
   379  			params: 2,
   380  			inputFormatter: [null, null]
   381  		}),
   382  		new web3._extend.Method({
   383  			name: 'traceBadBlock',
   384  			call: 'debug_traceBadBlock',
   385  			params: 1,
   386  			inputFormatter: [null]
   387  		}),
   388  		new web3._extend.Method({
   389  			name: 'standardTraceBadBlockToFile',
   390  			call: 'debug_standardTraceBadBlockToFile',
   391  			params: 2,
   392  			inputFormatter: [null, null]
   393  		}),
   394  		new web3._extend.Method({
   395  			name: 'intermediateRoots',
   396  			call: 'debug_intermediateRoots',
   397  			params: 2,
   398  			inputFormatter: [null, null]
   399  		}),
   400  		new web3._extend.Method({
   401  			name: 'standardTraceBlockToFile',
   402  			call: 'debug_standardTraceBlockToFile',
   403  			params: 2,
   404  			inputFormatter: [null, null]
   405  		}),
   406  		new web3._extend.Method({
   407  			name: 'traceBlockByNumber',
   408  			call: 'debug_traceBlockByNumber',
   409  			params: 2,
   410  			inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, null]
   411  		}),
   412  		new web3._extend.Method({
   413  			name: 'traceBlockByHash',
   414  			call: 'debug_traceBlockByHash',
   415  			params: 2,
   416  			inputFormatter: [null, null]
   417  		}),
   418  		new web3._extend.Method({
   419  			name: 'traceTransaction',
   420  			call: 'debug_traceTransaction',
   421  			params: 2,
   422  			inputFormatter: [null, null]
   423  		}),
   424  		new web3._extend.Method({
   425  			name: 'traceCall',
   426  			call: 'debug_traceCall',
   427  			params: 3,
   428  			inputFormatter: [null, null, null]
   429  		}),
   430  		new web3._extend.Method({
   431  			name: 'preimage',
   432  			call: 'debug_preimage',
   433  			params: 1,
   434  			inputFormatter: [null]
   435  		}),
   436  		new web3._extend.Method({
   437  			name: 'getBadBlocks',
   438  			call: 'debug_getBadBlocks',
   439  			params: 0,
   440  		}),
   441  		new web3._extend.Method({
   442  			name: 'storageRangeAt',
   443  			call: 'debug_storageRangeAt',
   444  			params: 5,
   445  		}),
   446  		new web3._extend.Method({
   447  			name: 'getModifiedAccountsByNumber',
   448  			call: 'debug_getModifiedAccountsByNumber',
   449  			params: 2,
   450  			inputFormatter: [null, null],
   451  		}),
   452  		new web3._extend.Method({
   453  			name: 'getModifiedAccountsByHash',
   454  			call: 'debug_getModifiedAccountsByHash',
   455  			params: 2,
   456  			inputFormatter:[null, null],
   457  		}),
   458  		new web3._extend.Method({
   459  			name: 'freezeClient',
   460  			call: 'debug_freezeClient',
   461  			params: 1,
   462  		}),
   463  	],
   464  	properties: []
   465  });
   466  `
   467  
   468  const EthJs = `
   469  web3._extend({
   470  	property: 'eth',
   471  	methods: [
   472  		new web3._extend.Method({
   473  			name: 'chainId',
   474  			call: 'eth_chainId',
   475  			params: 0
   476  		}),
   477  		new web3._extend.Method({
   478  			name: 'sign',
   479  			call: 'eth_sign',
   480  			params: 2,
   481  			inputFormatter: [web3._extend.formatters.inputAddressFormatter, null]
   482  		}),
   483  		new web3._extend.Method({
   484  			name: 'resend',
   485  			call: 'eth_resend',
   486  			params: 3,
   487  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter, web3._extend.utils.fromDecimal, web3._extend.utils.fromDecimal]
   488  		}),
   489  		new web3._extend.Method({
   490  			name: 'signTransaction',
   491  			call: 'eth_signTransaction',
   492  			params: 1,
   493  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter]
   494  		}),
   495  		new web3._extend.Method({
   496  			name: 'estimateGas',
   497  			call: 'eth_estimateGas',
   498  			params: 2,
   499  			inputFormatter: [web3._extend.formatters.inputCallFormatter, web3._extend.formatters.inputBlockNumberFormatter],
   500  			outputFormatter: web3._extend.utils.toDecimal
   501  		}),
   502  		new web3._extend.Method({
   503  			name: 'submitTransaction',
   504  			call: 'eth_submitTransaction',
   505  			params: 1,
   506  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter]
   507  		}),
   508  		new web3._extend.Method({
   509  			name: 'fillTransaction',
   510  			call: 'eth_fillTransaction',
   511  			params: 1,
   512  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter]
   513  		}),
   514  		new web3._extend.Method({
   515  			name: 'getHeaderByNumber',
   516  			call: 'eth_getHeaderByNumber',
   517  			params: 1,
   518  			inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter]
   519  		}),
   520  		new web3._extend.Method({
   521  			name: 'getHeaderByHash',
   522  			call: 'eth_getHeaderByHash',
   523  			params: 1
   524  		}),
   525  		new web3._extend.Method({
   526  			name: 'getBlockByNumber',
   527  			call: 'eth_getBlockByNumber',
   528  			params: 2,
   529  			inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, function (val) { return !!val; }]
   530  		}),
   531  		new web3._extend.Method({
   532  			name: 'getBlockByHash',
   533  			call: 'eth_getBlockByHash',
   534  			params: 2,
   535  			inputFormatter: [null, function (val) { return !!val; }]
   536  		}),
   537  		new web3._extend.Method({
   538  			name: 'getRawTransaction',
   539  			call: 'eth_getRawTransactionByHash',
   540  			params: 1
   541  		}),
   542  		new web3._extend.Method({
   543  			name: 'getRawTransactionFromBlock',
   544  			call: function(args) {
   545  				return (web3._extend.utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getRawTransactionByBlockHashAndIndex' : 'eth_getRawTransactionByBlockNumberAndIndex';
   546  			},
   547  			params: 2,
   548  			inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, web3._extend.utils.toHex]
   549  		}),
   550  		new web3._extend.Method({
   551  			name: 'getProof',
   552  			call: 'eth_getProof',
   553  			params: 3,
   554  			inputFormatter: [web3._extend.formatters.inputAddressFormatter, null, web3._extend.formatters.inputBlockNumberFormatter]
   555  		}),
   556  		new web3._extend.Method({
   557  			name: 'createAccessList',
   558  			call: 'eth_createAccessList',
   559  			params: 2,
   560  			inputFormatter: [null, web3._extend.formatters.inputBlockNumberFormatter],
   561  		}),
   562  		new web3._extend.Method({
   563  			name: 'feeHistory',
   564  			call: 'eth_feeHistory',
   565  			params: 3,
   566  			inputFormatter: [null, web3._extend.formatters.inputBlockNumberFormatter, null]
   567  		}),
   568  	],
   569  	properties: [
   570  		new web3._extend.Property({
   571  			name: 'pendingTransactions',
   572  			getter: 'eth_pendingTransactions',
   573  			outputFormatter: function(txs) {
   574  				var formatted = [];
   575  				for (var i = 0; i < txs.length; i++) {
   576  					formatted.push(web3._extend.formatters.outputTransactionFormatter(txs[i]));
   577  					formatted[i].blockHash = null;
   578  				}
   579  				return formatted;
   580  			}
   581  		}),
   582  		new web3._extend.Property({
   583  			name: 'maxPriorityFeePerGas',
   584  			getter: 'eth_maxPriorityFeePerGas',
   585  			outputFormatter: web3._extend.utils.toBigNumber
   586  		}),
   587  	]
   588  });
   589  `
   590  
   591  const MinerJs = `
   592  web3._extend({
   593  	property: 'miner',
   594  	methods: [
   595  		new web3._extend.Method({
   596  			name: 'start',
   597  			call: 'miner_start',
   598  			params: 1,
   599  			inputFormatter: [null]
   600  		}),
   601  		new web3._extend.Method({
   602  			name: 'stop',
   603  			call: 'miner_stop'
   604  		}),
   605  		new web3._extend.Method({
   606  			name: 'setEtherbase',
   607  			call: 'miner_setEtherbase',
   608  			params: 1,
   609  			inputFormatter: [web3._extend.formatters.inputAddressFormatter]
   610  		}),
   611  		new web3._extend.Method({
   612  			name: 'setExtra',
   613  			call: 'miner_setExtra',
   614  			params: 1
   615  		}),
   616  		new web3._extend.Method({
   617  			name: 'setGasPrice',
   618  			call: 'miner_setGasPrice',
   619  			params: 1,
   620  			inputFormatter: [web3._extend.utils.fromDecimal]
   621  		}),
   622  		new web3._extend.Method({
   623  			name: 'setGasLimit',
   624  			call: 'miner_setGasLimit',
   625  			params: 1,
   626  			inputFormatter: [web3._extend.utils.fromDecimal]
   627  		}),
   628  		new web3._extend.Method({
   629  			name: 'setRecommitInterval',
   630  			call: 'miner_setRecommitInterval',
   631  			params: 1,
   632  		}),
   633  		new web3._extend.Method({
   634  			name: 'getHashrate',
   635  			call: 'miner_getHashrate'
   636  		}),
   637  	],
   638  	properties: []
   639  });
   640  `
   641  
   642  const NetJs = `
   643  web3._extend({
   644  	property: 'net',
   645  	methods: [],
   646  	properties: [
   647  		new web3._extend.Property({
   648  			name: 'version',
   649  			getter: 'net_version'
   650  		}),
   651  	]
   652  });
   653  `
   654  
   655  const PersonalJs = `
   656  web3._extend({
   657  	property: 'personal',
   658  	methods: [
   659  		new web3._extend.Method({
   660  			name: 'importRawKey',
   661  			call: 'personal_importRawKey',
   662  			params: 2
   663  		}),
   664  		new web3._extend.Method({
   665  			name: 'sign',
   666  			call: 'personal_sign',
   667  			params: 3,
   668  			inputFormatter: [null, web3._extend.formatters.inputAddressFormatter, null]
   669  		}),
   670  		new web3._extend.Method({
   671  			name: 'ecRecover',
   672  			call: 'personal_ecRecover',
   673  			params: 2
   674  		}),
   675  		new web3._extend.Method({
   676  			name: 'openWallet',
   677  			call: 'personal_openWallet',
   678  			params: 2
   679  		}),
   680  		new web3._extend.Method({
   681  			name: 'deriveAccount',
   682  			call: 'personal_deriveAccount',
   683  			params: 3
   684  		}),
   685  		new web3._extend.Method({
   686  			name: 'signTransaction',
   687  			call: 'personal_signTransaction',
   688  			params: 2,
   689  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter, null]
   690  		}),
   691  		new web3._extend.Method({
   692  			name: 'unpair',
   693  			call: 'personal_unpair',
   694  			params: 2
   695  		}),
   696  		new web3._extend.Method({
   697  			name: 'initializeWallet',
   698  			call: 'personal_initializeWallet',
   699  			params: 1
   700  		})
   701  	],
   702  	properties: [
   703  		new web3._extend.Property({
   704  			name: 'listWallets',
   705  			getter: 'personal_listWallets'
   706  		}),
   707  	]
   708  })
   709  `
   710  
   711  const RpcJs = `
   712  web3._extend({
   713  	property: 'rpc',
   714  	methods: [],
   715  	properties: [
   716  		new web3._extend.Property({
   717  			name: 'modules',
   718  			getter: 'rpc_modules'
   719  		}),
   720  	]
   721  });
   722  `
   723  
   724  const TxpoolJs = `
   725  web3._extend({
   726  	property: 'txpool',
   727  	methods: [],
   728  	properties:
   729  	[
   730  		new web3._extend.Property({
   731  			name: 'content',
   732  			getter: 'txpool_content'
   733  		}),
   734  		new web3._extend.Property({
   735  			name: 'inspect',
   736  			getter: 'txpool_inspect'
   737  		}),
   738  		new web3._extend.Property({
   739  			name: 'status',
   740  			getter: 'txpool_status',
   741  			outputFormatter: function(status) {
   742  				status.pending = web3._extend.utils.toDecimal(status.pending);
   743  				status.queued = web3._extend.utils.toDecimal(status.queued);
   744  				return status;
   745  			}
   746  		}),
   747  		new web3._extend.Method({
   748  			name: 'contentFrom',
   749  			call: 'txpool_contentFrom',
   750  			params: 1,
   751  		}),
   752  	]
   753  });
   754  `
   755  
   756  const LESJs = `
   757  web3._extend({
   758  	property: 'les',
   759  	methods:
   760  	[
   761  		new web3._extend.Method({
   762  			name: 'getCheckpoint',
   763  			call: 'les_getCheckpoint',
   764  			params: 1
   765  		}),
   766  		new web3._extend.Method({
   767  			name: 'clientInfo',
   768  			call: 'les_clientInfo',
   769  			params: 1
   770  		}),
   771  		new web3._extend.Method({
   772  			name: 'priorityClientInfo',
   773  			call: 'les_priorityClientInfo',
   774  			params: 3
   775  		}),
   776  		new web3._extend.Method({
   777  			name: 'setClientParams',
   778  			call: 'les_setClientParams',
   779  			params: 2
   780  		}),
   781  		new web3._extend.Method({
   782  			name: 'setDefaultParams',
   783  			call: 'les_setDefaultParams',
   784  			params: 1
   785  		}),
   786  		new web3._extend.Method({
   787  			name: 'addBalance',
   788  			call: 'les_addBalance',
   789  			params: 2
   790  		}),
   791  	],
   792  	properties:
   793  	[
   794  		new web3._extend.Property({
   795  			name: 'latestCheckpoint',
   796  			getter: 'les_latestCheckpoint'
   797  		}),
   798  		new web3._extend.Property({
   799  			name: 'checkpointContractAddress',
   800  			getter: 'les_getCheckpointContractAddress'
   801  		}),
   802  		new web3._extend.Property({
   803  			name: 'serverInfo',
   804  			getter: 'les_serverInfo'
   805  		}),
   806  	]
   807  });
   808  `
   809  
   810  const VfluxJs = `
   811  web3._extend({
   812  	property: 'vflux',
   813  	methods:
   814  	[
   815  		new web3._extend.Method({
   816  			name: 'distribution',
   817  			call: 'vflux_distribution',
   818  			params: 2
   819  		}),
   820  		new web3._extend.Method({
   821  			name: 'timeout',
   822  			call: 'vflux_timeout',
   823  			params: 2
   824  		}),
   825  		new web3._extend.Method({
   826  			name: 'value',
   827  			call: 'vflux_value',
   828  			params: 2
   829  		}),
   830  	],
   831  	properties:
   832  	[
   833  		new web3._extend.Property({
   834  			name: 'requestStats',
   835  			getter: 'vflux_requestStats'
   836  		}),
   837  	]
   838  });
   839  `