@arkecosystem/typescript-crypto 0.0.17 → 0.0.18

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.
package/dist/index.js CHANGED
@@ -28336,6 +28336,56 @@ var TransactionDataEncoder = class {
28336
28336
  }
28337
28337
  };
28338
28338
 
28339
+ // src/utils/TransactionTypeIdentifier.ts
28340
+ var TransactionFunctionSigs = {
28341
+ MultiPayment: Abi_Multipayment_default.methodIdentifiers["pay(address[],uint256[])"],
28342
+ RegisterUsername: Abi_Usernames_default.methodIdentifiers["registerUsername(string)"],
28343
+ ResignUsername: Abi_Usernames_default.methodIdentifiers["resignUsername()"],
28344
+ Transfer: "",
28345
+ RegisterValidator: Abi_Consensus_default.methodIdentifiers["registerValidator(bytes)"],
28346
+ ResignValidator: Abi_Consensus_default.methodIdentifiers["resignValidator()"],
28347
+ Vote: Abi_Consensus_default.methodIdentifiers["vote(address)"],
28348
+ Unvote: Abi_Consensus_default.methodIdentifiers["unvote()"],
28349
+ UpdateValidator: Abi_Consensus_default.methodIdentifiers["updateValidator(bytes)"]
28350
+ };
28351
+ var TransactionTypeIdentifier = class {
28352
+ static isTransfer(data) {
28353
+ return data === TransactionFunctionSigs.Transfer;
28354
+ }
28355
+ static isVote(data) {
28356
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.Vote);
28357
+ }
28358
+ static isUnvote(data) {
28359
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.Unvote);
28360
+ }
28361
+ static isMultiPayment(data) {
28362
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.MultiPayment);
28363
+ }
28364
+ static isUsernameRegistration(data) {
28365
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.RegisterUsername);
28366
+ }
28367
+ static isUsernameResignation(data) {
28368
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.ResignUsername);
28369
+ }
28370
+ static isValidatorRegistration(data) {
28371
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.RegisterValidator);
28372
+ }
28373
+ static isValidatorResignation(data) {
28374
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.ResignValidator);
28375
+ }
28376
+ static isUpdateValidator(data) {
28377
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.UpdateValidator);
28378
+ }
28379
+ static isTokenTransfer(data) {
28380
+ try {
28381
+ const decodedData = new AbiDecoder("token" /* TOKEN */).decodeFunctionData(data);
28382
+ return decodedData.functionName === "transfer";
28383
+ } catch {
28384
+ }
28385
+ return false;
28386
+ }
28387
+ };
28388
+
28339
28389
  // src/transactions/builders/TokenTransferBuilder.ts
28340
28390
  var TokenTransferBuilder = class extends AbstractTransactionBuilder {
28341
28391
  constructor(data) {
@@ -28762,6 +28812,8 @@ export {
28762
28812
  Abi_Token_default as TokenContract,
28763
28813
  TokenTransferBuilder,
28764
28814
  TransactionDataEncoder,
28815
+ TransactionFunctionSigs,
28816
+ TransactionTypeIdentifier,
28765
28817
  TransactionUtils,
28766
28818
  Transfer,
28767
28819
  TransferBuilder,
@@ -0,0 +1,24 @@
1
+ export declare const TransactionFunctionSigs: {
2
+ MultiPayment: string;
3
+ RegisterUsername: string;
4
+ ResignUsername: string;
5
+ Transfer: string;
6
+ RegisterValidator: string;
7
+ ResignValidator: string;
8
+ Vote: string;
9
+ Unvote: string;
10
+ UpdateValidator: string;
11
+ };
12
+ export declare class TransactionTypeIdentifier {
13
+ static isTransfer(data: string): boolean;
14
+ static isVote(data: string): boolean;
15
+ static isUnvote(data: string): boolean;
16
+ static isMultiPayment(data: string): boolean;
17
+ static isUsernameRegistration(data: string): boolean;
18
+ static isUsernameResignation(data: string): boolean;
19
+ static isValidatorRegistration(data: string): boolean;
20
+ static isValidatorResignation(data: string): boolean;
21
+ static isUpdateValidator(data: string): boolean;
22
+ static isTokenTransfer(data: string): boolean;
23
+ }
24
+ //# sourceMappingURL=TransactionTypeIdentifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionTypeIdentifier.d.ts","sourceRoot":"","sources":["../../src/utils/TransactionTypeIdentifier.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,uBAAuB;;;;;;;;;;CAUnC,CAAC;AAEF,qBAAa,yBAAyB;WACvB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAIjC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAI7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAI/B,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAIrC,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAI7C,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAI5C,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAI9C,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAI7C,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAIxC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAUpD"}
@@ -0,0 +1,54 @@
1
+ import { ContractAbiType } from "@/enums";
2
+ import { AbiDecoder } from "./AbiDecoder";
3
+ import { ConsensusContract, MultipaymentContract, UsernamesContract } from "./Abi/json";
4
+ import { Helpers } from "./Helpers";
5
+ export const TransactionFunctionSigs = {
6
+ MultiPayment: MultipaymentContract.methodIdentifiers["pay(address[],uint256[])"],
7
+ RegisterUsername: UsernamesContract.methodIdentifiers["registerUsername(string)"],
8
+ ResignUsername: UsernamesContract.methodIdentifiers["resignUsername()"],
9
+ Transfer: "",
10
+ RegisterValidator: ConsensusContract.methodIdentifiers["registerValidator(bytes)"],
11
+ ResignValidator: ConsensusContract.methodIdentifiers["resignValidator()"],
12
+ Vote: ConsensusContract.methodIdentifiers["vote(address)"],
13
+ Unvote: ConsensusContract.methodIdentifiers["unvote()"],
14
+ UpdateValidator: ConsensusContract.methodIdentifiers["updateValidator(bytes)"],
15
+ };
16
+ export class TransactionTypeIdentifier {
17
+ static isTransfer(data) {
18
+ return data === TransactionFunctionSigs.Transfer;
19
+ }
20
+ static isVote(data) {
21
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.Vote);
22
+ }
23
+ static isUnvote(data) {
24
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.Unvote);
25
+ }
26
+ static isMultiPayment(data) {
27
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.MultiPayment);
28
+ }
29
+ static isUsernameRegistration(data) {
30
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.RegisterUsername);
31
+ }
32
+ static isUsernameResignation(data) {
33
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.ResignUsername);
34
+ }
35
+ static isValidatorRegistration(data) {
36
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.RegisterValidator);
37
+ }
38
+ static isValidatorResignation(data) {
39
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.ResignValidator);
40
+ }
41
+ static isUpdateValidator(data) {
42
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.UpdateValidator);
43
+ }
44
+ static isTokenTransfer(data) {
45
+ try {
46
+ const decodedData = new AbiDecoder(ContractAbiType.TOKEN).decodeFunctionData(data);
47
+ return decodedData.functionName === "transfer";
48
+ }
49
+ catch (_a) {
50
+ // Different abi type. Ignore.
51
+ }
52
+ return false;
53
+ }
54
+ }
@@ -7,4 +7,5 @@ export * from "./Slot";
7
7
  export * from "./TransactionUtils";
8
8
  export * from "./UnitConverter";
9
9
  export * from "./TransactionDataEncoder";
10
+ export * from "./TransactionTypeIdentifier";
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC"}
@@ -7,3 +7,4 @@ export * from "./Slot";
7
7
  export * from "./TransactionUtils";
8
8
  export * from "./UnitConverter";
9
9
  export * from "./TransactionDataEncoder";
10
+ export * from "./TransactionTypeIdentifier";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arkecosystem/typescript-crypto",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "engines": {
5
5
  "node": ">=20.12.2"
6
6
  },
@@ -0,0 +1,65 @@
1
+ import { ContractAbiType } from "@/enums";
2
+ import { AbiDecoder } from "./AbiDecoder";
3
+ import { ConsensusContract, MultipaymentContract, UsernamesContract } from "./Abi/json";
4
+ import { Helpers } from "./Helpers";
5
+
6
+ export const TransactionFunctionSigs = {
7
+ MultiPayment: MultipaymentContract.methodIdentifiers["pay(address[],uint256[])"],
8
+ RegisterUsername: UsernamesContract.methodIdentifiers["registerUsername(string)"],
9
+ ResignUsername: UsernamesContract.methodIdentifiers["resignUsername()"],
10
+ Transfer: "",
11
+ RegisterValidator: ConsensusContract.methodIdentifiers["registerValidator(bytes)"],
12
+ ResignValidator: ConsensusContract.methodIdentifiers["resignValidator()"],
13
+ Vote: ConsensusContract.methodIdentifiers["vote(address)"],
14
+ Unvote: ConsensusContract.methodIdentifiers["unvote()"],
15
+ UpdateValidator: ConsensusContract.methodIdentifiers["updateValidator(bytes)"],
16
+ };
17
+
18
+ export class TransactionTypeIdentifier {
19
+ public static isTransfer(data: string): boolean {
20
+ return data === TransactionFunctionSigs.Transfer;
21
+ }
22
+
23
+ public static isVote(data: string): boolean {
24
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.Vote);
25
+ }
26
+
27
+ public static isUnvote(data: string): boolean {
28
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.Unvote);
29
+ }
30
+
31
+ public static isMultiPayment(data: string): boolean {
32
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.MultiPayment);
33
+ }
34
+
35
+ public static isUsernameRegistration(data: string): boolean {
36
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.RegisterUsername);
37
+ }
38
+
39
+ public static isUsernameResignation(data: string): boolean {
40
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.ResignUsername);
41
+ }
42
+
43
+ public static isValidatorRegistration(data: string): boolean {
44
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.RegisterValidator);
45
+ }
46
+
47
+ public static isValidatorResignation(data: string): boolean {
48
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.ResignValidator);
49
+ }
50
+
51
+ public static isUpdateValidator(data: string): boolean {
52
+ return Helpers.removeLeadingHexZero(data).startsWith(TransactionFunctionSigs.UpdateValidator);
53
+ }
54
+
55
+ public static isTokenTransfer(data: string): boolean {
56
+ try {
57
+ const decodedData = new AbiDecoder(ContractAbiType.TOKEN).decodeFunctionData(data);
58
+ return decodedData.functionName === "transfer";
59
+ } catch {
60
+ // Different abi type. Ignore.
61
+ }
62
+
63
+ return false;
64
+ }
65
+ }
@@ -7,3 +7,4 @@ export * from "./Slot";
7
7
  export * from "./TransactionUtils";
8
8
  export * from "./UnitConverter";
9
9
  export * from "./TransactionDataEncoder";
10
+ export * from "./TransactionTypeIdentifier";
@@ -0,0 +1,199 @@
1
+ import { jest } from "@jest/globals";
2
+ import { TransactionTypeIdentifier } from "@/utils/TransactionTypeIdentifier";
3
+ import { ConsensusContract, MultipaymentContract, UsernamesContract } from "@/utils/Abi/json";
4
+ import { Helpers } from "@/utils/Helpers";
5
+
6
+ describe("TransactionTypeIdentifier", () => {
7
+ const TransactionFunctionSigs = {
8
+ MultiPayment: MultipaymentContract.methodIdentifiers["pay(address[],uint256[])"],
9
+ RegisterUsername: UsernamesContract.methodIdentifiers["registerUsername(string)"],
10
+ ResignUsername: UsernamesContract.methodIdentifiers["resignUsername()"],
11
+ RegisterValidator: ConsensusContract.methodIdentifiers["registerValidator(bytes)"],
12
+ ResignValidator: ConsensusContract.methodIdentifiers["resignValidator()"],
13
+ Vote: ConsensusContract.methodIdentifiers["vote(address)"],
14
+ Unvote: ConsensusContract.methodIdentifiers["unvote()"],
15
+ UpdateValidator: ConsensusContract.methodIdentifiers["updateValidator(bytes)"],
16
+ };
17
+
18
+ const InvalidFunctionSignature = "0x1234567";
19
+
20
+ beforeAll(() => {
21
+ jest.mock("@/utils/AbiDecoder", () => {
22
+ return {
23
+ AbiDecoder: jest.fn().mockImplementation(() => ({
24
+ decodeFunctionData: jest.fn().mockReturnValue({ functionName: "transfer" }),
25
+ })),
26
+ };
27
+ });
28
+ });
29
+
30
+ afterAll(() => {
31
+ jest.clearAllMocks();
32
+ });
33
+
34
+ describe("#isTransfer", () => {
35
+ it("should return true for empty transfer string", () => {
36
+ expect(TransactionTypeIdentifier.isTransfer("")).toBe(true);
37
+ });
38
+
39
+ it("should return false for non-empty data", () => {
40
+ expect(TransactionTypeIdentifier.isTransfer(InvalidFunctionSignature)).toBe(false);
41
+ });
42
+ });
43
+
44
+ describe("#isVote", () => {
45
+ it("should return true for matching vote signature", () => {
46
+ expect(TransactionTypeIdentifier.isVote(Helpers.addLeadingHexZero(TransactionFunctionSigs.Vote))).toBe(
47
+ true,
48
+ );
49
+ });
50
+
51
+ it("should return true for matching vote signature without 0x prefix", () => {
52
+ expect(TransactionTypeIdentifier.isVote(TransactionFunctionSigs.Vote)).toBe(true);
53
+ });
54
+
55
+ it("should return false for non-matching signature", () => {
56
+ expect(TransactionTypeIdentifier.isVote(InvalidFunctionSignature)).toBe(false);
57
+ });
58
+ });
59
+
60
+ describe("#isUnvote", () => {
61
+ it("should return true for matching unvote signature", () => {
62
+ expect(TransactionTypeIdentifier.isUnvote(Helpers.addLeadingHexZero(TransactionFunctionSigs.Unvote))).toBe(
63
+ true,
64
+ );
65
+ });
66
+
67
+ it("should return true for matching unvote signature without 0x prefix", () => {
68
+ expect(TransactionTypeIdentifier.isUnvote(TransactionFunctionSigs.Unvote)).toBe(true);
69
+ });
70
+
71
+ it("should return false for non-matching signature", () => {
72
+ expect(TransactionTypeIdentifier.isUnvote(InvalidFunctionSignature)).toBe(false);
73
+ });
74
+ });
75
+
76
+ describe("#isMultiPayment", () => {
77
+ it("should return true for matching multi-payment signature", () => {
78
+ expect(
79
+ TransactionTypeIdentifier.isMultiPayment(
80
+ Helpers.addLeadingHexZero(TransactionFunctionSigs.MultiPayment),
81
+ ),
82
+ ).toBe(true);
83
+ });
84
+
85
+ it("should return true for matching multi-payment signature without 0x prefix", () => {
86
+ expect(TransactionTypeIdentifier.isMultiPayment(TransactionFunctionSigs.MultiPayment)).toBe(true);
87
+ });
88
+
89
+ it("should return false for non-matching signature", () => {
90
+ expect(TransactionTypeIdentifier.isMultiPayment(InvalidFunctionSignature)).toBe(false);
91
+ });
92
+ });
93
+
94
+ describe("#isUsernameRegistration", () => {
95
+ it("should return true for matching registration signature", () => {
96
+ expect(
97
+ TransactionTypeIdentifier.isUsernameRegistration(
98
+ Helpers.addLeadingHexZero(TransactionFunctionSigs.RegisterUsername),
99
+ ),
100
+ ).toBe(true);
101
+ });
102
+
103
+ it("should return true for matching registration signature without 0x prefix", () => {
104
+ expect(TransactionTypeIdentifier.isUsernameRegistration(TransactionFunctionSigs.RegisterUsername)).toBe(
105
+ true,
106
+ );
107
+ });
108
+
109
+ it("should return false for non-matching signature", () => {
110
+ expect(TransactionTypeIdentifier.isUsernameRegistration(InvalidFunctionSignature)).toBe(false);
111
+ });
112
+ });
113
+
114
+ describe("#isUsernameResignation", () => {
115
+ it("should return true for matching resignation signature", () => {
116
+ expect(
117
+ TransactionTypeIdentifier.isUsernameResignation(
118
+ Helpers.addLeadingHexZero(TransactionFunctionSigs.ResignUsername),
119
+ ),
120
+ ).toBe(true);
121
+ });
122
+
123
+ it("should return true for matching resignation signature without 0x prefix", () => {
124
+ expect(TransactionTypeIdentifier.isUsernameResignation(TransactionFunctionSigs.ResignUsername)).toBe(true);
125
+ });
126
+
127
+ it("should return false for non-matching signature", () => {
128
+ expect(TransactionTypeIdentifier.isUsernameResignation(InvalidFunctionSignature)).toBe(false);
129
+ });
130
+ });
131
+
132
+ describe("#isValidatorRegistration", () => {
133
+ it("should return true for matching validator registration signature", () => {
134
+ expect(
135
+ TransactionTypeIdentifier.isValidatorRegistration(
136
+ Helpers.addLeadingHexZero(TransactionFunctionSigs.RegisterValidator),
137
+ ),
138
+ ).toBe(true);
139
+ });
140
+
141
+ it("should return true for matching validator registration signature without 0x prefix", () => {
142
+ expect(TransactionTypeIdentifier.isValidatorRegistration(TransactionFunctionSigs.RegisterValidator)).toBe(
143
+ true,
144
+ );
145
+ });
146
+
147
+ it("should return false for non-matching signature", () => {
148
+ expect(TransactionTypeIdentifier.isValidatorRegistration(InvalidFunctionSignature)).toBe(false);
149
+ });
150
+ });
151
+
152
+ describe("#isValidatorResignation", () => {
153
+ it("should return true for matching validator resignation signature", () => {
154
+ expect(
155
+ TransactionTypeIdentifier.isValidatorResignation(
156
+ Helpers.addLeadingHexZero(TransactionFunctionSigs.ResignValidator),
157
+ ),
158
+ ).toBe(true);
159
+ });
160
+
161
+ it("should return true for matching validator resignation signature without 0x prefix", () => {
162
+ expect(TransactionTypeIdentifier.isValidatorResignation(TransactionFunctionSigs.ResignValidator)).toBe(
163
+ true,
164
+ );
165
+ });
166
+
167
+ it("should return false for non-matching signature", () => {
168
+ expect(TransactionTypeIdentifier.isValidatorResignation(InvalidFunctionSignature)).toBe(false);
169
+ });
170
+ });
171
+
172
+ describe("#isUpdateValidator", () => {
173
+ it("should return true for matching update validator signature", () => {
174
+ expect(
175
+ TransactionTypeIdentifier.isUpdateValidator(
176
+ Helpers.addLeadingHexZero(TransactionFunctionSigs.UpdateValidator),
177
+ ),
178
+ ).toBe(true);
179
+ });
180
+
181
+ it("should return true for matching update validator signature without 0x prefix", () => {
182
+ expect(TransactionTypeIdentifier.isUpdateValidator(TransactionFunctionSigs.UpdateValidator)).toBe(true);
183
+ });
184
+
185
+ it("should return false for non-matching signature", () => {
186
+ expect(TransactionTypeIdentifier.isUpdateValidator(InvalidFunctionSignature)).toBe(false);
187
+ });
188
+ });
189
+
190
+ describe("#isTokenTransfer", () => {
191
+ it("should return true for valid token transfer data", () => {
192
+ expect(TransactionTypeIdentifier.isTokenTransfer("0x" + "0".repeat(64))).toBe(false);
193
+ });
194
+
195
+ it("should return false for invalid data", () => {
196
+ expect(TransactionTypeIdentifier.isTokenTransfer(InvalidFunctionSignature)).toBe(false);
197
+ });
198
+ });
199
+ });