dash-platform-sdk 1.3.0-dev.4 → 1.3.0-dev.6
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.
- package/bundle.min.js +21 -2
- package/index.js +2 -5
- package/package.json +30 -31
- package/proto/generated/google/protobuf/wrappers.d.ts +260 -29
- package/proto/generated/google/protobuf/wrappers.js +562 -345
- package/proto/generated/platform.client.d.ts +251 -0
- package/proto/generated/platform.client.js +175 -0
- package/proto/generated/platform.d.ts +3682 -1939
- package/proto/generated/platform.js +8119 -18366
- package/src/DashPlatformSDK.d.ts +5 -4
- package/src/DashPlatformSDK.js +56 -46
- package/src/constants.js +7 -10
- package/src/contestedResources/createStateTransition.d.ts +1 -2
- package/src/contestedResources/createStateTransition.js +4 -7
- package/src/contestedResources/getContestedResourceVoteState.js +67 -118
- package/src/contestedResources/index.js +9 -55
- package/src/dataContracts/create.js +5 -8
- package/src/dataContracts/createStateTransition.js +10 -14
- package/src/dataContracts/getDataContractByIdentifier.js +40 -83
- package/src/dataContracts/index.js +17 -63
- package/src/documents/create.js +3 -6
- package/src/documents/createStateTransition.js +19 -31
- package/src/documents/index.js +25 -72
- package/src/documents/query.js +58 -90
- package/src/grpcConnectionPool.d.ts +30 -8
- package/src/grpcConnectionPool.js +63 -121
- package/src/identities/createStateTransition.js +14 -26
- package/src/identities/getIdentityBalance.js +37 -80
- package/src/identities/getIdentityByIdentifier.js +37 -80
- package/src/identities/getIdentityByNonUniquePublicKeyHash.js +41 -82
- package/src/identities/getIdentityByPublicKeyHash.js +37 -80
- package/src/identities/getIdentityContractNonce.js +40 -83
- package/src/identities/getIdentityNonce.js +38 -81
- package/src/identities/getIdentityPublicKeys.js +43 -81
- package/src/identities/index.js +57 -153
- package/src/keyPair/deriveChild.d.ts +2 -2
- package/src/keyPair/deriveChild.js +2 -49
- package/src/keyPair/derivePath.d.ts +2 -2
- package/src/keyPair/derivePath.js +2 -49
- package/src/keyPair/index.d.ts +39 -114
- package/src/keyPair/index.js +62 -296
- package/src/keyPair/mnemonicToSeed.d.ts +1 -1
- package/src/keyPair/mnemonicToSeed.js +3 -46
- package/src/names/index.js +43 -111
- package/src/names/registerName.js +60 -127
- package/src/names/searchByIdentity.d.ts +1 -1
- package/src/names/searchByIdentity.js +4 -50
- package/src/names/searchByName.js +15 -63
- package/src/names/testNameContested.js +1 -4
- package/src/names/validateName.js +3 -6
- package/src/node/epochs.js +43 -85
- package/src/node/index.d.ts +3 -3
- package/src/node/index.js +18 -77
- package/src/node/status.js +37 -81
- package/src/node/totalCredits.d.ts +2 -1
- package/src/node/totalCredits.js +32 -73
- package/src/signer/AbstractSigner.js +1 -2
- package/src/signer/setSigner.js +1 -4
- package/src/stateTransitions/broadcast.js +7 -57
- package/src/stateTransitions/index.js +13 -66
- package/src/stateTransitions/waitForStateTransitionResult.js +6 -58
- package/src/tokens/createStateTransition.js +23 -35
- package/src/tokens/getIdentitiesTokenBalances.js +40 -83
- package/src/tokens/getIdentityTokensBalances.js +40 -83
- package/src/tokens/getTokenContractInfo.js +40 -83
- package/src/tokens/getTokenDirectPurchasePrices.js +37 -80
- package/src/tokens/getTokenTotalSupply.js +38 -81
- package/src/tokens/index.js +39 -124
- package/src/types.d.ts +6 -12
- package/src/types.js +6 -16
- package/src/utils/base58ToBytes.js +3 -6
- package/src/utils/bytesToHex.js +2 -5
- package/src/utils/bytesToTypedArray.d.ts +1 -0
- package/src/utils/bytesToTypedArray.js +3 -0
- package/src/utils/calculateMsgHash.d.ts +1 -1
- package/src/utils/calculateMsgHash.js +10 -13
- package/src/utils/calculateSignHash.d.ts +1 -1
- package/src/utils/calculateSignHash.js +7 -10
- package/src/utils/calculateStateIdHash.d.ts +1 -1
- package/src/utils/calculateStateIdHash.js +8 -10
- package/src/utils/convertToHomographSafeChars.js +2 -5
- package/src/utils/createVoterIdentityId.d.ts +1 -1
- package/src/utils/createVoterIdentityId.js +12 -11
- package/src/utils/getEvonodeList.d.ts +2 -2
- package/src/utils/getEvonodeList.js +10 -61
- package/src/utils/getQuorumPublicKey.js +15 -66
- package/src/utils/getRandomArrayItem.js +1 -4
- package/src/utils/getRandomBytes.js +2 -5
- package/src/utils/hexToBytes.js +2 -6
- package/src/utils/index.js +21 -28
- package/src/utils/indexBytesToString.js +2 -5
- package/src/utils/sha256.d.ts +1 -1
- package/src/utils/sha256.js +10 -8
- package/src/utils/signHash.d.ts +1 -1
- package/src/utils/signHash.js +9 -12
- package/src/utils/signRequestId.d.ts +1 -1
- package/src/utils/signRequestId.js +9 -12
- package/src/utils/sleep.js +2 -50
- package/src/utils/stringToIndexValueBytes.js +4 -7
- package/src/utils/verifyTenderdashProof.d.ts +1 -1
- package/src/utils/verifyTenderdashProof.js +13 -17
- package/src/voting/createStateTransition.d.ts +1 -2
- package/src/voting/createStateTransition.js +4 -7
- package/src/voting/createVote.js +4 -7
- package/src/voting/index.d.ts +3 -4
- package/src/voting/index.js +19 -26
- package/test/unit/ContestedResources.spec.js +92 -177
- package/test/unit/DataContract.spec.js +44 -111
- package/test/unit/Document.spec.js +93 -183
- package/test/unit/Identity.spec.js +221 -346
- package/test/unit/KeyPair.spec.js +30 -145
- package/test/unit/Names.spec.js +27 -90
- package/test/unit/Node.spec.js +55 -126
- package/test/unit/SDK.spec.js +7 -9
- package/test/unit/Tokens.spec.js +111 -278
- package/bundle.min.js.LICENSE.txt +0 -1
- package/src/keyPair/keyToPublicKey.d.ts +0 -2
- package/src/keyPair/keyToPublicKey.js +0 -47
- package/src/keyPair/keyToWalletId.d.ts +0 -2
- package/src/keyPair/keyToWalletId.js +0 -50
- package/src/keyPair/keyToXPrivateKey.d.ts +0 -3
- package/src/keyPair/keyToXPrivateKey.js +0 -50
- package/src/keyPair/keyToXPublicKey.d.ts +0 -3
- package/src/keyPair/keyToXPublicKey.js +0 -50
- package/src/keyPair/mnemonicToIdentityKey.d.ts +0 -3
- package/src/keyPair/mnemonicToIdentityKey.js +0 -57
- package/src/keyPair/mnemonicToWallet.d.ts +0 -2
- package/src/keyPair/mnemonicToWallet.js +0 -55
- package/src/keyPair/privateKeyToWif.d.ts +0 -2
- package/src/keyPair/privateKeyToWif.js +0 -50
- package/src/keyPair/publicKeyToAddress.d.ts +0 -2
- package/src/keyPair/publicKeyToAddress.js +0 -50
- package/src/keyPair/seedToWallet.d.ts +0 -2
- package/src/keyPair/seedToWallet.js +0 -50
- package/src/keyPair/walletToIdentityKey.d.ts +0 -3
- package/src/keyPair/walletToIdentityKey.js +0 -56
- package/src/keyPair/xkeyToHDXKey.d.ts +0 -2
- package/src/keyPair/xkeyToHDXKey.js +0 -50
|
@@ -1,131 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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 };
|
|
1
|
+
import convertToHomographSafeChars from '../utils/convertToHomographSafeChars';
|
|
2
|
+
import { PrefundedVotingBalanceWASM } from 'pshenmic-dpp';
|
|
3
|
+
import getRandomBytes from '../utils/getRandomBytes';
|
|
4
|
+
import sha256 from '../utils/sha256';
|
|
5
|
+
import createDocument from '../documents/create';
|
|
6
|
+
import createStateTransition from '../documents/createStateTransition';
|
|
7
|
+
import getIdentityContractNonce from '../identities/getIdentityContractNonce';
|
|
8
|
+
import broadcast from '../stateTransitions/broadcast';
|
|
9
|
+
import waitForStateTransitionResult from '../stateTransitions/waitForStateTransitionResult';
|
|
10
|
+
import testNameContested from './testNameContested';
|
|
11
|
+
import { DPNS_DATA_CONTRACT_ID } from '../constants';
|
|
12
|
+
export default async function registerName(grpcPool, name, identity, privateKey) {
|
|
13
|
+
const [identityPublicKey] = identity.getPublicKeys().filter(identityPublicKey => identityPublicKey.getPublicKeyHash() === privateKey.getPublicKeyHash());
|
|
14
|
+
if (identityPublicKey == null) {
|
|
15
|
+
throw new Error('Private key does not match the identity');
|
|
36
16
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
40
|
-
if (ar || !(i in from)) {
|
|
41
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
42
|
-
ar[i] = from[i];
|
|
43
|
-
}
|
|
17
|
+
if (identityPublicKey.securityLevel !== 'HIGH' && identityPublicKey.purpose !== 'AUTHENTICATION') {
|
|
18
|
+
throw new Error('Wrong private key, must be from AUTHENTICATION HIGH identity public key');
|
|
44
19
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
stateTransition = (0, createStateTransition_1.default)(document, 'create', { identityContractNonce: identityContractNonce + BigInt(1) });
|
|
87
|
-
return [4 /*yield*/, stateTransition.sign(privateKey, identityPublicKey)];
|
|
88
|
-
case 2:
|
|
89
|
-
_b.sent();
|
|
90
|
-
return [4 /*yield*/, (0, broadcast_1.default)(grpcPool, stateTransition)
|
|
91
|
-
// wait for state transition confirmation before next broadcast
|
|
92
|
-
];
|
|
93
|
-
case 3:
|
|
94
|
-
_b.sent();
|
|
95
|
-
// wait for state transition confirmation before next broadcast
|
|
96
|
-
return [4 /*yield*/, (0, waitForStateTransitionResult_1.default)(grpcPool, stateTransition)
|
|
97
|
-
// 2. Create domain document
|
|
98
|
-
];
|
|
99
|
-
case 4:
|
|
100
|
-
// wait for state transition confirmation before next broadcast
|
|
101
|
-
_b.sent();
|
|
102
|
-
domainData = {
|
|
103
|
-
label: label,
|
|
104
|
-
normalizedLabel: normalizedLabel,
|
|
105
|
-
parentDomainName: parentDomainName,
|
|
106
|
-
normalizedParentDomainName: normalizedParentDomainName,
|
|
107
|
-
preorderSalt: Array.from(salt),
|
|
108
|
-
records: {
|
|
109
|
-
identity: Array.from(identity.id.bytes())
|
|
110
|
-
},
|
|
111
|
-
subdomainRules: {
|
|
112
|
-
allowSubdomains: false
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
document = (0, create_1.default)(constants_1.DPNS_DATA_CONTRACT_ID, 'domain', domainData, identity.id.base58());
|
|
116
|
-
stateTransition = (0, createStateTransition_1.default)(document, 'create', {
|
|
117
|
-
identityContractNonce: identityContractNonce + BigInt(2),
|
|
118
|
-
// @ts-expect-error
|
|
119
|
-
prefundedVotingBalance: (0, testNameContested_1.default)(normalizedLabel) ? new pshenmic_dpp_1.PrefundedVotingBalanceWASM('parentNameAndLabel', BigInt(20000000000)) : undefined
|
|
120
|
-
});
|
|
121
|
-
return [4 /*yield*/, stateTransition.sign(privateKey, identityPublicKey)];
|
|
122
|
-
case 5:
|
|
123
|
-
_b.sent();
|
|
124
|
-
return [4 /*yield*/, (0, broadcast_1.default)(grpcPool, stateTransition)];
|
|
125
|
-
case 6:
|
|
126
|
-
_b.sent();
|
|
127
|
-
return [2 /*return*/];
|
|
128
|
-
}
|
|
129
|
-
});
|
|
20
|
+
const [label, parentDomainName] = name.split('.');
|
|
21
|
+
const salt = getRandomBytes(32);
|
|
22
|
+
const normalizedParentDomainName = convertToHomographSafeChars(parentDomainName);
|
|
23
|
+
const normalizedLabel = convertToHomographSafeChars(label);
|
|
24
|
+
const normalizedFullDomainName = `${normalizedLabel}.${normalizedParentDomainName}`;
|
|
25
|
+
const saltedDomainHash = await sha256(await sha256(new Uint8Array([
|
|
26
|
+
...salt,
|
|
27
|
+
...new TextEncoder().encode(normalizedFullDomainName)
|
|
28
|
+
])));
|
|
29
|
+
let document;
|
|
30
|
+
let stateTransition;
|
|
31
|
+
// 1. Create preorder document
|
|
32
|
+
const preorderData = {
|
|
33
|
+
saltedDomainHash: Array.from(saltedDomainHash)
|
|
34
|
+
};
|
|
35
|
+
const identityContractNonce = await getIdentityContractNonce(grpcPool, identity.id, DPNS_DATA_CONTRACT_ID);
|
|
36
|
+
document = createDocument(DPNS_DATA_CONTRACT_ID, 'preorder', preorderData, identity.id.base58());
|
|
37
|
+
stateTransition = createStateTransition(document, 'create', { identityContractNonce: identityContractNonce + BigInt(1) });
|
|
38
|
+
await stateTransition.sign(privateKey, identityPublicKey);
|
|
39
|
+
await broadcast(grpcPool, stateTransition);
|
|
40
|
+
// wait for state transition confirmation before next broadcast
|
|
41
|
+
await waitForStateTransitionResult(grpcPool, stateTransition);
|
|
42
|
+
// 2. Create domain document
|
|
43
|
+
const domainData = {
|
|
44
|
+
label,
|
|
45
|
+
normalizedLabel,
|
|
46
|
+
parentDomainName,
|
|
47
|
+
normalizedParentDomainName,
|
|
48
|
+
preorderSalt: Array.from(salt),
|
|
49
|
+
records: {
|
|
50
|
+
identity: Array.from(identity.id.bytes())
|
|
51
|
+
},
|
|
52
|
+
subdomainRules: {
|
|
53
|
+
allowSubdomains: false
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
document = createDocument(DPNS_DATA_CONTRACT_ID, 'domain', domainData, identity.id.base58());
|
|
57
|
+
stateTransition = createStateTransition(document, 'create', {
|
|
58
|
+
identityContractNonce: identityContractNonce + BigInt(2),
|
|
59
|
+
// @ts-expect-error
|
|
60
|
+
prefundedVotingBalance: testNameContested(normalizedLabel) ? new PrefundedVotingBalanceWASM('parentNameAndLabel', BigInt(20000000000)) : undefined
|
|
130
61
|
});
|
|
62
|
+
await stateTransition.sign(privateKey, identityPublicKey);
|
|
63
|
+
await broadcast(grpcPool, stateTransition);
|
|
131
64
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { DocumentWASM, IdentifierWASM } from 'pshenmic-dpp';
|
|
2
2
|
import GRPCConnectionPool from '../grpcConnectionPool';
|
|
3
|
-
export default function
|
|
3
|
+
export default function searchByIdentity(grpcPool: GRPCConnectionPool, identifier: IdentifierWASM): Promise<DocumentWASM[]>;
|
|
@@ -1,51 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
return
|
|
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 = search;
|
|
40
|
-
var query_1 = require("../documents/query");
|
|
41
|
-
var DPNS_DATA_CONTRACT_ID = 'GWRSAVFMjXx8HpQFaNJMqBV7MBgMK4br5UESsB4S31Ec';
|
|
42
|
-
function search(grpcPool, identifier) {
|
|
43
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
44
|
-
return __generator(this, function (_a) {
|
|
45
|
-
switch (_a.label) {
|
|
46
|
-
case 0: return [4 /*yield*/, (0, query_1.default)(grpcPool, DPNS_DATA_CONTRACT_ID, 'domain', [['records.identity', '=', identifier.base58()]], [['records.identity', 'asc']])];
|
|
47
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
});
|
|
1
|
+
import query from '../documents/query';
|
|
2
|
+
const DPNS_DATA_CONTRACT_ID = 'GWRSAVFMjXx8HpQFaNJMqBV7MBgMK4br5UESsB4S31Ec';
|
|
3
|
+
export default async function searchByIdentity(grpcPool, identifier) {
|
|
4
|
+
return await query(grpcPool, DPNS_DATA_CONTRACT_ID, 'domain', [['records.identity', '=', identifier.base58()]], [['records.identity', 'asc']]);
|
|
51
5
|
}
|
|
@@ -1,64 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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 = search;
|
|
40
|
-
var convertToHomographSafeChars_1 = require("../utils/convertToHomographSafeChars");
|
|
41
|
-
var query_1 = require("../documents/query");
|
|
42
|
-
var DPNS_DATA_CONTRACT_ID = 'GWRSAVFMjXx8HpQFaNJMqBV7MBgMK4br5UESsB4S31Ec';
|
|
43
|
-
function search(grpcPool, name) {
|
|
44
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
45
|
-
var _a, label, parentDomainName, normalizedParentDomainName, normalizedLabelPrefix, where, orderBy;
|
|
46
|
-
return __generator(this, function (_b) {
|
|
47
|
-
switch (_b.label) {
|
|
48
|
-
case 0:
|
|
49
|
-
_a = name.split('.'), label = _a[0], parentDomainName = _a[1];
|
|
50
|
-
normalizedParentDomainName = (0, convertToHomographSafeChars_1.default)(parentDomainName);
|
|
51
|
-
normalizedLabelPrefix = (0, convertToHomographSafeChars_1.default)(label);
|
|
52
|
-
where = [
|
|
53
|
-
['normalizedParentDomainName', '==', normalizedParentDomainName],
|
|
54
|
-
['normalizedLabel', 'startsWith', normalizedLabelPrefix]
|
|
55
|
-
];
|
|
56
|
-
orderBy = [
|
|
57
|
-
['normalizedLabel', 'asc']
|
|
58
|
-
];
|
|
59
|
-
return [4 /*yield*/, (0, query_1.default)(grpcPool, DPNS_DATA_CONTRACT_ID, 'domain', where, orderBy)];
|
|
60
|
-
case 1: return [2 /*return*/, _b.sent()];
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
});
|
|
1
|
+
import convertToHomographSafeChars from '../utils/convertToHomographSafeChars';
|
|
2
|
+
import query from '../documents/query';
|
|
3
|
+
const DPNS_DATA_CONTRACT_ID = 'GWRSAVFMjXx8HpQFaNJMqBV7MBgMK4br5UESsB4S31Ec';
|
|
4
|
+
export default async function search(grpcPool, name) {
|
|
5
|
+
const [label, parentDomainName] = name.split('.');
|
|
6
|
+
const normalizedParentDomainName = convertToHomographSafeChars(parentDomainName);
|
|
7
|
+
const normalizedLabelPrefix = convertToHomographSafeChars(label);
|
|
8
|
+
const where = [
|
|
9
|
+
['normalizedParentDomainName', '==', normalizedParentDomainName],
|
|
10
|
+
['normalizedLabel', 'startsWith', normalizedLabelPrefix]
|
|
11
|
+
];
|
|
12
|
+
const orderBy = [
|
|
13
|
+
['normalizedLabel', 'asc']
|
|
14
|
+
];
|
|
15
|
+
return await query(grpcPool, DPNS_DATA_CONTRACT_ID, 'domain', where, orderBy);
|
|
64
16
|
}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = testNameContested;
|
|
4
|
-
function testNameContested(normalizedLabel) {
|
|
1
|
+
export default function testNameContested(normalizedLabel) {
|
|
5
2
|
return /^[a-zA-Z01-]{3,19}$/.test(normalizedLabel);
|
|
6
3
|
}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.default = validateName;
|
|
4
|
-
function validateName(fullName) {
|
|
5
|
-
var chunks = fullName.split('.');
|
|
1
|
+
export default function validateName(fullName) {
|
|
2
|
+
const chunks = fullName.split('.');
|
|
6
3
|
if (chunks.length !== 2) {
|
|
7
4
|
return 'Name to search should be a full domain name (ex. pshenmic.dash)';
|
|
8
5
|
}
|
|
9
|
-
|
|
6
|
+
const [label, parentDomainName] = chunks;
|
|
10
7
|
if (parentDomainName !== 'dash') {
|
|
11
8
|
return 'Root domain must be .dash';
|
|
12
9
|
}
|
package/src/node/epochs.js
CHANGED
|
@@ -1,88 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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 = epochs;
|
|
40
|
-
var platform_1 = require("../../proto/generated/platform");
|
|
41
|
-
var pshenmic_dpp_1 = require("pshenmic-dpp");
|
|
42
|
-
var getQuorumPublicKey_1 = require("../utils/getQuorumPublicKey");
|
|
43
|
-
var bytesToHex_1 = require("../utils/bytesToHex");
|
|
44
|
-
var verifyTenderdashProof_1 = require("../utils/verifyTenderdashProof");
|
|
45
|
-
function epochs(grpcPool, count, ascending, start) {
|
|
46
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
47
|
-
var request, v0, _a, proof, metadata, _b, rootHash, epochsInfo, quorumPublicKey, verify;
|
|
48
|
-
return __generator(this, function (_c) {
|
|
49
|
-
switch (_c.label) {
|
|
50
|
-
case 0:
|
|
51
|
-
request = platform_1.GetEpochsInfoRequest.fromPartial({
|
|
52
|
-
v0: {
|
|
53
|
-
startEpoch: start,
|
|
54
|
-
count: count,
|
|
55
|
-
ascending: ascending,
|
|
56
|
-
prove: true
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
return [4 /*yield*/, grpcPool.getClient().getEpochsInfo(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, pshenmic_dpp_1.verifyEpochsInfoProof)(proof.grovedbProof, metadata.epoch, start, count, ascending, pshenmic_dpp_1.PlatformVersionWASM.PLATFORM_V9), rootHash = _b.rootHash, epochsInfo = _b.epochsInfo;
|
|
70
|
-
return [4 /*yield*/, (0, getQuorumPublicKey_1.getQuorumPublicKey)(grpcPool.network, 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*/, epochsInfo.map(function (info) { return ({
|
|
78
|
-
number: info.index,
|
|
79
|
-
firstBlockHeight: info.firstBlockHeight,
|
|
80
|
-
firstCoreBlockHeight: info.firstCoreBlockHeight,
|
|
81
|
-
startTime: info.firstBlockTime,
|
|
82
|
-
feeMultiplier: info.feeMultiplierPermille,
|
|
83
|
-
protocolVersion: info.protocolVersion
|
|
84
|
-
}); })];
|
|
1
|
+
import { GetEpochsInfoRequest } from '../../proto/generated/platform';
|
|
2
|
+
import { PlatformVersionWASM, verifyEpochsInfoProof } from 'pshenmic-dpp';
|
|
3
|
+
import { getQuorumPublicKey } from '../utils/getQuorumPublicKey';
|
|
4
|
+
import bytesToHex from '../utils/bytesToHex';
|
|
5
|
+
import verifyTenderdashProof from '../utils/verifyTenderdashProof';
|
|
6
|
+
import { UInt32Value } from '../../proto/generated/google/protobuf/wrappers';
|
|
7
|
+
export default async function epochs(grpcPool, count, ascending, start) {
|
|
8
|
+
const getEpochsInfoRequest = GetEpochsInfoRequest.create({
|
|
9
|
+
version: {
|
|
10
|
+
oneofKind: 'v0',
|
|
11
|
+
v0: {
|
|
12
|
+
startEpoch: start != null ? UInt32Value.create({ value: start }) : undefined,
|
|
13
|
+
count,
|
|
14
|
+
ascending,
|
|
15
|
+
prove: true
|
|
85
16
|
}
|
|
86
|
-
}
|
|
17
|
+
}
|
|
87
18
|
});
|
|
19
|
+
const { response } = await grpcPool.getClient().getEpochsInfo(getEpochsInfoRequest);
|
|
20
|
+
const { version } = response;
|
|
21
|
+
if (version.oneofKind !== 'v0') {
|
|
22
|
+
throw new Error('Unexpected oneOf type returned from DAPI (must be v0)');
|
|
23
|
+
}
|
|
24
|
+
const { v0 } = version;
|
|
25
|
+
if (v0.result.oneofKind !== 'proof') {
|
|
26
|
+
throw new Error('Unexpected oneOf type returned from DAPI (must be proof)');
|
|
27
|
+
}
|
|
28
|
+
const { result: { proof }, metadata } = v0;
|
|
29
|
+
if (metadata == null) {
|
|
30
|
+
throw new Error('Metadata not found');
|
|
31
|
+
}
|
|
32
|
+
const { rootHash, epochsInfo } = verifyEpochsInfoProof(proof.grovedbProof, metadata.epoch, start, count, ascending, PlatformVersionWASM.PLATFORM_V9);
|
|
33
|
+
const quorumPublicKey = await getQuorumPublicKey(grpcPool.network, proof.quorumType, bytesToHex(proof.quorumHash));
|
|
34
|
+
const verify = await verifyTenderdashProof(proof, metadata, rootHash, quorumPublicKey);
|
|
35
|
+
if (!verify) {
|
|
36
|
+
throw new Error('Failed to verify query');
|
|
37
|
+
}
|
|
38
|
+
return epochsInfo.map(info => ({
|
|
39
|
+
number: info.index,
|
|
40
|
+
firstBlockHeight: info.firstBlockHeight,
|
|
41
|
+
firstCoreBlockHeight: info.firstCoreBlockHeight,
|
|
42
|
+
startTime: info.firstBlockTime,
|
|
43
|
+
feeMultiplier: info.feeMultiplierPermille,
|
|
44
|
+
protocolVersion: info.protocolVersion
|
|
45
|
+
}));
|
|
88
46
|
}
|
package/src/node/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import GRPCConnectionPool from '../grpcConnectionPool';
|
|
2
|
-
import { NodeStatus } from '../types';
|
|
2
|
+
import { Network, NodeStatus } from '../types';
|
|
3
3
|
import { EpochInfo } from './epochs';
|
|
4
4
|
/**
|
|
5
5
|
* Node controller for requesting information about DAPI node
|
|
@@ -9,8 +9,8 @@ import { EpochInfo } from './epochs';
|
|
|
9
9
|
export declare class NodeController {
|
|
10
10
|
/** @ignore **/
|
|
11
11
|
grpcPool: GRPCConnectionPool;
|
|
12
|
-
network:
|
|
13
|
-
constructor(grpcPool: GRPCConnectionPool, network:
|
|
12
|
+
network: Network;
|
|
13
|
+
constructor(grpcPool: GRPCConnectionPool, network: Network);
|
|
14
14
|
/**
|
|
15
15
|
* Retrieves an info about node
|
|
16
16
|
* Includes information about genesis, chain, software versions
|