-
Notifications
You must be signed in to change notification settings - Fork 102
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: shielded sync worker to use comlink
- Loading branch information
1 parent
6f596fb
commit f7697d6
Showing
5 changed files
with
102 additions
and
86 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
import { WebWorkerMessage } from "./utils"; | ||
|
||
type InitPayload = { | ||
rpcUrl: string; | ||
token: string; | ||
maspIndexerUrl?: string; | ||
}; | ||
export type Init = WebWorkerMessage<"init", InitPayload>; | ||
export type InitDone = WebWorkerMessage<"init-done", null>; | ||
|
||
type ShiededSyncPayload = { | ||
vks: string[]; | ||
}; | ||
export type Sync = WebWorkerMessage<"sync", ShiededSyncPayload>; | ||
export type SyncDone = WebWorkerMessage<"sync-done", null>; | ||
|
||
export type ShieldMessageIn = Init | Sync; | ||
export type ShieldMessageOut = InitDone | SyncDone; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,66 +1,38 @@ | ||
import init, { initMulticore } from "@heliax/namada-sdk/inline-init"; | ||
import { initMulticore } from "@heliax/namada-sdk/inline-init"; | ||
import * as Comlink from "comlink"; | ||
|
||
import { getSdk } from "@heliax/namada-sdk/web"; | ||
import { getSdk, Sdk } from "@heliax/namada-sdk/web"; | ||
import { Init, InitDone, Sync, SyncDone } from "./ShieldedSyncMessages"; | ||
|
||
export type ShiededSyncPayload = { | ||
vks: string[]; | ||
rpcUrl: string; | ||
maspIndexerUrl?: string; | ||
}; | ||
export class Worker { | ||
private sdk: Sdk | undefined; | ||
|
||
export type ShieldedSyncMulticore = { | ||
type: "shielded-sync-multicore"; | ||
payload: ShiededSyncPayload; | ||
}; | ||
|
||
export type ShieldedSyncSinglecore = { | ||
type: "shielded-sync-singlecore"; | ||
payload: ShiededSyncPayload; | ||
}; | ||
|
||
export type ShieldedSyncMessageType = | ||
| ShieldedSyncMulticore | ||
| ShieldedSyncSinglecore; | ||
|
||
// TODO: replace with comlink | ||
self.onmessage = async (e: MessageEvent<ShieldedSyncMessageType>) => { | ||
const { type, payload } = e.data; | ||
|
||
switch (type) { | ||
case "shielded-sync-singlecore": { | ||
const { cryptoMemory } = await init(); | ||
//eslint-disable-next-line | ||
console.log("Syncing with single core"); | ||
await shieldedSync(cryptoMemory, payload); | ||
break; | ||
} | ||
async init(m: Init): Promise<InitDone> { | ||
const { cryptoMemory } = await initMulticore(); | ||
this.sdk = newSdk(cryptoMemory, m.payload); | ||
return { type: "init-done", payload: null }; | ||
} | ||
|
||
case "shielded-sync-multicore": { | ||
const { cryptoMemory } = await initMulticore(); | ||
//eslint-disable-next-line | ||
console.log("Syncing with multicore"); | ||
await shieldedSync(cryptoMemory, payload); | ||
break; | ||
async sync(m: Sync): Promise<SyncDone> { | ||
if (!this.sdk) { | ||
throw new Error("SDK is not initialized"); | ||
} | ||
|
||
default: | ||
throw new Error(`Unknown message type: ${type}`); | ||
await shieldedSync(this.sdk, m.payload); | ||
return { type: "sync-done", payload: null }; | ||
} | ||
}; | ||
} | ||
|
||
async function shieldedSync( | ||
function newSdk( | ||
cryptoMemory: WebAssembly.Memory, | ||
payload: ShiededSyncPayload | ||
): Promise<void> { | ||
const { rpcUrl, maspIndexerUrl } = payload; | ||
payload: Init["payload"] | ||
): Sdk { | ||
const { rpcUrl, token, maspIndexerUrl } = payload; | ||
return getSdk(cryptoMemory, rpcUrl, maspIndexerUrl || "", "", token); | ||
} | ||
|
||
const sdk = getSdk( | ||
cryptoMemory, | ||
rpcUrl, | ||
maspIndexerUrl || "", | ||
"", | ||
// Not really used, but required by the SDK, as long as it's valid address it's fine | ||
"tnam1qxfj3sf6a0meahdu9t6znp05g8zx4dkjtgyn9gfu" | ||
); | ||
async function shieldedSync(sdk: Sdk, payload: Sync["payload"]): Promise<void> { | ||
await sdk.rpc.shieldedSync(payload.vks); | ||
} | ||
|
||
Comlink.expose(new Worker()); |