@bitgo/sdk-coin-eth 25.3.2 → 25.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/test/fixtures/eth.d.ts +39 -0
  2. package/dist/test/fixtures/eth.d.ts.map +1 -0
  3. package/dist/test/fixtures/eth.js +262 -0
  4. package/dist/test/resources/erc1155Abi.d.ts +40 -0
  5. package/dist/test/resources/erc1155Abi.d.ts.map +1 -0
  6. package/dist/test/resources/erc1155Abi.js +329 -0
  7. package/dist/test/resources/erc721Abi.d.ts +12 -0
  8. package/dist/test/resources/erc721Abi.d.ts.map +1 -0
  9. package/dist/test/resources/erc721Abi.js +34 -0
  10. package/dist/test/resources/eth.d.ts +51 -0
  11. package/dist/test/resources/eth.d.ts.map +1 -0
  12. package/dist/test/resources/eth.js +72 -0
  13. package/dist/test/resources/nftEncodings.d.ts +4 -0
  14. package/dist/test/resources/nftEncodings.d.ts.map +1 -0
  15. package/dist/test/resources/nftEncodings.js +7 -0
  16. package/dist/test/resources/walletSimpleAbi.d.ts +12 -0
  17. package/dist/test/resources/walletSimpleAbi.d.ts.map +1 -0
  18. package/dist/test/resources/walletSimpleAbi.js +44 -0
  19. package/dist/test/unit/eth.d.ts +2 -0
  20. package/dist/test/unit/eth.d.ts.map +1 -0
  21. package/dist/test/unit/eth.js +1171 -0
  22. package/dist/test/unit/ethWallet.d.ts +2 -0
  23. package/dist/test/unit/ethWallet.d.ts.map +1 -0
  24. package/dist/test/unit/ethWallet.js +472 -0
  25. package/dist/test/unit/fixtures/ethMultiSigBackupKey.d.ts +4 -0
  26. package/dist/test/unit/fixtures/ethMultiSigBackupKey.d.ts.map +1 -0
  27. package/dist/test/unit/fixtures/ethMultiSigBackupKey.js +10 -0
  28. package/dist/test/unit/fixtures/ethTssBackupKey.d.ts +5 -0
  29. package/dist/test/unit/fixtures/ethTssBackupKey.d.ts.map +1 -0
  30. package/dist/test/unit/fixtures/ethTssBackupKey.js +25 -0
  31. package/dist/test/unit/getBuilder.d.ts +3 -0
  32. package/dist/test/unit/getBuilder.d.ts.map +1 -0
  33. package/dist/test/unit/getBuilder.js +10 -0
  34. package/dist/test/unit/keyPair.d.ts +2 -0
  35. package/dist/test/unit/keyPair.d.ts.map +1 -0
  36. package/dist/test/unit/keyPair.js +175 -0
  37. package/dist/test/unit/transaction.d.ts +2 -0
  38. package/dist/test/unit/transaction.d.ts.map +1 -0
  39. package/dist/test/unit/transaction.js +96 -0
  40. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts +2 -0
  41. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts.map +1 -0
  42. package/dist/test/unit/transactionBuilder/addressInitialization.js +101 -0
  43. package/dist/test/unit/transactionBuilder/contractCall.d.ts +2 -0
  44. package/dist/test/unit/transactionBuilder/contractCall.d.ts.map +1 -0
  45. package/dist/test/unit/transactionBuilder/contractCall.js +101 -0
  46. package/dist/test/unit/transactionBuilder/flushCoins.d.ts +2 -0
  47. package/dist/test/unit/transactionBuilder/flushCoins.d.ts.map +1 -0
  48. package/dist/test/unit/transactionBuilder/flushCoins.js +133 -0
  49. package/dist/test/unit/transactionBuilder/flushTokens.d.ts +2 -0
  50. package/dist/test/unit/transactionBuilder/flushTokens.d.ts.map +1 -0
  51. package/dist/test/unit/transactionBuilder/flushTokens.js +281 -0
  52. package/dist/test/unit/transactionBuilder/send.d.ts +2 -0
  53. package/dist/test/unit/transactionBuilder/send.d.ts.map +1 -0
  54. package/dist/test/unit/transactionBuilder/send.js +331 -0
  55. package/dist/test/unit/transactionBuilder/sendNFT.d.ts +2 -0
  56. package/dist/test/unit/transactionBuilder/sendNFT.d.ts.map +1 -0
  57. package/dist/test/unit/transactionBuilder/sendNFT.js +250 -0
  58. package/dist/test/unit/transactionBuilder/singleSigSend.d.ts +2 -0
  59. package/dist/test/unit/transactionBuilder/singleSigSend.d.ts.map +1 -0
  60. package/dist/test/unit/transactionBuilder/singleSigSend.js +196 -0
  61. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +2 -0
  62. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +1 -0
  63. package/dist/test/unit/transactionBuilder/walletInitialization.js +423 -0
  64. package/dist/test/unit/transferBuilder.d.ts +2 -0
  65. package/dist/test/unit/transferBuilder.d.ts.map +1 -0
  66. package/dist/test/unit/transferBuilder.js +124 -0
  67. package/dist/test/unit/utils.d.ts +2 -0
  68. package/dist/test/unit/utils.d.ts.map +1 -0
  69. package/dist/test/unit/utils.js +74 -0
  70. package/dist/tsconfig.tsbuildinfo +1 -0
  71. package/package.json +10 -7
  72. package/.eslintignore +0 -5
  73. package/.mocharc.yml +0 -8
  74. package/CHANGELOG.md +0 -1858
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const should_1 = __importDefault(require("should"));
40
+ const statics_1 = require("@bitgo/statics");
41
+ const src_1 = require("../../src");
42
+ const testData = __importStar(require("../resources/eth"));
43
+ describe('Eth send multi sig builder', function () {
44
+ const toAddress = '0x7325A3F7d4f9E86AE62Cf742426078C3755730d5';
45
+ const xprv = 'xprv9s21ZrQH143K3D8TXfvAJgHVfTEeQNW5Ys9wZtnUZkqPzFzSjbEJrWC1vZ4GnXCvR7rQL2UFX3RSuYeU9MrERm1XBvACow7c36vnz5iYyj2';
46
+ const key = new src_1.KeyPair({ prv: xprv }).getKeys().prv;
47
+ const amount = '100000000000000000'; // equivalent to 0.1 ether
48
+ const coin = statics_1.coins.get('hteth');
49
+ describe('should build', () => {
50
+ it('native coin transfer should succeed', async () => {
51
+ const builder = new src_1.TransferBuilder()
52
+ .expirationTime(1590078260)
53
+ .amount(amount)
54
+ .to(toAddress)
55
+ .contractSequenceId(2)
56
+ .key(key)
57
+ .data('0x');
58
+ const result = builder.signAndBuild(`${coin.chainId}`);
59
+ should_1.default.equal(result, testData.SEND_FUNDS_DATA);
60
+ });
61
+ it('native coin transfer with coin explicitly set should succeed', async () => {
62
+ const builder = new src_1.TransferBuilder()
63
+ .expirationTime(1590078260)
64
+ .coin('eth')
65
+ .amount(amount)
66
+ .to(toAddress)
67
+ .contractSequenceId(2)
68
+ .key(key)
69
+ .data('0x');
70
+ const result = builder.signAndBuild(`${coin.chainId}`);
71
+ should_1.default.equal(result, testData.SEND_FUNDS_DATA);
72
+ });
73
+ it('native coin transfer with sequenceId zero should succeed', async () => {
74
+ const builder = new src_1.TransferBuilder()
75
+ .expirationTime(1590078260)
76
+ .amount(amount)
77
+ .to(toAddress)
78
+ .contractSequenceId(0)
79
+ .key(key)
80
+ .data('0x');
81
+ const result = builder.signAndBuild(`${coin.chainId}`);
82
+ should_1.default.equal(result, testData.SEND_FUNDS_SEQUENCE_ZERO_DATA);
83
+ });
84
+ it('native coin transfer with amount 0 should succeed', async () => {
85
+ const builder = new src_1.TransferBuilder()
86
+ .expirationTime(1590078260)
87
+ .amount('0')
88
+ .to(toAddress)
89
+ .contractSequenceId(2)
90
+ .key(key)
91
+ .data('0x');
92
+ const result = builder.signAndBuild(`${coin.chainId}`);
93
+ should_1.default.equal(result, testData.SEND_FUNDS_AMOUNT_ZERO_DATA);
94
+ });
95
+ it('ERC20 token transfer should succeed', async () => {
96
+ const builder = new src_1.TransferBuilder()
97
+ .coin('terc')
98
+ .expirationTime(1590078260)
99
+ .amount(amount)
100
+ .to(toAddress)
101
+ .contractSequenceId(2)
102
+ .key(key);
103
+ const result = builder.signAndBuild(`${coin.chainId}`);
104
+ should_1.default.equal(result, testData.SEND_TERC_DATA);
105
+ });
106
+ it('should build without a signature set', () => {
107
+ const builder = new src_1.TransferBuilder()
108
+ .expirationTime(1590078260)
109
+ .amount(amount)
110
+ .to(toAddress)
111
+ .contractSequenceId(2)
112
+ .data('0x');
113
+ const result = builder.signAndBuild(`${coin.chainId}`);
114
+ should_1.default.equal(result, testData.SEND_FUNDS_NO_KEY_DATA);
115
+ });
116
+ it('should build from a non signed serialized data', () => {
117
+ const builder = new src_1.TransferBuilder(testData.SEND_FUNDS_NO_KEY_DATA);
118
+ builder.key(key);
119
+ const result = builder.signAndBuild(`${coin.chainId}`);
120
+ should_1.default.equal(result, testData.SEND_FUNDS_DATA);
121
+ });
122
+ });
123
+ });
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw0Q0FBMEU7QUFDMUUsbUNBQXFEO0FBQ3JELDJEQUE2QztBQUU3QyxRQUFRLENBQUMsNEJBQTRCLEVBQUU7SUFDckMsTUFBTSxTQUFTLEdBQUcsNENBQTRDLENBQUM7SUFDL0QsTUFBTSxJQUFJLEdBQ1IsaUhBQWlILENBQUM7SUFDcEgsTUFBTSxHQUFHLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFhLENBQUM7SUFDL0QsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsQ0FBQywwQkFBMEI7SUFDL0QsTUFBTSxJQUFJLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQThCLENBQUM7SUFDN0QsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7UUFDNUIsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQWUsRUFBRTtpQkFDbEMsY0FBYyxDQUFDLFVBQVUsQ0FBQztpQkFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQztpQkFDZCxFQUFFLENBQUMsU0FBUyxDQUFDO2lCQUNiLGtCQUFrQixDQUFDLENBQUMsQ0FBQztpQkFDckIsR0FBRyxDQUFDLEdBQUcsQ0FBQztpQkFDUixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDZCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDdkQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFB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MUIsTUFBTSxDQUFDLE1BQU0sQ0FBQztpQkFDZCxFQUFFLENBQUMsU0FBUyxDQUFDO2lCQUNiLGtCQUFrQixDQUFDLENBQUMsQ0FBQztpQkFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxHQUFHLEVBQUU7WUFDeEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxxQkFBZSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3JFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgY29pbnMsIEV0aGVyZXVtTmV0d29yayBhcyBFdGhMaWtlTmV0d29yayB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEtleVBhaXIsIFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMvZXRoJztcblxuZGVzY3JpYmUoJ0V0aCBzZW5kIG11bHRpIHNpZyBidWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB0b0FkZHJlc3MgPSAnMHg3MzI1QTNGN2Q0ZjlFODZBRTYyQ2Y3NDI0MjYwNzhDMzc1NTczMGQ1JztcbiAgY29uc3QgeHBydiA9XG4gICAgJ3hwcnY5czIxWnJRSDE0M0szRDhUWGZ2QUpnSFZmVEVlUU5XNVlzOXdadG5VWmtxUHpGelNqYkVKcldDMXZaNEduWEN2UjdyUUwyVUZYM1JTdVllVTlNckVSbTFYQnZBQ293N2MzNnZuejVpWXlqMic7XG4gIGNvbnN0IGtleSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pLmdldEtleXMoKS5wcnYgYXMgc3RyaW5nO1xuICBjb25zdCBhbW91bnQgPSAnMTAwMDAwMDAwMDAwMDAwMDAwJzsgLy8gZXF1aXZhbGVudCB0byAwLjEgZXRoZXJcbiAgY29uc3QgY29pbiA9IGNvaW5zLmdldCgnaHRldGgnKSBhcyB1bmtub3duIGFzIEV0aExpa2VOZXR3b3JrO1xuICBkZXNjcmliZSgnc2hvdWxkIGJ1aWxkJywgKCkgPT4ge1xuICAgIGl0KCduYXRpdmUgY29pbiB0cmFuc2ZlciBzaG91bGQgc3VjY2VlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNmZXJCdWlsZGVyKClcbiAgICAgICAgLmV4cGlyYXRpb25UaW1lKDE1OTAwNzgyNjApXG4gICAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgICAudG8odG9BZGRyZXNzKVxuICAgICAgICAuY29udHJhY3RTZXF1ZW5jZUlkKDIpXG4gICAgICAgIC5rZXkoa2V5KVxuICAgICAgICAuZGF0YSgnMHgnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIHRlc3REYXRhLlNFTkRfRlVORFNfREFUQSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbmF0aXZlIGNvaW4gdHJhbnNmZXIgd2l0aCBjb2luIGV4cGxpY2l0bHkgc2V0IHNob3VsZCBzdWNjZWVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUcmFuc2ZlckJ1aWxkZXIoKVxuICAgICAgICAuZXhwaXJhdGlvblRpbWUoMTU5MDA3ODI2MClcbiAgICAgICAgLmNvaW4oJ2V0aCcpXG4gICAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgICAudG8odG9BZGRyZXNzKVxuICAgICAgICAuY29udHJhY3RTZXF1ZW5jZUlkKDIpXG4gICAgICAgIC5rZXkoa2V5KVxuICAgICAgICAuZGF0YSgnMHgnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIHRlc3REYXRhLlNFTkRfRlVORFNfREFUQSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbmF0aXZlIGNvaW4gdHJhbnNmZXIgd2l0aCBzZXF1ZW5jZUlkIHplcm8gc2hvdWxkIHN1Y2NlZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRyYW5zZmVyQnVpbGRlcigpXG4gICAgICAgIC5leHBpcmF0aW9uVGltZSgxNTkwMDc4MjYwKVxuICAgICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgICAgLnRvKHRvQWRkcmVzcylcbiAgICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZCgwKVxuICAgICAgICAua2V5KGtleSlcbiAgICAgICAgLmRhdGEoJzB4Jyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZGVyLnNpZ25BbmRCdWlsZChgJHtjb2luLmNoYWluSWR9YCk7XG4gICAgICBzaG91bGQuZXF1YWwocmVzdWx0LCB0ZXN0RGF0YS5TRU5EX0ZVTkRTX1NFUVVFTkNFX1pFUk9fREFUQSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbmF0aXZlIGNvaW4gdHJhbnNmZXIgd2l0aCBhbW91bnQgMCBzaG91bGQgc3VjY2VlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNmZXJCdWlsZGVyKClcbiAgICAgICAgLmV4cGlyYXRpb25UaW1lKDE1OTAwNzgyNjApXG4gICAgICAgIC5hbW91bnQoJzAnKVxuICAgICAgICAudG8odG9BZGRyZXNzKVxuICAgICAgICAuY29udHJhY3RTZXF1ZW5jZUlkKDIpXG4gICAgICAgIC5rZXkoa2V5KVxuICAgICAgICAuZGF0YSgnMHgnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIHRlc3REYXRhLlNFTkRfRlVORFNfQU1PVU5UX1pFUk9fREFUQSk7XG4gICAgfSk7XG5cbiAgICBpdCgnRVJDMjAgdG9rZW4gdHJhbnNmZXIgc2hvdWxkIHN1Y2NlZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRyYW5zZmVyQnVpbGRlcigpXG4gICAgICAgIC5jb2luKCd0ZXJjJylcbiAgICAgICAgLmV4cGlyYXRpb25UaW1lKDE1OTAwNzgyNjApXG4gICAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgICAudG8odG9BZGRyZXNzKVxuICAgICAgICAuY29udHJhY3RTZXF1ZW5jZUlkKDIpXG4gICAgICAgIC5rZXkoa2V5KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIHRlc3REYXRhLlNFTkRfVEVSQ19EQVRBKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgd2l0aG91dCBhIHNpZ25hdHVyZSBzZXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRyYW5zZmVyQnVpbGRlcigpXG4gICAgICAgIC5leHBpcmF0aW9uVGltZSgxNTkwMDc4MjYwKVxuICAgICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgICAgLnRvKHRvQWRkcmVzcylcbiAgICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZCgyKVxuICAgICAgICAuZGF0YSgnMHgnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIHRlc3REYXRhLlNFTkRfRlVORFNfTk9fS0VZX0RBVEEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBmcm9tIGEgbm9uIHNpZ25lZCBzZXJpYWxpemVkIGRhdGEnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRyYW5zZmVyQnVpbGRlcih0ZXN0RGF0YS5TRU5EX0ZVTkRTX05PX0tFWV9EQVRBKTtcbiAgICAgIGJ1aWxkZXIua2V5KGtleSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZGVyLnNpZ25BbmRCdWlsZChgJHtjb2luLmNoYWluSWR9YCk7XG4gICAgICBzaG91bGQuZXF1YWwocmVzdWx0LCB0ZXN0RGF0YS5TRU5EX0ZVTkRTX0RBVEEpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const should_1 = __importDefault(require("should"));
40
+ const src_1 = require("../../src");
41
+ const testData = __importStar(require("../resources/eth"));
42
+ const ethereumjs_util_1 = require("ethereumjs-util");
43
+ const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
44
+ describe('ETH util library', function () {
45
+ describe('sign operation', function () {
46
+ it('should return a correct signed transaction', async () => {
47
+ const SIGNATURE = await (0, src_1.sign)(testData.LEGACY_TXDATA, testData.KEYPAIR_PRV);
48
+ should_1.default.equal(SIGNATURE, testData.ENCODED_LEGACY_TRANSACTION);
49
+ });
50
+ it('should fail with missing prv key', function () {
51
+ (0, src_1.sign)(testData.LEGACY_TXDATA, testData.KEYPAIR_PUB).should.be.rejectedWith(new RegExp('Missing private key'));
52
+ });
53
+ });
54
+ it('Should validate valid createForwarder Id for forwarder', function () {
55
+ should_1.default.equal((0, src_1.getAddressInitializationData)(), src_1.createForwarderMethodId);
56
+ });
57
+ it('should validate valid address', function () {
58
+ should_1.default.equal((0, src_1.isValidEthAddress)(testData.ACCOUNT_1), true);
59
+ });
60
+ it('should validate invalid address', function () {
61
+ should_1.default.equal((0, src_1.isValidEthAddress)(testData.INVALID_ACCOUNT), false);
62
+ });
63
+ it('should generate a proper address', function () {
64
+ should_1.default.equal((0, src_1.calculateForwarderAddress)(testData.CONTRACT_ADDRESS, 1), '0x016e4eee27f3f355bbb78d0e5eb813c4761822c9');
65
+ });
66
+ it('should generate a proper forwarder version 1 address', function () {
67
+ const initCode = (0, src_1.getProxyInitcode)(testData.FORWARDER_IMPLEMENTATION_ADDRESS);
68
+ const saltBuffer = (0, ethereumjs_util_1.setLengthLeft)(Buffer.from('02', 'hex'), 32);
69
+ // Hash the wallet base address with the given salt, so the address directly relies on the base address
70
+ const calculationSalt = (0, ethereumjs_util_1.bufferToHex)(ethereumjs_abi_1.default.soliditySHA3(['address', 'bytes32'], [testData.BASE_ADDRESS, saltBuffer]));
71
+ should_1.default.equal((0, src_1.calculateForwarderV1Address)(testData.FORWARDER_FACTORY_ADDRESS, calculationSalt, initCode), '0x7cdc37afc70221410bea40ce3b62c2f7bf383890');
72
+ });
73
+ });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsbUNBUW1CO0FBQ25CLDJEQUE2QztBQUM3QyxxREFBNkQ7QUFDN0Qsb0VBQXlDO0FBRXpDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtJQUMzQixRQUFRLENBQUMsZ0JBQWdCLEVBQUU7UUFDekIsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzFELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBQSxVQUFJLEVBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0UsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtDQUFrQyxFQUFFO1lBQ3JDLElBQUEsVUFBSSxFQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUMvRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHdEQUF3RCxFQUFFO1FBQzNELGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUEsa0NBQTRCLEdBQUUsRUFBRSw2QkFBdUIsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFO1FBQ2xDLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUEsdUJBQWlCLEVBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGlDQUFpQyxFQUFFO1FBQ3BDLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUEsdUJBQWlCLEVBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtDQUFrQyxFQUFFO1FBQ3JDLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUEsK0JBQXlCLEVBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxFQUFFLDRDQUE0QyxDQUFDLENBQUM7SUFDdEgsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUU7UUFDekQsTUFBTSxRQUFRLEdBQUcsSUFBQSxzQkFBZ0IsRUFBQyxRQUFRLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUM3RSxNQUFNLFVBQVUsR0FBRyxJQUFBLCtCQUFhLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFL0QsdUdBQXVHO1FBQ3ZHLE1BQU0sZUFBZSxHQUFHLElBQUEsNkJBQVcsRUFDakMsd0JBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQ3RGLENBQUM7UUFDRixnQkFBTSxDQUFDLEtBQUssQ0FDVixJQUFBLGlDQUEyQixFQUFDLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDLEVBQzFGLDRDQUE0QyxDQUM3QyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7XG4gIHNpZ24sXG4gIGlzVmFsaWRFdGhBZGRyZXNzLFxuICBnZXRBZGRyZXNzSW5pdGlhbGl6YXRpb25EYXRhLFxuICBjYWxjdWxhdGVGb3J3YXJkZXJBZGRyZXNzLFxuICBjYWxjdWxhdGVGb3J3YXJkZXJWMUFkZHJlc3MsXG4gIGdldFByb3h5SW5pdGNvZGUsXG4gIGNyZWF0ZUZvcndhcmRlck1ldGhvZElkLFxufSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2V0aCc7XG5pbXBvcnQgeyBidWZmZXJUb0hleCwgc2V0TGVuZ3RoTGVmdCB9IGZyb20gJ2V0aGVyZXVtanMtdXRpbCc7XG5pbXBvcnQgRXRoZXJldW1BYmkgZnJvbSAnZXRoZXJldW1qcy1hYmknO1xuXG5kZXNjcmliZSgnRVRIIHV0aWwgbGlicmFyeScsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ3NpZ24gb3BlcmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgY29ycmVjdCBzaWduZWQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBTSUdOQVRVUkUgPSBhd2FpdCBzaWduKHRlc3REYXRhLkxFR0FDWV9UWERBVEEsIHRlc3REYXRhLktFWVBBSVJfUFJWKTtcbiAgICAgIHNob3VsZC5lcXVhbChTSUdOQVRVUkUsIHRlc3REYXRhLkVOQ09ERURfTEVHQUNZX1RSQU5TQUNUSU9OKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoIG1pc3NpbmcgcHJ2IGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNpZ24odGVzdERhdGEuTEVHQUNZX1RYREFUQSwgdGVzdERhdGEuS0VZUEFJUl9QVUIpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobmV3IFJlZ0V4cCgnTWlzc2luZyBwcml2YXRlIGtleScpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ1Nob3VsZCB2YWxpZGF0ZSB2YWxpZCBjcmVhdGVGb3J3YXJkZXIgSWQgZm9yIGZvcndhcmRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBzaG91bGQuZXF1YWwoZ2V0QWRkcmVzc0luaXRpYWxpemF0aW9uRGF0YSgpLCBjcmVhdGVGb3J3YXJkZXJNZXRob2RJZCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgdmFsaWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBzaG91bGQuZXF1YWwoaXNWYWxpZEV0aEFkZHJlc3ModGVzdERhdGEuQUNDT1VOVF8xKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgaW52YWxpZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIHNob3VsZC5lcXVhbChpc1ZhbGlkRXRoQWRkcmVzcyh0ZXN0RGF0YS5JTlZBTElEX0FDQ09VTlQpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBwcm9wZXIgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBzaG91bGQuZXF1YWwoY2FsY3VsYXRlRm9yd2FyZGVyQWRkcmVzcyh0ZXN0RGF0YS5DT05UUkFDVF9BRERSRVNTLCAxKSwgJzB4MDE2ZTRlZWUyN2YzZjM1NWJiYjc4ZDBlNWViODEzYzQ3NjE4MjJjOScpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgcHJvcGVyIGZvcndhcmRlciB2ZXJzaW9uIDEgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpbml0Q29kZSA9IGdldFByb3h5SW5pdGNvZGUodGVzdERhdGEuRk9SV0FSREVSX0lNUExFTUVOVEFUSU9OX0FERFJFU1MpO1xuICAgIGNvbnN0IHNhbHRCdWZmZXIgPSBzZXRMZW5ndGhMZWZ0KEJ1ZmZlci5mcm9tKCcwMicsICdoZXgnKSwgMzIpO1xuXG4gICAgLy8gSGFzaCB0aGUgd2FsbGV0IGJhc2UgYWRkcmVzcyB3aXRoIHRoZSBnaXZlbiBzYWx0LCBzbyB0aGUgYWRkcmVzcyBkaXJlY3RseSByZWxpZXMgb24gdGhlIGJhc2UgYWRkcmVzc1xuICAgIGNvbnN0IGNhbGN1bGF0aW9uU2FsdCA9IGJ1ZmZlclRvSGV4KFxuICAgICAgRXRoZXJldW1BYmkuc29saWRpdHlTSEEzKFsnYWRkcmVzcycsICdieXRlczMyJ10sIFt0ZXN0RGF0YS5CQVNFX0FERFJFU1MsIHNhbHRCdWZmZXJdKVxuICAgICk7XG4gICAgc2hvdWxkLmVxdWFsKFxuICAgICAgY2FsY3VsYXRlRm9yd2FyZGVyVjFBZGRyZXNzKHRlc3REYXRhLkZPUldBUkRFUl9GQUNUT1JZX0FERFJFU1MsIGNhbGN1bGF0aW9uU2FsdCwgaW5pdENvZGUpLFxuICAgICAgJzB4N2NkYzM3YWZjNzAyMjE0MTBiZWE0MGNlM2I2MmMyZjdiZjM4Mzg5MCdcbiAgICApO1xuICB9KTtcbn0pO1xuIl19