@xyo-network/chain-sdk 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index-browser.mjs +2 -133
- package/dist/browser/index-browser.mjs.map +1 -1
- package/dist/neutral/index.mjs +7 -129
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/node/index-node.mjs +7 -133
- package/dist/node/index-node.mjs.map +1 -1
- package/dist/types/index-shared.d.ts +1 -1
- package/dist/types/index-shared.d.ts.map +1 -1
- package/package.json +34 -35
- package/src/index-shared.ts +1 -1
- package/dist/types/orchestration/archivist/index.d.ts +0 -2
- package/dist/types/orchestration/archivist/index.d.ts.map +0 -1
- package/dist/types/orchestration/archivist/initArchivistSync.d.ts +0 -16
- package/dist/types/orchestration/archivist/initArchivistSync.d.ts.map +0 -1
- package/dist/types/orchestration/bridge.d.ts +0 -3
- package/dist/types/orchestration/bridge.d.ts.map +0 -1
- package/dist/types/orchestration/index.d.ts +0 -4
- package/dist/types/orchestration/index.d.ts.map +0 -1
- package/dist/types/orchestration/initBridgedModule.d.ts +0 -13
- package/dist/types/orchestration/initBridgedModule.d.ts.map +0 -1
- package/src/orchestration/archivist/index.ts +0 -1
- package/src/orchestration/archivist/initArchivistSync.ts +0 -61
- package/src/orchestration/bridge.ts +0 -25
- package/src/orchestration/index.ts +0 -3
- package/src/orchestration/initBridgedModule.ts +0 -35
|
@@ -2,11 +2,6 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
5
|
var __copyProps = (to, from, except, desc) => {
|
|
11
6
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
7
|
for (let key of __getOwnPropNames(from))
|
|
@@ -19,134 +14,13 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
|
|
|
19
14
|
|
|
20
15
|
// src/index-browser.ts
|
|
21
16
|
var index_browser_exports = {};
|
|
22
|
-
__export(index_browser_exports, {
|
|
23
|
-
initArchivistSync: () => initArchivistSync,
|
|
24
|
-
initBridge: () => initBridge,
|
|
25
|
-
initBridgedArchivistModule: () => initBridgedArchivistModule,
|
|
26
|
-
initBridgedModule: () => initBridgedModule
|
|
27
|
-
});
|
|
28
17
|
|
|
29
18
|
// src/index-shared.ts
|
|
30
19
|
var index_shared_exports = {};
|
|
31
|
-
__export(index_shared_exports, {
|
|
32
|
-
initArchivistSync: () => initArchivistSync,
|
|
33
|
-
initBridge: () => initBridge,
|
|
34
|
-
initBridgedArchivistModule: () => initBridgedArchivistModule,
|
|
35
|
-
initBridgedModule: () => initBridgedModule
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
// src/orchestration/archivist/initArchivistSync.ts
|
|
39
|
-
import { ArchivistSyncDiviner } from "@xyo-network/chain-modules";
|
|
40
|
-
import { spanAsync } from "@xyo-network/chain-utils";
|
|
41
|
-
import { DivinerConfigSchema } from "@xyo-network/diviner-model";
|
|
42
|
-
import { MemoryNode } from "@xyo-network/node-memory";
|
|
43
|
-
import { MemorySentinel } from "@xyo-network/sentinel-memory";
|
|
44
|
-
import { SentinelConfigSchema } from "@xyo-network/sentinel-model";
|
|
45
|
-
var initArchivistSync = /* @__PURE__ */ __name(async (name, inArchivist, outArchivist, frequency = 1e3, traceProvider) => {
|
|
46
|
-
const tracer = traceProvider?.getTracer(`archivist-sync-diviner [${name}]`);
|
|
47
|
-
return await spanAsync(`initArchivistSync [${name}]`, async () => {
|
|
48
|
-
const node = await MemoryNode.create({
|
|
49
|
-
account: "random"
|
|
50
|
-
});
|
|
51
|
-
const finalizedArchivistSyncDiviner = await ArchivistSyncDiviner.create({
|
|
52
|
-
account: "random",
|
|
53
|
-
inArchivist,
|
|
54
|
-
outArchivist,
|
|
55
|
-
tracer,
|
|
56
|
-
config: {
|
|
57
|
-
schema: DivinerConfigSchema,
|
|
58
|
-
name
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
await node.register(finalizedArchivistSyncDiviner);
|
|
62
|
-
await node.attach(finalizedArchivistSyncDiviner.address);
|
|
63
|
-
const sentinel = await MemorySentinel.create({
|
|
64
|
-
account: "random",
|
|
65
|
-
config: {
|
|
66
|
-
name,
|
|
67
|
-
schema: SentinelConfigSchema,
|
|
68
|
-
tasks: [
|
|
69
|
-
{
|
|
70
|
-
required: true,
|
|
71
|
-
mod: finalizedArchivistSyncDiviner.address,
|
|
72
|
-
endPoint: "divine"
|
|
73
|
-
}
|
|
74
|
-
],
|
|
75
|
-
automations: [
|
|
76
|
-
{
|
|
77
|
-
frequency,
|
|
78
|
-
frequencyUnits: "millis",
|
|
79
|
-
schema: "network.xyo.automation.interval",
|
|
80
|
-
start: Date.now(),
|
|
81
|
-
type: "interval"
|
|
82
|
-
}
|
|
83
|
-
]
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
await node.register(sentinel);
|
|
87
|
-
await node.attach(sentinel.address);
|
|
88
|
-
return node;
|
|
89
|
-
}, tracer);
|
|
90
|
-
}, "initArchivistSync");
|
|
91
|
-
|
|
92
|
-
// src/orchestration/bridge.ts
|
|
93
|
-
import { HttpBridge, HttpBridgeConfigSchema } from "@xyo-network/bridge-http";
|
|
94
|
-
import { Mutex } from "async-mutex";
|
|
95
|
-
var initMutex = new Mutex();
|
|
96
|
-
var bridgeSingletonMap = /* @__PURE__ */ new Map();
|
|
97
|
-
var initBridge = /* @__PURE__ */ __name(async (nodeUrl) => {
|
|
98
|
-
return await initMutex.runExclusive(async () => {
|
|
99
|
-
const existing = bridgeSingletonMap.get(nodeUrl);
|
|
100
|
-
if (existing) return existing;
|
|
101
|
-
const bridge = await HttpBridge.create({
|
|
102
|
-
account: "random",
|
|
103
|
-
config: {
|
|
104
|
-
name: "HttpBridge",
|
|
105
|
-
client: {
|
|
106
|
-
url: nodeUrl,
|
|
107
|
-
discoverRoots: "start"
|
|
108
|
-
},
|
|
109
|
-
schema: HttpBridgeConfigSchema,
|
|
110
|
-
security: {
|
|
111
|
-
allowAnonymous: true
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
await bridge.start();
|
|
116
|
-
bridgeSingletonMap.set(nodeUrl, bridge);
|
|
117
|
-
return bridge;
|
|
118
|
-
});
|
|
119
|
-
}, "initBridge");
|
|
120
|
-
|
|
121
|
-
// src/orchestration/initBridgedModule.ts
|
|
122
|
-
import { assertEx } from "@xylabs/assert";
|
|
123
|
-
import { asAttachableArchivistInstance } from "@xyo-network/archivist-model";
|
|
124
|
-
import { asAttachableModuleInstance } from "@xyo-network/module-model";
|
|
125
|
-
import { Mutex as Mutex2 } from "async-mutex";
|
|
126
|
-
var initMutex2 = new Mutex2();
|
|
127
|
-
var bridgedModuleDictionary = {};
|
|
128
|
-
var initBridgedModule = /* @__PURE__ */ __name(async ({ bridge, moduleName }) => {
|
|
129
|
-
return await initMutex2.runExclusive(async () => {
|
|
130
|
-
const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName];
|
|
131
|
-
if (existing) return existing;
|
|
132
|
-
const mod = assertEx(await bridge.resolve(moduleName), () => `Error: Could not resolve ${moduleName}`);
|
|
133
|
-
const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Error: Could not convert ${moduleName} to attachable module instance`);
|
|
134
|
-
bridgedModuleDictionary[bridge.address] = bridgedModuleDictionary[bridge.address] || {};
|
|
135
|
-
bridgedModuleDictionary[bridge.address][moduleName] = moduleInstance;
|
|
136
|
-
return moduleInstance;
|
|
137
|
-
});
|
|
138
|
-
}, "initBridgedModule");
|
|
139
|
-
var initBridgedArchivistModule = /* @__PURE__ */ __name(async ({ bridge, moduleName }) => {
|
|
140
|
-
return assertEx(asAttachableArchivistInstance(await initBridgedModule({
|
|
141
|
-
bridge,
|
|
142
|
-
moduleName
|
|
143
|
-
})), () => `Error: Could not convert ${moduleName} to attachable archivist instance`);
|
|
144
|
-
}, "initBridgedArchivistModule");
|
|
145
|
-
|
|
146
|
-
// src/index-shared.ts
|
|
147
20
|
__reExport(index_shared_exports, chain_ethereum_star);
|
|
148
21
|
__reExport(index_shared_exports, chain_model_star);
|
|
149
22
|
__reExport(index_shared_exports, chain_modules_star);
|
|
23
|
+
__reExport(index_shared_exports, chain_orchestration_star);
|
|
150
24
|
__reExport(index_shared_exports, chain_protocol_star);
|
|
151
25
|
__reExport(index_shared_exports, chain_services_star);
|
|
152
26
|
__reExport(index_shared_exports, chain_utils_star);
|
|
@@ -154,6 +28,7 @@ __reExport(index_shared_exports, chain_validation_star);
|
|
|
154
28
|
import * as chain_ethereum_star from "@xyo-network/chain-ethereum";
|
|
155
29
|
import * as chain_model_star from "@xyo-network/chain-model";
|
|
156
30
|
import * as chain_modules_star from "@xyo-network/chain-modules";
|
|
31
|
+
import * as chain_orchestration_star from "@xyo-network/chain-orchestration";
|
|
157
32
|
import * as chain_protocol_star from "@xyo-network/chain-protocol";
|
|
158
33
|
import * as chain_services_star from "@xyo-network/chain-services";
|
|
159
34
|
import * as chain_utils_star from "@xyo-network/chain-utils";
|
|
@@ -161,10 +36,4 @@ import * as chain_validation_star from "@xyo-network/chain-validation";
|
|
|
161
36
|
|
|
162
37
|
// src/index-browser.ts
|
|
163
38
|
__reExport(index_browser_exports, index_shared_exports);
|
|
164
|
-
export {
|
|
165
|
-
initArchivistSync,
|
|
166
|
-
initBridge,
|
|
167
|
-
initBridgedArchivistModule,
|
|
168
|
-
initBridgedModule
|
|
169
|
-
};
|
|
170
39
|
//# sourceMappingURL=index-browser.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index-browser.ts","../../src/index-shared.ts"
|
|
1
|
+
{"version":3,"sources":["../../src/index-browser.ts","../../src/index-shared.ts"],"sourcesContent":["export * from './index-shared.ts'\n","export * from '@xyo-network/chain-ethereum'\nexport * from '@xyo-network/chain-model'\nexport * from '@xyo-network/chain-modules'\nexport * from '@xyo-network/chain-orchestration'\nexport * from '@xyo-network/chain-protocol'\nexport * from '@xyo-network/chain-services'\nexport * from '@xyo-network/chain-utils'\nexport * from '@xyo-network/chain-validation'\n"],"mappings":";;;;;;;;;;;;;;;AAAA;;;ACAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA,qCAAc;AACd,kCAAc;AACd,oCAAc;AACd,0CAAc;AACd,qCAAc;AACd,qCAAc;AACd,kCAAc;AACd,uCAAc;;;ADPd,kCAAc;","names":[]}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -24,10 +24,6 @@ __export(index_exports, {
|
|
|
24
24
|
createTestChainContract: () => createTestChainContract,
|
|
25
25
|
createTestErc20: () => createTestErc20,
|
|
26
26
|
createTestGenesisBlock: () => createTestGenesisBlock,
|
|
27
|
-
initArchivistSync: () => initArchivistSync,
|
|
28
|
-
initBridge: () => initBridge,
|
|
29
|
-
initBridgedArchivistModule: () => initBridgedArchivistModule,
|
|
30
|
-
initBridgedModule: () => initBridgedModule,
|
|
31
27
|
startGanache: () => startGanache,
|
|
32
28
|
stopGanache: () => stopGanache,
|
|
33
29
|
transferTestTokens: () => transferTestTokens
|
|
@@ -35,125 +31,10 @@ __export(index_exports, {
|
|
|
35
31
|
|
|
36
32
|
// src/index-shared.ts
|
|
37
33
|
var index_shared_exports = {};
|
|
38
|
-
__export(index_shared_exports, {
|
|
39
|
-
initArchivistSync: () => initArchivistSync,
|
|
40
|
-
initBridge: () => initBridge,
|
|
41
|
-
initBridgedArchivistModule: () => initBridgedArchivistModule,
|
|
42
|
-
initBridgedModule: () => initBridgedModule
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
// src/orchestration/archivist/initArchivistSync.ts
|
|
46
|
-
import { ArchivistSyncDiviner } from "@xyo-network/chain-modules";
|
|
47
|
-
import { spanAsync } from "@xyo-network/chain-utils";
|
|
48
|
-
import { DivinerConfigSchema } from "@xyo-network/diviner-model";
|
|
49
|
-
import { MemoryNode } from "@xyo-network/node-memory";
|
|
50
|
-
import { MemorySentinel } from "@xyo-network/sentinel-memory";
|
|
51
|
-
import { SentinelConfigSchema } from "@xyo-network/sentinel-model";
|
|
52
|
-
var initArchivistSync = /* @__PURE__ */ __name(async (name, inArchivist, outArchivist, frequency = 1e3, traceProvider) => {
|
|
53
|
-
const tracer = traceProvider?.getTracer(`archivist-sync-diviner [${name}]`);
|
|
54
|
-
return await spanAsync(`initArchivistSync [${name}]`, async () => {
|
|
55
|
-
const node = await MemoryNode.create({
|
|
56
|
-
account: "random"
|
|
57
|
-
});
|
|
58
|
-
const finalizedArchivistSyncDiviner = await ArchivistSyncDiviner.create({
|
|
59
|
-
account: "random",
|
|
60
|
-
inArchivist,
|
|
61
|
-
outArchivist,
|
|
62
|
-
tracer,
|
|
63
|
-
config: {
|
|
64
|
-
schema: DivinerConfigSchema,
|
|
65
|
-
name
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
await node.register(finalizedArchivistSyncDiviner);
|
|
69
|
-
await node.attach(finalizedArchivistSyncDiviner.address);
|
|
70
|
-
const sentinel = await MemorySentinel.create({
|
|
71
|
-
account: "random",
|
|
72
|
-
config: {
|
|
73
|
-
name,
|
|
74
|
-
schema: SentinelConfigSchema,
|
|
75
|
-
tasks: [
|
|
76
|
-
{
|
|
77
|
-
required: true,
|
|
78
|
-
mod: finalizedArchivistSyncDiviner.address,
|
|
79
|
-
endPoint: "divine"
|
|
80
|
-
}
|
|
81
|
-
],
|
|
82
|
-
automations: [
|
|
83
|
-
{
|
|
84
|
-
frequency,
|
|
85
|
-
frequencyUnits: "millis",
|
|
86
|
-
schema: "network.xyo.automation.interval",
|
|
87
|
-
start: Date.now(),
|
|
88
|
-
type: "interval"
|
|
89
|
-
}
|
|
90
|
-
]
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
await node.register(sentinel);
|
|
94
|
-
await node.attach(sentinel.address);
|
|
95
|
-
return node;
|
|
96
|
-
}, tracer);
|
|
97
|
-
}, "initArchivistSync");
|
|
98
|
-
|
|
99
|
-
// src/orchestration/bridge.ts
|
|
100
|
-
import { HttpBridge, HttpBridgeConfigSchema } from "@xyo-network/bridge-http";
|
|
101
|
-
import { Mutex } from "async-mutex";
|
|
102
|
-
var initMutex = new Mutex();
|
|
103
|
-
var bridgeSingletonMap = /* @__PURE__ */ new Map();
|
|
104
|
-
var initBridge = /* @__PURE__ */ __name(async (nodeUrl) => {
|
|
105
|
-
return await initMutex.runExclusive(async () => {
|
|
106
|
-
const existing = bridgeSingletonMap.get(nodeUrl);
|
|
107
|
-
if (existing) return existing;
|
|
108
|
-
const bridge = await HttpBridge.create({
|
|
109
|
-
account: "random",
|
|
110
|
-
config: {
|
|
111
|
-
name: "HttpBridge",
|
|
112
|
-
client: {
|
|
113
|
-
url: nodeUrl,
|
|
114
|
-
discoverRoots: "start"
|
|
115
|
-
},
|
|
116
|
-
schema: HttpBridgeConfigSchema,
|
|
117
|
-
security: {
|
|
118
|
-
allowAnonymous: true
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
await bridge.start();
|
|
123
|
-
bridgeSingletonMap.set(nodeUrl, bridge);
|
|
124
|
-
return bridge;
|
|
125
|
-
});
|
|
126
|
-
}, "initBridge");
|
|
127
|
-
|
|
128
|
-
// src/orchestration/initBridgedModule.ts
|
|
129
|
-
import { assertEx } from "@xylabs/assert";
|
|
130
|
-
import { asAttachableArchivistInstance } from "@xyo-network/archivist-model";
|
|
131
|
-
import { asAttachableModuleInstance } from "@xyo-network/module-model";
|
|
132
|
-
import { Mutex as Mutex2 } from "async-mutex";
|
|
133
|
-
var initMutex2 = new Mutex2();
|
|
134
|
-
var bridgedModuleDictionary = {};
|
|
135
|
-
var initBridgedModule = /* @__PURE__ */ __name(async ({ bridge, moduleName }) => {
|
|
136
|
-
return await initMutex2.runExclusive(async () => {
|
|
137
|
-
const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName];
|
|
138
|
-
if (existing) return existing;
|
|
139
|
-
const mod = assertEx(await bridge.resolve(moduleName), () => `Error: Could not resolve ${moduleName}`);
|
|
140
|
-
const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Error: Could not convert ${moduleName} to attachable module instance`);
|
|
141
|
-
bridgedModuleDictionary[bridge.address] = bridgedModuleDictionary[bridge.address] || {};
|
|
142
|
-
bridgedModuleDictionary[bridge.address][moduleName] = moduleInstance;
|
|
143
|
-
return moduleInstance;
|
|
144
|
-
});
|
|
145
|
-
}, "initBridgedModule");
|
|
146
|
-
var initBridgedArchivistModule = /* @__PURE__ */ __name(async ({ bridge, moduleName }) => {
|
|
147
|
-
return assertEx(asAttachableArchivistInstance(await initBridgedModule({
|
|
148
|
-
bridge,
|
|
149
|
-
moduleName
|
|
150
|
-
})), () => `Error: Could not convert ${moduleName} to attachable archivist instance`);
|
|
151
|
-
}, "initBridgedArchivistModule");
|
|
152
|
-
|
|
153
|
-
// src/index-shared.ts
|
|
154
34
|
__reExport(index_shared_exports, chain_ethereum_star);
|
|
155
35
|
__reExport(index_shared_exports, chain_model_star);
|
|
156
36
|
__reExport(index_shared_exports, chain_modules_star);
|
|
37
|
+
__reExport(index_shared_exports, chain_orchestration_star);
|
|
157
38
|
__reExport(index_shared_exports, chain_protocol_star);
|
|
158
39
|
__reExport(index_shared_exports, chain_services_star);
|
|
159
40
|
__reExport(index_shared_exports, chain_utils_star);
|
|
@@ -161,6 +42,7 @@ __reExport(index_shared_exports, chain_validation_star);
|
|
|
161
42
|
import * as chain_ethereum_star from "@xyo-network/chain-ethereum";
|
|
162
43
|
import * as chain_model_star from "@xyo-network/chain-model";
|
|
163
44
|
import * as chain_modules_star from "@xyo-network/chain-modules";
|
|
45
|
+
import * as chain_orchestration_star from "@xyo-network/chain-orchestration";
|
|
164
46
|
import * as chain_protocol_star from "@xyo-network/chain-protocol";
|
|
165
47
|
import * as chain_services_star from "@xyo-network/chain-services";
|
|
166
48
|
import * as chain_utils_star from "@xyo-network/chain-utils";
|
|
@@ -212,7 +94,7 @@ function stopGanache(process) {
|
|
|
212
94
|
__name(stopGanache, "stopGanache");
|
|
213
95
|
|
|
214
96
|
// src/test/evm/stakingContractUtils.ts
|
|
215
|
-
import { assertEx
|
|
97
|
+
import { assertEx } from "@xylabs/assert";
|
|
216
98
|
import { asAddress } from "@xylabs/hex";
|
|
217
99
|
import { Account } from "@xyo-network/account";
|
|
218
100
|
import { createChain } from "@xyo-network/chain-ethereum";
|
|
@@ -240,8 +122,8 @@ var createTestErc20 = /* @__PURE__ */ __name(async (ganachePort, testPhrase, con
|
|
|
240
122
|
const erc20Address = await erc20Contract.getAddress();
|
|
241
123
|
const erc20ContractPerson0 = Erc20Factory.connect(erc20Address, ethWallet);
|
|
242
124
|
const balance = await erc20ContractPerson0.balanceOf(ethWallet.address);
|
|
243
|
-
|
|
244
|
-
return
|
|
125
|
+
assertEx(balance === totalSupply, () => "Balance does not match total supply");
|
|
126
|
+
return assertEx(asAddress(erc20Address), () => "Invalid ERC20 contract address");
|
|
245
127
|
}, "createTestErc20");
|
|
246
128
|
var transferTestTokens = /* @__PURE__ */ __name(async (ganachePort, erc20Address, account0, account1) => {
|
|
247
129
|
const provider0 = new JsonRpcProvider2(`http://127.0.0.1:${ganachePort}`, 1337);
|
|
@@ -253,13 +135,13 @@ var transferTestTokens = /* @__PURE__ */ __name(async (ganachePort, erc20Address
|
|
|
253
135
|
await (await erc20ContractPerson0.transfer(ethWalletPerson1.address, transferAmount, gasConfig())).wait();
|
|
254
136
|
const erc20ContractPerson1 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson1);
|
|
255
137
|
const balance = await erc20ContractPerson1.balanceOf(ethWalletPerson1.address);
|
|
256
|
-
|
|
138
|
+
assertEx(balance === transferAmount, () => "Balance does not match transfer amount");
|
|
257
139
|
}, "transferTestTokens");
|
|
258
140
|
var createTestChainContract = /* @__PURE__ */ __name(async (ganachePort, erc20Address, account0, initialProducer) => {
|
|
259
141
|
const provider0 = new JsonRpcProvider2(`http://127.0.0.1:${ganachePort}`, 1337);
|
|
260
142
|
const ethWalletPerson0 = new Wallet(account0.privateKey, provider0);
|
|
261
143
|
const [xyoChainContractAddress] = await createChain(ethWalletPerson0, erc20Address, initialProducer, XYO_ZERO_ADDRESS, 0n, XYO_ZERO_ADDRESS, 50000n, gasConfig());
|
|
262
|
-
return
|
|
144
|
+
return assertEx(asAddress(xyoChainContractAddress), () => "Invalid staking contract address");
|
|
263
145
|
}, "createTestChainContract");
|
|
264
146
|
var approveTestStakeChainAddress = /* @__PURE__ */ __name(async (ganachePort, erc20Address, xyoChainContractAddress, account1) => {
|
|
265
147
|
const provider1 = new JsonRpcProvider2(`http://127.0.0.1:${ganachePort}`, 1337);
|
|
@@ -298,10 +180,6 @@ export {
|
|
|
298
180
|
createTestChainContract,
|
|
299
181
|
createTestErc20,
|
|
300
182
|
createTestGenesisBlock,
|
|
301
|
-
initArchivistSync,
|
|
302
|
-
initBridge,
|
|
303
|
-
initBridgedArchivistModule,
|
|
304
|
-
initBridgedModule,
|
|
305
183
|
startGanache,
|
|
306
184
|
stopGanache,
|
|
307
185
|
transferTestTokens
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/index-shared.ts","../../src/orchestration/archivist/initArchivistSync.ts","../../src/orchestration/bridge.ts","../../src/orchestration/initBridgedModule.ts","../../src/test/evm/runGanache.ts","../../src/test/evm/stakingContractUtils.ts"],"sourcesContent":["export * from './index-shared.ts'\nexport * from './test/index.ts'\n","export * from './orchestration/index.ts'\nexport * from '@xyo-network/chain-ethereum'\nexport * from '@xyo-network/chain-model'\nexport * from '@xyo-network/chain-modules'\nexport * from '@xyo-network/chain-protocol'\nexport * from '@xyo-network/chain-services'\nexport * from '@xyo-network/chain-utils'\nexport * from '@xyo-network/chain-validation'\n","import type { TracerProvider } from '@opentelemetry/api'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistSyncDiviner } from '@xyo-network/chain-modules'\nimport { spanAsync } from '@xyo-network/chain-utils'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { SentinelConfigSchema } from '@xyo-network/sentinel-model'\n\nexport const initArchivistSync = async (\n name: ModuleIdentifier,\n inArchivist: ArchivistInstance,\n outArchivist: ArchivistInstance,\n frequency = 1000,\n traceProvider?: TracerProvider,\n) => {\n const tracer = traceProvider?.getTracer(`archivist-sync-diviner [${name}]`)\n return await spanAsync(`initArchivistSync [${name}]`, async () => {\n const node = await MemoryNode.create({ account: 'random' })\n const finalizedArchivistSyncDiviner = await ArchivistSyncDiviner.create({\n account: 'random',\n inArchivist,\n outArchivist,\n tracer,\n config: { schema: DivinerConfigSchema, name },\n })\n\n await node.register(finalizedArchivistSyncDiviner)\n await node.attach(finalizedArchivistSyncDiviner.address)\n\n const sentinel = await MemorySentinel.create({\n account: 'random',\n config: {\n name,\n schema: SentinelConfigSchema,\n tasks: [\n {\n required: true,\n mod: finalizedArchivistSyncDiviner.address,\n endPoint: 'divine',\n },\n ],\n automations: [\n {\n frequency,\n frequencyUnits: 'millis',\n schema: 'network.xyo.automation.interval',\n start: Date.now(),\n type: 'interval',\n },\n ],\n },\n })\n\n await node.register(sentinel)\n await node.attach(sentinel.address)\n\n return node\n }, tracer)\n}\n","import { HttpBridge, HttpBridgeConfigSchema } from '@xyo-network/bridge-http'\nimport type { AttachableBridgeInstance } from '@xyo-network/bridge-model'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\nconst bridgeSingletonMap = new Map<string, AttachableBridgeInstance>()\n\nexport const initBridge = async (nodeUrl: string): Promise<AttachableBridgeInstance> => {\n return await initMutex.runExclusive(async () => {\n const existing = bridgeSingletonMap.get(nodeUrl)\n if (existing) return existing\n const bridge = await HttpBridge.create({\n account: 'random',\n config: {\n name: 'HttpBridge',\n client: { url: nodeUrl, discoverRoots: 'start' },\n schema: HttpBridgeConfigSchema,\n security: { allowAnonymous: true },\n },\n })\n await bridge.start()\n bridgeSingletonMap.set(nodeUrl, bridge)\n return bridge\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport type { AttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport { asAttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport type { BridgeInstance } from '@xyo-network/bridge-model'\nimport type { Initializable } from '@xyo-network/chain-model'\nimport type { AttachableModuleInstance, ModuleIdentifier } from '@xyo-network/module-model'\nimport { asAttachableModuleInstance } from '@xyo-network/module-model'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\nconst bridgedModuleDictionary: Record<Address, Record<ModuleIdentifier, AttachableModuleInstance>> = {}\n\nexport const initBridgedModule: Initializable<\n { bridge: BridgeInstance; moduleName: ModuleIdentifier }, AttachableModuleInstance\n> = async ({ bridge, moduleName }): Promise<AttachableModuleInstance> => {\n return await initMutex.runExclusive(async () => {\n const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName]\n if (existing) return existing\n const mod = assertEx(await bridge.resolve(moduleName), () => `Error: Could not resolve ${moduleName}`)\n const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Error: Could not convert ${moduleName} to attachable module instance`)\n bridgedModuleDictionary[bridge.address] = bridgedModuleDictionary[bridge.address] || {}\n bridgedModuleDictionary[bridge.address][moduleName] = moduleInstance\n return moduleInstance\n })\n}\n\nexport const initBridgedArchivistModule: Initializable<\n { bridge: BridgeInstance; moduleName: ModuleIdentifier }, AttachableArchivistInstance\n> = async ({ bridge, moduleName }): Promise<AttachableArchivistInstance> => {\n return assertEx(\n asAttachableArchivistInstance(await initBridgedModule({ bridge, moduleName })),\n () => `Error: Could not convert ${moduleName} to attachable archivist instance`,\n )\n}\n","import type { ChildProcess } from 'node:child_process'\nimport { spawn } from 'node:child_process'\n\nimport { delay } from '@xylabs/delay'\nimport { JsonRpcProvider } from 'ethers/providers'\n\nasync function isGanacheRunning(url: string) {\n try {\n const provider = new JsonRpcProvider(url)\n await provider.getBlockNumber() // Try to fetch the latest block number\n return true // If this succeeds, the server is running\n } catch {\n return false // If this fails, the server is not running\n }\n}\n\nexport async function startGanache(port: number, mnemonic: string) {\n console.log('Starting Ganache CLI...')\n\n // Start Ganache CLI\n const ganacheProcess = spawn(\n 'yarn',\n ['ganache', '--port', `${port}`, '--chain.chainId', '1337', '--mnemonic', mnemonic],\n { stdio: 'inherit' },\n )\n\n // Wait for Ganache to be ready\n while (!await isGanacheRunning(`http://127.0.0.1:${port}`)) {\n await delay(500)\n }\n\n return ganacheProcess\n}\n\nexport function stopGanache(process: ChildProcess) {\n console.log('Stopping Ganache CLI...')\n\n if (process) {\n process.kill('SIGTERM')\n console.log('Ganache CLI stopped.')\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport { asAddress } from '@xylabs/hex'\nimport type { AccountInstance, WalletInstance } from '@xyo-network/account'\nimport { Account } from '@xyo-network/account'\nimport { createChain } from '@xyo-network/chain-ethereum'\nimport type {\n ChainStakeIntent, Elevated, HydratedBlock,\n} from '@xyo-network/chain-model'\nimport { ChainStakeIntentSchema } from '@xyo-network/chain-model'\nimport { buildBlock, buildTransaction } from '@xyo-network/chain-protocol'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { BurnableErc20__factory as Erc20Factory } from '@xyo-network/typechain'\nimport { getAddress } from 'ethers/address'\nimport { JsonRpcProvider } from 'ethers/providers'\nimport { parseUnits } from 'ethers/utils'\nimport { Wallet } from 'ethers/wallet'\n\nconst gasConfig = () => {\n return {\n gasLimit: 2_000_000, // Set the gas limit\n gasPrice: parseUnits('100', 'gwei'),\n }\n}\n\nexport const createTestErc20 = async (ganachePort: number, testPhrase: string, contractCreator: WalletInstance): Promise<Address> => {\n const provider = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWallet = new Wallet(contractCreator.privateKey, provider)\n const erc20 = new Erc20Factory(ethWallet)\n const totalSupply = parseUnits('1000000', 18)\n const erc20Contract = await (await erc20.deploy('Test Token', 'TST', totalSupply, gasConfig())).waitForDeployment()\n const erc20Address = await erc20Contract.getAddress()\n const erc20ContractPerson0 = Erc20Factory.connect(erc20Address, ethWallet)\n const balance = await erc20ContractPerson0.balanceOf(ethWallet.address)\n assertEx(balance === totalSupply, () => 'Balance does not match total supply')\n return assertEx(asAddress(erc20Address), () => 'Invalid ERC20 contract address')\n}\n\nexport const transferTestTokens = async (ganachePort: number, erc20Address: Address, account0: WalletInstance, account1: WalletInstance) => {\n const provider0 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson0 = new Wallet(account0.privateKey, provider0)\n const provider1 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson1 = new Wallet(account1.privateKey, provider1)\n const erc20ContractPerson0 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson0)\n const transferAmount = parseUnits('1000', 18)\n await (await erc20ContractPerson0.transfer(ethWalletPerson1.address, transferAmount, gasConfig())).wait()\n const erc20ContractPerson1 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson1)\n const balance = await erc20ContractPerson1.balanceOf(ethWalletPerson1.address)\n assertEx(balance === transferAmount, () => 'Balance does not match transfer amount')\n}\n\nexport const createTestChainContract = async (\n ganachePort: number,\n erc20Address: Address,\n account0: WalletInstance,\n initialProducer: AccountInstance,\n): Promise<Address> => {\n const provider0 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson0 = new Wallet(account0.privateKey, provider0)\n const [xyoChainContractAddress] = await createChain(\n ethWalletPerson0,\n erc20Address,\n initialProducer,\n XYO_ZERO_ADDRESS,\n 0n,\n XYO_ZERO_ADDRESS,\n 50_000n,\n gasConfig(),\n )\n return assertEx(asAddress(xyoChainContractAddress), () => 'Invalid staking contract address')\n}\n\nexport const approveTestStakeChainAddress = async (ganachePort: number, erc20Address: Address, xyoChainContractAddress: Address, account1: WalletInstance) => {\n const provider1 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson1 = new Wallet(account1.privateKey, provider1)\n const erc20ContractPerson1 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson1)\n\n const _approveResultTx = await (await erc20ContractPerson1.approve(getAddress(xyoChainContractAddress), parseUnits('100', 18), gasConfig())).wait()\n}\n\nexport const createTestGenesisBlock = async (\n blockProducerAccounts: WalletInstance[],\n): Promise<HydratedBlock> => {\n const randomChainId = (await Account.random()).address\n // Create staked intents for all the block producers declaring their intent to produce blocks\n const signedStakedBlockProducerIntents = await Promise.all(blockProducerAccounts.map(async (blockProducerAccount) => {\n const stakeIntent = new PayloadBuilder<Elevated<ChainStakeIntent>>({ schema: ChainStakeIntentSchema }).fields({\n $opCodes: ['elevate'],\n from: blockProducerAccount.address,\n exp: Number.MAX_SAFE_INTEGER,\n nbf: 0,\n intent: 'producer',\n }).build()\n\n const signedStakedBlockProducerIntent = await buildTransaction(\n randomChainId,\n [stakeIntent],\n blockProducerAccount,\n 0,\n 1000,\n [],\n )\n return signedStakedBlockProducerIntent\n }))\n const intents = signedStakedBlockProducerIntents.map(intent => intent[0])\n const payloads = signedStakedBlockProducerIntents.flatMap(intent => intent[1]) as Elevated<WithStorageMeta<ChainStakeIntent>>[]\n return await buildBlock(randomChainId, signedStakedBlockProducerIntents, [...intents, ...payloads], blockProducerAccounts)\n}\n"],"mappings":"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","names":["ArchivistSyncDiviner","spanAsync","DivinerConfigSchema","MemoryNode","MemorySentinel","SentinelConfigSchema","initArchivistSync","name","inArchivist","outArchivist","frequency","traceProvider","tracer","getTracer","spanAsync","node","MemoryNode","create","account","finalizedArchivistSyncDiviner","ArchivistSyncDiviner","config","schema","DivinerConfigSchema","register","attach","address","sentinel","MemorySentinel","SentinelConfigSchema","tasks","required","mod","endPoint","automations","frequencyUnits","start","Date","now","type","HttpBridge","HttpBridgeConfigSchema","Mutex","initMutex","Mutex","bridgeSingletonMap","Map","initBridge","nodeUrl","runExclusive","existing","get","bridge","HttpBridge","create","account","config","name","client","url","discoverRoots","schema","HttpBridgeConfigSchema","security","allowAnonymous","start","set","assertEx","asAttachableArchivistInstance","asAttachableModuleInstance","Mutex","initMutex","Mutex","bridgedModuleDictionary","initBridgedModule","bridge","moduleName","runExclusive","existing","address","mod","assertEx","resolve","moduleInstance","asAttachableModuleInstance","initBridgedArchivistModule","asAttachableArchivistInstance","spawn","delay","JsonRpcProvider","isGanacheRunning","url","provider","JsonRpcProvider","getBlockNumber","startGanache","port","mnemonic","console","log","ganacheProcess","spawn","stdio","delay","stopGanache","process","kill","assertEx","asAddress","Account","createChain","ChainStakeIntentSchema","buildBlock","buildTransaction","XYO_ZERO_ADDRESS","PayloadBuilder","BurnableErc20__factory","Erc20Factory","getAddress","JsonRpcProvider","parseUnits","Wallet","gasConfig","gasLimit","gasPrice","parseUnits","createTestErc20","ganachePort","testPhrase","contractCreator","provider","JsonRpcProvider","ethWallet","Wallet","privateKey","erc20","Erc20Factory","totalSupply","erc20Contract","deploy","waitForDeployment","erc20Address","getAddress","erc20ContractPerson0","connect","balance","balanceOf","address","assertEx","asAddress","transferTestTokens","account0","account1","provider0","ethWalletPerson0","provider1","ethWalletPerson1","transferAmount","transfer","wait","erc20ContractPerson1","createTestChainContract","initialProducer","xyoChainContractAddress","createChain","XYO_ZERO_ADDRESS","approveTestStakeChainAddress","_approveResultTx","approve","createTestGenesisBlock","blockProducerAccounts","randomChainId","Account","random","signedStakedBlockProducerIntents","Promise","all","map","blockProducerAccount","stakeIntent","PayloadBuilder","schema","ChainStakeIntentSchema","fields","$opCodes","from","exp","Number","MAX_SAFE_INTEGER","nbf","intent","build","signedStakedBlockProducerIntent","buildTransaction","intents","payloads","flatMap","buildBlock"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/index-shared.ts","../../src/test/evm/runGanache.ts","../../src/test/evm/stakingContractUtils.ts"],"sourcesContent":["export * from './index-shared.ts'\nexport * from './test/index.ts'\n","export * from '@xyo-network/chain-ethereum'\nexport * from '@xyo-network/chain-model'\nexport * from '@xyo-network/chain-modules'\nexport * from '@xyo-network/chain-orchestration'\nexport * from '@xyo-network/chain-protocol'\nexport * from '@xyo-network/chain-services'\nexport * from '@xyo-network/chain-utils'\nexport * from '@xyo-network/chain-validation'\n","import type { ChildProcess } from 'node:child_process'\nimport { spawn } from 'node:child_process'\n\nimport { delay } from '@xylabs/delay'\nimport { JsonRpcProvider } from 'ethers/providers'\n\nasync function isGanacheRunning(url: string) {\n try {\n const provider = new JsonRpcProvider(url)\n await provider.getBlockNumber() // Try to fetch the latest block number\n return true // If this succeeds, the server is running\n } catch {\n return false // If this fails, the server is not running\n }\n}\n\nexport async function startGanache(port: number, mnemonic: string) {\n console.log('Starting Ganache CLI...')\n\n // Start Ganache CLI\n const ganacheProcess = spawn(\n 'yarn',\n ['ganache', '--port', `${port}`, '--chain.chainId', '1337', '--mnemonic', mnemonic],\n { stdio: 'inherit' },\n )\n\n // Wait for Ganache to be ready\n while (!await isGanacheRunning(`http://127.0.0.1:${port}`)) {\n await delay(500)\n }\n\n return ganacheProcess\n}\n\nexport function stopGanache(process: ChildProcess) {\n console.log('Stopping Ganache CLI...')\n\n if (process) {\n process.kill('SIGTERM')\n console.log('Ganache CLI stopped.')\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport { asAddress } from '@xylabs/hex'\nimport type { AccountInstance, WalletInstance } from '@xyo-network/account'\nimport { Account } from '@xyo-network/account'\nimport { createChain } from '@xyo-network/chain-ethereum'\nimport type {\n ChainStakeIntent, Elevated, HydratedBlock,\n} from '@xyo-network/chain-model'\nimport { ChainStakeIntentSchema } from '@xyo-network/chain-model'\nimport { buildBlock, buildTransaction } from '@xyo-network/chain-protocol'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { BurnableErc20__factory as Erc20Factory } from '@xyo-network/typechain'\nimport { getAddress } from 'ethers/address'\nimport { JsonRpcProvider } from 'ethers/providers'\nimport { parseUnits } from 'ethers/utils'\nimport { Wallet } from 'ethers/wallet'\n\nconst gasConfig = () => {\n return {\n gasLimit: 2_000_000, // Set the gas limit\n gasPrice: parseUnits('100', 'gwei'),\n }\n}\n\nexport const createTestErc20 = async (ganachePort: number, testPhrase: string, contractCreator: WalletInstance): Promise<Address> => {\n const provider = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWallet = new Wallet(contractCreator.privateKey, provider)\n const erc20 = new Erc20Factory(ethWallet)\n const totalSupply = parseUnits('1000000', 18)\n const erc20Contract = await (await erc20.deploy('Test Token', 'TST', totalSupply, gasConfig())).waitForDeployment()\n const erc20Address = await erc20Contract.getAddress()\n const erc20ContractPerson0 = Erc20Factory.connect(erc20Address, ethWallet)\n const balance = await erc20ContractPerson0.balanceOf(ethWallet.address)\n assertEx(balance === totalSupply, () => 'Balance does not match total supply')\n return assertEx(asAddress(erc20Address), () => 'Invalid ERC20 contract address')\n}\n\nexport const transferTestTokens = async (ganachePort: number, erc20Address: Address, account0: WalletInstance, account1: WalletInstance) => {\n const provider0 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson0 = new Wallet(account0.privateKey, provider0)\n const provider1 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson1 = new Wallet(account1.privateKey, provider1)\n const erc20ContractPerson0 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson0)\n const transferAmount = parseUnits('1000', 18)\n await (await erc20ContractPerson0.transfer(ethWalletPerson1.address, transferAmount, gasConfig())).wait()\n const erc20ContractPerson1 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson1)\n const balance = await erc20ContractPerson1.balanceOf(ethWalletPerson1.address)\n assertEx(balance === transferAmount, () => 'Balance does not match transfer amount')\n}\n\nexport const createTestChainContract = async (\n ganachePort: number,\n erc20Address: Address,\n account0: WalletInstance,\n initialProducer: AccountInstance,\n): Promise<Address> => {\n const provider0 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson0 = new Wallet(account0.privateKey, provider0)\n const [xyoChainContractAddress] = await createChain(\n ethWalletPerson0,\n erc20Address,\n initialProducer,\n XYO_ZERO_ADDRESS,\n 0n,\n XYO_ZERO_ADDRESS,\n 50_000n,\n gasConfig(),\n )\n return assertEx(asAddress(xyoChainContractAddress), () => 'Invalid staking contract address')\n}\n\nexport const approveTestStakeChainAddress = async (ganachePort: number, erc20Address: Address, xyoChainContractAddress: Address, account1: WalletInstance) => {\n const provider1 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson1 = new Wallet(account1.privateKey, provider1)\n const erc20ContractPerson1 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson1)\n\n const _approveResultTx = await (await erc20ContractPerson1.approve(getAddress(xyoChainContractAddress), parseUnits('100', 18), gasConfig())).wait()\n}\n\nexport const createTestGenesisBlock = async (\n blockProducerAccounts: WalletInstance[],\n): Promise<HydratedBlock> => {\n const randomChainId = (await Account.random()).address\n // Create staked intents for all the block producers declaring their intent to produce blocks\n const signedStakedBlockProducerIntents = await Promise.all(blockProducerAccounts.map(async (blockProducerAccount) => {\n const stakeIntent = new PayloadBuilder<Elevated<ChainStakeIntent>>({ schema: ChainStakeIntentSchema }).fields({\n $opCodes: ['elevate'],\n from: blockProducerAccount.address,\n exp: Number.MAX_SAFE_INTEGER,\n nbf: 0,\n intent: 'producer',\n }).build()\n\n const signedStakedBlockProducerIntent = await buildTransaction(\n randomChainId,\n [stakeIntent],\n blockProducerAccount,\n 0,\n 1000,\n [],\n )\n return signedStakedBlockProducerIntent\n }))\n const intents = signedStakedBlockProducerIntents.map(intent => intent[0])\n const payloads = signedStakedBlockProducerIntents.flatMap(intent => intent[1]) as Elevated<WithStorageMeta<ChainStakeIntent>>[]\n return await buildBlock(randomChainId, signedStakedBlockProducerIntents, [...intents, ...payloads], blockProducerAccounts)\n}\n"],"mappings":"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","names":["spawn","delay","JsonRpcProvider","isGanacheRunning","url","provider","JsonRpcProvider","getBlockNumber","startGanache","port","mnemonic","console","log","ganacheProcess","spawn","stdio","delay","stopGanache","process","kill","assertEx","asAddress","Account","createChain","ChainStakeIntentSchema","buildBlock","buildTransaction","XYO_ZERO_ADDRESS","PayloadBuilder","BurnableErc20__factory","Erc20Factory","getAddress","JsonRpcProvider","parseUnits","Wallet","gasConfig","gasLimit","gasPrice","parseUnits","createTestErc20","ganachePort","testPhrase","contractCreator","provider","JsonRpcProvider","ethWallet","Wallet","privateKey","erc20","Erc20Factory","totalSupply","erc20Contract","deploy","waitForDeployment","erc20Address","getAddress","erc20ContractPerson0","connect","balance","balanceOf","address","assertEx","asAddress","transferTestTokens","account0","account1","provider0","ethWalletPerson0","provider1","ethWalletPerson1","transferAmount","transfer","wait","erc20ContractPerson1","createTestChainContract","initialProducer","xyoChainContractAddress","createChain","XYO_ZERO_ADDRESS","approveTestStakeChainAddress","_approveResultTx","approve","createTestGenesisBlock","blockProducerAccounts","randomChainId","Account","random","signedStakedBlockProducerIntents","Promise","all","map","blockProducerAccount","stakeIntent","PayloadBuilder","schema","ChainStakeIntentSchema","fields","$opCodes","from","exp","Number","MAX_SAFE_INTEGER","nbf","intent","build","signedStakedBlockProducerIntent","buildTransaction","intents","payloads","flatMap","buildBlock"]}
|
package/dist/node/index-node.mjs
CHANGED
|
@@ -24,10 +24,6 @@ __export(index_node_exports, {
|
|
|
24
24
|
createTestChainContract: () => createTestChainContract,
|
|
25
25
|
createTestErc20: () => createTestErc20,
|
|
26
26
|
createTestGenesisBlock: () => createTestGenesisBlock,
|
|
27
|
-
initArchivistSync: () => initArchivistSync,
|
|
28
|
-
initBridge: () => initBridge,
|
|
29
|
-
initBridgedArchivistModule: () => initBridgedArchivistModule,
|
|
30
|
-
initBridgedModule: () => initBridgedModule,
|
|
31
27
|
startGanache: () => startGanache,
|
|
32
28
|
stopGanache: () => stopGanache,
|
|
33
29
|
transferTestTokens: () => transferTestTokens
|
|
@@ -40,10 +36,6 @@ __export(index_exports, {
|
|
|
40
36
|
createTestChainContract: () => createTestChainContract,
|
|
41
37
|
createTestErc20: () => createTestErc20,
|
|
42
38
|
createTestGenesisBlock: () => createTestGenesisBlock,
|
|
43
|
-
initArchivistSync: () => initArchivistSync,
|
|
44
|
-
initBridge: () => initBridge,
|
|
45
|
-
initBridgedArchivistModule: () => initBridgedArchivistModule,
|
|
46
|
-
initBridgedModule: () => initBridgedModule,
|
|
47
39
|
startGanache: () => startGanache,
|
|
48
40
|
stopGanache: () => stopGanache,
|
|
49
41
|
transferTestTokens: () => transferTestTokens
|
|
@@ -51,125 +43,10 @@ __export(index_exports, {
|
|
|
51
43
|
|
|
52
44
|
// src/index-shared.ts
|
|
53
45
|
var index_shared_exports = {};
|
|
54
|
-
__export(index_shared_exports, {
|
|
55
|
-
initArchivistSync: () => initArchivistSync,
|
|
56
|
-
initBridge: () => initBridge,
|
|
57
|
-
initBridgedArchivistModule: () => initBridgedArchivistModule,
|
|
58
|
-
initBridgedModule: () => initBridgedModule
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
// src/orchestration/archivist/initArchivistSync.ts
|
|
62
|
-
import { ArchivistSyncDiviner } from "@xyo-network/chain-modules";
|
|
63
|
-
import { spanAsync } from "@xyo-network/chain-utils";
|
|
64
|
-
import { DivinerConfigSchema } from "@xyo-network/diviner-model";
|
|
65
|
-
import { MemoryNode } from "@xyo-network/node-memory";
|
|
66
|
-
import { MemorySentinel } from "@xyo-network/sentinel-memory";
|
|
67
|
-
import { SentinelConfigSchema } from "@xyo-network/sentinel-model";
|
|
68
|
-
var initArchivistSync = /* @__PURE__ */ __name(async (name, inArchivist, outArchivist, frequency = 1e3, traceProvider) => {
|
|
69
|
-
const tracer = traceProvider?.getTracer(`archivist-sync-diviner [${name}]`);
|
|
70
|
-
return await spanAsync(`initArchivistSync [${name}]`, async () => {
|
|
71
|
-
const node = await MemoryNode.create({
|
|
72
|
-
account: "random"
|
|
73
|
-
});
|
|
74
|
-
const finalizedArchivistSyncDiviner = await ArchivistSyncDiviner.create({
|
|
75
|
-
account: "random",
|
|
76
|
-
inArchivist,
|
|
77
|
-
outArchivist,
|
|
78
|
-
tracer,
|
|
79
|
-
config: {
|
|
80
|
-
schema: DivinerConfigSchema,
|
|
81
|
-
name
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
await node.register(finalizedArchivistSyncDiviner);
|
|
85
|
-
await node.attach(finalizedArchivistSyncDiviner.address);
|
|
86
|
-
const sentinel = await MemorySentinel.create({
|
|
87
|
-
account: "random",
|
|
88
|
-
config: {
|
|
89
|
-
name,
|
|
90
|
-
schema: SentinelConfigSchema,
|
|
91
|
-
tasks: [
|
|
92
|
-
{
|
|
93
|
-
required: true,
|
|
94
|
-
mod: finalizedArchivistSyncDiviner.address,
|
|
95
|
-
endPoint: "divine"
|
|
96
|
-
}
|
|
97
|
-
],
|
|
98
|
-
automations: [
|
|
99
|
-
{
|
|
100
|
-
frequency,
|
|
101
|
-
frequencyUnits: "millis",
|
|
102
|
-
schema: "network.xyo.automation.interval",
|
|
103
|
-
start: Date.now(),
|
|
104
|
-
type: "interval"
|
|
105
|
-
}
|
|
106
|
-
]
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
await node.register(sentinel);
|
|
110
|
-
await node.attach(sentinel.address);
|
|
111
|
-
return node;
|
|
112
|
-
}, tracer);
|
|
113
|
-
}, "initArchivistSync");
|
|
114
|
-
|
|
115
|
-
// src/orchestration/bridge.ts
|
|
116
|
-
import { HttpBridge, HttpBridgeConfigSchema } from "@xyo-network/bridge-http";
|
|
117
|
-
import { Mutex } from "async-mutex";
|
|
118
|
-
var initMutex = new Mutex();
|
|
119
|
-
var bridgeSingletonMap = /* @__PURE__ */ new Map();
|
|
120
|
-
var initBridge = /* @__PURE__ */ __name(async (nodeUrl) => {
|
|
121
|
-
return await initMutex.runExclusive(async () => {
|
|
122
|
-
const existing = bridgeSingletonMap.get(nodeUrl);
|
|
123
|
-
if (existing) return existing;
|
|
124
|
-
const bridge = await HttpBridge.create({
|
|
125
|
-
account: "random",
|
|
126
|
-
config: {
|
|
127
|
-
name: "HttpBridge",
|
|
128
|
-
client: {
|
|
129
|
-
url: nodeUrl,
|
|
130
|
-
discoverRoots: "start"
|
|
131
|
-
},
|
|
132
|
-
schema: HttpBridgeConfigSchema,
|
|
133
|
-
security: {
|
|
134
|
-
allowAnonymous: true
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
await bridge.start();
|
|
139
|
-
bridgeSingletonMap.set(nodeUrl, bridge);
|
|
140
|
-
return bridge;
|
|
141
|
-
});
|
|
142
|
-
}, "initBridge");
|
|
143
|
-
|
|
144
|
-
// src/orchestration/initBridgedModule.ts
|
|
145
|
-
import { assertEx } from "@xylabs/assert";
|
|
146
|
-
import { asAttachableArchivistInstance } from "@xyo-network/archivist-model";
|
|
147
|
-
import { asAttachableModuleInstance } from "@xyo-network/module-model";
|
|
148
|
-
import { Mutex as Mutex2 } from "async-mutex";
|
|
149
|
-
var initMutex2 = new Mutex2();
|
|
150
|
-
var bridgedModuleDictionary = {};
|
|
151
|
-
var initBridgedModule = /* @__PURE__ */ __name(async ({ bridge, moduleName }) => {
|
|
152
|
-
return await initMutex2.runExclusive(async () => {
|
|
153
|
-
const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName];
|
|
154
|
-
if (existing) return existing;
|
|
155
|
-
const mod = assertEx(await bridge.resolve(moduleName), () => `Error: Could not resolve ${moduleName}`);
|
|
156
|
-
const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Error: Could not convert ${moduleName} to attachable module instance`);
|
|
157
|
-
bridgedModuleDictionary[bridge.address] = bridgedModuleDictionary[bridge.address] || {};
|
|
158
|
-
bridgedModuleDictionary[bridge.address][moduleName] = moduleInstance;
|
|
159
|
-
return moduleInstance;
|
|
160
|
-
});
|
|
161
|
-
}, "initBridgedModule");
|
|
162
|
-
var initBridgedArchivistModule = /* @__PURE__ */ __name(async ({ bridge, moduleName }) => {
|
|
163
|
-
return assertEx(asAttachableArchivistInstance(await initBridgedModule({
|
|
164
|
-
bridge,
|
|
165
|
-
moduleName
|
|
166
|
-
})), () => `Error: Could not convert ${moduleName} to attachable archivist instance`);
|
|
167
|
-
}, "initBridgedArchivistModule");
|
|
168
|
-
|
|
169
|
-
// src/index-shared.ts
|
|
170
46
|
__reExport(index_shared_exports, chain_ethereum_star);
|
|
171
47
|
__reExport(index_shared_exports, chain_model_star);
|
|
172
48
|
__reExport(index_shared_exports, chain_modules_star);
|
|
49
|
+
__reExport(index_shared_exports, chain_orchestration_star);
|
|
173
50
|
__reExport(index_shared_exports, chain_protocol_star);
|
|
174
51
|
__reExport(index_shared_exports, chain_services_star);
|
|
175
52
|
__reExport(index_shared_exports, chain_utils_star);
|
|
@@ -177,6 +54,7 @@ __reExport(index_shared_exports, chain_validation_star);
|
|
|
177
54
|
import * as chain_ethereum_star from "@xyo-network/chain-ethereum";
|
|
178
55
|
import * as chain_model_star from "@xyo-network/chain-model";
|
|
179
56
|
import * as chain_modules_star from "@xyo-network/chain-modules";
|
|
57
|
+
import * as chain_orchestration_star from "@xyo-network/chain-orchestration";
|
|
180
58
|
import * as chain_protocol_star from "@xyo-network/chain-protocol";
|
|
181
59
|
import * as chain_services_star from "@xyo-network/chain-services";
|
|
182
60
|
import * as chain_utils_star from "@xyo-network/chain-utils";
|
|
@@ -228,7 +106,7 @@ function stopGanache(process) {
|
|
|
228
106
|
__name(stopGanache, "stopGanache");
|
|
229
107
|
|
|
230
108
|
// src/test/evm/stakingContractUtils.ts
|
|
231
|
-
import { assertEx
|
|
109
|
+
import { assertEx } from "@xylabs/assert";
|
|
232
110
|
import { asAddress } from "@xylabs/hex";
|
|
233
111
|
import { Account } from "@xyo-network/account";
|
|
234
112
|
import { createChain } from "@xyo-network/chain-ethereum";
|
|
@@ -256,8 +134,8 @@ var createTestErc20 = /* @__PURE__ */ __name(async (ganachePort, testPhrase, con
|
|
|
256
134
|
const erc20Address = await erc20Contract.getAddress();
|
|
257
135
|
const erc20ContractPerson0 = Erc20Factory.connect(erc20Address, ethWallet);
|
|
258
136
|
const balance = await erc20ContractPerson0.balanceOf(ethWallet.address);
|
|
259
|
-
|
|
260
|
-
return
|
|
137
|
+
assertEx(balance === totalSupply, () => "Balance does not match total supply");
|
|
138
|
+
return assertEx(asAddress(erc20Address), () => "Invalid ERC20 contract address");
|
|
261
139
|
}, "createTestErc20");
|
|
262
140
|
var transferTestTokens = /* @__PURE__ */ __name(async (ganachePort, erc20Address, account0, account1) => {
|
|
263
141
|
const provider0 = new JsonRpcProvider2(`http://127.0.0.1:${ganachePort}`, 1337);
|
|
@@ -269,13 +147,13 @@ var transferTestTokens = /* @__PURE__ */ __name(async (ganachePort, erc20Address
|
|
|
269
147
|
await (await erc20ContractPerson0.transfer(ethWalletPerson1.address, transferAmount, gasConfig())).wait();
|
|
270
148
|
const erc20ContractPerson1 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson1);
|
|
271
149
|
const balance = await erc20ContractPerson1.balanceOf(ethWalletPerson1.address);
|
|
272
|
-
|
|
150
|
+
assertEx(balance === transferAmount, () => "Balance does not match transfer amount");
|
|
273
151
|
}, "transferTestTokens");
|
|
274
152
|
var createTestChainContract = /* @__PURE__ */ __name(async (ganachePort, erc20Address, account0, initialProducer) => {
|
|
275
153
|
const provider0 = new JsonRpcProvider2(`http://127.0.0.1:${ganachePort}`, 1337);
|
|
276
154
|
const ethWalletPerson0 = new Wallet(account0.privateKey, provider0);
|
|
277
155
|
const [xyoChainContractAddress] = await createChain(ethWalletPerson0, erc20Address, initialProducer, XYO_ZERO_ADDRESS, 0n, XYO_ZERO_ADDRESS, 50000n, gasConfig());
|
|
278
|
-
return
|
|
156
|
+
return assertEx(asAddress(xyoChainContractAddress), () => "Invalid staking contract address");
|
|
279
157
|
}, "createTestChainContract");
|
|
280
158
|
var approveTestStakeChainAddress = /* @__PURE__ */ __name(async (ganachePort, erc20Address, xyoChainContractAddress, account1) => {
|
|
281
159
|
const provider1 = new JsonRpcProvider2(`http://127.0.0.1:${ganachePort}`, 1337);
|
|
@@ -317,10 +195,6 @@ export {
|
|
|
317
195
|
createTestChainContract,
|
|
318
196
|
createTestErc20,
|
|
319
197
|
createTestGenesisBlock,
|
|
320
|
-
initArchivistSync,
|
|
321
|
-
initBridge,
|
|
322
|
-
initBridgedArchivistModule,
|
|
323
|
-
initBridgedModule,
|
|
324
198
|
startGanache,
|
|
325
199
|
stopGanache,
|
|
326
200
|
transferTestTokens
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index-node.ts","../../src/index.ts","../../src/index-shared.ts","../../src/orchestration/archivist/initArchivistSync.ts","../../src/orchestration/bridge.ts","../../src/orchestration/initBridgedModule.ts","../../src/test/evm/runGanache.ts","../../src/test/evm/stakingContractUtils.ts"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nexport * from './index.ts'\n","export * from './index-shared.ts'\nexport * from './test/index.ts'\n","export * from './orchestration/index.ts'\nexport * from '@xyo-network/chain-ethereum'\nexport * from '@xyo-network/chain-model'\nexport * from '@xyo-network/chain-modules'\nexport * from '@xyo-network/chain-protocol'\nexport * from '@xyo-network/chain-services'\nexport * from '@xyo-network/chain-utils'\nexport * from '@xyo-network/chain-validation'\n","import type { TracerProvider } from '@opentelemetry/api'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistSyncDiviner } from '@xyo-network/chain-modules'\nimport { spanAsync } from '@xyo-network/chain-utils'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { SentinelConfigSchema } from '@xyo-network/sentinel-model'\n\nexport const initArchivistSync = async (\n name: ModuleIdentifier,\n inArchivist: ArchivistInstance,\n outArchivist: ArchivistInstance,\n frequency = 1000,\n traceProvider?: TracerProvider,\n) => {\n const tracer = traceProvider?.getTracer(`archivist-sync-diviner [${name}]`)\n return await spanAsync(`initArchivistSync [${name}]`, async () => {\n const node = await MemoryNode.create({ account: 'random' })\n const finalizedArchivistSyncDiviner = await ArchivistSyncDiviner.create({\n account: 'random',\n inArchivist,\n outArchivist,\n tracer,\n config: { schema: DivinerConfigSchema, name },\n })\n\n await node.register(finalizedArchivistSyncDiviner)\n await node.attach(finalizedArchivistSyncDiviner.address)\n\n const sentinel = await MemorySentinel.create({\n account: 'random',\n config: {\n name,\n schema: SentinelConfigSchema,\n tasks: [\n {\n required: true,\n mod: finalizedArchivistSyncDiviner.address,\n endPoint: 'divine',\n },\n ],\n automations: [\n {\n frequency,\n frequencyUnits: 'millis',\n schema: 'network.xyo.automation.interval',\n start: Date.now(),\n type: 'interval',\n },\n ],\n },\n })\n\n await node.register(sentinel)\n await node.attach(sentinel.address)\n\n return node\n }, tracer)\n}\n","import { HttpBridge, HttpBridgeConfigSchema } from '@xyo-network/bridge-http'\nimport type { AttachableBridgeInstance } from '@xyo-network/bridge-model'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\nconst bridgeSingletonMap = new Map<string, AttachableBridgeInstance>()\n\nexport const initBridge = async (nodeUrl: string): Promise<AttachableBridgeInstance> => {\n return await initMutex.runExclusive(async () => {\n const existing = bridgeSingletonMap.get(nodeUrl)\n if (existing) return existing\n const bridge = await HttpBridge.create({\n account: 'random',\n config: {\n name: 'HttpBridge',\n client: { url: nodeUrl, discoverRoots: 'start' },\n schema: HttpBridgeConfigSchema,\n security: { allowAnonymous: true },\n },\n })\n await bridge.start()\n bridgeSingletonMap.set(nodeUrl, bridge)\n return bridge\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport type { AttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport { asAttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport type { BridgeInstance } from '@xyo-network/bridge-model'\nimport type { Initializable } from '@xyo-network/chain-model'\nimport type { AttachableModuleInstance, ModuleIdentifier } from '@xyo-network/module-model'\nimport { asAttachableModuleInstance } from '@xyo-network/module-model'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\nconst bridgedModuleDictionary: Record<Address, Record<ModuleIdentifier, AttachableModuleInstance>> = {}\n\nexport const initBridgedModule: Initializable<\n { bridge: BridgeInstance; moduleName: ModuleIdentifier }, AttachableModuleInstance\n> = async ({ bridge, moduleName }): Promise<AttachableModuleInstance> => {\n return await initMutex.runExclusive(async () => {\n const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName]\n if (existing) return existing\n const mod = assertEx(await bridge.resolve(moduleName), () => `Error: Could not resolve ${moduleName}`)\n const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Error: Could not convert ${moduleName} to attachable module instance`)\n bridgedModuleDictionary[bridge.address] = bridgedModuleDictionary[bridge.address] || {}\n bridgedModuleDictionary[bridge.address][moduleName] = moduleInstance\n return moduleInstance\n })\n}\n\nexport const initBridgedArchivistModule: Initializable<\n { bridge: BridgeInstance; moduleName: ModuleIdentifier }, AttachableArchivistInstance\n> = async ({ bridge, moduleName }): Promise<AttachableArchivistInstance> => {\n return assertEx(\n asAttachableArchivistInstance(await initBridgedModule({ bridge, moduleName })),\n () => `Error: Could not convert ${moduleName} to attachable archivist instance`,\n )\n}\n","import type { ChildProcess } from 'node:child_process'\nimport { spawn } from 'node:child_process'\n\nimport { delay } from '@xylabs/delay'\nimport { JsonRpcProvider } from 'ethers/providers'\n\nasync function isGanacheRunning(url: string) {\n try {\n const provider = new JsonRpcProvider(url)\n await provider.getBlockNumber() // Try to fetch the latest block number\n return true // If this succeeds, the server is running\n } catch {\n return false // If this fails, the server is not running\n }\n}\n\nexport async function startGanache(port: number, mnemonic: string) {\n console.log('Starting Ganache CLI...')\n\n // Start Ganache CLI\n const ganacheProcess = spawn(\n 'yarn',\n ['ganache', '--port', `${port}`, '--chain.chainId', '1337', '--mnemonic', mnemonic],\n { stdio: 'inherit' },\n )\n\n // Wait for Ganache to be ready\n while (!await isGanacheRunning(`http://127.0.0.1:${port}`)) {\n await delay(500)\n }\n\n return ganacheProcess\n}\n\nexport function stopGanache(process: ChildProcess) {\n console.log('Stopping Ganache CLI...')\n\n if (process) {\n process.kill('SIGTERM')\n console.log('Ganache CLI stopped.')\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport { asAddress } from '@xylabs/hex'\nimport type { AccountInstance, WalletInstance } from '@xyo-network/account'\nimport { Account } from '@xyo-network/account'\nimport { createChain } from '@xyo-network/chain-ethereum'\nimport type {\n ChainStakeIntent, Elevated, HydratedBlock,\n} from '@xyo-network/chain-model'\nimport { ChainStakeIntentSchema } from '@xyo-network/chain-model'\nimport { buildBlock, buildTransaction } from '@xyo-network/chain-protocol'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { BurnableErc20__factory as Erc20Factory } from '@xyo-network/typechain'\nimport { getAddress } from 'ethers/address'\nimport { JsonRpcProvider } from 'ethers/providers'\nimport { parseUnits } from 'ethers/utils'\nimport { Wallet } from 'ethers/wallet'\n\nconst gasConfig = () => {\n return {\n gasLimit: 2_000_000, // Set the gas limit\n gasPrice: parseUnits('100', 'gwei'),\n }\n}\n\nexport const createTestErc20 = async (ganachePort: number, testPhrase: string, contractCreator: WalletInstance): Promise<Address> => {\n const provider = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWallet = new Wallet(contractCreator.privateKey, provider)\n const erc20 = new Erc20Factory(ethWallet)\n const totalSupply = parseUnits('1000000', 18)\n const erc20Contract = await (await erc20.deploy('Test Token', 'TST', totalSupply, gasConfig())).waitForDeployment()\n const erc20Address = await erc20Contract.getAddress()\n const erc20ContractPerson0 = Erc20Factory.connect(erc20Address, ethWallet)\n const balance = await erc20ContractPerson0.balanceOf(ethWallet.address)\n assertEx(balance === totalSupply, () => 'Balance does not match total supply')\n return assertEx(asAddress(erc20Address), () => 'Invalid ERC20 contract address')\n}\n\nexport const transferTestTokens = async (ganachePort: number, erc20Address: Address, account0: WalletInstance, account1: WalletInstance) => {\n const provider0 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson0 = new Wallet(account0.privateKey, provider0)\n const provider1 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson1 = new Wallet(account1.privateKey, provider1)\n const erc20ContractPerson0 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson0)\n const transferAmount = parseUnits('1000', 18)\n await (await erc20ContractPerson0.transfer(ethWalletPerson1.address, transferAmount, gasConfig())).wait()\n const erc20ContractPerson1 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson1)\n const balance = await erc20ContractPerson1.balanceOf(ethWalletPerson1.address)\n assertEx(balance === transferAmount, () => 'Balance does not match transfer amount')\n}\n\nexport const createTestChainContract = async (\n ganachePort: number,\n erc20Address: Address,\n account0: WalletInstance,\n initialProducer: AccountInstance,\n): Promise<Address> => {\n const provider0 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson0 = new Wallet(account0.privateKey, provider0)\n const [xyoChainContractAddress] = await createChain(\n ethWalletPerson0,\n erc20Address,\n initialProducer,\n XYO_ZERO_ADDRESS,\n 0n,\n XYO_ZERO_ADDRESS,\n 50_000n,\n gasConfig(),\n )\n return assertEx(asAddress(xyoChainContractAddress), () => 'Invalid staking contract address')\n}\n\nexport const approveTestStakeChainAddress = async (ganachePort: number, erc20Address: Address, xyoChainContractAddress: Address, account1: WalletInstance) => {\n const provider1 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson1 = new Wallet(account1.privateKey, provider1)\n const erc20ContractPerson1 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson1)\n\n const _approveResultTx = await (await erc20ContractPerson1.approve(getAddress(xyoChainContractAddress), parseUnits('100', 18), gasConfig())).wait()\n}\n\nexport const createTestGenesisBlock = async (\n blockProducerAccounts: WalletInstance[],\n): Promise<HydratedBlock> => {\n const randomChainId = (await Account.random()).address\n // Create staked intents for all the block producers declaring their intent to produce blocks\n const signedStakedBlockProducerIntents = await Promise.all(blockProducerAccounts.map(async (blockProducerAccount) => {\n const stakeIntent = new PayloadBuilder<Elevated<ChainStakeIntent>>({ schema: ChainStakeIntentSchema }).fields({\n $opCodes: ['elevate'],\n from: blockProducerAccount.address,\n exp: Number.MAX_SAFE_INTEGER,\n nbf: 0,\n intent: 'producer',\n }).build()\n\n const signedStakedBlockProducerIntent = await buildTransaction(\n randomChainId,\n [stakeIntent],\n blockProducerAccount,\n 0,\n 1000,\n [],\n )\n return signedStakedBlockProducerIntent\n }))\n const intents = signedStakedBlockProducerIntents.map(intent => intent[0])\n const payloads = signedStakedBlockProducerIntents.flatMap(intent => intent[1]) as Elevated<WithStorageMeta<ChainStakeIntent>>[]\n return await buildBlock(randomChainId, signedStakedBlockProducerIntents, [...intents, ...payloads], blockProducerAccounts)\n}\n"],"mappings":"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","names":["ArchivistSyncDiviner","spanAsync","DivinerConfigSchema","MemoryNode","MemorySentinel","SentinelConfigSchema","initArchivistSync","name","inArchivist","outArchivist","frequency","traceProvider","tracer","getTracer","spanAsync","node","MemoryNode","create","account","finalizedArchivistSyncDiviner","ArchivistSyncDiviner","config","schema","DivinerConfigSchema","register","attach","address","sentinel","MemorySentinel","SentinelConfigSchema","tasks","required","mod","endPoint","automations","frequencyUnits","start","Date","now","type","HttpBridge","HttpBridgeConfigSchema","Mutex","initMutex","Mutex","bridgeSingletonMap","Map","initBridge","nodeUrl","runExclusive","existing","get","bridge","HttpBridge","create","account","config","name","client","url","discoverRoots","schema","HttpBridgeConfigSchema","security","allowAnonymous","start","set","assertEx","asAttachableArchivistInstance","asAttachableModuleInstance","Mutex","initMutex","Mutex","bridgedModuleDictionary","initBridgedModule","bridge","moduleName","runExclusive","existing","address","mod","assertEx","resolve","moduleInstance","asAttachableModuleInstance","initBridgedArchivistModule","asAttachableArchivistInstance","spawn","delay","JsonRpcProvider","isGanacheRunning","url","provider","JsonRpcProvider","getBlockNumber","startGanache","port","mnemonic","console","log","ganacheProcess","spawn","stdio","delay","stopGanache","process","kill","assertEx","asAddress","Account","createChain","ChainStakeIntentSchema","buildBlock","buildTransaction","XYO_ZERO_ADDRESS","PayloadBuilder","BurnableErc20__factory","Erc20Factory","getAddress","JsonRpcProvider","parseUnits","Wallet","gasConfig","gasLimit","gasPrice","parseUnits","createTestErc20","ganachePort","testPhrase","contractCreator","provider","JsonRpcProvider","ethWallet","Wallet","privateKey","erc20","Erc20Factory","totalSupply","erc20Contract","deploy","waitForDeployment","erc20Address","getAddress","erc20ContractPerson0","connect","balance","balanceOf","address","assertEx","asAddress","transferTestTokens","account0","account1","provider0","ethWalletPerson0","provider1","ethWalletPerson1","transferAmount","transfer","wait","erc20ContractPerson1","createTestChainContract","initialProducer","xyoChainContractAddress","createChain","XYO_ZERO_ADDRESS","approveTestStakeChainAddress","_approveResultTx","approve","createTestGenesisBlock","blockProducerAccounts","randomChainId","Account","random","signedStakedBlockProducerIntents","Promise","all","map","blockProducerAccount","stakeIntent","PayloadBuilder","schema","ChainStakeIntentSchema","fields","$opCodes","from","exp","Number","MAX_SAFE_INTEGER","nbf","intent","build","signedStakedBlockProducerIntent","buildTransaction","intents","payloads","flatMap","buildBlock"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index-node.ts","../../src/index.ts","../../src/index-shared.ts","../../src/test/evm/runGanache.ts","../../src/test/evm/stakingContractUtils.ts"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nexport * from './index.ts'\n","export * from './index-shared.ts'\nexport * from './test/index.ts'\n","export * from '@xyo-network/chain-ethereum'\nexport * from '@xyo-network/chain-model'\nexport * from '@xyo-network/chain-modules'\nexport * from '@xyo-network/chain-orchestration'\nexport * from '@xyo-network/chain-protocol'\nexport * from '@xyo-network/chain-services'\nexport * from '@xyo-network/chain-utils'\nexport * from '@xyo-network/chain-validation'\n","import type { ChildProcess } from 'node:child_process'\nimport { spawn } from 'node:child_process'\n\nimport { delay } from '@xylabs/delay'\nimport { JsonRpcProvider } from 'ethers/providers'\n\nasync function isGanacheRunning(url: string) {\n try {\n const provider = new JsonRpcProvider(url)\n await provider.getBlockNumber() // Try to fetch the latest block number\n return true // If this succeeds, the server is running\n } catch {\n return false // If this fails, the server is not running\n }\n}\n\nexport async function startGanache(port: number, mnemonic: string) {\n console.log('Starting Ganache CLI...')\n\n // Start Ganache CLI\n const ganacheProcess = spawn(\n 'yarn',\n ['ganache', '--port', `${port}`, '--chain.chainId', '1337', '--mnemonic', mnemonic],\n { stdio: 'inherit' },\n )\n\n // Wait for Ganache to be ready\n while (!await isGanacheRunning(`http://127.0.0.1:${port}`)) {\n await delay(500)\n }\n\n return ganacheProcess\n}\n\nexport function stopGanache(process: ChildProcess) {\n console.log('Stopping Ganache CLI...')\n\n if (process) {\n process.kill('SIGTERM')\n console.log('Ganache CLI stopped.')\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport { asAddress } from '@xylabs/hex'\nimport type { AccountInstance, WalletInstance } from '@xyo-network/account'\nimport { Account } from '@xyo-network/account'\nimport { createChain } from '@xyo-network/chain-ethereum'\nimport type {\n ChainStakeIntent, Elevated, HydratedBlock,\n} from '@xyo-network/chain-model'\nimport { ChainStakeIntentSchema } from '@xyo-network/chain-model'\nimport { buildBlock, buildTransaction } from '@xyo-network/chain-protocol'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { BurnableErc20__factory as Erc20Factory } from '@xyo-network/typechain'\nimport { getAddress } from 'ethers/address'\nimport { JsonRpcProvider } from 'ethers/providers'\nimport { parseUnits } from 'ethers/utils'\nimport { Wallet } from 'ethers/wallet'\n\nconst gasConfig = () => {\n return {\n gasLimit: 2_000_000, // Set the gas limit\n gasPrice: parseUnits('100', 'gwei'),\n }\n}\n\nexport const createTestErc20 = async (ganachePort: number, testPhrase: string, contractCreator: WalletInstance): Promise<Address> => {\n const provider = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWallet = new Wallet(contractCreator.privateKey, provider)\n const erc20 = new Erc20Factory(ethWallet)\n const totalSupply = parseUnits('1000000', 18)\n const erc20Contract = await (await erc20.deploy('Test Token', 'TST', totalSupply, gasConfig())).waitForDeployment()\n const erc20Address = await erc20Contract.getAddress()\n const erc20ContractPerson0 = Erc20Factory.connect(erc20Address, ethWallet)\n const balance = await erc20ContractPerson0.balanceOf(ethWallet.address)\n assertEx(balance === totalSupply, () => 'Balance does not match total supply')\n return assertEx(asAddress(erc20Address), () => 'Invalid ERC20 contract address')\n}\n\nexport const transferTestTokens = async (ganachePort: number, erc20Address: Address, account0: WalletInstance, account1: WalletInstance) => {\n const provider0 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson0 = new Wallet(account0.privateKey, provider0)\n const provider1 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson1 = new Wallet(account1.privateKey, provider1)\n const erc20ContractPerson0 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson0)\n const transferAmount = parseUnits('1000', 18)\n await (await erc20ContractPerson0.transfer(ethWalletPerson1.address, transferAmount, gasConfig())).wait()\n const erc20ContractPerson1 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson1)\n const balance = await erc20ContractPerson1.balanceOf(ethWalletPerson1.address)\n assertEx(balance === transferAmount, () => 'Balance does not match transfer amount')\n}\n\nexport const createTestChainContract = async (\n ganachePort: number,\n erc20Address: Address,\n account0: WalletInstance,\n initialProducer: AccountInstance,\n): Promise<Address> => {\n const provider0 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson0 = new Wallet(account0.privateKey, provider0)\n const [xyoChainContractAddress] = await createChain(\n ethWalletPerson0,\n erc20Address,\n initialProducer,\n XYO_ZERO_ADDRESS,\n 0n,\n XYO_ZERO_ADDRESS,\n 50_000n,\n gasConfig(),\n )\n return assertEx(asAddress(xyoChainContractAddress), () => 'Invalid staking contract address')\n}\n\nexport const approveTestStakeChainAddress = async (ganachePort: number, erc20Address: Address, xyoChainContractAddress: Address, account1: WalletInstance) => {\n const provider1 = new JsonRpcProvider(`http://127.0.0.1:${ganachePort}`, 1337)\n const ethWalletPerson1 = new Wallet(account1.privateKey, provider1)\n const erc20ContractPerson1 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson1)\n\n const _approveResultTx = await (await erc20ContractPerson1.approve(getAddress(xyoChainContractAddress), parseUnits('100', 18), gasConfig())).wait()\n}\n\nexport const createTestGenesisBlock = async (\n blockProducerAccounts: WalletInstance[],\n): Promise<HydratedBlock> => {\n const randomChainId = (await Account.random()).address\n // Create staked intents for all the block producers declaring their intent to produce blocks\n const signedStakedBlockProducerIntents = await Promise.all(blockProducerAccounts.map(async (blockProducerAccount) => {\n const stakeIntent = new PayloadBuilder<Elevated<ChainStakeIntent>>({ schema: ChainStakeIntentSchema }).fields({\n $opCodes: ['elevate'],\n from: blockProducerAccount.address,\n exp: Number.MAX_SAFE_INTEGER,\n nbf: 0,\n intent: 'producer',\n }).build()\n\n const signedStakedBlockProducerIntent = await buildTransaction(\n randomChainId,\n [stakeIntent],\n blockProducerAccount,\n 0,\n 1000,\n [],\n )\n return signedStakedBlockProducerIntent\n }))\n const intents = signedStakedBlockProducerIntents.map(intent => intent[0])\n const payloads = signedStakedBlockProducerIntents.flatMap(intent => intent[1]) as Elevated<WithStorageMeta<ChainStakeIntent>>[]\n return await buildBlock(randomChainId, signedStakedBlockProducerIntents, [...intents, ...payloads], blockProducerAccounts)\n}\n"],"mappings":"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","names":["spawn","delay","JsonRpcProvider","isGanacheRunning","url","provider","JsonRpcProvider","getBlockNumber","startGanache","port","mnemonic","console","log","ganacheProcess","spawn","stdio","delay","stopGanache","process","kill","assertEx","asAddress","Account","createChain","ChainStakeIntentSchema","buildBlock","buildTransaction","XYO_ZERO_ADDRESS","PayloadBuilder","BurnableErc20__factory","Erc20Factory","getAddress","JsonRpcProvider","parseUnits","Wallet","gasConfig","gasLimit","gasPrice","parseUnits","createTestErc20","ganachePort","testPhrase","contractCreator","provider","JsonRpcProvider","ethWallet","Wallet","privateKey","erc20","Erc20Factory","totalSupply","erc20Contract","deploy","waitForDeployment","erc20Address","getAddress","erc20ContractPerson0","connect","balance","balanceOf","address","assertEx","asAddress","transferTestTokens","account0","account1","provider0","ethWalletPerson0","provider1","ethWalletPerson1","transferAmount","transfer","wait","erc20ContractPerson1","createTestChainContract","initialProducer","xyoChainContractAddress","createChain","XYO_ZERO_ADDRESS","approveTestStakeChainAddress","_approveResultTx","approve","createTestGenesisBlock","blockProducerAccounts","randomChainId","Account","random","signedStakedBlockProducerIntents","Promise","all","map","blockProducerAccount","stakeIntent","PayloadBuilder","schema","ChainStakeIntentSchema","fields","$opCodes","from","exp","Number","MAX_SAFE_INTEGER","nbf","intent","build","signedStakedBlockProducerIntent","buildTransaction","intents","payloads","flatMap","buildBlock"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export * from './orchestration/index.ts';
|
|
2
1
|
export * from '@xyo-network/chain-ethereum';
|
|
3
2
|
export * from '@xyo-network/chain-model';
|
|
4
3
|
export * from '@xyo-network/chain-modules';
|
|
4
|
+
export * from '@xyo-network/chain-orchestration';
|
|
5
5
|
export * from '@xyo-network/chain-protocol';
|
|
6
6
|
export * from '@xyo-network/chain-services';
|
|
7
7
|
export * from '@xyo-network/chain-utils';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-shared.d.ts","sourceRoot":"","sources":["../../src/index-shared.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index-shared.d.ts","sourceRoot":"","sources":["../../src/index-shared.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kCAAkC,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/chain-sdk",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.2",
|
|
5
5
|
"description": "XYO Layer One SDK",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -46,45 +46,44 @@
|
|
|
46
46
|
"deploy3": "echo Deploy3 not allowed!"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@
|
|
50
|
-
"@xylabs/
|
|
51
|
-
"@xylabs/
|
|
52
|
-
"@
|
|
53
|
-
"@xyo-network/
|
|
54
|
-
"@xyo-network/
|
|
55
|
-
"@xyo-network/bridge-
|
|
56
|
-
"@xyo-network/
|
|
57
|
-
"@xyo-network/chain-
|
|
58
|
-
"@xyo-network/chain-
|
|
59
|
-
"@xyo-network/chain-
|
|
60
|
-
"@xyo-network/chain-protocol": "^1.1.
|
|
61
|
-
"@xyo-network/chain-services": "^1.1.
|
|
62
|
-
"@xyo-network/chain-utils": "^1.1.
|
|
63
|
-
"@xyo-network/chain-validation": "^1.1.
|
|
64
|
-
"@xyo-network/diviner-model": "^3.
|
|
65
|
-
"@xyo-network/module-model": "^3.
|
|
66
|
-
"@xyo-network/node-memory": "^3.
|
|
67
|
-
"@xyo-network/payload-builder": "^3.
|
|
68
|
-
"@xyo-network/payload-model": "^3.
|
|
69
|
-
"@xyo-network/sentinel-memory": "^3.
|
|
70
|
-
"@xyo-network/sentinel-model": "^3.
|
|
71
|
-
"@xyo-network/typechain": "^3.
|
|
72
|
-
"async-mutex": "^0.5.0",
|
|
49
|
+
"@xylabs/assert": "^4.8.0",
|
|
50
|
+
"@xylabs/delay": "^4.8.0",
|
|
51
|
+
"@xylabs/hex": "^4.8.0",
|
|
52
|
+
"@xyo-network/account": "^3.11.0",
|
|
53
|
+
"@xyo-network/archivist-model": "^3.11.0",
|
|
54
|
+
"@xyo-network/bridge-http": "^3.11.0",
|
|
55
|
+
"@xyo-network/bridge-model": "^3.11.0",
|
|
56
|
+
"@xyo-network/chain-ethereum": "^1.1.2",
|
|
57
|
+
"@xyo-network/chain-model": "^1.1.2",
|
|
58
|
+
"@xyo-network/chain-modules": "^1.1.2",
|
|
59
|
+
"@xyo-network/chain-orchestration": "^1.1.2",
|
|
60
|
+
"@xyo-network/chain-protocol": "^1.1.2",
|
|
61
|
+
"@xyo-network/chain-services": "^1.1.2",
|
|
62
|
+
"@xyo-network/chain-utils": "^1.1.2",
|
|
63
|
+
"@xyo-network/chain-validation": "^1.1.2",
|
|
64
|
+
"@xyo-network/diviner-model": "^3.11.0",
|
|
65
|
+
"@xyo-network/module-model": "^3.11.0",
|
|
66
|
+
"@xyo-network/node-memory": "^3.11.0",
|
|
67
|
+
"@xyo-network/payload-builder": "^3.11.0",
|
|
68
|
+
"@xyo-network/payload-model": "^3.11.0",
|
|
69
|
+
"@xyo-network/sentinel-memory": "^3.11.0",
|
|
70
|
+
"@xyo-network/sentinel-model": "^3.11.0",
|
|
71
|
+
"@xyo-network/typechain": "^3.5.1",
|
|
73
72
|
"ethers": "6.13.6"
|
|
74
73
|
},
|
|
75
74
|
"devDependencies": {
|
|
76
|
-
"@types/node": "^22.
|
|
77
|
-
"@xylabs/decimal-precision": "^4.
|
|
78
|
-
"@xylabs/delay": "^4.
|
|
75
|
+
"@types/node": "^22.14.0",
|
|
76
|
+
"@xylabs/decimal-precision": "^4.8.0",
|
|
77
|
+
"@xylabs/delay": "^4.8.0",
|
|
79
78
|
"@xylabs/ts-scripts-yarn3": "^6.2.1",
|
|
80
79
|
"@xylabs/tsconfig": "^6.2.1",
|
|
81
|
-
"@xyo-network/account": "^3.
|
|
82
|
-
"@xyo-network/account-model": "^3.
|
|
83
|
-
"@xyo-network/archivist-memory": "^3.
|
|
84
|
-
"@xyo-network/boundwitness-builder": "^3.
|
|
85
|
-
"@xyo-network/payload-model": "^3.
|
|
86
|
-
"eslint": "^9.
|
|
87
|
-
"typescript": "^5.8.
|
|
80
|
+
"@xyo-network/account": "^3.11.0",
|
|
81
|
+
"@xyo-network/account-model": "^3.11.0",
|
|
82
|
+
"@xyo-network/archivist-memory": "^3.11.0",
|
|
83
|
+
"@xyo-network/boundwitness-builder": "^3.11.0",
|
|
84
|
+
"@xyo-network/payload-model": "^3.11.0",
|
|
85
|
+
"eslint": "^9.24.0",
|
|
86
|
+
"typescript": "^5.8.3",
|
|
88
87
|
"vitest": "^3.1.1"
|
|
89
88
|
},
|
|
90
89
|
"engineStrict": true,
|
package/src/index-shared.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export * from './orchestration/index.ts'
|
|
2
1
|
export * from '@xyo-network/chain-ethereum'
|
|
3
2
|
export * from '@xyo-network/chain-model'
|
|
4
3
|
export * from '@xyo-network/chain-modules'
|
|
4
|
+
export * from '@xyo-network/chain-orchestration'
|
|
5
5
|
export * from '@xyo-network/chain-protocol'
|
|
6
6
|
export * from '@xyo-network/chain-services'
|
|
7
7
|
export * from '@xyo-network/chain-utils'
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/archivist/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { TracerProvider } from '@opentelemetry/api';
|
|
2
|
-
import type { ArchivistInstance } from '@xyo-network/archivist-model';
|
|
3
|
-
import type { ModuleIdentifier } from '@xyo-network/module-model';
|
|
4
|
-
import { MemoryNode } from '@xyo-network/node-memory';
|
|
5
|
-
export declare const initArchivistSync: (name: ModuleIdentifier, inArchivist: ArchivistInstance, outArchivist: ArchivistInstance, frequency?: number, traceProvider?: TracerProvider) => Promise<MemoryNode<import("@xylabs/object").BaseParamsFields & {
|
|
6
|
-
account?: import("@xyo-network/account-model").AccountInstance | "random";
|
|
7
|
-
addToResolvers?: boolean;
|
|
8
|
-
additionalSigners?: import("@xyo-network/account-model").AccountInstance[];
|
|
9
|
-
allowNameResolution?: boolean;
|
|
10
|
-
config: import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/node-model").NodeConfig>;
|
|
11
|
-
ephemeralQueryAccountEnabled?: boolean;
|
|
12
|
-
moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
|
|
13
|
-
privateChildren?: import("@xyo-network/module-model").ModuleInstance[];
|
|
14
|
-
publicChildren?: import("@xyo-network/module-model").ModuleInstance[];
|
|
15
|
-
}, import("@xyo-network/node-model").NodeModuleEventData>>;
|
|
16
|
-
//# sourceMappingURL=initArchivistSync.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"initArchivistSync.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/archivist/initArchivistSync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAIrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAIrD,eAAO,MAAM,iBAAiB,GAC5B,MAAM,gBAAgB,EACtB,aAAa,iBAAiB,EAC9B,cAAc,iBAAiB,EAC/B,kBAAgB,EAChB,gBAAgB,cAAc;;;;;;;;;;0DA6C/B,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../src/orchestration/bridge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAMzE,eAAO,MAAM,UAAU,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,wBAAwB,CAiBlF,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/orchestration/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,wBAAwB,CAAA"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { AttachableArchivistInstance } from '@xyo-network/archivist-model';
|
|
2
|
-
import type { BridgeInstance } from '@xyo-network/bridge-model';
|
|
3
|
-
import type { Initializable } from '@xyo-network/chain-model';
|
|
4
|
-
import type { AttachableModuleInstance, ModuleIdentifier } from '@xyo-network/module-model';
|
|
5
|
-
export declare const initBridgedModule: Initializable<{
|
|
6
|
-
bridge: BridgeInstance;
|
|
7
|
-
moduleName: ModuleIdentifier;
|
|
8
|
-
}, AttachableModuleInstance>;
|
|
9
|
-
export declare const initBridgedArchivistModule: Initializable<{
|
|
10
|
-
bridge: BridgeInstance;
|
|
11
|
-
moduleName: ModuleIdentifier;
|
|
12
|
-
}, AttachableArchivistInstance>;
|
|
13
|
-
//# sourceMappingURL=initBridgedModule.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"initBridgedModule.d.ts","sourceRoot":"","sources":["../../../src/orchestration/initBridgedModule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AAE/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAO3F,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAC3C;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,gBAAgB,CAAA;CAAE,EAAE,wBAAwB,CAWnF,CAAA;AAED,eAAO,MAAM,0BAA0B,EAAE,aAAa,CACpD;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,gBAAgB,CAAA;CAAE,EAAE,2BAA2B,CAMtF,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './initArchivistSync.ts'
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import type { TracerProvider } from '@opentelemetry/api'
|
|
2
|
-
import type { ArchivistInstance } from '@xyo-network/archivist-model'
|
|
3
|
-
import { ArchivistSyncDiviner } from '@xyo-network/chain-modules'
|
|
4
|
-
import { spanAsync } from '@xyo-network/chain-utils'
|
|
5
|
-
import { DivinerConfigSchema } from '@xyo-network/diviner-model'
|
|
6
|
-
import type { ModuleIdentifier } from '@xyo-network/module-model'
|
|
7
|
-
import { MemoryNode } from '@xyo-network/node-memory'
|
|
8
|
-
import { MemorySentinel } from '@xyo-network/sentinel-memory'
|
|
9
|
-
import { SentinelConfigSchema } from '@xyo-network/sentinel-model'
|
|
10
|
-
|
|
11
|
-
export const initArchivistSync = async (
|
|
12
|
-
name: ModuleIdentifier,
|
|
13
|
-
inArchivist: ArchivistInstance,
|
|
14
|
-
outArchivist: ArchivistInstance,
|
|
15
|
-
frequency = 1000,
|
|
16
|
-
traceProvider?: TracerProvider,
|
|
17
|
-
) => {
|
|
18
|
-
const tracer = traceProvider?.getTracer(`archivist-sync-diviner [${name}]`)
|
|
19
|
-
return await spanAsync(`initArchivistSync [${name}]`, async () => {
|
|
20
|
-
const node = await MemoryNode.create({ account: 'random' })
|
|
21
|
-
const finalizedArchivistSyncDiviner = await ArchivistSyncDiviner.create({
|
|
22
|
-
account: 'random',
|
|
23
|
-
inArchivist,
|
|
24
|
-
outArchivist,
|
|
25
|
-
tracer,
|
|
26
|
-
config: { schema: DivinerConfigSchema, name },
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
await node.register(finalizedArchivistSyncDiviner)
|
|
30
|
-
await node.attach(finalizedArchivistSyncDiviner.address)
|
|
31
|
-
|
|
32
|
-
const sentinel = await MemorySentinel.create({
|
|
33
|
-
account: 'random',
|
|
34
|
-
config: {
|
|
35
|
-
name,
|
|
36
|
-
schema: SentinelConfigSchema,
|
|
37
|
-
tasks: [
|
|
38
|
-
{
|
|
39
|
-
required: true,
|
|
40
|
-
mod: finalizedArchivistSyncDiviner.address,
|
|
41
|
-
endPoint: 'divine',
|
|
42
|
-
},
|
|
43
|
-
],
|
|
44
|
-
automations: [
|
|
45
|
-
{
|
|
46
|
-
frequency,
|
|
47
|
-
frequencyUnits: 'millis',
|
|
48
|
-
schema: 'network.xyo.automation.interval',
|
|
49
|
-
start: Date.now(),
|
|
50
|
-
type: 'interval',
|
|
51
|
-
},
|
|
52
|
-
],
|
|
53
|
-
},
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
await node.register(sentinel)
|
|
57
|
-
await node.attach(sentinel.address)
|
|
58
|
-
|
|
59
|
-
return node
|
|
60
|
-
}, tracer)
|
|
61
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { HttpBridge, HttpBridgeConfigSchema } from '@xyo-network/bridge-http'
|
|
2
|
-
import type { AttachableBridgeInstance } from '@xyo-network/bridge-model'
|
|
3
|
-
import { Mutex } from 'async-mutex'
|
|
4
|
-
|
|
5
|
-
const initMutex = new Mutex()
|
|
6
|
-
const bridgeSingletonMap = new Map<string, AttachableBridgeInstance>()
|
|
7
|
-
|
|
8
|
-
export const initBridge = async (nodeUrl: string): Promise<AttachableBridgeInstance> => {
|
|
9
|
-
return await initMutex.runExclusive(async () => {
|
|
10
|
-
const existing = bridgeSingletonMap.get(nodeUrl)
|
|
11
|
-
if (existing) return existing
|
|
12
|
-
const bridge = await HttpBridge.create({
|
|
13
|
-
account: 'random',
|
|
14
|
-
config: {
|
|
15
|
-
name: 'HttpBridge',
|
|
16
|
-
client: { url: nodeUrl, discoverRoots: 'start' },
|
|
17
|
-
schema: HttpBridgeConfigSchema,
|
|
18
|
-
security: { allowAnonymous: true },
|
|
19
|
-
},
|
|
20
|
-
})
|
|
21
|
-
await bridge.start()
|
|
22
|
-
bridgeSingletonMap.set(nodeUrl, bridge)
|
|
23
|
-
return bridge
|
|
24
|
-
})
|
|
25
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { assertEx } from '@xylabs/assert'
|
|
2
|
-
import type { Address } from '@xylabs/hex'
|
|
3
|
-
import type { AttachableArchivistInstance } from '@xyo-network/archivist-model'
|
|
4
|
-
import { asAttachableArchivistInstance } from '@xyo-network/archivist-model'
|
|
5
|
-
import type { BridgeInstance } from '@xyo-network/bridge-model'
|
|
6
|
-
import type { Initializable } from '@xyo-network/chain-model'
|
|
7
|
-
import type { AttachableModuleInstance, ModuleIdentifier } from '@xyo-network/module-model'
|
|
8
|
-
import { asAttachableModuleInstance } from '@xyo-network/module-model'
|
|
9
|
-
import { Mutex } from 'async-mutex'
|
|
10
|
-
|
|
11
|
-
const initMutex = new Mutex()
|
|
12
|
-
const bridgedModuleDictionary: Record<Address, Record<ModuleIdentifier, AttachableModuleInstance>> = {}
|
|
13
|
-
|
|
14
|
-
export const initBridgedModule: Initializable<
|
|
15
|
-
{ bridge: BridgeInstance; moduleName: ModuleIdentifier }, AttachableModuleInstance
|
|
16
|
-
> = async ({ bridge, moduleName }): Promise<AttachableModuleInstance> => {
|
|
17
|
-
return await initMutex.runExclusive(async () => {
|
|
18
|
-
const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName]
|
|
19
|
-
if (existing) return existing
|
|
20
|
-
const mod = assertEx(await bridge.resolve(moduleName), () => `Error: Could not resolve ${moduleName}`)
|
|
21
|
-
const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Error: Could not convert ${moduleName} to attachable module instance`)
|
|
22
|
-
bridgedModuleDictionary[bridge.address] = bridgedModuleDictionary[bridge.address] || {}
|
|
23
|
-
bridgedModuleDictionary[bridge.address][moduleName] = moduleInstance
|
|
24
|
-
return moduleInstance
|
|
25
|
-
})
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export const initBridgedArchivistModule: Initializable<
|
|
29
|
-
{ bridge: BridgeInstance; moduleName: ModuleIdentifier }, AttachableArchivistInstance
|
|
30
|
-
> = async ({ bridge, moduleName }): Promise<AttachableArchivistInstance> => {
|
|
31
|
-
return assertEx(
|
|
32
|
-
asAttachableArchivistInstance(await initBridgedModule({ bridge, moduleName })),
|
|
33
|
-
() => `Error: Could not convert ${moduleName} to attachable archivist instance`,
|
|
34
|
-
)
|
|
35
|
-
}
|