Etherscan Contract Downloader

batch download etherscan verified contract

Verze ze dne 30. 01. 2022. Zobrazit nejnovější verzi.

  1. // ==UserScript==
  2. // @name Etherscan Contract Downloader
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description batch download etherscan verified contract
  6. // @author jason@trillion.fi
  7. // @match https://etherscan.io/address/*
  8. // @icon https://etherscan.io/images/brandassets/etherscan-logo-circle.png
  9. // @grant unsafeWindow
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13.  
  14.  
  15. (function() {
  16. 'use strict';
  17.  
  18. // Your code here...
  19. let editorIds = $("[id^=editor]")
  20. let spans = $("span[class=text-secondary]")
  21.  
  22. console.log(`found ${editorIds.length-1} editors`);
  23.  
  24.  
  25. function getAddr() {
  26. const regex = /0x[0-9A-Fa-f]{40}/g;
  27. const found = window.location.href.match(regex);
  28. return found[0]
  29. }
  30.  
  31. function downloadEditor(index) {
  32. let addr = getAddr()
  33. let editor = ace.edit(editorIds[index])
  34. let filename;
  35. try {
  36. filename = spans[index].innerText.split(":")[1].trim()
  37. } catch {
  38. filename = `${addr}.sol`
  39. }
  40. console.log(filename)
  41. let HTMLhiddenElement = document.createElement("a");
  42. HTMLhiddenElement.href = 'data:attachment/text,' + encodeURIComponent(editor.getValue());
  43. HTMLhiddenElement.target = '_blank';
  44. HTMLhiddenElement.download = `${addr}-${filename}`;
  45. HTMLhiddenElement.click();
  46. }
  47.  
  48. function downloadAll() {
  49. if (editorIds.length == 1) {
  50. downloadEditor(0)
  51. return
  52. }
  53. for (let i=0;i<editorIds.length-1;i++) {
  54. downloadEditor(i)
  55. }
  56. }
  57.  
  58. if(!unsafeWindow.downloadAll)
  59. {
  60. unsafeWindow.downloadAll = downloadAll;
  61. }
  62.  
  63. $("#nav_subtabs").append('<li><a class="nav-link show" href="#download" data-toggle="tab" onclick="javascript:downloadAll();"><span>Download</span></a></li>');
  64. //
  65. })();