UNPKG

@ordao/ethers-decode-error

Version:

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

3 lines (2 loc) 7.26 kB
var r=require("ethers");function e(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 n(){return n=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},n.apply(null,arguments)}var t,a="0x08c379a0",o="0x4e487b71";!function(r){r.EmptyError="EmptyError",r.RevertError="RevertError",r.PanicError="PanicError",r.CustomError="CustomError",r.UserRejectError="UserRejectError",r.RpcError="RpcError",r.UnknownError="UnknownError"}(t||(t={}));var i=function(r,e){return r&&""!==r.trim()?r:e},u=function(e){var t=e.data,a=e.fragment,o=e.args,u=e.selector,c=e.name,s={type:e.type,reason:i(e.reason,null),data:null!=t?t:null,fragment:null,args:null!=o?o:new r.Result,selector:null!=u?u:null,name:null!=c?c:null,signature:null};return a&&(s=n({},s,new r.ErrorDescription(a,a.selector,o))),s},c=function(r){var e=r.data,n=r.name;return u({type:t.UnknownError,reason:i(r.reason,"Unknown error"),data:e,name:n})},s=/*#__PURE__*/function(){function r(){}var e=r.prototype;return e.predicate=function(r){return"0x"===r},e.handle=function(r){return u({type:t.EmptyError,data:{data:r}.data})},r}(),l=/*#__PURE__*/function(){function e(){}var n=e.prototype;return n.predicate=function(r){return null==r?void 0:r.startsWith(a)},n.handle=function(e){var n,a=e.slice(10),o=new r.AbiCoder;try{var i=r.ErrorFragment.from("Error(string)"),s=o.decode(i.inputs,"0x"+a);return u({type:t.RevertError,reason:(n={data:e,fragment:i,reason:s[0],args:s}).reason,data:n.data,fragment:n.fragment,args:n.args})}catch(r){return c({reason:"Unknown error returned",data:e})}},e}(),d=/*#__PURE__*/function(){function e(){}var n=e.prototype;return n.predicate=function(r){return null==r?void 0:r.startsWith(o)},n.handle=function(e){var n,a=e.slice(10),o=new r.AbiCoder;try{var i,s=r.ErrorFragment.from("Panic(uint256)"),l=o.decode(s.inputs,"0x"+a),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 u({type:t.PanicError,reason:(n={data:e,fragment:s,reason:d,args:l}).reason,data:n.data,args:n.args})}catch(r){return c({reason:"Unknown panic error",data:e})}},e}(),f=/*#__PURE__*/function(){function r(){}var e=r.prototype;return e.predicate=function(r){return r&&"0x"!==r&&!(null!=r&&r.startsWith(a))&&!(null!=r&&r.startsWith(o))},e.handle=function(r,e){var a=e.errorInterface,o={data:r};if(a){var c=a.parseError(r);c&&(o=n({},o,{fragment:c.fragment,reason:c.name,args:c.args}))}return function(r){var e=r.data,n=r.reason,a=r.fragment,o=r.args,c=e.slice(0,10);return u({type:t.CustomError,reason:i(n,"No ABI for custom error "+c),data:e,fragment:a,args:o,selector:c,name:c})}(o)},r}(),v=/*#__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,a,o,c;return c=void 0===(o=(a={data:null,reason:null!=(n=e.error.message)?n:"The transaction was rejected"}).data)?null:o,u({type:t.UserRejectError,reason:i(a.reason,"User has rejected the transaction"),data:c})},r}(),m=/*#__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,a,o,c,s,l,d=e.error,f=null!=(n=null!=(a=null==(o=d.info)||null==(o=o.error)?void 0:o.message)?a:d.shortMessage)?n:d.message;return l=(c={data:null,name:d.code,reason:f}).name,u({type:t.RpcError,reason:i(c.reason,"Error from JSON RPC provider"),data:null,name:null!=(s=null==l?void 0:l.toString())?s:null})},r}();exports.ErrorDecoder=/*#__PURE__*/function(){function t(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=t.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 t=Promise.resolve(e.call(n({},r,{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0}))).then(function(){return null})}catch(r){return r}return t&&t.then?t.then(void 0,function(r){return r}):t}()})}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,n){for(var t,a,o=function(r){var n="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(n)return(n=n.call(r)).next.bind(n);if(Array.isArray(r)||(n=function(r,n){if(r){if("string"==typeof r)return e(r,n);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)?e(r,n):void 0}}(r))){n&&(r=n);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,n))return u(r,{errorInterface:this.errorInterface,error:n})}return c({data:r,reason:null!=(t=null==n?void 0:n.message)?t:"Unexpected error",name:null==n?void 0:n.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(c({data:void 0,reason:null!=(e=r.message)?e:"Invalid error"}))}catch(r){return Promise.reject(r)}},t.create=function(e,n){void 0===n&&(n={});var a,o=n.additionalErrorHandlers;if(e){var i=e.flatMap(function(e){return e instanceof r.Interface?e.fragments.filter(function(e){return r.ErrorFragment.isFragment(e)}):e.filter(function(e){return"error"===e.type||r.ErrorFragment.isFragment(e)})});a=new r.Interface(i)}return new t([new s,new l,new d,new f,new v,new m].concat(null!=o?o:[]),a)},t}(); //# sourceMappingURL=error-decoder.js.map