github.com/daragao/go-ethereum@v1.8.14-0.20180809141559-45eaef243198/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": Admin_JS, 22 "chequebook": Chequebook_JS, 23 "clique": Clique_JS, 24 "ethash": Ethash_JS, 25 "debug": Debug_JS, 26 "eth": Eth_JS, 27 "miner": Miner_JS, 28 "net": Net_JS, 29 "personal": Personal_JS, 30 "rpc": RPC_JS, 31 "shh": Shh_JS, 32 "swarmfs": SWARMFS_JS, 33 "txpool": TxPool_JS, 34 } 35 36 const Chequebook_JS = ` 37 web3._extend({ 38 property: 'chequebook', 39 methods: [ 40 new web3._extend.Method({ 41 name: 'deposit', 42 call: 'chequebook_deposit', 43 params: 1, 44 inputFormatter: [null] 45 }), 46 new web3._extend.Property({ 47 name: 'balance', 48 getter: 'chequebook_balance', 49 outputFormatter: web3._extend.utils.toDecimal 50 }), 51 new web3._extend.Method({ 52 name: 'cash', 53 call: 'chequebook_cash', 54 params: 1, 55 inputFormatter: [null] 56 }), 57 new web3._extend.Method({ 58 name: 'issue', 59 call: 'chequebook_issue', 60 params: 2, 61 inputFormatter: [null, null] 62 }), 63 ] 64 }); 65 ` 66 67 const Clique_JS = ` 68 web3._extend({ 69 property: 'clique', 70 methods: [ 71 new web3._extend.Method({ 72 name: 'getSnapshot', 73 call: 'clique_getSnapshot', 74 params: 1, 75 inputFormatter: [null] 76 }), 77 new web3._extend.Method({ 78 name: 'getSnapshotAtHash', 79 call: 'clique_getSnapshotAtHash', 80 params: 1 81 }), 82 new web3._extend.Method({ 83 name: 'getSigners', 84 call: 'clique_getSigners', 85 params: 1, 86 inputFormatter: [null] 87 }), 88 new web3._extend.Method({ 89 name: 'getSignersAtHash', 90 call: 'clique_getSignersAtHash', 91 params: 1 92 }), 93 new web3._extend.Method({ 94 name: 'propose', 95 call: 'clique_propose', 96 params: 2 97 }), 98 new web3._extend.Method({ 99 name: 'discard', 100 call: 'clique_discard', 101 params: 1 102 }), 103 ], 104 properties: [ 105 new web3._extend.Property({ 106 name: 'proposals', 107 getter: 'clique_proposals' 108 }), 109 ] 110 }); 111 ` 112 113 const Ethash_JS = ` 114 web3._extend({ 115 property: 'ethash', 116 methods: [ 117 new web3._extend.Method({ 118 name: 'getWork', 119 call: 'ethash_getWork', 120 params: 0 121 }), 122 new web3._extend.Method({ 123 name: 'getHashrate', 124 call: 'ethash_getHashrate', 125 params: 0 126 }), 127 new web3._extend.Method({ 128 name: 'submitWork', 129 call: 'ethash_submitWork', 130 params: 3, 131 }), 132 new web3._extend.Method({ 133 name: 'submitHashRate', 134 call: 'ethash_submitHashRate', 135 params: 2, 136 }), 137 ] 138 }); 139 ` 140 141 const Admin_JS = ` 142 web3._extend({ 143 property: 'admin', 144 methods: [ 145 new web3._extend.Method({ 146 name: 'addPeer', 147 call: 'admin_addPeer', 148 params: 1 149 }), 150 new web3._extend.Method({ 151 name: 'removePeer', 152 call: 'admin_removePeer', 153 params: 1 154 }), 155 new web3._extend.Method({ 156 name: 'addTrustedPeer', 157 call: 'admin_addTrustedPeer', 158 params: 1 159 }), 160 new web3._extend.Method({ 161 name: 'removeTrustedPeer', 162 call: 'admin_removeTrustedPeer', 163 params: 1 164 }), 165 new web3._extend.Method({ 166 name: 'exportChain', 167 call: 'admin_exportChain', 168 params: 1, 169 inputFormatter: [null] 170 }), 171 new web3._extend.Method({ 172 name: 'importChain', 173 call: 'admin_importChain', 174 params: 1 175 }), 176 new web3._extend.Method({ 177 name: 'sleepBlocks', 178 call: 'admin_sleepBlocks', 179 params: 2 180 }), 181 new web3._extend.Method({ 182 name: 'startRPC', 183 call: 'admin_startRPC', 184 params: 4, 185 inputFormatter: [null, null, null, null] 186 }), 187 new web3._extend.Method({ 188 name: 'stopRPC', 189 call: 'admin_stopRPC' 190 }), 191 new web3._extend.Method({ 192 name: 'startWS', 193 call: 'admin_startWS', 194 params: 4, 195 inputFormatter: [null, null, null, null] 196 }), 197 new web3._extend.Method({ 198 name: 'stopWS', 199 call: 'admin_stopWS' 200 }), 201 ], 202 properties: [ 203 new web3._extend.Property({ 204 name: 'nodeInfo', 205 getter: 'admin_nodeInfo' 206 }), 207 new web3._extend.Property({ 208 name: 'peers', 209 getter: 'admin_peers' 210 }), 211 new web3._extend.Property({ 212 name: 'datadir', 213 getter: 'admin_datadir' 214 }), 215 ] 216 }); 217 ` 218 219 const Debug_JS = ` 220 web3._extend({ 221 property: 'debug', 222 methods: [ 223 new web3._extend.Method({ 224 name: 'printBlock', 225 call: 'debug_printBlock', 226 params: 1 227 }), 228 new web3._extend.Method({ 229 name: 'getBlockRlp', 230 call: 'debug_getBlockRlp', 231 params: 1 232 }), 233 new web3._extend.Method({ 234 name: 'setHead', 235 call: 'debug_setHead', 236 params: 1 237 }), 238 new web3._extend.Method({ 239 name: 'seedHash', 240 call: 'debug_seedHash', 241 params: 1 242 }), 243 new web3._extend.Method({ 244 name: 'dumpBlock', 245 call: 'debug_dumpBlock', 246 params: 1 247 }), 248 new web3._extend.Method({ 249 name: 'chaindbProperty', 250 call: 'debug_chaindbProperty', 251 params: 1, 252 outputFormatter: console.log 253 }), 254 new web3._extend.Method({ 255 name: 'chaindbCompact', 256 call: 'debug_chaindbCompact', 257 }), 258 new web3._extend.Method({ 259 name: 'metrics', 260 call: 'debug_metrics', 261 params: 1 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: 0, 282 outputFormatter: console.log 283 }), 284 new web3._extend.Method({ 285 name: 'freeOSMemory', 286 call: 'debug_freeOSMemory', 287 params: 0, 288 }), 289 new web3._extend.Method({ 290 name: 'setGCPercent', 291 call: 'debug_setGCPercent', 292 params: 1, 293 }), 294 new web3._extend.Method({ 295 name: 'memStats', 296 call: 'debug_memStats', 297 params: 0, 298 }), 299 new web3._extend.Method({ 300 name: 'gcStats', 301 call: 'debug_gcStats', 302 params: 0, 303 }), 304 new web3._extend.Method({ 305 name: 'cpuProfile', 306 call: 'debug_cpuProfile', 307 params: 2 308 }), 309 new web3._extend.Method({ 310 name: 'startCPUProfile', 311 call: 'debug_startCPUProfile', 312 params: 1 313 }), 314 new web3._extend.Method({ 315 name: 'stopCPUProfile', 316 call: 'debug_stopCPUProfile', 317 params: 0 318 }), 319 new web3._extend.Method({ 320 name: 'goTrace', 321 call: 'debug_goTrace', 322 params: 2 323 }), 324 new web3._extend.Method({ 325 name: 'startGoTrace', 326 call: 'debug_startGoTrace', 327 params: 1 328 }), 329 new web3._extend.Method({ 330 name: 'stopGoTrace', 331 call: 'debug_stopGoTrace', 332 params: 0 333 }), 334 new web3._extend.Method({ 335 name: 'blockProfile', 336 call: 'debug_blockProfile', 337 params: 2 338 }), 339 new web3._extend.Method({ 340 name: 'setBlockProfileRate', 341 call: 'debug_setBlockProfileRate', 342 params: 1 343 }), 344 new web3._extend.Method({ 345 name: 'writeBlockProfile', 346 call: 'debug_writeBlockProfile', 347 params: 1 348 }), 349 new web3._extend.Method({ 350 name: 'mutexProfile', 351 call: 'debug_mutexProfile', 352 params: 2 353 }), 354 new web3._extend.Method({ 355 name: 'setMutexProfileFraction', 356 call: 'debug_setMutexProfileFraction', 357 params: 1 358 }), 359 new web3._extend.Method({ 360 name: 'writeMutexProfile', 361 call: 'debug_writeMutexProfile', 362 params: 1 363 }), 364 new web3._extend.Method({ 365 name: 'writeMemProfile', 366 call: 'debug_writeMemProfile', 367 params: 1 368 }), 369 new web3._extend.Method({ 370 name: 'traceBlock', 371 call: 'debug_traceBlock', 372 params: 2, 373 inputFormatter: [null, null] 374 }), 375 new web3._extend.Method({ 376 name: 'traceBlockFromFile', 377 call: 'debug_traceBlockFromFile', 378 params: 2, 379 inputFormatter: [null, null] 380 }), 381 new web3._extend.Method({ 382 name: 'traceBlockByNumber', 383 call: 'debug_traceBlockByNumber', 384 params: 2, 385 inputFormatter: [null, null] 386 }), 387 new web3._extend.Method({ 388 name: 'traceBlockByHash', 389 call: 'debug_traceBlockByHash', 390 params: 2, 391 inputFormatter: [null, null] 392 }), 393 new web3._extend.Method({ 394 name: 'traceTransaction', 395 call: 'debug_traceTransaction', 396 params: 2, 397 inputFormatter: [null, null] 398 }), 399 new web3._extend.Method({ 400 name: 'preimage', 401 call: 'debug_preimage', 402 params: 1, 403 inputFormatter: [null] 404 }), 405 new web3._extend.Method({ 406 name: 'getBadBlocks', 407 call: 'debug_getBadBlocks', 408 params: 0, 409 }), 410 new web3._extend.Method({ 411 name: 'storageRangeAt', 412 call: 'debug_storageRangeAt', 413 params: 5, 414 }), 415 new web3._extend.Method({ 416 name: 'getModifiedAccountsByNumber', 417 call: 'debug_getModifiedAccountsByNumber', 418 params: 2, 419 inputFormatter: [null, null], 420 }), 421 new web3._extend.Method({ 422 name: 'getModifiedAccountsByHash', 423 call: 'debug_getModifiedAccountsByHash', 424 params: 2, 425 inputFormatter:[null, null], 426 }), 427 ], 428 properties: [] 429 }); 430 ` 431 432 const Eth_JS = ` 433 web3._extend({ 434 property: 'eth', 435 methods: [ 436 new web3._extend.Method({ 437 name: 'sign', 438 call: 'eth_sign', 439 params: 2, 440 inputFormatter: [web3._extend.formatters.inputAddressFormatter, null] 441 }), 442 new web3._extend.Method({ 443 name: 'resend', 444 call: 'eth_resend', 445 params: 3, 446 inputFormatter: [web3._extend.formatters.inputTransactionFormatter, web3._extend.utils.fromDecimal, web3._extend.utils.fromDecimal] 447 }), 448 new web3._extend.Method({ 449 name: 'signTransaction', 450 call: 'eth_signTransaction', 451 params: 1, 452 inputFormatter: [web3._extend.formatters.inputTransactionFormatter] 453 }), 454 new web3._extend.Method({ 455 name: 'submitTransaction', 456 call: 'eth_submitTransaction', 457 params: 1, 458 inputFormatter: [web3._extend.formatters.inputTransactionFormatter] 459 }), 460 new web3._extend.Method({ 461 name: 'getRawTransaction', 462 call: 'eth_getRawTransactionByHash', 463 params: 1 464 }), 465 new web3._extend.Method({ 466 name: 'getRawTransactionFromBlock', 467 call: function(args) { 468 return (web3._extend.utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getRawTransactionByBlockHashAndIndex' : 'eth_getRawTransactionByBlockNumberAndIndex'; 469 }, 470 params: 2, 471 inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, web3._extend.utils.toHex] 472 }), 473 ], 474 properties: [ 475 new web3._extend.Property({ 476 name: 'pendingTransactions', 477 getter: 'eth_pendingTransactions', 478 outputFormatter: function(txs) { 479 var formatted = []; 480 for (var i = 0; i < txs.length; i++) { 481 formatted.push(web3._extend.formatters.outputTransactionFormatter(txs[i])); 482 formatted[i].blockHash = null; 483 } 484 return formatted; 485 } 486 }), 487 ] 488 }); 489 ` 490 491 const Miner_JS = ` 492 web3._extend({ 493 property: 'miner', 494 methods: [ 495 new web3._extend.Method({ 496 name: 'start', 497 call: 'miner_start', 498 params: 1, 499 inputFormatter: [null] 500 }), 501 new web3._extend.Method({ 502 name: 'stop', 503 call: 'miner_stop' 504 }), 505 new web3._extend.Method({ 506 name: 'setEtherbase', 507 call: 'miner_setEtherbase', 508 params: 1, 509 inputFormatter: [web3._extend.formatters.inputAddressFormatter] 510 }), 511 new web3._extend.Method({ 512 name: 'setExtra', 513 call: 'miner_setExtra', 514 params: 1 515 }), 516 new web3._extend.Method({ 517 name: 'setGasPrice', 518 call: 'miner_setGasPrice', 519 params: 1, 520 inputFormatter: [web3._extend.utils.fromDecimal] 521 }), 522 new web3._extend.Method({ 523 name: 'getHashrate', 524 call: 'miner_getHashrate' 525 }), 526 ], 527 properties: [] 528 }); 529 ` 530 531 const Net_JS = ` 532 web3._extend({ 533 property: 'net', 534 methods: [], 535 properties: [ 536 new web3._extend.Property({ 537 name: 'version', 538 getter: 'net_version' 539 }), 540 ] 541 }); 542 ` 543 544 const Personal_JS = ` 545 web3._extend({ 546 property: 'personal', 547 methods: [ 548 new web3._extend.Method({ 549 name: 'importRawKey', 550 call: 'personal_importRawKey', 551 params: 2 552 }), 553 new web3._extend.Method({ 554 name: 'sign', 555 call: 'personal_sign', 556 params: 3, 557 inputFormatter: [null, web3._extend.formatters.inputAddressFormatter, null] 558 }), 559 new web3._extend.Method({ 560 name: 'ecRecover', 561 call: 'personal_ecRecover', 562 params: 2 563 }), 564 new web3._extend.Method({ 565 name: 'openWallet', 566 call: 'personal_openWallet', 567 params: 2 568 }), 569 new web3._extend.Method({ 570 name: 'deriveAccount', 571 call: 'personal_deriveAccount', 572 params: 3 573 }), 574 new web3._extend.Method({ 575 name: 'signTransaction', 576 call: 'personal_signTransaction', 577 params: 2, 578 inputFormatter: [web3._extend.formatters.inputTransactionFormatter, null] 579 }), 580 ], 581 properties: [ 582 new web3._extend.Property({ 583 name: 'listWallets', 584 getter: 'personal_listWallets' 585 }), 586 ] 587 }) 588 ` 589 590 const RPC_JS = ` 591 web3._extend({ 592 property: 'rpc', 593 methods: [], 594 properties: [ 595 new web3._extend.Property({ 596 name: 'modules', 597 getter: 'rpc_modules' 598 }), 599 ] 600 }); 601 ` 602 603 const Shh_JS = ` 604 web3._extend({ 605 property: 'shh', 606 methods: [ 607 ], 608 properties: 609 [ 610 new web3._extend.Property({ 611 name: 'version', 612 getter: 'shh_version', 613 outputFormatter: web3._extend.utils.toDecimal 614 }), 615 new web3._extend.Property({ 616 name: 'info', 617 getter: 'shh_info' 618 }), 619 ] 620 }); 621 ` 622 623 const SWARMFS_JS = ` 624 web3._extend({ 625 property: 'swarmfs', 626 methods: 627 [ 628 new web3._extend.Method({ 629 name: 'mount', 630 call: 'swarmfs_mount', 631 params: 2 632 }), 633 new web3._extend.Method({ 634 name: 'unmount', 635 call: 'swarmfs_unmount', 636 params: 1 637 }), 638 new web3._extend.Method({ 639 name: 'listmounts', 640 call: 'swarmfs_listmounts', 641 params: 0 642 }), 643 ] 644 }); 645 ` 646 647 const TxPool_JS = ` 648 web3._extend({ 649 property: 'txpool', 650 methods: [], 651 properties: 652 [ 653 new web3._extend.Property({ 654 name: 'content', 655 getter: 'txpool_content' 656 }), 657 new web3._extend.Property({ 658 name: 'inspect', 659 getter: 'txpool_inspect' 660 }), 661 new web3._extend.Property({ 662 name: 'status', 663 getter: 'txpool_status', 664 outputFormatter: function(status) { 665 status.pending = web3._extend.utils.toDecimal(status.pending); 666 status.queued = web3._extend.utils.toDecimal(status.queued); 667 return status; 668 } 669 }), 670 ] 671 }); 672 `