@ordao/ethers-decode-error
Version:
Decode ethers.js smart contract errors into human-readable messages
3 lines (2 loc) • 7.46 kB
JavaScript
!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){function n(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 t(){return t=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},t.apply(null,arguments)}var a,o="0x08c379a0",i="0x4e487b71";!function(r){r.EmptyError="EmptyError",r.RevertError="RevertError",r.PanicError="PanicError",r.CustomError="CustomError",r.UserRejectError="UserRejectError",r.RpcError="RpcError",r.UnknownError="UnknownError"}(a||(a={}));var u=function(r,e){return r&&""!==r.trim()?r:e},c=function(r){var n=r.data,a=r.fragment,o=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!=o?o:new e.Result,selector:null!=i?i:null,name:null!=c?c:null,signature:null};return a&&(s=t({},s,new e.ErrorDescription(a,a.selector,o))),s},s=function(r){var e=r.data,n=r.name;return c({type:a.UnknownError,reason:u(r.reason,"Unknown error"),data:e,name:n})},l=/*#__PURE__*/function(){function r(){}var e=r.prototype;return e.predicate=function(r){return"0x"===r},e.handle=function(r){return c({type:a.EmptyError,data:{data:r}.data})},r}(),d=/*#__PURE__*/function(){function r(){}var n=r.prototype;return n.predicate=function(r){return null==r?void 0:r.startsWith(o)},n.handle=function(r){var n,t=r.slice(10),o=new e.AbiCoder;try{var i=e.ErrorFragment.from("Error(string)"),u=o.decode(i.inputs,"0x"+t);return c({type:a.RevertError,reason:(n={data:r,fragment:i,reason:u[0],args:u}).reason,data:n.data,fragment:n.fragment,args:n.args})}catch(e){return s({reason:"Unknown error returned",data:r})}},r}(),f=/*#__PURE__*/function(){function r(){}var n=r.prototype;return n.predicate=function(r){return null==r?void 0:r.startsWith(i)},n.handle=function(r){var n,t=r.slice(10),o=new e.AbiCoder;try{var i,u=e.ErrorFragment.from("Panic(uint256)"),l=o.decode(u.inputs,"0x"+t),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:a.PanicError,reason:(n={data:r,fragment:u,reason:d,args:l}).reason,data:n.data,args:n.args})}catch(e){return s({reason:"Unknown panic error",data:r})}},r}(),v=/*#__PURE__*/function(){function r(){}var e=r.prototype;return e.predicate=function(r){return r&&"0x"!==r&&!(null!=r&&r.startsWith(o))&&!(null!=r&&r.startsWith(i))},e.handle=function(r,e){var n=e.errorInterface,o={data:r};if(n){var i=n.parseError(r);i&&(o=t({},o,{fragment:i.fragment,reason:i.name,args:i.args}))}return function(r){var e=r.data,n=r.reason,t=r.fragment,o=r.args,i=e.slice(0,10);return c({type:a.CustomError,reason:u(n,"No ABI for custom error "+i),data:e,fragment:t,args:o,selector:i,name:i})}(o)},r}(),m=/*#__PURE__*/function(){function r(){}var e=r.prototype;return e.predicate=function(r,e){var n;return!r&&(null==e||null==(n=e.message)?void 0:n.includes("rejected transaction"))},e.handle=function(r,e){var n,t,o,i;return i=void 0===(o=(t={data:null,reason:null!=(n=e.error.message)?n:"The transaction was rejected"}).data)?null:o,c({type:a.UserRejectError,reason:u(t.reason,"User has rejected the transaction"),data:i})},r}(),p=/*#__PURE__*/function(){function r(){}var e=r.prototype;return e.predicate=function(r,e){var n;return!r&&e.message&&!(null!=e&&null!=(n=e.message)&&n.includes("rejected transaction"))&&void 0!==e.code},e.handle=function(r,e){var n,t,o,i,s,l,d=e.error,f=null!=(n=null!=(t=null==(o=d.info)||null==(o=o.error)?void 0:o.message)?t:d.shortMessage)?n:d.message;return l=(i={data:null,name:d.code,reason:f}).name,c({type:a.RpcError,reason:u(i.reason,"Error from JSON RPC provider"),data:null,name:null!=(s=null==l?void 0:l.toString())?s:null})},r}();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 a=r.prototype;return a.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)}},a.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(t({},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)}},a.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 a="string"==typeof t?t:t.data;if("object"==typeof a&&a.data&&(a=a.data),void 0!==a&&"string"==typeof a)return a}},a.decodeError=function(r,e){for(var t,a,o=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 n(r,e);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(r,e):void 0}}(r))){e&&(r=e);var t=0;return function(){return t>=r.length?{done:!0}:{done:!1,value:r[t++]}}}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);!(a=o()).done;){var i=a.value,u=i.handle;if((0,i.predicate)(r,e))return u(r,{errorInterface:this.errorInterface,error:e})}return s({data:r,reason:null!=(t=null==e?void 0:e.message)?t:"Unexpected error",name:null==e?void 0:e.name})},a.decodeReturnData=function(r){return this.decodeError(r,new Error)},a.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 a,o=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)})});a=new e.Interface(i)}return new r([new l,new d,new f,new v,new m,new p].concat(null!=o?o:[]),a)},r}()});
//# sourceMappingURL=error-decoder.umd.js.map