github.com/codingfuture/orig-energi3@v0.8.4/internal/web3ext/web3ext.go (about)

     1  // Copyright 2018 The Energi Core Authors
     2  // Copyright 2015 The go-ethereum Authors
     3  // This file is part of the Energi Core library.
     4  //
     5  // The Energi Core library is free software: you can redistribute it and/or modify
     6  // it under the terms of the GNU Lesser General Public License as published by
     7  // the Free Software Foundation, either version 3 of the License, or
     8  // (at your option) any later version.
     9  //
    10  // The Energi Core library is distributed in the hope that it will be useful,
    11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    13  // GNU Lesser General Public License for more details.
    14  //
    15  // You should have received a copy of the GNU Lesser General Public License
    16  // along with the Energi Core library. If not, see <http://www.gnu.org/licenses/>.
    17  
    18  // package web3ext contains geth specific web3.js extensions.
    19  package web3ext
    20  
    21  var Modules = map[string]string{
    22  	"accounting": Accounting_JS,
    23  	"admin":      Admin_JS,
    24  	//"chequebook": Chequebook_JS,
    25  	//"clique":     Clique_JS,
    26  	"energi": Energi_JS,
    27  	//"ethash":     Ethash_JS,
    28  	"debug":      Debug_JS,
    29  	"eth":        Eth_JS,
    30  	"masternode": Masternode_JS,
    31  	"miner":      Miner_JS,
    32  	"net":        Net_JS,
    33  	"personal":   Personal_JS,
    34  	"rpc":        RPC_JS,
    35  	"shh":        Shh_JS,
    36  	"swarmfs":    SWARMFS_JS,
    37  	"txpool":     TxPool_JS,
    38  }
    39  
    40  const Chequebook_JS = `
    41  web3._extend({
    42  	property: 'chequebook',
    43  	methods: [
    44  		new web3._extend.Method({
    45  			name: 'deposit',
    46  			call: 'chequebook_deposit',
    47  			params: 1,
    48  			inputFormatter: [null]
    49  		}),
    50  		new web3._extend.Property({
    51  			name: 'balance',
    52  			getter: 'chequebook_balance',
    53  			outputFormatter: web3._extend.utils.toDecimal
    54  		}),
    55  		new web3._extend.Method({
    56  			name: 'cash',
    57  			call: 'chequebook_cash',
    58  			params: 1,
    59  			inputFormatter: [null]
    60  		}),
    61  		new web3._extend.Method({
    62  			name: 'issue',
    63  			call: 'chequebook_issue',
    64  			params: 2,
    65  			inputFormatter: [null, null]
    66  		}),
    67  	]
    68  });
    69  `
    70  
    71  const Clique_JS = `
    72  web3._extend({
    73  	property: 'clique',
    74  	methods: [
    75  		new web3._extend.Method({
    76  			name: 'getSnapshot',
    77  			call: 'clique_getSnapshot',
    78  			params: 1,
    79  			inputFormatter: [null]
    80  		}),
    81  		new web3._extend.Method({
    82  			name: 'getSnapshotAtHash',
    83  			call: 'clique_getSnapshotAtHash',
    84  			params: 1
    85  		}),
    86  		new web3._extend.Method({
    87  			name: 'getSigners',
    88  			call: 'clique_getSigners',
    89  			params: 1,
    90  			inputFormatter: [null]
    91  		}),
    92  		new web3._extend.Method({
    93  			name: 'getSignersAtHash',
    94  			call: 'clique_getSignersAtHash',
    95  			params: 1
    96  		}),
    97  		new web3._extend.Method({
    98  			name: 'propose',
    99  			call: 'clique_propose',
   100  			params: 2
   101  		}),
   102  		new web3._extend.Method({
   103  			name: 'discard',
   104  			call: 'clique_discard',
   105  			params: 1
   106  		}),
   107  	],
   108  	properties: [
   109  		new web3._extend.Property({
   110  			name: 'proposals',
   111  			getter: 'clique_proposals'
   112  		}),
   113  	]
   114  });
   115  `
   116  
   117  const Energi_JS = `
   118  web3._extend.formatters.outputProposalFormatter = function(item){
   119  	var toDecimal = web3._extend.utils.toDecimal;
   120  	return {
   121  		proposal:     item.Proposal,
   122  		proposer:     item.Proposer,
   123  		createdBlock: item.CreatedBlock,
   124  		deadline:     item.Deadline,
   125  		quorumWeight: toDecimal(item.QuorumWeight),
   126  		totalWeight:  toDecimal(item.TotalWeight),
   127  		rejectWeight: toDecimal(item.RejectWeight),
   128  		acceptWeight: toDecimal(item.AcceptWeight),
   129  		finished:     item.Finished,
   130  		accepted:     item.Accepted,
   131  		balance:      toDecimal(item.Balance),
   132  	};
   133  };
   134  
   135  web3._extend.formatters.coinSearchFormatter = function(list){
   136  	var toDecimal = web3._extend.utils.toDecimal;
   137  	for (var i = 0; i < list.length; ++i) {
   138  		var item = list[i];
   139  		item.Amount = toDecimal(item.Amount);
   140  	}
   141  	return list;
   142  };
   143  
   144  web3._extend({
   145  	property: 'energi',
   146  	methods: [
   147  		// Migration
   148  		new web3._extend.Method({
   149  			name: 'listGen2Coins',
   150  			call: 'energi_listGen2Coins',
   151  			params: 0,
   152  			outputFormatter: web3._extend.formatters.coinSearchFormatter,
   153  		}),
   154  		new web3._extend.Method({
   155  			name: 'searchGen2Coins',
   156  			call: 'energi_searchGen2Coins',
   157  			params: 2,
   158  			outputFormatter: web3._extend.formatters.coinSearchFormatter,
   159  		}),
   160  		new web3._extend.Method({
   161  			name: 'searchRawGen2Coins',
   162  			call: 'energi_searchRawGen2Coins',
   163  			params: 2,
   164  			outputFormatter: web3._extend.formatters.coinSearchFormatter,
   165  		}),
   166  		new web3._extend.Method({
   167  			name: 'claimGen2CoinsDirect',
   168  			call: 'energi_claimGen2CoinsDirect',
   169  			params: 3,
   170  			outputFormatter: console.log
   171  		}),
   172  		new web3._extend.Method({
   173  			name: 'claimGen2CoinsCombined',
   174  			call: 'energi_claimGen2CoinsCombined',
   175  			params: 3
   176  		}),
   177  		new web3._extend.Method({
   178  			name: 'claimGen2CoinsImport',
   179  			call: 'energi_claimGen2CoinsImport',
   180  			params: 2
   181  		}),
   182  
   183  		// Blacklist
   184  		new web3._extend.Method({
   185  			name: 'blacklistInfo',
   186  			call: 'energi_blacklistInfo',
   187  			params: 0
   188  			outputFormatter: function(list) {
   189  				var res = [];
   190  				var proposalf = web3._extend.formatters.outputProposalFormatter;
   191  				for (var i = 0; i < list.length; ++i) {
   192  					var item = list[i];
   193  					res.push({
   194  						target:  item.Target,
   195  						enforce: proposalf(item.Enforce),
   196  						revoke:  item.Revoke && proposalf(item.Revoke),
   197  						drain:   item.Drain && proposalf(item.Drain),
   198  						blocked: item.Blocked,
   199  					});
   200  				}
   201  				return res;
   202  			},
   203  		}),
   204  		new web3._extend.Method({
   205  			name: 'blacklistEnforce',
   206  			call: 'energi_blacklistEnforce',
   207  			params: 4
   208  			inputFormatter: [
   209  				web3._extend.formatters.inputAddressFormatter,
   210  				web3._extend.utils.fromDecimal,
   211  				web3._extend.formatters.inputAddressFormatter,
   212  				null,
   213  			],
   214  			outputFormatter: console.log,
   215  		}),
   216  		new web3._extend.Method({
   217  			name: 'blacklistRevoke',
   218  			call: 'energi_blacklistRevoke',
   219  			params: 4
   220  			inputFormatter: [
   221  				web3._extend.formatters.inputAddressFormatter,
   222  				web3._extend.utils.fromDecimal,
   223  				web3._extend.formatters.inputAddressFormatter,
   224  				null,
   225  			],
   226  			outputFormatter: console.log,
   227  		}),
   228  		new web3._extend.Method({
   229  			name: 'blacklistDrain',
   230  			call: 'energi_blacklistDrain',
   231  			params: 4
   232  			inputFormatter: [
   233  				web3._extend.formatters.inputAddressFormatter,
   234  				web3._extend.utils.fromDecimal,
   235  				web3._extend.formatters.inputAddressFormatter,
   236  				null,
   237  			],
   238  			outputFormatter: console.log,
   239  		}),
   240  		new web3._extend.Method({
   241  			name: 'blacklistCollect',
   242  			call: 'energi_blacklistCollect',
   243  			params: 3
   244  			inputFormatter: [
   245  				web3._extend.formatters.inputAddressFormatter,
   246  				web3._extend.formatters.inputAddressFormatter,
   247  				null,
   248  			],
   249  			outputFormatter: console.log,
   250  		}),
   251  
   252  		// Governance
   253  		new web3._extend.Method({
   254  			name: 'voteAccept',
   255  			call: 'energi_voteAccept',
   256  			params: 3
   257  			inputFormatter: [
   258  				web3._extend.formatters.inputAddressFormatter,
   259  				web3._extend.formatters.inputAddressFormatter,
   260  				null,
   261  			],
   262  			outputFormatter: console.log,
   263  		}),
   264  		new web3._extend.Method({
   265  			name: 'voteReject',
   266  			call: 'energi_voteReject',
   267  			params: 3
   268  			inputFormatter: [
   269  				web3._extend.formatters.inputAddressFormatter,
   270  				web3._extend.formatters.inputAddressFormatter,
   271  				null,
   272  			],
   273  			outputFormatter: console.log,
   274  		}),
   275  		new web3._extend.Method({
   276  			name: 'withdrawFee',
   277  			call: 'energi_withdrawFee',
   278  			params: 3
   279  			inputFormatter: [
   280  				web3._extend.formatters.inputAddressFormatter,
   281  				web3._extend.formatters.inputAddressFormatter,
   282  				null,
   283  			],
   284  			outputFormatter: console.log,
   285  		}),
   286  
   287  		// Governance upgrades
   288  		new web3._extend.Method({
   289  			name: 'upgradeInfo',
   290  			call: 'energi_upgradeInfo',
   291  			params: 0
   292  			outputFormatter: function(status) {
   293  				var res = {};
   294  				var proposalf = web3._extend.formatters.outputProposalFormatter;
   295  				var keys = Object.keys(status);
   296  				for (var i = 0; i < keys.length; ++i) {
   297  					var k = keys[i];
   298  					var items = status[k];
   299  					var res_items = res[k] = [];
   300  
   301  					for (var j = 0; j < items.length; ++j) {
   302  						var item = items[j];
   303  						var res_item = proposalf(item);
   304  						res_item.impl = item.Impl;
   305  						res_item.proxy = item.Proxy;
   306  						res_items.push(res_item);
   307  					}
   308  				}
   309  				return res;
   310  			},
   311  		}),
   312  		new web3._extend.Method({
   313  			name: 'upgradePropose',
   314  			call: 'energi_upgradePropose',
   315  			params: 6
   316  			inputFormatter: [
   317  				web3._extend.formatters.inputAddressFormatter,
   318  				web3._extend.formatters.inputAddressFormatter,
   319  				null,
   320  				web3._extend.utils.fromDecimal,
   321  				web3._extend.formatters.inputAddressFormatter,
   322  				null,
   323  			],
   324  			outputFormatter: console.log,
   325  		}),
   326  		new web3._extend.Method({
   327  			name: 'upgradePerform',
   328  			call: 'energi_upgradePerform',
   329  			params: 4
   330  			inputFormatter: [
   331  				web3._extend.formatters.inputAddressFormatter,
   332  				web3._extend.formatters.inputAddressFormatter,
   333  				web3._extend.formatters.inputAddressFormatter,
   334  				null,
   335  			],
   336  			outputFormatter: console.log,
   337  		}),
   338  		new web3._extend.Method({
   339  			name: 'upgradeCollect',
   340  			call: 'energi_upgradeCollect',
   341  			params: 4
   342  			inputFormatter: [
   343  				web3._extend.formatters.inputAddressFormatter,
   344  				web3._extend.formatters.inputAddressFormatter,
   345  				web3._extend.formatters.inputAddressFormatter,
   346  				null,
   347  			],
   348  			outputFormatter: console.log,
   349  		}),
   350  
   351  		// Governance budget
   352  		new web3._extend.Method({
   353  			name: 'budgetInfo',
   354  			call: 'energi_budgetInfo',
   355  			params: 0
   356  			outputFormatter: function(status) {
   357  				var proposals = [];
   358  				var toDecimal = web3._extend.utils.toDecimal;
   359  				var res = {
   360  					balance: toDecimal(status.Balance),
   361  					proposals: proposals,
   362  				};
   363  				var proposalf = web3._extend.formatters.outputProposalFormatter;
   364  				var raw_proposals = status.Proposals;
   365  				for (var i = 0; i < raw_proposals.length; ++i) {
   366  					var raw_item = raw_proposals[i];
   367  					var item = proposalf(raw_item);
   368  					item.proposedAmount = toDecimal(raw_item.ProposedAmount);
   369  					item.paidAmount = toDecimal(raw_item.PaidAmount);
   370  					item.refUUID = raw_item.RefUUID;
   371  					proposals.push(item);
   372  				}
   373  				return res;
   374  			},
   375  		}),
   376  		new web3._extend.Method({
   377  			name: 'budgetPropose',
   378  			call: 'energi_budgetPropose',
   379  			params: 6
   380  			inputFormatter: [
   381  				web3._extend.utils.fromDecimal,
   382  				null,
   383  				null,
   384  				web3._extend.utils.fromDecimal,
   385  				web3._extend.formatters.inputAddressFormatter,
   386  				null,
   387  			],
   388  			outputFormatter: console.log,
   389  		}),
   390  
   391  		// Checkpoints
   392  		new web3._extend.Method({
   393  			name: 'checkpointInfo',
   394  			call: 'energi_checkpointInfo',
   395  			params: 0
   396  			outputFormatter: function(status) {
   397  				var res = {
   398  					registry: [],
   399  					active: [],
   400  				};
   401  				var cpinfo = function(cp) {
   402  					return {
   403  						number: cp.Number,
   404  						hash: cp.Hash,
   405  						since: cp.Since,
   406  						sigCount: cp.SigCount,
   407  					};
   408  				};
   409  				var raw_registry = status.Registry;
   410  				for (var i = 0; i < raw_registry.length; ++i) {
   411  					var raw_item = raw_registry[i];
   412  					res.registry.push(cpinfo(raw_registry[i]));
   413  				}
   414  				var raw_active = status.Active;
   415  				for (var i = 0; i < raw_active.length; ++i) {
   416  					var raw_item = raw_active[i];
   417  					res.active.push(cpinfo(raw_active[i]));
   418  				}
   419  				return res;
   420  			},
   421  		}),
   422  		new web3._extend.Method({
   423  			name: 'checkpointPropose',
   424  			call: 'energi_checkpointPropose',
   425  			params: 3
   426  			inputFormatter: [
   427  				null,
   428  				null,
   429  				null,
   430  			],
   431  			outputFormatter: console.log,
   432  		}),
   433  	],
   434  	properties: [
   435  	]
   436  });
   437  `
   438  
   439  const Ethash_JS = `
   440  web3._extend({
   441  	property: 'ethash',
   442  	methods: [
   443  		new web3._extend.Method({
   444  			name: 'getWork',
   445  			call: 'ethash_getWork',
   446  			params: 0
   447  		}),
   448  		new web3._extend.Method({
   449  			name: 'getHashrate',
   450  			call: 'ethash_getHashrate',
   451  			params: 0
   452  		}),
   453  		new web3._extend.Method({
   454  			name: 'submitWork',
   455  			call: 'ethash_submitWork',
   456  			params: 3,
   457  		}),
   458  		new web3._extend.Method({
   459  			name: 'submitHashRate',
   460  			call: 'ethash_submitHashRate',
   461  			params: 2,
   462  		}),
   463  	]
   464  });
   465  `
   466  
   467  const Admin_JS = `
   468  web3._extend({
   469  	property: 'admin',
   470  	methods: [
   471  		new web3._extend.Method({
   472  			name: 'addPeer',
   473  			call: 'admin_addPeer',
   474  			params: 1
   475  		}),
   476  		new web3._extend.Method({
   477  			name: 'removePeer',
   478  			call: 'admin_removePeer',
   479  			params: 1
   480  		}),
   481  		new web3._extend.Method({
   482  			name: 'addTrustedPeer',
   483  			call: 'admin_addTrustedPeer',
   484  			params: 1
   485  		}),
   486  		new web3._extend.Method({
   487  			name: 'removeTrustedPeer',
   488  			call: 'admin_removeTrustedPeer',
   489  			params: 1
   490  		}),
   491  		new web3._extend.Method({
   492  			name: 'exportChain',
   493  			call: 'admin_exportChain',
   494  			params: 1,
   495  			inputFormatter: [null]
   496  		}),
   497  		new web3._extend.Method({
   498  			name: 'importChain',
   499  			call: 'admin_importChain',
   500  			params: 1
   501  		}),
   502  		new web3._extend.Method({
   503  			name: 'sleepBlocks',
   504  			call: 'admin_sleepBlocks',
   505  			params: 2
   506  		}),
   507  		new web3._extend.Method({
   508  			name: 'startRPC',
   509  			call: 'admin_startRPC',
   510  			params: 4,
   511  			inputFormatter: [null, null, null, null]
   512  		}),
   513  		new web3._extend.Method({
   514  			name: 'stopRPC',
   515  			call: 'admin_stopRPC'
   516  		}),
   517  		new web3._extend.Method({
   518  			name: 'startWS',
   519  			call: 'admin_startWS',
   520  			params: 4,
   521  			inputFormatter: [null, null, null, null]
   522  		}),
   523  		new web3._extend.Method({
   524  			name: 'stopWS',
   525  			call: 'admin_stopWS'
   526  		}),
   527  		new web3._extend.Method({
   528  			name: 'checkpointLocal',
   529  			call: 'admin_checkpointLocal',
   530  			params: 2
   531  			inputFormatter: [
   532  				null,
   533  				null,
   534  			],
   535  			outputFormatter: console.log,
   536  		}),
   537  	],
   538  	properties: [
   539  		new web3._extend.Property({
   540  			name: 'nodeInfo',
   541  			getter: 'admin_nodeInfo'
   542  		}),
   543  		new web3._extend.Property({
   544  			name: 'peers',
   545  			getter: 'admin_peers'
   546  		}),
   547  		new web3._extend.Property({
   548  			name: 'datadir',
   549  			getter: 'admin_datadir'
   550  		}),
   551  	]
   552  });
   553  `
   554  
   555  const Debug_JS = `
   556  web3._extend({
   557  	property: 'debug',
   558  	methods: [
   559  		new web3._extend.Method({
   560  			name: 'printBlock',
   561  			call: 'debug_printBlock',
   562  			params: 1
   563  		}),
   564  		new web3._extend.Method({
   565  			name: 'getBlockRlp',
   566  			call: 'debug_getBlockRlp',
   567  			params: 1
   568  		}),
   569  		new web3._extend.Method({
   570  			name: 'setHead',
   571  			call: 'debug_setHead',
   572  			params: 1
   573  		}),
   574  		new web3._extend.Method({
   575  			name: 'seedHash',
   576  			call: 'debug_seedHash',
   577  			params: 1
   578  		}),
   579  		new web3._extend.Method({
   580  			name: 'dumpBlock',
   581  			call: 'debug_dumpBlock',
   582  			params: 1
   583  		}),
   584  		new web3._extend.Method({
   585  			name: 'chaindbProperty',
   586  			call: 'debug_chaindbProperty',
   587  			params: 1,
   588  			outputFormatter: console.log
   589  		}),
   590  		new web3._extend.Method({
   591  			name: 'chaindbCompact',
   592  			call: 'debug_chaindbCompact',
   593  		}),
   594  		new web3._extend.Method({
   595  			name: 'metrics',
   596  			call: 'debug_metrics',
   597  			params: 1
   598  		}),
   599  		new web3._extend.Method({
   600  			name: 'verbosity',
   601  			call: 'debug_verbosity',
   602  			params: 1
   603  		}),
   604  		new web3._extend.Method({
   605  			name: 'vmodule',
   606  			call: 'debug_vmodule',
   607  			params: 1
   608  		}),
   609  		new web3._extend.Method({
   610  			name: 'backtraceAt',
   611  			call: 'debug_backtraceAt',
   612  			params: 1,
   613  		}),
   614  		new web3._extend.Method({
   615  			name: 'stacks',
   616  			call: 'debug_stacks',
   617  			params: 0,
   618  			outputFormatter: console.log
   619  		}),
   620  		new web3._extend.Method({
   621  			name: 'freeOSMemory',
   622  			call: 'debug_freeOSMemory',
   623  			params: 0,
   624  		}),
   625  		new web3._extend.Method({
   626  			name: 'setGCPercent',
   627  			call: 'debug_setGCPercent',
   628  			params: 1,
   629  		}),
   630  		new web3._extend.Method({
   631  			name: 'memStats',
   632  			call: 'debug_memStats',
   633  			params: 0,
   634  		}),
   635  		new web3._extend.Method({
   636  			name: 'gcStats',
   637  			call: 'debug_gcStats',
   638  			params: 0,
   639  		}),
   640  		new web3._extend.Method({
   641  			name: 'cpuProfile',
   642  			call: 'debug_cpuProfile',
   643  			params: 2
   644  		}),
   645  		new web3._extend.Method({
   646  			name: 'startCPUProfile',
   647  			call: 'debug_startCPUProfile',
   648  			params: 1
   649  		}),
   650  		new web3._extend.Method({
   651  			name: 'stopCPUProfile',
   652  			call: 'debug_stopCPUProfile',
   653  			params: 0
   654  		}),
   655  		new web3._extend.Method({
   656  			name: 'goTrace',
   657  			call: 'debug_goTrace',
   658  			params: 2
   659  		}),
   660  		new web3._extend.Method({
   661  			name: 'startGoTrace',
   662  			call: 'debug_startGoTrace',
   663  			params: 1
   664  		}),
   665  		new web3._extend.Method({
   666  			name: 'stopGoTrace',
   667  			call: 'debug_stopGoTrace',
   668  			params: 0
   669  		}),
   670  		new web3._extend.Method({
   671  			name: 'blockProfile',
   672  			call: 'debug_blockProfile',
   673  			params: 2
   674  		}),
   675  		new web3._extend.Method({
   676  			name: 'setBlockProfileRate',
   677  			call: 'debug_setBlockProfileRate',
   678  			params: 1
   679  		}),
   680  		new web3._extend.Method({
   681  			name: 'writeBlockProfile',
   682  			call: 'debug_writeBlockProfile',
   683  			params: 1
   684  		}),
   685  		new web3._extend.Method({
   686  			name: 'mutexProfile',
   687  			call: 'debug_mutexProfile',
   688  			params: 2
   689  		}),
   690  		new web3._extend.Method({
   691  			name: 'setMutexProfileFraction',
   692  			call: 'debug_setMutexProfileFraction',
   693  			params: 1
   694  		}),
   695  		new web3._extend.Method({
   696  			name: 'writeMutexProfile',
   697  			call: 'debug_writeMutexProfile',
   698  			params: 1
   699  		}),
   700  		new web3._extend.Method({
   701  			name: 'writeMemProfile',
   702  			call: 'debug_writeMemProfile',
   703  			params: 1
   704  		}),
   705  		new web3._extend.Method({
   706  			name: 'traceBlock',
   707  			call: 'debug_traceBlock',
   708  			params: 2,
   709  			inputFormatter: [null, null]
   710  		}),
   711  		new web3._extend.Method({
   712  			name: 'traceBlockFromFile',
   713  			call: 'debug_traceBlockFromFile',
   714  			params: 2,
   715  			inputFormatter: [null, null]
   716  		}),
   717  		new web3._extend.Method({
   718  			name: 'traceBadBlock',
   719  			call: 'debug_traceBadBlock',
   720  			params: 1,
   721  			inputFormatter: [null]
   722  		}),
   723  		new web3._extend.Method({
   724  			name: 'standardTraceBadBlockToFile',
   725  			call: 'debug_standardTraceBadBlockToFile',
   726  			params: 2,
   727  			inputFormatter: [null, null]
   728  		}),
   729  		new web3._extend.Method({
   730  			name: 'standardTraceBlockToFile',
   731  			call: 'debug_standardTraceBlockToFile',
   732  			params: 2,
   733  			inputFormatter: [null, null]
   734  		}),
   735  		new web3._extend.Method({
   736  			name: 'traceBlockByNumber',
   737  			call: 'debug_traceBlockByNumber',
   738  			params: 2,
   739  			inputFormatter: [null, null]
   740  		}),
   741  		new web3._extend.Method({
   742  			name: 'traceBlockByHash',
   743  			call: 'debug_traceBlockByHash',
   744  			params: 2,
   745  			inputFormatter: [null, null]
   746  		}),
   747  		new web3._extend.Method({
   748  			name: 'traceTransaction',
   749  			call: 'debug_traceTransaction',
   750  			params: 2,
   751  			inputFormatter: [null, null]
   752  		}),
   753  		new web3._extend.Method({
   754  			name: 'preimage',
   755  			call: 'debug_preimage',
   756  			params: 1,
   757  			inputFormatter: [null]
   758  		}),
   759  		new web3._extend.Method({
   760  			name: 'getBadBlocks',
   761  			call: 'debug_getBadBlocks',
   762  			params: 0,
   763  		}),
   764  		new web3._extend.Method({
   765  			name: 'storageRangeAt',
   766  			call: 'debug_storageRangeAt',
   767  			params: 5,
   768  		}),
   769  		new web3._extend.Method({
   770  			name: 'getModifiedAccountsByNumber',
   771  			call: 'debug_getModifiedAccountsByNumber',
   772  			params: 2,
   773  			inputFormatter: [null, null],
   774  		}),
   775  		new web3._extend.Method({
   776  			name: 'getModifiedAccountsByHash',
   777  			call: 'debug_getModifiedAccountsByHash',
   778  			params: 2,
   779  			inputFormatter:[null, null],
   780  		}),
   781  	],
   782  	properties: []
   783  });
   784  `
   785  
   786  const Eth_JS = `
   787  web3._extend({
   788  	property: 'eth',
   789  	methods: [
   790  		new web3._extend.Method({
   791  			name: 'chainId',
   792  			call: 'eth_chainId',
   793  			params: 0
   794  		}),
   795  		new web3._extend.Method({
   796  			name: 'sign',
   797  			call: 'eth_sign',
   798  			params: 2,
   799  			inputFormatter: [web3._extend.formatters.inputAddressFormatter, null]
   800  		}),
   801  		new web3._extend.Method({
   802  			name: 'resend',
   803  			call: 'eth_resend',
   804  			params: 3,
   805  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter, web3._extend.utils.fromDecimal, web3._extend.utils.fromDecimal]
   806  		}),
   807  		new web3._extend.Method({
   808  			name: 'signTransaction',
   809  			call: 'eth_signTransaction',
   810  			params: 1,
   811  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter]
   812  		}),
   813  		new web3._extend.Method({
   814  			name: 'submitTransaction',
   815  			call: 'eth_submitTransaction',
   816  			params: 1,
   817  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter]
   818  		}),
   819  		new web3._extend.Method({
   820  			name: 'getRawTransaction',
   821  			call: 'eth_getRawTransactionByHash',
   822  			params: 1
   823  		}),
   824  		new web3._extend.Method({
   825  			name: 'getRawTransactionFromBlock',
   826  			call: function(args) {
   827  				return (web3._extend.utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getRawTransactionByBlockHashAndIndex' : 'eth_getRawTransactionByBlockNumberAndIndex';
   828  			},
   829  			params: 2,
   830  			inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, web3._extend.utils.toHex]
   831  		}),
   832  		new web3._extend.Method({
   833  			name: 'getProof',
   834  			call: 'eth_getProof',
   835  			params: 3,
   836  			inputFormatter: [web3._extend.formatters.inputAddressFormatter, null, web3._extend.formatters.inputBlockNumberFormatter]
   837  		}),
   838  	],
   839  	properties: [
   840  		new web3._extend.Property({
   841  			name: 'pendingTransactions',
   842  			getter: 'eth_pendingTransactions',
   843  			outputFormatter: function(txs) {
   844  				var formatted = [];
   845  				for (var i = 0; i < txs.length; i++) {
   846  					formatted.push(web3._extend.formatters.outputTransactionFormatter(txs[i]));
   847  					formatted[i].blockHash = null;
   848  				}
   849  				return formatted;
   850  			}
   851  		}),
   852  	]
   853  });
   854  `
   855  
   856  const Masternode_JS = `
   857  web3._extend.formatters.outputMasternodeFormatter = function(item){
   858  	return {
   859  		masternode:     item.Masternode,
   860  		owner:          item.Owner,
   861  		enode:          item.Enode,
   862  		collateral:     web3._extend.utils.toDecimal(item.Collateral),
   863  		announcedBlock: item.AnnouncedBlock,
   864  		isActive:       item.IsActive,
   865  		isAlive:        item.IsAlive,
   866  		swFeatures:     item.SWFeatures,
   867  		swVersion:      item.SWVersion,
   868  	};
   869  };
   870  
   871  web3._extend({
   872  	property: 'masternode',
   873  	methods: [
   874  		new web3._extend.Method({
   875  			name: 'collateralBalance',
   876  			call: 'masternode_collateralBalance',
   877  			params: 1,
   878  			inputFormatter: [web3._extend.formatters.inputAddressFormatter],
   879  			outputFormatter: function(status) {
   880  				return {
   881  					balance: web3._extend.utils.toDecimal(status.Balance),
   882  					lastBlock: web3._extend.utils.toDecimal(status.LastBlock),
   883  				};
   884  			}
   885  		}),
   886  		new web3._extend.Method({
   887  			name: 'depositCollateral',
   888  			call: 'masternode_depositCollateral',
   889  			params: 3,
   890  			inputFormatter: [
   891  				web3._extend.formatters.inputAddressFormatter,
   892  				web3._extend.utils.fromDecimal,
   893  				null,
   894  			],
   895  			outputFormatter: console.log,
   896  		}),
   897  		new web3._extend.Method({
   898  			name: 'withdrawCollateral',
   899  			call: 'masternode_withdrawCollateral',
   900  			params: 3,
   901  			inputFormatter: [
   902  				web3._extend.formatters.inputAddressFormatter,
   903  				web3._extend.utils.fromDecimal,
   904  				null,
   905  			],
   906  			outputFormatter: console.log,
   907  		}),
   908  		new web3._extend.Method({
   909  			name: 'listMasternodes',
   910  			call: 'masternode_listMasternodes',
   911  			params: 0,
   912  			outputFormatter: function(list) {
   913  				var res = [];
   914  				for (var i = 0; i < list.length; ++i) {
   915  					res.push(web3._extend.formatters.outputMasternodeFormatter(list[i]));
   916  				}
   917  				return res;
   918  			},
   919  		}),
   920  		new web3._extend.Method({
   921  			name: 'masternodeInfo',
   922  			call: 'masternode_masternodeInfo',
   923  			params: 1,
   924  			inputFormatter: [web3._extend.formatters.inputAddressFormatter],
   925  			outputFormatter: function(status) {
   926  				return web3._extend.formatters.outputMasternodeFormatter(status);
   927  			}
   928  		}),
   929  		new web3._extend.Method({
   930  			name: 'stats',
   931  			call: 'masternode_stats',
   932  			params: 0,
   933  			outputFormatter: function(status) {
   934  				return {
   935  					active: status.Active,
   936  					total: status.Total,
   937  					activeCollateral: web3._extend.utils.toDecimal(status.ActiveCollateral),
   938  					totalCollateral: web3._extend.utils.toDecimal(status.TotalCollateral),
   939  					maxOfAllTimes: web3._extend.utils.toDecimal(status.MaxOfAllTimes),
   940  				};
   941  			}
   942  		}),
   943  		new web3._extend.Method({
   944  			name: 'announce',
   945  			call: 'masternode_announce',
   946  			params: 3,
   947  			inputFormatter: [web3._extend.formatters.inputAddressFormatter, null, null],
   948  		}),
   949  		new web3._extend.Method({
   950  			name: 'denounce',
   951  			call: 'masternode_denounce',
   952  			params: 2,
   953  			inputFormatter: [web3._extend.formatters.inputAddressFormatter, null],
   954  		}),
   955  	],
   956  	properties: []
   957  });
   958  `
   959  
   960  const Miner_JS = `
   961  web3._extend({
   962  	property: 'miner',
   963  	methods: [
   964  		new web3._extend.Method({
   965  			name: 'start',
   966  			call: 'miner_start',
   967  			params: 1,
   968  			inputFormatter: [null]
   969  		}),
   970  		new web3._extend.Method({
   971  			name: 'stop',
   972  			call: 'miner_stop'
   973  		}),
   974  		new web3._extend.Method({
   975  			name: 'setEtherbase',
   976  			call: 'miner_setEtherbase',
   977  			params: 1,
   978  			inputFormatter: [web3._extend.formatters.inputAddressFormatter]
   979  		}),
   980  		new web3._extend.Method({
   981  			name: 'setExtra',
   982  			call: 'miner_setExtra',
   983  			params: 1
   984  		}),
   985  		new web3._extend.Method({
   986  			name: 'setGasPrice',
   987  			call: 'miner_setGasPrice',
   988  			params: 1,
   989  			inputFormatter: [web3._extend.utils.fromDecimal]
   990  		}),
   991  		new web3._extend.Method({
   992  			name: 'setRecommitInterval',
   993  			call: 'miner_setRecommitInterval',
   994  			params: 1,
   995  		}),
   996  		new web3._extend.Method({
   997  			name: 'getHashrate',
   998  			call: 'miner_getHashrate'
   999  		}),
  1000  		new web3._extend.Method({
  1001  			name: 'addDPoS',
  1002  			call: 'miner_addDPoS',
  1003  			params: 2,
  1004  			inputFormatter: [
  1005  				web3._extend.formatters.inputAddressFormatter,
  1006  				web3._extend.formatters.inputAddressFormatter,
  1007  			]
  1008  		}),
  1009  		new web3._extend.Method({
  1010  			name: 'removeDPoS',
  1011  			call: 'miner_removeDPoS',
  1012  			params: 1,
  1013  			inputFormatter: [web3._extend.formatters.inputAddressFormatter]
  1014  		}),
  1015  		new web3._extend.Method({
  1016  			name: 'setMinerNonceCap',
  1017  			call: 'miner_setMinerNonceCap',
  1018  			params: 1,
  1019  			inputFormatter: [null],
  1020  			outputFormatter: console.log,
  1021  		}),
  1022  	],
  1023  	properties: []
  1024  });
  1025  `
  1026  
  1027  const Net_JS = `
  1028  web3._extend({
  1029  	property: 'net',
  1030  	methods: [],
  1031  	properties: [
  1032  		new web3._extend.Property({
  1033  			name: 'version',
  1034  			getter: 'net_version'
  1035  		}),
  1036  	]
  1037  });
  1038  `
  1039  
  1040  const Personal_JS = `
  1041  web3._extend({
  1042  	property: 'personal',
  1043  	methods: [
  1044  		new web3._extend.Method({
  1045  			name: 'importRawKey',
  1046  			call: 'personal_importRawKey',
  1047  			params: 2
  1048  		}),
  1049  		new web3._extend.Method({
  1050  			name: 'sign',
  1051  			call: 'personal_sign',
  1052  			params: 3,
  1053  			inputFormatter: [null, web3._extend.formatters.inputAddressFormatter, null]
  1054  		}),
  1055  		new web3._extend.Method({
  1056  			name: 'ecRecover',
  1057  			call: 'personal_ecRecover',
  1058  			params: 2
  1059  		}),
  1060  		new web3._extend.Method({
  1061  			name: 'openWallet',
  1062  			call: 'personal_openWallet',
  1063  			params: 2
  1064  		}),
  1065  		new web3._extend.Method({
  1066  			name: 'deriveAccount',
  1067  			call: 'personal_deriveAccount',
  1068  			params: 3
  1069  		}),
  1070  		new web3._extend.Method({
  1071  			name: 'signTransaction',
  1072  			call: 'personal_signTransaction',
  1073  			params: 2,
  1074  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter, null]
  1075  		}),
  1076  	],
  1077  	properties: [
  1078  		new web3._extend.Property({
  1079  			name: 'listWallets',
  1080  			getter: 'personal_listWallets'
  1081  		}),
  1082  	]
  1083  })
  1084  `
  1085  
  1086  const RPC_JS = `
  1087  web3._extend({
  1088  	property: 'rpc',
  1089  	methods: [],
  1090  	properties: [
  1091  		new web3._extend.Property({
  1092  			name: 'modules',
  1093  			getter: 'rpc_modules'
  1094  		}),
  1095  	]
  1096  });
  1097  `
  1098  
  1099  const Shh_JS = `
  1100  web3._extend({
  1101  	property: 'shh',
  1102  	methods: [
  1103  	],
  1104  	properties:
  1105  	[
  1106  		new web3._extend.Property({
  1107  			name: 'version',
  1108  			getter: 'shh_version',
  1109  			outputFormatter: web3._extend.utils.toDecimal
  1110  		}),
  1111  		new web3._extend.Property({
  1112  			name: 'info',
  1113  			getter: 'shh_info'
  1114  		}),
  1115  	]
  1116  });
  1117  `
  1118  
  1119  const SWARMFS_JS = `
  1120  web3._extend({
  1121  	property: 'swarmfs',
  1122  	methods:
  1123  	[
  1124  		new web3._extend.Method({
  1125  			name: 'mount',
  1126  			call: 'swarmfs_mount',
  1127  			params: 2
  1128  		}),
  1129  		new web3._extend.Method({
  1130  			name: 'unmount',
  1131  			call: 'swarmfs_unmount',
  1132  			params: 1
  1133  		}),
  1134  		new web3._extend.Method({
  1135  			name: 'listmounts',
  1136  			call: 'swarmfs_listmounts',
  1137  			params: 0
  1138  		}),
  1139  	]
  1140  });
  1141  `
  1142  
  1143  const TxPool_JS = `
  1144  web3._extend({
  1145  	property: 'txpool',
  1146  	methods: [],
  1147  	properties:
  1148  	[
  1149  		new web3._extend.Property({
  1150  			name: 'content',
  1151  			getter: 'txpool_content'
  1152  		}),
  1153  		new web3._extend.Property({
  1154  			name: 'inspect',
  1155  			getter: 'txpool_inspect'
  1156  		}),
  1157  		new web3._extend.Property({
  1158  			name: 'status',
  1159  			getter: 'txpool_status',
  1160  			outputFormatter: function(status) {
  1161  				status.pending = web3._extend.utils.toDecimal(status.pending);
  1162  				status.queued = web3._extend.utils.toDecimal(status.queued);
  1163  				return status;
  1164  			}
  1165  		}),
  1166  	]
  1167  });
  1168  `
  1169  
  1170  const Accounting_JS = `
  1171  web3._extend({
  1172  	property: 'accounting',
  1173  	methods: [
  1174  		new web3._extend.Property({
  1175  			name: 'balance',
  1176  			getter: 'account_balance'
  1177  		}),
  1178  		new web3._extend.Property({
  1179  			name: 'balanceCredit',
  1180  			getter: 'account_balanceCredit'
  1181  		}),
  1182  		new web3._extend.Property({
  1183  			name: 'balanceDebit',
  1184  			getter: 'account_balanceDebit'
  1185  		}),
  1186  		new web3._extend.Property({
  1187  			name: 'bytesCredit',
  1188  			getter: 'account_bytesCredit'
  1189  		}),
  1190  		new web3._extend.Property({
  1191  			name: 'bytesDebit',
  1192  			getter: 'account_bytesDebit'
  1193  		}),
  1194  		new web3._extend.Property({
  1195  			name: 'msgCredit',
  1196  			getter: 'account_msgCredit'
  1197  		}),
  1198  		new web3._extend.Property({
  1199  			name: 'msgDebit',
  1200  			getter: 'account_msgDebit'
  1201  		}),
  1202  		new web3._extend.Property({
  1203  			name: 'peerDrops',
  1204  			getter: 'account_peerDrops'
  1205  		}),
  1206  		new web3._extend.Property({
  1207  			name: 'selfDrops',
  1208  			getter: 'account_selfDrops'
  1209  		}),
  1210  	]
  1211  });
  1212  `