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