github.com/waltonchain/waltonchain_gwtc_src@v1.1.4-0.20201225072101-8a298c95a819/internal/web3ext/web3ext.go (about)

     1  // Copyright 2015 The go-ethereum Authors
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-wtc 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-wtc library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  // package web3ext contains gwtc specific web3.js extensions.
    18  package web3ext
    19  
    20  var Modules = map[string]string{
    21  	"admin":      Admin_JS,
    22  	"chequebook": Chequebook_JS,
    23  	"debug":      Debug_JS,
    24  	"eth":        Eth_JS,
    25  	"miner":      Miner_JS,
    26  	"net":        Net_JS,
    27  	"personal":   Personal_JS,
    28  	"rpc":        RPC_JS,
    29  	"shh":        Shh_JS,
    30  	"swarmfs":    SWARMFS_JS,
    31  	"txpool":     TxPool_JS,
    32  }
    33  
    34  const Chequebook_JS = `
    35  web3._extend({
    36  	property: 'chequebook',
    37  	methods: [
    38  		new web3._extend.Method({
    39  			name: 'deposit',
    40  			call: 'chequebook_deposit',
    41  			params: 1,
    42  			inputFormatter: [null]
    43  		}),
    44  		new web3._extend.Property({
    45  			name: 'balance',
    46  			getter: 'chequebook_balance',
    47  			outputFormatter: web3._extend.utils.toDecimal
    48  		}),
    49  		new web3._extend.Method({
    50  			name: 'cash',
    51  			call: 'chequebook_cash',
    52  			params: 1,
    53  			inputFormatter: [null]
    54  		}),
    55  		new web3._extend.Method({
    56  			name: 'issue',
    57  			call: 'chequebook_issue',
    58  			params: 2,
    59  			inputFormatter: [null, null]
    60  		}),
    61  	]
    62  });
    63  `
    64  
    65  const Admin_JS = `
    66  web3._extend({
    67  	property: 'admin',
    68  	methods: [
    69  		new web3._extend.Method({
    70  			name: 'addPeer',
    71  			call: 'admin_addPeer',
    72  			params: 1
    73  		}),
    74  		new web3._extend.Method({
    75  			name: 'removePeer',
    76  			call: 'admin_removePeer',
    77  			params: 1
    78  		}),
    79  		new web3._extend.Method({
    80  			name: 'exportChain',
    81  			call: 'admin_exportChain',
    82  			params: 1,
    83  			inputFormatter: [null]
    84  		}),
    85  		new web3._extend.Method({
    86  			name: 'importChain',
    87  			call: 'admin_importChain',
    88  			params: 1
    89  		}),
    90  		new web3._extend.Method({
    91  			name: 'sleepBlocks',
    92  			call: 'admin_sleepBlocks',
    93  			params: 2
    94  		}),
    95  		new web3._extend.Method({
    96  			name: 'startRPC',
    97  			call: 'admin_startRPC',
    98  			params: 4,
    99  			inputFormatter: [null, null, null, null]
   100  		}),
   101  		new web3._extend.Method({
   102  			name: 'stopRPC',
   103  			call: 'admin_stopRPC'
   104  		}),
   105  		new web3._extend.Method({
   106  			name: 'startWS',
   107  			call: 'admin_startWS',
   108  			params: 4,
   109  			inputFormatter: [null, null, null, null]
   110  		}),
   111  		new web3._extend.Method({
   112  			name: 'stopWS',
   113  			call: 'admin_stopWS'
   114  		}),
   115  	],
   116  	properties: [
   117  		new web3._extend.Property({
   118  			name: 'nodeInfo',
   119  			getter: 'admin_nodeInfo'
   120  		}),
   121  		new web3._extend.Property({
   122  			name: 'peers',
   123  			getter: 'admin_peers'
   124  		}),
   125  		new web3._extend.Property({
   126  			name: 'datadir',
   127  			getter: 'admin_datadir'
   128  		}),
   129  	]
   130  });
   131  `
   132  
   133  const Debug_JS = `
   134  web3._extend({
   135  	property: 'debug',
   136  	methods: [
   137  		new web3._extend.Method({
   138  			name: 'printBlock',
   139  			call: 'debug_printBlock',
   140  			params: 1
   141  		}),
   142  		new web3._extend.Method({
   143  			name: 'getBlockRlp',
   144  			call: 'debug_getBlockRlp',
   145  			params: 1
   146  		}),
   147  		new web3._extend.Method({
   148  			name: 'setHead',
   149  			call: 'debug_setHead',
   150  			params: 1
   151  		}),
   152  		new web3._extend.Method({
   153  			name: 'traceBlock',
   154  			call: 'debug_traceBlock',
   155  			params: 1
   156  		}),
   157  		new web3._extend.Method({
   158  			name: 'traceBlockFromFile',
   159  			call: 'debug_traceBlockFromFile',
   160  			params: 1
   161  		}),
   162  		new web3._extend.Method({
   163  			name: 'traceBlockByNumber',
   164  			call: 'debug_traceBlockByNumber',
   165  			params: 1
   166  		}),
   167  		new web3._extend.Method({
   168  			name: 'traceBlockByHash',
   169  			call: 'debug_traceBlockByHash',
   170  			params: 1
   171  		}),
   172  		new web3._extend.Method({
   173  			name: 'seedHash',
   174  			call: 'debug_seedHash',
   175  			params: 1
   176  		}),
   177  		new web3._extend.Method({
   178  			name: 'dumpBlock',
   179  			call: 'debug_dumpBlock',
   180  			params: 1
   181  		}),
   182  		new web3._extend.Method({
   183  			name: 'chaindbProperty',
   184  			call: 'debug_chaindbProperty',
   185  			params: 1,
   186  			outputFormatter: console.log
   187  		}),
   188  		new web3._extend.Method({
   189  			name: 'chaindbCompact',
   190  			call: 'debug_chaindbCompact',
   191  		}),
   192  		new web3._extend.Method({
   193  			name: 'metrics',
   194  			call: 'debug_metrics',
   195  			params: 1
   196  		}),
   197  		new web3._extend.Method({
   198  			name: 'verbosity',
   199  			call: 'debug_verbosity',
   200  			params: 1
   201  		}),
   202  		new web3._extend.Method({
   203  			name: 'vmodule',
   204  			call: 'debug_vmodule',
   205  			params: 1
   206  		}),
   207  		new web3._extend.Method({
   208  			name: 'backtraceAt',
   209  			call: 'debug_backtraceAt',
   210  			params: 1,
   211  		}),
   212  		new web3._extend.Method({
   213  			name: 'stacks',
   214  			call: 'debug_stacks',
   215  			params: 0,
   216  			outputFormatter: console.log
   217  		}),
   218  		new web3._extend.Method({
   219  			name: 'freeOSMemory',
   220  			call: 'debug_freeOSMemory',
   221  			params: 0,
   222  		}),
   223  		new web3._extend.Method({
   224  			name: 'setGCPercent',
   225  			call: 'debug_setGCPercent',
   226  			params: 1,
   227  		}),
   228  		new web3._extend.Method({
   229  			name: 'memStats',
   230  			call: 'debug_memStats',
   231  			params: 0,
   232  		}),
   233  		new web3._extend.Method({
   234  			name: 'gcStats',
   235  			call: 'debug_gcStats',
   236  			params: 0,
   237  		}),
   238  		new web3._extend.Method({
   239  			name: 'cpuProfile',
   240  			call: 'debug_cpuProfile',
   241  			params: 2
   242  		}),
   243  		new web3._extend.Method({
   244  			name: 'startCPUProfile',
   245  			call: 'debug_startCPUProfile',
   246  			params: 1
   247  		}),
   248  		new web3._extend.Method({
   249  			name: 'stopCPUProfile',
   250  			call: 'debug_stopCPUProfile',
   251  			params: 0
   252  		}),
   253  		new web3._extend.Method({
   254  			name: 'goTrace',
   255  			call: 'debug_goTrace',
   256  			params: 2
   257  		}),
   258  		new web3._extend.Method({
   259  			name: 'startGoTrace',
   260  			call: 'debug_startGoTrace',
   261  			params: 1
   262  		}),
   263  		new web3._extend.Method({
   264  			name: 'stopGoTrace',
   265  			call: 'debug_stopGoTrace',
   266  			params: 0
   267  		}),
   268  		new web3._extend.Method({
   269  			name: 'blockProfile',
   270  			call: 'debug_blockProfile',
   271  			params: 2
   272  		}),
   273  		new web3._extend.Method({
   274  			name: 'setBlockProfileRate',
   275  			call: 'debug_setBlockProfileRate',
   276  			params: 1
   277  		}),
   278  		new web3._extend.Method({
   279  			name: 'writeBlockProfile',
   280  			call: 'debug_writeBlockProfile',
   281  			params: 1
   282  		}),
   283  		new web3._extend.Method({
   284  			name: 'writeMemProfile',
   285  			call: 'debug_writeMemProfile',
   286  			params: 1
   287  		}),
   288  		new web3._extend.Method({
   289  			name: 'traceTransaction',
   290  			call: 'debug_traceTransaction',
   291  			params: 2,
   292  			inputFormatter: [null, null]
   293  		}),
   294  		new web3._extend.Method({
   295  			name: 'preimage',
   296  			call: 'debug_preimage',
   297  			params: 1,
   298  			inputFormatter: [null]
   299  		}),
   300  		new web3._extend.Method({
   301  			name: 'getBadBlocks',
   302  			call: 'debug_getBadBlocks',
   303  			params: 0,
   304  		}),
   305  		new web3._extend.Method({
   306  			name: 'storageRangeAt',
   307  			call: 'debug_storageRangeAt',
   308  			params: 5,
   309  		}),
   310  	],
   311  	properties: []
   312  });
   313  `
   314  
   315  const Eth_JS = `
   316  web3._extend({
   317  	property: 'eth',
   318  	methods: [
   319  		new web3._extend.Method({
   320  			name: 'chainId',
   321  			call: 'eth_chainId',
   322  			params: 0
   323  		}),
   324  		new web3._extend.Method({
   325  			name: 'sign',
   326  			call: 'eth_sign',
   327  			params: 2,
   328  			inputFormatter: [web3._extend.formatters.inputAddressFormatter, null]
   329  		}),
   330  		new web3._extend.Method({
   331  			name: 'resend',
   332  			call: 'eth_resend',
   333  			params: 3,
   334  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter, web3._extend.utils.fromDecimal, web3._extend.utils.fromDecimal]
   335  		}),
   336  		new web3._extend.Method({
   337  			name: 'signTransaction',
   338  			call: 'eth_signTransaction',
   339  			params: 1,
   340  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter]
   341  		}),
   342  		new web3._extend.Method({
   343  			name: 'submitTransaction',
   344  			call: 'eth_submitTransaction',
   345  			params: 1,
   346  			inputFormatter: [web3._extend.formatters.inputTransactionFormatter]
   347  		}),
   348  		new web3._extend.Method({
   349  			name: 'getRawTransaction',
   350  			call: 'eth_getRawTransactionByHash',
   351  			params: 1
   352  		}),
   353  		new web3._extend.Method({
   354  			name: 'getRawTransactionFromBlock',
   355  			call: function(args) {
   356  				return (web3._extend.utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getRawTransactionByBlockHashAndIndex' : 'eth_getRawTransactionByBlockNumberAndIndex';
   357  			},
   358  			params: 2,
   359  			inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, web3._extend.utils.toHex]
   360  		}),
   361  	],
   362  	properties: [
   363  		new web3._extend.Property({
   364  			name: 'pendingTransactions',
   365  			getter: 'eth_pendingTransactions',
   366  			outputFormatter: function(txs) {
   367  				var formatted = [];
   368  				for (var i = 0; i < txs.length; i++) {
   369  					formatted.push(web3._extend.formatters.outputTransactionFormatter(txs[i]));
   370  					formatted[i].blockHash = null;
   371  				}
   372  				return formatted;
   373  			}
   374  		}),
   375  	]
   376  });
   377  `
   378  
   379  const Miner_JS = `
   380  web3._extend({
   381  	property: 'miner',
   382  	methods: [
   383  		new web3._extend.Method({
   384  			name: 'start',
   385  			call: 'miner_start',
   386  			params: 1,
   387  			inputFormatter: [null]
   388  		}),
   389  		new web3._extend.Method({
   390  			name: 'stop',
   391  			call: 'miner_stop'
   392  		}),
   393  		new web3._extend.Method({
   394  			name: 'setEtherbase',
   395  			call: 'miner_setEtherbase',
   396  			params: 1,
   397  			inputFormatter: [web3._extend.formatters.inputAddressFormatter]
   398  		}),
   399  		new web3._extend.Method({
   400  			name: 'setExtra',
   401  			call: 'miner_setExtra',
   402  			params: 1
   403  		}),
   404  		new web3._extend.Method({
   405  			name: 'setGasPrice',
   406  			call: 'miner_setGasPrice',
   407  			params: 1,
   408  			inputFormatter: [web3._extend.utils.fromDecimal]
   409  		}),
   410  		new web3._extend.Method({
   411  			name: 'getHashrate',
   412  			call: 'miner_getHashrate'
   413  		}),
   414  	],
   415  	properties: []
   416  });
   417  `
   418  
   419  const Net_JS = `
   420  web3._extend({
   421  	property: 'net',
   422  	methods: [],
   423  	properties: [
   424  		new web3._extend.Property({
   425  			name: 'version',
   426  			getter: 'net_version'
   427  		}),
   428  	]
   429  });
   430  `
   431  
   432  const Personal_JS = `
   433  web3._extend({
   434  	property: 'personal',
   435  	methods: [
   436  		new web3._extend.Method({
   437  			name: 'importRawKey',
   438  			call: 'personal_importRawKey',
   439  			params: 2
   440  		}),
   441  		new web3._extend.Method({
   442  			name: 'sign',
   443  			call: 'personal_sign',
   444  			params: 3,
   445  			inputFormatter: [null, web3._extend.formatters.inputAddressFormatter, null]
   446  		}),
   447  		new web3._extend.Method({
   448  			name: 'ecRecover',
   449  			call: 'personal_ecRecover',
   450  			params: 2
   451  		}),
   452  		new web3._extend.Method({
   453  			name: 'openWallet',
   454  			call: 'personal_openWallet',
   455  			params: 2
   456  		}),
   457  		new web3._extend.Method({
   458  			name: 'deriveAccount',
   459  			call: 'personal_deriveAccount',
   460  			params: 3
   461  		}),
   462  	],
   463  	properties: [
   464  		new web3._extend.Property({
   465  			name: 'listWallets',
   466  			getter: 'personal_listWallets'
   467  		}),
   468  	]
   469  })
   470  `
   471  
   472  const RPC_JS = `
   473  web3._extend({
   474  	property: 'rpc',
   475  	methods: [],
   476  	properties: [
   477  		new web3._extend.Property({
   478  			name: 'modules',
   479  			getter: 'rpc_modules'
   480  		}),
   481  	]
   482  });
   483  `
   484  
   485  const Shh_JS = `
   486  web3._extend({
   487  	property: 'shh',
   488  	methods: [
   489  		new web3._extend.Method({
   490  			name: 'setMaxMessageLength',
   491  			call: 'shh_setMaxMessageLength',
   492  			params: 1
   493  		}),
   494  		new web3._extend.Method({
   495  			name: 'setMinimumPoW',
   496  			call: 'shh_setMinimumPoW',
   497  			params: 1
   498  		}),
   499  		new web3._extend.Method({
   500  			name: 'markTrustedPeer',
   501  			call: 'shh_markTrustedPeer',
   502  			params: 1
   503  		}),
   504  		new web3._extend.Method({
   505  			name: 'hasKeyPair',
   506  			call: 'shh_hasKeyPair',
   507  			params: 1
   508  		}),
   509  		new web3._extend.Method({
   510  			name: 'deleteKeyPair',
   511  			call: 'shh_deleteKeyPair',
   512  			params: 1
   513  		}),
   514  		new web3._extend.Method({
   515  			name: 'newKeyPair',
   516  			call: 'shh_newKeyPair'
   517  		}),
   518  		new web3._extend.Method({
   519  			name: 'getPublicKey',
   520  			call: 'shh_getPublicKey',
   521  			params: 1
   522  		}),
   523  		new web3._extend.Method({
   524  			name: 'getPrivateKey',
   525  			call: 'shh_getPrivateKey',
   526  			params: 1
   527  		}),
   528  		new web3._extend.Method({
   529  			name: 'newSymKey',
   530  			call: 'shh_newSymKey',
   531  		}),
   532  		new web3._extend.Method({
   533  			name: 'addSymKey',
   534  			call: 'shh_addSymKey',
   535  			params: 1
   536  		}),
   537  		new web3._extend.Method({
   538  			name: 'generateSymKeyFromPassword',
   539  			call: 'shh_generateSymKeyFromPassword',
   540  			params: 1
   541  		}),
   542  		new web3._extend.Method({
   543  			name: 'hasSymKey',
   544  			call: 'shh_hasSymKey',
   545  			params: 1
   546  		}),
   547  		new web3._extend.Method({
   548  			name: 'getSymKey',
   549  			call: 'shh_getSymKey',
   550  			params: 1
   551  		}),
   552  		new web3._extend.Method({
   553  			name: 'deleteSymKey',
   554  			call: 'shh_deleteSymKey',
   555  			params: 1
   556  		}),
   557  		new web3._extend.Method({
   558  			name: 'subscribe',
   559  			call: 'shh_subscribe',
   560  			params: 2
   561  		}),
   562  		new web3._extend.Method({
   563  			name: 'unsubscribe',
   564  			call: 'shh_unsubscribe',
   565  			params: 1
   566  		}),
   567  		new web3._extend.Method({
   568  			name: 'post',
   569  			call: 'shh_post',
   570  			params: 1
   571  		}),
   572  		new web3._extend.Method({
   573  			name: 'publicKey',
   574  			call: 'shh_getPublicKey',
   575  			params: 1
   576  		}),
   577  		new web3._extend.Method({
   578  			name: 'getFilterMessages',
   579  			call: 'shh_getFilterMessages',
   580  			params: 1
   581  		}),
   582  		new web3._extend.Method({
   583  			name: 'deleteMessageFilter',
   584  			call: 'shh_deleteMessageFilter',
   585  			params: 1
   586  		}),
   587  		new web3._extend.Method({
   588  			name: 'newMessageFilter',
   589  			call: 'shh_newMessageFilter',
   590  			params: 1
   591  		}),
   592  	],
   593  	properties:
   594  	[
   595  		new web3._extend.Property({
   596  			name: 'version',
   597  			getter: 'shh_version',
   598  			outputFormatter: web3._extend.utils.toDecimal
   599  		}),
   600  		new web3._extend.Property({
   601  			name: 'info',
   602  			getter: 'shh_info'
   603  		}),
   604  	]
   605  });
   606  `
   607  
   608  const SWARMFS_JS = `
   609  web3._extend({
   610  	property: 'swarmfs',
   611  	methods:
   612  	[
   613  		new web3._extend.Method({
   614  			name: 'mount',
   615  			call: 'swarmfs_mount',
   616  			params: 2
   617  		}),
   618  		new web3._extend.Method({
   619  			name: 'unmount',
   620  			call: 'swarmfs_unmount',
   621  			params: 1
   622  		}),
   623  		new web3._extend.Method({
   624  			name: 'listmounts',
   625  			call: 'swarmfs_listmounts',
   626  			params: 0
   627  		}),
   628  	]
   629  });
   630  `
   631  
   632  const TxPool_JS = `
   633  web3._extend({
   634  	property: 'txpool',
   635  	methods: [],
   636  	properties:
   637  	[
   638  		new web3._extend.Property({
   639  			name: 'content',
   640  			getter: 'txpool_content'
   641  		}),
   642  		new web3._extend.Property({
   643  			name: 'inspect',
   644  			getter: 'txpool_inspect'
   645  		}),
   646  		new web3._extend.Property({
   647  			name: 'status',
   648  			getter: 'txpool_status',
   649  			outputFormatter: function(status) {
   650  				status.pending = web3._extend.utils.toDecimal(status.pending);
   651  				status.queued = web3._extend.utils.toDecimal(status.queued);
   652  				return status;
   653  			}
   654  		}),
   655  	]
   656  });
   657  `