@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.
@@ -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","../../src/orchestration/archivist/initArchivistSync.ts","../../src/orchestration/bridge.ts","../../src/orchestration/initBridgedModule.ts"],"sourcesContent":["export * from './index-shared.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"],"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"]}
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":[]}
@@ -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 as assertEx2 } from "@xylabs/assert";
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
- assertEx2(balance === totalSupply, () => "Balance does not match total supply");
244
- return assertEx2(asAddress(erc20Address), () => "Invalid ERC20 contract address");
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
- assertEx2(balance === transferAmount, () => "Balance does not match transfer amount");
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 assertEx2(asAddress(xyoChainContractAddress), () => "Invalid staking contract address");
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"]}
@@ -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 as assertEx2 } from "@xylabs/assert";
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
- assertEx2(balance === totalSupply, () => "Balance does not match total supply");
260
- return assertEx2(asAddress(erc20Address), () => "Invalid ERC20 contract address");
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
- assertEx2(balance === transferAmount, () => "Balance does not match transfer amount");
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 assertEx2(asAddress(xyoChainContractAddress), () => "Invalid staking contract address");
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,0BAA0B,CAAA;AACxC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA"}
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.0",
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
- "@opentelemetry/api": "^1.9.0",
50
- "@xylabs/assert": "^4.7.15",
51
- "@xylabs/delay": "^4.7.15",
52
- "@xylabs/hex": "^4.7.15",
53
- "@xyo-network/account": "^3.10.6",
54
- "@xyo-network/archivist-model": "^3.10.6",
55
- "@xyo-network/bridge-http": "^3.10.6",
56
- "@xyo-network/bridge-model": "^3.10.6",
57
- "@xyo-network/chain-ethereum": "^1.1.0",
58
- "@xyo-network/chain-model": "^1.1.0",
59
- "@xyo-network/chain-modules": "^1.1.0",
60
- "@xyo-network/chain-protocol": "^1.1.0",
61
- "@xyo-network/chain-services": "^1.1.0",
62
- "@xyo-network/chain-utils": "^1.1.0",
63
- "@xyo-network/chain-validation": "^1.1.0",
64
- "@xyo-network/diviner-model": "^3.10.6",
65
- "@xyo-network/module-model": "^3.10.6",
66
- "@xyo-network/node-memory": "^3.10.6",
67
- "@xyo-network/payload-builder": "^3.10.6",
68
- "@xyo-network/payload-model": "^3.10.6",
69
- "@xyo-network/sentinel-memory": "^3.10.6",
70
- "@xyo-network/sentinel-model": "^3.10.6",
71
- "@xyo-network/typechain": "^3.4.17",
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.13.17",
77
- "@xylabs/decimal-precision": "^4.7.15",
78
- "@xylabs/delay": "^4.7.15",
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.10.6",
82
- "@xyo-network/account-model": "^3.10.6",
83
- "@xyo-network/archivist-memory": "^3.10.6",
84
- "@xyo-network/boundwitness-builder": "^3.10.6",
85
- "@xyo-network/payload-model": "^3.10.6",
86
- "eslint": "^9.23.0",
87
- "typescript": "^5.8.2",
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,
@@ -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,2 +0,0 @@
1
- export * from './initArchivistSync.ts';
2
- //# sourceMappingURL=index.d.ts.map
@@ -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,3 +0,0 @@
1
- import type { AttachableBridgeInstance } from '@xyo-network/bridge-model';
2
- export declare const initBridge: (nodeUrl: string) => Promise<AttachableBridgeInstance>;
3
- //# sourceMappingURL=bridge.d.ts.map
@@ -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,4 +0,0 @@
1
- export * from './archivist/index.ts';
2
- export * from './bridge.ts';
3
- export * from './initBridgedModule.ts';
4
- //# sourceMappingURL=index.d.ts.map
@@ -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,3 +0,0 @@
1
- export * from './archivist/index.ts'
2
- export * from './bridge.ts'
3
- export * from './initBridgedModule.ts'
@@ -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
- }