dash-platform-sdk 1.1.0 → 1.1.2

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 (68) hide show
  1. package/bundle.min.js +1 -1
  2. package/package.json +7 -6
  3. package/proto/generated/platform.d.ts +340 -115
  4. package/proto/generated/platform.js +3732 -2333
  5. package/src/DashPlatformSDK.d.ts +18 -5
  6. package/src/DashPlatformSDK.js +20 -7
  7. package/src/constants.d.ts +4 -0
  8. package/src/constants.js +5 -1
  9. package/src/contestedResources/getContestedResourceVoteState.d.ts +6 -0
  10. package/src/contestedResources/getContestedResourceVoteState.js +124 -0
  11. package/src/contestedResources/index.d.ts +29 -0
  12. package/src/contestedResources/index.js +75 -0
  13. package/src/dataContracts/create.js +1 -1
  14. package/src/dataContracts/createStateTransition.d.ts +1 -1
  15. package/src/dataContracts/createStateTransition.js +5 -6
  16. package/src/dataContracts/getDataContractByIdentifier.js +5 -5
  17. package/src/dataContracts/index.d.ts +2 -3
  18. package/src/dataContracts/index.js +1 -1
  19. package/src/documents/create.d.ts +1 -1
  20. package/src/documents/create.js +1 -41
  21. package/src/documents/createStateTransition.d.ts +2 -2
  22. package/src/documents/createStateTransition.js +9 -10
  23. package/src/documents/index.d.ts +3 -3
  24. package/src/documents/index.js +3 -7
  25. package/src/documents/query.js +3 -5
  26. package/src/grpcConnectionPool.d.ts +3 -2
  27. package/src/grpcConnectionPool.js +52 -48
  28. package/src/identities/getIdentityBalance.js +4 -4
  29. package/src/identities/getIdentityByIdentifier.js +4 -4
  30. package/src/identities/getIdentityByNonUniquePublicKeyHash.d.ts +3 -0
  31. package/src/identities/getIdentityByNonUniquePublicKeyHash.js +87 -0
  32. package/src/identities/getIdentityByPublicKeyHash.js +4 -4
  33. package/src/identities/getIdentityContractNonce.js +4 -4
  34. package/src/identities/getIdentityNonce.js +4 -4
  35. package/src/identities/getIdentityPublicKeys.js +4 -4
  36. package/src/identities/index.d.ts +9 -1
  37. package/src/identities/index.js +23 -1
  38. package/src/node/epochs.d.ts +10 -0
  39. package/src/node/epochs.js +82 -0
  40. package/src/node/index.d.ts +16 -1
  41. package/src/node/index.js +35 -1
  42. package/src/node/totalCredits.d.ts +2 -0
  43. package/src/node/totalCredits.js +77 -0
  44. package/src/stateTransitions/broadcast.js +3 -0
  45. package/src/tokens/getIdentitiesTokenBalances.d.ts +8 -0
  46. package/src/tokens/getIdentitiesTokenBalances.js +87 -0
  47. package/src/tokens/getIdentityTokensBalances.d.ts +8 -0
  48. package/src/tokens/getIdentityTokensBalances.js +87 -0
  49. package/src/tokens/getTokenContractInfo.d.ts +8 -0
  50. package/src/tokens/getTokenContractInfo.js +87 -0
  51. package/src/tokens/getTokenTotalSupply.d.ts +9 -0
  52. package/src/tokens/getTokenTotalSupply.js +85 -0
  53. package/src/tokens/index.d.ts +50 -0
  54. package/src/tokens/index.js +124 -0
  55. package/src/types.d.ts +30 -0
  56. package/src/types.js +14 -1
  57. package/src/utils/indexBytesToString.d.ts +1 -0
  58. package/src/utils/indexBytesToString.js +7 -0
  59. package/src/utils/stringToIndexValueBytes.d.ts +1 -0
  60. package/src/utils/stringToIndexValueBytes.js +13 -0
  61. package/test/unit/ContestedResources.spec.d.ts +1 -0
  62. package/test/unit/ContestedResources.spec.js +257 -0
  63. package/test/unit/DataContract.spec.js +16 -6
  64. package/test/unit/DocumentsBatch.spec.js +6 -6
  65. package/test/unit/Identity.spec.js +15 -3
  66. package/test/unit/Node.spec.js +40 -0
  67. package/test/unit/Tokens.spec.d.ts +1 -0
  68. package/test/unit/Tokens.spec.js +100 -0
package/src/node/index.js CHANGED
@@ -38,14 +38,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.NodeController = void 0;
40
40
  var status_1 = require("./status");
41
+ var epochs_1 = require("./epochs");
42
+ var totalCredits_1 = require("./totalCredits");
41
43
  /**
42
44
  * Node controller for requesting information about DAPI node
43
45
  *
44
46
  * @hideconstructor
45
47
  */
46
48
  var NodeController = /** @class */ (function () {
47
- function NodeController(grpcPool) {
49
+ function NodeController(grpcPool, network) {
48
50
  this.grpcPool = grpcPool;
51
+ this.network = network;
49
52
  }
50
53
  /**
51
54
  * Retrieves an info about node
@@ -63,6 +66,37 @@ var NodeController = /** @class */ (function () {
63
66
  });
64
67
  });
65
68
  };
69
+ /**
70
+ * Returns total credits amount in platform
71
+ *
72
+ * @return {Promise<bigint>}
73
+ */
74
+ NodeController.prototype.totalCredits = function () {
75
+ return __awaiter(this, void 0, void 0, function () {
76
+ return __generator(this, function (_a) {
77
+ switch (_a.label) {
78
+ case 0: return [4 /*yield*/, (0, totalCredits_1.default)(this.grpcPool, this.network)];
79
+ case 1: return [2 /*return*/, _a.sent()];
80
+ }
81
+ });
82
+ });
83
+ };
84
+ /**
85
+ * Retrieves an info about epochs
86
+ * Includes information about first block height, time, fee multiplier, number
87
+ *
88
+ * @return {Promise<EpochInfo[]>}
89
+ */
90
+ NodeController.prototype.getEpochsInfo = function (count, ascending, start) {
91
+ return __awaiter(this, void 0, void 0, function () {
92
+ return __generator(this, function (_a) {
93
+ switch (_a.label) {
94
+ case 0: return [4 /*yield*/, (0, epochs_1.default)(this.grpcPool, count, ascending, start)];
95
+ case 1: return [2 /*return*/, _a.sent()];
96
+ }
97
+ });
98
+ });
99
+ };
66
100
  return NodeController;
67
101
  }());
68
102
  exports.NodeController = NodeController;
@@ -0,0 +1,2 @@
1
+ import GRPCConnectionPool from '../grpcConnectionPool';
2
+ export default function totalCredits(grpcPool: GRPCConnectionPool, network: 'testnet' | 'mainnet'): Promise<bigint>;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.default = totalCredits;
40
+ var platform_1 = require("../../proto/generated/platform");
41
+ var wasm_drive_verify_1 = require("wasm-drive-verify");
42
+ var constants_1 = require("../constants");
43
+ var pshenmic_dpp_1 = require("pshenmic-dpp");
44
+ var getQuorumPublicKey_1 = require("../utils/getQuorumPublicKey");
45
+ var bytesToHex_1 = require("../utils/bytesToHex");
46
+ var verifyTenderdashProof_1 = require("../utils/verifyTenderdashProof");
47
+ function totalCredits(grpcPool, network) {
48
+ return __awaiter(this, void 0, void 0, function () {
49
+ var request, v0, _a, proof, metadata, activationHeight, _b, rootHash, totalCredits, quorumPublicKey, verify;
50
+ return __generator(this, function (_c) {
51
+ switch (_c.label) {
52
+ case 0:
53
+ request = platform_1.GetTotalCreditsInPlatformRequest.fromPartial({ v0: { prove: true } });
54
+ return [4 /*yield*/, grpcPool.getClient().getTotalCreditsInPlatform(request)];
55
+ case 1:
56
+ v0 = (_c.sent()).v0;
57
+ _a = v0, proof = _a.proof, metadata = _a.metadata;
58
+ if (proof == null) {
59
+ throw new Error('Proof not found');
60
+ }
61
+ if (metadata == null) {
62
+ throw new Error('Metadata not found');
63
+ }
64
+ activationHeight = network === 'testnet' ? constants_1.TESTNET_ACTIVATION_HEIGHT : constants_1.MAINNET_ACTIVATION_HEIGHT;
65
+ _b = (0, wasm_drive_verify_1.verifyTotalCreditsInSystem)(proof.grovedbProof, constants_1.HALVING_INTERVAL, activationHeight, Number(metadata.height), pshenmic_dpp_1.PlatformVersionWASM.PLATFORM_V9), rootHash = _b.root_hash, totalCredits = _b.total_credits;
66
+ return [4 /*yield*/, (0, getQuorumPublicKey_1.getQuorumPublicKey)(proof.quorumType, (0, bytesToHex_1.default)(proof.quorumHash))];
67
+ case 2:
68
+ quorumPublicKey = _c.sent();
69
+ verify = (0, verifyTenderdashProof_1.default)(proof, metadata, rootHash, quorumPublicKey);
70
+ if (!verify) {
71
+ throw new Error('Failed to verify query');
72
+ }
73
+ return [2 /*return*/, totalCredits];
74
+ }
75
+ });
76
+ });
77
+ }
@@ -44,6 +44,9 @@ function broadcast(grpcPool, stateTransition) {
44
44
  return __generator(this, function (_a) {
45
45
  switch (_a.label) {
46
46
  case 0:
47
+ if (stateTransition.signature.length === 0) {
48
+ throw new Error('State Transition is not signed');
49
+ }
47
50
  broadcastStateTransitionRequest = platform_1.BroadcastStateTransitionRequest.fromPartial({
48
51
  stateTransition: stateTransition.bytes()
49
52
  });
@@ -0,0 +1,8 @@
1
+ import GRPCConnectionPool from '../grpcConnectionPool';
2
+ import { IdentifierLike } from '../types';
3
+ import { IdentifierWASM } from 'pshenmic-dpp';
4
+ export interface IdentitiesTokenBalances {
5
+ identityId: IdentifierWASM;
6
+ balance?: string | undefined;
7
+ }
8
+ export default function getIdentitiesTokenBalances(grpcPool: GRPCConnectionPool, identifiers: IdentifierLike[], tokenIdentifier: IdentifierLike): Promise<IdentitiesTokenBalances[]>;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.default = getIdentitiesTokenBalances;
40
+ var platform_1 = require("../../proto/generated/platform");
41
+ var pshenmic_dpp_1 = require("pshenmic-dpp");
42
+ var wasm_drive_verify_1 = require("wasm-drive-verify");
43
+ var getQuorumPublicKey_1 = require("../utils/getQuorumPublicKey");
44
+ var bytesToHex_1 = require("../utils/bytesToHex");
45
+ var verifyTenderdashProof_1 = require("../utils/verifyTenderdashProof");
46
+ function getIdentitiesTokenBalances(grpcPool, identifiers, tokenIdentifier) {
47
+ return __awaiter(this, void 0, void 0, function () {
48
+ var ids, tokenId, request, v0, _a, proof, metadata, _b, rootHash, balances, quorumPublicKey, verify;
49
+ return __generator(this, function (_c) {
50
+ switch (_c.label) {
51
+ case 0:
52
+ ids = identifiers.map(function (identifier) { return new pshenmic_dpp_1.IdentifierWASM(identifier); });
53
+ tokenId = new pshenmic_dpp_1.IdentifierWASM(tokenIdentifier);
54
+ request = platform_1.GetIdentitiesTokenBalancesRequest.fromPartial({
55
+ v0: {
56
+ tokenId: tokenId.bytes(),
57
+ identityIds: ids.map(function (id) { return id.bytes(); }),
58
+ prove: true
59
+ }
60
+ });
61
+ return [4 /*yield*/, grpcPool.getClient().getIdentitiesTokenBalances(request)];
62
+ case 1:
63
+ v0 = (_c.sent()).v0;
64
+ _a = v0, proof = _a.proof, metadata = _a.metadata;
65
+ if (proof == null) {
66
+ throw new Error('Proof not found');
67
+ }
68
+ if (metadata == null) {
69
+ throw new Error('Metadata not found');
70
+ }
71
+ _b = (0, wasm_drive_verify_1.verifyTokenBalancesForIdentityIdsVec)(proof.grovedbProof, tokenId.bytes(), true, ids.map(function (id) { return id.bytes(); }), pshenmic_dpp_1.PlatformVersionWASM.PLATFORM_V9), rootHash = _b.root_hash, balances = _b.balances;
72
+ return [4 /*yield*/, (0, getQuorumPublicKey_1.getQuorumPublicKey)(proof.quorumType, (0, bytesToHex_1.default)(proof.quorumHash))];
73
+ case 2:
74
+ quorumPublicKey = _c.sent();
75
+ verify = (0, verifyTenderdashProof_1.default)(proof, metadata, rootHash, quorumPublicKey);
76
+ if (!verify) {
77
+ throw new Error('Failed to verify query');
78
+ }
79
+ return [2 /*return*/, balances
80
+ .map(function (identityTokenBalance) { return ({
81
+ identityId: new pshenmic_dpp_1.IdentifierWASM(identityTokenBalance.identityId),
82
+ balance: identityTokenBalance.balance
83
+ }); })];
84
+ }
85
+ });
86
+ });
87
+ }
@@ -0,0 +1,8 @@
1
+ import GRPCConnectionPool from '../grpcConnectionPool';
2
+ import { IdentifierLike } from '../types';
3
+ import { IdentifierWASM } from 'pshenmic-dpp';
4
+ export interface IdentityTokenBalances {
5
+ tokenId: IdentifierWASM;
6
+ balance?: string | undefined;
7
+ }
8
+ export default function getIdentityTokensBalances(grpcPool: GRPCConnectionPool, identifier: IdentifierLike, tokenIdentifiers: IdentifierLike[]): Promise<IdentityTokenBalances[]>;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.default = getIdentityTokensBalances;
40
+ var pshenmic_dpp_1 = require("pshenmic-dpp");
41
+ var platform_1 = require("../../proto/generated/platform");
42
+ var wasm_drive_verify_1 = require("wasm-drive-verify");
43
+ var getQuorumPublicKey_1 = require("../utils/getQuorumPublicKey");
44
+ var bytesToHex_1 = require("../utils/bytesToHex");
45
+ var verifyTenderdashProof_1 = require("../utils/verifyTenderdashProof");
46
+ function getIdentityTokensBalances(grpcPool, identifier, tokenIdentifiers) {
47
+ return __awaiter(this, void 0, void 0, function () {
48
+ var id, tokenIds, request, v0, _a, proof, metadata, _b, rootHash, balances, quorumPublicKey, verify;
49
+ return __generator(this, function (_c) {
50
+ switch (_c.label) {
51
+ case 0:
52
+ id = new pshenmic_dpp_1.IdentifierWASM(identifier);
53
+ tokenIds = tokenIdentifiers.map(function (tokenIdentifier) { return new pshenmic_dpp_1.IdentifierWASM(tokenIdentifier); });
54
+ request = platform_1.GetIdentityTokenBalancesRequest.fromPartial({
55
+ v0: {
56
+ tokenIds: tokenIds.map(function (identifier) { return identifier.bytes(); }),
57
+ identityId: id.bytes(),
58
+ prove: true
59
+ }
60
+ });
61
+ return [4 /*yield*/, grpcPool.getClient().getIdentityTokenBalances(request)];
62
+ case 1:
63
+ v0 = (_c.sent()).v0;
64
+ _a = v0, proof = _a.proof, metadata = _a.metadata;
65
+ if (proof == null) {
66
+ throw new Error('Proof not found');
67
+ }
68
+ if (metadata == null) {
69
+ throw new Error('Metadata not found');
70
+ }
71
+ _b = (0, wasm_drive_verify_1.verifyTokenBalancesForIdentityIdVec)(proof.grovedbProof, tokenIds.map(function (identifier) { return identifier.bytes(); }), id.bytes(), true, pshenmic_dpp_1.PlatformVersionWASM.PLATFORM_V9), rootHash = _b.root_hash, balances = _b.balances;
72
+ return [4 /*yield*/, (0, getQuorumPublicKey_1.getQuorumPublicKey)(proof.quorumType, (0, bytesToHex_1.default)(proof.quorumHash))];
73
+ case 2:
74
+ quorumPublicKey = _c.sent();
75
+ verify = (0, verifyTenderdashProof_1.default)(proof, metadata, rootHash, quorumPublicKey);
76
+ if (!verify) {
77
+ throw new Error('Failed to verify query');
78
+ }
79
+ return [2 /*return*/, balances
80
+ .map(function (tokenBalance) { return ({
81
+ tokenId: new pshenmic_dpp_1.IdentifierWASM(tokenBalance.tokenId),
82
+ balance: tokenBalance.balance
83
+ }); })];
84
+ }
85
+ });
86
+ });
87
+ }
@@ -0,0 +1,8 @@
1
+ import GRPCConnectionPool from '../grpcConnectionPool';
2
+ import { IdentifierLike } from '../types';
3
+ import { IdentifierWASM } from 'pshenmic-dpp';
4
+ export interface TokenContractInfo {
5
+ contractId: IdentifierWASM;
6
+ tokenContractPosition: number;
7
+ }
8
+ export default function getTokenContractInfo(grpcPool: GRPCConnectionPool, tokenIdentifier: IdentifierLike): Promise<TokenContractInfo>;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.default = getTokenContractInfo;
40
+ var platform_1 = require("../../proto/generated/platform");
41
+ var pshenmic_dpp_1 = require("pshenmic-dpp");
42
+ var wasm_drive_verify_1 = require("wasm-drive-verify");
43
+ var getQuorumPublicKey_1 = require("../utils/getQuorumPublicKey");
44
+ var bytesToHex_1 = require("../utils/bytesToHex");
45
+ var verifyTenderdashProof_1 = require("../utils/verifyTenderdashProof");
46
+ function getTokenContractInfo(grpcPool, tokenIdentifier) {
47
+ return __awaiter(this, void 0, void 0, function () {
48
+ var tokenId, request, v0, _a, proof, metadata, _b, rootHash, contractInfo, quorumPublicKey, verify;
49
+ return __generator(this, function (_c) {
50
+ switch (_c.label) {
51
+ case 0:
52
+ tokenId = new pshenmic_dpp_1.IdentifierWASM(tokenIdentifier);
53
+ request = platform_1.GetTokenContractInfoRequest.fromPartial({
54
+ v0: {
55
+ tokenId: (tokenId).bytes(),
56
+ prove: true
57
+ }
58
+ });
59
+ return [4 /*yield*/, grpcPool.getClient().getTokenContractInfo(request)];
60
+ case 1:
61
+ v0 = (_c.sent()).v0;
62
+ _a = v0, proof = _a.proof, metadata = _a.metadata;
63
+ if (proof == null) {
64
+ throw new Error('Proof not found');
65
+ }
66
+ if (metadata == null) {
67
+ throw new Error('Metadata not found');
68
+ }
69
+ _b = (0, wasm_drive_verify_1.verifyTokenContractInfo)(proof.grovedbProof, tokenId.bytes(), true, pshenmic_dpp_1.PlatformVersionWASM.PLATFORM_V9), rootHash = _b.root_hash, contractInfo = _b.contract_info;
70
+ if (contractInfo == null) {
71
+ throw new Error('ContractInfo not found');
72
+ }
73
+ return [4 /*yield*/, (0, getQuorumPublicKey_1.getQuorumPublicKey)(proof.quorumType, (0, bytesToHex_1.default)(proof.quorumHash))];
74
+ case 2:
75
+ quorumPublicKey = _c.sent();
76
+ verify = (0, verifyTenderdashProof_1.default)(proof, metadata, rootHash, quorumPublicKey);
77
+ if (!verify) {
78
+ throw new Error('Failed to verify query');
79
+ }
80
+ return [2 /*return*/, {
81
+ contractId: new pshenmic_dpp_1.IdentifierWASM(contractInfo.contractId),
82
+ tokenContractPosition: contractInfo.tokenContractPosition
83
+ }];
84
+ }
85
+ });
86
+ });
87
+ }
@@ -0,0 +1,9 @@
1
+ import GRPCConnectionPool from '../grpcConnectionPool';
2
+ import { IdentifierLike } from '../types';
3
+ import { IdentifierWASM } from 'pshenmic-dpp';
4
+ export interface TokenTotalSupply {
5
+ tokenId: IdentifierWASM;
6
+ totalSystemAmount: string;
7
+ totalAggregatedAmountInUserAccounts: string;
8
+ }
9
+ export default function getTokenTotalSupply(grpcPool: GRPCConnectionPool, tokenIdentifier: IdentifierLike): Promise<TokenTotalSupply>;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.default = getTokenTotalSupply;
40
+ var platform_1 = require("../../proto/generated/platform");
41
+ var pshenmic_dpp_1 = require("pshenmic-dpp");
42
+ var wasm_drive_verify_1 = require("wasm-drive-verify");
43
+ var getQuorumPublicKey_1 = require("../utils/getQuorumPublicKey");
44
+ var bytesToHex_1 = require("../utils/bytesToHex");
45
+ var verifyTenderdashProof_1 = require("../utils/verifyTenderdashProof");
46
+ function getTokenTotalSupply(grpcPool, tokenIdentifier) {
47
+ return __awaiter(this, void 0, void 0, function () {
48
+ var tokenId, request, v0, _a, proof, metadata, _b, rootHash, totalSupplyAndBalance, quorumPublicKey, verify;
49
+ return __generator(this, function (_c) {
50
+ switch (_c.label) {
51
+ case 0:
52
+ tokenId = new pshenmic_dpp_1.IdentifierWASM(tokenIdentifier);
53
+ request = platform_1.GetTokenTotalSupplyRequest.fromPartial({
54
+ v0: {
55
+ tokenId: (tokenId).bytes(),
56
+ prove: true
57
+ }
58
+ });
59
+ return [4 /*yield*/, grpcPool.getClient().getTokenTotalSupply(request)];
60
+ case 1:
61
+ v0 = (_c.sent()).v0;
62
+ _a = v0, proof = _a.proof, metadata = _a.metadata;
63
+ if (proof == null) {
64
+ throw new Error('Proof not found');
65
+ }
66
+ if (metadata == null) {
67
+ throw new Error('Metadata not found');
68
+ }
69
+ _b = (0, wasm_drive_verify_1.verifyTokenTotalSupplyAndAggregatedIdentityBalance)(proof.grovedbProof, tokenId.bytes(), true, pshenmic_dpp_1.PlatformVersionWASM.PLATFORM_V9), rootHash = _b.root_hash, totalSupplyAndBalance = _b.total_supply_and_balance;
70
+ return [4 /*yield*/, (0, getQuorumPublicKey_1.getQuorumPublicKey)(proof.quorumType, (0, bytesToHex_1.default)(proof.quorumHash))];
71
+ case 2:
72
+ quorumPublicKey = _c.sent();
73
+ verify = (0, verifyTenderdashProof_1.default)(proof, metadata, rootHash, quorumPublicKey);
74
+ if (!verify) {
75
+ throw new Error('Failed to verify query');
76
+ }
77
+ return [2 /*return*/, {
78
+ tokenId: new pshenmic_dpp_1.IdentifierWASM(totalSupplyAndBalance.tokenId),
79
+ totalSystemAmount: totalSupplyAndBalance.totalSystemAmount,
80
+ totalAggregatedAmountInUserAccounts: totalSupplyAndBalance.totalAggregatedAmountInUserAccounts
81
+ }];
82
+ }
83
+ });
84
+ });
85
+ }
@@ -0,0 +1,50 @@
1
+ import GRPCConnectionPool from '../grpcConnectionPool';
2
+ import { IdentifierLike } from '../types';
3
+ import { IdentitiesTokenBalances } from './getIdentitiesTokenBalances';
4
+ import { IdentityTokenBalances } from './getIdentityTokensBalances';
5
+ import { TokenContractInfo } from './getTokenContractInfo';
6
+ import { TokenTotalSupply } from './getTokenTotalSupply';
7
+ /**
8
+ * Tokens controller for requesting information about tokens and tokens holders
9
+ *
10
+ * @hideconstructor
11
+ */
12
+ export default class TokensController {
13
+ /** @ignore **/
14
+ grpcPool: GRPCConnectionPool;
15
+ constructor(grpcPool: GRPCConnectionPool);
16
+ /**
17
+ * Retrieves a token balances for identities
18
+ *
19
+ * @param identifiers {IdentifierLike[]} - list of identifiers which balance we need to get
20
+ * @param tokenIdentifier {IdentifierLike} - token identifier
21
+ *
22
+ * @return {Promise<IdentitiesTokenBalances>}
23
+ */
24
+ getIdentitiesTokenBalances(identifiers: IdentifierLike[], tokenIdentifier: IdentifierLike): Promise<IdentitiesTokenBalances[]>;
25
+ /**
26
+ * Retrieves a tokens balances for identity
27
+ *
28
+ * @param identifier {IdentifierLike} - identifier which balance we need to get
29
+ * @param tokenIdentifiers {IdentifierLike[]} - list of tokens ids which used in request
30
+ *
31
+ * @return {Promise<IdentityTokenBalances>}
32
+ */
33
+ getIdentityTokensBalances(identifier: IdentifierLike, tokenIdentifiers: IdentifierLike[]): Promise<IdentityTokenBalances[]>;
34
+ /**
35
+ * Retrieves a tokens contract info by id
36
+ *
37
+ * @param tokenIdentifier {IdentifierLike} - token id which contract info we need
38
+ *
39
+ * @return {Promise<TokenContractInfo>}
40
+ */
41
+ getTokenContractInfo(tokenIdentifier: IdentifierLike): Promise<TokenContractInfo>;
42
+ /**
43
+ * Retrieves a token total supply
44
+ *
45
+ * @param tokenIdentifier {IdentifierLike} - token id which total supply we need
46
+ *
47
+ * @return {Promise<TokenTotalSupply>}
48
+ */
49
+ getTokenTotalSupply(tokenIdentifier: IdentifierLike): Promise<TokenTotalSupply>;
50
+ }