Skip to content

Commit 1028d63

Browse files
feat(sdk-coin-celo): prepare celo for mainnet hardfork
Ticket: COIN-3350 breaking change: added changes to transaction building for celo l2 migration TICKET: COIN-3350
1 parent 0caba89 commit 1028d63

File tree

6 files changed

+78
-36
lines changed

6 files changed

+78
-36
lines changed

modules/sdk-coin-celo/src/lib/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export { KeyPair, Interface } from '@bitgo/sdk-coin-eth';
2-
export { Transaction } from './transaction';
2+
export { Transaction } from '@bitgo/abstract-eth';
33
export { TransactionBuilder } from './transactionBuilder';
44
export { TestnetTransactionBuilder } from './testnetTransactionBuilder';
55
export { TransferBuilder } from './transferBuilder';

modules/sdk-coin-celo/src/lib/resources.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ export const mainnetCommon = EthereumCommon.custom(
2222
networkId: (coins.get('celo').network as EthereumNetwork).chainId,
2323
chainId: (coins.get('celo').network as EthereumNetwork).chainId,
2424
},
25-
{ hardfork: 'petersburg' }
25+
{ hardfork: 'london' }
2626
);

modules/sdk-coin-celo/src/lib/transaction.ts

Lines changed: 0 additions & 21 deletions
This file was deleted.

modules/sdk-coin-celo/src/lib/transactionBuilder.ts

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { BaseCoin as CoinConfig } from '@bitgo/statics';
22
import EthereumAbi from 'ethereumjs-abi';
3-
import { addHexPrefix } from 'ethereumjs-util';
3+
import { Transaction } from '@bitgo/abstract-eth';
44
import { TransactionBuilder as EthTransactionBuilder, TxData, walletSimpleConstructor } from '@bitgo/sdk-coin-eth';
55
import { BuildTransactionError, TransactionType, StakingOperationTypes } from '@bitgo/sdk-core';
6-
import { Transaction } from './transaction';
76
import { StakingBuilder } from './stakingBuilder';
87
import { StakingCall } from './stakingCall';
98
import { getCommon, walletSimpleByteCode } from './utils';
@@ -223,15 +222,6 @@ export class TransactionBuilder extends EthTransactionBuilder {
223222
return data;
224223
}
225224

226-
/**
227-
* Get the final v value. Final v is described in EIP-155.
228-
*
229-
* @protected for internal use when the enableFinalVField flag is true.
230-
*/
231-
protected getFinalV(): string {
232-
return addHexPrefix(this._common.chainIdBN().toString(16));
233-
}
234-
235225
/**
236226
* The value to send along with this transaction. 0 by default
237227
*

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ export const SEND_TX_BROADCAST =
100100

101101
export const SEND_TOKEN_TX_BROADCAST =
102102
'0xf901ad02843b9aca0083b8a1a0948f977e912ef500548a0c3be6ddde9899f1199b8180b901440dcd7a6c00000000000000000000000019645032c7f1533395d44a629462e751084d3e4c000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000874069fa1eb16d44d622f2e0ca25eea172369bc1000000000000000000000000000000000000000000000000000000005ec67e28000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000041d56f9d0cba9794067046f832fab81f16e85273c966ece8e95253ea4c3023e20e015271a39af757af37c064addaf1362dc84c6d317ec33126763dd5c1e48251711c0000000000000000000000000000000000000000000000000000000000000083015e0aa03715b46cf6b38403daa2667e57b71d9956674f87c64ca04fe770cb79e747057ea05eef964d0a0cb9b86bfd066132d401da65939a8ba2d4b74f46cd368434999a8c';
103+
export const PROD_SEND_TOKEN_BROADCAST =
104+
'0x02f901af82a4ec0281968373dca383b8a1a0948f977e912ef500548a0c3be6ddde9899f1199b8180b901440dcd7a6c00000000000000000000000019645032c7f1533395d44a629462e751084d3e4c000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000765de816845861e75a25fca122bb6898b8b1282a000000000000000000000000000000000000000000000000000000005ec67e28000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000041f62b186c6d3577e66ed3aa343242c1ec58ba09a8fc5fa93aa0a2258f04e1b410111c4814a3028638ead635ac1993eda7dde56f850fb2e4501237111c9a9bb5ce1b00000000000000000000000000000000000000000000000000000000000000c080a0a76d12beaebb9e084d392ba6104254c2480a38466dba61de76dc3d7f464967bda010b230c6a4f0dcab9cf2d4743aef578f0491cea9ac8bf9da91cc6908198c0367';
103105

104106
export const CONTRACT_TOKEN_CUSD_ADDRESS = '0xa561131a1C8aC25925FB848bCa45A74aF61e5A38';
105107

modules/sdk-coin-celo/test/unit/transactionBuilder/send.ts

Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ describe('Send transaction', function () {
167167
should.equal(txJson.from, undefined);
168168
});
169169

170-
it('should build txn with eip1559', async function () {
170+
it('should build txn with eip1559 for tcelo', async function () {
171171
const txBuilder = getBuilder('tcelo') as TransactionBuilder;
172172
txBuilder.fee({
173173
fee: '1000000000',
@@ -197,6 +197,77 @@ describe('Send transaction', function () {
197197
should.equal(txJson.maxPriorityFeePerGas, '150');
198198
});
199199

200+
it('should build txn with eip1559 for celo', async function () {
201+
const txBuilder = getBuilder('celo') as TransactionBuilder;
202+
txBuilder.fee({
203+
fee: '1000000000',
204+
gasLimit: '12100000',
205+
eip1559: {
206+
maxFeePerGas: '7593123',
207+
maxPriorityFeePerGas: '150',
208+
},
209+
});
210+
txBuilder.counter(2);
211+
txBuilder.type(TransactionType.Send);
212+
txBuilder.contract('0x8f977e912ef500548a0c3be6ddde9899f1199b81');
213+
txBuilder
214+
.transfer()
215+
.coin('celo')
216+
.amount('1000000000')
217+
.to('0x19645032c7f1533395d44a629462e751084d3e4c')
218+
.expirationTime(1590066728)
219+
.contractSequenceId(5)
220+
.key(key);
221+
txBuilder.sign({ key: testData.PRIVATE_KEY });
222+
const tx = await txBuilder.build();
223+
const txJson = tx.toJson();
224+
should.equal(txJson.gasLimit, '12100000');
225+
should.equal(txJson._type, 'EIP1559');
226+
should.equal(txJson.maxFeePerGas, '7593123');
227+
should.equal(txJson.maxPriorityFeePerGas, '150');
228+
});
229+
230+
it('should build txn with eip1559 for celo token', async function () {
231+
const txBuilder = getBuilder('cusd') as TransactionBuilder;
232+
txBuilder.fee({
233+
fee: '1000000000',
234+
gasLimit: '12100000',
235+
eip1559: {
236+
maxFeePerGas: '7593123',
237+
maxPriorityFeePerGas: '150',
238+
},
239+
});
240+
txBuilder.counter(2);
241+
txBuilder.type(TransactionType.Send);
242+
txBuilder.contract('0x8f977e912ef500548a0c3be6ddde9899f1199b81');
243+
txBuilder
244+
.transfer()
245+
.coin('cusd')
246+
.amount('1000000000')
247+
.to('0x19645032c7f1533395d44a629462e751084d3e4c')
248+
.expirationTime(1590066728)
249+
.contractSequenceId(5)
250+
.key(key);
251+
txBuilder.sign({ key: testData.PRIVATE_KEY });
252+
const tx = await txBuilder.build();
253+
const txJson = tx.toJson();
254+
should.equal(txJson.gasLimit, '12100000');
255+
should.equal(txJson._type, 'EIP1559');
256+
should.equal(txJson.maxFeePerGas, '7593123');
257+
should.equal(txJson.maxPriorityFeePerGas, '150');
258+
});
259+
260+
it('should decode token txn', async function () {
261+
const txBuilder = getBuilder('cusd') as TransactionBuilder;
262+
txBuilder.from(testData.PROD_SEND_TOKEN_BROADCAST);
263+
const tx = await txBuilder.build();
264+
const txJson = tx.toJson();
265+
should.equal(txJson.gasLimit, '12100000');
266+
should.equal(txJson._type, 'EIP1559');
267+
should.equal(txJson.maxFeePerGas, '7593123');
268+
should.equal(txJson.maxPriorityFeePerGas, '150');
269+
});
270+
200271
it('should build legacy txn for celo', async function () {
201272
const txBuilder = getBuilder('celo') as TransactionBuilder;
202273
txBuilder.fee({
@@ -218,7 +289,7 @@ describe('Send transaction', function () {
218289
const txJson = tx.toJson();
219290
should.equal(txJson.gasLimit, '12100000');
220291
should.equal(txJson._type, 'Legacy');
221-
should.equal(txJson.v, '0xa4ec');
292+
should.equal(txJson.v, '0x0149fb');
222293
});
223294

224295
it('a send token transaction without final v', async () => {

0 commit comments

Comments
 (0)