dash-platform-sdk 1.3.0-dev.1 → 1.3.0-dev.3
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 +1 -1
- package/package.json +1 -1
- package/src/DashPlatformSDK.d.ts +2 -0
- package/src/DashPlatformSDK.js +2 -0
- package/src/constants.d.ts +2 -0
- package/src/constants.js +3 -1
- package/src/contestedResources/createStateTransition.d.ts +3 -0
- package/src/contestedResources/createStateTransition.js +9 -0
- package/src/contestedResources/index.d.ts +1 -1
- package/src/dataContracts/getDataContractByIdentifier.js +4 -0
- package/src/names/index.d.ts +43 -2
- package/src/names/index.js +96 -16
- package/src/names/registerName.d.ts +3 -0
- package/src/names/registerName.js +131 -0
- package/src/names/searchByIdentity.d.ts +3 -0
- package/src/names/searchByIdentity.js +51 -0
- package/src/names/searchByName.d.ts +3 -0
- package/src/names/{search.js → searchByName.js} +6 -5
- package/src/names/testNameContested.d.ts +1 -0
- package/src/names/testNameContested.js +6 -0
- package/src/names/validateName.d.ts +1 -0
- package/src/names/validateName.js +14 -0
- package/src/stateTransitions/waitForStateTransitionResult.js +13 -17
- package/src/types.d.ts +1 -0
- package/src/utils/convertToHomographSafeChars.d.ts +0 -4
- package/src/utils/convertToHomographSafeChars.js +0 -4
- package/src/utils/createVoterIdentityId.d.ts +2 -0
- package/src/utils/createVoterIdentityId.js +12 -0
- package/src/utils/getRandomBytes.d.ts +1 -0
- package/src/utils/getRandomBytes.js +7 -0
- package/src/utils/index.d.ts +1 -3
- package/src/utils/index.js +1 -3
- package/src/utils/sleep.d.ts +1 -0
- package/src/utils/sleep.js +51 -0
- package/src/voting/createStateTransition.d.ts +3 -0
- package/src/voting/createStateTransition.js +9 -0
- package/src/voting/createVote.d.ts +2 -0
- package/src/voting/createVote.js +8 -0
- package/src/voting/index.d.ts +38 -0
- package/src/voting/index.js +62 -0
- package/test/unit/ContestedResources.spec.js +84 -3
- package/test/unit/Identity.spec.js +0 -12
- package/test/unit/Names.spec.d.ts +1 -0
- package/test/unit/Names.spec.js +96 -0
- package/src/names/search.d.ts +0 -3
package/package.json
CHANGED
package/src/DashPlatformSDK.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { DataContractsController } from './dataContracts';
|
|
|
10
10
|
import { ContestedResourcesController } from './contestedResources';
|
|
11
11
|
import { TokensController } from './tokens';
|
|
12
12
|
import { AbstractSigner } from './signer/AbstractSigner';
|
|
13
|
+
import { VotingController } from './voting';
|
|
13
14
|
export interface GRPCOptions {
|
|
14
15
|
poolLimit: 5;
|
|
15
16
|
dapiUrl?: string | string[];
|
|
@@ -36,6 +37,7 @@ export declare class DashPlatformSDK {
|
|
|
36
37
|
identities: IdentitiesController;
|
|
37
38
|
documents: DocumentsController;
|
|
38
39
|
keyPair: KeyPairController;
|
|
40
|
+
voting: VotingController;
|
|
39
41
|
tokens: TokensController;
|
|
40
42
|
utils: UtilsController;
|
|
41
43
|
names: NamesController;
|
package/src/DashPlatformSDK.js
CHANGED
|
@@ -12,6 +12,7 @@ var names_1 = require("./names");
|
|
|
12
12
|
var dataContracts_1 = require("./dataContracts");
|
|
13
13
|
var contestedResources_1 = require("./contestedResources");
|
|
14
14
|
var tokens_1 = require("./tokens");
|
|
15
|
+
var voting_1 = require("./voting");
|
|
15
16
|
/**
|
|
16
17
|
* Javascript SDK for that let you interact with a Dash Platform blockchain
|
|
17
18
|
*/
|
|
@@ -54,6 +55,7 @@ var DashPlatformSDK = /** @class */ (function () {
|
|
|
54
55
|
this.dataContracts = new dataContracts_1.DataContractsController(grpcPool);
|
|
55
56
|
this.identities = new identities_1.IdentitiesController(grpcPool);
|
|
56
57
|
this.documents = new documents_1.DocumentsController(grpcPool);
|
|
58
|
+
this.voting = new voting_1.VotingController();
|
|
57
59
|
this.node = new node_1.NodeController(grpcPool, network);
|
|
58
60
|
this.tokens = new tokens_1.TokensController(grpcPool);
|
|
59
61
|
this.names = new names_1.NamesController(grpcPool);
|
package/src/constants.d.ts
CHANGED
|
@@ -6,3 +6,5 @@ export declare const HALVING_INTERVAL = 210240;
|
|
|
6
6
|
export declare const TESTNET_ACTIVATION_HEIGHT = 1066900;
|
|
7
7
|
export declare const MAINNET_ACTIVATION_HEIGHT = 2128896;
|
|
8
8
|
export declare const GRPC_DEFAULT_POOL_LIMIT = 5;
|
|
9
|
+
export declare const DPNS_DATA_CONTRACT_ID = "GWRSAVFMjXx8HpQFaNJMqBV7MBgMK4br5UESsB4S31Ec";
|
|
10
|
+
export declare const DPNS_DATA_CONTRACT_BYTES = "AeZoxlmvZq7h5ywYbd57W34KHXEqCcQNVyH2Ir9TxTFVAAAAAAABAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGZG9tYWluFgsSEGRvY3VtZW50c011dGFibGUTABIMY2FuQmVEZWxldGVkEwESDHRyYW5zZmVyYWJsZQIBEgl0cmFkZU1vZGUCARIEdHlwZRIGb2JqZWN0EgdpbmRpY2VzFQIWBBIEbmFtZRIScGFyZW50TmFtZUFuZExhYmVsEgpwcm9wZXJ0aWVzFQIWARIabm9ybWFsaXplZFBhcmVudERvbWFpbk5hbWUSA2FzYxYBEg9ub3JtYWxpemVkTGFiZWwSA2FzYxIGdW5pcXVlEwESCWNvbnRlc3RlZBYDEgxmaWVsZE1hdGNoZXMVARYCEgVmaWVsZBIPbm9ybWFsaXplZExhYmVsEgxyZWdleFBhdHRlcm4SE15bYS16QS1aMDEtXXszLDE5fSQSCnJlc29sdXRpb24CABILZGVzY3JpcHRpb24SqklmIHRoZSBub3JtYWxpemVkIGxhYmVsIHBhcnQgb2YgdGhpcyBpbmRleCBpcyBsZXNzIHRoYW4gMjAgY2hhcmFjdGVycyAoYWxsIGFscGhhYmV0IGEteiwgQS1aLCAwLCAxLCBhbmQgLSkgdGhlbiBhIG1hc3Rlcm5vZGUgdm90ZSBjb250ZXN0IHRha2VzIHBsYWNlIHRvIGdpdmUgb3V0IHRoZSBuYW1lFgMSBG5hbWUSCmlkZW50aXR5SWQSDm51bGxTZWFyY2hhYmxlEwASCnByb3BlcnRpZXMVARYBEhByZWNvcmRzLmlkZW50aXR5EgNhc2MSCnByb3BlcnRpZXMWBxIFbGFiZWwWBhIEdHlwZRIGc3RyaW5nEgdwYXR0ZXJuEipeW2EtekEtWjAtOV1bYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSQSCW1pbkxlbmd0aAIDEgltYXhMZW5ndGgCPxIIcG9zaXRpb24CABILZGVzY3JpcHRpb24SGURvbWFpbiBsYWJlbC4gZS5nLiAnQm9iJy4SD25vcm1hbGl6ZWRMYWJlbBYGEgR0eXBlEgZzdHJpbmcSB3BhdHRlcm4SPF5bYS1oai1rbS1ucC16MC05XVthLWhqLWttLW5wLXowLTktXXswLDYxfVthLWhqLWttLW5wLXowLTldJBIJbWF4TGVuZ3RoAj8SCHBvc2l0aW9uAgESC2Rlc2NyaXB0aW9uEqNEb21haW4gbGFiZWwgY29udmVydGVkIHRvIGxvd2VyY2FzZSBmb3IgY2FzZS1pbnNlbnNpdGl2ZSB1bmlxdWVuZXNzIHZhbGlkYXRpb24uICJvIiwgImkiIGFuZCAibCIgcmVwbGFjZWQgd2l0aCAiMCIgYW5kICIxIiB0byBtaXRpZ2F0ZSBob21vZ3JhcGggYXR0YWNrLiBlLmcuICdiMGInEggkY29tbWVudBJcTXVzdCBiZSBlcXVhbCB0byB0aGUgbGFiZWwgaW4gbG93ZXJjYXNlLiAibyIsICJpIiBhbmQgImwiIG11c3QgYmUgcmVwbGFjZWQgd2l0aCAiMCIgYW5kICIxIi4SEHBhcmVudERvbWFpbk5hbWUWBhIEdHlwZRIGc3RyaW5nEgdwYXR0ZXJuEi1eJHxeW2EtekEtWjAtOV1bYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSQSCW1pbkxlbmd0aAIAEgltYXhMZW5ndGgCPxIIcG9zaXRpb24CAhILZGVzY3JpcHRpb24SJ0EgZnVsbCBwYXJlbnQgZG9tYWluIG5hbWUuIGUuZy4gJ2Rhc2gnLhIabm9ybWFsaXplZFBhcmVudERvbWFpbk5hbWUWBxIEdHlwZRIGc3RyaW5nEgdwYXR0ZXJuEkFeJHxeW2EtaGota20tbnAtejAtOV1bYS1oai1rbS1ucC16MC05LVwuXXswLDYxfVthLWhqLWttLW5wLXowLTldJBIJbWluTGVuZ3RoAgASCW1heExlbmd0aAI/Eghwb3NpdGlvbgIDEgtkZXNjcmlwdGlvbhKiQSBwYXJlbnQgZG9tYWluIG5hbWUgaW4gbG93ZXJjYXNlIGZvciBjYXNlLWluc2Vuc2l0aXZlIHVuaXF1ZW5lc3MgdmFsaWRhdGlvbi4gIm8iLCAiaSIgYW5kICJsIiByZXBsYWNlZCB3aXRoICIwIiBhbmQgIjEiIHRvIG1pdGlnYXRlIGhvbW9ncmFwaCBhdHRhY2suIGUuZy4gJ2Rhc2gnEggkY29tbWVudBLATXVzdCBlaXRoZXIgYmUgZXF1YWwgdG8gYW4gZXhpc3RpbmcgZG9tYWluIG9yIGVtcHR5IHRvIGNyZWF0ZSBhIHRvcCBsZXZlbCBkb21haW4uICJvIiwgImkiIGFuZCAibCIgbXVzdCBiZSByZXBsYWNlZCB3aXRoICIwIiBhbmQgIjEiLiBPbmx5IHRoZSBkYXRhIGNvbnRyYWN0IG93bmVyIGNhbiBjcmVhdGUgdG9wIGxldmVsIGRvbWFpbnMuEgxwcmVvcmRlclNhbHQWBhIEdHlwZRIFYXJyYXkSCWJ5dGVBcnJheRMBEghtaW5JdGVtcwIgEghtYXhJdGVtcwIgEghwb3NpdGlvbgIEEgtkZXNjcmlwdGlvbhIiU2FsdCB1c2VkIGluIHRoZSBwcmVvcmRlciBkb2N1bWVudBIHcmVjb3JkcxYFEgR0eXBlEgZvYmplY3QSCnByb3BlcnRpZXMWARIIaWRlbnRpdHkWBxIEdHlwZRIFYXJyYXkSCWJ5dGVBcnJheRMBEghtaW5JdGVtcwIgEghtYXhJdGVtcwIgEghwb3NpdGlvbgIBEhBjb250ZW50TWVkaWFUeXBlEiFhcHBsaWNhdGlvbi94LmRhc2guZHBwLmlkZW50aWZpZXISC2Rlc2NyaXB0aW9uEjFJZGVudGlmaWVyIG5hbWUgcmVjb3JkIHRoYXQgcmVmZXJzIHRvIGFuIElkZW50aXR5Eg1taW5Qcm9wZXJ0aWVzAgESCHBvc2l0aW9uAgUSFGFkZGl0aW9uYWxQcm9wZXJ0aWVzEwASDnN1YmRvbWFpblJ1bGVzFgYSBHR5cGUSBm9iamVjdBIKcHJvcGVydGllcxYBEg9hbGxvd1N1YmRvbWFpbnMWBBIEdHlwZRIHYm9vbGVhbhILZGVzY3JpcHRpb24SW1RoaXMgb3B0aW9uIGRlZmluZXMgd2hvIGNhbiBjcmVhdGUgc3ViZG9tYWluczogdHJ1ZSAtIGFueW9uZTsgZmFsc2UgLSBvbmx5IHRoZSBkb21haW4gb3duZXISCCRjb21tZW50Ek9Pbmx5IHRoZSBkb21haW4gb3duZXIgaXMgYWxsb3dlZCB0byBjcmVhdGUgc3ViZG9tYWlucyBmb3Igbm9uIHRvcC1sZXZlbCBkb21haW5zEghwb3NpdGlvbgIAEghwb3NpdGlvbgIGEgtkZXNjcmlwdGlvbhJCU3ViZG9tYWluIHJ1bGVzIGFsbG93IGRvbWFpbiBvd25lcnMgdG8gZGVmaW5lIHJ1bGVzIGZvciBzdWJkb21haW5zEhRhZGRpdGlvbmFsUHJvcGVydGllcxMAEghyZXF1aXJlZBUBEg9hbGxvd1N1YmRvbWFpbnMSCHJlcXVpcmVkFQkSCiRjcmVhdGVkQXQSCiR1cGRhdGVkQXQSDiR0cmFuc2ZlcnJlZEF0EgVsYWJlbBIPbm9ybWFsaXplZExhYmVsEhpub3JtYWxpemVkUGFyZW50RG9tYWluTmFtZRIMcHJlb3JkZXJTYWx0EgdyZWNvcmRzEg5zdWJkb21haW5SdWxlcxIJdHJhbnNpZW50FQESDHByZW9yZGVyU2FsdBIUYWRkaXRpb25hbFByb3BlcnRpZXMTABIIJGNvbW1lbnQS+wE3SW4gb3JkZXIgdG8gcmVnaXN0ZXIgYSBkb21haW4geW91IG5lZWQgdG8gY3JlYXRlIGEgcHJlb3JkZXIuIFRoZSBwcmVvcmRlciBzdGVwIGlzIG5lZWRlZCB0byBwcmV2ZW50IG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MuIG5vcm1hbGl6ZWRMYWJlbCArICcuJyArIG5vcm1hbGl6ZWRQYXJlbnREb21haW4gbXVzdCBub3QgYmUgbG9uZ2VyIHRoYW4gMjUzIGNoYXJzIGxlbmd0aCBhcyBkZWZpbmVkIGJ5IFJGQyAxMDM1LiBEb21haW4gZG9jdW1lbnRzIGFyZSBpbW11dGFibGU6IG1vZGlmaWNhdGlvbiBhbmQgZGVsZXRpb24gYXJlIHJlc3RyaWN0ZWQIcHJlb3JkZXIWCBIQZG9jdW1lbnRzTXV0YWJsZRMAEgxjYW5CZURlbGV0ZWQTARIEdHlwZRIGb2JqZWN0EgdpbmRpY2VzFQEWAxIEbmFtZRIKc2FsdGVkSGFzaBIKcHJvcGVydGllcxUBFgESEHNhbHRlZERvbWFpbkhhc2gSA2FzYxIGdW5pcXVlEwESCnByb3BlcnRpZXMWARIQc2FsdGVkRG9tYWluSGFzaBYGEgR0eXBlEgVhcnJheRIJYnl0ZUFycmF5EwESCG1pbkl0ZW1zAiASCG1heEl0ZW1zAiASCHBvc2l0aW9uAgASC2Rlc2NyaXB0aW9uEllEb3VibGUgc2hhLTI1NiBvZiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhIDMyIGJ5dGUgcmFuZG9tIHNhbHQgYW5kIGEgbm9ybWFsaXplZCBkb21haW4gbmFtZRIIcmVxdWlyZWQVARIQc2FsdGVkRG9tYWluSGFzaBIUYWRkaXRpb25hbFByb3BlcnRpZXMTABIIJGNvbW1lbnQSSlByZW9yZGVyIGRvY3VtZW50cyBhcmUgaW1tdXRhYmxlOiBtb2RpZmljYXRpb24gYW5kIGRlbGV0aW9uIGFyZSByZXN0cmljdGVkAAAAAAAAAAAAAA==";
|
package/src/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GRPC_DEFAULT_POOL_LIMIT = exports.MAINNET_ACTIVATION_HEIGHT = exports.TESTNET_ACTIVATION_HEIGHT = exports.HALVING_INTERVAL = exports.DAPI_DEFAULT_LIMIT = void 0;
|
|
3
|
+
exports.DPNS_DATA_CONTRACT_BYTES = exports.DPNS_DATA_CONTRACT_ID = exports.GRPC_DEFAULT_POOL_LIMIT = exports.MAINNET_ACTIVATION_HEIGHT = exports.TESTNET_ACTIVATION_HEIGHT = exports.HALVING_INTERVAL = exports.DAPI_DEFAULT_LIMIT = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Default amount of documents to retrieve from DAPI
|
|
6
6
|
*/
|
|
@@ -9,3 +9,5 @@ exports.HALVING_INTERVAL = 210240;
|
|
|
9
9
|
exports.TESTNET_ACTIVATION_HEIGHT = 1066900;
|
|
10
10
|
exports.MAINNET_ACTIVATION_HEIGHT = 2128896;
|
|
11
11
|
exports.GRPC_DEFAULT_POOL_LIMIT = 5;
|
|
12
|
+
exports.DPNS_DATA_CONTRACT_ID = 'GWRSAVFMjXx8HpQFaNJMqBV7MBgMK4br5UESsB4S31Ec';
|
|
13
|
+
exports.DPNS_DATA_CONTRACT_BYTES = 'AeZoxlmvZq7h5ywYbd57W34KHXEqCcQNVyH2Ir9TxTFVAAAAAAABAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGZG9tYWluFgsSEGRvY3VtZW50c011dGFibGUTABIMY2FuQmVEZWxldGVkEwESDHRyYW5zZmVyYWJsZQIBEgl0cmFkZU1vZGUCARIEdHlwZRIGb2JqZWN0EgdpbmRpY2VzFQIWBBIEbmFtZRIScGFyZW50TmFtZUFuZExhYmVsEgpwcm9wZXJ0aWVzFQIWARIabm9ybWFsaXplZFBhcmVudERvbWFpbk5hbWUSA2FzYxYBEg9ub3JtYWxpemVkTGFiZWwSA2FzYxIGdW5pcXVlEwESCWNvbnRlc3RlZBYDEgxmaWVsZE1hdGNoZXMVARYCEgVmaWVsZBIPbm9ybWFsaXplZExhYmVsEgxyZWdleFBhdHRlcm4SE15bYS16QS1aMDEtXXszLDE5fSQSCnJlc29sdXRpb24CABILZGVzY3JpcHRpb24SqklmIHRoZSBub3JtYWxpemVkIGxhYmVsIHBhcnQgb2YgdGhpcyBpbmRleCBpcyBsZXNzIHRoYW4gMjAgY2hhcmFjdGVycyAoYWxsIGFscGhhYmV0IGEteiwgQS1aLCAwLCAxLCBhbmQgLSkgdGhlbiBhIG1hc3Rlcm5vZGUgdm90ZSBjb250ZXN0IHRha2VzIHBsYWNlIHRvIGdpdmUgb3V0IHRoZSBuYW1lFgMSBG5hbWUSCmlkZW50aXR5SWQSDm51bGxTZWFyY2hhYmxlEwASCnByb3BlcnRpZXMVARYBEhByZWNvcmRzLmlkZW50aXR5EgNhc2MSCnByb3BlcnRpZXMWBxIFbGFiZWwWBhIEdHlwZRIGc3RyaW5nEgdwYXR0ZXJuEipeW2EtekEtWjAtOV1bYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSQSCW1pbkxlbmd0aAIDEgltYXhMZW5ndGgCPxIIcG9zaXRpb24CABILZGVzY3JpcHRpb24SGURvbWFpbiBsYWJlbC4gZS5nLiAnQm9iJy4SD25vcm1hbGl6ZWRMYWJlbBYGEgR0eXBlEgZzdHJpbmcSB3BhdHRlcm4SPF5bYS1oai1rbS1ucC16MC05XVthLWhqLWttLW5wLXowLTktXXswLDYxfVthLWhqLWttLW5wLXowLTldJBIJbWF4TGVuZ3RoAj8SCHBvc2l0aW9uAgESC2Rlc2NyaXB0aW9uEqNEb21haW4gbGFiZWwgY29udmVydGVkIHRvIGxvd2VyY2FzZSBmb3IgY2FzZS1pbnNlbnNpdGl2ZSB1bmlxdWVuZXNzIHZhbGlkYXRpb24uICJvIiwgImkiIGFuZCAibCIgcmVwbGFjZWQgd2l0aCAiMCIgYW5kICIxIiB0byBtaXRpZ2F0ZSBob21vZ3JhcGggYXR0YWNrLiBlLmcuICdiMGInEggkY29tbWVudBJcTXVzdCBiZSBlcXVhbCB0byB0aGUgbGFiZWwgaW4gbG93ZXJjYXNlLiAibyIsICJpIiBhbmQgImwiIG11c3QgYmUgcmVwbGFjZWQgd2l0aCAiMCIgYW5kICIxIi4SEHBhcmVudERvbWFpbk5hbWUWBhIEdHlwZRIGc3RyaW5nEgdwYXR0ZXJuEi1eJHxeW2EtekEtWjAtOV1bYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSQSCW1pbkxlbmd0aAIAEgltYXhMZW5ndGgCPxIIcG9zaXRpb24CAhILZGVzY3JpcHRpb24SJ0EgZnVsbCBwYXJlbnQgZG9tYWluIG5hbWUuIGUuZy4gJ2Rhc2gnLhIabm9ybWFsaXplZFBhcmVudERvbWFpbk5hbWUWBxIEdHlwZRIGc3RyaW5nEgdwYXR0ZXJuEkFeJHxeW2EtaGota20tbnAtejAtOV1bYS1oai1rbS1ucC16MC05LVwuXXswLDYxfVthLWhqLWttLW5wLXowLTldJBIJbWluTGVuZ3RoAgASCW1heExlbmd0aAI/Eghwb3NpdGlvbgIDEgtkZXNjcmlwdGlvbhKiQSBwYXJlbnQgZG9tYWluIG5hbWUgaW4gbG93ZXJjYXNlIGZvciBjYXNlLWluc2Vuc2l0aXZlIHVuaXF1ZW5lc3MgdmFsaWRhdGlvbi4gIm8iLCAiaSIgYW5kICJsIiByZXBsYWNlZCB3aXRoICIwIiBhbmQgIjEiIHRvIG1pdGlnYXRlIGhvbW9ncmFwaCBhdHRhY2suIGUuZy4gJ2Rhc2gnEggkY29tbWVudBLATXVzdCBlaXRoZXIgYmUgZXF1YWwgdG8gYW4gZXhpc3RpbmcgZG9tYWluIG9yIGVtcHR5IHRvIGNyZWF0ZSBhIHRvcCBsZXZlbCBkb21haW4uICJvIiwgImkiIGFuZCAibCIgbXVzdCBiZSByZXBsYWNlZCB3aXRoICIwIiBhbmQgIjEiLiBPbmx5IHRoZSBkYXRhIGNvbnRyYWN0IG93bmVyIGNhbiBjcmVhdGUgdG9wIGxldmVsIGRvbWFpbnMuEgxwcmVvcmRlclNhbHQWBhIEdHlwZRIFYXJyYXkSCWJ5dGVBcnJheRMBEghtaW5JdGVtcwIgEghtYXhJdGVtcwIgEghwb3NpdGlvbgIEEgtkZXNjcmlwdGlvbhIiU2FsdCB1c2VkIGluIHRoZSBwcmVvcmRlciBkb2N1bWVudBIHcmVjb3JkcxYFEgR0eXBlEgZvYmplY3QSCnByb3BlcnRpZXMWARIIaWRlbnRpdHkWBxIEdHlwZRIFYXJyYXkSCWJ5dGVBcnJheRMBEghtaW5JdGVtcwIgEghtYXhJdGVtcwIgEghwb3NpdGlvbgIBEhBjb250ZW50TWVkaWFUeXBlEiFhcHBsaWNhdGlvbi94LmRhc2guZHBwLmlkZW50aWZpZXISC2Rlc2NyaXB0aW9uEjFJZGVudGlmaWVyIG5hbWUgcmVjb3JkIHRoYXQgcmVmZXJzIHRvIGFuIElkZW50aXR5Eg1taW5Qcm9wZXJ0aWVzAgESCHBvc2l0aW9uAgUSFGFkZGl0aW9uYWxQcm9wZXJ0aWVzEwASDnN1YmRvbWFpblJ1bGVzFgYSBHR5cGUSBm9iamVjdBIKcHJvcGVydGllcxYBEg9hbGxvd1N1YmRvbWFpbnMWBBIEdHlwZRIHYm9vbGVhbhILZGVzY3JpcHRpb24SW1RoaXMgb3B0aW9uIGRlZmluZXMgd2hvIGNhbiBjcmVhdGUgc3ViZG9tYWluczogdHJ1ZSAtIGFueW9uZTsgZmFsc2UgLSBvbmx5IHRoZSBkb21haW4gb3duZXISCCRjb21tZW50Ek9Pbmx5IHRoZSBkb21haW4gb3duZXIgaXMgYWxsb3dlZCB0byBjcmVhdGUgc3ViZG9tYWlucyBmb3Igbm9uIHRvcC1sZXZlbCBkb21haW5zEghwb3NpdGlvbgIAEghwb3NpdGlvbgIGEgtkZXNjcmlwdGlvbhJCU3ViZG9tYWluIHJ1bGVzIGFsbG93IGRvbWFpbiBvd25lcnMgdG8gZGVmaW5lIHJ1bGVzIGZvciBzdWJkb21haW5zEhRhZGRpdGlvbmFsUHJvcGVydGllcxMAEghyZXF1aXJlZBUBEg9hbGxvd1N1YmRvbWFpbnMSCHJlcXVpcmVkFQkSCiRjcmVhdGVkQXQSCiR1cGRhdGVkQXQSDiR0cmFuc2ZlcnJlZEF0EgVsYWJlbBIPbm9ybWFsaXplZExhYmVsEhpub3JtYWxpemVkUGFyZW50RG9tYWluTmFtZRIMcHJlb3JkZXJTYWx0EgdyZWNvcmRzEg5zdWJkb21haW5SdWxlcxIJdHJhbnNpZW50FQESDHByZW9yZGVyU2FsdBIUYWRkaXRpb25hbFByb3BlcnRpZXMTABIIJGNvbW1lbnQS+wE3SW4gb3JkZXIgdG8gcmVnaXN0ZXIgYSBkb21haW4geW91IG5lZWQgdG8gY3JlYXRlIGEgcHJlb3JkZXIuIFRoZSBwcmVvcmRlciBzdGVwIGlzIG5lZWRlZCB0byBwcmV2ZW50IG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MuIG5vcm1hbGl6ZWRMYWJlbCArICcuJyArIG5vcm1hbGl6ZWRQYXJlbnREb21haW4gbXVzdCBub3QgYmUgbG9uZ2VyIHRoYW4gMjUzIGNoYXJzIGxlbmd0aCBhcyBkZWZpbmVkIGJ5IFJGQyAxMDM1LiBEb21haW4gZG9jdW1lbnRzIGFyZSBpbW11dGFibGU6IG1vZGlmaWNhdGlvbiBhbmQgZGVsZXRpb24gYXJlIHJlc3RyaWN0ZWQIcHJlb3JkZXIWCBIQZG9jdW1lbnRzTXV0YWJsZRMAEgxjYW5CZURlbGV0ZWQTARIEdHlwZRIGb2JqZWN0EgdpbmRpY2VzFQEWAxIEbmFtZRIKc2FsdGVkSGFzaBIKcHJvcGVydGllcxUBFgESEHNhbHRlZERvbWFpbkhhc2gSA2FzYxIGdW5pcXVlEwESCnByb3BlcnRpZXMWARIQc2FsdGVkRG9tYWluSGFzaBYGEgR0eXBlEgVhcnJheRIJYnl0ZUFycmF5EwESCG1pbkl0ZW1zAiASCG1heEl0ZW1zAiASCHBvc2l0aW9uAgASC2Rlc2NyaXB0aW9uEllEb3VibGUgc2hhLTI1NiBvZiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhIDMyIGJ5dGUgcmFuZG9tIHNhbHQgYW5kIGEgbm9ybWFsaXplZCBkb21haW4gbmFtZRIIcmVxdWlyZWQVARIQc2FsdGVkRG9tYWluSGFzaBIUYWRkaXRpb25hbFByb3BlcnRpZXMTABIIJGNvbW1lbnQSSlByZW9yZGVyIGRvY3VtZW50cyBhcmUgaW1tdXRhYmxlOiBtb2RpZmljYXRpb24gYW5kIGRlbGV0aW9uIGFyZSByZXN0cmljdGVkAAAAAAAAAAAAAA==';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = createStateTransition;
|
|
4
|
+
var pshenmic_dpp_1 = require("pshenmic-dpp");
|
|
5
|
+
function createStateTransition(voteWASM, proTxHash, identityNonce) {
|
|
6
|
+
var voterIdentity = pshenmic_dpp_1.IdentifierWASM.fromHex(proTxHash);
|
|
7
|
+
var masternodeVoteTransition = new pshenmic_dpp_1.MasternodeVoteTransitionWASM(proTxHash, voterIdentity, voteWASM, identityNonce);
|
|
8
|
+
return masternodeVoteTransition.toStateTransition();
|
|
9
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import GRPCConnectionPool from '../grpcConnectionPool';
|
|
2
2
|
import { ContestedResourceVoteState, ContestedStateResultType } from '../types';
|
|
3
|
-
import { StartAtIdentifierInfo } from './getContestedResourceVoteState';
|
|
4
3
|
import { DataContractWASM } from 'pshenmic-dpp';
|
|
4
|
+
import { StartAtIdentifierInfo } from './getContestedResourceVoteState';
|
|
5
5
|
/**
|
|
6
6
|
* Contested Resources controller for requesting information about contested resources
|
|
7
7
|
*
|
|
@@ -42,6 +42,7 @@ var platform_1 = require("../../proto/generated/platform");
|
|
|
42
42
|
var getQuorumPublicKey_1 = require("../utils/getQuorumPublicKey");
|
|
43
43
|
var bytesToHex_1 = require("../utils/bytesToHex");
|
|
44
44
|
var verifyTenderdashProof_1 = require("../utils/verifyTenderdashProof");
|
|
45
|
+
var constants_1 = require("../constants");
|
|
45
46
|
function getByIdentifier(grpcPool, identifier) {
|
|
46
47
|
return __awaiter(this, void 0, void 0, function () {
|
|
47
48
|
var id, getDataContractRequest, v0, _a, proof, metadata, _b, rootHash, dataContract, quorumPublicKey, verify;
|
|
@@ -49,6 +50,9 @@ function getByIdentifier(grpcPool, identifier) {
|
|
|
49
50
|
switch (_c.label) {
|
|
50
51
|
case 0:
|
|
51
52
|
id = new pshenmic_dpp_1.IdentifierWASM(identifier);
|
|
53
|
+
if (id.base58() === constants_1.DPNS_DATA_CONTRACT_ID) {
|
|
54
|
+
return [2 /*return*/, pshenmic_dpp_1.DataContractWASM.fromBase64(constants_1.DPNS_DATA_CONTRACT_BYTES, true, 9)];
|
|
55
|
+
}
|
|
52
56
|
getDataContractRequest = platform_1.GetDataContractRequest.fromPartial({
|
|
53
57
|
v0: {
|
|
54
58
|
id: id.bytes(),
|
package/src/names/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import GRPCConnectionPool from '../grpcConnectionPool';
|
|
2
|
-
import { DocumentWASM } from 'pshenmic-dpp';
|
|
2
|
+
import { DocumentWASM, PrivateKeyWASM } from 'pshenmic-dpp';
|
|
3
|
+
import { IdentifierLike } from '../types';
|
|
3
4
|
/**
|
|
4
5
|
* Functions related to DPNS names (usernames)
|
|
5
6
|
*
|
|
@@ -23,5 +24,45 @@ export declare class NamesController {
|
|
|
23
24
|
*
|
|
24
25
|
* @return Promise<DocumentWASM | null>
|
|
25
26
|
*/
|
|
26
|
-
|
|
27
|
+
searchByName(name: string): Promise<DocumentWASM[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Tests a given username against contested names rules.
|
|
30
|
+
* Contested names includes an additional fee of 0.2 Dash
|
|
31
|
+
* as a voting resolution fee
|
|
32
|
+
*
|
|
33
|
+
* This function return boolean whether given username (f.e pshenmic.dash)
|
|
34
|
+
* falls under contested names rules.
|
|
35
|
+
* @param name
|
|
36
|
+
*/
|
|
37
|
+
testNameContested(name: string): boolean;
|
|
38
|
+
searchByIdentity(identifier: IdentifierLike): Promise<DocumentWASM[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Performs a DPNS name registration sequence
|
|
41
|
+
* Contested names are include additional fee of 0.2 Dash
|
|
42
|
+
* Check your name is contested with .testNameContested(name) method to check if additional fee will be charged
|
|
43
|
+
*
|
|
44
|
+
* @param name {string} username (ex. pshenmic.dash)
|
|
45
|
+
* @param identityId {IdentifierLike} identity identifier
|
|
46
|
+
* @param privateKey {PrivateKeyWASM} Authentication / High private key from your identity
|
|
47
|
+
*/
|
|
48
|
+
registerName(name: string, identityId: IdentifierLike, privateKey: PrivateKeyWASM): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Converts DPNS name to normalized format (ex. alice.dash -> al1ce.dash)
|
|
51
|
+
*
|
|
52
|
+
* source: https://github.com/dashpay/platform/blob/master/packages/js-dash-sdk/src/utils/convertToHomographSafeChars.ts
|
|
53
|
+
*
|
|
54
|
+
*
|
|
55
|
+
* @param label {string}
|
|
56
|
+
*
|
|
57
|
+
* @return {string}
|
|
58
|
+
*/
|
|
59
|
+
normalizeLabel(label: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* Validates a DPNS name that you would like to register
|
|
62
|
+
*
|
|
63
|
+
* @param fullName {string} full DPNS name (ex. pshenmic.dash)
|
|
64
|
+
*
|
|
65
|
+
* @return {string} null if valid or string with a reason
|
|
66
|
+
*/
|
|
67
|
+
validateName(fullName: string): null | string;
|
|
27
68
|
}
|
package/src/names/index.js
CHANGED
|
@@ -37,7 +37,14 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.NamesController = void 0;
|
|
40
|
-
var
|
|
40
|
+
var pshenmic_dpp_1 = require("pshenmic-dpp");
|
|
41
|
+
var searchByName_1 = require("./searchByName");
|
|
42
|
+
var searchByIdentity_1 = require("./searchByIdentity");
|
|
43
|
+
var registerName_1 = require("./registerName");
|
|
44
|
+
var validateName_1 = require("./validateName");
|
|
45
|
+
var getIdentityByIdentifier_1 = require("../identities/getIdentityByIdentifier");
|
|
46
|
+
var convertToHomographSafeChars_1 = require("../utils/convertToHomographSafeChars");
|
|
47
|
+
var testNameContested_1 = require("./testNameContested");
|
|
41
48
|
/**
|
|
42
49
|
* Functions related to DPNS names (usernames)
|
|
43
50
|
*
|
|
@@ -61,30 +68,103 @@ var NamesController = /** @class */ (function () {
|
|
|
61
68
|
*
|
|
62
69
|
* @return Promise<DocumentWASM | null>
|
|
63
70
|
*/
|
|
64
|
-
NamesController.prototype.
|
|
71
|
+
NamesController.prototype.searchByName = function (name) {
|
|
65
72
|
return __awaiter(this, void 0, void 0, function () {
|
|
66
|
-
var
|
|
67
|
-
return __generator(this, function (
|
|
68
|
-
switch (
|
|
73
|
+
var validation;
|
|
74
|
+
return __generator(this, function (_a) {
|
|
75
|
+
switch (_a.label) {
|
|
69
76
|
case 0:
|
|
70
|
-
|
|
71
|
-
|
|
77
|
+
validation = (0, validateName_1.default)(name);
|
|
78
|
+
if (validation != null) {
|
|
79
|
+
throw new Error(validation);
|
|
72
80
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
81
|
+
return [4 /*yield*/, (0, searchByName_1.default)(this.grpcPool, name)];
|
|
82
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Tests a given username against contested names rules.
|
|
89
|
+
* Contested names includes an additional fee of 0.2 Dash
|
|
90
|
+
* as a voting resolution fee
|
|
91
|
+
*
|
|
92
|
+
* This function return boolean whether given username (f.e pshenmic.dash)
|
|
93
|
+
* falls under contested names rules.
|
|
94
|
+
* @param name
|
|
95
|
+
*/
|
|
96
|
+
NamesController.prototype.testNameContested = function (name) {
|
|
97
|
+
var validation = (0, validateName_1.default)(name);
|
|
98
|
+
if (validation != null) {
|
|
99
|
+
throw new Error(validation);
|
|
100
|
+
}
|
|
101
|
+
var label = name.split('.')[0];
|
|
102
|
+
var normalizedLabel = (0, convertToHomographSafeChars_1.default)(label);
|
|
103
|
+
return (0, testNameContested_1.default)(normalizedLabel);
|
|
104
|
+
};
|
|
105
|
+
NamesController.prototype.searchByIdentity = function (identifier) {
|
|
106
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
107
|
+
return __generator(this, function (_a) {
|
|
108
|
+
switch (_a.label) {
|
|
109
|
+
case 0: return [4 /*yield*/, (0, searchByIdentity_1.default)(this.grpcPool, new pshenmic_dpp_1.IdentifierWASM(identifier))];
|
|
110
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Performs a DPNS name registration sequence
|
|
117
|
+
* Contested names are include additional fee of 0.2 Dash
|
|
118
|
+
* Check your name is contested with .testNameContested(name) method to check if additional fee will be charged
|
|
119
|
+
*
|
|
120
|
+
* @param name {string} username (ex. pshenmic.dash)
|
|
121
|
+
* @param identityId {IdentifierLike} identity identifier
|
|
122
|
+
* @param privateKey {PrivateKeyWASM} Authentication / High private key from your identity
|
|
123
|
+
*/
|
|
124
|
+
NamesController.prototype.registerName = function (name, identityId, privateKey) {
|
|
125
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
126
|
+
var validation, identity;
|
|
127
|
+
return __generator(this, function (_a) {
|
|
128
|
+
switch (_a.label) {
|
|
129
|
+
case 0:
|
|
130
|
+
validation = (0, validateName_1.default)(name);
|
|
131
|
+
if (validation != null) {
|
|
132
|
+
throw new Error(validation);
|
|
76
133
|
}
|
|
77
|
-
return [4 /*yield*/, (0,
|
|
134
|
+
return [4 /*yield*/, (0, getIdentityByIdentifier_1.default)(this.grpcPool, identityId)];
|
|
78
135
|
case 1:
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return [2 /*return
|
|
136
|
+
identity = _a.sent();
|
|
137
|
+
return [4 /*yield*/, (0, registerName_1.default)(this.grpcPool, name, identity, privateKey)];
|
|
138
|
+
case 2:
|
|
139
|
+
_a.sent();
|
|
140
|
+
return [2 /*return*/];
|
|
84
141
|
}
|
|
85
142
|
});
|
|
86
143
|
});
|
|
87
144
|
};
|
|
145
|
+
/**
|
|
146
|
+
* Converts DPNS name to normalized format (ex. alice.dash -> al1ce.dash)
|
|
147
|
+
*
|
|
148
|
+
* source: https://github.com/dashpay/platform/blob/master/packages/js-dash-sdk/src/utils/convertToHomographSafeChars.ts
|
|
149
|
+
*
|
|
150
|
+
*
|
|
151
|
+
* @param label {string}
|
|
152
|
+
*
|
|
153
|
+
* @return {string}
|
|
154
|
+
*/
|
|
155
|
+
NamesController.prototype.normalizeLabel = function (label) {
|
|
156
|
+
return (0, convertToHomographSafeChars_1.default)(label);
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Validates a DPNS name that you would like to register
|
|
160
|
+
*
|
|
161
|
+
* @param fullName {string} full DPNS name (ex. pshenmic.dash)
|
|
162
|
+
*
|
|
163
|
+
* @return {string} null if valid or string with a reason
|
|
164
|
+
*/
|
|
165
|
+
NamesController.prototype.validateName = function (fullName) {
|
|
166
|
+
return (0, validateName_1.default)(fullName);
|
|
167
|
+
};
|
|
88
168
|
return NamesController;
|
|
89
169
|
}());
|
|
90
170
|
exports.NamesController = NamesController;
|
|
@@ -0,0 +1,131 @@
|
|
|
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
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
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
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.default = registerName;
|
|
49
|
+
var convertToHomographSafeChars_1 = require("../utils/convertToHomographSafeChars");
|
|
50
|
+
var pshenmic_dpp_1 = require("pshenmic-dpp");
|
|
51
|
+
var getRandomBytes_1 = require("../utils/getRandomBytes");
|
|
52
|
+
var sha256_1 = require("../utils/sha256");
|
|
53
|
+
var create_1 = require("../documents/create");
|
|
54
|
+
var createStateTransition_1 = require("../documents/createStateTransition");
|
|
55
|
+
var getIdentityContractNonce_1 = require("../identities/getIdentityContractNonce");
|
|
56
|
+
var broadcast_1 = require("../stateTransitions/broadcast");
|
|
57
|
+
var waitForStateTransitionResult_1 = require("../stateTransitions/waitForStateTransitionResult");
|
|
58
|
+
var testNameContested_1 = require("./testNameContested");
|
|
59
|
+
var constants_1 = require("../constants");
|
|
60
|
+
function registerName(grpcPool, name, identity, privateKey) {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
62
|
+
var identityPublicKey, _a, label, parentDomainName, salt, normalizedParentDomainName, normalizedLabel, normalizedFullDomainName, saltedDomainHash, document, stateTransition, preorderData, identityContractNonce, domainData;
|
|
63
|
+
return __generator(this, function (_b) {
|
|
64
|
+
switch (_b.label) {
|
|
65
|
+
case 0:
|
|
66
|
+
identityPublicKey = identity.getPublicKeys().filter(function (identityPublicKey) { return identityPublicKey.getPublicKeyHash() === privateKey.getPublicKeyHash(); })[0];
|
|
67
|
+
if (identityPublicKey == null) {
|
|
68
|
+
throw new Error('Private key does not match the identity');
|
|
69
|
+
}
|
|
70
|
+
if (identityPublicKey.securityLevel !== 'HIGH' && identityPublicKey.purpose !== 'AUTHENTICATION') {
|
|
71
|
+
throw new Error('Wrong private key, must be from AUTHENTICATION HIGH identity public key');
|
|
72
|
+
}
|
|
73
|
+
_a = name.split('.'), label = _a[0], parentDomainName = _a[1];
|
|
74
|
+
salt = (0, getRandomBytes_1.default)(32);
|
|
75
|
+
normalizedParentDomainName = (0, convertToHomographSafeChars_1.default)(parentDomainName);
|
|
76
|
+
normalizedLabel = (0, convertToHomographSafeChars_1.default)(label);
|
|
77
|
+
normalizedFullDomainName = "".concat(normalizedLabel, ".").concat(normalizedParentDomainName);
|
|
78
|
+
saltedDomainHash = (0, sha256_1.default)((0, sha256_1.default)(new Uint8Array(__spreadArray(__spreadArray([], salt, true), new TextEncoder().encode(normalizedFullDomainName), true))));
|
|
79
|
+
preorderData = {
|
|
80
|
+
saltedDomainHash: Array.from(saltedDomainHash)
|
|
81
|
+
};
|
|
82
|
+
return [4 /*yield*/, (0, getIdentityContractNonce_1.default)(grpcPool, identity.id, constants_1.DPNS_DATA_CONTRACT_ID)];
|
|
83
|
+
case 1:
|
|
84
|
+
identityContractNonce = _b.sent();
|
|
85
|
+
document = (0, create_1.default)(constants_1.DPNS_DATA_CONTRACT_ID, 'preorder', preorderData, identity.id.base58());
|
|
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
|
+
});
|
|
130
|
+
});
|
|
131
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
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 = 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
|
+
});
|
|
51
|
+
}
|
|
@@ -40,12 +40,13 @@ exports.default = search;
|
|
|
40
40
|
var convertToHomographSafeChars_1 = require("../utils/convertToHomographSafeChars");
|
|
41
41
|
var query_1 = require("../documents/query");
|
|
42
42
|
var DPNS_DATA_CONTRACT_ID = 'GWRSAVFMjXx8HpQFaNJMqBV7MBgMK4br5UESsB4S31Ec';
|
|
43
|
-
function search(grpcPool,
|
|
43
|
+
function search(grpcPool, name) {
|
|
44
44
|
return __awaiter(this, void 0, void 0, function () {
|
|
45
|
-
var normalizedParentDomainName, normalizedLabelPrefix, where, orderBy;
|
|
46
|
-
return __generator(this, function (
|
|
47
|
-
switch (
|
|
45
|
+
var _a, label, parentDomainName, normalizedParentDomainName, normalizedLabelPrefix, where, orderBy;
|
|
46
|
+
return __generator(this, function (_b) {
|
|
47
|
+
switch (_b.label) {
|
|
48
48
|
case 0:
|
|
49
|
+
_a = name.split('.'), label = _a[0], parentDomainName = _a[1];
|
|
49
50
|
normalizedParentDomainName = (0, convertToHomographSafeChars_1.default)(parentDomainName);
|
|
50
51
|
normalizedLabelPrefix = (0, convertToHomographSafeChars_1.default)(label);
|
|
51
52
|
where = [
|
|
@@ -56,7 +57,7 @@ function search(grpcPool, label, parentDomainName) {
|
|
|
56
57
|
['normalizedLabel', 'asc']
|
|
57
58
|
];
|
|
58
59
|
return [4 /*yield*/, (0, query_1.default)(grpcPool, DPNS_DATA_CONTRACT_ID, 'domain', where, orderBy)];
|
|
59
|
-
case 1: return [2 /*return*/,
|
|
60
|
+
case 1: return [2 /*return*/, _b.sent()];
|
|
60
61
|
}
|
|
61
62
|
});
|
|
62
63
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function testNameContested(normalizedLabel: string): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function validateName(fullName: string): string | null;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = validateName;
|
|
4
|
+
function validateName(fullName) {
|
|
5
|
+
var chunks = fullName.split('.');
|
|
6
|
+
if (chunks.length !== 2) {
|
|
7
|
+
return 'Name to search should be a full domain name (ex. pshenmic.dash)';
|
|
8
|
+
}
|
|
9
|
+
var label = chunks[0], parentDomainName = chunks[1];
|
|
10
|
+
if (parentDomainName !== 'dash') {
|
|
11
|
+
return 'Root domain must be .dash';
|
|
12
|
+
}
|
|
13
|
+
return /^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$/.test(label) ? null : 'Unacceptable label name';
|
|
14
|
+
}
|
|
@@ -37,27 +37,23 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.default = waitForStateTransitionResult;
|
|
40
|
-
var platform_1 = require("../../proto/generated/platform");
|
|
41
40
|
function waitForStateTransitionResult(grpcPool, stateTransition) {
|
|
42
41
|
return __awaiter(this, void 0, void 0, function () {
|
|
43
|
-
var
|
|
44
|
-
return __generator(this, function (
|
|
45
|
-
switch (
|
|
42
|
+
var url, resp, _a, _b;
|
|
43
|
+
return __generator(this, function (_c) {
|
|
44
|
+
switch (_c.label) {
|
|
46
45
|
case 0:
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
stateTransitionHash: stateTransition.bytes()
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
return [4 /*yield*/, grpcPool.getClient().waitForStateTransitionResult(waitForStateTransitionResultRequest)];
|
|
46
|
+
url = "https://".concat(grpcPool.network === 'mainnet' ? '' : 'testnet.', "platform-explorer.pshenmic.dev/waitForStateTransitionResult/").concat(stateTransition.hash(false));
|
|
47
|
+
return [4 /*yield*/, fetch(url)];
|
|
53
48
|
case 1:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
49
|
+
resp = _c.sent();
|
|
50
|
+
if (!(resp.status !== 200)) return [3 /*break*/, 3];
|
|
51
|
+
_b = (_a = console).log;
|
|
52
|
+
return [4 /*yield*/, resp.json()];
|
|
53
|
+
case 2:
|
|
54
|
+
_b.apply(_a, [_c.sent()]);
|
|
55
|
+
throw new Error('Internal server error while waiting for state transition result');
|
|
56
|
+
case 3: return [2 /*return*/];
|
|
61
57
|
}
|
|
62
58
|
});
|
|
63
59
|
});
|
package/src/types.d.ts
CHANGED