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 `