opportunity-service 0.0.564 → 0.0.568

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. package/dist/OpportunityService.js +137 -0
  2. package/dist/OpportunityService.js.map +1 -0
  3. package/dist/api/dispute/check-vote-results.js +33 -0
  4. package/dist/api/dispute/check-vote-results.js.map +1 -0
  5. package/dist/api/dispute/connect.js +39 -0
  6. package/dist/api/dispute/connect.js.map +1 -0
  7. package/dist/api/dispute/ensure-entity-metadata.js +39 -0
  8. package/dist/api/dispute/ensure-entity-metadata.js.map +1 -0
  9. package/dist/api/dispute/launch-new-vote.js +94 -0
  10. package/dist/api/dispute/launch-new-vote.js.map +1 -0
  11. package/dist/api/dispute/submit-vote.js +41 -0
  12. package/dist/api/dispute/submit-vote.js.map +1 -0
  13. package/dist/api/dispute/util/wait-until-present.js +27 -0
  14. package/dist/api/dispute/util/wait-until-present.js.map +1 -0
  15. package/dist/api/dispute/util/wait-until-started.js +23 -0
  16. package/dist/api/dispute/util/wait-until-started.js.map +1 -0
  17. package/dist/api/ethereum/sendAsync.js +37 -0
  18. package/dist/api/ethereum/sendAsync.js.map +1 -0
  19. package/dist/api/exchange/complete-relationship.js +4 -0
  20. package/dist/api/exchange/complete-relationship.js.map +1 -0
  21. package/dist/api/exchange/create-dispute.js +40 -0
  22. package/dist/api/exchange/create-dispute.js.map +1 -0
  23. package/dist/api/exchange/create-task.js +70 -0
  24. package/dist/api/exchange/create-task.js.map +1 -0
  25. package/dist/api/exchange/enter-work-relationship.js +61 -0
  26. package/dist/api/exchange/enter-work-relationship.js.map +1 -0
  27. package/dist/api/exchange/index.js +1 -0
  28. package/dist/api/exchange/index.js.map +1 -0
  29. package/dist/api/exchange/inspect-relationship.js +6 -0
  30. package/dist/api/exchange/inspect-relationship.js.map +1 -0
  31. package/dist/api/identity/register-new-user.js +33 -0
  32. package/dist/api/identity/register-new-user.js.map +1 -0
  33. package/dist/api/index.js +72 -0
  34. package/dist/api/index.js.map +1 -0
  35. package/dist/api/internal/abis.js +10 -0
  36. package/dist/api/internal/abis.js.map +1 -0
  37. package/dist/api/internal/addresses.js +8 -0
  38. package/dist/api/internal/addresses.js.map +1 -0
  39. package/dist/api/internal/events.js +10 -0
  40. package/dist/api/internal/events.js.map +1 -0
  41. package/dist/api/internal/index.js +5 -0
  42. package/dist/api/internal/index.js.map +1 -0
  43. package/dist/api/market/create-market.js +4 -0
  44. package/dist/api/market/create-market.js.map +1 -0
  45. package/dist/api/other/create-eth-crypto-creds.js +20 -0
  46. package/dist/api/other/create-eth-crypto-creds.js.map +1 -0
  47. package/dist/api/provider/decrypt.js +18 -0
  48. package/dist/api/provider/decrypt.js.map +1 -0
  49. package/dist/api/provider/encrypt.js +18 -0
  50. package/dist/api/provider/encrypt.js.map +1 -0
  51. package/dist/api/util/encrypt-by-public-key.js +52 -0
  52. package/dist/api/util/encrypt-by-public-key.js.map +1 -0
  53. package/dist/api/util/parse-cipher.js +11 -0
  54. package/dist/api/util/parse-cipher.js.map +1 -0
  55. package/dist/api/util/stringify-cipher.js +5 -0
  56. package/dist/api/util/stringify-cipher.js.map +1 -0
  57. package/dist/blockchain/abi.json +1626 -0
  58. package/dist/blockchain/addresses.json +17 -0
  59. package/dist/blockchain/blocks.json +3 -0
  60. package/dist/blockchain/bytecode.json +4 -0
  61. package/dist/constants/interface.js +1 -0
  62. package/dist/constants/interface.js.map +1 -0
  63. package/dist/constants/voting.js +1 -0
  64. package/dist/constants/voting.js.map +1 -0
  65. package/dist/constants.js +92 -0
  66. package/dist/constants.js.map +1 -0
  67. package/dist/events/OpportunityEventEmitter.js +32 -0
  68. package/dist/events/OpportunityEventEmitter.js.map +1 -0
  69. package/dist/events/get-log.js +1 -0
  70. package/dist/events/get-log.js.map +1 -0
  71. package/dist/events/start-event-listeners.js +9 -0
  72. package/dist/events/start-event-listeners.js.map +1 -0
  73. package/dist/events/sync-with-ethereum-node.js +20 -0
  74. package/dist/events/sync-with-ethereum-node.js.map +1 -0
  75. package/dist/gas.js +1 -0
  76. package/dist/gas.js.map +1 -0
  77. package/dist/logger.js +1 -0
  78. package/dist/logger.js.map +1 -0
  79. package/dist/modules/storage/OpportunityStorageProvider.js +94 -0
  80. package/dist/modules/storage/OpportunityStorageProvider.js.map +1 -0
  81. package/dist/sync/process/process-log.js +69 -0
  82. package/dist/sync/process/process-log.js.map +1 -0
  83. package/dist/sync/process/processDisputeCreated.js +33 -0
  84. package/dist/sync/process/processDisputeCreated.js.map +1 -0
  85. package/dist/sync/process/processMarketCreatedLog.js +33 -0
  86. package/dist/sync/process/processMarketCreatedLog.js.map +1 -0
  87. package/dist/sync/process/processMarketDestroyedEvent.js +10 -0
  88. package/dist/sync/process/processMarketDestroyedEvent.js.map +1 -0
  89. package/dist/sync/process/processUserAssignedTrueIdentification.js +21 -0
  90. package/dist/sync/process/processUserAssignedTrueIdentification.js.map +1 -0
  91. package/dist/sync/process/processUserRegistered.js +20 -0
  92. package/dist/sync/process/processUserRegistered.js.map +1 -0
  93. package/dist/sync/process/processUserSummaryCreated.js +22 -0
  94. package/dist/sync/process/processUserSummaryCreated.js.map +1 -0
  95. package/dist/sync/process/processWorkRelationshipCreated.js +38 -0
  96. package/dist/sync/process/processWorkRelationshipCreated.js.map +1 -0
  97. package/dist/sync/sync-jobs.js +35 -0
  98. package/dist/sync/sync-jobs.js.map +1 -0
  99. package/dist/sync/sync-markets.js +37 -0
  100. package/dist/sync/sync-markets.js.map +1 -0
  101. package/dist/types.js +2 -0
  102. package/dist/types.js.map +1 -0
  103. package/dist/util.js +1 -0
  104. package/dist/util.js.map +1 -0
  105. package/package.json +1 -1
  106. package/src/api/exchange/create-dispute.ts +0 -1
  107. package/src/api/identity/register-new-user.ts +5 -5
  108. package/src/sync/sync-markets.ts +1 -1
@@ -0,0 +1,137 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { RPCEvents, ServiceEvents } from "./constants";
11
+ import opportunityEventEmitter from "./events/OpportunityEventEmitter";
12
+ import { syncWithEthereumNode } from "./events/sync-with-ethereum-node";
13
+ import { ethers } from "ethers";
14
+ import { startEventListeners } from "./events/start-event-listeners";
15
+ import opportunityAPI from './api/index';
16
+ import Web3 from 'web3';
17
+ import OpportunityStorageProvider from "./modules/storage/OpportunityStorageProvider";
18
+ class OpportunityService {
19
+ /**
20
+ * The Singleton's constructor should always be private to prevent direct
21
+ * construction calls with the `new` operator.
22
+ */
23
+ constructor() {
24
+ this.eventEmitter = opportunityEventEmitter;
25
+ this.running = false;
26
+ this.syncing = false;
27
+ this.ethersProvider = ethers.getDefaultProvider('http://localhost:8545');
28
+ this.ethersSigner = null;
29
+ this.opportunityLogger = null;
30
+ this.storageProvider = null;
31
+ this.currentAccount = null;
32
+ this.ethNetwork = 'rinkeby';
33
+ this.storage = null;
34
+ this.api = opportunityAPI;
35
+ this.ethNetwork = 'rinkeby';
36
+ }
37
+ /**
38
+ * The static method that controls the access to the singleton instance.
39
+ *
40
+ * This implementation let you subclass the Singleton class while keeping
41
+ * just one instance of each subclass around.
42
+ */
43
+ static getInstance() {
44
+ if (!OpportunityService.instance) {
45
+ OpportunityService.instance = new OpportunityService();
46
+ }
47
+ return OpportunityService.instance;
48
+ }
49
+ assignDefaultProvider(provider) {
50
+ OpportunityService.defaultProvider = provider;
51
+ }
52
+ assignProvider(provider) {
53
+ this.ethersProvider = provider;
54
+ }
55
+ assignSigner(signer) {
56
+ this.ethersSigner = signer;
57
+ }
58
+ assignCurrentAccount(account) {
59
+ this.currentAccount = account;
60
+ }
61
+ subscribeToEvents(eventDictionary, onComplete) {
62
+ startEventListeners(eventDictionary, onComplete);
63
+ }
64
+ setNetworkParameters(networkId, dbAddress) {
65
+ switch (networkId) {
66
+ case 1:
67
+ this.ethNetwork = 'mainnet';
68
+ break;
69
+ case 4:
70
+ this.ethNetwork = 'rinkeby';
71
+ break;
72
+ default:
73
+ this.ethNetwork = 'rinkeby';
74
+ }
75
+ this.storageProvider = new OpportunityStorageProvider(dbAddress);
76
+ }
77
+ getEthNetwork() {
78
+ return this.ethNetwork;
79
+ }
80
+ getStorageProvider() {
81
+ return this.storageProvider;
82
+ }
83
+ startService() {
84
+ return __awaiter(this, void 0, void 0, function* () {
85
+ if (this.running) {
86
+ return;
87
+ }
88
+ console.log('Starting service...');
89
+ this.sync();
90
+ this.running = true;
91
+ console.log('Finished starting service...');
92
+ });
93
+ }
94
+ shutdownService() {
95
+ if (!this.running) {
96
+ return;
97
+ }
98
+ ;
99
+ this.running = false;
100
+ this.assignDefaultProvider(null);
101
+ this.assignProvider(null);
102
+ this.assignSigner(null);
103
+ this.eventEmitter.emit(ServiceEvents.ServiceStopped);
104
+ }
105
+ sync() {
106
+ //sync node
107
+ this.syncing = true;
108
+ this.eventEmitter.emit(RPCEvents.StartSyncing);
109
+ syncWithEthereumNode()
110
+ .then(() => {
111
+ this.syncing = false;
112
+ this.eventEmitter.emit(RPCEvents.StopSyncing);
113
+ console.log('Finished syncing ethereum node.');
114
+ this.syncing = false;
115
+ })
116
+ .catch(err => {
117
+ console.log('Error while syncing ethereum node: ' + err);
118
+ this.syncing = false;
119
+ });
120
+ }
121
+ isSyncing() {
122
+ return this.syncing;
123
+ }
124
+ getDefaultProviderInterface() {
125
+ return OpportunityService.defaultProvider;
126
+ }
127
+ getProviderInterface() {
128
+ return this.ethersProvider;
129
+ }
130
+ getSignersInterface() {
131
+ return this.ethersSigner;
132
+ }
133
+ }
134
+ OpportunityService.defaultProvider = new Web3('http://localhost:8545');
135
+ const opportunityService = OpportunityService.getInstance();
136
+ export default opportunityService;
137
+ //# sourceMappingURL=OpportunityService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpportunityService.js","sourceRoot":"","sources":["../src/OpportunityService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import * as assert from 'assert';
11
+ import { VotingApi, VochainWaiter } from '@vocdoni/voting';
12
+ export function checkVoteResults(processId, gwPool) {
13
+ return __awaiter(this, void 0, void 0, function* () {
14
+ assert.strictEqual(typeof processId, "string");
15
+ console.log("Waiting a bit for the votes to be received", processId);
16
+ const nextBlock = 2 + (yield VotingApi.getBlockHeight(gwPool));
17
+ yield VochainWaiter.waitUntil(nextBlock, gwPool, { verbose: true });
18
+ console.log("Fetching the number of votes for", processId);
19
+ const envelopeHeight = yield VotingApi.getEnvelopeHeight(processId, gwPool);
20
+ console.log('Votes submitted: ' + envelopeHeight);
21
+ const processState = yield VotingApi.getProcessState(processId, gwPool);
22
+ console.log("Waiting for the process to end", processId);
23
+ yield VochainWaiter.waitUntil(processState.endBlock, gwPool, { verbose: true });
24
+ console.log("Waiting a bit for the results to be ready", processId);
25
+ yield VochainWaiter.wait(2, gwPool, { verbose: true });
26
+ console.log("Fetching the vote results for", processId);
27
+ const rawResults = yield VotingApi.getResults(processId, gwPool);
28
+ const totalVotes = yield VotingApi.getEnvelopeHeight(processId, gwPool);
29
+ console.log('Raw voting results: ' + rawResults);
30
+ console.log('Total votes: ' + totalVotes);
31
+ });
32
+ }
33
+ //# sourceMappingURL=check-vote-results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-vote-results.js","sourceRoot":"","sources":["../../../src/api/dispute/check-vote-results.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG1D,MAAM,UAAgB,gBAAgB,CAAC,SAAiB,EAAE,MAAmB;;QACzE,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,EAAE,QAAQ,CAAC,CAAA;QAE9C,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,SAAS,CAAC,CAAA;QACpE,MAAM,SAAS,GAAG,CAAC,IAAG,MAAM,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA,CAAA;QAC5D,MAAM,aAAa,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAEnE,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,SAAS,CAAC,CAAA;QAC1D,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,cAAc,CAAC,CAAA;QAEjD,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAEvE,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,SAAS,CAAC,CAAA;QACxD,MAAM,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAE/E,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,SAAS,CAAC,CAAA;QACnE,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAEtD,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,SAAS,CAAC,CAAA;QACvD,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAChE,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAEvE,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,UAAU,CAAC,CAAA;QAChD,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,UAAU,CAAC,CAAA;IAC7C,CAAC;CAAA"}
@@ -0,0 +1,39 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { GatewayPool, DVoteGateway } from "@vocdoni/client";
11
+ export function connectGateways(networkId, environment, bootnodeContentUri) {
12
+ return __awaiter(this, void 0, void 0, function* () {
13
+ console.log("Connecting to the gateways");
14
+ const options = {
15
+ networkId: networkId,
16
+ environment: environment,
17
+ bootnodesContentUri: bootnodeContentUri
18
+ };
19
+ const pool = yield GatewayPool.discover(options);
20
+ console.log("Connected to", pool.dvoteUri);
21
+ console.log("Connected to", pool.provider["connection"].url);
22
+ return pool;
23
+ });
24
+ }
25
+ export function getOracleClient() {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ console.log('Creating oracle instance...');
28
+ const oracleClient = new DVoteGateway({
29
+ uri: 'https://signaling-oracle.dev.vocdoni.net/dvote',
30
+ supportedApis: ["oracle"]
31
+ });
32
+ console.log('Initiating oracle...');
33
+ yield oracleClient.init();
34
+ console.log('Oracle status: ' + oracleClient.isReady);
35
+ console.log('Oracle health: ' + oracleClient.health);
36
+ return oracleClient;
37
+ });
38
+ }
39
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/api/dispute/connect.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAA+B,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAIxF,MAAM,UAAgB,eAAe,CAAC,SAAuB,EAAE,WAA+B,EAAE,kBAA0B;;QACtH,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;QAEzC,MAAM,OAAO,GAAiC;YAC1C,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,WAAW;YACxB,mBAAmB,EAAE,kBAAkB;SAC1C,CAAA;QAED,MAAM,IAAI,GAAG,MAAO,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAEjD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAA;QAE5D,OAAO,IAAI,CAAA;IACf,CAAC;CAAA;AAED,MAAM,UAAgB,eAAe;;QACjC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;QAC1C,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;YAClC,GAAG,EAAE,gDAAgD;YACrD,aAAa,EAAE,CAAC,QAAQ,CAAC;SAC5B,CAAC,CAAA;QAEF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;QACnC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAA;QAEzB,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;QACrD,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;QAEpD,OAAO,YAAY,CAAA;IACvB,CAAC;CAAA"}
@@ -0,0 +1,39 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { EntityMetadataTemplate } from '@vocdoni/data-models';
11
+ import { EntityApi } from '@vocdoni/voting';
12
+ import * as assert from 'assert';
13
+ export function ensureEntityMetadata(creatorWallet, gwPool) {
14
+ return __awaiter(this, void 0, void 0, function* () {
15
+ console.log("Making sure metadata doesn't already exist...");
16
+ const meta = yield EntityApi.getMetadata(creatorWallet.address, gwPool).catch(err => console.log(err));
17
+ if (!meta)
18
+ return false;
19
+ console.log("Setting Metadata for entity", creatorWallet.address);
20
+ const metadata = JSON.parse(JSON.stringify(EntityMetadataTemplate));
21
+ metadata.name = { default: "Opportunity" };
22
+ metadata.description = { default: "Opportunity, decentralized job markets" };
23
+ metadata.media = {
24
+ avatar: "https://picsum.photos/200/300",
25
+ header: "Opportunity, decentralized job markets",
26
+ logo: "https://picsum.photos/200/300"
27
+ };
28
+ yield EntityApi.setMetadata(creatorWallet.address, metadata, creatorWallet, gwPool);
29
+ console.log('Entity metadata set');
30
+ // Read back
31
+ const entityMetaPost = yield EntityApi.getMetadata(creatorWallet.address, gwPool);
32
+ if (!entityMetaPost)
33
+ return false;
34
+ assert.strictEqual(entityMetaPost.name.default, metadata.name.default);
35
+ assert.strictEqual(entityMetaPost.description.default, metadata.description.default);
36
+ return true;
37
+ });
38
+ }
39
+ //# sourceMappingURL=ensure-entity-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-entity-metadata.js","sourceRoot":"","sources":["../../../src/api/dispute/ensure-entity-metadata.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAEhC,MAAM,UAAgB,oBAAoB,CAAC,aAAqB,EAAE,MAAmB;;QACjF,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAA;QAC5D,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QACtG,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QAEvB,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAA;QAEnE,QAAQ,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,CAAA;QAC1C,QAAQ,CAAC,WAAW,GAAG,EAAE,OAAO,EAAE,wCAAwC,EAAE,CAAA;QAC5E,QAAQ,CAAC,KAAK,GAAG;YACb,MAAM,EAAE,+BAA+B;YACvC,MAAM,EAAE,wCAAwC;YAChD,IAAI,EAAE,+BAA+B;SACxC,CAAA;QAED,MAAM,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;QACnF,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;QAElC,YAAY;QACZ,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACjF,IAAI,CAAC,cAAc;YAAE,OAAO,KAAK,CAAA;QAEjC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACtE,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAEpF,OAAO,IAAI,CAAA;IACf,CAAC;CAAA"}
@@ -0,0 +1,94 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { CensusErc20Api } from "@vocdoni/census";
11
+ import { VotingApi, VotingOracleApi } from "@vocdoni/voting";
12
+ import { Erc20TokensApi } from "@vocdoni/client";
13
+ import { ProcessMetadataTemplate } from "@vocdoni/data-models";
14
+ import { ProcessMode, ProcessEnvelopeType } from '@vocdoni/contract-wrappers';
15
+ import * as assert from 'assert';
16
+ import { waitUntilPresent } from "./util/wait-until-present";
17
+ export function launchNewVote(creatorWallet, tokenAddress, gwPool, oracleClient, disputeId, employer, worker) {
18
+ var _a;
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ console.log('Launching new vote...');
21
+ if (!(yield Erc20TokensApi.isRegistered(tokenAddress, gwPool))) {
22
+ yield CensusErc20Api.registerTokenAuto(tokenAddress, creatorWallet, gwPool);
23
+ assert(yield Erc20TokensApi.isRegistered(tokenAddress, gwPool));
24
+ }
25
+ const sourceBlockHeight = (yield gwPool.provider.getBlockNumber()) - 1;
26
+ const tokenInfo = yield CensusErc20Api.getTokenInfo(tokenAddress, gwPool);
27
+ const proof = yield CensusErc20Api.generateProof(tokenAddress, creatorWallet.address, tokenInfo.balanceMappingPosition, sourceBlockHeight, gwPool.provider);
28
+ if (!((_a = proof === null || proof === void 0 ? void 0 : proof.storageProof) === null || _a === void 0 ? void 0 : _a.length))
29
+ throw new Error("Invalid storage proof");
30
+ console.log("Preparing the new vote metadata");
31
+ const processMetadataPre = JSON.parse(JSON.stringify(ProcessMetadataTemplate)); // make a copy of the template
32
+ processMetadataPre.title.default = disputeId,
33
+ processMetadataPre.description.default = `Dispute: ${disputeId}`,
34
+ processMetadataPre.questions = [
35
+ {
36
+ title: { default: "Contract Dispute" },
37
+ description: { default: "Please choose one of the two participants" },
38
+ choices: [
39
+ { title: { default: employer }, value: 0 },
40
+ { title: { default: worker }, value: 1 },
41
+ ]
42
+ }
43
+ ];
44
+ processMetadataPre.meta.disputeId = disputeId;
45
+ const maxValue = processMetadataPre.questions.reduce((prev, cur) => {
46
+ const localMax = cur.choices.reduce((prev, cur) => prev > cur.value ? prev : cur.value, 0);
47
+ return localMax > prev ? localMax : prev;
48
+ }, 0);
49
+ console.log("Getting the block height");
50
+ const currentBlock = yield VotingApi.getBlockHeight(gwPool);
51
+ const startBlock = currentBlock + 15; //start after 15 blocks
52
+ const blockCount = 6 * 4; // 4m
53
+ const processParamsPre = {
54
+ mode: ProcessMode.make({ autoStart: true }),
55
+ envelopeType: ProcessEnvelopeType.make({}),
56
+ metadata: processMetadataPre,
57
+ startBlock,
58
+ blockCount,
59
+ maxCount: 1,
60
+ maxValue,
61
+ maxTotalCost: 0,
62
+ costExponent: 10000,
63
+ maxVoteOverwrites: 1,
64
+ sourceBlockHeight,
65
+ tokenAddress,
66
+ paramsSignature: "0x0000000000000000000000000000000000000000000000000000000000000000"
67
+ };
68
+ const tokenDetails = {
69
+ balanceMappingPosition: tokenInfo.balanceMappingPosition,
70
+ storageHash: proof.storageHash,
71
+ storageProof: {
72
+ key: proof.storageProof[0].key,
73
+ value: proof.storageProof[0].value,
74
+ proof: proof.storageProof[0].proof
75
+ }
76
+ };
77
+ console.log("Creating the process");
78
+ const processId = yield VotingOracleApi.newProcessErc20(processParamsPre, tokenDetails, creatorWallet, gwPool, oracleClient);
79
+ assert(processId);
80
+ console.log("Created process with process id: ", processId);
81
+ yield waitUntilPresent(processId, gwPool);
82
+ console.log('Checking process params to ensure process was created...');
83
+ const processParams = yield VotingApi.getProcessState(processId, gwPool);
84
+ assert.strictEqual(processParams === null || processParams === void 0 ? void 0 : processParams.entityAddress.toLowerCase(), creatorWallet.address.toLowerCase());
85
+ assert.strictEqual(processParams === null || processParams === void 0 ? void 0 : processParams.startBlock, processParamsPre === null || processParamsPre === void 0 ? void 0 : processParamsPre.startBlock, "SENT " + JSON.stringify(processParamsPre) + " GOT " + JSON.stringify(processParams));
86
+ assert.strictEqual(processParams === null || processParams === void 0 ? void 0 : processParams.blockCount, processParamsPre === null || processParamsPre === void 0 ? void 0 : processParamsPre.blockCount);
87
+ assert.strictEqual(processParams === null || processParams === void 0 ? void 0 : processParams.censusUri, processParamsPre === null || processParamsPre === void 0 ? void 0 : processParamsPre.censusUri);
88
+ const processMetadata = yield VotingApi.getProcessMetadata(processId, gwPool);
89
+ console.log('Process created with metadata: ');
90
+ console.log(processMetadata);
91
+ return { processId, processParams, processMetadata };
92
+ });
93
+ }
94
+ //# sourceMappingURL=launch-new-vote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch-new-vote.js","sourceRoot":"","sources":["../../../src/api/dispute/launch-new-vote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { CensusErc20Api } from "@vocdoni/census";
11
+ import { VotingApi } from "@vocdoni/voting";
12
+ export function submitVote(processId, processParams, processMetadata, accounts, tokenAddress, voter, voterChoice, gwPool) {
13
+ return __awaiter(this, void 0, void 0, function* () {
14
+ console.log("Launching votes");
15
+ const processKeys = processParams.envelopeType.hasEncryptedVotes ? yield VotingApi.getProcessKeys(processId, gwPool) : null;
16
+ const balanceMappingPosition = (yield CensusErc20Api.getTokenInfo(tokenAddress, gwPool)).balanceMappingPosition;
17
+ const voterAddress = yield voter.getAddress();
18
+ const result = yield CensusErc20Api.generateProof(tokenAddress, voterAddress, balanceMappingPosition, processParams.sourceBlockHeight, gwPool.provider);
19
+ const censusProof = result.storageProof[0];
20
+ console.log('Creating voter envelope');
21
+ const envelope = processParams.envelopeType.encryptedVotes ?
22
+ yield VotingApi.packageSignedEnvelope({ censusOrigin: processParams.censusOrigin, votes: voterChoice, censusProof, processId, walletOrSigner: voter, processKeys }) :
23
+ yield VotingApi.packageSignedEnvelope({ censusOrigin: processParams.censusOrigin, votes: voterChoice, censusProof, processId, walletOrSigner: voter });
24
+ console.log('Attempting to submit voter envelope: ' + voter);
25
+ yield VotingApi.submitEnvelope(envelope, voter, gwPool);
26
+ // wait a bit
27
+ yield new Promise(resolve => setTimeout(resolve, 11000));
28
+ const nullifier = VotingApi.getSignedVoteNullifier(voterAddress, processId);
29
+ const { block, date, registered } = yield VotingApi.getEnvelopeStatus(processId, nullifier, gwPool);
30
+ if (!registered) {
31
+ console.log('Vote not submitted.. voter not registered...');
32
+ return false;
33
+ }
34
+ console.log('Voter envelope successfully submitted');
35
+ console.log('Block: ' + block);
36
+ console.log('Date: ' + date);
37
+ console.log('Registered: ' + registered);
38
+ return true;
39
+ });
40
+ }
41
+ //# sourceMappingURL=submit-vote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-vote.js","sourceRoot":"","sources":["../../../src/api/dispute/submit-vote.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAgB,SAAS,EAAmB,MAAM,iBAAiB,CAAA;AAO1E,MAAM,UAAgB,UAAU,CAC5B,SAAiB,EACjB,aAA2B,EAC3B,eAAgC,EAChC,QAAQ,EACR,YAAoB,EACpB,KAAa,EACb,WAAqB,EACrB,MAAmB;;QACnB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAE9B,MAAM,WAAW,GAAG,aAAa,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC3H,MAAM,sBAAsB,GAAG,CAAC,MAAM,cAAc,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAA;QAC/G,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;QAE7C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,CAC7C,YAAY,EACZ,YAAY,EACZ,sBAAsB,EACtB,aAAa,CAAC,iBAAiB,EAC/B,MAAM,CAAC,QAA2B,CACrC,CAAA;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAE1C,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;QACtC,MAAM,QAAQ,GAAG,aAAa,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;YAC5D,MAAM,SAAS,CAAC,qBAAqB,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YACrK,MAAM,SAAS,CAAC,qBAAqB,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAA;QAEtJ,OAAO,CAAC,GAAG,CAAC,uCAAuC,GAAG,KAAK,CAAC,CAAA;QAC5D,MAAM,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAEvD,aAAa;QACb,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;QAExD,MAAM,SAAS,GAAG,SAAS,CAAC,sBAAsB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;QAC3E,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAEnG,IAAI,CAAC,UAAU,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;YAC3D,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;QACpD,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAA;QAC9B,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAA;QAC5B,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,UAAU,CAAC,CAAA;QACxC,OAAO,IAAI,CAAA;IACf,CAAC;CAAA"}
@@ -0,0 +1,27 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { VotingApi, VochainWaiter } from '@vocdoni/voting';
11
+ export function waitUntilPresent(processId, gwPool) {
12
+ return __awaiter(this, void 0, void 0, function* () {
13
+ let attempts = 10;
14
+ while (attempts >= 0) {
15
+ console.log("Waiting for process", processId, "to be created");
16
+ yield VochainWaiter.wait(1, gwPool);
17
+ const state = yield VotingApi.getProcessState(processId, gwPool).catch(error => console.log(error));
18
+ console.log('Attempted to get process state: ' + state);
19
+ if (state === null || state === void 0 ? void 0 : state.entityId)
20
+ break;
21
+ attempts--;
22
+ }
23
+ if (attempts < 0)
24
+ throw new Error("The process still does not exist on the Vochain after 10 blocks");
25
+ });
26
+ }
27
+ //# sourceMappingURL=wait-until-present.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait-until-present.js","sourceRoot":"","sources":["../../../../src/api/dispute/util/wait-until-present.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAgB,MAAM,iBAAiB,CAAA;AAIxE,MAAM,UAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM;;QACpD,IAAI,QAAQ,GAAG,EAAE,CAAA;QACjB,OAAO,QAAQ,IAAI,CAAC,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,SAAS,EAAE,eAAe,CAAC,CAAA;YAC9D,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;YAEnC,MAAM,KAAK,GAAwB,MAAM,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;YACxH,OAAO,CAAC,GAAG,CAAC,kCAAkC,GAAG,KAAK,CAAC,CAAA;YACvD,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ;gBAAE,MAAK;YAE1B,QAAQ,EAAE,CAAA;SACb;QAED,IAAI,QAAQ,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAA;IACxG,CAAC;CAAA"}
@@ -0,0 +1,23 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { VotingApi, VochainWaiter } from '@vocdoni/voting';
11
+ import * as assert from 'assert';
12
+ import { ProcessStatus } from 'dvote-solidity';
13
+ export function waitUntilStarted(processId, startBlock, gwPool) {
14
+ return __awaiter(this, void 0, void 0, function* () {
15
+ console.log('Waiting until block: ' + startBlock);
16
+ // start block
17
+ yield VochainWaiter.waitUntil(startBlock, gwPool, { verbose: true });
18
+ console.log("Waiting for the process to be ready");
19
+ const state = yield VotingApi.getProcessState(processId, gwPool);
20
+ assert.strictEqual(state.status, ProcessStatus.READY, "Should be ready but is not");
21
+ });
22
+ }
23
+ //# sourceMappingURL=wait-until-started.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait-until-started.js","sourceRoot":"","sources":["../../../../src/api/dispute/util/wait-until-started.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE9C,MAAM,UAAgB,gBAAgB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM;;QAChE,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,UAAU,CAAC,CAAA;QAEjD,cAAc;QACd,MAAM,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAEpE,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;QAClD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAChE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAA;IACvF,CAAC;CAAA"}
@@ -0,0 +1,37 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import opportunityService from "../../OpportunityService";
11
+ export function sendAsync(method, params, from) {
12
+ return __awaiter(this, void 0, void 0, function* () {
13
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
14
+ yield opportunityService.getDefaultProviderInterface().currentProvider.sendAsync({
15
+ id: 1,
16
+ method,
17
+ params,
18
+ from,
19
+ }, function (error, result) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ if (error) {
22
+ console.log(error);
23
+ throw error;
24
+ }
25
+ const realResult = result.result.toString().slice(2);
26
+ const r = '0x' + realResult.slice(0, 64);
27
+ const s = '0x' + realResult.slice(64, 128);
28
+ const v = parseInt(realResult.substring(128, 130), 16);
29
+ resolve({
30
+ v, r, s
31
+ });
32
+ });
33
+ });
34
+ }));
35
+ });
36
+ }
37
+ //# sourceMappingURL=sendAsync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendAsync.js","sourceRoot":"","sources":["../../../src/api/ethereum/sendAsync.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,MAAM,UAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI;;QAChD,OAAO,IAAI,OAAO,CAAC,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7C,MAAM,kBAAkB,CAAC,2BAA2B,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC;gBAC7E,EAAE,EAAE,CAAC;gBACL,MAAM;gBACN,MAAM;gBACN,IAAI;aACL,EAAE,UAAe,KAAK,EAAE,MAAM;;oBAC7B,IAAI,KAAK,EAAE;wBACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;wBAClB,MAAM,KAAK,CAAC;qBACb;oBAEC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;oBACpD,MAAM,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACzC,MAAM,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBAC3C,MAAM,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;oBAEvD,OAAO,CAAC;wBACJ,CAAC,EAAE,CAAC,EAAE,CAAC;qBACV,CAAC,CAAA;gBAEN,CAAC;aAAA,CAAC,CAAC;QACL,CAAC,CAAA,CAAC,CAAA;IACN,CAAC;CAAA"}
@@ -0,0 +1,4 @@
1
+ function completeRelationship(relationshipAddress) {
2
+ }
3
+ export { completeRelationship };
4
+ //# sourceMappingURL=complete-relationship.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete-relationship.js","sourceRoot":"","sources":["../../../src/api/exchange/complete-relationship.ts"],"names":[],"mappings":"AAAA,SAAS,oBAAoB,CAAC,mBAAmB;AAEjD,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,40 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { Contracts } from "../../constants";
11
+ import * as abiMap from '../../blockchain/abi.json';
12
+ import * as bytecodeMap from '../../blockchain/bytecode.json';
13
+ import opportunityService from "../../OpportunityService";
14
+ import { ContractFactory } from 'ethers';
15
+ const Tx = require("ethereumjs-tx").Transaction;
16
+ function createDispute(data) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ //createData(data)
19
+ const parsedData = JSON.parse(data);
20
+ const abi = abiMap[Contracts.DISPUTE];
21
+ const complaintMetadataPointer = parsedData['complaintMetadataPointer'];
22
+ const complaintResponseMetadataPointer = parsedData['complaintResponseMetadataPointer'];
23
+ const relationshipAddress = parsedData['relationshipAddress'];
24
+ console.log(abi);
25
+ console.log(parsedData);
26
+ try {
27
+ // The factory we use for deploying contracts
28
+ const disputeContractfactory = new ContractFactory(abi, bytecodeMap[Contracts.DISPUTE], opportunityService.getSignersInterface());
29
+ // Deploy an instance of the contract
30
+ const disputeContract = yield disputeContractfactory.deploy(relationshipAddress, complaintMetadataPointer, complaintResponseMetadataPointer);
31
+ const txReceipt = yield disputeContract.deployTransaction.wait();
32
+ console.log(txReceipt);
33
+ }
34
+ catch (error) {
35
+ console.log('Service: Caught error creating new job: ' + error);
36
+ }
37
+ });
38
+ }
39
+ export { createDispute };
40
+ //# sourceMappingURL=create-dispute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-dispute.js","sourceRoot":"","sources":["../../../src/api/exchange/create-dispute.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,SAAS,EAAgB,MAAM,iBAAiB,CAAC;AAI1D,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAC;AACpD,OAAO,KAAK,WAAW,MAAM,gCAAgC,CAAC;AAC9D,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAU,eAAe,EAAE,MAAM,QAAQ,CAAC;AAIjD,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC;AAEhD,SAAe,aAAa,CAAC,IAAI;;QAC7B,kBAAkB;QAElB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAErC,MAAM,wBAAwB,GAAG,UAAU,CAAC,0BAA0B,CAAC,CAAA;QACvE,MAAM,gCAAgC,GAAG,UAAU,CAAC,kCAAkC,CAAC,CAAA;QACvF,MAAM,mBAAmB,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAA;QAE7D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAChB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAEvB,IAAI;YACA,6CAA6C;YAC7C,MAAM,sBAAsB,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,mBAAmB,EAAE,CAAC,CAAA;YAEjI,qCAAqC;YACrC,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,gCAAgC,CAAC,CAAC;YAC7I,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAA;YAChE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;SACzB;QAAC,OAAM,KAAK,EAAE;YACX,OAAO,CAAC,GAAG,CAAC,0CAA0C,GAAG,KAAK,CAAC,CAAC;SACnE;IACL,CAAC;CAAA;AAED,OAAO,EAAE,aAAa,EAAE,CAAA"}