UNPKG

@ordao/ethers-decode-error

Version:

Decode ethers.js smart contract errors into human-readable messages

3 lines (2 loc) 7.58 kB
!function(r,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("ethers")):"function"==typeof define&&define.amd?define(["exports","ethers"],e):e((r||self).ethersDecodeError={},r.ethers)}(this,function(r,e){var n;function t(r,e){(null==e||e>r.length)&&(e=r.length);for(var n=0,t=Array(e);n<e;n++)t[n]=r[n];return t}function o(){return o=Object.assign?Object.assign.bind():function(r){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var t in n)({}).hasOwnProperty.call(n,t)&&(r[t]=n[t])}return r},o.apply(null,arguments)}r.ErrorType=void 0,(n=r.ErrorType||(r.ErrorType={})).EmptyError="EmptyError",n.RevertError="RevertError",n.PanicError="PanicError",n.CustomError="CustomError",n.UserRejectError="UserRejectError",n.RpcError="RpcError",n.UnknownError="UnknownError";var a="0x08c379a0",i="0x4e487b71",u=function(r,e){return r&&""!==r.trim()?r:e},c=function(r){var n=r.data,t=r.fragment,a=r.args,i=r.selector,c=r.name,s={type:r.type,reason:u(r.reason,null),data:null!=n?n:null,fragment:null,args:null!=a?a:new e.Result,selector:null!=i?i:null,name:null!=c?c:null,signature:null};return t&&(s=o({},s,new e.ErrorDescription(t,t.selector,a))),s},s=function(e){var n=e.data,t=e.name;return c({type:r.ErrorType.UnknownError,reason:u(e.reason,"Unknown error"),data:n,name:t})},l=/*#__PURE__*/function(){function e(){}var n=e.prototype;return n.predicate=function(r){return"0x"===r},n.handle=function(e){return c({type:r.ErrorType.EmptyError,data:{data:e}.data})},e}(),d=/*#__PURE__*/function(){function n(){}var t=n.prototype;return t.predicate=function(r){return null==r?void 0:r.startsWith(a)},t.handle=function(n){var t,o=n.slice(10),a=new e.AbiCoder;try{var i=e.ErrorFragment.from("Error(string)"),u=a.decode(i.inputs,"0x"+o);return c({type:r.ErrorType.RevertError,reason:(t={data:n,fragment:i,reason:u[0],args:u}).reason,data:t.data,fragment:t.fragment,args:t.args})}catch(r){return s({reason:"Unknown error returned",data:n})}},n}(),f=/*#__PURE__*/function(){function n(){}var t=n.prototype;return t.predicate=function(r){return null==r?void 0:r.startsWith(i)},t.handle=function(n){var t,o=n.slice(10),a=new e.AbiCoder;try{var i,u=e.ErrorFragment.from("Panic(uint256)"),l=a.decode(u.inputs,"0x"+o),d=null!=(i=function(r){switch(r){case 0x0n:return"Generic compiler inserted panic";case 0x1n:return"Assertion error";case 0x11n:return"Arithmetic operation underflowed or overflowed outside of an unchecked block";case 0x12n:return"Division or modulo division by zero";case 0x21n:return"Tried to convert a value into an enum, but the value was too big or negative";case 0x22n:return"Incorrectly encoded storage byte array";case 0x31n:return".pop() was called on an empty array";case 0x32n:return"Array accessed at an out-of-bounds or negative index";case 0x41n:return"Too much memory was allocated, or an array was created that is too large";case 0x51n:return"Called a zero-initialized variable of internal function type"}}(l[0]))?i:"Unknown panic code";return c({type:r.ErrorType.PanicError,reason:(t={data:n,fragment:u,reason:d,args:l}).reason,data:t.data,args:t.args})}catch(r){return s({reason:"Unknown panic error",data:n})}},n}(),p=/*#__PURE__*/function(){function e(){}var n=e.prototype;return n.predicate=function(r){return r&&"0x"!==r&&!(null!=r&&r.startsWith(a))&&!(null!=r&&r.startsWith(i))},n.handle=function(e,n){var t=n.errorInterface,a={data:e};if(t){var i=t.parseError(e);i&&(a=o({},a,{fragment:i.fragment,reason:i.name,args:i.args}))}return function(e){var n=e.data,t=e.reason,o=e.fragment,a=e.args,i=n.slice(0,10);return c({type:r.ErrorType.CustomError,reason:u(t,"No ABI for custom error "+i),data:n,fragment:o,args:a,selector:i,name:i})}(a)},e}(),v=/*#__PURE__*/function(){function e(){}var n=e.prototype;return n.predicate=function(r,e){var n;return!r&&(null==e||null==(n=e.message)?void 0:n.includes("rejected transaction"))},n.handle=function(e,n){var t,o,a,i;return i=void 0===(a=(o={data:null,reason:null!=(t=n.error.message)?t:"The transaction was rejected"}).data)?null:a,c({type:r.ErrorType.UserRejectError,reason:u(o.reason,"User has rejected the transaction"),data:i})},e}(),m=/*#__PURE__*/function(){function e(){}var n=e.prototype;return n.predicate=function(r,e){var n;return!r&&e.message&&!(null!=e&&null!=(n=e.message)&&n.includes("rejected transaction"))&&void 0!==e.code},n.handle=function(e,n){var t,o,a,i,s,l,d=n.error,f=null!=(t=null!=(o=null==(a=d.info)||null==(a=a.error)?void 0:a.message)?o:d.shortMessage)?t:d.message;return l=(i={data:null,name:d.code,reason:f}).name,c({type:r.ErrorType.RpcError,reason:u(i.reason,"Error from JSON RPC provider"),data:null,name:null!=(s=null==l?void 0:l.toString())?s:null})},e}();r.ErrorDecoder=/*#__PURE__*/function(){function r(r,e){this.errorInterface=void 0,this.errorHandlers=[],this.errorInterface=e,this.errorHandlers=r.map(function(r){return{predicate:r.predicate,handle:r.handle}})}var n=r.prototype;return n.getContractOrTransactionError=function(r){try{var e=r.receipt;return e?Promise.resolve(this.getTransactionError(e)).then(function(e){return e||r}):Promise.resolve(r)}catch(r){return Promise.reject(r)}},n.getTransactionError=function(r){try{if(!r||0!==r.status)return Promise.resolve(void 0);var e=r.provider;return Promise.resolve(e.getTransaction(r.hash)).then(function(r){return function(){try{var n=Promise.resolve(e.call(o({},r,{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0}))).then(function(){return null})}catch(r){return r}return n&&n.then?n.then(void 0,function(r){return r}):n}()})}catch(r){return Promise.reject(r)}},n.getDataFromError=function(r){var e,n,t=null!=(e=r.data)?e:null==(n=r.error)?void 0:n.data;if(void 0!==t){var o="string"==typeof t?t:t.data;if("object"==typeof o&&o.data&&(o=o.data),void 0!==o&&"string"==typeof o)return o}},n.decodeError=function(r,e){for(var n,o,a=function(r){var e="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(e)return(e=e.call(r)).next.bind(e);if(Array.isArray(r)||(e=function(r,e){if(r){if("string"==typeof r)return t(r,e);var n={}.toString.call(r).slice(8,-1);return"Object"===n&&r.constructor&&(n=r.constructor.name),"Map"===n||"Set"===n?Array.from(r):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?t(r,e):void 0}}(r))){e&&(r=e);var n=0;return function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.errorHandlers);!(o=a()).done;){var i=o.value,u=i.handle;if((0,i.predicate)(r,e))return u(r,{errorInterface:this.errorInterface,error:e})}return s({data:r,reason:null!=(n=null==e?void 0:e.message)?n:"Unexpected error",name:null==e?void 0:e.name})},n.decodeReturnData=function(r){return this.decodeError(r,new Error)},n.decode=function(r){try{var e,n=this;return r instanceof Error?Promise.resolve(n.getContractOrTransactionError(r)).then(function(r){var e=n.getDataFromError(r);return n.decodeError(e,r)}):Promise.resolve(s({data:void 0,reason:null!=(e=r.message)?e:"Invalid error"}))}catch(r){return Promise.reject(r)}},r.create=function(n,t){void 0===t&&(t={});var o,a=t.additionalErrorHandlers;if(n){var i=n.flatMap(function(r){return r instanceof e.Interface?r.fragments.filter(function(r){return e.ErrorFragment.isFragment(r)}):r.filter(function(r){return"error"===r.type||e.ErrorFragment.isFragment(r)})});o=new e.Interface(i)}return new r([new l,new d,new f,new p,new v,new m].concat(null!=a?a:[]),o)},r}(),r.PACKAGE_VERSION="1.2.2"}); //# sourceMappingURL=index.umd.js.map