@0x/utils
: Add support for nested rich revert decoding
This commit is contained in:
parent
7842bb4cad
commit
89117beda2
@ -14,6 +14,7 @@ type ArgTypes =
|
||||
| BigNumber
|
||||
| number
|
||||
| boolean
|
||||
| RevertError
|
||||
| BigNumber[]
|
||||
| string[]
|
||||
| number[]
|
||||
@ -122,6 +123,19 @@ export abstract class RevertError extends Error {
|
||||
const instance = new type();
|
||||
try {
|
||||
const values = decoder(_bytes);
|
||||
_.transform(
|
||||
values,
|
||||
(result, value, key) => {
|
||||
const { type: argType } = instance._getArgumentByName(key);
|
||||
if (argType === 'bytes') {
|
||||
try {
|
||||
const nestedRevert = RevertError.decode(value as string, coerce);
|
||||
result[key] = nestedRevert.toString();
|
||||
} catch (err) {} // tslint:disable-line:no-empty
|
||||
}
|
||||
},
|
||||
values,
|
||||
);
|
||||
_.assign(instance, { values });
|
||||
instance.message = instance.toString();
|
||||
return instance;
|
||||
|
@ -39,7 +39,14 @@ class FixedSizeArrayRevertError extends RevertError {
|
||||
}
|
||||
}
|
||||
|
||||
class ParentRevertError extends RevertError {
|
||||
public constructor(nestedError?: string) {
|
||||
super('ParentRevertError', 'ParentRevertError(bytes nestedError)', { nestedError });
|
||||
}
|
||||
}
|
||||
|
||||
RevertError.registerType(CustomRevertError);
|
||||
RevertError.registerType(ParentRevertError);
|
||||
|
||||
describe('RevertError', () => {
|
||||
describe('equality', () => {
|
||||
@ -159,6 +166,12 @@ describe('RevertError', () => {
|
||||
const decode = () => RevertError.decode(_encoded);
|
||||
expect(decode).to.throw();
|
||||
});
|
||||
it('should decode a nested revert error', () => {
|
||||
const nested = new StringRevertError(message);
|
||||
const parent = new ParentRevertError(nested.encode());
|
||||
const decoded = RevertError.decode(parent.encode());
|
||||
expect(decoded.toString()).to.equal(new ParentRevertError(nested.toString()).toString());
|
||||
});
|
||||
});
|
||||
describe('getThrownErrorRevertErrorBytes', () => {
|
||||
it('should decode Parity revert errors', () => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user