@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,284 @@
1
+ import { AccountByBop } from "../service/account";
2
+ import { expect } from "chai";
3
+ import * as sinon from "sinon";
4
+ import { BopInterface, Config } from "../../../bop/bop-base";
5
+ import {
6
+ GetAccountBalanceResponse,
7
+ GetAccountIncreaseNonceResponse,
8
+ GetAccountMetadataResponse,
9
+ GetAccountPrivResponse,
10
+ GetAccountResponse,
11
+ } from "../../proto/bop-sdk-interface";
12
+
13
+ // 使用 Sinon 创建模拟对象
14
+ const sandbox = sinon.createSandbox();
15
+ describe("provider-account-test", () => {
16
+ let account: AccountByBop;
17
+
18
+ let bopInterface: BopInterface;
19
+ let config: Config;
20
+
21
+ beforeEach(() => {
22
+ config = new Config("https://bif-mainnet.bitfactory.cn", "xxx", "xxx");
23
+ bopInterface = new BopInterface(config);
24
+
25
+ account = new AccountByBop(bopInterface);
26
+ });
27
+
28
+ afterEach(() => {
29
+ // 重置模拟对象
30
+ sandbox.restore();
31
+ });
32
+
33
+ describe("account test", () => {
34
+ it("account.getAccount", async () => {
35
+ let response: GetAccountResponse;
36
+ response = await account.getAccount(
37
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
38
+ );
39
+ console.log(response);
40
+ expect(response.errorCode).to.equal(0);
41
+ expect(response.errorDesc).to.equal("ok");
42
+ expect(response.result?.address).to.equal(
43
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
44
+ );
45
+ });
46
+
47
+ it("account.getAccount", async () => {
48
+ let response: GetAccountResponse;
49
+ response = await account.getAccount("");
50
+ console.log(response);
51
+ expect(response.errorCode).to.equal(-9);
52
+ });
53
+
54
+ it("account.getAccount", async () => {
55
+ let response: GetAccountResponse;
56
+ response = await account.getAccount("adfad$@");
57
+ console.log(response);
58
+ expect(response.errorCode).to.equal(4);
59
+ });
60
+
61
+ it("account.getAccountMetadata", async () => {
62
+ let response: GetAccountMetadataResponse;
63
+ response = await account.getAccountMetadata(
64
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
65
+ );
66
+ expect(response.errorCode).to.equal(0);
67
+ expect(response.errorDesc).to.equal("ok");
68
+ expect(response?.result).to.be.an("array").that.is.not.empty;
69
+ });
70
+
71
+ it("account.getAccountMetadata key exist", async () => {
72
+ let response: GetAccountMetadataResponse;
73
+ response = await account.getAccountMetadata(
74
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
75
+ undefined,
76
+ "layer_2_confirm_seq_did:bid:efGeHdgd1AwmtgUBKac3bGqrmPoNhA1k4254791",
77
+ );
78
+ console.log(response);
79
+ expect(response.errorCode).to.equal(0);
80
+ expect(response.errorDesc).to.equal("ok");
81
+ expect(response.result[0].key).to.equal(
82
+ "layer_2_confirm_seq_did:bid:efGeHdgd1AwmtgUBKac3bGqrmPoNhA1k4254791",
83
+ );
84
+ });
85
+
86
+ it("account.getAccountMetadata key not exist", async () => {
87
+ let response: GetAccountMetadataResponse;
88
+ response = await account.getAccountMetadata(
89
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
90
+ undefined,
91
+ "layer_3_confirm_seq_did:bid:efGeHdgd1AwmtgUBKac3bGqrmPoNhA1k4254791",
92
+ );
93
+ console.log(response);
94
+ expect(response.errorCode).to.equal(0);
95
+ expect(response.errorDesc).to.equal("ok");
96
+ });
97
+
98
+ it("account.getAccountMetadata account not exist", async () => {
99
+ let response: GetAccountMetadataResponse;
100
+ response = await account.getAccountMetadata(
101
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk9",
102
+ );
103
+ console.log(response);
104
+ expect(response.errorCode).to.equal(4);
105
+ });
106
+
107
+ it("account.getAccountMetadata account not have metadata", async () => {
108
+ let response: GetAccountMetadataResponse;
109
+ response = await account.getAccountMetadata(
110
+ "did:bid:effvm1wrsYv4NHtyjvMGcPg1CWX9TW2a",
111
+ );
112
+ console.log(response);
113
+ expect(response.errorCode).to.equal(0);
114
+ });
115
+
116
+ it("account.getAccountMetadata account with seq and exist key", async () => {
117
+ let response: GetAccountMetadataResponse;
118
+ response = await account.getAccountMetadata(
119
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
120
+ 5000000,
121
+ "layer_2_confirm_seq_did:bid:efGeHdgd1AwmtgUBKac3bGqrmPoNhA1k4254791",
122
+ );
123
+ console.log(response);
124
+ expect(response.errorCode).to.equal(0);
125
+ });
126
+
127
+ it("account.getAccountMetadata account with seq and not exist key", async () => {
128
+ let response: GetAccountMetadataResponse;
129
+ response = await account.getAccountMetadata(
130
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
131
+ 1,
132
+ "layer_3_confirm_seq_did:bid:efGeHdgd1AwmtgUBKac3bGqrmPoNhA1k4254791",
133
+ );
134
+ console.log(response);
135
+ expect(response.errorCode).to.equal(4);
136
+ });
137
+
138
+ it("account.getAccountMetadata account empty", async () => {
139
+ let response: GetAccountMetadataResponse;
140
+ response = await account.getAccountMetadata(
141
+ "",
142
+ 1,
143
+ "layer_3_confirm_seq_did:bid:efGeHdgd1AwmtgUBKac3bGqrmPoNhA1k4254791",
144
+ );
145
+ console.log(response);
146
+ expect(response.errorCode).to.equal(-9);
147
+ });
148
+
149
+ it("account.getAccountMetadata account invalid", async () => {
150
+ let response: GetAccountMetadataResponse;
151
+ response = await account.getAccountMetadata(
152
+ "xxx",
153
+ 1,
154
+ "layer_3_confirm_seq_did:bid:efGeHdgd1AwmtgUBKac3bGqrmPoNhA1k4254791",
155
+ );
156
+ console.log(response);
157
+ expect(response.errorCode).to.equal(4);
158
+ });
159
+
160
+ it("account.getAccountMetadata account normal and seq(9999999)", async () => {
161
+ let response: GetAccountMetadataResponse;
162
+ response = await account.getAccountMetadata(
163
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
164
+ 9999999,
165
+ );
166
+ console.log(response);
167
+ expect(response.errorCode).to.equal(4);
168
+ });
169
+
170
+ it("account.getAccountMetadata account normal and seq(-1)", async () => {
171
+ let response: GetAccountMetadataResponse;
172
+ response = await account.getAccountMetadata(
173
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
174
+ -1,
175
+ );
176
+ console.log(response);
177
+ expect(response.errorCode).to.equal(4);
178
+ });
179
+
180
+ it("account.getAccountMetadata account normal and key length more 1024", async () => {
181
+ let response: GetAccountMetadataResponse;
182
+ response = await account.getAccountMetadata(
183
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
184
+ undefined,
185
+ "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
186
+ );
187
+ console.log(response);
188
+ expect(response.errorCode).to.equal(11011);
189
+ });
190
+
191
+ it("account.getAccountIncreaseNonce", async () => {
192
+ let response: GetAccountIncreaseNonceResponse;
193
+ response = await account.getAccountIncreaseNonce(
194
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
195
+ );
196
+ console.log(response);
197
+ expect(response.errorCode).to.equal(0);
198
+ expect(response.errorDesc).to.equal("ok");
199
+ expect(response.result).to.greaterThan(79685);
200
+ });
201
+
202
+ it("account.getAccountIncreaseNonce account not exist", async () => {
203
+ let response: GetAccountIncreaseNonceResponse;
204
+ response = await account.getAccountIncreaseNonce(
205
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk9",
206
+ );
207
+ console.log(response);
208
+ expect(response.errorCode).to.equal(4);
209
+ });
210
+
211
+ it("account.getAccountIncreaseNonce account empty", async () => {
212
+ let response: GetAccountIncreaseNonceResponse;
213
+ response = await account.getAccountIncreaseNonce("");
214
+ console.log(response);
215
+ expect(response.errorCode).to.equal(-9);
216
+ });
217
+
218
+ it("account.getAccountIncreaseNonce account invalid", async () => {
219
+ let response: GetAccountIncreaseNonceResponse;
220
+ response = await account.getAccountIncreaseNonce("xxxx");
221
+ console.log(response);
222
+ expect(response.errorCode).to.equal(4);
223
+ });
224
+
225
+ it("account.getAccountBalance", async () => {
226
+ let response: GetAccountBalanceResponse;
227
+ response = await account.getAccountBalance(
228
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
229
+ );
230
+ expect(response.errorCode).to.equal(0);
231
+ expect(response.errorDesc).to.equal("ok");
232
+ expect(response.result).to.equal(0);
233
+ });
234
+
235
+ it("account.getAccountBalance account not exist", async () => {
236
+ let response: GetAccountBalanceResponse;
237
+ response = await account.getAccountBalance(
238
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk9",
239
+ );
240
+ expect(response.errorCode).to.equal(4);
241
+ });
242
+
243
+ it("account.getAccountBalance account empty", async () => {
244
+ let response: GetAccountBalanceResponse;
245
+ response = await account.getAccountBalance("");
246
+ expect(response.errorCode).to.equal(-9);
247
+ });
248
+
249
+ it("account.getAccountBalance account invalid", async () => {
250
+ let response: GetAccountBalanceResponse;
251
+ response = await account.getAccountBalance("xxxx");
252
+ expect(response.errorCode).to.equal(4);
253
+ });
254
+
255
+ it("account.getAccountPriv", async () => {
256
+ let response: GetAccountPrivResponse;
257
+ response = await account.getAccountPriv(
258
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
259
+ );
260
+ expect(response.errorCode).to.equal(0);
261
+ expect(response.errorDesc).to.equal("ok");
262
+ });
263
+
264
+ it("account.getAccountPriv account not exist", async () => {
265
+ let response: GetAccountPrivResponse;
266
+ response = await account.getAccountPriv(
267
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk9",
268
+ );
269
+ expect(response.errorCode).to.equal(4);
270
+ });
271
+
272
+ it("account.getAccountPriv account empty", async () => {
273
+ let response: GetAccountPrivResponse;
274
+ response = await account.getAccountPriv("");
275
+ expect(response.errorCode).to.equal(-9);
276
+ });
277
+
278
+ it("account.getAccountPriv account invalid", async () => {
279
+ let response: GetAccountPrivResponse;
280
+ response = await account.getAccountPriv("xxx");
281
+ expect(response.errorCode).to.equal(4);
282
+ });
283
+ });
284
+ });
@@ -0,0 +1,45 @@
1
+ import { ChainByBop } from "../service/chain";
2
+ import { expect } from "chai";
3
+ import * as sinon from "sinon";
4
+ import { BopInterface, Config } from "../../../bop/bop-base";
5
+ import {
6
+ GetChainInfoResponse,
7
+ GetNetworkIdResponse,
8
+ } from "../../../bop-sdk/proto/bop-sdk-interface";
9
+
10
+ // 使用 Sinon 创建模拟对象
11
+ const sandbox = sinon.createSandbox();
12
+ describe("provider-chain-test", () => {
13
+ let chain: ChainByBop;
14
+
15
+ let bopInterface: BopInterface;
16
+ let config: Config;
17
+
18
+ beforeEach(() => {
19
+ config = new Config("https://bif-mainnet.bitfactory.cn", "xxx", "xxx");
20
+ bopInterface = new BopInterface(config);
21
+
22
+ chain = new ChainByBop(bopInterface);
23
+ });
24
+
25
+ afterEach(() => {
26
+ // 重置模拟对象
27
+ sandbox.restore();
28
+ });
29
+
30
+ describe("chain test", () => {
31
+ it("chain.getChainInfo", async () => {
32
+ let response: GetChainInfoResponse;
33
+ response = await chain.getChainInfo();
34
+ expect(response.errorCode).to.equal(0);
35
+ expect(response.result?.networkId).to.equal("16234539267878");
36
+ });
37
+
38
+ it("chain.getNetworkId", async () => {
39
+ let response: GetNetworkIdResponse;
40
+ response = await chain.getNetworkId();
41
+ expect(response.errorCode).to.equal(0);
42
+ expect(response.result).to.equal("16234539267878");
43
+ });
44
+ });
45
+ });
@@ -0,0 +1,283 @@
1
+ import { ContractByBop } from "../service/contract";
2
+ import { expect } from "chai";
3
+ import * as sinon from "sinon";
4
+ import { BopInterface, Config } from "../../../bop/bop-base";
5
+ import {
6
+ CheckContractAccountResponse,
7
+ GetContractInfoResponse,
8
+ CallContractRequest,
9
+ CallContractResponse,
10
+ } from "../../proto/bop-sdk-interface";
11
+
12
+ // 使用 Sinon 创建模拟对象
13
+ const sandbox = sinon.createSandbox();
14
+ describe("provider-contract-test", () => {
15
+ let contract: ContractByBop;
16
+
17
+ let bopInterface: BopInterface;
18
+ let config: Config;
19
+
20
+ beforeEach(() => {
21
+ config = new Config("https://bif-mainnet.bitfactory.cn", "xxx", "xxx");
22
+ bopInterface = new BopInterface(config);
23
+
24
+ contract = new ContractByBop(bopInterface);
25
+ });
26
+
27
+ afterEach(() => {
28
+ // 重置模拟对象
29
+ sandbox.restore();
30
+ });
31
+
32
+ describe("contract test", () => {
33
+ it("contract.checkContractAccount account exist and not contract address", async () => {
34
+ let response: CheckContractAccountResponse;
35
+ response = await contract.checkContractAccount(
36
+ "did:bid:efuDacbAeXdwBENVkPCYNQQVE7KvYVkP",
37
+ );
38
+ console.log(response);
39
+ expect(response.errorCode).to.equal(0);
40
+ expect(response.errorDesc).to.equal("ok");
41
+ expect(response.result).to.equal(false);
42
+ });
43
+
44
+ it("contract.checkContractAccount account exist and is contract address", async () => {
45
+ let response: CheckContractAccountResponse;
46
+ response = await contract.checkContractAccount(
47
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
48
+ );
49
+ console.log(response);
50
+ expect(response.errorCode).to.equal(0);
51
+ expect(response.errorDesc).to.equal("ok");
52
+ expect(response.result).to.equal(true);
53
+ });
54
+
55
+ it("contract.checkContractAccount account not exist", async () => {
56
+ let response: CheckContractAccountResponse;
57
+ response = await contract.checkContractAccount(
58
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk9",
59
+ );
60
+ console.log(response);
61
+ expect(response.errorCode).to.equal(4);
62
+ });
63
+
64
+ it("contract.checkContractAccount empty", async () => {
65
+ let response: CheckContractAccountResponse;
66
+ response = await contract.checkContractAccount("");
67
+ console.log(response);
68
+ expect(response.errorCode).to.equal(-9);
69
+ expect(response.errorDesc).to.equal(
70
+ "The account address is a required field",
71
+ );
72
+ });
73
+
74
+ it("contract.checkContractAccount invalid address", async () => {
75
+ let response: CheckContractAccountResponse;
76
+ response = await contract.checkContractAccount("xxx");
77
+ console.log(response);
78
+ expect(response.errorCode).to.equal(4);
79
+ });
80
+
81
+ it("contract.getContractInfo is contract address", async () => {
82
+ let response: GetContractInfoResponse;
83
+ response = await contract.getContractInfo(
84
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
85
+ );
86
+ console.log(response);
87
+ expect(response.errorCode).to.equal(0);
88
+ expect(response.errorDesc).to.equal("ok");
89
+ expect(response.result?.type).to.equal(2);
90
+ expect(response.result?.payload).to.equal(
91
+ '{"params":{},"codeData":{"slogan":"this is config-manager contract"}}',
92
+ );
93
+ });
94
+
95
+ it("contract.getContractInfo not contract address", async () => {
96
+ let response: GetContractInfoResponse;
97
+ response = await contract.getContractInfo(
98
+ "did:bid:efuDacbAeXdwBENVkPCYNQQVE7KvYVkP",
99
+ );
100
+ console.log(response);
101
+ expect(response.errorCode).to.equal(11038);
102
+ expect(response.errorDesc).to.equal("address not contract account");
103
+ });
104
+
105
+ it("contract.getContractInfo account not exist", async () => {
106
+ let response: GetContractInfoResponse;
107
+ response = await contract.getContractInfo(
108
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk9",
109
+ );
110
+ console.log(response);
111
+ expect(response.errorCode).to.equal(4);
112
+ });
113
+
114
+ it("contract.getContractInfo account empty", async () => {
115
+ let response: GetContractInfoResponse;
116
+ response = await contract.getContractInfo("");
117
+ console.log(response);
118
+ expect(response.errorCode).to.equal(-9);
119
+ });
120
+
121
+ it("contract.getContractInfo account invalid", async () => {
122
+ let response: GetContractInfoResponse;
123
+ response = await contract.getContractInfo("xxx");
124
+ console.log(response);
125
+ expect(response.errorCode).to.equal(4);
126
+ });
127
+
128
+ it("contract.callContract system", async () => {
129
+ let request: CallContractRequest = {
130
+ contractAddress: "did:bid:efRH1Lbsuqwc6jRw3hK4H5Hp2RhHnryS",
131
+ input: '{"method":"getsuperlist"}',
132
+ };
133
+ let response: CallContractResponse;
134
+ response = await contract.callContract(request);
135
+ console.log(response);
136
+ console.log(response.result?.queryRets[0].result);
137
+ expect(response.errorCode).to.equal(0);
138
+ expect(response.errorDesc).to.equal("ok");
139
+ expect(response.result?.queryRets[0].result).to.equal(
140
+ '{"data":{"superList":[["did:bid:efuwxbp8mzDt2MyPxXo4fmyYahQVtyMk","0","did:bid:efuwxbp8mzDt2MyPxXo4fmyYahQVtyMk"],["did:bid:efSspDxRFNe2QpeyYJvr2CMxZ35gVvXb","0","did:bid:efSspDxRFNe2QpeyYJvr2CMxZ35gVvXb"],["did:bid:efUZLM7v2FW72eMUiB3zYUKFrYcPmKQE","0","did:bid:efUZLM7v2FW72eMUiB3zYUKFrYcPmKQE"],["did:bid:efyxHe3UrF1PSSHDDrqVygxf8NYHZVuz","0","did:bid:efyxHe3UrF1PSSHDDrqVygxf8NYHZVuz"],["did:bid:efuDacbAeXdwBENVkPCYNQQVE7KvYVkP","0","did:bid:efuDacbAeXdwBENVkPCYNQQVE7KvYVkP"],["did:bid:efperBrbfFJrpRUebqDSmXjoLKoBiuGT","0","did:bid:efperBrbfFJrpRUebqDSmXjoLKoBiuGT"],["did:bid:ef16mauW9ukBbLqYpbZ8b7bavXTPeGMC","0","did:bid:ef16mauW9ukBbLqYpbZ8b7bavXTPeGMC"],["did:bid:efk8iXFgo533n7waZAym6WVeZNPKKyX5","0","did:bid:efk8iXFgo533n7waZAym6WVeZNPKKyX5"]]}}',
141
+ );
142
+ });
143
+
144
+ it("contract.callContract js", async () => {
145
+ let request: CallContractRequest = {
146
+ contractAddress: "did:bid:ef2AAQSLB2YAuWJE8mHdUXncGWRVPkoJT",
147
+ input:
148
+ '{"method":"queryBid", "params":"did:bid:ef2AAQSLB2YAuWJE8mHdUXncGWRVPkoJT"}',
149
+ };
150
+ let response: CallContractResponse;
151
+ response = await contract.callContract(request);
152
+ console.log(response);
153
+ console.log(response.result?.queryRets[0]?.error);
154
+ expect(response.errorCode).to.equal(0);
155
+ expect(response.errorDesc).to.equal("ok");
156
+ expect(response.result?.queryRets[0]?.error).to.equal(
157
+ '{"data":{"contract":"did:bid:ef2AAQSLB2YAuWJE8mHdUXncGWRVPkoJT","exception":"10706,The bid document is not existed","linenum":1}}',
158
+ );
159
+ });
160
+
161
+ it("contract.callContract evm", async () => {
162
+ let request: CallContractRequest = {
163
+ contractAddress: "did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu",
164
+ input:
165
+ '{"function":"balanceOf(address)","args":"did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu","return":"returns(uint256)"',
166
+ };
167
+ let response: CallContractResponse;
168
+ response = await contract.callContract(request);
169
+ console.log(response);
170
+ console.log(response.result?.queryRets[0]?.result);
171
+ expect(response.errorCode).to.equal(0);
172
+ expect(response.errorDesc).to.equal("ok");
173
+ expect(response.result?.queryRets[0]?.result).to.equal(
174
+ '{"code":0,"data":"[0]","desc":"","evmcode":"0000000000000000000000000000000000000000000000000000000000000000","gasused":2767}',
175
+ );
176
+ });
177
+
178
+ it("contract.callContract with account not exist", async () => {
179
+ let request: CallContractRequest = {
180
+ contractAddress: "did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzx",
181
+ input:
182
+ '{"function":"balanceOf(address)","args":"did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu","return":"returns(uint256)"',
183
+ };
184
+ let response: CallContractResponse;
185
+ response = await contract.callContract(request);
186
+ console.log(response);
187
+ expect(response.errorCode).to.equal(4);
188
+ });
189
+
190
+ it("contract.callContract with account not contract address", async () => {
191
+ let request: CallContractRequest = {
192
+ contractAddress: "did:bid:efC5REiFesaBuu1UXbMJWvEsqFRkQKiq",
193
+ input:
194
+ '{"function":"balanceOf(address)","args":"did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu","return":"returns(uint256)"}',
195
+ };
196
+ let response: CallContractResponse;
197
+ response = await contract.callContract(request);
198
+ console.log(response);
199
+ expect(response.errorCode).to.equal(4);
200
+ });
201
+
202
+ it("contract.callContract with empty input", async () => {
203
+ let request: CallContractRequest = {
204
+ contractAddress: "did:bid:efC5REiFesaBuu1UXbMJWvEsqFRkQKiq",
205
+ };
206
+ let response: CallContractResponse;
207
+ response = await contract.callContract(request);
208
+ console.log(response);
209
+ expect(response.errorCode).to.equal(-9);
210
+ });
211
+
212
+ it("contract.callContract with account empty", async () => {
213
+ let request: CallContractRequest = {
214
+ contractAddress: "",
215
+ input:
216
+ '{"function":"balanceOf(address)","args":"did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu","return":"returns(uint256)"}',
217
+ };
218
+ let response: CallContractResponse;
219
+ response = await contract.callContract(request);
220
+ console.log(response);
221
+ expect(response.errorCode).to.equal(-9);
222
+ });
223
+
224
+ it("contract.callContract with invalid account address", async () => {
225
+ let request: CallContractRequest = {
226
+ contractAddress: "xxx",
227
+ input:
228
+ '{"function":"balanceOf(address)","args":"did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu","return":"returns(uint256)"}',
229
+ };
230
+ let response: CallContractResponse;
231
+ response = await contract.callContract(request);
232
+ console.log(response);
233
+ expect(response.errorCode).to.equal(4);
234
+ });
235
+
236
+ it("contract.callContract with sourceAddress equal contractAddress", async () => {
237
+ let request: CallContractRequest = {
238
+ contractAddress: "did:bid:efRH1Lbsuqwc6jRw3hK4H5Hp2RhHnryS",
239
+ sourceAddress: "did:bid:efRH1Lbsuqwc6jRw3hK4H5Hp2RhHnryS",
240
+ input: '{"method":"getsuperlist"}',
241
+ };
242
+ let response: CallContractResponse;
243
+ response = await contract.callContract(request);
244
+ console.log(response);
245
+ console.log(response.result?.queryRets[0].result);
246
+ expect(response.errorCode).to.equal(0);
247
+ });
248
+
249
+ it("contract.callContract gasPrice negative", async () => {
250
+ let request: CallContractRequest = {
251
+ contractAddress: "did:bid:efRH1Lbsuqwc6jRw3hK4H5Hp2RhHnryS",
252
+ input: '{"method":"getsuperlist"}',
253
+ gasPrice: -1,
254
+ };
255
+ let response: CallContractResponse;
256
+ response = await contract.callContract(request);
257
+ console.log(response);
258
+ console.log(response.result?.queryRets[0].result);
259
+ expect(response.errorCode).to.equal(0);
260
+ });
261
+
262
+ it("contract.callContract gasPrice decimal", async () => {
263
+ let request: CallContractRequest = {
264
+ contractAddress: "did:bid:efRH1Lbsuqwc6jRw3hK4H5Hp2RhHnryS",
265
+ input: '{"method":"getsuperlist"}',
266
+ gasPrice: 1.6,
267
+ };
268
+ let response: CallContractResponse;
269
+ response = await contract.callContract(request);
270
+ console.log(response);
271
+ console.log(response.result?.queryRets[0].result);
272
+ expect(response.errorCode).to.equal(0);
273
+ });
274
+
275
+ it("contract.callContract null request", async () => {
276
+ let request: CallContractRequest = {};
277
+ let response: CallContractResponse;
278
+ response = await contract.callContract(request);
279
+ console.log(response);
280
+ expect(response.errorCode).to.equal(-9);
281
+ });
282
+ });
283
+ });