@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,166 @@
1
+ import { LedgerByBop } from "../service/ledger";
2
+ import { expect } from "chai";
3
+ import * as sinon from "sinon";
4
+ import { BopInterface, Config } from "../../../bop/bop-base";
5
+ import {
6
+ LedgerLeaderResponse,
7
+ LedgerNumberResponse,
8
+ LedgerResponse,
9
+ LedgerTxHashesResponse,
10
+ LedgerValidatorsResponse,
11
+ } from "../../proto/bop-sdk-interface";
12
+
13
+ // 使用 Sinon 创建模拟对象
14
+ const sandbox = sinon.createSandbox();
15
+ describe("provider-ledger-test", () => {
16
+ let ledger: LedgerByBop;
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
+ ledger = new LedgerByBop(bopInterface);
26
+ });
27
+
28
+ afterEach(() => {
29
+ // 重置模拟对象
30
+ sandbox.restore();
31
+ });
32
+
33
+ describe("ledger test", () => {
34
+ it("ledger.getLedgerNumber", async () => {
35
+ let response: LedgerNumberResponse;
36
+ response = await ledger.getLedgerNumber();
37
+ console.log(response);
38
+ expect(response.errorCode).to.equal(0);
39
+ expect(response.result).to.greaterThan(10000);
40
+ });
41
+
42
+ it("ledger.getLedger - latest", async () => {
43
+ let response: LedgerResponse;
44
+ response = await ledger.getLedger();
45
+ console.log(response);
46
+ expect(response.errorCode).to.equal(0);
47
+ });
48
+
49
+ it("ledger.getLedger - 1", async () => {
50
+ let response: LedgerResponse;
51
+ response = await ledger.getLedger(1);
52
+ console.log(response);
53
+ expect(response.errorCode).to.equal(0);
54
+ });
55
+
56
+ it("ledger.getLedger - 999999999", async () => {
57
+ let response: LedgerResponse;
58
+ response = await ledger.getLedger(999999999);
59
+ console.log(response);
60
+ expect(response.errorCode).to.equal(4);
61
+ });
62
+
63
+ it("ledger.getLedger - seq(-1)", async () => {
64
+ let response: LedgerResponse;
65
+ response = await ledger.getLedger(-1);
66
+ console.log(response);
67
+ expect(response.errorCode).to.equal(4);
68
+ expect(response.errorDesc).to.equal(
69
+ "The object does not exist, such as not being able to query accounts, TX, blocks, etc",
70
+ );
71
+ });
72
+
73
+ it("ledger.getLedger - seq(0)", async () => {
74
+ let response: LedgerResponse;
75
+ response = await ledger.getLedger(0);
76
+ console.log(response);
77
+ expect(response.errorCode).to.equal(4);
78
+ expect(response.errorDesc).to.equal(
79
+ "The object does not exist, such as not being able to query accounts, TX, blocks, etc",
80
+ );
81
+ });
82
+
83
+ it("ledger.getLedgerLeader - seq(5774903)", async () => {
84
+ let response: LedgerLeaderResponse;
85
+ response = await ledger.getLedgerLeader(5774903);
86
+ console.log(response);
87
+ expect(response.errorCode).to.equal(0);
88
+ expect(response.errorDesc).to.equal("ok");
89
+ expect(response.result).to.equal(
90
+ "did:bid:efk8iXFgo533n7waZAym6WVeZNPKKyX5",
91
+ );
92
+ });
93
+
94
+ it("ledger.getLedgerLeader - seq(latest)", async () => {
95
+ let response: LedgerLeaderResponse;
96
+ response = await ledger.getLedgerLeader();
97
+ console.log(response);
98
+ expect(response.errorCode).to.equal(0);
99
+ expect(response.errorDesc).to.equal("ok");
100
+ });
101
+
102
+ it("ledger.getLedgerLeader - seq(999999999)", async () => {
103
+ let response: LedgerLeaderResponse;
104
+ response = await ledger.getLedgerLeader(999999999);
105
+ console.log(response);
106
+ expect(response.errorCode).to.equal(4);
107
+ });
108
+
109
+ it("ledger.getLedgerValidators - seq(5774903)", async () => {
110
+ let response: LedgerValidatorsResponse;
111
+ response = await ledger.getLedgerValidators(5774903);
112
+ console.log(response);
113
+ expect(response.errorCode).to.equal(0);
114
+ expect(response.errorDesc).to.equal("ok");
115
+ expect(JSON.stringify(response.result)).to.equal(
116
+ '["did:bid:efuDacbAeXdwBENVkPCYNQQVE7KvYVkP","did:bid:efperBrbfFJrpRUebqDSmXjoLKoBiuGT","did:bid:ef16mauW9ukBbLqYpbZ8b7bavXTPeGMC","did:bid:efk8iXFgo533n7waZAym6WVeZNPKKyX5"]',
117
+ );
118
+ });
119
+
120
+ it("ledger.getLedgerValidators - seq(latest)", async () => {
121
+ let response: LedgerValidatorsResponse;
122
+ response = await ledger.getLedgerValidators();
123
+ console.log(response);
124
+ expect(response.errorCode).to.equal(0);
125
+ expect(response.errorDesc).to.equal("ok");
126
+ });
127
+
128
+ it("ledger.getLedgerValidators - seq(999999999)", async () => {
129
+ let response: LedgerValidatorsResponse;
130
+ response = await ledger.getLedgerValidators(999999999);
131
+ console.log(response);
132
+ expect(response.errorCode).to.equal(4);
133
+ });
134
+
135
+ it("ledger.getLedgerTxHashes - seq(5774920)", async () => {
136
+ let response: LedgerTxHashesResponse;
137
+ response = await ledger.getLedgerTxHashes(5774920);
138
+ console.log(response);
139
+ expect(response.errorCode).to.equal(0);
140
+ expect(response.errorDesc).to.equal("ok");
141
+ expect(response.result.length).to.equal(2);
142
+ });
143
+
144
+ it("ledger.getLedgerTxHashes - seq(-1)", async () => {
145
+ let response: LedgerTxHashesResponse;
146
+ response = await ledger.getLedgerTxHashes(-1);
147
+ console.log(response);
148
+ expect(response.errorCode).to.equal(4);
149
+ });
150
+
151
+ it("ledger.getLedgerTxHashes - seq(latest)", async () => {
152
+ let response: LedgerTxHashesResponse;
153
+ response = await ledger.getLedgerTxHashes();
154
+ console.log(response);
155
+ expect(response.errorCode).to.equal(0);
156
+ expect(response.errorDesc).to.equal("ok");
157
+ });
158
+
159
+ it("ledger.getLedgerTxHashes - seq(999999999)", async () => {
160
+ let response: LedgerTxHashesResponse;
161
+ response = await ledger.getLedgerTxHashes(999999999);
162
+ console.log(response);
163
+ expect(response.errorCode).to.equal(4);
164
+ });
165
+ });
166
+ });
@@ -0,0 +1,407 @@
1
+ import { expect } from "chai";
2
+ import * as sinon from "sinon";
3
+ import { ProviderByBop } from "../provider";
4
+ import { BopInterface, Config } from "../../../bop/bop-base";
5
+ import {
6
+ GetChainInfoResponse,
7
+ GetNetworkIdResponse,
8
+ LedgerResponse,
9
+ LedgerNumberResponse,
10
+ LedgerLeaderResponse,
11
+ LedgerValidatorsResponse,
12
+ LedgerTxHashesResponse,
13
+ GetAccountResponse,
14
+ GetAccountMetadataResponse,
15
+ GetAccountIncreaseNonceResponse,
16
+ GetAccountBalanceResponse,
17
+ GetAccountPrivResponse,
18
+ CheckContractAccountResponse,
19
+ GetContractInfoResponse,
20
+ TestTransactionRequest,
21
+ TestTransactionResponse,
22
+ CallContractRequest,
23
+ CallContractResponse,
24
+ GetTxPoolSizeResponse,
25
+ GetTransactionCacheResponse,
26
+ GetTransactionHistoryResponse,
27
+ SubmitTransactionParams,
28
+ SubmitTransactionResponse,
29
+ } from "bop-sdk/proto/bop-sdk-interface";
30
+ import {
31
+ ApplyRequest,
32
+ ApplyResponse,
33
+ ApplyStatusRequest,
34
+ ApplyStatusResponse,
35
+ DetailRequest,
36
+ DetailResponse,
37
+ DiscardRequest,
38
+ DiscardResponse,
39
+ QueryRequest,
40
+ QueryResponse,
41
+ } from "bop/bop-proto/bop";
42
+
43
+ describe("provider-test", () => {
44
+ //normal
45
+ let provider: ProviderByBop;
46
+
47
+ let bopInterface: BopInterface;
48
+ let config: Config;
49
+
50
+ //abnormal
51
+ let provider2: ProviderByBop;
52
+
53
+ let bopInterface2: BopInterface;
54
+ let config2: Config;
55
+
56
+ beforeEach(() => {
57
+ config = new Config("https://bif-mainnet.bitfactory.cn", "xxx", "xxx");
58
+ bopInterface = new BopInterface(config);
59
+ provider = new ProviderByBop(bopInterface);
60
+
61
+ config2 = new Config("ht://xxx", "xx", "xx");
62
+ bopInterface2 = new BopInterface(config2);
63
+ provider2 = new ProviderByBop(bopInterface2);
64
+ });
65
+
66
+ describe("abnormal provider test", () => {
67
+ it("provider2.chain.getChainInfo", async () => {
68
+ let response =
69
+ (await provider2.chain.getChainInfo()) as GetChainInfoResponse;
70
+ console.log(response);
71
+ expect(response.errorCode).to.equal(9999);
72
+ });
73
+ });
74
+
75
+ describe("provider test", () => {
76
+ it("provider.chain.getChainInfo", async () => {
77
+ let response =
78
+ (await provider.chain.getChainInfo()) as GetChainInfoResponse;
79
+ console.log(response);
80
+ expect(response.errorCode).to.equal(0);
81
+ expect(response.result?.networkId).to.equal("16234539267878");
82
+ });
83
+
84
+ it("provider.chain.getNetworkId", async () => {
85
+ let response =
86
+ (await provider.chain.getNetworkId()) as GetNetworkIdResponse;
87
+ console.log(response);
88
+ expect(response.errorCode).to.equal(0);
89
+ expect(response.result).to.equal("16234539267878");
90
+ });
91
+
92
+ it("provider.ledger.getLedgerNumber", async () => {
93
+ let response =
94
+ (await provider.ledger.getLedgerNumber()) as LedgerNumberResponse;
95
+ console.log(response);
96
+ expect(response.errorCode).to.equal(0);
97
+ expect(response.result).to.greaterThan(10000);
98
+ });
99
+
100
+ it("provider.ledger.getLedger", async () => {
101
+ let response = (await provider.ledger.getLedger()) as LedgerResponse;
102
+ console.log(response);
103
+ expect(response.errorCode).to.equal(0);
104
+ });
105
+
106
+ it("provider.ledger.getLedgerLeader", async () => {
107
+ let response = (await provider.ledger.getLedgerLeader(
108
+ 5777886,
109
+ )) as LedgerLeaderResponse;
110
+ console.log(response);
111
+ expect(response.errorCode).to.equal(0);
112
+ expect(response.result).to.equal(
113
+ "did:bid:efk8iXFgo533n7waZAym6WVeZNPKKyX5",
114
+ );
115
+ });
116
+
117
+ it("provider.ledger.getLedgerValidators", async () => {
118
+ let response = (await provider.ledger.getLedgerValidators(
119
+ 5777886,
120
+ )) as LedgerValidatorsResponse;
121
+ console.log(response);
122
+ expect(response.errorCode).to.equal(0);
123
+ expect(JSON.stringify(response.result)).to.equal(
124
+ '["did:bid:efuDacbAeXdwBENVkPCYNQQVE7KvYVkP","did:bid:efperBrbfFJrpRUebqDSmXjoLKoBiuGT","did:bid:ef16mauW9ukBbLqYpbZ8b7bavXTPeGMC","did:bid:efk8iXFgo533n7waZAym6WVeZNPKKyX5"]',
125
+ );
126
+ });
127
+
128
+ it("provider.ledger.getLedgerTxHashes", async () => {
129
+ let response =
130
+ (await provider.ledger.getLedgerTxHashes()) as LedgerTxHashesResponse;
131
+ console.log(response);
132
+ expect(response.errorCode).to.equal(0);
133
+ });
134
+
135
+ it("provider.account.getAccount", async () => {
136
+ let response = (await provider.account.getAccount(
137
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
138
+ )) as GetAccountResponse;
139
+ console.log(response);
140
+ expect(response.errorCode).to.equal(0);
141
+ expect(response.result?.address).to.equal(
142
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
143
+ );
144
+ });
145
+
146
+ it("provider.account.getAccountMetadata", async () => {
147
+ let response = (await provider.account.getAccountMetadata(
148
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
149
+ "latest",
150
+ "layer_2_confirm_seq_did:bid:efGeHdgd1AwmtgUBKac3bGqrmPoNhA1k4254791",
151
+ )) as GetAccountMetadataResponse;
152
+ console.log(response);
153
+ expect(response.errorCode).to.equal(0);
154
+ expect(response.result[0].key).to.equal(
155
+ "layer_2_confirm_seq_did:bid:efGeHdgd1AwmtgUBKac3bGqrmPoNhA1k4254791",
156
+ );
157
+ });
158
+
159
+ it("provider.account.getAccountIncreaseNonce", async () => {
160
+ let response = (await provider.account.getAccountIncreaseNonce(
161
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
162
+ )) as GetAccountIncreaseNonceResponse;
163
+ console.log(response);
164
+ expect(response.errorCode).to.equal(0);
165
+ expect(response.result).to.greaterThan(79685);
166
+ });
167
+
168
+ it("provider.account.getAccountBalance", async () => {
169
+ let response = (await provider.account.getAccountBalance(
170
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
171
+ )) as GetAccountBalanceResponse;
172
+ console.log(response);
173
+ expect(response.errorCode).to.equal(0);
174
+ expect(response.result).to.equal(0);
175
+ });
176
+
177
+ it("provider.account.getAccountPriv", async () => {
178
+ let response = (await provider.account.getAccountPriv(
179
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
180
+ )) as GetAccountPrivResponse;
181
+ console.log(response);
182
+ expect(response.errorCode).to.equal(0);
183
+ });
184
+
185
+ it("provider.contract.checkContractAccount", async () => {
186
+ let response = (await provider.contract.checkContractAccount(
187
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
188
+ )) as CheckContractAccountResponse;
189
+ console.log(response);
190
+ expect(response.errorCode).to.equal(0);
191
+ expect(response.result).to.equal(true);
192
+ });
193
+
194
+ it("provider.contract.getContractInfo", async () => {
195
+ let response = (await provider.contract.getContractInfo(
196
+ "did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
197
+ )) as GetContractInfoResponse;
198
+ console.log(response);
199
+ expect(response.errorCode).to.equal(0);
200
+ expect(response.result?.payload).to.equal(
201
+ '{"params":{},"codeData":{"slogan":"this is config-manager contract"}}',
202
+ );
203
+ });
204
+
205
+ it("provider.contract.estimateGas", async () => {
206
+ let request: TestTransactionRequest = {
207
+ items: [
208
+ {
209
+ transactionJson: {
210
+ feeLimit: 100000,
211
+ sourceAddress: "did:bid:efmHwsoavf2SWDkm4vwUJFwzZBWQnVV7",
212
+ gasPrice: 1,
213
+ nonce: "173",
214
+ operations: [
215
+ {
216
+ type: 1,
217
+ sourceAddress: "did:bid:efmHwsoavf2SWDkm4vwUJFwzZBWQnVV7",
218
+ createAccount: {
219
+ destAddress: "did:bid:efY72a55qY47gj2gSbvjLaLwdC439p4n",
220
+ initBalance: 1,
221
+ priv: {
222
+ masterWeight: 1,
223
+ thresholds: {
224
+ txThreshold: 1,
225
+ },
226
+ },
227
+ },
228
+ },
229
+ ],
230
+ },
231
+ signatureNumber: 1,
232
+ },
233
+ ],
234
+ };
235
+
236
+ let response = (await provider.transaction.estimateGas(
237
+ request,
238
+ )) as TestTransactionResponse;
239
+ console.log(response);
240
+ expect(response.errorCode).to.equal(0);
241
+ expect(response.result?.hash).to.equal(
242
+ "225a74cca66c4ca2a9ecfa61d2419734c7386c2cf86f90da3dd2a800c085d491",
243
+ );
244
+ });
245
+
246
+ it("provider.contract.callContract", async () => {
247
+ let request: CallContractRequest = {
248
+ contractAddress: "did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu",
249
+ input:
250
+ '{"function":"balanceOf(address)","args":"did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu","return":"returns(uint256)"',
251
+ };
252
+ let response = (await provider.contract.callContract(
253
+ request,
254
+ )) as CallContractResponse;
255
+ console.log(response);
256
+ expect(response.errorCode).to.equal(0);
257
+ expect(response.result?.queryRets[0]?.result).to.equal(
258
+ '{"code":0,"data":"[0]","desc":"","evmcode":"0000000000000000000000000000000000000000000000000000000000000000","gasused":2767}',
259
+ );
260
+ });
261
+
262
+ it("provider.bop.apply", async () => {
263
+ const request: ApplyRequest = {
264
+ data: [
265
+ {
266
+ bid: "did:bid:efC5REiFesaBuu1UXbMJWvEsqFRkQKiq",
267
+ status: "1",
268
+ },
269
+ ],
270
+ };
271
+ let response = (await provider.bop.apply(request)) as ApplyResponse;
272
+ console.log(response);
273
+ expect(response.errorCode).to.equal(0);
274
+ expect(response.errorDesc).to.equal("ok");
275
+ });
276
+
277
+ it("provider.bop.status", async () => {
278
+ const request: ApplyStatusRequest = {
279
+ requestNo: "ca3d2fa2-28ab-4322-b9f7-b018667acf87",
280
+ };
281
+ let response: ApplyStatusResponse;
282
+ response = await provider.bop.status(request);
283
+ console.log(response);
284
+ expect(response.errorCode).to.equal(0);
285
+ expect(response.errorDesc).to.equal("ok");
286
+ });
287
+
288
+ it("provider.bop.detail", async () => {
289
+ const request: DetailRequest = {
290
+ requestNo: "ca3d2fa2-28ab-4322-b9f7-b018667acf87",
291
+ };
292
+ let response: DetailResponse;
293
+ response = await provider.bop.detail(request);
294
+ expect(response.errorCode).to.equal(0);
295
+ expect(response.errorDesc).to.equal("ok");
296
+ });
297
+
298
+ it("provider.bop.discard", async () => {
299
+ const request: DiscardRequest = {
300
+ hash: "6eff3a70b7794578641ab7a5e56e3e14347a37b857174f3f92112e769b32f575",
301
+ };
302
+ let response: DiscardResponse;
303
+ response = await provider.bop.discard(request);
304
+ expect(response.errorCode).to.equal(0);
305
+ expect(response.errorDesc).to.equal("ok");
306
+ expect(response.success).to.equal(true);
307
+ expect(response.result?.count).to.equal(1);
308
+ expect(response.result?.transactionBases[0]?.hash).to.equal(
309
+ "6eff3a70b7794578641ab7a5e56e3e14347a37b857174f3f92112e769b32f575",
310
+ );
311
+ });
312
+
313
+ it("provider.bop.query", async () => {
314
+ const request: QueryRequest = {
315
+ hash: "1b96779dab06c39c5a4d173bf0033000bd25076c7007dd03623a764ae60c9b48",
316
+ };
317
+ let response: QueryResponse;
318
+ response = await provider.bop.query(request);
319
+ expect(response.errorCode).to.equal(0);
320
+ expect(response.errorDesc).to.equal("ok");
321
+ expect(response.success).to.equal(true);
322
+ expect(response.result?.count).to.equal(1);
323
+ expect(response.result?.totalPage).to.equal(1);
324
+ expect(response.result?.transactionBases[0]?.hash).to.equal(
325
+ "1b96779dab06c39c5a4d173bf0033000bd25076c7007dd03623a764ae60c9b48",
326
+ );
327
+ });
328
+
329
+ it("provider.transaction.getTxPoolSize", async () => {
330
+ let response: GetTxPoolSizeResponse;
331
+ response = await provider.transaction.getTxPoolSize();
332
+ console.log(response);
333
+ expect(response.errorCode).to.equal(0);
334
+ expect(response.errorDesc).to.equal("ok");
335
+ });
336
+
337
+ it("provider.transaction.getTransactionHistory none params", async () => {
338
+ let response: GetTransactionHistoryResponse;
339
+ response = await provider.transaction.getTransactionHistory();
340
+ console.log(response);
341
+ expect(response.errorCode).to.equal(0);
342
+ expect(response.errorDesc).to.equal("ok");
343
+ expect(response.result?.totalCount).to.equal(100);
344
+ });
345
+
346
+ it("provider.transaction.getTransactionHistory with hash", async () => {
347
+ let response: GetTransactionHistoryResponse;
348
+ response = await provider.transaction.getTransactionHistory(
349
+ undefined,
350
+ undefined,
351
+ undefined,
352
+ "b5cef0860f6000cdfb4fa0d2dc95a013632032a49764ade7c1d972a493307315",
353
+ );
354
+ console.log(response);
355
+ expect(response.errorCode).to.equal(0);
356
+ expect(response.errorDesc).to.equal("ok");
357
+ expect(response.result?.totalCount).to.equal(1);
358
+ expect(
359
+ response.result?.transactions[0]?.transaction?.operations[0]?.log
360
+ ?.datas[0],
361
+ ).to.equal(
362
+ "080110641a286469643a6269643a65664765486467643141776d746755424b616333624771726d506f4e6841316b2a5618b1432802324f4661696c656420746f207375626d6974206c61796572322073746174652c206c617965723220736571283836323529206973206e6f7420657175616c206d617820736571283836323529202b20312e",
363
+ );
364
+ });
365
+
366
+ it("provider.transaction.getTransactionHistory with hash", async () => {
367
+ let response: GetTransactionHistoryResponse;
368
+ response = await provider.transaction.getTransactionHistory(5775638);
369
+ console.log(response);
370
+ expect(response.errorCode).to.equal(0);
371
+ expect(response.errorDesc).to.equal("ok");
372
+ expect(response.result?.totalCount).to.equal(2);
373
+ });
374
+
375
+ it("provider.transaction.submitTransaction", async () => {
376
+ const request: SubmitTransactionParams = {
377
+ items: [
378
+ {
379
+ signatures: [
380
+ {
381
+ publicKey:
382
+ "b065665b6fa23dc1c00b17b8d2cd86093c86bbae4c011247310f9160351bd64bc580cc",
383
+ signData:
384
+ "F62BA0BD3CC98EFBBA20DB540C6660BD4547390625AD4FF6CEB7B216985F6EFB3092E3F9E36299068D668D52CA92ABAD944D28342E0DD4D1ACEE06D700350702",
385
+ },
386
+ ],
387
+ transactionBlob:
388
+ "0A286469643A6269643A6566433552456946657361427575315558624D4A577645737146526B514B6971103022D605080122D10512C305080112BE053630383036303430353233343830313536313030313035373630303038306664356235303631303133663830363130303230363030303339363030306633303036303830363034303532363030343336313036313030343135373630303033353763303130303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303930303436336666666666666666313638303633303331313533633231343631303034363537356236303030383066643562333438303135363130303532353736303030383066643562353036313030356236313030643635363562363034303531383038303630323030313832383130333832353238333831383135313831353236303230303139313530383035313930363032303031393038303833383336303030356238333831313031353631303039623537383038323031353138313834303135323630323038313031393035303631303038303536356235303530353035303930353039303831303139303630316631363830313536313030633835373830383230333830353136303031383336303230303336313031303030613033313931363831353236303230303139313530356235303932353035303530363034303531383039313033393066333562363036303630343038303531393038313031363034303532383036303062383135323630323030313766363836353663366336663230373736663732366336343030303030303030303030303030303030303030303030303030303030303030303030303030303030303831353235303930353039303536303061313635363237613761373233303538323033336431366230663863613362323334646363396233336139623533303063333630313561383838373732633761656565633965353733613537316437346338303032391A041A0208012880C2D72F2A0F63726561746520636F6E747261637430AC87E32F3864",
389
+ },
390
+ ],
391
+ };
392
+ let response: SubmitTransactionResponse;
393
+ response = await provider.transaction.submitTransaction(request);
394
+ console.log(response);
395
+ });
396
+
397
+ it("provider.transaction.getTxPoolTransactions", async () => {
398
+ let response: GetTransactionCacheResponse;
399
+ response = await provider.transaction.getTxPoolTransactions();
400
+ console.log(response);
401
+ expect(response.errorCode).to.equal(4);
402
+ expect(response.errorDesc).to.equal(
403
+ "The object does not exist, such as not being able to query accounts, TX, blocks, etc",
404
+ );
405
+ });
406
+ });
407
+ });
@@ -0,0 +1,105 @@
1
+ import { SignerByBop } from "../signer";
2
+ import { ProviderByBop } from "../provider";
3
+ import { expect } from "chai";
4
+ import * as sinon from "sinon";
5
+ import {
6
+ CallContractResponse,
7
+ GetAccountBalanceResponse,
8
+ GetAccountIncreaseNonceResponse,
9
+ SignerSignResponse,
10
+ TestTransactionRequest,
11
+ TestTransactionResponse,
12
+ GetAccountResponse,
13
+ LedgerNumberResponse,
14
+ } from "../../../bop-sdk/proto/bop-sdk-interface";
15
+ import { BopInterface, Config } from "../../../bop/bop-base";
16
+
17
+ describe("signer-test", () => {
18
+ let bopInterface: BopInterface;
19
+ let config: Config;
20
+ let signer: SignerByBop;
21
+ let provider: ProviderByBop;
22
+ beforeEach(() => {
23
+ config = new Config("https://bif-mainnet.bitfactory.cn", "xxx", "xxx");
24
+ bopInterface = new BopInterface(config);
25
+ signer = new SignerByBop("your encprivate key");
26
+ provider = new ProviderByBop(bopInterface);
27
+ });
28
+
29
+ afterEach(() => {});
30
+
31
+ describe("signer test", () => {
32
+ it("signer.constructor invalid privateKey", async () => {
33
+ try {
34
+ let signer: SignerByBop = new SignerByBop("xxx");
35
+ } catch (error) {
36
+ expect(error).to.equal("invalid privateKey");
37
+ }
38
+ });
39
+
40
+ it("signer.constructor valid privateKey", async () => {
41
+ expect(signer.getAddress()).to.equal(
42
+ "did:bid:zfVHJnop875UMPmskam4JC4kLW4tAaDK",
43
+ );
44
+ expect(signer.getAddress()).to.equal(signer.address);
45
+ expect(signer.publicKey).to.equal(signer.publicKey);
46
+ });
47
+
48
+ it("signer.getBalance", async () => {
49
+ let signerWithProvider = signer.connect(provider);
50
+
51
+ let balance =
52
+ (await signerWithProvider.getBalance()) as GetAccountBalanceResponse;
53
+ console.log(balance);
54
+ expect(balance.errorCode).to.equal(0);
55
+ });
56
+
57
+ it("signer.getIncreaseNonce", async () => {
58
+ let signerWithProvider = signer.connect(provider);
59
+ let nonce =
60
+ (await signerWithProvider.getIncreaseNonce()) as GetAccountIncreaseNonceResponse;
61
+ console.log(nonce);
62
+ expect(nonce.errorCode).to.equal(0);
63
+ });
64
+
65
+ it("signer.getAccount", async () => {
66
+ let signerWithProvider = signer.connect(provider);
67
+ let account =
68
+ (await signerWithProvider.getAccount()) as GetAccountResponse;
69
+ console.log(account);
70
+ expect(account.errorCode).to.equal(0);
71
+ });
72
+
73
+ it("signer.getLedgerNumber", async () => {
74
+ let signerWithProvider = signer.connect(provider);
75
+ let number =
76
+ (await signerWithProvider.getLedgerNumber()) as LedgerNumberResponse;
77
+ console.log(number);
78
+ expect(number.errorCode).to.equal(0);
79
+ });
80
+
81
+ it("signer.signTransaction", async () => {
82
+ let signerWithProvider = signer.connect(provider);
83
+ let response = (await signerWithProvider.signTransaction(
84
+ "0x010203",
85
+ )) as SignerSignResponse;
86
+ console.log(response);
87
+ console.log(response.result?.publicKey);
88
+ expect(response.errorCode).to.equal(0);
89
+ });
90
+
91
+ it("signer.callContract", async () => {
92
+ let signerWithProvider = signer.connect(provider);
93
+ let response = (await signerWithProvider.callContract(
94
+ "did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu",
95
+ '{"function":"balanceOf(address)","args":"did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu","return":"returns(uint256)"',
96
+ )) as CallContractResponse;
97
+ console.log(response);
98
+ console.log(response.result?.queryRets[0]);
99
+ expect(response.errorCode).to.equal(0);
100
+ expect(response.result?.queryRets[0]?.result).to.equal(
101
+ '{"code":0,"data":"[0]","desc":"","evmcode":"0000000000000000000000000000000000000000000000000000000000000000","gasused":2767}',
102
+ );
103
+ });
104
+ });
105
+ });