diff --git a/src/client/utils/decoder.ts b/src/client/utils/decoder.ts index 3071581b..ce637d44 100644 --- a/src/client/utils/decoder.ts +++ b/src/client/utils/decoder.ts @@ -184,6 +184,7 @@ export class Decoder { for (let i = 0; i < len; i++) { const index = this.readInt(); const sig = this.buf.subarray(0, 64).toString('hex'); + this.read(64); sigs[index] = sig; } return sigs; diff --git a/test/mixin/safe.test.ts b/test/mixin/safe.test.ts index e0ff39ad..2f236805 100644 --- a/test/mixin/safe.test.ts +++ b/test/mixin/safe.test.ts @@ -89,6 +89,30 @@ describe('Tests for safe', () => { 'e769a91c5af97d7972bd38a984f66b060dd5a24c8fc8d2ce9969fe689d258916', ].join(','), ); + + const signedRaw = + '77770005a99c2e0e2b1da4d648755ef19bd95139acbbe6564cfb06dec7cd34931ca72cdc00020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000200000005e8d4a5100000004fe2a684e0e6c5e370ca0d89f5e2cb0da1e2ecd4028fa2d395fbca4e33f258050003fffe0d000000000005e8d4a51000001041cd5439a3a3caf43b5755facd2856b8eb8dd9c825ddbdc4c2fc283afd25d428d069468da7057e644259c5f82cea4f32b481844aff68409a2823e6a2e7d84ae59402e07b4e453035787231b6b9b5c53498573e22e7f0d1440741c95e4c51b96c81ef7ed772d8f864f4a0250478fbc3c2927b7dd5dc364d6ad49156eccdde902c139921b524d87fafa4e671e6f8d9a9b3bbb405573eef90df4ea9d966c1a81b2d99e4228582ee9001653cfb2d7eb61dfe14d243e0280db8ffe2741a89190f532fbbbbe72344c65127e697a246c5f70804342195b92835afa9d8edf7498ba083e407a579b53eb7ce1ee7e97f826e6b463e7ad160cb97c56b6166d125ffd8b6f021d3f4a6136aaddce4bdbfddae92f702c56ccb94edb2f6d93615887f0806900a65c0f230e2e2ae9358beb7e7299cf8a00bc2fd2038540f818db6e16dd4abf4dadce64dd745fe693b2ee41e4ff1b7fccff3f50819a7d41e76cb04fe1065059f3b2068a5f51863e976f65e7b2665045e3e8919b96cae80cbbbf9d33009094b5091dde31937cf61a9d7393c6d4b01f068725f233eb564bb00767138b1c83bd09cf148832f8e5303a3249cee3c707607eb8ea030c0b92777e3ed729fb2aee4c4298bd6dcd0d1c0eff1a06c68bf6459f35c8a047130b631b22bff252edeb03310cf7f2121f21afb2d299f7febc6a3eaa79e5e19bd3a5c299817b50262289e2bc382f173c6473159e19ed185b373e935081774e0c133b9416abdff319667187a71dff53e0003fffe0d000000000000000000020001000026b1144bb2066fff592dfd33cd9660fb5fa96da013e491a9dfa3a9599ecfff7eb58ebdae8527c4d66202a781b077221d227bb71652dd4b2809f77a6722048f060002000076cf44742be2cc9dd496ce2b2d6226da6c7a3a6ed5e17eb98e1d522b52ecbead27ad4a8accd6c0b954eb43de554d1c6daeda44a9d60340fd3886140b88b4470a0001adeb9ef91004399857be267df65f75bf20733d521f8d06f15b7b0887c262316bfc8be8405cb4d24d44b14307596f58fcb9b351f5de41fa00baa1da13745c9806'; + const signedTx = decodeSafeTransaction(signedRaw); + + expect(Buffer.from(signedRaw, 'hex')).toHaveLength(942); + expect(signedTx.asset).toBe('a99c2e0e2b1da4d648755ef19bd95139acbbe6564cfb06dec7cd34931ca72cdc'); + expect(signedTx.extra).toHaveLength(0); + expect(signedTx.inputs).toEqual([ + { + hash: '0'.repeat(64), + index: 0, + }, + { + hash: '0'.repeat(64), + index: 1, + }, + ]); + expect(signedTx.outputs).toHaveLength(2); + expect(signedTx.references).toHaveLength(0); + expect(signedTx.signatureMap).toHaveLength(2); + expect(Object.keys(signedTx.signatureMap![0])).toEqual(['0']); + expect(Object.keys(signedTx.signatureMap![1])).toEqual(['0', '1']); + expect(encodeSafeTransaction(signedTx, signedTx.signatureMap)).toBe(signedRaw); }); test('Test for safe ghost key for mainnet address', async () => {