@usecannon/ganache
Version:
A library and cli to create a local blockchain for fast Ethereum development.
3 lines • 19.6 kB
JavaScript
!function webpackUniversalModuleDefinition(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@trufflesuite/bigint-buffer"),require("keccak"),require("emittery"),require("secp256k1"),require("abstract-leveldown"),require("leveldown"),require("abstract-level"),function webpackLoadOptionalExternalModule(){try{return require("bufferutil")}catch(e){}}(),function webpackLoadOptionalExternalModule(){try{return require("utf-8-validate")}catch(e){}}(),require("@trufflesuite/uws-js-unofficial")):"function"==typeof define&&define.amd?define(["@trufflesuite/bigint-buffer","keccak","emittery","secp256k1","abstract-leveldown","leveldown","abstract-level","bufferutil","utf-8-validate","@trufflesuite/uws-js-unofficial"],t):"object"==typeof exports?exports.Ganache=t(require("@trufflesuite/bigint-buffer"),require("keccak"),require("emittery"),require("secp256k1"),require("abstract-leveldown"),require("leveldown"),require("abstract-level"),function webpackLoadOptionalExternalModule(){try{return require("bufferutil")}catch(e){}}(),function webpackLoadOptionalExternalModule(){try{return require("utf-8-validate")}catch(e){}}(),require("@trufflesuite/uws-js-unofficial")):e.Ganache=t(e["@trufflesuite/bigint-buffer"],e.keccak,e.emittery,e.secp256k1,e["abstract-leveldown"],e.leveldown,e["abstract-level"],e.bufferutil,e["utf-8-validate"],e["@trufflesuite/uws-js-unofficial"])}(global,(function(e,t,r,o,a,n,i,s,c,u){return(()=>{var l,d,p={827:e=>{function webpackEmptyContext(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}webpackEmptyContext.keys=()=>[],webpackEmptyContext.resolve=webpackEmptyContext,webpackEmptyContext.id=827,e.exports=webpackEmptyContext},820:e=>{function webpackEmptyContext(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}webpackEmptyContext.keys=()=>[],webpackEmptyContext.resolve=webpackEmptyContext,webpackEmptyContext.id=820,e.exports=webpackEmptyContext},559:e=>{function webpackEmptyContext(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}webpackEmptyContext.keys=()=>[],webpackEmptyContext.resolve=webpackEmptyContext,webpackEmptyContext.id=559,e.exports=webpackEmptyContext},821:e=>{function webpackEmptyContext(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}webpackEmptyContext.keys=()=>[],webpackEmptyContext.resolve=webpackEmptyContext,webpackEmptyContext.id=821,e.exports=webpackEmptyContext},296:function(e,t,r){"use strict";var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.expandArgs=t.parseArgs=void 0;const a=r(50),n=o(r(202)),i=o(r(43)),s=r(18),c=r(298),u=r(140),l="Need more help? Reach out to the Truffle community at",d="https://trfl.io/support",p="or check out our docs at",f="https://ganache.dev";function expandArgs(e){const t={};for(const r in e)if(-1===r.indexOf("-")){const[o,a]=r.split(/\.(.+)/);a&&(t[o]||(t[o]={}),t[o][a]=e[r])}return t}t.parseArgs=(e,t=process.argv.slice(2))=>{"filecoin"!==t[0]&&"ethereum"!==t[0]||(t[1],t[0],t.unshift("--flavor"));const r=i.default`{hex("${a.TruffleColors.porsche}").bold ${(0,u.center)(e,e.length)}}`;n.default.parserConfiguration({"dot-notation":!1}).strict().usage(r).epilogue(r+s.EOL+s.EOL+(0,u.center)(i.default`{hex("${a.TruffleColors.porsche}").bold ${l}} {hex("${a.TruffleColors.turquoise}") ${d}}`,(l+" "+d).length)+s.EOL+(0,u.center)(i.default`{hex("${a.TruffleColors.porsche}").bold ${p}} {hex("${a.TruffleColors.turquoise}") ${f}}`,(p+" "+f).length));const{flavor:o,options:_}=(0,c.loadFlavorFromArgs)(t);(0,c.configureStartCommandForFlavor)(n.default,o,_),n.default.command("instances",(0,u.highlight)("Manage instances of Ganache running in detached mode."+s.EOL+"(Ganache can be run in detached mode by providing the `--detach` flag)"),(e=>{e.command("list","List instances running in detached mode",(e=>{}),(e=>{e.action="list"})).command("stop <name>","Stop the instance specified by <name>",(e=>{e.positional("name",{type:"string"})}),(e=>{e.action="stop"})).version(!1)}),(function(){const e=i.default`{hex("${a.TruffleColors.porsche}") ganache instances}`;console.log(`Missing subcommand for ${e}.`),console.log(),n.default.showHelp(),n.default.exit(1,new Error("No subcommand provided"))})).showHelpOnFail(!1).alias("help","?").wrap(u.wrapWidth).version(e);const h=n.default.parse(t);let m;if("stop"===h.action)m={action:"stop",name:h.name};else if("list"===h.action)m={action:"list"};else{if("start"!==h.action&&"start-detached"!==h.action)throw new Error(`Unknown action: ${h.action}`);{const e=h.action;m={flavor:h.flavor||"ethereum",action:e,...expandArgs(h)}}}return m},t.expandArgs=expandArgs},300:function(e,t,r){"use strict";var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.formatUptime=t.getDetachedInstances=t.startDetachedInstance=t.stopDetachedInstance=t.removeDetachedInstanceFile=t.notifyDetachedInstanceReady=void 0;const a=r(212),n=o(r(825)),i=o(r(201)),s=o(r(527)),c=r(9),{readFile:u,mkdir:l,readdir:d,rmdir:p,writeFile:f,unlink:_}=c.promises,h=o(r(14)),m="utf8",b="An error occurred spawning a detached instance of Ganache:",w=(0,i.default)("Ganache/instances",{suffix:""}).data;function getInstanceFilePath(e){return h.default.join(w,`${e}.json`)}async function removeDetachedInstanceFile(e){const t=getInstanceFilePath(e);try{return await _(t),!0}catch{}return!1}async function getDetachedInstanceByName(e){const t=getInstanceFilePath(e),r=await u(t,m);return JSON.parse(r)}t.notifyDetachedInstanceReady=function notifyDetachedInstanceReady(e){process.send(e)},t.removeDetachedInstanceFile=removeDetachedInstanceFile,t.stopDetachedInstance=async function stopDetachedInstance(e){try{const t=await getDetachedInstanceByName(e);process.kill(t.pid,"SIGTERM")}catch(e){return!1}finally{await removeDetachedInstanceFile(e)}return!0},t.startDetachedInstance=async function startDetachedInstance(e,t,r){const[o,i,...s]=e,c=[...s,"--no-detach"],u=(0,a.fork)(i,c,{stdio:["ignore","ignore","pipe","ipc"],detached:!0});u.stderr.pipe(process.stderr);const{port:d,host:p}=await new Promise(((e,t)=>{u.once("message",e),u.on("error",(e=>{console.error(`${b}\n${e.message}`),process.exitCode=1,t(e)})),u.on("exit",(e=>{process.exitCode=0===e?1:e,t(new Error(`${b}\nThe detached instance exited with error code: ${e}`))}))}));u.stderr.destroy(),u.unref(),u.disconnect();const _=t.flavor,g="win32"===process.platform?h.default.basename(process.execPath):[process.execPath,...process.execArgv,i,...c].join(" "),v=u.pid,y={startTime:Date.now(),pid:v,name:(0,n.default)(),host:p,port:d,flavor:_,cmd:g,version:r};for(;;){const e=getInstanceFilePath(y.name);try{await f(e,JSON.stringify(y),{flag:"wx",encoding:m});break}catch(e){switch(e.code){case"EEXIST":y.name=(0,n.default)();break;case"ENOENT":await l(w,{recursive:!0});break;default:throw e}}}return y},t.getDetachedInstances=async function getDetachedInstances(){let e,t,r=!1;try{[e,t]=await Promise.all([d(w,{withFileTypes:!0}),(0,s.default)()])}catch(e){if("ENOENT"!==e.code)throw e;return[]}const o=[],a=e.map((async e=>{const a=e.name,{name:n,ext:i}=h.default.parse(a);let s;if(".json"!==i)s=`"${a}" does not have a .json extension`;else{let e;try{e=await getDetachedInstanceByName(n)}catch(e){s=e.message}if(e){const r=t.find((t=>t.pid===e.pid));r?r.cmd!==e.cmd?s=`Process with PID ${e.pid} does not match ${n}`:o.push(e):s=`Process with PID ${e.pid} could not be found`}}if(void 0!==s){r=!0;const t=h.default.join(w,a);let o;if(e.isDirectory()){const e=`"${a}" is a directory`;try{await p(t,{recursive:!0}),s=e}catch{o=`"${a}" could not be removed`}}else try{await _(t)}catch{o=`"${a}" could not be removed`}console.warn(`Failed to load instance data. ${s}. ${o||`"${a}" has been removed`}.`)}}));return await Promise.all(a),r&&console.warn("If this keeps happening, please open an issue at https://github.com/trufflesuite/ganache/issues/new\n"),o},t.formatUptime=function formatUptime(e){if(e>-1e3&&e<1e3)return"Just started";const t=e<0;e=Math.abs(e);const r={d:Math.floor(e/864e5),h:Math.floor(e/36e5)%24,m:Math.floor(e/6e4)%60,s:Math.floor(e/1e3)%60},o=Object.entries(r).filter((e=>0!==e[1])).map((([e,t])=>`${t}${e}`)).join(" ");return t?`In ${o}`:o}},298:function(e,t,r){"use strict";var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.configureStartCommandForFlavor=t.loadFlavorFromArgs=void 0;const a=r(75),n=o(r(43)),i=r(140);t.loadFlavorFromArgs=function loadFlavorFromArgs(e){const t=e.indexOf("--flavor")+1;if(t>0){const r=e[t];if(!r)throw new Error("No flavor specified after `--flavor` flag.");if("ethereum"!==r)return(0,a.load)("filecoin"===r?"@ganache/filecoin":r)}return r(85).default},t.configureStartCommandForFlavor=function configureStartCommandForFlavor(e,t,r){e.command(["$0"],n.default`Use the {bold ${t}} flavor of Ganache`,(e=>{const t={...a.cliDefaults,...r?.cli?.defaults},o={...a.serverDefaults,...r?.server?.defaults};r&&r.provider&&(0,i.applyDefaults)(r.provider.defaults,e),(0,i.applyDefaults)(t,e),(0,i.applyDefaults)(o,e),function addFlavorFlag(e){e.option("flavor",{type:"string",description:n.default`Load an installed npm package as a Ganache flavor, e.g., {bold ganache --flavor @ganache/filecoin}.`})}(e),function addDetachFlag(e){e.option("detach",{type:"boolean",description:"Run Ganache in detached (daemon) mode.\nSee `ganache instances --help` for information on managing detached instances.",alias:["D","\u{1f608}"]})}(e)}),(e=>e.action=e.detach?"start-detached":"start"))}},140:function(e,t,r){"use strict";var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.center=t.highlight=t.applyDefaults=t.wrapWidth=void 0;const a=r(248),n=o(r(466)),i=o(r(43)),s=o(r(202)),c=r(18),u=r(50);a.marked.setOptions({renderer:new n.default({codespan:i.default.hex(u.TruffleColors.porsche),unescape:!1})}),t.wrapWidth=Math.min(120,s.default.terminalWidth());t.applyDefaults=function applyDefaults(e,t){for(const r in e){const o=`${r[0].toUpperCase()}${r.slice(1)}:`,a=e[r],n={};for(const e in a){addOption(n,r,o,e,a[e],t)}}};t.highlight=e=>function unescapeEntities(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/\*\#COLON\|\*/g,":")}(a.marked.parseInline(e));function addOption(e,r,o,a,n,s){if(!0!==n.disableInCLI){const u=[],l=[];let d=(0,t.highlight)(n.cliDescription||"");n.cliAliases&&(n.cliAliases.forEach((e=>{1===e.length?u.push(e):l.push(e)})),d=i.default`${d}${c.EOL}{dim deprecated aliases: ${l.map((e=>`--${e}`)).join(", ")}}`);const generateDefaultDescription=()=>e[a]=n.default?n.default(e).toString():void 0,p="defaultDescription"in n?n.defaultDescription:generateDefaultDescription(),{cliType:f}=n,_=f&&f.startsWith("array:"),h=_?f.slice(6):f,m={group:o,description:d,alias:u,defaultDescription:p,array:_,type:h,choices:n.cliChoices,coerce:n.cliCoerce,implies:n.implies},b=`${r}.${a}`;s=((e,t,r)=>{const o={hidden:!0,alias:r};return t.reduce(((e,t)=>e.option(t,o)),e)})(s,l,b),s=s.option(b,m)}}t.center=(e,r)=>" ".repeat(Math.max(0,Math.floor((t.wrapWidth-r)/2)))+e},825:(e,t)=>{"use strict";function pick(e){return e[Math.floor(Math.random()*e.length)]}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function createInstanceName(){return`${pick(r)}_${pick(o)}_${pick(a)}`};const r=["baked","candied","deepfried","frozen","hot","molten","pureed","salted","spiced","sticky"],o=["almond","apple","banana","blackforest","caramel","cherry","chocolate","cinnamon","coconut","coffee","cream","custard","fruit","ginger","gingerbread","jelly","lemon","lime","milk","nut","orange","peanut","plum","poppyseed","rhubarb","strawberry","sugar","tiramisu"],a=["bar","biscuit","brownie","cake","cheesecake","cookie","crumble","cupcake","doughnut","drizzle","dumpling","friand","ganache","loaf","macaroon","mousse","muffin","pastry","pie","pudding","sponge","strudel","tart","torte","trifle","truffle","waffle"]},230:function(e,t,r){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r);var a=Object.getOwnPropertyDescriptor(t,r);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,o,a)}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&o(t,e,r);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=n(r(141)),c=r(296),u=r(75),l=r(300),d=r(50),p=i(r(549)),f=i(r(43)),_=f.default.hex(d.TruffleColors.porsche),logAndForceExit=(e,t=0)=>{process.stdout._handle&&process.stdout._handle.setBlocking(!0);try{e.forEach((e=>console.log(e)))}catch(e){console.log(e)}process.exit(t)},h="7.9.2",m=`ganache v${h} (@ganache/cli: 0.10.2, @ganache/core: 0.10.2)`,b=(0,c.parseArgs)(m);if("start"===b.action){const e=b.flavor;let t,o,{server:a}=u.CliOptionsConfig.normalize(b);"ethereum"===e?t=r(85).default:(t=(0,u.load)(e),t.options.cli&&Object.assign(a,t.options.cli.normalize(b))),console.log(m);try{o=s.default.server(b)}catch(e){console.error(e.message),process.exit(1)}let n=!1;process.on("uncaughtException",(function(e){logAndForceExit(n?[e]:[e.stack],1)}));let i=!1;const handleSignal=async e=>{console.log(`\nReceived shutdown signal: ${e}`),closeHandler()},closeHandler=async()=>{try{switch(o.status){case s.ServerStatus.opening:return i=!0,void console.log("Server is currently starting; waiting\u2026");case s.ServerStatus.open:console.log("Shutting down\u2026"),await o.close(),console.log("Server has been shut down")}process.exitCode=0}catch(e){logAndForceExit(["\nReceived an error while attempting to shut down the server: ",e.stack||e],1)}};if("win32"===process.platform){const e=r(829).createInterface({input:process.stdin,output:process.stdout}).on("SIGINT",(()=>{e.close(),handleSignal("SIGINT")}))}process.on("SIGINT",handleSignal),process.on("SIGTERM",handleSignal),process.on("SIGHUP",handleSignal),console.log("Starting RPC server"),o.listen(a.port,a.host,(async e=>{if(e)return console.error(e),void(process.exitCode=1);if(i)return void closeHandler();n=!0,await t.ready({provider:o.provider,options:{server:a}});void 0!==process.send&&(0,l.notifyDetachedInstanceReady)(a)}))}else if("stop"===b.action){const e=b.name;(0,l.stopDetachedInstance)(e).then((e=>{e?console.log("Instance stopped"):console.error("Instance not found")}))}else"start-detached"===b.action?(0,l.startDetachedInstance)(process.argv,b,h).then((e=>{const t=_(e.name);console.log(t)})).catch((e=>{})):"list"===b.action&&(0,l.getDetachedInstances)().then((e=>{if(0===e.length)console.log(`No detached instances found - try ${_("ganache --detach")} to start a detached instance`);else{const t=Date.now(),r=new p.default({head:[f.default.bold("PID"),f.default.bold("Name"),f.default.bold("Flavor"),f.default.bold("Version"),f.default.bold("Host"),f.default.bold("Uptime")],colAligns:["right","left","left","left","left","right"],style:{head:["white","white","white","white","white","white"]}});e.sort(((e,t)=>t.startTime-e.startTime));for(let o=0;o<e.length;o++){const a=e[o],n=t-a.startTime;r.push([a.pid.toString(),_(a.name),a.flavor,a.version,`${a.host}:${a.port.toString()}`,(0,l.formatUptime)(n)])}console.log(r.toString())}}))},819:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(230)},31:e=>{"use strict";e.exports=require("assert")},21:e=>{"use strict";e.exports=require("buffer")},212:e=>{"use strict";e.exports=require("child_process")},10:e=>{"use strict";e.exports=require("crypto")},30:e=>{"use strict";e.exports=require("events")},9:e=>{"use strict";e.exports=require("fs")},123:e=>{"use strict";e.exports=require("http")},124:e=>{"use strict";e.exports=require("https")},80:e=>{"use strict";e.exports=require("net")},18:e=>{"use strict";e.exports=require("os")},14:e=>{"use strict";e.exports=require("path")},826:e=>{"use strict";e.exports=require("process")},829:e=>{"use strict";e.exports=require("readline")},26:e=>{"use strict";e.exports=require("stream")},125:e=>{"use strict";e.exports=require("tls")},331:e=>{"use strict";e.exports=require("tty")},109:e=>{"use strict";e.exports=require("url")},6:e=>{"use strict";e.exports=require("util")},269:e=>{"use strict";e.exports=require("worker_threads")},443:e=>{"use strict";e.exports=require("zlib")},148:t=>{"use strict";t.exports=e},454:e=>{"use strict";e.exports=u},420:e=>{"use strict";e.exports=i},51:e=>{"use strict";e.exports=a},444:e=>{"use strict";if(void 0===s){var t=new Error("Cannot find module 'bufferutil'");throw t.code="MODULE_NOT_FOUND",t}e.exports=s},29:e=>{"use strict";e.exports=r},150:e=>{"use strict";e.exports=t},190:e=>{"use strict";e.exports=n},283:e=>{"use strict";e.exports=o},446:e=>{"use strict";if(void 0===c){var t=new Error("Cannot find module 'utf-8-validate'");throw t.code="MODULE_NOT_FOUND",t}e.exports=c}},f={};function __webpack_require__(e){var t=f[e];if(void 0!==t)return t.exports;var r=f[e]={id:e,loaded:!1,exports:{}};return p[e].call(r.exports,r,r.exports,__webpack_require__),r.loaded=!0,r.exports}return __webpack_require__.m=p,__webpack_require__.c=f,__webpack_require__.x=()=>{var e=__webpack_require__.O(void 0,[0,4,1],(()=>__webpack_require__(__webpack_require__.s=819)));return e=__webpack_require__.O(e)},__webpack_require__.amdD=function(){throw new Error("define cannot be used indirect")},__webpack_require__.amdO={},l=[],__webpack_require__.O=(e,t,r,o)=>{if(!t){var a=1/0;for(c=0;c<l.length;c++){for(var[t,r,o]=l[c],n=!0,i=0;i<t.length;i++)(!1&o||a>=o)&&Object.keys(__webpack_require__.O).every((e=>__webpack_require__.O[e](t[i])))?t.splice(i--,1):(n=!1,o<a&&(a=o));if(n){l.splice(c--,1);var s=r();void 0!==s&&(e=s)}}return e}o=o||0;for(var c=l.length;c>0&&l[c-1][2]>o;c--)l[c]=l[c-1];l[c]=[t,r,o]},__webpack_require__.d=(e,t)=>{for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.f={},__webpack_require__.e=e=>Promise.all(Object.keys(__webpack_require__.f).reduce(((t,r)=>(__webpack_require__.f[r](e,t),t)),[])),__webpack_require__.u=e=>e+".js",__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e={2:1};__webpack_require__.O.require=t=>e[t];__webpack_require__.f.require=(t,r)=>{e[t]||(t=>{var r=t.modules,o=t.ids,a=t.runtime;for(var n in r)__webpack_require__.o(r,n)&&(__webpack_require__.m[n]=r[n]);a&&a(__webpack_require__);for(var i=0;i<o.length;i++)e[o[i]]=1;__webpack_require__.O()})(require("./"+__webpack_require__.u(t)))}})(),d=__webpack_require__.x,__webpack_require__.x=()=>(__webpack_require__.e(0),__webpack_require__.e(4),__webpack_require__.e(1),d()),__webpack_require__.x()})()}));
//# sourceMappingURL=cli.js.map