@caict/bop-typescript-sdk 1.0.0

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 (115) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +5 -0
  4. package/README.md +112 -0
  5. package/package.json +90 -0
  6. package/src/bop/bop-base/README.md +5 -0
  7. package/src/bop/bop-base/base.ts +366 -0
  8. package/src/bop/bop-base/index.ts +83 -0
  9. package/src/bop/bop-base/permit.ts +116 -0
  10. package/src/bop/bop-base/test/base.test.ts +867 -0
  11. package/src/bop/bop-base/test/index.test.ts +69 -0
  12. package/src/bop/bop-base/test/permit.test.ts +125 -0
  13. package/src/bop/bop-base/tsconfig.json +8 -0
  14. package/src/bop/bop-proto/README.md +2 -0
  15. package/src/bop/bop-proto/bop-ws.proto +266 -0
  16. package/src/bop/bop-proto/bop-ws.ts +4447 -0
  17. package/src/bop/bop-proto/bop.proto +898 -0
  18. package/src/bop/bop-proto/bop.ts +12890 -0
  19. package/src/bop/bop-proto/tsconfig.json +8 -0
  20. package/src/bop/bop-ws/index.ts +315 -0
  21. package/src/bop/bop-ws/sample/sample.ts +107 -0
  22. package/src/bop/bop-ws/tsconfig.json +8 -0
  23. package/src/bop/index.ts +14 -0
  24. package/src/bop-sdk/index.ts +22 -0
  25. package/src/bop-sdk/interface/abstract-service/abstract-account.ts +23 -0
  26. package/src/bop-sdk/interface/abstract-service/abstract-chain.ts +9 -0
  27. package/src/bop-sdk/interface/abstract-service/abstract-contract.ts +16 -0
  28. package/src/bop-sdk/interface/abstract-service/abstract-ledger.ts +15 -0
  29. package/src/bop-sdk/interface/abstract-service/abstract-provider.ts +13 -0
  30. package/src/bop-sdk/interface/abstract-service/abstract-signer.ts +133 -0
  31. package/src/bop-sdk/interface/abstract-service/abstract-transaction.ts +86 -0
  32. package/src/bop-sdk/interface/provider-ws.ts +10 -0
  33. package/src/bop-sdk/interface/provider.ts +22 -0
  34. package/src/bop-sdk/interface/service/3rd.ts +54 -0
  35. package/src/bop-sdk/interface/service/account.ts +86 -0
  36. package/src/bop-sdk/interface/service/chain.ts +27 -0
  37. package/src/bop-sdk/interface/service/contract.ts +51 -0
  38. package/src/bop-sdk/interface/service/helper.ts +426 -0
  39. package/src/bop-sdk/interface/service/ledger.ts +75 -0
  40. package/src/bop-sdk/interface/service/offline/check/index.js +138 -0
  41. package/src/bop-sdk/interface/service/offline/common/constant.js +6 -0
  42. package/src/bop-sdk/interface/service/offline/common/snowFlakeUtils.js +192 -0
  43. package/src/bop-sdk/interface/service/offline/common/util.js +511 -0
  44. package/src/bop-sdk/interface/service/offline/exception/customErrors.js +29 -0
  45. package/src/bop-sdk/interface/service/offline/exception/errors.js +90 -0
  46. package/src/bop-sdk/interface/service/offline/exception/index.js +5 -0
  47. package/src/bop-sdk/interface/service/offline/operation/accountCreateOperation.js +28 -0
  48. package/src/bop-sdk/interface/service/offline/operation/accountSetMetadataOperation.js +44 -0
  49. package/src/bop-sdk/interface/service/offline/operation/accountSetPrivilegeOperation.js +49 -0
  50. package/src/bop-sdk/interface/service/offline/operation/contractCreateOperation.js +43 -0
  51. package/src/bop-sdk/interface/service/offline/operation/contractInvokeOperation.js +42 -0
  52. package/src/bop-sdk/interface/service/offline/operation/contractInvokeRequestOperation.js +69 -0
  53. package/src/bop-sdk/interface/service/offline/operation/gasSendOperation.js +29 -0
  54. package/src/bop-sdk/interface/service/offline/operation/gasSendRequestOperation.js +61 -0
  55. package/src/bop-sdk/interface/service/offline/operation/index.js +20 -0
  56. package/src/bop-sdk/interface/service/offline/proto/chain_pb.js +12079 -0
  57. package/src/bop-sdk/interface/service/offline/proto/common_pb.js +2867 -0
  58. package/src/bop-sdk/interface/service/offline/transaction/index.js +988 -0
  59. package/src/bop-sdk/interface/service/offline/transaction/operations.js +188 -0
  60. package/src/bop-sdk/interface/service/offline/validate/account.js +152 -0
  61. package/src/bop-sdk/interface/service/offline/validate/contract.js +101 -0
  62. package/src/bop-sdk/interface/service/offline/validate/index.js +10 -0
  63. package/src/bop-sdk/interface/service/offline/validate/transaction.js +51 -0
  64. package/src/bop-sdk/interface/service/transaction.ts +731 -0
  65. package/src/bop-sdk/interface/signer.ts +46 -0
  66. package/src/bop-sdk/interface/test/3rd.test.ts +1571 -0
  67. package/src/bop-sdk/interface/test/account.test.ts +284 -0
  68. package/src/bop-sdk/interface/test/chain.test.ts +45 -0
  69. package/src/bop-sdk/interface/test/contract.test.ts +283 -0
  70. package/src/bop-sdk/interface/test/ledger.test.ts +166 -0
  71. package/src/bop-sdk/interface/test/provider.test.ts +407 -0
  72. package/src/bop-sdk/interface/test/signer.test.ts +105 -0
  73. package/src/bop-sdk/interface/test/transaction.test.ts +713 -0
  74. package/src/bop-sdk/proto/bop-sdk-common.proto +159 -0
  75. package/src/bop-sdk/proto/bop-sdk-common.ts +829 -0
  76. package/src/bop-sdk/proto/bop-sdk-interface.proto +581 -0
  77. package/src/bop-sdk/proto/bop-sdk-interface.ts +10839 -0
  78. package/src/bop-sdk/proto/bop-sdk-utils.proto +86 -0
  79. package/src/bop-sdk/proto/bop-sdk-utils.ts +1495 -0
  80. package/src/bop-sdk/utils/abi/abi-coder.ts +147 -0
  81. package/src/bop-sdk/utils/abi/address.ts +109 -0
  82. package/src/bop-sdk/utils/abi/bignumber.ts +403 -0
  83. package/src/bop-sdk/utils/abi/bytes.ts +565 -0
  84. package/src/bop-sdk/utils/abi/coders/abstract-coder.ts +239 -0
  85. package/src/bop-sdk/utils/abi/coders/address.ts +58 -0
  86. package/src/bop-sdk/utils/abi/coders/anonymous.ts +25 -0
  87. package/src/bop-sdk/utils/abi/coders/array.ts +275 -0
  88. package/src/bop-sdk/utils/abi/coders/boolean.ts +21 -0
  89. package/src/bop-sdk/utils/abi/coders/bytes.ts +36 -0
  90. package/src/bop-sdk/utils/abi/coders/fixed-bytes.ts +35 -0
  91. package/src/bop-sdk/utils/abi/coders/null.ts +25 -0
  92. package/src/bop-sdk/utils/abi/coders/number.ts +56 -0
  93. package/src/bop-sdk/utils/abi/coders/string.ts +24 -0
  94. package/src/bop-sdk/utils/abi/coders/tuple.ts +73 -0
  95. package/src/bop-sdk/utils/abi/constants/addresses.ts +1 -0
  96. package/src/bop-sdk/utils/abi/constants/bignumbers.ts +30 -0
  97. package/src/bop-sdk/utils/abi/constants/hashes.ts +2 -0
  98. package/src/bop-sdk/utils/abi/constants/index.ts +15 -0
  99. package/src/bop-sdk/utils/abi/constants/strings.ts +2 -0
  100. package/src/bop-sdk/utils/abi/fragments.ts +1243 -0
  101. package/src/bop-sdk/utils/abi/id.ts +6 -0
  102. package/src/bop-sdk/utils/abi/index.ts +46 -0
  103. package/src/bop-sdk/utils/abi/interface.ts +921 -0
  104. package/src/bop-sdk/utils/abi/keccak256.ts +9 -0
  105. package/src/bop-sdk/utils/abi/properties.ts +172 -0
  106. package/src/bop-sdk/utils/abi/strings/bytes32.ts +40 -0
  107. package/src/bop-sdk/utils/abi/strings/idna.ts +258 -0
  108. package/src/bop-sdk/utils/abi/strings/index.ts +28 -0
  109. package/src/bop-sdk/utils/abi/strings/utf8.ts +373 -0
  110. package/src/bop-sdk/utils/encryption-address.ts +501 -0
  111. package/src/bop-sdk/utils/encryption-crypto.ts +427 -0
  112. package/src/bop-sdk/utils/encryption-mnemonics.ts +120 -0
  113. package/src/bop-sdk/utils/index.ts +27 -0
  114. package/src/bop-sdk/utils/logger.ts +480 -0
  115. package/src/index.ts +35 -0
@@ -0,0 +1,426 @@
1
+ import {
2
+ SdkStatusCode,
3
+ sdkStatusCodeFromJSON,
4
+ } from "../../../bop-sdk/proto/bop-sdk-common";
5
+ import {
6
+ GetChainInfoResponse,
7
+ GetNetworkIdResponse,
8
+ LedgerResponse,
9
+ LedgerNumberResponse,
10
+ LedgerLeaderResponse,
11
+ LedgerValidatorsResponse,
12
+ LedgerTxHashesResponse,
13
+ GetAccountBalanceResponse,
14
+ GetAccountIncreaseNonceResponse,
15
+ GetAccountMetadataResponse,
16
+ GetAccountPrivResponse,
17
+ GetAccountResponse,
18
+ contractTypeFromJSON,
19
+ CheckContractAccountResponse,
20
+ GetContractInfoResponse,
21
+ GetTxPoolSizeResponse,
22
+ GetTransactionCacheResponse,
23
+ GetTransactionHistoryResponse,
24
+ GetTxResponse,
25
+ SubmitTransactionResponse,
26
+ TransactionCacheChain,
27
+ TransactionHistory,
28
+ } from "../../../bop-sdk/proto/bop-sdk-interface";
29
+ import {
30
+ GetTransactionHistoryResponse as GetTransactionHistoryBopResponse,
31
+ GetLedgerResponse,
32
+ HelloResponse,
33
+ StatusCodes,
34
+ GetAccountBaseResponse,
35
+ GetAccountResponse as GetAccountBopResponse,
36
+ GetTxCacheSizeResponse,
37
+ GetTransactionCacheChainResponse,
38
+ GetTransactionCacheChainResult,
39
+ GetTransactionHistoryResult,
40
+ SubmitTransactionResponse as SubmitTransactionBopResponse,
41
+ } from "../../../bop/bop-proto/bop";
42
+
43
+ export function ChainHelloToChainInfo(
44
+ from: HelloResponse,
45
+ ): GetChainInfoResponse {
46
+ if (from.errorCode === StatusCodes.SUCCESS) {
47
+ const response: GetChainInfoResponse = {
48
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
49
+ errorDesc: from.errorDesc,
50
+ result: {
51
+ licenseVersion: from.result?.licenseVersion,
52
+ websocketPort: from.result?.websocketPort,
53
+ chainVersion: from.result?.chainVersion,
54
+ currentTime: from.result?.currentTime,
55
+ hashType: from.result?.hashType,
56
+ ledgerVersion: from.result?.ledgerVersion,
57
+ networkId: from.result?.networkId,
58
+ },
59
+ };
60
+ return response;
61
+ } else {
62
+ const response: GetChainInfoResponse = {
63
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
64
+ errorDesc: from.errorDesc,
65
+ };
66
+ return response;
67
+ }
68
+ }
69
+
70
+ export function ChainHelloToNetworkId(
71
+ from: HelloResponse,
72
+ ): GetNetworkIdResponse {
73
+ if (from.errorCode === StatusCodes.SUCCESS) {
74
+ const response: GetNetworkIdResponse = {
75
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
76
+ errorDesc: from.errorDesc,
77
+ result: from.result?.networkId,
78
+ };
79
+ return response;
80
+ } else {
81
+ const response: GetNetworkIdResponse = {
82
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
83
+ errorDesc: from.errorDesc,
84
+ };
85
+ return response;
86
+ }
87
+ }
88
+
89
+ export function LedgerHeaderToHeader(from: GetLedgerResponse): LedgerResponse {
90
+ if (from.errorCode === StatusCodes.SUCCESS) {
91
+ const response: LedgerResponse = {
92
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
93
+ errorDesc: from.errorDesc,
94
+ result: {
95
+ seq: from.result?.header?.seq,
96
+ hash: from.result?.header?.hash,
97
+ previousHash: from.result?.header?.previousHash,
98
+ accountTreeHash: from.result?.header?.accountTreeHash,
99
+ closeTime: from.result?.header?.closeTime,
100
+ consensusValueHash: from.result?.header?.consensusValueHash,
101
+ version: from.result?.header?.version,
102
+ txCount: from.result?.header?.txCount,
103
+ validatorsHash: from.result?.header?.validatorsHash,
104
+ feesHash: from.result?.header?.feesHash,
105
+ },
106
+ };
107
+ return response;
108
+ } else {
109
+ const response: LedgerResponse = {
110
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
111
+ errorDesc: from.errorDesc,
112
+ };
113
+ return response;
114
+ }
115
+ }
116
+
117
+ export function LedgerHeaderToLedgerNumber(
118
+ from: GetLedgerResponse,
119
+ ): LedgerNumberResponse {
120
+ if (from.errorCode === StatusCodes.SUCCESS) {
121
+ const response: LedgerNumberResponse = {
122
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
123
+ errorDesc: from.errorDesc,
124
+ result: from.result?.header?.seq,
125
+ };
126
+ return response;
127
+ } else {
128
+ const response: LedgerNumberResponse = {
129
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
130
+ errorDesc: from.errorDesc,
131
+ };
132
+ return response;
133
+ }
134
+ }
135
+
136
+ export function LedgerHeaderToLedgerLeader(
137
+ from: GetLedgerResponse,
138
+ ): LedgerLeaderResponse {
139
+ if (from.errorCode === StatusCodes.SUCCESS) {
140
+ const response: LedgerLeaderResponse = {
141
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
142
+ errorDesc: from.errorDesc,
143
+ result: from.result?.leader,
144
+ };
145
+ return response;
146
+ } else {
147
+ const response: LedgerLeaderResponse = {
148
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
149
+ errorDesc: from.errorDesc,
150
+ };
151
+ return response;
152
+ }
153
+ }
154
+
155
+ export function LedgerHeaderToLedgerValidators(
156
+ from: GetLedgerResponse,
157
+ ): LedgerValidatorsResponse {
158
+ if (from.errorCode === StatusCodes.SUCCESS) {
159
+ const response: LedgerValidatorsResponse = {
160
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
161
+ errorDesc: from.errorDesc,
162
+ result: from.result?.validators,
163
+ };
164
+ return response;
165
+ } else {
166
+ const response: LedgerValidatorsResponse = {
167
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
168
+ errorDesc: from.errorDesc,
169
+ };
170
+ return response;
171
+ }
172
+ }
173
+
174
+ export function LedgerHeaderToLedgerTxHashes(
175
+ from: GetTransactionHistoryBopResponse,
176
+ ): LedgerTxHashesResponse {
177
+ if (from.errorCode === StatusCodes.SUCCESS) {
178
+ let response: LedgerTxHashesResponse = {
179
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
180
+ errorDesc: from.errorDesc,
181
+ result: [],
182
+ };
183
+
184
+ for (let element of from.result?.transactions) {
185
+ response.result.push(element?.hash);
186
+ }
187
+ return response;
188
+ } else {
189
+ const response: LedgerTxHashesResponse = {
190
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
191
+ errorDesc: from.errorDesc,
192
+ };
193
+ return response;
194
+ }
195
+ }
196
+
197
+ export function AccountAccountResultToAccountInfo(
198
+ from: GetAccountBaseResponse,
199
+ ): GetAccountResponse {
200
+ if (from.errorCode === StatusCodes.SUCCESS) {
201
+ let response: GetAccountResponse = {
202
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
203
+ errorDesc: from.errorDesc,
204
+ result: {
205
+ address: from.result?.address,
206
+ balance: from.result?.balance,
207
+ nonce: from.result?.nonce,
208
+ authTransfer: from.result?.authTransfer,
209
+ metadatasHash: from.result?.metadatasHash,
210
+ contract: {
211
+ type: contractTypeFromJSON(from.result?.contract?.type),
212
+ payload: from.result?.contract?.payload,
213
+ },
214
+ priv: from.result?.priv,
215
+ },
216
+ };
217
+ return response;
218
+ } else {
219
+ const response: GetAccountResponse = {
220
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
221
+ errorDesc: from.errorDesc,
222
+ };
223
+ return response;
224
+ }
225
+ }
226
+
227
+ export function AccountAccountToAccountMetadatas(
228
+ from: GetAccountBopResponse,
229
+ ): GetAccountMetadataResponse {
230
+ console.log(from);
231
+ if (from.errorCode === StatusCodes.SUCCESS) {
232
+ let response: GetAccountMetadataResponse = {
233
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
234
+ errorDesc: from.errorDesc,
235
+ result: [],
236
+ };
237
+ for (let element of from.result?.metadatas) {
238
+ response.result.push(element);
239
+ }
240
+ return response;
241
+ } else {
242
+ const response: GetAccountMetadataResponse = {
243
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
244
+ errorDesc: from.errorDesc,
245
+ };
246
+ return response;
247
+ }
248
+ }
249
+
250
+ export function AccountAccountResultToIncreaseNonce(
251
+ from: GetAccountBaseResponse,
252
+ ): GetAccountIncreaseNonceResponse {
253
+ if (from.errorCode === StatusCodes.SUCCESS) {
254
+ let response: GetAccountIncreaseNonceResponse = {
255
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
256
+ errorDesc: from.errorDesc,
257
+ result: from.result?.nonce === undefined ? 0 : from.result?.nonce,
258
+ };
259
+ return response;
260
+ } else {
261
+ const response: GetAccountIncreaseNonceResponse = {
262
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
263
+ errorDesc: from.errorDesc,
264
+ };
265
+ return response;
266
+ }
267
+ }
268
+
269
+ export function AccountAccountResultToBalance(
270
+ from: GetAccountBaseResponse,
271
+ ): GetAccountBalanceResponse {
272
+ if (from.errorCode === StatusCodes.SUCCESS) {
273
+ let response: GetAccountBalanceResponse = {
274
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
275
+ errorDesc: from.errorDesc,
276
+ result: from.result?.balance,
277
+ };
278
+ return response;
279
+ } else {
280
+ const response: GetAccountBalanceResponse = {
281
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
282
+ errorDesc: from.errorDesc,
283
+ };
284
+ return response;
285
+ }
286
+ }
287
+
288
+ export function AccountAccountResultToPriv(
289
+ from: GetAccountBaseResponse,
290
+ ): GetAccountPrivResponse {
291
+ if (from.errorCode === StatusCodes.SUCCESS) {
292
+ let response: GetAccountPrivResponse = {
293
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
294
+ errorDesc: from.errorDesc,
295
+ result: from.result?.priv,
296
+ };
297
+ return response;
298
+ } else {
299
+ const response: GetAccountPrivResponse = {
300
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
301
+ errorDesc: from.errorDesc,
302
+ };
303
+ return response;
304
+ }
305
+ }
306
+
307
+ export function ContractAccountResultToCheckContractAccount(
308
+ from: GetAccountBaseResponse,
309
+ ): CheckContractAccountResponse {
310
+ if (from.errorCode === StatusCodes.SUCCESS) {
311
+ let response: CheckContractAccountResponse = {
312
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
313
+ errorDesc: from.errorDesc,
314
+ result:
315
+ from.result?.contract !== undefined &&
316
+ from.result?.contract?.payload !== "",
317
+ };
318
+ return response;
319
+ } else {
320
+ const response: CheckContractAccountResponse = {
321
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
322
+ errorDesc: from.errorDesc,
323
+ };
324
+ return response;
325
+ }
326
+ }
327
+
328
+ export function ContractAccountResultToGetContractInfo(
329
+ from: GetAccountBaseResponse,
330
+ ): GetContractInfoResponse {
331
+ if (from.errorCode === StatusCodes.SUCCESS) {
332
+ if (from.result?.contract === undefined) {
333
+ let response: GetContractInfoResponse = {
334
+ errorCode: SdkStatusCode.CONTRACTADDRESS_NOT_CONTRACTACCOUNT_ERROR,
335
+ errorDesc: "address not contract account",
336
+ };
337
+ return response;
338
+ } else {
339
+ let response: GetContractInfoResponse = {
340
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
341
+ errorDesc: from.errorDesc,
342
+ result: {
343
+ type: contractTypeFromJSON(from.result?.contract?.type),
344
+ payload: from.result?.contract?.payload,
345
+ },
346
+ };
347
+ return response;
348
+ }
349
+ } else {
350
+ const response: GetContractInfoResponse = {
351
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
352
+ errorDesc: from.errorDesc,
353
+ };
354
+ return response;
355
+ }
356
+ }
357
+
358
+ export function TxTxCacheSizeToTxPoolSizeResponse(
359
+ from: GetTxCacheSizeResponse,
360
+ ): GetTxPoolSizeResponse {
361
+ if (from.errorCode === StatusCodes.SUCCESS) {
362
+ let response: GetTxPoolSizeResponse = {
363
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
364
+ errorDesc: from.errorDesc,
365
+ result: from.result?.queueSize,
366
+ };
367
+ return response;
368
+ } else {
369
+ const response: GetTxPoolSizeResponse = {
370
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
371
+ errorDesc: from.errorDesc,
372
+ };
373
+ return response;
374
+ }
375
+ }
376
+
377
+ export function TxTxCacheChainToTxCacheResponse(
378
+ from: GetTransactionCacheChainResponse,
379
+ ): GetTransactionCacheResponse {
380
+ if (from.errorCode === StatusCodes.SUCCESS) {
381
+ let response: GetTransactionCacheResponse = {
382
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
383
+ errorDesc: from.errorDesc,
384
+ result: TransactionCacheChain.fromJSON(
385
+ GetTransactionCacheChainResult.toJSON(from.result),
386
+ ),
387
+ };
388
+ return response;
389
+ } else {
390
+ const response: GetTransactionCacheResponse = {
391
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
392
+ errorDesc: from.errorDesc,
393
+ };
394
+ return response;
395
+ }
396
+ }
397
+
398
+ export function TxTxHistoryToTxHistoryResponse(
399
+ from: GetTransactionHistoryBopResponse,
400
+ ): GetTransactionHistoryResponse {
401
+ if (from.errorCode === StatusCodes.SUCCESS) {
402
+ let response: GetTransactionHistoryResponse = {
403
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
404
+ errorDesc: from.errorDesc,
405
+ result: TransactionHistory.fromJSON(
406
+ GetTransactionHistoryResult.toJSON(from.result),
407
+ ),
408
+ };
409
+ return response;
410
+ } else {
411
+ const response: GetTransactionHistoryResponse = {
412
+ errorCode: sdkStatusCodeFromJSON(from.errorCode),
413
+ errorDesc: from.errorDesc,
414
+ };
415
+ return response;
416
+ }
417
+ }
418
+
419
+ export function TxSubmitTxToSubmitTransactionResponse(
420
+ from: SubmitTransactionBopResponse,
421
+ ): SubmitTransactionResponse {
422
+ let response: SubmitTransactionResponse = SubmitTransactionResponse.fromJSON(
423
+ SubmitTransactionBopResponse.toJSON(from),
424
+ );
425
+ return response;
426
+ }
@@ -0,0 +1,75 @@
1
+ import {
2
+ GetLedgerRequest,
3
+ GetTransactionHistoryRequest,
4
+ } from "../../../bop/bop-proto/bop";
5
+ import {
6
+ LedgerResponse,
7
+ LedgerNumberResponse,
8
+ LedgerLeaderResponse,
9
+ LedgerValidatorsResponse,
10
+ LedgerTxHashesResponse,
11
+ } from "../../../bop-sdk/proto/bop-sdk-interface";
12
+ import { BopInterface } from "../../../bop/bop-base";
13
+ import { ledger } from "../abstract-service/abstract-ledger";
14
+ import * as trans from "./helper";
15
+
16
+ export class LedgerByBop extends ledger {
17
+ readonly bopInterface: BopInterface;
18
+ constructor(bop: BopInterface) {
19
+ super();
20
+ this.bopInterface = bop;
21
+ }
22
+
23
+ public async getLedgerNumber(): Promise<LedgerNumberResponse> {
24
+ const request: GetLedgerRequest = {};
25
+ return trans.LedgerHeaderToLedgerNumber(
26
+ await this.bopInterface.callService("base_getLedger", request),
27
+ );
28
+ }
29
+
30
+ public async getLedger(seq?: number): Promise<LedgerResponse> {
31
+ const request: GetLedgerRequest = {};
32
+ if (seq !== undefined) request.seq = seq;
33
+ return trans.LedgerHeaderToHeader(
34
+ await this.bopInterface.callService("base_getLedger", request),
35
+ );
36
+ }
37
+
38
+ public async getLedgerLeader(seq?: number): Promise<LedgerLeaderResponse> {
39
+ const request: GetLedgerRequest = {
40
+ withLeader: true,
41
+ };
42
+ if (seq !== undefined) request.seq = seq;
43
+ return trans.LedgerHeaderToLedgerLeader(
44
+ await this.bopInterface.callService("base_getLedger", request),
45
+ );
46
+ }
47
+
48
+ public async getLedgerValidators(
49
+ seq?: number,
50
+ ): Promise<LedgerValidatorsResponse> {
51
+ const request: GetLedgerRequest = {
52
+ withValidator: true,
53
+ };
54
+ if (seq !== undefined) request.seq = seq;
55
+ return trans.LedgerHeaderToLedgerValidators(
56
+ await this.bopInterface.callService("base_getLedger", request),
57
+ );
58
+ }
59
+
60
+ public async getLedgerTxHashes(
61
+ seq?: number,
62
+ ): Promise<LedgerTxHashesResponse> {
63
+ const request: GetTransactionHistoryRequest = {
64
+ limit: 1000,
65
+ };
66
+ if (seq !== undefined) request.ledgerSeq = seq;
67
+
68
+ return trans.LedgerHeaderToLedgerTxHashes(
69
+ await this.bopInterface.callService(
70
+ "base_getTransactionHistory",
71
+ request,
72
+ ),
73
+ );
74
+ }
75
+ }
@@ -0,0 +1,138 @@
1
+ const util = require("../common/util");
2
+ const keyPair = require("@caict/bif-encryption");
3
+ const errors = require("../exception");
4
+ const config = require("../common/constant");
5
+ const is = require("is-type-of");
6
+
7
+ function validateType(request) {
8
+ // 检测参数是否是数组或者不是对象
9
+ if (
10
+ is.array(request) ||
11
+ !is.object(request) ||
12
+ JSON.stringify(request) === "{}"
13
+ ) {
14
+ return util._responseError(errors.REQUEST_NULL_ERROR);
15
+ }
16
+ return request;
17
+ }
18
+
19
+ // 参数校验
20
+ function validateObject(object) {
21
+ let request = validateType(object);
22
+ if (request.errorCode) {
23
+ return request;
24
+ }
25
+ let {
26
+ amount,
27
+ operations,
28
+ senderAddress,
29
+ contractAddress,
30
+ sourceAddress,
31
+ feeLimit,
32
+ gasPrice,
33
+ ceilLedgerSeq,
34
+ nonceType,
35
+ initBalance,
36
+ type,
37
+ } = request;
38
+ // 检测ceilLedgerSeq、feeLimit、gasPrice、domainId、nonceType、sourceAddress是否是有效的
39
+ if (
40
+ ceilLedgerSeq != null &&
41
+ ceilLedgerSeq !== "" &&
42
+ !util._isAvailableValue(ceilLedgerSeq)
43
+ ) {
44
+ return util._responseError(errors.INVALID_CEILLEDGERSEQ_ERROR);
45
+ }
46
+ if (
47
+ feeLimit != null &&
48
+ feeLimit !== "" &&
49
+ !util._isAvailableValue(feeLimit)
50
+ ) {
51
+ return util._responseError(errors.INVALID_FEELIMIT_ERROR);
52
+ }
53
+ if (
54
+ gasPrice != null &&
55
+ gasPrice !== "" &&
56
+ !util._isAvailableValue(gasPrice)
57
+ ) {
58
+ return util._responseError(errors.INVALID_GASPRICE_ERROR);
59
+ }
60
+ if (nonceType == null || nonceType === "") {
61
+ nonceType = config.INIT_ZERO;
62
+ } else if (!(nonceType == "0" || nonceType == "1")) {
63
+ return util._responseError(errors.INVALID_NONCE_TYPE_ERROR);
64
+ }
65
+
66
+ if (amount !== undefined) {
67
+ if (amount == null || amount === "" || !util._isAvailableValue(amount)) {
68
+ return util._responseError(errors.INVALID_AMOUNT_ERROR);
69
+ }
70
+ }
71
+ if (type !== undefined) {
72
+ if (type != null && type !== "" && !(type === 0 || type === 1)) {
73
+ return util._responseError(errors.INVALID_CONTRACT_TYPE_ERROR);
74
+ }
75
+ if (type == null || type === "") {
76
+ type = 0;
77
+ }
78
+ }
79
+ if (operations !== undefined) {
80
+ if (is.array(operations)) {
81
+ if (operations.length == 0) {
82
+ return util._responseError(errors.OPERATIONS_EMPTY_ERROR);
83
+ }
84
+ }
85
+ if (!is.object(operations) || operations == null || operations === "") {
86
+ return util._responseError(errors.OPERATIONS_EMPTY_ERROR);
87
+ }
88
+ }
89
+ if (sourceAddress !== undefined) {
90
+ if (
91
+ sourceAddress != null &&
92
+ sourceAddress !== "" &&
93
+ !keyPair.isAddress(sourceAddress)
94
+ ) {
95
+ return util._responseError(errors.INVALID_ADDRESS_ERROR);
96
+ }
97
+ if (sourceAddress == null || sourceAddress == "") {
98
+ return util._responseError(errors.INVALID_ADDRESS_ERROR);
99
+ }
100
+ }
101
+ if (contractAddress !== undefined) {
102
+ if (
103
+ contractAddress != null &&
104
+ contractAddress !== "" &&
105
+ !keyPair.isAddress(contractAddress)
106
+ ) {
107
+ return util._responseError(errors.INVALID_CONTRACTADDRESS_ERROR);
108
+ }
109
+ if (contractAddress == null || contractAddress == "") {
110
+ return util._responseError(errors.INVALID_CONTRACTADDRESS_ERROR);
111
+ }
112
+ }
113
+ if (initBalance !== undefined) {
114
+ if (!util._verifyIInitBalancelValue(initBalance)) {
115
+ return util._responseError(errors.INVALID_INITBALANCE_ERROR);
116
+ }
117
+ }
118
+ if (senderAddress !== undefined) {
119
+ if (!keyPair.isAddress(senderAddress)) {
120
+ return util._responseError(errors.INVALID_ADDRESS_ERROR);
121
+ }
122
+ }
123
+ // 如果没有feeLimit、gasPrice、domainId传递值则赋给默认值
124
+ if (feeLimit == null || feeLimit === "") {
125
+ request.feeLimit = config.feeLimit;
126
+ }
127
+ if (gasPrice == null || gasPrice === "") {
128
+ request.gasPrice = config.gasPrice;
129
+ }
130
+ return request;
131
+ }
132
+
133
+ module.exports = {
134
+ // 参数校验
135
+ validateObject: validateObject,
136
+ // 参数类型校验
137
+ validateType: validateType,
138
+ };
@@ -0,0 +1,6 @@
1
+ let config = {
2
+ feeLimit: "10000000",
3
+ gasPrice: "1",
4
+ INIT_ZERO: "0",
5
+ };
6
+ module.exports = config;