// ==UserScript== // @name Etherscan Contract Downloader // @namespace http://tampermonkey.net/ // @version 0.1.1 // @description batch download etherscan verified contract // @author jason@trillion.fi // @match https://etherscan.io/address/* // @match https://ftmscan.com/address/* // @match https://bscscan.com/address/* // @match https://snowtrace.io/address/* // @icon https://etherscan.io/images/brandassets/etherscan-logo-circle.png // @grant unsafeWindow // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; // Your code here... let editorIds = $("[id^=editor]") let spans = $("span[class=text-secondary]") console.log(`found ${editorIds.length-1} editors`); function getAddr() { const regex = /0x[0-9A-Fa-f]{40}/g; const found = window.location.href.match(regex); return found[0] } function downloadEditor(index) { let addr = getAddr() let editor = ace.edit(editorIds[index]) let filename; try { filename = spans[index].innerText.split(":")[1].trim() } catch { filename = `${addr}.sol` } console.log(filename) let HTMLhiddenElement = document.createElement("a"); HTMLhiddenElement.href = 'data:attachment/text,' + encodeURIComponent(editor.getValue()); HTMLhiddenElement.target = '_blank'; HTMLhiddenElement.download = `${addr}-${filename}`; HTMLhiddenElement.click(); } function downloadAll() { if (editorIds.length == 1) { downloadEditor(0) return } for (let i=0;iDownload'); // })();