github.com/ebakus/go-ebakus@v1.0.5-0.20200520105415-dbccef9ec421/internal/web3ext/web3ext.go (about)

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