@xyo-network/chain-sdk 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +165 -0
- package/README.md +57 -0
- package/babel.config.json +6 -0
- package/dist/browser/index-browser.mjs +170 -0
- package/dist/browser/index-browser.mjs.map +1 -0
- package/dist/neutral/index.mjs +311 -0
- package/dist/neutral/index.mjs.map +1 -0
- package/dist/node/index-node.mjs +330 -0
- package/dist/node/index-node.mjs.map +1 -0
- package/dist/types/index-browser.d.ts +2 -0
- package/dist/types/index-browser.d.ts.map +1 -0
- package/dist/types/index-node.d.ts +2 -0
- package/dist/types/index-node.d.ts.map +1 -0
- package/dist/types/index-shared.d.ts +9 -0
- package/dist/types/index-shared.d.ts.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/orchestration/archivist/index.d.ts +2 -0
- package/dist/types/orchestration/archivist/index.d.ts.map +1 -0
- package/dist/types/orchestration/archivist/initArchivistSync.d.ts +16 -0
- package/dist/types/orchestration/archivist/initArchivistSync.d.ts.map +1 -0
- package/dist/types/orchestration/bridge.d.ts +3 -0
- package/dist/types/orchestration/bridge.d.ts.map +1 -0
- package/dist/types/orchestration/index.d.ts +4 -0
- package/dist/types/orchestration/index.d.ts.map +1 -0
- package/dist/types/orchestration/initBridgedModule.d.ts +13 -0
- package/dist/types/orchestration/initBridgedModule.d.ts.map +1 -0
- package/dist/types/test/evm/index.d.ts +3 -0
- package/dist/types/test/evm/index.d.ts.map +1 -0
- package/dist/types/test/evm/runGanache.d.ts +4 -0
- package/dist/types/test/evm/runGanache.d.ts.map +1 -0
- package/dist/types/test/evm/setup.d.ts +2 -0
- package/dist/types/test/evm/setup.d.ts.map +1 -0
- package/dist/types/test/evm/stakingContractUtils.d.ts +9 -0
- package/dist/types/test/evm/stakingContractUtils.d.ts.map +1 -0
- package/dist/types/test/globalSetup.d.ts +2 -0
- package/dist/types/test/globalSetup.d.ts.map +1 -0
- package/dist/types/test/index.d.ts +2 -0
- package/dist/types/test/index.d.ts.map +1 -0
- package/package.json +120 -0
- package/src/Layers.md +64 -0
- package/src/index-browser.ts +1 -0
- package/src/index-node.ts +1 -0
- package/src/index-shared.ts +8 -0
- package/src/index.ts +2 -0
- package/src/orchestration/archivist/index.ts +1 -0
- package/src/orchestration/archivist/initArchivistSync.ts +61 -0
- package/src/orchestration/bridge.ts +25 -0
- package/src/orchestration/index.ts +3 -0
- package/src/orchestration/initBridgedModule.ts +35 -0
- package/src/test/evm/index.ts +2 -0
- package/src/test/evm/runGanache.ts +41 -0
- package/src/test/evm/setup.ts +75 -0
- package/src/test/evm/stakingContractUtils.ts +109 -0
- package/src/test/globalSetup.ts +14 -0
- package/src/test/index.ts +1 -0
- package/xy.config.ts +10 -0
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
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
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
19
|
+
|
|
20
|
+
// src/index-node.ts
|
|
21
|
+
var index_node_exports = {};
|
|
22
|
+
__export(index_node_exports, {
|
|
23
|
+
approveTestStakeChainAddress: () => approveTestStakeChainAddress,
|
|
24
|
+
createTestChainContract: () => createTestChainContract,
|
|
25
|
+
createTestErc20: () => createTestErc20,
|
|
26
|
+
createTestGenesisBlock: () => createTestGenesisBlock,
|
|
27
|
+
initArchivistSync: () => initArchivistSync,
|
|
28
|
+
initBridge: () => initBridge,
|
|
29
|
+
initBridgedArchivistModule: () => initBridgedArchivistModule,
|
|
30
|
+
initBridgedModule: () => initBridgedModule,
|
|
31
|
+
startGanache: () => startGanache,
|
|
32
|
+
stopGanache: () => stopGanache,
|
|
33
|
+
transferTestTokens: () => transferTestTokens
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// src/index.ts
|
|
37
|
+
var index_exports = {};
|
|
38
|
+
__export(index_exports, {
|
|
39
|
+
approveTestStakeChainAddress: () => approveTestStakeChainAddress,
|
|
40
|
+
createTestChainContract: () => createTestChainContract,
|
|
41
|
+
createTestErc20: () => createTestErc20,
|
|
42
|
+
createTestGenesisBlock: () => createTestGenesisBlock,
|
|
43
|
+
initArchivistSync: () => initArchivistSync,
|
|
44
|
+
initBridge: () => initBridge,
|
|
45
|
+
initBridgedArchivistModule: () => initBridgedArchivistModule,
|
|
46
|
+
initBridgedModule: () => initBridgedModule,
|
|
47
|
+
startGanache: () => startGanache,
|
|
48
|
+
stopGanache: () => stopGanache,
|
|
49
|
+
transferTestTokens: () => transferTestTokens
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// src/index-shared.ts
|
|
53
|
+
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
|
+
__reExport(index_shared_exports, chain_ethereum_star);
|
|
171
|
+
__reExport(index_shared_exports, chain_model_star);
|
|
172
|
+
__reExport(index_shared_exports, chain_modules_star);
|
|
173
|
+
__reExport(index_shared_exports, chain_protocol_star);
|
|
174
|
+
__reExport(index_shared_exports, chain_services_star);
|
|
175
|
+
__reExport(index_shared_exports, chain_utils_star);
|
|
176
|
+
__reExport(index_shared_exports, chain_validation_star);
|
|
177
|
+
import * as chain_ethereum_star from "@xyo-network/chain-ethereum";
|
|
178
|
+
import * as chain_model_star from "@xyo-network/chain-model";
|
|
179
|
+
import * as chain_modules_star from "@xyo-network/chain-modules";
|
|
180
|
+
import * as chain_protocol_star from "@xyo-network/chain-protocol";
|
|
181
|
+
import * as chain_services_star from "@xyo-network/chain-services";
|
|
182
|
+
import * as chain_utils_star from "@xyo-network/chain-utils";
|
|
183
|
+
import * as chain_validation_star from "@xyo-network/chain-validation";
|
|
184
|
+
|
|
185
|
+
// src/index.ts
|
|
186
|
+
__reExport(index_exports, index_shared_exports);
|
|
187
|
+
|
|
188
|
+
// src/test/evm/runGanache.ts
|
|
189
|
+
import { spawn } from "node:child_process";
|
|
190
|
+
import { delay } from "@xylabs/delay";
|
|
191
|
+
import { JsonRpcProvider } from "ethers/providers";
|
|
192
|
+
async function isGanacheRunning(url) {
|
|
193
|
+
try {
|
|
194
|
+
const provider = new JsonRpcProvider(url);
|
|
195
|
+
await provider.getBlockNumber();
|
|
196
|
+
return true;
|
|
197
|
+
} catch {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
__name(isGanacheRunning, "isGanacheRunning");
|
|
202
|
+
async function startGanache(port, mnemonic) {
|
|
203
|
+
console.log("Starting Ganache CLI...");
|
|
204
|
+
const ganacheProcess = spawn("yarn", [
|
|
205
|
+
"ganache",
|
|
206
|
+
"--port",
|
|
207
|
+
`${port}`,
|
|
208
|
+
"--chain.chainId",
|
|
209
|
+
"1337",
|
|
210
|
+
"--mnemonic",
|
|
211
|
+
mnemonic
|
|
212
|
+
], {
|
|
213
|
+
stdio: "inherit"
|
|
214
|
+
});
|
|
215
|
+
while (!await isGanacheRunning(`http://127.0.0.1:${port}`)) {
|
|
216
|
+
await delay(500);
|
|
217
|
+
}
|
|
218
|
+
return ganacheProcess;
|
|
219
|
+
}
|
|
220
|
+
__name(startGanache, "startGanache");
|
|
221
|
+
function stopGanache(process) {
|
|
222
|
+
console.log("Stopping Ganache CLI...");
|
|
223
|
+
if (process) {
|
|
224
|
+
process.kill("SIGTERM");
|
|
225
|
+
console.log("Ganache CLI stopped.");
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
__name(stopGanache, "stopGanache");
|
|
229
|
+
|
|
230
|
+
// src/test/evm/stakingContractUtils.ts
|
|
231
|
+
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
232
|
+
import { createChain } from "@xyo-network/chain-ethereum";
|
|
233
|
+
import { ChainStakeIntentSchema } from "@xyo-network/chain-model";
|
|
234
|
+
import { buildBlock, buildTransaction } from "@xyo-network/chain-protocol";
|
|
235
|
+
import { XYO_ZERO_ADDRESS } from "@xyo-network/chain-utils";
|
|
236
|
+
import { asAddress } from "@xylabs/hex";
|
|
237
|
+
import { Account } from "@xyo-network/account";
|
|
238
|
+
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
239
|
+
import { BurnableErc20__factory as Erc20Factory } from "@xyo-network/typechain";
|
|
240
|
+
import { getAddress } from "ethers/address";
|
|
241
|
+
import { JsonRpcProvider as JsonRpcProvider2 } from "ethers/providers";
|
|
242
|
+
import { parseUnits } from "ethers/utils";
|
|
243
|
+
import { Wallet } from "ethers/wallet";
|
|
244
|
+
var gasConfig = /* @__PURE__ */ __name(() => {
|
|
245
|
+
return {
|
|
246
|
+
gasLimit: 2e6,
|
|
247
|
+
gasPrice: parseUnits("100", "gwei")
|
|
248
|
+
};
|
|
249
|
+
}, "gasConfig");
|
|
250
|
+
var createTestErc20 = /* @__PURE__ */ __name(async (ganachePort, testPhrase, contractCreator) => {
|
|
251
|
+
const provider = new JsonRpcProvider2(`http://127.0.0.1:${ganachePort}`, 1337);
|
|
252
|
+
const ethWallet = new Wallet(contractCreator.privateKey, provider);
|
|
253
|
+
const erc20 = new Erc20Factory(ethWallet);
|
|
254
|
+
const totalSupply = parseUnits("1000000", 18);
|
|
255
|
+
const erc20Contract = await (await erc20.deploy("Test Token", "TST", totalSupply, gasConfig())).waitForDeployment();
|
|
256
|
+
const erc20Address = await erc20Contract.getAddress();
|
|
257
|
+
const erc20ContractPerson0 = Erc20Factory.connect(erc20Address, ethWallet);
|
|
258
|
+
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");
|
|
261
|
+
}, "createTestErc20");
|
|
262
|
+
var transferTestTokens = /* @__PURE__ */ __name(async (ganachePort, erc20Address, account0, account1) => {
|
|
263
|
+
const provider0 = new JsonRpcProvider2(`http://127.0.0.1:${ganachePort}`, 1337);
|
|
264
|
+
const ethWalletPerson0 = new Wallet(account0.privateKey, provider0);
|
|
265
|
+
const provider1 = new JsonRpcProvider2(`http://127.0.0.1:${ganachePort}`, 1337);
|
|
266
|
+
const ethWalletPerson1 = new Wallet(account1.privateKey, provider1);
|
|
267
|
+
const erc20ContractPerson0 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson0);
|
|
268
|
+
const transferAmount = parseUnits("1000", 18);
|
|
269
|
+
await (await erc20ContractPerson0.transfer(ethWalletPerson1.address, transferAmount, gasConfig())).wait();
|
|
270
|
+
const erc20ContractPerson1 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson1);
|
|
271
|
+
const balance = await erc20ContractPerson1.balanceOf(ethWalletPerson1.address);
|
|
272
|
+
assertEx2(balance === transferAmount, () => "Balance does not match transfer amount");
|
|
273
|
+
}, "transferTestTokens");
|
|
274
|
+
var createTestChainContract = /* @__PURE__ */ __name(async (ganachePort, erc20Address, account0, initialProducer) => {
|
|
275
|
+
const provider0 = new JsonRpcProvider2(`http://127.0.0.1:${ganachePort}`, 1337);
|
|
276
|
+
const ethWalletPerson0 = new Wallet(account0.privateKey, provider0);
|
|
277
|
+
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");
|
|
279
|
+
}, "createTestChainContract");
|
|
280
|
+
var approveTestStakeChainAddress = /* @__PURE__ */ __name(async (ganachePort, erc20Address, xyoChainContractAddress, account1) => {
|
|
281
|
+
const provider1 = new JsonRpcProvider2(`http://127.0.0.1:${ganachePort}`, 1337);
|
|
282
|
+
const ethWalletPerson1 = new Wallet(account1.privateKey, provider1);
|
|
283
|
+
const erc20ContractPerson1 = Erc20Factory.connect(getAddress(erc20Address), ethWalletPerson1);
|
|
284
|
+
const _approveResultTx = await (await erc20ContractPerson1.approve(getAddress(xyoChainContractAddress), parseUnits("100", 18), gasConfig())).wait();
|
|
285
|
+
}, "approveTestStakeChainAddress");
|
|
286
|
+
var createTestGenesisBlock = /* @__PURE__ */ __name(async (blockProducerAccounts) => {
|
|
287
|
+
const randomChainId = (await Account.random()).address;
|
|
288
|
+
const signedStakedBlockProducerIntents = await Promise.all(blockProducerAccounts.map(async (blockProducerAccount) => {
|
|
289
|
+
const stakeIntent = new PayloadBuilder({
|
|
290
|
+
schema: ChainStakeIntentSchema
|
|
291
|
+
}).fields({
|
|
292
|
+
from: blockProducerAccount.address,
|
|
293
|
+
exp: Number.MAX_SAFE_INTEGER,
|
|
294
|
+
nbf: 0,
|
|
295
|
+
intent: "producer"
|
|
296
|
+
}).build();
|
|
297
|
+
const signedStakedBlockProducerIntent = await buildTransaction(randomChainId, [
|
|
298
|
+
stakeIntent
|
|
299
|
+
], 0n, blockProducerAccount, 0, 1e3, []);
|
|
300
|
+
return signedStakedBlockProducerIntent;
|
|
301
|
+
}));
|
|
302
|
+
const intents = signedStakedBlockProducerIntents.map((intent) => intent[0]);
|
|
303
|
+
const payloads = signedStakedBlockProducerIntents.flatMap((intent) => intent[1]);
|
|
304
|
+
const [firstBlock, signedTransactionBws] = await buildBlock(randomChainId, signedStakedBlockProducerIntents, [], blockProducerAccounts);
|
|
305
|
+
return [
|
|
306
|
+
firstBlock,
|
|
307
|
+
[
|
|
308
|
+
...intents,
|
|
309
|
+
...signedTransactionBws,
|
|
310
|
+
...payloads
|
|
311
|
+
]
|
|
312
|
+
];
|
|
313
|
+
}, "createTestGenesisBlock");
|
|
314
|
+
|
|
315
|
+
// src/index-node.ts
|
|
316
|
+
__reExport(index_node_exports, index_exports);
|
|
317
|
+
export {
|
|
318
|
+
approveTestStakeChainAddress,
|
|
319
|
+
createTestChainContract,
|
|
320
|
+
createTestErc20,
|
|
321
|
+
createTestGenesisBlock,
|
|
322
|
+
initArchivistSync,
|
|
323
|
+
initBridge,
|
|
324
|
+
initBridgedArchivistModule,
|
|
325
|
+
initBridgedModule,
|
|
326
|
+
startGanache,
|
|
327
|
+
stopGanache,
|
|
328
|
+
transferTestTokens
|
|
329
|
+
};
|
|
330
|
+
//# sourceMappingURL=index-node.mjs.map
|
|
@@ -0,0 +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":["export * 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'","import { TracerProvider } from '@opentelemetry/api'\nimport { ArchivistSyncDiviner } from '@xyo-network/chain-modules'\nimport { spanAsync } from '@xyo-network/chain-utils'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { 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 { 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 { Initializable } from '@xyo-network/chain-model'\nimport { Address } from '@xylabs/hex'\nimport { asAttachableArchivistInstance, AttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport { BridgeInstance } from '@xyo-network/bridge-model'\nimport {\n asAttachableModuleInstance, AttachableModuleInstance, ModuleIdentifier,\n} 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 { ChildProcess, 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 { createChain } from '@xyo-network/chain-ethereum'\nimport { ChainStakeIntent, ChainStakeIntentSchema, HydratedBlock } from '@xyo-network/chain-model'\nimport {\n buildBlock, buildTransaction \n} from '@xyo-network/chain-protocol'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport { Address, asAddress } from '@xylabs/hex'\nimport {\n Account, AccountInstance, WalletInstance,\n} from '@xyo-network/account'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\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<ChainStakeIntent>({ schema: ChainStakeIntentSchema }).fields({\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 0n,\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])\n const [firstBlock, signedTransactionBws] = await buildBlock(randomChainId, signedStakedBlockProducerIntents, [], blockProducerAccounts)\n return [firstBlock, [...intents, ...signedTransactionBws, ...payloads]] as const\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","createChain","ChainStakeIntentSchema","buildBlock","buildTransaction","XYO_ZERO_ADDRESS","asAddress","Account","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","from","exp","Number","MAX_SAFE_INTEGER","nbf","intent","build","signedStakedBlockProducerIntent","buildTransaction","intents","payloads","flatMap","firstBlock","signedTransactionBws","buildBlock"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-node.d.ts","sourceRoot":"","sources":["../../src/index-node.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './orchestration/index.ts';
|
|
2
|
+
export * from '@xyo-network/chain-ethereum';
|
|
3
|
+
export * from '@xyo-network/chain-model';
|
|
4
|
+
export * from '@xyo-network/chain-modules';
|
|
5
|
+
export * from '@xyo-network/chain-protocol';
|
|
6
|
+
export * from '@xyo-network/chain-services';
|
|
7
|
+
export * from '@xyo-network/chain-utils';
|
|
8
|
+
export * from '@xyo-network/chain-validation';
|
|
9
|
+
//# sourceMappingURL=index-shared.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/archivist/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TracerProvider } from '@opentelemetry/api';
|
|
2
|
+
import { ArchivistInstance } from '@xyo-network/archivist-model';
|
|
3
|
+
import { 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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initArchivistSync.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/archivist/initArchivistSync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../src/orchestration/bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAMpE,eAAO,MAAM,UAAU,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,wBAAwB,CAiBlF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Initializable } from '@xyo-network/chain-model';
|
|
2
|
+
import { AttachableArchivistInstance } from '@xyo-network/archivist-model';
|
|
3
|
+
import { BridgeInstance } from '@xyo-network/bridge-model';
|
|
4
|
+
import { 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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initBridgedModule.d.ts","sourceRoot":"","sources":["../../../src/orchestration/initBridgedModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAExD,OAAO,EAAiC,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AACzG,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EACuB,wBAAwB,EAAE,gBAAgB,EACvE,MAAM,2BAA2B,CAAA;AAMlC,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/test/evm/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2BAA2B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runGanache.d.ts","sourceRoot":"","sources":["../../../../src/test/evm/runGanache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,oBAAoB,CAAA;AAexD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,yBAgBhE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,QAOhD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../src/test/evm/setup.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { HydratedBlock } from '@xyo-network/chain-model';
|
|
2
|
+
import { Address } from '@xylabs/hex';
|
|
3
|
+
import { AccountInstance, WalletInstance } from '@xyo-network/account';
|
|
4
|
+
export declare const createTestErc20: (ganachePort: number, testPhrase: string, contractCreator: WalletInstance) => Promise<Address>;
|
|
5
|
+
export declare const transferTestTokens: (ganachePort: number, erc20Address: Address, account0: WalletInstance, account1: WalletInstance) => Promise<void>;
|
|
6
|
+
export declare const createTestChainContract: (ganachePort: number, erc20Address: Address, account0: WalletInstance, initialProducer: AccountInstance) => Promise<Address>;
|
|
7
|
+
export declare const approveTestStakeChainAddress: (ganachePort: number, erc20Address: Address, xyoChainContractAddress: Address, account1: WalletInstance) => Promise<void>;
|
|
8
|
+
export declare const createTestGenesisBlock: (blockProducerAccounts: WalletInstance[]) => Promise<HydratedBlock>;
|
|
9
|
+
//# sourceMappingURL=stakingContractUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stakingContractUtils.d.ts","sourceRoot":"","sources":["../../../../src/test/evm/stakingContractUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4C,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAKlG,OAAO,EAAE,OAAO,EAAa,MAAM,aAAa,CAAA;AAChD,OAAO,EACI,eAAe,EAAE,cAAc,EACzC,MAAM,sBAAsB,CAAA;AAe7B,eAAO,MAAM,eAAe,GAAU,aAAa,MAAM,EAAE,YAAY,MAAM,EAAE,iBAAiB,cAAc,KAAG,OAAO,CAAC,OAAO,CAW/H,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,aAAa,MAAM,EAAE,cAAc,OAAO,EAAE,UAAU,cAAc,EAAE,UAAU,cAAc,kBAWtI,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,aAAa,MAAM,EACnB,cAAc,OAAO,EACrB,UAAU,cAAc,EACxB,iBAAiB,eAAe,KAC/B,OAAO,CAAC,OAAO,CAcjB,CAAA;AAED,eAAO,MAAM,4BAA4B,GAAU,aAAa,MAAM,EAAE,cAAc,OAAO,EAAE,yBAAyB,OAAO,EAAE,UAAU,cAAc,kBAMxJ,CAAA;AAED,eAAO,MAAM,sBAAsB,GACjC,uBAAuB,cAAc,EAAE,KACtC,OAAO,CAAC,aAAa,CA0BvB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalSetup.d.ts","sourceRoot":"","sources":["../../../src/test/globalSetup.ts"],"names":[],"mappings":"AAMA,wBAA8B,WAAW,iCAOxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/test/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
|