Skip to content

Commit 86873a3

Browse files
authored
Merge pull request #4284 from BitGo/WIN-1961-update-encoding
chore(sdk-coin-zketh): fix transaction endcoding method for zksync
2 parents 51bef4d + 7a3d386 commit 86873a3

File tree

4 files changed

+95
-2
lines changed

4 files changed

+95
-2
lines changed

modules/sdk-coin-zketh/test/resources.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ export const SEND_FUNDS_SEQUENCE_ZERO_DATA =
4545
export const SEND_FUNDS_AMOUNT_ZERO_DATA =
4646
'0x391252150000000000000000000000007325a3f7d4f9e86ae62cf742426078c3755730d5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000005ec6ab34000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041fdfb5e9d7944ca296534feb025ad980106bf4060d5b60ff2e57cf0dfb370573975e077d4ba73e5784b9e4893e1738c88a7876313ca4d812d69b0bf9e9c4281f11b00000000000000000000000000000000000000000000000000000000000000';
4747

48+
export const SEND_TX_AMOUNT_ZERO_BROADCAST =
49+
'0xf901cc02843b9aca0083b8a1a0948f977e912ef500548a0c3be6ddde9899f1199b8180b901643912521500000000000000000000000019645032c7f1533395d44a629462e751084d3e4c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000005ec67e28000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041117569462413d28fecb78b7a1472e69668018d8fe9bd8401e001cf70d594c3ac5e4ebfcc73abb9e24320853148136f4ec51b91f6559b3b87441a266c5f5f46181b0000000000000000000000000000000000000000000000000000000000000082027ba02cc25a5f192c271a3b2f36196f4fca4ba8a10526a56d31fe02a6d366b5613b9ba018e2f183c766f90070dc061aef80d9828ffbe6b80e5960f2c7ac5def2892ec8e';
50+
51+
export const SEND_TX_BROADCAST_LEGACY =
52+
'0xf901cc02843b9aca0083b8a1a0948f977e912ef500548a0c3be6ddde9899f1199b8180b901643912521500000000000000000000000019645032c7f1533395d44a629462e751084d3e4c000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000005ec67e28000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000418440df6da7df3c5d6c2ae9b9fc917cfc4803ec578d0f6e39e364ed51d03e15814a1e9c97b2788111710c05a79b74ad47ff72853fddb359a3a65f29c3f57b316f1b0000000000000000000000000000000000000000000000000000000000000082027ba02c0739f514687446c88eb5fb88077abba65b96e62d5e2fe4ea6f3da103365d18a02cf04ad7a1e82541f151fc48bcf2bd8c57f1c53c1dbc6cb603363f39755e6ced';
53+
4854
export const SEND_ZKETH_LINK_DATA =
4955
'0x0dcd7a6c0000000000000000000000007325a3f7d4f9e86ae62cf742426078c3755730d5000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000cccb29bac5ad81290383643c6fb38130cda9d881000000000000000000000000000000000000000000000000000000005ec6ab34000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000041075389c62b993ab6f17cb485353135435943cea945c25b14fa0d23f71f8a51b174dd89a26174ec78e96e3d308d7d70894bea664a0366f2a42cd43e1988b50c3b1b00000000000000000000000000000000000000000000000000000000000000';
5056

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import { TransactionType } from '@bitgo/sdk-core';
2+
import should from 'should';
3+
import { decodeTransferData } from '@bitgo/abstract-eth';
4+
import * as testData from '../../resources';
5+
import { getBuilder } from '../../getBuilder';
6+
import { TransactionBuilder } from '../../../src';
7+
8+
describe('ZKeth transaction builder send', () => {
9+
describe('should sign and build', () => {
10+
let txBuilder;
11+
let key;
12+
let contractAddress;
13+
14+
beforeEach(() => {
15+
contractAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
16+
txBuilder = getBuilder('tzketh') as TransactionBuilder;
17+
key = testData.KEYPAIR_PRV.getKeys().prv as string;
18+
txBuilder.fee({
19+
fee: '1000000000',
20+
gasLimit: '12100000',
21+
});
22+
txBuilder.counter(2);
23+
txBuilder.type(TransactionType.Send);
24+
txBuilder.contract(contractAddress);
25+
});
26+
27+
it('a send funds transaction', async () => {
28+
const recipient = '0x19645032c7f1533395d44a629462e751084d3e4c';
29+
const amount = '1000000000';
30+
const expireTime = 1590066728;
31+
const sequenceId = 5;
32+
txBuilder
33+
.transfer()
34+
.amount(amount)
35+
.to(recipient)
36+
.expirationTime(expireTime)
37+
.contractSequenceId(sequenceId)
38+
.key(key);
39+
txBuilder.sign({ key: testData.PRIVATE_KEY_1 });
40+
const tx = await txBuilder.build();
41+
42+
should.equal(tx.toJson().chainId, '0x12c');
43+
should.equal(tx.toBroadcastFormat(), testData.SEND_TX_BROADCAST_LEGACY);
44+
should.equal(tx.signature.length, 2);
45+
should.equal(tx.inputs.length, 1);
46+
should.equal(tx.inputs[0].address, contractAddress);
47+
should.equal(tx.inputs[0].value, amount);
48+
49+
should.equal(tx.outputs.length, 1);
50+
should.equal(tx.outputs[0].address, recipient);
51+
should.equal(tx.outputs[0].value, amount);
52+
53+
const data = tx.toJson().data;
54+
const {
55+
to,
56+
amount: parsedAmount,
57+
expireTime: parsedExpireTime,
58+
sequenceId: parsedSequenceId,
59+
} = decodeTransferData(data);
60+
should.equal(to, recipient);
61+
should.equal(parsedAmount, amount);
62+
should.equal(parsedExpireTime, expireTime);
63+
should.equal(parsedSequenceId, sequenceId);
64+
});
65+
66+
it('a send funds with amount 0 transaction', async () => {
67+
txBuilder
68+
.transfer()
69+
.amount('0')
70+
.to('0x19645032c7f1533395d44a629462e751084d3e4c')
71+
.expirationTime(1590066728)
72+
.contractSequenceId(5)
73+
.key(key);
74+
txBuilder.sign({ key: testData.PRIVATE_KEY_1 });
75+
const tx = await txBuilder.build();
76+
should.equal(tx.toBroadcastFormat(), testData.SEND_TX_AMOUNT_ZERO_BROADCAST);
77+
});
78+
});
79+
});

modules/statics/src/coins.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,8 +276,12 @@ const OPETH_FEATURES = [
276276
CoinFeature.EVM_WALLET,
277277
CoinFeature.USES_NON_PACKED_ENCODING_FOR_TXDATA,
278278
];
279-
const ZKETH_FEATURES = [...ETH_FEATURES, CoinFeature.MULTISIG_COLD, CoinFeature.EVM_WALLET];
280-
279+
const ZKETH_FEATURES = [
280+
...ETH_FEATURES,
281+
CoinFeature.MULTISIG_COLD,
282+
CoinFeature.EVM_WALLET,
283+
CoinFeature.USES_NON_PACKED_ENCODING_FOR_TXDATA,
284+
];
281285
export const coins = CoinMap.fromCoins([
282286
utxo(
283287
'8d6e08d5-399f-414f-8430-6ceca1798cbf',

modules/statics/src/networks.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -963,6 +963,10 @@ class ZkSyncTestnet extends Testnet implements EthereumNetwork {
963963
chainId = 300;
964964
nativeCoinOperationHashPrefix = '300';
965965
tokenOperationHashPrefix = '300-ERC20';
966+
forwarderFactoryAddress = '0xdd498702f44c4da08eb9e08d3f015eefe5cb71fc';
967+
forwarderImplementationAddress = '0xbe69cae311191fb45e648ed20847f06fad2dbab4';
968+
walletFactoryAddress = '0x4550e1e7616d3364877fc6c9324938dab678621a';
969+
walletImplementationAddress = '0x92db2759d1dca129a0d9d46877f361be819184c4';
966970
}
967971

968972
export const Networks = {

0 commit comments

Comments
 (0)