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