github.com/carter-ya/go-ethereum@v0.0.0-20230628080049-d2309be3983b/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: 'getRawHeader', 228 call: 'debug_getRawHeader', 229 params: 1 230 }), 231 new web3._extend.Method({ 232 name: 'getRawBlock', 233 call: 'debug_getRawBlock', 234 params: 1 235 }), 236 new web3._extend.Method({ 237 name: 'getRawReceipts', 238 call: 'debug_getRawReceipts', 239 params: 1 240 }), 241 new web3._extend.Method({ 242 name: 'getRawTransaction', 243 call: 'debug_getRawTransaction', 244 params: 1 245 }), 246 new web3._extend.Method({ 247 name: 'setHead', 248 call: 'debug_setHead', 249 params: 1 250 }), 251 new web3._extend.Method({ 252 name: 'seedHash', 253 call: 'debug_seedHash', 254 params: 1 255 }), 256 new web3._extend.Method({ 257 name: 'dumpBlock', 258 call: 'debug_dumpBlock', 259 params: 1, 260 inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter] 261 }), 262 new web3._extend.Method({ 263 name: 'chaindbProperty', 264 call: 'debug_chaindbProperty', 265 params: 1, 266 outputFormatter: console.log 267 }), 268 new web3._extend.Method({ 269 name: 'chaindbCompact', 270 call: 'debug_chaindbCompact', 271 }), 272 new web3._extend.Method({ 273 name: 'verbosity', 274 call: 'debug_verbosity', 275 params: 1 276 }), 277 new web3._extend.Method({ 278 name: 'vmodule', 279 call: 'debug_vmodule', 280 params: 1 281 }), 282 new web3._extend.Method({ 283 name: 'backtraceAt', 284 call: 'debug_backtraceAt', 285 params: 1, 286 }), 287 new web3._extend.Method({ 288 name: 'stacks', 289 call: 'debug_stacks', 290 params: 1, 291 inputFormatter: [null], 292 outputFormatter: console.log 293 }), 294 new web3._extend.Method({ 295 name: 'freeOSMemory', 296 call: 'debug_freeOSMemory', 297 params: 0, 298 }), 299 new web3._extend.Method({ 300 name: 'setGCPercent', 301 call: 'debug_setGCPercent', 302 params: 1, 303 }), 304 new web3._extend.Method({ 305 name: 'memStats', 306 call: 'debug_memStats', 307 params: 0, 308 }), 309 new web3._extend.Method({ 310 name: 'gcStats', 311 call: 'debug_gcStats', 312 params: 0, 313 }), 314 new web3._extend.Method({ 315 name: 'cpuProfile', 316 call: 'debug_cpuProfile', 317 params: 2 318 }), 319 new web3._extend.Method({ 320 name: 'startCPUProfile', 321 call: 'debug_startCPUProfile', 322 params: 1 323 }), 324 new web3._extend.Method({ 325 name: 'stopCPUProfile', 326 call: 'debug_stopCPUProfile', 327 params: 0 328 }), 329 new web3._extend.Method({ 330 name: 'goTrace', 331 call: 'debug_goTrace', 332 params: 2 333 }), 334 new web3._extend.Method({ 335 name: 'startGoTrace', 336 call: 'debug_startGoTrace', 337 params: 1 338 }), 339 new web3._extend.Method({ 340 name: 'stopGoTrace', 341 call: 'debug_stopGoTrace', 342 params: 0 343 }), 344 new web3._extend.Method({ 345 name: 'blockProfile', 346 call: 'debug_blockProfile', 347 params: 2 348 }), 349 new web3._extend.Method({ 350 name: 'setBlockProfileRate', 351 call: 'debug_setBlockProfileRate', 352 params: 1 353 }), 354 new web3._extend.Method({ 355 name: 'writeBlockProfile', 356 call: 'debug_writeBlockProfile', 357 params: 1 358 }), 359 new web3._extend.Method({ 360 name: 'mutexProfile', 361 call: 'debug_mutexProfile', 362 params: 2 363 }), 364 new web3._extend.Method({ 365 name: 'setMutexProfileFraction', 366 call: 'debug_setMutexProfileFraction', 367 params: 1 368 }), 369 new web3._extend.Method({ 370 name: 'writeMutexProfile', 371 call: 'debug_writeMutexProfile', 372 params: 1 373 }), 374 new web3._extend.Method({ 375 name: 'writeMemProfile', 376 call: 'debug_writeMemProfile', 377 params: 1 378 }), 379 new web3._extend.Method({ 380 name: 'traceBlock', 381 call: 'debug_traceBlock', 382 params: 2, 383 inputFormatter: [null, null] 384 }), 385 new web3._extend.Method({ 386 name: 'traceBlockFromFile', 387 call: 'debug_traceBlockFromFile', 388 params: 2, 389 inputFormatter: [null, null] 390 }), 391 new web3._extend.Method({ 392 name: 'traceBadBlock', 393 call: 'debug_traceBadBlock', 394 params: 1, 395 inputFormatter: [null] 396 }), 397 new web3._extend.Method({ 398 name: 'standardTraceBadBlockToFile', 399 call: 'debug_standardTraceBadBlockToFile', 400 params: 2, 401 inputFormatter: [null, null] 402 }), 403 new web3._extend.Method({ 404 name: 'intermediateRoots', 405 call: 'debug_intermediateRoots', 406 params: 2, 407 inputFormatter: [null, null] 408 }), 409 new web3._extend.Method({ 410 name: 'standardTraceBlockToFile', 411 call: 'debug_standardTraceBlockToFile', 412 params: 2, 413 inputFormatter: [null, null] 414 }), 415 new web3._extend.Method({ 416 name: 'traceBlockByNumber', 417 call: 'debug_traceBlockByNumber', 418 params: 2, 419 inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, null] 420 }), 421 new web3._extend.Method({ 422 name: 'traceBlockByHash', 423 call: 'debug_traceBlockByHash', 424 params: 2, 425 inputFormatter: [null, null] 426 }), 427 new web3._extend.Method({ 428 name: 'traceTransaction', 429 call: 'debug_traceTransaction', 430 params: 2, 431 inputFormatter: [null, null] 432 }), 433 new web3._extend.Method({ 434 name: 'traceCall', 435 call: 'debug_traceCall', 436 params: 3, 437 inputFormatter: [null, null, null] 438 }), 439 new web3._extend.Method({ 440 name: 'preimage', 441 call: 'debug_preimage', 442 params: 1, 443 inputFormatter: [null] 444 }), 445 new web3._extend.Method({ 446 name: 'getBadBlocks', 447 call: 'debug_getBadBlocks', 448 params: 0, 449 }), 450 new web3._extend.Method({ 451 name: 'storageRangeAt', 452 call: 'debug_storageRangeAt', 453 params: 5, 454 }), 455 new web3._extend.Method({ 456 name: 'getModifiedAccountsByNumber', 457 call: 'debug_getModifiedAccountsByNumber', 458 params: 2, 459 inputFormatter: [null, null], 460 }), 461 new web3._extend.Method({ 462 name: 'getModifiedAccountsByHash', 463 call: 'debug_getModifiedAccountsByHash', 464 params: 2, 465 inputFormatter:[null, null], 466 }), 467 new web3._extend.Method({ 468 name: 'freezeClient', 469 call: 'debug_freezeClient', 470 params: 1, 471 }), 472 new web3._extend.Method({ 473 name: 'getAccessibleState', 474 call: 'debug_getAccessibleState', 475 params: 2, 476 inputFormatter:[web3._extend.formatters.inputBlockNumberFormatter, web3._extend.formatters.inputBlockNumberFormatter], 477 }), 478 new web3._extend.Method({ 479 name: 'dbGet', 480 call: 'debug_dbGet', 481 params: 1 482 }), 483 new web3._extend.Method({ 484 name: 'dbAncient', 485 call: 'debug_dbAncient', 486 params: 2 487 }), 488 new web3._extend.Method({ 489 name: 'dbAncients', 490 call: 'debug_dbAncients', 491 params: 0 492 }), 493 ], 494 properties: [] 495 }); 496 ` 497 498 const EthJs = ` 499 web3._extend({ 500 property: 'eth', 501 methods: [ 502 new web3._extend.Method({ 503 name: 'chainId', 504 call: 'eth_chainId', 505 params: 0 506 }), 507 new web3._extend.Method({ 508 name: 'sign', 509 call: 'eth_sign', 510 params: 2, 511 inputFormatter: [web3._extend.formatters.inputAddressFormatter, null] 512 }), 513 new web3._extend.Method({ 514 name: 'resend', 515 call: 'eth_resend', 516 params: 3, 517 inputFormatter: [web3._extend.formatters.inputTransactionFormatter, web3._extend.utils.fromDecimal, web3._extend.utils.fromDecimal] 518 }), 519 new web3._extend.Method({ 520 name: 'signTransaction', 521 call: 'eth_signTransaction', 522 params: 1, 523 inputFormatter: [web3._extend.formatters.inputTransactionFormatter] 524 }), 525 new web3._extend.Method({ 526 name: 'estimateGas', 527 call: 'eth_estimateGas', 528 params: 2, 529 inputFormatter: [web3._extend.formatters.inputCallFormatter, web3._extend.formatters.inputBlockNumberFormatter], 530 outputFormatter: web3._extend.utils.toDecimal 531 }), 532 new web3._extend.Method({ 533 name: 'submitTransaction', 534 call: 'eth_submitTransaction', 535 params: 1, 536 inputFormatter: [web3._extend.formatters.inputTransactionFormatter] 537 }), 538 new web3._extend.Method({ 539 name: 'fillTransaction', 540 call: 'eth_fillTransaction', 541 params: 1, 542 inputFormatter: [web3._extend.formatters.inputTransactionFormatter] 543 }), 544 new web3._extend.Method({ 545 name: 'getHeaderByNumber', 546 call: 'eth_getHeaderByNumber', 547 params: 1, 548 inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter] 549 }), 550 new web3._extend.Method({ 551 name: 'getHeaderByHash', 552 call: 'eth_getHeaderByHash', 553 params: 1 554 }), 555 new web3._extend.Method({ 556 name: 'getBlockByNumber', 557 call: 'eth_getBlockByNumber', 558 params: 2, 559 inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, function (val) { return !!val; }] 560 }), 561 new web3._extend.Method({ 562 name: 'getBlockByHash', 563 call: 'eth_getBlockByHash', 564 params: 2, 565 inputFormatter: [null, function (val) { return !!val; }] 566 }), 567 new web3._extend.Method({ 568 name: 'getRawTransaction', 569 call: 'eth_getRawTransactionByHash', 570 params: 1 571 }), 572 new web3._extend.Method({ 573 name: 'getRawTransactionFromBlock', 574 call: function(args) { 575 return (web3._extend.utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getRawTransactionByBlockHashAndIndex' : 'eth_getRawTransactionByBlockNumberAndIndex'; 576 }, 577 params: 2, 578 inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, web3._extend.utils.toHex] 579 }), 580 new web3._extend.Method({ 581 name: 'getProof', 582 call: 'eth_getProof', 583 params: 3, 584 inputFormatter: [web3._extend.formatters.inputAddressFormatter, null, web3._extend.formatters.inputBlockNumberFormatter] 585 }), 586 new web3._extend.Method({ 587 name: 'createAccessList', 588 call: 'eth_createAccessList', 589 params: 2, 590 inputFormatter: [null, web3._extend.formatters.inputBlockNumberFormatter], 591 }), 592 new web3._extend.Method({ 593 name: 'feeHistory', 594 call: 'eth_feeHistory', 595 params: 3, 596 inputFormatter: [null, web3._extend.formatters.inputBlockNumberFormatter, null] 597 }), 598 new web3._extend.Method({ 599 name: 'getLogs', 600 call: 'eth_getLogs', 601 params: 1, 602 }), 603 ], 604 properties: [ 605 new web3._extend.Property({ 606 name: 'pendingTransactions', 607 getter: 'eth_pendingTransactions', 608 outputFormatter: function(txs) { 609 var formatted = []; 610 for (var i = 0; i < txs.length; i++) { 611 formatted.push(web3._extend.formatters.outputTransactionFormatter(txs[i])); 612 formatted[i].blockHash = null; 613 } 614 return formatted; 615 } 616 }), 617 new web3._extend.Property({ 618 name: 'maxPriorityFeePerGas', 619 getter: 'eth_maxPriorityFeePerGas', 620 outputFormatter: web3._extend.utils.toBigNumber 621 }), 622 ] 623 }); 624 ` 625 626 const MinerJs = ` 627 web3._extend({ 628 property: 'miner', 629 methods: [ 630 new web3._extend.Method({ 631 name: 'start', 632 call: 'miner_start', 633 params: 1, 634 inputFormatter: [null] 635 }), 636 new web3._extend.Method({ 637 name: 'stop', 638 call: 'miner_stop' 639 }), 640 new web3._extend.Method({ 641 name: 'setEtherbase', 642 call: 'miner_setEtherbase', 643 params: 1, 644 inputFormatter: [web3._extend.formatters.inputAddressFormatter] 645 }), 646 new web3._extend.Method({ 647 name: 'setExtra', 648 call: 'miner_setExtra', 649 params: 1 650 }), 651 new web3._extend.Method({ 652 name: 'setGasPrice', 653 call: 'miner_setGasPrice', 654 params: 1, 655 inputFormatter: [web3._extend.utils.fromDecimal] 656 }), 657 new web3._extend.Method({ 658 name: 'setGasLimit', 659 call: 'miner_setGasLimit', 660 params: 1, 661 inputFormatter: [web3._extend.utils.fromDecimal] 662 }), 663 new web3._extend.Method({ 664 name: 'setRecommitInterval', 665 call: 'miner_setRecommitInterval', 666 params: 1, 667 }), 668 new web3._extend.Method({ 669 name: 'getHashrate', 670 call: 'miner_getHashrate' 671 }), 672 ], 673 properties: [] 674 }); 675 ` 676 677 const NetJs = ` 678 web3._extend({ 679 property: 'net', 680 methods: [], 681 properties: [ 682 new web3._extend.Property({ 683 name: 'version', 684 getter: 'net_version' 685 }), 686 ] 687 }); 688 ` 689 690 const PersonalJs = ` 691 web3._extend({ 692 property: 'personal', 693 methods: [ 694 new web3._extend.Method({ 695 name: 'importRawKey', 696 call: 'personal_importRawKey', 697 params: 2 698 }), 699 new web3._extend.Method({ 700 name: 'sign', 701 call: 'personal_sign', 702 params: 3, 703 inputFormatter: [null, web3._extend.formatters.inputAddressFormatter, null] 704 }), 705 new web3._extend.Method({ 706 name: 'ecRecover', 707 call: 'personal_ecRecover', 708 params: 2 709 }), 710 new web3._extend.Method({ 711 name: 'openWallet', 712 call: 'personal_openWallet', 713 params: 2 714 }), 715 new web3._extend.Method({ 716 name: 'deriveAccount', 717 call: 'personal_deriveAccount', 718 params: 3 719 }), 720 new web3._extend.Method({ 721 name: 'signTransaction', 722 call: 'personal_signTransaction', 723 params: 2, 724 inputFormatter: [web3._extend.formatters.inputTransactionFormatter, null] 725 }), 726 new web3._extend.Method({ 727 name: 'unpair', 728 call: 'personal_unpair', 729 params: 2 730 }), 731 new web3._extend.Method({ 732 name: 'initializeWallet', 733 call: 'personal_initializeWallet', 734 params: 1 735 }) 736 ], 737 properties: [ 738 new web3._extend.Property({ 739 name: 'listWallets', 740 getter: 'personal_listWallets' 741 }), 742 ] 743 }) 744 ` 745 746 const RpcJs = ` 747 web3._extend({ 748 property: 'rpc', 749 methods: [], 750 properties: [ 751 new web3._extend.Property({ 752 name: 'modules', 753 getter: 'rpc_modules' 754 }), 755 ] 756 }); 757 ` 758 759 const TxpoolJs = ` 760 web3._extend({ 761 property: 'txpool', 762 methods: [], 763 properties: 764 [ 765 new web3._extend.Property({ 766 name: 'content', 767 getter: 'txpool_content' 768 }), 769 new web3._extend.Property({ 770 name: 'inspect', 771 getter: 'txpool_inspect' 772 }), 773 new web3._extend.Property({ 774 name: 'status', 775 getter: 'txpool_status', 776 outputFormatter: function(status) { 777 status.pending = web3._extend.utils.toDecimal(status.pending); 778 status.queued = web3._extend.utils.toDecimal(status.queued); 779 return status; 780 } 781 }), 782 new web3._extend.Method({ 783 name: 'contentFrom', 784 call: 'txpool_contentFrom', 785 params: 1, 786 }), 787 ] 788 }); 789 ` 790 791 const LESJs = ` 792 web3._extend({ 793 property: 'les', 794 methods: 795 [ 796 new web3._extend.Method({ 797 name: 'getCheckpoint', 798 call: 'les_getCheckpoint', 799 params: 1 800 }), 801 new web3._extend.Method({ 802 name: 'clientInfo', 803 call: 'les_clientInfo', 804 params: 1 805 }), 806 new web3._extend.Method({ 807 name: 'priorityClientInfo', 808 call: 'les_priorityClientInfo', 809 params: 3 810 }), 811 new web3._extend.Method({ 812 name: 'setClientParams', 813 call: 'les_setClientParams', 814 params: 2 815 }), 816 new web3._extend.Method({ 817 name: 'setDefaultParams', 818 call: 'les_setDefaultParams', 819 params: 1 820 }), 821 new web3._extend.Method({ 822 name: 'addBalance', 823 call: 'les_addBalance', 824 params: 2 825 }), 826 ], 827 properties: 828 [ 829 new web3._extend.Property({ 830 name: 'latestCheckpoint', 831 getter: 'les_latestCheckpoint' 832 }), 833 new web3._extend.Property({ 834 name: 'checkpointContractAddress', 835 getter: 'les_getCheckpointContractAddress' 836 }), 837 new web3._extend.Property({ 838 name: 'serverInfo', 839 getter: 'les_serverInfo' 840 }), 841 ] 842 }); 843 ` 844 845 const VfluxJs = ` 846 web3._extend({ 847 property: 'vflux', 848 methods: 849 [ 850 new web3._extend.Method({ 851 name: 'distribution', 852 call: 'vflux_distribution', 853 params: 2 854 }), 855 new web3._extend.Method({ 856 name: 'timeout', 857 call: 'vflux_timeout', 858 params: 2 859 }), 860 new web3._extend.Method({ 861 name: 'value', 862 call: 'vflux_value', 863 params: 2 864 }), 865 ], 866 properties: 867 [ 868 new web3._extend.Property({ 869 name: 'requestStats', 870 getter: 'vflux_requestStats' 871 }), 872 ] 873 }); 874 `