@arkecosystem/typescript-crypto 0.0.1

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 (278) hide show
  1. package/.editorconfig +16 -0
  2. package/.eslintrc.js +12 -0
  3. package/.github/PULL_REQUEST_TEMPLATE.md +24 -0
  4. package/.github/workflows/ci.yml +36 -0
  5. package/.github/workflows/publish.yml +56 -0
  6. package/.vscode/settings.json +2 -0
  7. package/README.md +31 -0
  8. package/dist/configuration/Network.d.ts +7 -0
  9. package/dist/configuration/Network.d.ts.map +1 -0
  10. package/dist/configuration/Network.js +12 -0
  11. package/dist/configuration/index.d.ts +2 -0
  12. package/dist/configuration/index.d.ts.map +1 -0
  13. package/dist/configuration/index.js +1 -0
  14. package/dist/enums/AbiFunction.d.ts +10 -0
  15. package/dist/enums/AbiFunction.d.ts.map +1 -0
  16. package/dist/enums/AbiFunction.js +10 -0
  17. package/dist/enums/Constants.d.ts +5 -0
  18. package/dist/enums/Constants.d.ts.map +1 -0
  19. package/dist/enums/Constants.js +5 -0
  20. package/dist/enums/ContractAbiType.d.ts +7 -0
  21. package/dist/enums/ContractAbiType.d.ts.map +1 -0
  22. package/dist/enums/ContractAbiType.js +7 -0
  23. package/dist/enums/ContractAddresses.d.ts +6 -0
  24. package/dist/enums/ContractAddresses.d.ts.map +1 -0
  25. package/dist/enums/ContractAddresses.js +6 -0
  26. package/dist/enums/index.d.ts +5 -0
  27. package/dist/enums/index.d.ts.map +1 -0
  28. package/dist/enums/index.js +4 -0
  29. package/dist/exceptions/InvalidUsernameException.d.ts +4 -0
  30. package/dist/exceptions/InvalidUsernameException.d.ts.map +1 -0
  31. package/dist/exceptions/InvalidUsernameException.js +6 -0
  32. package/dist/exceptions/index.d.ts +2 -0
  33. package/dist/exceptions/index.d.ts.map +1 -0
  34. package/dist/exceptions/index.js +1 -0
  35. package/dist/identities/Address.d.ts +7 -0
  36. package/dist/identities/Address.d.ts.map +1 -0
  37. package/dist/identities/Address.js +15 -0
  38. package/dist/identities/PrivateKey.d.ts +16 -0
  39. package/dist/identities/PrivateKey.d.ts.map +1 -0
  40. package/dist/identities/PrivateKey.js +31 -0
  41. package/dist/identities/PublicKey.d.ts +8 -0
  42. package/dist/identities/PublicKey.d.ts.map +1 -0
  43. package/dist/identities/PublicKey.js +24 -0
  44. package/dist/identities/WIF.d.ts +4 -0
  45. package/dist/identities/WIF.d.ts.map +1 -0
  46. package/dist/identities/WIF.js +13 -0
  47. package/dist/identities/index.d.ts +5 -0
  48. package/dist/identities/index.d.ts.map +1 -0
  49. package/dist/identities/index.js +4 -0
  50. package/dist/index.d.ts +8 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +24 -0
  53. package/dist/networks/AbstractNetwork.d.ts +6 -0
  54. package/dist/networks/AbstractNetwork.d.ts.map +1 -0
  55. package/dist/networks/AbstractNetwork.js +2 -0
  56. package/dist/networks/Mainnet.d.ts +7 -0
  57. package/dist/networks/Mainnet.d.ts.map +1 -0
  58. package/dist/networks/Mainnet.js +12 -0
  59. package/dist/networks/Testnet.d.ts +7 -0
  60. package/dist/networks/Testnet.d.ts.map +1 -0
  61. package/dist/networks/Testnet.js +12 -0
  62. package/dist/networks/index.d.ts +4 -0
  63. package/dist/networks/index.d.ts.map +1 -0
  64. package/dist/networks/index.js +3 -0
  65. package/dist/transactions/Deserializer.d.ts +18 -0
  66. package/dist/transactions/Deserializer.d.ts.map +1 -0
  67. package/dist/transactions/Deserializer.js +106 -0
  68. package/dist/transactions/Serializer.d.ts +9 -0
  69. package/dist/transactions/Serializer.d.ts.map +1 -0
  70. package/dist/transactions/Serializer.js +16 -0
  71. package/dist/transactions/builders/AbstractTransactionBuilder.d.ts +17 -0
  72. package/dist/transactions/builders/AbstractTransactionBuilder.d.ts.map +1 -0
  73. package/dist/transactions/builders/AbstractTransactionBuilder.js +54 -0
  74. package/dist/transactions/builders/EvmCallBuilder.d.ts +9 -0
  75. package/dist/transactions/builders/EvmCallBuilder.d.ts.map +1 -0
  76. package/dist/transactions/builders/EvmCallBuilder.js +18 -0
  77. package/dist/transactions/builders/MultipaymentBuilder.d.ts +9 -0
  78. package/dist/transactions/builders/MultipaymentBuilder.d.ts.map +1 -0
  79. package/dist/transactions/builders/MultipaymentBuilder.js +25 -0
  80. package/dist/transactions/builders/TransferBuilder.d.ts +8 -0
  81. package/dist/transactions/builders/TransferBuilder.d.ts.map +1 -0
  82. package/dist/transactions/builders/TransferBuilder.js +15 -0
  83. package/dist/transactions/builders/UnvoteBuilder.d.ts +8 -0
  84. package/dist/transactions/builders/UnvoteBuilder.d.ts.map +1 -0
  85. package/dist/transactions/builders/UnvoteBuilder.js +15 -0
  86. package/dist/transactions/builders/UsernameRegistrationBuilder.d.ts +9 -0
  87. package/dist/transactions/builders/UsernameRegistrationBuilder.d.ts.map +1 -0
  88. package/dist/transactions/builders/UsernameRegistrationBuilder.js +22 -0
  89. package/dist/transactions/builders/UsernameResignationBuilder.d.ts +8 -0
  90. package/dist/transactions/builders/UsernameResignationBuilder.d.ts.map +1 -0
  91. package/dist/transactions/builders/UsernameResignationBuilder.js +15 -0
  92. package/dist/transactions/builders/ValidatorRegistrationBuilder.d.ts +9 -0
  93. package/dist/transactions/builders/ValidatorRegistrationBuilder.d.ts.map +1 -0
  94. package/dist/transactions/builders/ValidatorRegistrationBuilder.js +20 -0
  95. package/dist/transactions/builders/ValidatorResignationBuilder.d.ts +8 -0
  96. package/dist/transactions/builders/ValidatorResignationBuilder.d.ts.map +1 -0
  97. package/dist/transactions/builders/ValidatorResignationBuilder.js +15 -0
  98. package/dist/transactions/builders/VoteBuilder.d.ts +9 -0
  99. package/dist/transactions/builders/VoteBuilder.d.ts.map +1 -0
  100. package/dist/transactions/builders/VoteBuilder.js +20 -0
  101. package/dist/transactions/builders/index.d.ts +11 -0
  102. package/dist/transactions/builders/index.d.ts.map +1 -0
  103. package/dist/transactions/builders/index.js +10 -0
  104. package/dist/transactions/index.d.ts +5 -0
  105. package/dist/transactions/index.d.ts.map +1 -0
  106. package/dist/transactions/index.js +4 -0
  107. package/dist/transactions/types/AbstractTransaction.d.ts +22 -0
  108. package/dist/transactions/types/AbstractTransaction.d.ts.map +1 -0
  109. package/dist/transactions/types/AbstractTransaction.js +79 -0
  110. package/dist/transactions/types/EvmCall.d.ts +8 -0
  111. package/dist/transactions/types/EvmCall.d.ts.map +1 -0
  112. package/dist/transactions/types/EvmCall.js +14 -0
  113. package/dist/transactions/types/Multipayment.d.ts +9 -0
  114. package/dist/transactions/types/Multipayment.d.ts.map +1 -0
  115. package/dist/transactions/types/Multipayment.js +38 -0
  116. package/dist/transactions/types/Transfer.d.ts +8 -0
  117. package/dist/transactions/types/Transfer.d.ts.map +1 -0
  118. package/dist/transactions/types/Transfer.js +14 -0
  119. package/dist/transactions/types/Unvote.d.ts +8 -0
  120. package/dist/transactions/types/Unvote.d.ts.map +1 -0
  121. package/dist/transactions/types/Unvote.js +16 -0
  122. package/dist/transactions/types/UsernameRegistration.d.ts +9 -0
  123. package/dist/transactions/types/UsernameRegistration.d.ts.map +1 -0
  124. package/dist/transactions/types/UsernameRegistration.js +33 -0
  125. package/dist/transactions/types/UsernameResignation.d.ts +8 -0
  126. package/dist/transactions/types/UsernameResignation.d.ts.map +1 -0
  127. package/dist/transactions/types/UsernameResignation.js +16 -0
  128. package/dist/transactions/types/ValidatorRegistration.d.ts +9 -0
  129. package/dist/transactions/types/ValidatorRegistration.d.ts.map +1 -0
  130. package/dist/transactions/types/ValidatorRegistration.js +33 -0
  131. package/dist/transactions/types/ValidatorResignation.d.ts +8 -0
  132. package/dist/transactions/types/ValidatorResignation.d.ts.map +1 -0
  133. package/dist/transactions/types/ValidatorResignation.js +16 -0
  134. package/dist/transactions/types/Vote.d.ts +9 -0
  135. package/dist/transactions/types/Vote.d.ts.map +1 -0
  136. package/dist/transactions/types/Vote.js +31 -0
  137. package/dist/transactions/types/index.d.ts +11 -0
  138. package/dist/transactions/types/index.d.ts.map +1 -0
  139. package/dist/transactions/types/index.js +10 -0
  140. package/dist/types.d.ts +72 -0
  141. package/dist/types.d.ts.map +1 -0
  142. package/dist/types.js +1 -0
  143. package/dist/utils/Abi/ArgumentDecoder.d.ts +10 -0
  144. package/dist/utils/Abi/ArgumentDecoder.d.ts.map +1 -0
  145. package/dist/utils/Abi/ArgumentDecoder.js +21 -0
  146. package/dist/utils/Abi/json/Abi.Consensus.json +1673 -0
  147. package/dist/utils/Abi/json/Abi.Multipayment.json +110 -0
  148. package/dist/utils/Abi/json/Abi.Usernames.json +900 -0
  149. package/dist/utils/AbiBase.d.ts +8 -0
  150. package/dist/utils/AbiBase.d.ts.map +1 -0
  151. package/dist/utils/AbiBase.js +25 -0
  152. package/dist/utils/AbiDecoder.d.ts +6 -0
  153. package/dist/utils/AbiDecoder.d.ts.map +1 -0
  154. package/dist/utils/AbiDecoder.js +14 -0
  155. package/dist/utils/AbiEncoder.d.ts +5 -0
  156. package/dist/utils/AbiEncoder.d.ts.map +1 -0
  157. package/dist/utils/AbiEncoder.js +6 -0
  158. package/dist/utils/Helpers.d.ts +19 -0
  159. package/dist/utils/Helpers.d.ts.map +1 -0
  160. package/dist/utils/Helpers.js +38 -0
  161. package/dist/utils/Message.d.ts +14 -0
  162. package/dist/utils/Message.d.ts.map +1 -0
  163. package/dist/utils/Message.js +43 -0
  164. package/dist/utils/Slot.d.ts +5 -0
  165. package/dist/utils/Slot.d.ts.map +1 -0
  166. package/dist/utils/Slot.js +9 -0
  167. package/dist/utils/TransactionUtils.d.ts +7 -0
  168. package/dist/utils/TransactionUtils.d.ts.map +1 -0
  169. package/dist/utils/TransactionUtils.js +35 -0
  170. package/dist/utils/UnitConverter.d.ts +8 -0
  171. package/dist/utils/UnitConverter.d.ts.map +1 -0
  172. package/dist/utils/UnitConverter.js +48 -0
  173. package/dist/utils/index.d.ts +9 -0
  174. package/dist/utils/index.d.ts.map +1 -0
  175. package/dist/utils/index.js +8 -0
  176. package/jest.config.ts +14 -0
  177. package/package.json +59 -0
  178. package/prettier.config.js +8 -0
  179. package/src/configuration/Network.ts +18 -0
  180. package/src/configuration/index.ts +1 -0
  181. package/src/enums/AbiFunction.ts +9 -0
  182. package/src/enums/Constants.ts +4 -0
  183. package/src/enums/ContractAbiType.ts +6 -0
  184. package/src/enums/ContractAddresses.ts +5 -0
  185. package/src/enums/index.ts +4 -0
  186. package/src/exceptions/InvalidUsernameException.ts +6 -0
  187. package/src/exceptions/index.ts +1 -0
  188. package/src/identities/Address.ts +19 -0
  189. package/src/identities/PrivateKey.ts +49 -0
  190. package/src/identities/PublicKey.ts +28 -0
  191. package/src/identities/WIF.ts +16 -0
  192. package/src/identities/index.ts +4 -0
  193. package/src/index.ts +7 -0
  194. package/src/networks/AbstractNetwork.ts +7 -0
  195. package/src/networks/Mainnet.ts +15 -0
  196. package/src/networks/Testnet.ts +15 -0
  197. package/src/networks/index.ts +3 -0
  198. package/src/transactions/Deserializer.ts +140 -0
  199. package/src/transactions/Serializer.ts +24 -0
  200. package/src/transactions/builders/AbstractTransactionBuilder.ts +81 -0
  201. package/src/transactions/builders/EvmCallBuilder.ts +24 -0
  202. package/src/transactions/builders/MultipaymentBuilder.ts +37 -0
  203. package/src/transactions/builders/TransferBuilder.ts +22 -0
  204. package/src/transactions/builders/UnvoteBuilder.ts +21 -0
  205. package/src/transactions/builders/UsernameRegistrationBuilder.ts +35 -0
  206. package/src/transactions/builders/UsernameResignationBuilder.ts +21 -0
  207. package/src/transactions/builders/ValidatorRegistrationBuilder.ts +32 -0
  208. package/src/transactions/builders/ValidatorResignationBuilder.ts +21 -0
  209. package/src/transactions/builders/VoteBuilder.ts +29 -0
  210. package/src/transactions/builders/index.ts +10 -0
  211. package/src/transactions/index.ts +4 -0
  212. package/src/transactions/types/AbstractTransaction.ts +118 -0
  213. package/src/transactions/types/EvmCall.ts +22 -0
  214. package/src/transactions/types/Multipayment.ts +51 -0
  215. package/src/transactions/types/Transfer.ts +22 -0
  216. package/src/transactions/types/Unvote.ts +24 -0
  217. package/src/transactions/types/UsernameRegistration.ts +44 -0
  218. package/src/transactions/types/UsernameResignation.ts +24 -0
  219. package/src/transactions/types/ValidatorRegistration.ts +44 -0
  220. package/src/transactions/types/ValidatorResignation.ts +24 -0
  221. package/src/transactions/types/Vote.ts +42 -0
  222. package/src/transactions/types/index.ts +10 -0
  223. package/src/types.ts +86 -0
  224. package/src/utils/Abi/ArgumentDecoder.ts +29 -0
  225. package/src/utils/Abi/json/Abi.Consensus.json +1673 -0
  226. package/src/utils/Abi/json/Abi.Multipayment.json +110 -0
  227. package/src/utils/Abi/json/Abi.Usernames.json +900 -0
  228. package/src/utils/AbiBase.ts +32 -0
  229. package/src/utils/AbiDecoder.ts +19 -0
  230. package/src/utils/AbiEncoder.ts +7 -0
  231. package/src/utils/Helpers.ts +46 -0
  232. package/src/utils/Message.ts +63 -0
  233. package/src/utils/Slot.ts +11 -0
  234. package/src/utils/TransactionUtils.ts +43 -0
  235. package/src/utils/UnitConverter.ts +57 -0
  236. package/src/utils/index.ts +8 -0
  237. package/tests/fixtures/global.json +10 -0
  238. package/tests/fixtures/identity.json +11 -0
  239. package/tests/fixtures/message-sign.json +5 -0
  240. package/tests/fixtures/sign-compact.json +10 -0
  241. package/tests/fixtures/transactions/evm-sign.json +18 -0
  242. package/tests/fixtures/transactions/multipayment-empty.json +18 -0
  243. package/tests/fixtures/transactions/multipayment-single.json +18 -0
  244. package/tests/fixtures/transactions/multipayment.json +18 -0
  245. package/tests/fixtures/transactions/transfer-0.json +18 -0
  246. package/tests/fixtures/transactions/transfer-large-amount.json +18 -0
  247. package/tests/fixtures/transactions/transfer.json +18 -0
  248. package/tests/fixtures/transactions/unvote.json +18 -0
  249. package/tests/fixtures/transactions/username-registration.json +18 -0
  250. package/tests/fixtures/transactions/username-resignation.json +18 -0
  251. package/tests/fixtures/transactions/validator-registration.json +18 -0
  252. package/tests/fixtures/transactions/validator-resignation.json +18 -0
  253. package/tests/fixtures/transactions/vote.json +18 -0
  254. package/tests/unit/identities/Address.test.ts +26 -0
  255. package/tests/unit/identities/PrivateKey.test.ts +36 -0
  256. package/tests/unit/identities/PublicKey.test.ts +39 -0
  257. package/tests/unit/identities/WIF.test.ts +8 -0
  258. package/tests/unit/transactions/Deserializer.test.ts +138 -0
  259. package/tests/unit/transactions/Serializer.test.ts +9 -0
  260. package/tests/unit/transactions/builders/EvmCallBuilder.test.ts +49 -0
  261. package/tests/unit/transactions/builders/MultipaymentBuilder.test.ts +99 -0
  262. package/tests/unit/transactions/builders/TransferBuilder.test.ts +73 -0
  263. package/tests/unit/transactions/builders/UnvoteBuilder.test.ts +47 -0
  264. package/tests/unit/transactions/builders/UsernameRegistrationBuilder.test.ts +54 -0
  265. package/tests/unit/transactions/builders/UsernameResignationBuilder.test.ts +48 -0
  266. package/tests/unit/transactions/builders/ValidatorRegistrationBuilder.test.ts +51 -0
  267. package/tests/unit/transactions/builders/ValidatorResignationBuilder.test.ts +48 -0
  268. package/tests/unit/transactions/builders/VoteBuilder.test.ts +48 -0
  269. package/tests/unit/transactions/types/AbstractTransaction.test.ts +145 -0
  270. package/tests/unit/utils/Abi/ArgumentDecoder.test.ts +55 -0
  271. package/tests/unit/utils/AbiDecoder.test.ts +44 -0
  272. package/tests/unit/utils/AbiEncoder.test.ts +30 -0
  273. package/tests/unit/utils/Helpers.test.ts +120 -0
  274. package/tests/unit/utils/Message.test.ts +104 -0
  275. package/tests/unit/utils/Slot.test.ts +69 -0
  276. package/tests/unit/utils/TransactionUtils.test.ts +31 -0
  277. package/tests/unit/utils/UnitConverter.test.ts +71 -0
  278. package/tsconfig.json +20 -0
package/src/index.ts ADDED
@@ -0,0 +1,7 @@
1
+ export * from "./configuration";
2
+ export * from "./enums";
3
+ export * from "./exceptions";
4
+ export * from "./identities";
5
+ export * from "./networks";
6
+ export * from "./transactions";
7
+ export * from "./utils";
@@ -0,0 +1,7 @@
1
+ export abstract class AbstractNetwork {
2
+ abstract chainId(): number;
3
+
4
+ abstract epoch(): string;
5
+
6
+ abstract getWif(): string;
7
+ }
@@ -0,0 +1,15 @@
1
+ import { AbstractNetwork } from "./AbstractNetwork";
2
+
3
+ export class Mainnet extends AbstractNetwork {
4
+ public chainId(): number {
5
+ return 10000;
6
+ }
7
+
8
+ public epoch(): string {
9
+ return "2017-03-21T13:00:00.000Z";
10
+ }
11
+
12
+ public getWif(): string {
13
+ return "ba";
14
+ }
15
+ }
@@ -0,0 +1,15 @@
1
+ import { AbstractNetwork } from "./AbstractNetwork";
2
+
3
+ export class Testnet extends AbstractNetwork {
4
+ public chainId(): number {
5
+ return 10000;
6
+ }
7
+
8
+ public epoch(): string {
9
+ return "2017-03-21T13:00:00.000Z";
10
+ }
11
+
12
+ public getWif(): string {
13
+ return "ba";
14
+ }
15
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./AbstractNetwork";
2
+ export * from "./Mainnet";
3
+ export * from "./Testnet";
@@ -0,0 +1,140 @@
1
+ import { AbiResult, ITransaction, TransactionData } from "@/types";
2
+
3
+ import BigNumber from "bignumber.js";
4
+ import { Constants } from "@/enums/Constants";
5
+ import { ContractAbiType } from "@/enums/ContractAbiType";
6
+ import { Transfer } from "./types/Transfer";
7
+ import { decodeRlp } from "ethers";
8
+ import { EvmCall, Multipayment, Unvote, UsernameRegistration, UsernameResignation, ValidatorRegistration, ValidatorResignation, Vote } from "./types";
9
+ import { AbiFunction } from "@/enums";
10
+ import { AbiDecoder } from "@/utils";
11
+
12
+ export class Deserializer {
13
+ SIGNATURE_SIZE = 64;
14
+ RECOVERY_SIZE = 1;
15
+
16
+ encoded_rlp: string;
17
+ serialized: string;
18
+
19
+ constructor(serialized: string) {
20
+ this.serialized = serialized;
21
+ this.encoded_rlp = "0x" + serialized.substring(2);
22
+ }
23
+
24
+ static new(serialized: string): Deserializer {
25
+ return new Deserializer(serialized);
26
+ }
27
+
28
+ deserialize(): ITransaction {
29
+ const decodedRlp = decodeRlp(this.encoded_rlp);
30
+
31
+ const data: TransactionData = {
32
+ network: Number(decodedRlp[0]),
33
+ nonce: Deserializer.parseNumber(decodedRlp[1] as string),
34
+ gasPrice: Deserializer.parseNumber(decodedRlp[3] as string).toString(),
35
+ gasLimit: Deserializer.parseNumber(decodedRlp[4] as string).toString(),
36
+ recipientAddress: Deserializer.parseAddress(decodedRlp[5] as string),
37
+ value: Deserializer.parseBigNumber(decodedRlp[6] as string),
38
+ data: Deserializer.parseHex(decodedRlp[7] as string),
39
+ };
40
+
41
+ if (decodedRlp.length === 12) {
42
+ data["v"] = Deserializer.parseNumber(decodedRlp[9] as string) + Constants.ETHEREUM_RECOVERY_ID_OFFSET;
43
+ data["r"] = Deserializer.parseHex(decodedRlp[10] as string);
44
+ data["s"] = Deserializer.parseHex(decodedRlp[11] as string);
45
+ }
46
+
47
+ const transaction = this.guessTransactionFromData(data);
48
+
49
+ transaction.data = data;
50
+ transaction.recoverSender();
51
+
52
+ transaction.data["id"] = transaction.getId();
53
+
54
+ return transaction;
55
+ }
56
+
57
+ guessTransactionFromData(data: TransactionData): ITransaction {
58
+ const multipaymentPayloadData = Deserializer.decodePayload(data, ContractAbiType.MULTIPAYMENT);
59
+ if (multipaymentPayloadData !== null) {
60
+ const functionName = multipaymentPayloadData.functionName;
61
+ if (functionName == AbiFunction.MULTIPAYMENT) {
62
+ return new Multipayment(data);
63
+ }
64
+ }
65
+
66
+ if (data.value !== "0") {
67
+ return new Transfer(data);
68
+ }
69
+
70
+ const consensusPayloadData = Deserializer.decodePayload(data);
71
+ if (consensusPayloadData !== null) {
72
+ const functionName = consensusPayloadData.functionName;
73
+ if (functionName == AbiFunction.VOTE) {
74
+ return new Vote(data);
75
+ }
76
+
77
+ if (functionName == AbiFunction.UNVOTE) {
78
+ return new Unvote(data);
79
+ }
80
+
81
+ if (functionName == AbiFunction.VALIDATOR_REGISTRATION) {
82
+ return new ValidatorRegistration(data);
83
+ }
84
+
85
+ if (functionName == AbiFunction.VALIDATOR_RESIGNATION) {
86
+ return new ValidatorResignation(data);
87
+ }
88
+ }
89
+
90
+ const usernamePayloadData = Deserializer.decodePayload(data, ContractAbiType.USERNAMES);
91
+ if (usernamePayloadData !== null) {
92
+ const functionName = usernamePayloadData.functionName;
93
+ if (functionName == AbiFunction.USERNAME_REGISTRATION) {
94
+ return new UsernameRegistration(data);
95
+ }
96
+
97
+ if (functionName == AbiFunction.USERNAME_RESIGNATION) {
98
+ return new UsernameResignation(data);
99
+ }
100
+ }
101
+
102
+ return new EvmCall(data)
103
+ }
104
+
105
+ static decodePayload(
106
+ data: TransactionData,
107
+ abiType: ContractAbiType = ContractAbiType.CONSENSUS,
108
+ ): AbiResult | null {
109
+ const payload = data.data;
110
+
111
+ if (! payload) {
112
+ return null;
113
+ }
114
+
115
+ const decoder = new AbiDecoder(abiType);
116
+ try {
117
+ return decoder.decodeFunctionData(payload);
118
+ } catch (e) {
119
+ //
120
+ }
121
+
122
+ return null;
123
+ }
124
+
125
+ static parseNumber(value: string): number {
126
+ return value === "0x" ? 0 : Number(value);
127
+ }
128
+
129
+ static parseBigNumber(value: string): string {
130
+ return (value === "0x" ? new BigNumber(0) : new BigNumber(value)).toString(10);
131
+ }
132
+
133
+ static parseAddress(value: string): string | undefined {
134
+ return value === "0x" ? undefined : value;
135
+ }
136
+
137
+ static parseHex(value: string): string {
138
+ return value.replace(/^0x/, "");
139
+ }
140
+ }
@@ -0,0 +1,24 @@
1
+ import { ITransaction } from "@/types";
2
+ import { TransactionUtils } from "@/utils/TransactionUtils";
3
+
4
+ export class Serializer {
5
+ public transaction: ITransaction;
6
+
7
+ constructor(transaction: ITransaction) {
8
+ this.transaction = transaction;
9
+ }
10
+
11
+ static new(transaction: ITransaction): Serializer {
12
+ return new this(transaction);
13
+ }
14
+
15
+ static getBytes(transaction: ITransaction, skipSignature: boolean = false): Buffer {
16
+ return transaction.serialize(skipSignature);
17
+ }
18
+
19
+ serialize(skipSignature: boolean = false): Buffer {
20
+ this.transaction.serialized = TransactionUtils.toBuffer(this.transaction.data, skipSignature);
21
+
22
+ return this.transaction.serialized;
23
+ }
24
+ }
@@ -0,0 +1,81 @@
1
+ import { ITransaction, ITransactionBuilder, TransactionData } from "@/types";
2
+
3
+ import { Network } from "@/configuration/Network";
4
+ import { PrivateKey } from "@/identities/PrivateKey";
5
+ import { PublicKey } from "@/identities/PublicKey";
6
+
7
+ export abstract class AbstractTransactionBuilder<T extends ITransactionBuilder<T>> implements ITransactionBuilder<T> {
8
+ public transaction: ITransaction;
9
+
10
+ constructor(data?: Record<string, any>) {
11
+ this.transaction = this.getTransactionInstance(
12
+ data ?? {
13
+ value: "0",
14
+ senderPublicKey: "",
15
+ gasPrice: "5",
16
+ nonce: "1",
17
+ network: Network.get().chainId(),
18
+ gasLimit: 1_000_000,
19
+ data: "",
20
+ },
21
+ );
22
+ }
23
+
24
+ public gasLimit(gasLimit: string): T {
25
+ this.transaction.data.gasLimit = gasLimit;
26
+
27
+ return this as unknown as T;
28
+ }
29
+
30
+ public recipientAddress(recipientAddress: string): T {
31
+ this.transaction.data.recipientAddress = recipientAddress;
32
+
33
+ return this as unknown as T;
34
+ }
35
+
36
+ public gasPrice(gasPrice: string): T {
37
+ this.transaction.data.gasPrice = gasPrice;
38
+
39
+ return this as unknown as T;
40
+ }
41
+
42
+ public nonce(nonce: string): T {
43
+ this.transaction.data.nonce = nonce;
44
+
45
+ return this as unknown as T;
46
+ }
47
+
48
+ public network(network: number): T {
49
+ this.transaction.data.network = network;
50
+
51
+ return this as unknown as T;
52
+ }
53
+
54
+ public async sign(passphrase: string): Promise<T> {
55
+ this.transaction.data.senderPublicKey = PublicKey.fromPassphrase(passphrase).publicKey;
56
+
57
+ this.transaction = await this.transaction.sign(PrivateKey.fromPassphrase(passphrase));
58
+
59
+ this.transaction.data.id = this.transaction.getId();
60
+
61
+ return this as unknown as T;
62
+ }
63
+
64
+ public verify(): boolean {
65
+ return this.transaction.verify();
66
+ }
67
+
68
+ public toArray(): TransactionData {
69
+ return this.transaction.toArray();
70
+ }
71
+
72
+ public toJson(): string {
73
+ return this.transaction.toJson();
74
+ }
75
+
76
+ public toString(): string {
77
+ return this.toJson();
78
+ }
79
+
80
+ protected abstract getTransactionInstance(data?: Record<string, any>): ITransaction;
81
+ }
@@ -0,0 +1,24 @@
1
+ import { IEvmCallBuilder, ITransaction, TransactionData } from "@/types";
2
+
3
+ import { AbstractTransactionBuilder } from "./AbstractTransactionBuilder";
4
+ import { EvmCall } from "@/transactions/types/EvmCall";
5
+ import { Helpers } from "@/utils/Helpers";
6
+
7
+ export class EvmCallBuilder extends AbstractTransactionBuilder<IEvmCallBuilder> implements IEvmCallBuilder {
8
+ public constructor(data?: Record<string, any>) {
9
+ super(data);
10
+ }
11
+
12
+ public static new(data?: Record<string, any>): IEvmCallBuilder {
13
+ return new this(data);
14
+ }
15
+
16
+ public payload(payload: string): IEvmCallBuilder {
17
+ this.transaction.data["data"] = Helpers.removeLeadingHexZero(payload);
18
+ return this;
19
+ }
20
+
21
+ protected getTransactionInstance(data?: Record<string, any>): ITransaction {
22
+ return new EvmCall(data as TransactionData);
23
+ }
24
+ }
@@ -0,0 +1,37 @@
1
+ import { IMultipaymentBuilder, ITransaction, TransactionData } from "@/types";
2
+
3
+ import { AbstractTransactionBuilder } from "./AbstractTransactionBuilder";
4
+ import { ContractAddresses } from "@/enums/ContractAddresses";
5
+ import { Multipayment } from "@/transactions/types/Multipayment";
6
+
7
+ export class MultipaymentBuilder
8
+ extends AbstractTransactionBuilder<IMultipaymentBuilder>
9
+ implements IMultipaymentBuilder
10
+ {
11
+ public constructor(data?: Record<string, any>) {
12
+ super(data);
13
+
14
+ this.recipientAddress(ContractAddresses.MULTIPAYMENT);
15
+ }
16
+
17
+ public static new(data?: Record<string, any>): IMultipaymentBuilder {
18
+ return new this(data);
19
+ }
20
+
21
+ public pay(address: string, amount: string): IMultipaymentBuilder {
22
+ let payload: [string[], string[]] = this.transaction.data["pay"] as [string[], string[]];
23
+ payload[0].push(address);
24
+ payload[1].push(amount);
25
+ this.transaction.data.pay = payload;
26
+
27
+ this.transaction.data.value = (BigInt(this.transaction.data.value ?? 0) + BigInt(amount)).toString();
28
+
29
+ this.transaction.refreshPayloadData();
30
+
31
+ return this;
32
+ }
33
+
34
+ protected getTransactionInstance(data?: Record<string, any>): ITransaction {
35
+ return new Multipayment(data as TransactionData);
36
+ }
37
+ }
@@ -0,0 +1,22 @@
1
+ import { ITransaction, ITransferBuilder, TransactionData } from "@/types";
2
+
3
+ import { AbstractTransactionBuilder } from "./AbstractTransactionBuilder";
4
+ import { Transfer } from "@/transactions/types/Transfer";
5
+
6
+ export class TransferBuilder extends AbstractTransactionBuilder<ITransferBuilder> implements ITransferBuilder {
7
+ public static new(data?: Record<string, any>): ITransferBuilder {
8
+ return new this(data);
9
+ }
10
+
11
+ public value(value: string): ITransferBuilder {
12
+ this.transaction.data.value = value;
13
+
14
+ this.transaction.refreshPayloadData();
15
+
16
+ return this;
17
+ }
18
+
19
+ protected getTransactionInstance(data?: Record<string, any>): ITransaction {
20
+ return new Transfer(data as TransactionData);
21
+ }
22
+ }
@@ -0,0 +1,21 @@
1
+ import { IBasicTransactionBuilder, ITransaction, TransactionData } from "@/types";
2
+
3
+ import { AbstractTransactionBuilder } from "./AbstractTransactionBuilder";
4
+ import { ContractAddresses } from "@/enums/ContractAddresses";
5
+ import { Unvote } from "@/transactions/types/Unvote";
6
+
7
+ export class UnvoteBuilder extends AbstractTransactionBuilder<IBasicTransactionBuilder> {
8
+ public constructor(data?: Record<string, any>) {
9
+ super(data);
10
+
11
+ this.recipientAddress(ContractAddresses.CONSENSUS);
12
+ }
13
+
14
+ public static new(data?: Record<string, any>): IBasicTransactionBuilder {
15
+ return new this(data);
16
+ }
17
+
18
+ protected getTransactionInstance(data?: Record<string, any>): ITransaction {
19
+ return new Unvote(data as TransactionData);
20
+ }
21
+ }
@@ -0,0 +1,35 @@
1
+ import { ITransaction, IUsernameRegistrationBuilder, TransactionData } from "@/types";
2
+
3
+ import { AbstractTransactionBuilder } from "./AbstractTransactionBuilder";
4
+ import { ContractAddresses } from "@/enums/ContractAddresses";
5
+ import { Helpers } from "@/utils/Helpers";
6
+ import { UsernameRegistration } from "@/transactions/types/UsernameRegistration";
7
+
8
+ export class UsernameRegistrationBuilder
9
+ extends AbstractTransactionBuilder<IUsernameRegistrationBuilder>
10
+ implements IUsernameRegistrationBuilder
11
+ {
12
+ public constructor(data?: Record<string, any>) {
13
+ super(data);
14
+
15
+ this.recipientAddress(ContractAddresses.USERNAMES);
16
+ }
17
+
18
+ public static new(data?: Record<string, any>): IUsernameRegistrationBuilder {
19
+ return new this(data);
20
+ }
21
+
22
+ public username(username: string): IUsernameRegistrationBuilder {
23
+ Helpers.isValidUsername(username);
24
+
25
+ this.transaction.data.username = username;
26
+
27
+ this.transaction.refreshPayloadData();
28
+
29
+ return this;
30
+ }
31
+
32
+ protected getTransactionInstance(data?: Record<string, any>): ITransaction {
33
+ return new UsernameRegistration(data as TransactionData);
34
+ }
35
+ }
@@ -0,0 +1,21 @@
1
+ import { IBasicTransactionBuilder, ITransaction, TransactionData } from "@/types";
2
+
3
+ import { AbstractTransactionBuilder } from "./AbstractTransactionBuilder";
4
+ import { ContractAddresses } from "@/enums/ContractAddresses";
5
+ import { UsernameResignation } from "@/transactions/types/UsernameResignation";
6
+
7
+ export class UsernameResignationBuilder extends AbstractTransactionBuilder<IBasicTransactionBuilder> {
8
+ public constructor(data?: Record<string, any>) {
9
+ super(data);
10
+
11
+ this.recipientAddress(ContractAddresses.USERNAMES);
12
+ }
13
+
14
+ public static new(data?: Record<string, any>): IBasicTransactionBuilder {
15
+ return new this(data);
16
+ }
17
+
18
+ protected getTransactionInstance(data?: Record<string, any>): ITransaction {
19
+ return new UsernameResignation(data as TransactionData);
20
+ }
21
+ }
@@ -0,0 +1,32 @@
1
+ import { ITransaction, IValidatorRegistrationBuilder, TransactionData } from "@/types";
2
+
3
+ import { AbstractTransactionBuilder } from "./AbstractTransactionBuilder";
4
+ import { ContractAddresses } from "@/enums/ContractAddresses";
5
+ import { ValidatorRegistration } from "@/transactions/types/ValidatorRegistration";
6
+
7
+ export class ValidatorRegistrationBuilder
8
+ extends AbstractTransactionBuilder<IValidatorRegistrationBuilder>
9
+ implements IValidatorRegistrationBuilder
10
+ {
11
+ public constructor(data?: Record<string, any>) {
12
+ super(data);
13
+
14
+ this.recipientAddress(ContractAddresses.CONSENSUS);
15
+ }
16
+
17
+ public static new(data?: Record<string, any>): IValidatorRegistrationBuilder {
18
+ return new this(data);
19
+ }
20
+
21
+ public validatorPublicKey(validatorPublicKey: string): IValidatorRegistrationBuilder {
22
+ this.transaction.data.validatorPublicKey = validatorPublicKey;
23
+
24
+ this.transaction.refreshPayloadData();
25
+
26
+ return this;
27
+ }
28
+
29
+ protected getTransactionInstance(data?: Record<string, any>): ITransaction {
30
+ return new ValidatorRegistration(data as TransactionData);
31
+ }
32
+ }
@@ -0,0 +1,21 @@
1
+ import { IBasicTransactionBuilder, ITransaction, TransactionData } from "@/types";
2
+
3
+ import { AbstractTransactionBuilder } from "./AbstractTransactionBuilder";
4
+ import { ContractAddresses } from "@/enums/ContractAddresses";
5
+ import { ValidatorResignation } from "@/transactions/types/ValidatorResignation";
6
+
7
+ export class ValidatorResignationBuilder extends AbstractTransactionBuilder<IBasicTransactionBuilder> {
8
+ public constructor(data?: Record<string, any>) {
9
+ super(data);
10
+
11
+ this.recipientAddress(ContractAddresses.CONSENSUS);
12
+ }
13
+
14
+ public static new(data?: Record<string, any>): IBasicTransactionBuilder {
15
+ return new this(data);
16
+ }
17
+
18
+ protected getTransactionInstance(data?: Record<string, any>): ITransaction {
19
+ return new ValidatorResignation(data as TransactionData);
20
+ }
21
+ }
@@ -0,0 +1,29 @@
1
+ import { ITransaction, IVoteBuilder, TransactionData } from "@/types";
2
+
3
+ import { AbstractTransactionBuilder } from "./AbstractTransactionBuilder";
4
+ import { ContractAddresses } from "@/enums/ContractAddresses";
5
+ import { Vote } from "@/transactions/types/Vote";
6
+
7
+ export class VoteBuilder extends AbstractTransactionBuilder<IVoteBuilder> implements IVoteBuilder {
8
+ public constructor(data?: Record<string, any>) {
9
+ super(data);
10
+
11
+ this.recipientAddress(ContractAddresses.CONSENSUS);
12
+ }
13
+
14
+ public static new(data?: Record<string, any>): IVoteBuilder {
15
+ return new this(data);
16
+ }
17
+
18
+ public vote(vote: string): IVoteBuilder {
19
+ this.transaction.data.vote = vote;
20
+
21
+ this.transaction.refreshPayloadData();
22
+
23
+ return this;
24
+ }
25
+
26
+ protected getTransactionInstance(data?: Record<string, any>): ITransaction {
27
+ return new Vote(data as TransactionData);
28
+ }
29
+ }
@@ -0,0 +1,10 @@
1
+ export * from "./AbstractTransactionBuilder";
2
+ export * from "./EvmCallBuilder";
3
+ export * from "./MultipaymentBuilder";
4
+ export * from "./TransferBuilder";
5
+ export * from "./UnvoteBuilder";
6
+ export * from "./ValidatorRegistrationBuilder";
7
+ export * from "./ValidatorResignationBuilder";
8
+ export * from "./UsernameRegistrationBuilder";
9
+ export * from "./UsernameResignationBuilder";
10
+ export * from "./VoteBuilder";
@@ -0,0 +1,4 @@
1
+ export * from "./builders";
2
+ export * from "./types";
3
+ export * from "./Deserializer";
4
+ export * from "./Serializer";