github.com/ethereum/go-ethereum@v1.16.1/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 "clique": CliqueJs, 23 "debug": DebugJs, 24 "eth": EthJs, 25 "miner": MinerJs, 26 "net": NetJs, 27 "rpc": RpcJs, 28 "txpool": TxpoolJs, 29 "dev": DevJs, 30 } 31 32 const CliqueJs = ` 33 web3._extend({ 34 property: 'clique', 35 methods: [ 36 new web3._extend.Method({ 37 name: 'getSnapshot', 38 call: 'clique_getSnapshot', 39 params: 1, 40 inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter] 41 }), 42 new web3._extend.Method({ 43 name: 'getSnapshotAtHash', 44 call: 'clique_getSnapshotAtHash', 45 params: 1 46 }), 47 new web3._extend.Method({ 48 name: 'getSigners', 49 call: 'clique_getSigners', 50 params: 1, 51 inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter] 52 }), 53 new web3._extend.Method({ 54 name: 'getSignersAtHash', 55 call: 'clique_getSignersAtHash', 56 params: 1 57 }), 58 new web3._extend.Method({ 59 name: 'propose', 60 call: 'clique_propose', 61 params: 2 62 }), 63 new web3._extend.Method({ 64 name: 'discard', 65 call: 'clique_discard', 66 params: 1 67 }), 68 new web3._extend.Method({ 69 name: 'status', 70 call: 'clique_status', 71 params: 0 72 }), 73 new web3._extend.Method({ 74 name: 'getSigner', 75 call: 'clique_getSigner', 76 params: 1, 77 inputFormatter: [null] 78 }), 79 ], 80 properties: [ 81 new web3._extend.Property({ 82 name: 'proposals', 83 getter: 'clique_proposals' 84 }), 85 ] 86 }); 87 ` 88 89 const AdminJs = ` 90 web3._extend({ 91 property: 'admin', 92 methods: [ 93 new web3._extend.Method({ 94 name: 'addPeer', 95 call: 'admin_addPeer', 96 params: 1 97 }), 98 new web3._extend.Method({ 99 name: 'removePeer', 100 call: 'admin_removePeer', 101 params: 1 102 }), 103 new web3._extend.Method({ 104 name: 'addTrustedPeer', 105 call: 'admin_addTrustedPeer', 106 params: 1 107 }), 108 new web3._extend.Method({ 109 name: 'removeTrustedPeer', 110 call: 'admin_removeTrustedPeer', 111 params: 1 112 }), 113 new web3._extend.Method({ 114 name: 'exportChain', 115 call: 'admin_exportChain', 116 params: 3, 117 inputFormatter: [null, null, null] 118 }), 119 new web3._extend.Method({ 120 name: 'importChain', 121 call: 'admin_importChain', 122 params: 1 123 }), 124 new web3._extend.Method({ 125 name: 'sleepBlocks', 126 call: 'admin_sleepBlocks', 127 params: 2 128 }), 129 new web3._extend.Method({ 130 name: 'startHTTP', 131 call: 'admin_startHTTP', 132 params: 5, 133 inputFormatter: [null, null, null, null, null] 134 }), 135 new web3._extend.Method({ 136 name: 'stopHTTP', 137 call: 'admin_stopHTTP' 138 }), 139 // This method is deprecated. 140 new web3._extend.Method({ 141 name: 'startRPC', 142 call: 'admin_startRPC', 143 params: 5, 144 inputFormatter: [null, null, null, null, null] 145 }), 146 // This method is deprecated. 147 new web3._extend.Method({ 148 name: 'stopRPC', 149 call: 'admin_stopRPC' 150 }), 151 new web3._extend.Method({ 152 name: 'startWS', 153 call: 'admin_startWS', 154 params: 4, 155 inputFormatter: [null, null, null, null] 156 }), 157 new web3._extend.Method({ 158 name: 'stopWS', 159 call: 'admin_stopWS' 160 }), 161 ], 162 properties: [ 163 new web3._extend.Property({ 164 name: 'nodeInfo', 165 getter: 'admin_nodeInfo' 166 }), 167 new web3._extend.Property({ 168 name: 'peers', 169 getter: 'admin_peers' 170 }), 171 new web3._extend.Property({ 172 name: 'datadir', 173 getter: 'admin_datadir' 174 }), 175 ] 176 }); 177 ` 178 179 const DebugJs = ` 180 web3._extend({ 181 property: 'debug', 182 methods: [ 183 new web3._extend.Method({ 184 name: 'accountRange', 185 call: 'debug_accountRange', 186 params: 6, 187 inputFormatter: [web3._extend.formatters.inputDefaultBlockNumberFormatter, null, null, null, null, null], 188 }), 189 new web3._extend.Method({ 190 name: 'printBlock', 191 call: 'debug_printBlock', 192 params: 1, 193 outputFormatter: console.log 194 }), 195 new web3._extend.Method({ 196 name: 'getRawHeader', 197 call: 'debug_getRawHeader', 198 params: 1 199 }), 200 new web3._extend.Method({ 201 name: 'getRawBlock', 202 call: 'debug_getRawBlock', 203 params: 1 204 }), 205 new web3._extend.Method({ 206 name: 'getRawReceipts', 207 call: 'debug_getRawReceipts', 208 params: 1 209 }), 210 new web3._extend.Method({ 211 name: 'getRawTransaction', 212 call: 'debug_getRawTransaction', 213 params: 1 214 }), 215 new web3._extend.Method({ 216 name: 'setHead', 217 call: 'debug_setHead', 218 params: 1 219 }), 220 new web3._extend.Method({ 221 name: 'seedHash', 222 call: 'debug_seedHash', 223 params: 1 224 }), 225 new web3._extend.Method({ 226 name: 'dumpBlock', 227 call: 'debug_dumpBlock', 228 params: 1, 229 inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter] 230 }), 231 new web3._extend.Method({ 232 name: 'chaindbProperty', 233 call: 'debug_chaindbProperty', 234 outputFormatter: console.log 235 }), 236 new web3._extend.Method({ 237 name: 'chaindbCompact', 238 call: 'debug_chaindbCompact', 239 }), 240 new web3._extend.Method({ 241 name: 'verbosity', 242 call: 'debug_verbosity', 243 params: 1 244 }), 245 new web3._extend.Method({ 246 name: 'vmodule', 247 call: 'debug_vmodule', 248 params: 1 249 }), 250 new web3._extend.Method({ 251 name: 'stacks', 252 call: 'debug_stacks', 253 params: 1, 254 inputFormatter: [null], 255 outputFormatter: console.log 256 }), 257 new web3._extend.Method({ 258 name: 'freeOSMemory', 259 call: 'debug_freeOSMemory', 260 params: 0, 261 }), 262 new web3._extend.Method({ 263 name: 'setGCPercent', 264 call: 'debug_setGCPercent', 265 params: 1, 266 }), 267 new web3._extend.Method({ 268 name: 'setMemoryLimit', 269 call: 'debug_setMemoryLimit', 270 params: 1, 271 }), 272 new web3._extend.Method({ 273 name: 'memStats', 274 call: 'debug_memStats', 275 params: 0, 276 }), 277 new web3._extend.Method({ 278 name: 'gcStats', 279 call: 'debug_gcStats', 280 params: 0, 281 }), 282 new web3._extend.Method({ 283 name: 'cpuProfile', 284 call: 'debug_cpuProfile', 285 params: 2 286 }), 287 new web3._extend.Method({ 288 name: 'startCPUProfile', 289 call: 'debug_startCPUProfile', 290 params: 1 291 }), 292 new web3._extend.Method({ 293 name: 'stopCPUProfile', 294 call: 'debug_stopCPUProfile', 295 params: 0 296 }), 297 new web3._extend.Method({ 298 name: 'goTrace', 299 call: 'debug_goTrace', 300 params: 2 301 }), 302 new web3._extend.Method({ 303 name: 'startGoTrace', 304 call: 'debug_startGoTrace', 305 params: 1 306 }), 307 new web3._extend.Method({ 308 name: 'stopGoTrace', 309 call: 'debug_stopGoTrace', 310 params: 0 311 }), 312 new web3._extend.Method({ 313 name: 'blockProfile', 314 call: 'debug_blockProfile', 315 params: 2 316 }), 317 new web3._extend.Method({ 318 name: 'setBlockProfileRate', 319 call: 'debug_setBlockProfileRate', 320 params: 1 321 }), 322 new web3._extend.Method({ 323 name: 'writeBlockProfile', 324 call: 'debug_writeBlockProfile', 325 params: 1 326 }), 327 new web3._extend.Method({ 328 name: 'mutexProfile', 329 call: 'debug_mutexProfile', 330 params: 2 331 }), 332 new web3._extend.Method({ 333 name: 'setMutexProfileFraction', 334 call: 'debug_setMutexProfileFraction', 335 params: 1 336 }), 337 new web3._extend.Method({ 338 name: 'writeMutexProfile', 339 call: 'debug_writeMutexProfile', 340 params: 1 341 }), 342 new web3._extend.Method({ 343 name: 'writeMemProfile', 344 call: 'debug_writeMemProfile', 345 params: 1 346 }), 347 new web3._extend.Method({ 348 name: 'traceBlock', 349 call: 'debug_traceBlock', 350 params: 2, 351 inputFormatter: [null, null] 352 }), 353 new web3._extend.Method({ 354 name: 'traceBlockFromFile', 355 call: 'debug_traceBlockFromFile', 356 params: 2, 357 inputFormatter: [null, null] 358 }), 359 new web3._extend.Method({ 360 name: 'traceBadBlock', 361 call: 'debug_traceBadBlock', 362 params: 1, 363 inputFormatter: [null] 364 }), 365 new web3._extend.Method({ 366 name: 'standardTraceBadBlockToFile', 367 call: 'debug_standardTraceBadBlockToFile', 368 params: 2, 369 inputFormatter: [null, null] 370 }), 371 new web3._extend.Method({ 372 name: 'intermediateRoots', 373 call: 'debug_intermediateRoots', 374 params: 2, 375 inputFormatter: [null, null] 376 }), 377 new web3._extend.Method({ 378 name: 'standardTraceBlockToFile', 379 call: 'debug_standardTraceBlockToFile', 380 params: 2, 381 inputFormatter: [null, null] 382 }), 383 new web3._extend.Method({ 384 name: 'traceBlockByNumber', 385 call: 'debug_traceBlockByNumber', 386 params: 2, 387 inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, null] 388 }), 389 new web3._extend.Method({ 390 name: 'traceBlockByHash', 391 call: 'debug_traceBlockByHash', 392 params: 2, 393 inputFormatter: [null, null] 394 }), 395 new web3._extend.Method({ 396 name: 'traceTransaction', 397 call: 'debug_traceTransaction', 398 params: 2, 399 inputFormatter: [null, null] 400 }), 401 new web3._extend.Method({ 402 name: 'traceCall', 403 call: 'debug_traceCall', 404 params: 3, 405 inputFormatter: [null, null, null] 406 }), 407 new web3._extend.Method({ 408 name: 'preimage', 409 call: 'debug_preimage', 410 params: 1, 411 inputFormatter: [null] 412 }), 413 new web3._extend.Method({ 414 name: 'getBadBlocks', 415 call: 'debug_getBadBlocks', 416 params: 0, 417 }), 418 new web3._extend.Method({ 419 name: 'storageRangeAt', 420 call: 'debug_storageRangeAt', 421 params: 5, 422 }), 423 new web3._extend.Method({ 424 name: 'getModifiedAccountsByNumber', 425 call: 'debug_getModifiedAccountsByNumber', 426 params: 2, 427 inputFormatter: [null, null], 428 }), 429 new web3._extend.Method({ 430 name: 'getModifiedAccountsByHash', 431 call: 'debug_getModifiedAccountsByHash', 432 params: 2, 433 inputFormatter:[null, null], 434 }), 435 new web3._extend.Method({ 436 name: 'freezeClient', 437 call: 'debug_freezeClient', 438 params: 1, 439 }), 440 new web3._extend.Method({ 441 name: 'getAccessibleState', 442 call: 'debug_getAccessibleState', 443 params: 2, 444 inputFormatter:[web3._extend.formatters.inputBlockNumberFormatter, web3._extend.formatters.inputBlockNumberFormatter], 445 }), 446 new web3._extend.Method({ 447 name: 'dbGet', 448 call: 'debug_dbGet', 449 params: 1 450 }), 451 new web3._extend.Method({ 452 name: 'dbAncient', 453 call: 'debug_dbAncient', 454 params: 2 455 }), 456 new web3._extend.Method({ 457 name: 'dbAncients', 458 call: 'debug_dbAncients', 459 params: 0 460 }), 461 new web3._extend.Method({ 462 name: 'setTrieFlushInterval', 463 call: 'debug_setTrieFlushInterval', 464 params: 1 465 }), 466 new web3._extend.Method({ 467 name: 'getTrieFlushInterval', 468 call: 'debug_getTrieFlushInterval', 469 params: 0 470 }), 471 ], 472 properties: [] 473 }); 474 ` 475 476 const EthJs = ` 477 web3._extend({ 478 property: 'eth', 479 methods: [ 480 new web3._extend.Method({ 481 name: 'chainId', 482 call: 'eth_chainId', 483 params: 0 484 }), 485 new web3._extend.Method({ 486 name: 'sign', 487 call: 'eth_sign', 488 params: 2, 489 inputFormatter: [web3._extend.formatters.inputAddressFormatter, null] 490 }), 491 new web3._extend.Method({ 492 name: 'resend', 493 call: 'eth_resend', 494 params: 3, 495 inputFormatter: [web3._extend.formatters.inputTransactionFormatter, web3._extend.utils.fromDecimal, web3._extend.utils.fromDecimal] 496 }), 497 new web3._extend.Method({ 498 name: 'signTransaction', 499 call: 'eth_signTransaction', 500 params: 1, 501 inputFormatter: [web3._extend.formatters.inputTransactionFormatter] 502 }), 503 new web3._extend.Method({ 504 name: 'estimateGas', 505 call: 'eth_estimateGas', 506 params: 4, 507 inputFormatter: [web3._extend.formatters.inputCallFormatter, web3._extend.formatters.inputBlockNumberFormatter, null, null], 508 outputFormatter: web3._extend.utils.toDecimal 509 }), 510 new web3._extend.Method({ 511 name: 'submitTransaction', 512 call: 'eth_submitTransaction', 513 params: 1, 514 inputFormatter: [web3._extend.formatters.inputTransactionFormatter] 515 }), 516 new web3._extend.Method({ 517 name: 'fillTransaction', 518 call: 'eth_fillTransaction', 519 params: 1, 520 inputFormatter: [web3._extend.formatters.inputTransactionFormatter] 521 }), 522 new web3._extend.Method({ 523 name: 'getHeaderByNumber', 524 call: 'eth_getHeaderByNumber', 525 params: 1, 526 inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter] 527 }), 528 new web3._extend.Method({ 529 name: 'getHeaderByHash', 530 call: 'eth_getHeaderByHash', 531 params: 1 532 }), 533 new web3._extend.Method({ 534 name: 'getBlockByNumber', 535 call: 'eth_getBlockByNumber', 536 params: 2, 537 inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, function (val) { return !!val; }] 538 }), 539 new web3._extend.Method({ 540 name: 'getBlockByHash', 541 call: 'eth_getBlockByHash', 542 params: 2, 543 inputFormatter: [null, function (val) { return !!val; }] 544 }), 545 new web3._extend.Method({ 546 name: 'getRawTransaction', 547 call: 'eth_getRawTransactionByHash', 548 params: 1 549 }), 550 new web3._extend.Method({ 551 name: 'getRawTransactionFromBlock', 552 call: function(args) { 553 return (web3._extend.utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getRawTransactionByBlockHashAndIndex' : 'eth_getRawTransactionByBlockNumberAndIndex'; 554 }, 555 params: 2, 556 inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, web3._extend.utils.toHex] 557 }), 558 new web3._extend.Method({ 559 name: 'getProof', 560 call: 'eth_getProof', 561 params: 3, 562 inputFormatter: [web3._extend.formatters.inputAddressFormatter, null, web3._extend.formatters.inputBlockNumberFormatter] 563 }), 564 new web3._extend.Method({ 565 name: 'createAccessList', 566 call: 'eth_createAccessList', 567 params: 2, 568 inputFormatter: [null, web3._extend.formatters.inputBlockNumberFormatter], 569 }), 570 new web3._extend.Method({ 571 name: 'feeHistory', 572 call: 'eth_feeHistory', 573 params: 3, 574 inputFormatter: [null, web3._extend.formatters.inputBlockNumberFormatter, null] 575 }), 576 new web3._extend.Method({ 577 name: 'getLogs', 578 call: 'eth_getLogs', 579 params: 1, 580 }), 581 new web3._extend.Method({ 582 name: 'call', 583 call: 'eth_call', 584 params: 4, 585 inputFormatter: [web3._extend.formatters.inputCallFormatter, web3._extend.formatters.inputDefaultBlockNumberFormatter, null, null], 586 }), 587 new web3._extend.Method({ 588 name: 'simulateV1', 589 call: 'eth_simulateV1', 590 params: 2, 591 inputFormatter: [null, web3._extend.formatters.inputDefaultBlockNumberFormatter], 592 }), 593 new web3._extend.Method({ 594 name: 'getBlockReceipts', 595 call: 'eth_getBlockReceipts', 596 params: 1, 597 }), 598 ], 599 properties: [ 600 new web3._extend.Property({ 601 name: 'pendingTransactions', 602 getter: 'eth_pendingTransactions', 603 outputFormatter: function(txs) { 604 var formatted = []; 605 for (var i = 0; i < txs.length; i++) { 606 formatted.push(web3._extend.formatters.outputTransactionFormatter(txs[i])); 607 formatted[i].blockHash = null; 608 } 609 return formatted; 610 } 611 }), 612 new web3._extend.Property({ 613 name: 'maxPriorityFeePerGas', 614 getter: 'eth_maxPriorityFeePerGas', 615 outputFormatter: web3._extend.utils.toBigNumber 616 }), 617 ] 618 }); 619 ` 620 621 const MinerJs = ` 622 web3._extend({ 623 property: 'miner', 624 methods: [ 625 new web3._extend.Method({ 626 name: 'setExtra', 627 call: 'miner_setExtra', 628 params: 1 629 }), 630 new web3._extend.Method({ 631 name: 'setGasPrice', 632 call: 'miner_setGasPrice', 633 params: 1, 634 inputFormatter: [web3._extend.utils.fromDecimal] 635 }), 636 new web3._extend.Method({ 637 name: 'setGasLimit', 638 call: 'miner_setGasLimit', 639 params: 1, 640 inputFormatter: [web3._extend.utils.fromDecimal] 641 }), 642 ], 643 properties: [] 644 }); 645 ` 646 647 const NetJs = ` 648 web3._extend({ 649 property: 'net', 650 methods: [], 651 properties: [ 652 new web3._extend.Property({ 653 name: 'version', 654 getter: 'net_version' 655 }), 656 ] 657 }); 658 ` 659 660 const RpcJs = ` 661 web3._extend({ 662 property: 'rpc', 663 methods: [], 664 properties: [ 665 new web3._extend.Property({ 666 name: 'modules', 667 getter: 'rpc_modules' 668 }), 669 ] 670 }); 671 ` 672 673 const TxpoolJs = ` 674 web3._extend({ 675 property: 'txpool', 676 methods: [], 677 properties: 678 [ 679 new web3._extend.Property({ 680 name: 'content', 681 getter: 'txpool_content' 682 }), 683 new web3._extend.Property({ 684 name: 'inspect', 685 getter: 'txpool_inspect' 686 }), 687 new web3._extend.Property({ 688 name: 'status', 689 getter: 'txpool_status', 690 outputFormatter: function(status) { 691 status.pending = web3._extend.utils.toDecimal(status.pending); 692 status.queued = web3._extend.utils.toDecimal(status.queued); 693 return status; 694 } 695 }), 696 new web3._extend.Method({ 697 name: 'contentFrom', 698 call: 'txpool_contentFrom', 699 params: 1, 700 }), 701 ] 702 }); 703 ` 704 705 const DevJs = ` 706 web3._extend({ 707 property: 'dev', 708 methods: 709 [ 710 new web3._extend.Method({ 711 name: 'addWithdrawal', 712 call: 'dev_addWithdrawal', 713 params: 1 714 }), 715 new web3._extend.Method({ 716 name: 'setFeeRecipient', 717 call: 'dev_setFeeRecipient', 718 params: 1 719 }), 720 ], 721 }); 722 `