github.com/bigzoro/my_simplechain@v0.0.0-20240315012955-8ad0a2a29bb9/internal/web3ext/web3ext.go (about)

     1  // Copyright 2015 The go-simplechain Authors
     2  // This file is part of the go-simplechain library.
     3  //
     4  // The go-simplechain 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-simplechain 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-simplechain 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  	"ethash":     EthashJs,
    26  	"debug":      DebugJs,
    27  	"eth":        EthJs,
    28  	"miner":      MinerJs,
    29  	"net":        NetJs,
    30  	"personal":   PersonalJs,
    31  	"rpc":        RpcJs,
    32  	"shh":        ShhJs,
    33  	"swarmfs":    SwarmfsJs,
    34  	"txpool":     TxpoolJs,
    35  	"les":        LESJs,
    36  	"permission": Permission_JS,
    37  	"raft":       Raft_JS,
    38  	"pbft":       PBFT_JS,
    39  	"hotstuff":   HOTSTUFF_JS,
    40  }
    41  
    42  const HOTSTUFF_JS = `
    43  web3._extend({
    44  	property: 'hotstuff',
    45  	methods: [
    46  		new web3._extend.Method({
    47  			name: 'add',
    48  			call: 'hotstuff_add',
    49  			params: 4,
    50  		}),
    51  		new web3._extend.Method({
    52  			name: 'remove',
    53  			call: 'hotstuff_remove',
    54  			params: 3,
    55  		}),
    56  		new web3._extend.Method({
    57  			name: 'proposeAdd',
    58  			call: 'hotstuff_proposeAdd',
    59  			params: 3,
    60  		}),
    61  		new web3._extend.Method({
    62  			name: 'proposeRemove',
    63  			call: 'hotstuff_proposeRemove',
    64  			params: 2,
    65  		}),
    66  		new web3._extend.Method({
    67  			name: 'aggregate',
    68  			call: 'hotstuff_aggregate',
    69  			params: 1,
    70  		}),
    71  		new web3._extend.Method({
    72  			name: 'getReplicaInfo',
    73  			call: 'hotstuff_getReplicaInfo',
    74  			params: 1,
    75  		}),
    76  	]
    77  });
    78  `
    79  
    80  const PBFT_JS = `
    81  web3._extend({
    82  	property: 'pbft',
    83  	methods:
    84  	[
    85  		new web3._extend.Method({
    86  			name: 'getSnapshot',
    87  			call: 'pbft_getSnapshot',
    88  			params: 1,
    89  			inputFormatter: [null]
    90  		}),
    91  		new web3._extend.Method({
    92  			name: 'getSnapshotAtHash',
    93  			call: 'pbft_getSnapshotAtHash',
    94  			params: 1
    95  		}),
    96  		new web3._extend.Method({
    97  			name: 'getValidators',
    98  			call: 'pbft_getValidators',
    99  			params: 1,
   100  			inputFormatter: [null]
   101  		}),
   102  		new web3._extend.Method({
   103  			name: 'getValidatorsAtHash',
   104  			call: 'pbft_getValidatorsAtHash',
   105  			params: 1
   106  		}),
   107  		new web3._extend.Method({
   108  			name: 'propose',
   109  			call: 'pbft_propose',
   110  			params: 2
   111  		}),
   112  		new web3._extend.Method({
   113  			name: 'discard',
   114  			call: 'pbft_discard',
   115  			params: 1
   116  		}),
   117  
   118  		new web3._extend.Method({
   119  			name: 'getSignersFromBlock',
   120  			call: 'pbft_getSignersFromBlock',
   121  			params: 1,
   122  			inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter]
   123  		}),
   124  		new web3._extend.Method({
   125  			name: 'getSignersFromBlockByHash',
   126  			call: 'pbft_getSignersFromBlockByHash',
   127  			params: 1
   128  		}),
   129  	],
   130  	properties:
   131  	[
   132  		new web3._extend.Property({
   133  			name: 'candidates',
   134  			getter: 'pbft_candidates'
   135  		}),
   136  		new web3._extend.Property({
   137  			name: 'nodeAddress',
   138  			getter: 'pbft_nodeAddress'
   139  		}),
   140  	]
   141  });
   142  `
   143  
   144  const Raft_JS = `web3._extend({
   145         property: 'raft',
   146         methods:
   147         [
   148         ],
   149         properties:
   150         [
   151                 new web3._extend.Property({
   152                         name: 'role',
   153                         getter: 'raft_role'
   154                 }),
   155  			   new web3._extend.Method({
   156                        name: 'changeRole',
   157                        call: 'raft_changeRole',
   158                        params: 1
   159                 }),
   160                 new web3._extend.Method({
   161                        name: 'addPeer',
   162                        call: 'raft_addPeer',
   163                        params: 1
   164                 }),
   165                 new web3._extend.Method({
   166                        name: 'removePeer',
   167                        call: 'raft_removePeer',
   168                        params: 1
   169                 }),
   170  			   new web3._extend.Property({
   171                         name: 'getMaxRaftId',
   172                         getter: 'raft_getMaxRaftId'
   173                 }),
   174                 new web3._extend.Property({
   175                         name: 'leader',
   176                         getter: 'raft_leader'
   177                 }),
   178                 new web3._extend.Property({
   179                         name: 'cluster',
   180                         getter: 'raft_cluster'
   181                 }),
   182         ]
   183  })
   184  `
   185  
   186  const Permission_JS = `web3._extend({
   187  	property: 'permission',
   188  	methods: [
   189  		new web3._extend.Method({
   190  			name: 'addPeer',
   191  			call: 'permission_addPeer',
   192  			params: 2,
   193  			inputFormatter: [null, web3._extend.formatters.inputAddressFormatter]
   194  		}),
   195  		new web3._extend.Method({
   196  			name: 'removePeer',
   197  			call: 'permission_removePeer',
   198  			params: 1,
   199  			inputFormatter: [null]
   200  		}),
   201  		new web3._extend.Method({
   202  			name: 'setAdminNode',
   203  			call: 'permission_setAdminNode',
   204  			params: 4,
   205  			inputFormatter: [null, null, web3._extend.formatters.inputAddressFormatter, web3._extend.formatters.inputAddressFormatter]
   206  		}),
   207  		new web3._extend.Method({
   208  			name: 'initFinish',
   209  			call: 'permission_initFinish',
   210  			params: 1,
   211  			inputFormatter: [web3._extend.formatters.inputAddressFormatter]
   212  		}),
   213  		new web3._extend.Method({
   214  			name: 'makeProposalForJoin',
   215  			call: 'permission_makeProposalForJoin',
   216  			params: 4,
   217  			inputFormatter: [null, null, web3._extend.formatters.inputAddressFormatter, web3._extend.formatters.inputAddressFormatter]
   218  		}),
   219  		new web3._extend.Method({
   220  			name: 'acceptProposalForJoin',
   221  			call: 'permission_acceptProposalForJoin',
   222  			params: 2,
   223  			inputFormatter: [null,web3._extend.formatters.inputAddressFormatter]
   224  		}),
   225  		new web3._extend.Method({
   226  			name: 'rejectProposalForJoin',
   227  			call: 'permission_rejectProposalForJoin',
   228  			params: 2,
   229  			inputFormatter: [null,web3._extend.formatters.inputAddressFormatter]
   230  		}),
   231  		new web3._extend.Method({
   232  			name: 'makeProposalForAdmin',
   233  			call: 'permission_makeProposalForAdmin',
   234  			params: 2,
   235  			inputFormatter: [null,web3._extend.formatters.inputAddressFormatter]
   236  		}),
   237  		new web3._extend.Method({
   238  			name: 'acceptProposalForAdmin',
   239  			call: 'permission_acceptProposalForAdmin',
   240  			params: 2,
   241  			inputFormatter: [null,web3._extend.formatters.inputAddressFormatter]
   242  		}),
   243  		new web3._extend.Method({
   244  			name: 'rejectProposalForAdmin',
   245  			call: 'permission_rejectProposalForAdmin',
   246  			params: 2,
   247  			inputFormatter: [null,web3._extend.formatters.inputAddressFormatter]
   248  		}),
   249  		new web3._extend.Method({
   250  			name: 'makeProposalForCommon',
   251  			call: 'permission_makeProposalForCommon',
   252  			params: 2,
   253  			inputFormatter: [null,web3._extend.formatters.inputAddressFormatter]
   254  		}),
   255  		new web3._extend.Method({
   256  			name: 'acceptProposalForCommon',
   257  			call: 'permission_acceptProposalForCommon',
   258  			params: 2,
   259  			inputFormatter: [null,web3._extend.formatters.inputAddressFormatter]
   260  		}),
   261  		new web3._extend.Method({
   262  			name: 'rejectProposalForCommon',
   263  			call: 'permission_rejectProposalForCommon',
   264  			params: 2,
   265  			inputFormatter: [null,web3._extend.formatters.inputAddressFormatter]
   266  		}),
   267  		new web3._extend.Method({
   268  			name: 'makeProposalForExit',
   269  			call: 'permission_makeProposalForExit',
   270  			params: 2,
   271  			inputFormatter: [null,web3._extend.formatters.inputAddressFormatter]
   272  		}),
   273  		new web3._extend.Method({
   274  			name: 'acceptProposalForExit',
   275  			call: 'permission_acceptProposalForExit',
   276  			params: 2,
   277  			inputFormatter: [null,web3._extend.formatters.inputAddressFormatter]
   278  		}),
   279  		new web3._extend.Method({
   280  			name: 'rejectProposalForExit',
   281  			call: 'permission_rejectProposalForExit',
   282  			params: 2,
   283  			inputFormatter: [null,web3._extend.formatters.inputAddressFormatter]
   284  		}),
   285  		new web3._extend.Method({
   286  			name: 'isNetworkInitFinished',
   287  			call: 'permission_isNetworkInitFinished',
   288  			params: 0,
   289  			inputFormatter: []
   290  		}),
   291  		new web3._extend.Method({
   292  			name: 'updateNodeInfo',
   293  			call: 'permission_updateNodeInfo',
   294  			params: 3,
   295  			inputFormatter: [null,null,web3._extend.formatters.inputAddressFormatter]
   296  		}),
   297  		new web3._extend.Method({
   298  			name: 'exit',
   299  			call: 'permission_exit',
   300  			params: 1,
   301  			inputFormatter: [web3._extend.formatters.inputAddressFormatter]
   302  		}),
   303  		new web3._extend.Method({
   304  			name: 'getNodeByRole',
   305  			call: 'permission_getNodeByRole',
   306  			params: 2,
   307  			inputFormatter: [null, web3._extend.formatters.inputAddressFormatter]
   308  		}),
   309  		new web3._extend.Method({
   310  			name: 'getNodeRole',
   311  			call: 'permission_getNodeRole',
   312  			params: 2,
   313  			inputFormatter: [null, web3._extend.formatters.inputAddressFormatter]
   314  		}),
   315  		new web3._extend.Method({
   316  			name: 'getNodeInfoByName',
   317  			call: 'permission_getNodeInfoByName',
   318  			params: 2,
   319  			inputFormatter: [null, web3._extend.formatters.inputAddressFormatter]
   320  		}),
   321  		new web3._extend.Method({
   322  			name: 'getStateMap',
   323  			call: 'permission_getStateMap',
   324  			params: 3,
   325  			inputFormatter: [null, null,web3._extend.formatters.inputAddressFormatter]
   326  		}),
   327  		new web3._extend.Method({
   328  			name: 'getNodeInfo',
   329  			call: 'permission_getNodeInfo',
   330  			params: 2,
   331  			inputFormatter: [null, web3._extend.formatters.inputAddressFormatter]
   332  		}),
   333  		new web3._extend.Method({
   334  			name: 'getAllStatingRecord',
   335  			call: 'permission_getAllStatingRecord',
   336  			params: 1,
   337  			inputFormatter: [web3._extend.formatters.inputAddressFormatter]
   338  		}),
   339  		new web3._extend.Method({
   340  			name: 'isAdmin',
   341  			call: 'permission_isAdmin',
   342  			params: 2,
   343  			inputFormatter: [null, web3._extend.formatters.inputAddressFormatter]
   344  		}),
   345  		new web3._extend.Method({
   346  			name: 'setPermissionContractAddress',
   347  			call: 'permission_setPermissionContractAddress',
   348  			params: 1,
   349  			inputFormatter: [web3._extend.formatters.inputAddressFormatter]
   350  		}),
   351  		new web3._extend.Method({
   352  			name: 'getPermissionContractAddress',
   353  			call: 'permission_getPermissionContractAddress',
   354  			params: 0,
   355  			inputFormatter: []
   356  		}),
   357  		new web3._extend.Method({
   358  			name: 'setStoreContractAddress',
   359  			call: 'permission_setStoreContractAddress',
   360  			params: 1,
   361  			inputFormatter: [web3._extend.formatters.inputAddressFormatter]
   362  		}),
   363  		new web3._extend.Method({
   364  			name: 'getStoreContractAddress',
   365  			call: 'permission_getStoreContractAddress',
   366  			params: 0,
   367  			inputFormatter: []
   368  		}),
   369  		new web3._extend.Method({
   370  			name: 'storeContractAbi',
   371  			call: 'permission_storeContractAbi',
   372  			params: 4,
   373  			inputFormatter: [web3._extend.formatters.inputAddressFormatter,null,null,web3._extend.formatters.inputAddressFormatter]
   374  		}),
   375  		new web3._extend.Method({
   376  			name: 'getContractAbi',
   377  			call: 'permission_getContractAbi',
   378  			params: 2,
   379  			inputFormatter: [null,web3._extend.formatters.inputAddressFormatter]
   380  		}),
   381  		new web3._extend.Method({
   382  			name: 'updateNodeName',
   383  			call: 'permission_updateNodeName',
   384  			params: 3,
   385  			inputFormatter: [null,null,web3._extend.formatters.inputAddressFormatter]
   386  		}),
   387  		new web3._extend.Method({
   388  			name: 'getAdminCount',
   389  			call: 'permission_getAdminCount',
   390  			params: 0,
   391  			inputFormatter: []
   392  		}), 
   393  		new web3._extend.Method({
   394  			name: 'nodeExists',
   395  			call: 'permission_nodeExists',
   396  			params: 1,
   397  			inputFormatter: [null]
   398          }) 
   399  	],
   400  	properties:
   401      [
   402  		  new web3._extend.Property({
   403  				   name: 'retreive',
   404  				   getter: 'permission_retreive'
   405  		  }), 
   406      ]
   407  });`
   408  
   409  const ChequebookJs = `
   410  web3._extend({
   411  	property: 'chequebook',
   412  	methods: [
   413  		new web3._extend.Method({
   414  			name: 'deposit',
   415  			call: 'chequebook_deposit',
   416  			params: 1,
   417  			inputFormatter: [null]
   418  		}),
   419  		new web3._extend.Property({
   420  			name: 'balance',
   421  			getter: 'chequebook_balance',
   422  			outputFormatter: web3._extend.utils.toDecimal
   423  		}),
   424  		new web3._extend.Method({
   425  			name: 'cash',
   426  			call: 'chequebook_cash',
   427  			params: 1,
   428  			inputFormatter: [null]
   429  		}),
   430  		new web3._extend.Method({
   431  			name: 'issue',
   432  			call: 'chequebook_issue',
   433  			params: 2,
   434  			inputFormatter: [null, null]
   435  		}),
   436  	]
   437  });
   438  `
   439  
   440  const CliqueJs = `
   441  web3._extend({
   442  	property: 'clique',
   443  	methods: [
   444  		new web3._extend.Method({
   445  			name: 'getSnapshot',
   446  			call: 'clique_getSnapshot',
   447  			params: 1,
   448  			inputFormatter: [web3._extend.utils.fromDecimal]
   449  		}),
   450  		new web3._extend.Method({
   451  			name: 'getSnapshotAtHash',
   452  			call: 'clique_getSnapshotAtHash',
   453  			params: 1
   454  		}),
   455  		new web3._extend.Method({
   456  			name: 'getSigners',
   457  			call: 'clique_getSigners',
   458  			params: 1,
   459  			inputFormatter: [web3._extend.utils.fromDecimal]
   460  		}),
   461  		new web3._extend.Method({
   462  			name: 'getSignersAtHash',
   463  			call: 'clique_getSignersAtHash',
   464  			params: 1
   465  		}),
   466  		new web3._extend.Method({
   467  			name: 'propose',
   468  			call: 'clique_propose',
   469  			params: 2
   470  		}),
   471  		new web3._extend.Method({
   472  			name: 'discard',
   473  			call: 'clique_discard',
   474  			params: 1
   475  		}),
   476  		new web3._extend.Method({
   477  			name: 'status',
   478  			call: 'clique_status',
   479  			params: 0
   480  		}),
   481  	],
   482  	properties: [
   483  		new web3._extend.Property({
   484  			name: 'proposals',
   485  			getter: 'clique_proposals'
   486  		}),
   487  	]
   488  });
   489  `
   490  
   491  const EthashJs = `
   492  web3._extend({
   493  	property: 'ethash',
   494  	methods: [
   495  		new web3._extend.Method({
   496  			name: 'getWork',
   497  			call: 'ethash_getWork',
   498  			params: 0
   499  		}),
   500  		new web3._extend.Method({
   501  			name: 'getHashrate',
   502  			call: 'ethash_getHashrate',
   503  			params: 0
   504  		}),
   505  		new web3._extend.Method({
   506  			name: 'submitWork',
   507  			call: 'ethash_submitWork',
   508  			params: 3,
   509  		}),
   510  		new web3._extend.Method({
   511  			name: 'submitHashRate',
   512  			call: 'ethash_submitHashRate',
   513  			params: 2,
   514  		}),
   515  	]
   516  });
   517  `
   518  
   519  const AdminJs = `
   520  web3._extend({
   521  	property: 'admin',
   522  	methods: [
   523  		//new web3._extend.Method({
   524  		//	name: 'addPeer',
   525  		//	call: 'admin_addPeer',
   526  		//	params: 1
   527  		//}),
   528  		//new web3._extend.Method({
   529  		//	name: 'removePeer',
   530  		//	call: 'admin_removePeer',
   531  		//	params: 1
   532  		//}),
   533  		new web3._extend.Method({
   534  			name: 'addTrustedPeer',
   535  			call: 'admin_addTrustedPeer',
   536  			params: 1
   537  		}),
   538  		new web3._extend.Method({
   539  			name: 'removeTrustedPeer',
   540  			call: 'admin_removeTrustedPeer',
   541  			params: 1
   542  		}),
   543  		new web3._extend.Method({
   544  			name: 'exportChain',
   545  			call: 'admin_exportChain',
   546  			params: 1,
   547  			inputFormatter: [null]
   548  		}),
   549  		new web3._extend.Method({
   550  			name: 'importChain',
   551  			call: 'admin_importChain',
   552  			params: 1
   553  		}),
   554  		new web3._extend.Method({
   555  			name: 'sleepBlocks',
   556  			call: 'admin_sleepBlocks',
   557  			params: 2
   558  		}),
   559  		new web3._extend.Method({
   560  			name: 'startRPC',
   561  			call: 'admin_startRPC',
   562  			params: 4,
   563  			inputFormatter: [null, null, null, null]
   564  		}),
   565  		new web3._extend.Method({
   566  			name: 'stopRPC',
   567  			call: 'admin_stopRPC'
   568  		}),
   569  		new web3._extend.Method({
   570  			name: 'startWS',
   571  			call: 'admin_startWS',
   572  			params: 4,
   573  			inputFormatter: [null, null, null, null]
   574  		}),
   575  		new web3._extend.Method({
   576  			name: 'stopWS',
   577  			call: 'admin_stopWS'
   578  		}),
   579  	],
   580  	properties: [
   581  		new web3._extend.Property({
   582  			name: 'nodeInfo',
   583  			getter: 'admin_nodeInfo'
   584  		}),
   585  		new web3._extend.Property({
   586  			name: 'peers',
   587  			getter: 'admin_peers'
   588  		}),
   589  		new web3._extend.Property({
   590  			name: 'datadir',
   591  			getter: 'admin_datadir'
   592  		}),
   593  	]
   594  });
   595  `
   596  
   597  const DebugJs = `
   598  web3._extend({
   599  	property: 'debug',
   600  	methods: [
   601  		new web3._extend.Method({
   602  			name: 'accountRange',
   603  			call: 'debug_accountRange',
   604  			params: 2
   605  		}),
   606  		new web3._extend.Method({
   607  			name: 'printBlock',
   608  			call: 'debug_printBlock',
   609  			params: 1
   610  		}),
   611  		new web3._extend.Method({
   612  			name: 'getBlockRlp',
   613  			call: 'debug_getBlockRlp',
   614  			params: 1
   615  		}),
   616  		new web3._extend.Method({
   617  			name: 'testSignCliqueBlock',
   618  			call: 'debug_testSignCliqueBlock',
   619  			params: 2,
   620  			inputFormatters: [web3._extend.formatters.inputAddressFormatter, null],
   621  		}),
   622  		new web3._extend.Method({
   623  			name: 'setHead',
   624  			call: 'debug_setHead',
   625  			params: 1
   626  		}),
   627  		new web3._extend.Method({
   628  			name: 'seedHash',
   629  			call: 'debug_seedHash',
   630  			params: 1
   631  		}),
   632  		new web3._extend.Method({
   633  			name: 'dumpBlock',
   634  			call: 'debug_dumpBlock',
   635  			params: 1
   636  		}),
   637  		new web3._extend.Method({
   638  			name: 'chaindbProperty',
   639  			call: 'debug_chaindbProperty',
   640  			params: 1,
   641  			outputFormatter: console.log
   642  		}),
   643  		new web3._extend.Method({
   644  			name: 'chaindbCompact',
   645  			call: 'debug_chaindbCompact',
   646  		}),
   647  		new web3._extend.Method({
   648  			name: 'verbosity',
   649  			call: 'debug_verbosity',
   650  			params: 1
   651  		}),
   652  		new web3._extend.Method({
   653  			name: 'vmodule',
   654  			call: 'debug_vmodule',
   655  			params: 1
   656  		}),
   657  		new web3._extend.Method({
   658  			name: 'backtraceAt',
   659  			call: 'debug_backtraceAt',
   660  			params: 1,
   661  		}),
   662  		new web3._extend.Method({
   663  			name: 'stacks',
   664  			call: 'debug_stacks',
   665  			params: 0,
   666  			outputFormatter: console.log
   667  		}),
   668  		new web3._extend.Method({
   669  			name: 'freeOSMemory',
   670  			call: 'debug_freeOSMemory',
   671  			params: 0,
   672  		}),
   673  		new web3._extend.Method({
   674  			name: 'setGCPercent',
   675  			call: 'debug_setGCPercent',
   676  			params: 1,
   677  		}),
   678  		new web3._extend.Method({
   679  			name: 'memStats',
   680  			call: 'debug_memStats',
   681  			params: 0,
   682  		}),
   683  		new web3._extend.Method({
   684  			name: 'gcStats',
   685  			call: 'debug_gcStats',
   686  			params: 0,
   687  		}),
   688  		new web3._extend.Method({
   689  			name: 'cpuProfile',
   690  			call: 'debug_cpuProfile',
   691  			params: 2
   692  		}),
   693  		new web3._extend.Method({
   694  			name: 'startCPUProfile',
   695  			call: 'debug_startCPUProfile',
   696  			params: 1
   697  		}),
   698  		new web3._extend.Method({
   699  			name: 'stopCPUProfile',
   700  			call: 'debug_stopCPUProfile',
   701  			params: 0
   702  		}),
   703  		new web3._extend.Method({
   704  			name: 'goTrace',
   705  			call: 'debug_goTrace',
   706  			params: 2
   707  		}),
   708  		new web3._extend.Method({
   709  			name: 'startGoTrace',
   710  			call: 'debug_startGoTrace',
   711  			params: 1
   712  		}),
   713  		new web3._extend.Method({
   714  			name: 'stopGoTrace',
   715  			call: 'debug_stopGoTrace',
   716  			params: 0
   717  		}),
   718  		new web3._extend.Method({
   719  			name: 'blockProfile',
   720  			call: 'debug_blockProfile',
   721  			params: 2
   722  		}),
   723  		new web3._extend.Method({
   724  			name: 'setBlockProfileRate',
   725  			call: 'debug_setBlockProfileRate',
   726  			params: 1
   727  		}),
   728  		new web3._extend.Method({
   729  			name: 'writeBlockProfile',
   730  			call: 'debug_writeBlockProfile',
   731  			params: 1
   732  		}),
   733  		new web3._extend.Method({
   734  			name: 'mutexProfile',
   735  			call: 'debug_mutexProfile',
   736  			params: 2
   737  		}),
   738  		new web3._extend.Method({
   739  			name: 'setMutexProfileFraction',
   740  			call: 'debug_setMutexProfileFraction',
   741  			params: 1
   742  		}),
   743  		new web3._extend.Method({
   744  			name: 'writeMutexProfile',
   745  			call: 'debug_writeMutexProfile',
   746  			params: 1
   747  		}),
   748  		new web3._extend.Method({
   749  			name: 'writeMemProfile',
   750  			call: 'debug_writeMemProfile',
   751  			params: 1
   752  		}),
   753  		new web3._extend.Method({
   754  			name: 'traceBlock',
   755  			call: 'debug_traceBlock',
   756  			params: 2,
   757  			inputFormatter: [null, null]
   758  		}),
   759  		new web3._extend.Method({
   760  			name: 'traceBlockFromFile',
   761  			call: 'debug_traceBlockFromFile',
   762  			params: 2,
   763  			inputFormatter: [null, null]
   764  		}),
   765  		new web3._extend.Method({
   766  			name: 'traceBadBlock',
   767  			call: 'debug_traceBadBlock',
   768  			params: 1,
   769  			inputFormatter: [null]
   770  		}),
   771  		new web3._extend.Method({
   772  			name: 'standardTraceBadBlockToFile',
   773  			call: 'debug_standardTraceBadBlockToFile',
   774  			params: 2,
   775  			inputFormatter: [null, null]
   776  		}),
   777  		new web3._extend.Method({
   778  			name: 'standardTraceBlockToFile',
   779  			call: 'debug_standardTraceBlockToFile',
   780  			params: 2,
   781  			inputFormatter: [null, null]
   782  		}),
   783  		new web3._extend.Method({
   784  			name: 'traceBlockByNumber',
   785  			call: 'debug_traceBlockByNumber',
   786  			params: 2,
   787  			inputFormatter: [null, null]
   788  		}),
   789  		new web3._extend.Method({
   790  			name: 'traceBlockByHash',
   791  			call: 'debug_traceBlockByHash',
   792  			params: 2,
   793  			inputFormatter: [null, null]
   794  		}),
   795  		new web3._extend.Method({
   796  			name: 'traceTransaction',
   797  			call: 'debug_traceTransaction',
   798  			params: 2,
   799  			inputFormatter: [null, null]
   800  		}),
   801  		new web3._extend.Method({
   802  			name: 'preimage',
   803  			call: 'debug_preimage',
   804  			params: 1,
   805  			inputFormatter: [null]
   806  		}),
   807  		new web3._extend.Method({
   808  			name: 'getBadBlocks',
   809  			call: 'debug_getBadBlocks',
   810  			params: 0,
   811  		}),
   812  		new web3._extend.Method({
   813  			name: 'storageRangeAt',
   814  			call: 'debug_storageRangeAt',
   815  			params: 5,
   816  		}),
   817  		new web3._extend.Method({
   818  			name: 'getModifiedAccountsByNumber',
   819  			call: 'debug_getModifiedAccountsByNumber',
   820  			params: 2,
   821  			inputFormatter: [null, null],
   822  		}),
   823  		new web3._extend.Method({
   824  			name: 'getModifiedAccountsByHash',
   825  			call: 'debug_getModifiedAccountsByHash',
   826  			params: 2,
   827  			inputFormatter:[null, null],
   828  		}),
   829  		new web3._extend.Method({
   830  			name: 'freezeClient',
   831  			call: 'debug_freezeClient',
   832  			params: 1,
   833  		}),
   834  	],
   835  	properties: []
   836  });
   837  `
   838  
   839  const EthJs = `
   840  web3._extend({
   841  	property: 'eth',
   842  	methods: [
   843  		new web3._extend.Method({
   844  			name: 'chainId',
   845  			call: 'eth_chainId',
   846  			params: 0
   847  		}),
   848  		new web3._extend.Method({
   849  			name: 'sign',
   850  			call: 'eth_sign',
   851  			params: 2,
   852  			inputFormatter: [web3._extend.formatters.inputAddressFormatter, null]
   853  		}),
   854  		new web3._extend.Method({
   855  			name: 'resend',
   856  			call: 'eth_resend',
   857  			params: 3,
   858  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter, web3._extend.utils.fromDecimal, web3._extend.utils.fromDecimal]
   859  		}),
   860  		new web3._extend.Method({
   861  			name: 'signTransaction',
   862  			call: 'eth_signTransaction',
   863  			params: 1,
   864  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter]
   865  		}),
   866  		new web3._extend.Method({
   867  			name: 'submitTransaction',
   868  			call: 'eth_submitTransaction',
   869  			params: 1,
   870  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter]
   871  		}),
   872  		new web3._extend.Method({
   873  			name: 'fillTransaction',
   874  			call: 'eth_fillTransaction',
   875  			params: 1,
   876  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter]
   877  		}),
   878  		new web3._extend.Method({
   879  			name: 'getHeaderByNumber',
   880  			call: 'eth_getHeaderByNumber',
   881  			params: 1
   882  		}),
   883  		new web3._extend.Method({
   884  			name: 'getHeaderByHash',
   885  			call: 'eth_getHeaderByHash',
   886  			params: 1
   887  		}),
   888  		new web3._extend.Method({
   889  			name: 'getBlockByNumber',
   890  			call: 'eth_getBlockByNumber',
   891  			params: 2
   892  		}),
   893  		new web3._extend.Method({
   894  			name: 'getBlockByHash',
   895  			call: 'eth_getBlockByHash',
   896  			params: 2
   897  		}),
   898  		new web3._extend.Method({
   899  			name: 'getLatestBlockNumber',
   900  			call: 'eth_getLatestBlockNumber',
   901  			params: 0
   902  		}),
   903  		new web3._extend.Method({
   904  			name: 'getRawTransaction',
   905  			call: 'eth_getRawTransactionByHash',
   906  			params: 1
   907  		}),
   908  		new web3._extend.Method({
   909  			name: 'getRawTransactionFromBlock',
   910  			call: function(args) {
   911  				return (web3._extend.utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getRawTransactionByBlockHashAndIndex' : 'eth_getRawTransactionByBlockNumberAndIndex';
   912  			},
   913  			params: 2,
   914  			inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, web3._extend.utils.toHex]
   915  		}),
   916  		new web3._extend.Method({
   917  			name: 'getProof',
   918  			call: 'eth_getProof',
   919  			params: 3,
   920  			inputFormatter: [web3._extend.formatters.inputAddressFormatter, null, web3._extend.formatters.inputBlockNumberFormatter]
   921  		}),
   922  	],
   923  	properties: [
   924  		new web3._extend.Property({
   925  			name: 'pendingTransactions',
   926  			getter: 'eth_pendingTransactions',
   927  			outputFormatter: function(txs) {
   928  				var formatted = [];
   929  				for (var i = 0; i < txs.length; i++) {
   930  					formatted.push(web3._extend.formatters.outputTransactionFormatter(txs[i]));
   931  					formatted[i].blockHash = null;
   932  				}
   933  				return formatted;
   934  			}
   935  		}),
   936  	]
   937  });
   938  `
   939  
   940  const MinerJs = `
   941  web3._extend({
   942  	property: 'miner',
   943  	methods: [
   944  		new web3._extend.Method({
   945  			name: 'start',
   946  			call: 'miner_start',
   947  			params: 1,
   948  			inputFormatter: [null]
   949  		}),
   950  		new web3._extend.Method({
   951  			name: 'stop',
   952  			call: 'miner_stop'
   953  		}),
   954  		new web3._extend.Method({
   955  			name: 'setEtherbase',
   956  			call: 'miner_setEtherbase',
   957  			params: 1,
   958  			inputFormatter: [web3._extend.formatters.inputAddressFormatter]
   959  		}),
   960  		new web3._extend.Method({
   961  			name: 'setExtra',
   962  			call: 'miner_setExtra',
   963  			params: 1
   964  		}),
   965  		new web3._extend.Method({
   966  			name: 'setGasPrice',
   967  			call: 'miner_setGasPrice',
   968  			params: 1,
   969  			inputFormatter: [web3._extend.utils.fromDecimal]
   970  		}),
   971  		new web3._extend.Method({
   972  			name: 'setRecommitInterval',
   973  			call: 'miner_setRecommitInterval',
   974  			params: 1,
   975  		}),
   976  		new web3._extend.Method({
   977  			name: 'getHashrate',
   978  			call: 'miner_getHashrate'
   979  		}),
   980  	],
   981  	properties: []
   982  });
   983  `
   984  
   985  const NetJs = `
   986  web3._extend({
   987  	property: 'net',
   988  	methods: [],
   989  	properties: [
   990  		new web3._extend.Property({
   991  			name: 'version',
   992  			getter: 'net_version'
   993  		}),
   994  	]
   995  });
   996  `
   997  
   998  const PersonalJs = `
   999  web3._extend({
  1000  	property: 'personal',
  1001  	methods: [
  1002  		new web3._extend.Method({
  1003  			name: 'importRawKey',
  1004  			call: 'personal_importRawKey',
  1005  			params: 2
  1006  		}),
  1007  		new web3._extend.Method({
  1008  			name: 'sign',
  1009  			call: 'personal_sign',
  1010  			params: 3,
  1011  			inputFormatter: [null, web3._extend.formatters.inputAddressFormatter, null]
  1012  		}),
  1013  		new web3._extend.Method({
  1014  			name: 'ecRecover',
  1015  			call: 'personal_ecRecover',
  1016  			params: 2
  1017  		}),
  1018  		new web3._extend.Method({
  1019  			name: 'openWallet',
  1020  			call: 'personal_openWallet',
  1021  			params: 2
  1022  		}),
  1023  		new web3._extend.Method({
  1024  			name: 'deriveAccount',
  1025  			call: 'personal_deriveAccount',
  1026  			params: 3
  1027  		}),
  1028  		new web3._extend.Method({
  1029  			name: 'signTransaction',
  1030  			call: 'personal_signTransaction',
  1031  			params: 2,
  1032  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter, null]
  1033  		}),
  1034  		new web3._extend.Method({
  1035  			name: 'unpair',
  1036  			call: 'personal_unpair',
  1037  			params: 2
  1038  		}),
  1039  		new web3._extend.Method({
  1040  			name: 'initializeWallet',
  1041  			call: 'personal_initializeWallet',
  1042  			params: 1
  1043  		})
  1044  	],
  1045  	properties: [
  1046  		new web3._extend.Property({
  1047  			name: 'listWallets',
  1048  			getter: 'personal_listWallets'
  1049  		}),
  1050  	]
  1051  })
  1052  `
  1053  
  1054  const RpcJs = `
  1055  web3._extend({
  1056  	property: 'rpc',
  1057  	methods: [],
  1058  	properties: [
  1059  		new web3._extend.Property({
  1060  			name: 'modules',
  1061  			getter: 'rpc_modules'
  1062  		}),
  1063  	]
  1064  });
  1065  `
  1066  
  1067  const ShhJs = `
  1068  web3._extend({
  1069  	property: 'shh',
  1070  	methods: [
  1071  	],
  1072  	properties:
  1073  	[
  1074  		new web3._extend.Property({
  1075  			name: 'version',
  1076  			getter: 'shh_version',
  1077  			outputFormatter: web3._extend.utils.toDecimal
  1078  		}),
  1079  		new web3._extend.Property({
  1080  			name: 'info',
  1081  			getter: 'shh_info'
  1082  		}),
  1083  	]
  1084  });
  1085  `
  1086  
  1087  const SwarmfsJs = `
  1088  web3._extend({
  1089  	property: 'swarmfs',
  1090  	methods:
  1091  	[
  1092  		new web3._extend.Method({
  1093  			name: 'mount',
  1094  			call: 'swarmfs_mount',
  1095  			params: 2
  1096  		}),
  1097  		new web3._extend.Method({
  1098  			name: 'unmount',
  1099  			call: 'swarmfs_unmount',
  1100  			params: 1
  1101  		}),
  1102  		new web3._extend.Method({
  1103  			name: 'listmounts',
  1104  			call: 'swarmfs_listmounts',
  1105  			params: 0
  1106  		}),
  1107  	]
  1108  });
  1109  `
  1110  
  1111  const TxpoolJs = `
  1112  web3._extend({
  1113  	property: 'txpool',
  1114  	methods: [],
  1115  	properties:
  1116  	[
  1117  		new web3._extend.Property({
  1118  			name: 'content',
  1119  			getter: 'txpool_content'
  1120  		}),
  1121  		new web3._extend.Property({
  1122  			name: 'inspect',
  1123  			getter: 'txpool_inspect'
  1124  		}),
  1125  		new web3._extend.Property({
  1126  			name: 'status',
  1127  			getter: 'txpool_status',
  1128  			outputFormatter: function(status) {
  1129  				status.pending = web3._extend.utils.toDecimal(status.pending);
  1130  				status.queued = web3._extend.utils.toDecimal(status.queued);
  1131  				return status;
  1132  			}
  1133  		}),
  1134  	]
  1135  });
  1136  `
  1137  
  1138  const AccountingJs = `
  1139  web3._extend({
  1140  	property: 'accounting',
  1141  	methods: [
  1142  		new web3._extend.Property({
  1143  			name: 'balance',
  1144  			getter: 'account_balance'
  1145  		}),
  1146  		new web3._extend.Property({
  1147  			name: 'balanceCredit',
  1148  			getter: 'account_balanceCredit'
  1149  		}),
  1150  		new web3._extend.Property({
  1151  			name: 'balanceDebit',
  1152  			getter: 'account_balanceDebit'
  1153  		}),
  1154  		new web3._extend.Property({
  1155  			name: 'bytesCredit',
  1156  			getter: 'account_bytesCredit'
  1157  		}),
  1158  		new web3._extend.Property({
  1159  			name: 'bytesDebit',
  1160  			getter: 'account_bytesDebit'
  1161  		}),
  1162  		new web3._extend.Property({
  1163  			name: 'msgCredit',
  1164  			getter: 'account_msgCredit'
  1165  		}),
  1166  		new web3._extend.Property({
  1167  			name: 'msgDebit',
  1168  			getter: 'account_msgDebit'
  1169  		}),
  1170  		new web3._extend.Property({
  1171  			name: 'peerDrops',
  1172  			getter: 'account_peerDrops'
  1173  		}),
  1174  		new web3._extend.Property({
  1175  			name: 'selfDrops',
  1176  			getter: 'account_selfDrops'
  1177  		}),
  1178  	]
  1179  });
  1180  `
  1181  
  1182  const LESJs = `
  1183  web3._extend({
  1184  	property: 'les',
  1185  	methods:
  1186  	[
  1187  		new web3._extend.Method({
  1188  			name: 'getCheckpoint',
  1189  			call: 'les_getCheckpoint',
  1190  			params: 1
  1191  		}),
  1192  		new web3._extend.Method({
  1193  			name: 'clientInfo',
  1194  			call: 'les_clientInfo',
  1195  			params: 1
  1196  		}),
  1197  		new web3._extend.Method({
  1198  			name: 'priorityClientInfo',
  1199  			call: 'les_priorityClientInfo',
  1200  			params: 3
  1201  		}),
  1202  		new web3._extend.Method({
  1203  			name: 'setClientParams',
  1204  			call: 'les_setClientParams',
  1205  			params: 2
  1206  		}),
  1207  		new web3._extend.Method({
  1208  			name: 'setDefaultParams',
  1209  			call: 'les_setDefaultParams',
  1210  			params: 1
  1211  		}),
  1212  		new web3._extend.Method({
  1213  			name: 'addBalance',
  1214  			call: 'les_addBalance',
  1215  			params: 3
  1216  		}),
  1217  	],
  1218  	properties:
  1219  	[
  1220  		new web3._extend.Property({
  1221  			name: 'latestCheckpoint',
  1222  			getter: 'les_latestCheckpoint'
  1223  		}),
  1224  		new web3._extend.Property({
  1225  			name: 'checkpointContractAddress',
  1226  			getter: 'les_getCheckpointContractAddress'
  1227  		}),
  1228  		new web3._extend.Property({
  1229  			name: 'serverInfo',
  1230  			getter: 'les_serverInfo'
  1231  		}),
  1232  	]
  1233  });
  1234  `