github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/internal/web3ext/web3ext.go (about)

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