Skip to content

Commit f20dc10

Browse files
committed
fix(abstract-eth): fix flush v4 tx building from hex
TICKET: WP-1652
1 parent 2a2dddb commit f20dc10

4 files changed

Lines changed: 20 additions & 9 deletions

File tree

modules/abstract-eth/src/lib/iface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ export interface ERC1155TransferData extends TokenTransferData {
136136
export interface FlushTokensData {
137137
forwarderAddress: string;
138138
tokenAddress: string;
139+
forwarderVersion?: number;
139140
}
140141

141142
export interface NativeTransferData extends TransferData {

modules/abstract-eth/src/lib/transactionBuilder.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,13 @@ export abstract class TransactionBuilder extends BaseTransactionBuilder {
216216
break;
217217
case TransactionType.FlushTokens:
218218
this.setContract(transactionJson.to);
219-
const { forwarderAddress, tokenAddress } = decodeFlushTokensData(transactionJson.data, transactionJson.to);
219+
const { forwarderAddress, tokenAddress, forwarderVersion } = decodeFlushTokensData(
220+
transactionJson.data,
221+
transactionJson.to
222+
);
223+
if (forwarderVersion === 4) {
224+
this.forwarderVersion(4);
225+
}
220226
this.forwarderAddress(forwarderAddress);
221227
this.tokenAddress(tokenAddress);
222228
break;

modules/abstract-eth/src/lib/utils.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,7 @@ export function decodeFlushTokensData(data: string, to?: string): FlushTokensDat
464464
return {
465465
forwarderAddress: to,
466466
tokenAddress: addHexPrefix(tokenAddress as string),
467+
forwarderVersion: 4,
467468
};
468469
} else {
469470
throw new BuildTransactionError(`Invalid transfer bytecode: ${data}`);

modules/sdk-coin-eth/test/unit/transactionBuilder/flushTokens.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -163,10 +163,11 @@ describe('Eth Transaction builder flush tokens', function () {
163163
forwarderVersion: 4,
164164
});
165165
const txBuiderFromRaw: any = getBuilder('teth');
166-
txBuiderFromRaw.fromImplementation(tx.toBroadcastFormat());
167-
// txBuiderFromRaw.type.should.equal(TransactionType.FlushTokens);
168-
txBuiderFromRaw._forwarderAddress.should.equal('0x53b8e91bb3b8f618b5f01004ef108f134f219573');
169-
txBuiderFromRaw._tokenAddress.should.equal('0xbcf935d206ca32929e1b887a07ed240f0d8ccd22');
166+
txBuiderFromRaw.from(tx.toBroadcastFormat());
167+
const result = await txBuiderFromRaw.build();
168+
const txJson = result.toJson();
169+
txJson.to.should.equal('0x53b8e91bb3b8f618b5f01004ef108f134f219573');
170+
txJson.data.should.containEql('bcf935d206ca32929e1b887a07ed240f0d8ccd22');
170171
});
171172

172173
it('decode wallet flush forwarder transaction with forwarder Version < 4', async () => {
@@ -182,10 +183,12 @@ describe('Eth Transaction builder flush tokens', function () {
182183
forwarderVersion: 2,
183184
});
184185
const txBuiderFromRaw: any = getBuilder('teth');
185-
txBuiderFromRaw.fromImplementation(tx.toBroadcastFormat());
186-
// txBuiderFromRaw.type.should.equal(TransactionType.FlushTokens);
187-
txBuiderFromRaw._forwarderAddress.should.equal('0x53b8e91bb3b8f618b5f01004ef108f134f219573');
188-
txBuiderFromRaw._tokenAddress.should.equal('0xbcf935d206ca32929e1b887a07ed240f0d8ccd22');
186+
txBuiderFromRaw.from(tx.toBroadcastFormat());
187+
const result = await txBuiderFromRaw.build();
188+
const txJson = result.toJson();
189+
txJson.to.should.equal('0x8f977e912ef500548a0c3be6ddde9899f1199b81');
190+
txJson.data.should.containEql('bcf935d206ca32929e1b887a07ed240f0d8ccd22');
191+
txJson.data.should.containEql('53b8e91bb3b8f618b5f01004ef108f134f219573');
189192
});
190193

191194
it('an unsigned flush transaction from serialized', async () => {

0 commit comments

Comments
 (0)