Skip to content

Commit 2e78899

Browse files
authored
Merge pull request #206 from proto-kit/feature/custom-token-bridging
Add support for custom token bridging
2 parents 2d5ca04 + 7896905 commit 2e78899

File tree

59 files changed

+4619
-19417
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+4619
-19417
lines changed

.nvmrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v18.14.2
1+
v22.9.0

package-lock.json

Lines changed: 1909 additions & 18628 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/api/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
"@proto-kit/module": "*",
3535
"@proto-kit/protocol": "*",
3636
"@proto-kit/sequencer": "*",
37-
"o1js": "^1.1.0",
37+
"o1js": "^1.6.0",
3838
"tsyringe": "^4.7.0"
3939
},
4040
"devDependencies": {

packages/common/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"typescript-memoize": "^1.1.1"
2424
},
2525
"peerDependencies": {
26-
"o1js": "^1.1.0",
26+
"o1js": "^1.6.0",
2727
"tsyringe": "^4.7.0"
2828
},
2929
"devDependencies": {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Field, VerificationKey } from "o1js";
2+
3+
export function dummyVerificationKey() {
4+
return new VerificationKey({
5+
hash: Field(
6+
"3392518251768960475377392625298437850623664973002200885669375116181514017494"
7+
),
8+
data: "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",
9+
});
10+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { EventsRecord } from "./EventEmittingComponent";
2+
import { EventEmitter } from "./EventEmitter";
3+
4+
/**
5+
* Event Emitter variant that emits a certain event only once to a registered listener.
6+
* Additionally, if a listener registers to a event that has already been emitted, it
7+
* re-emits it to said listener.
8+
* This pattern is especially useful for listening for inclusions of transactions.
9+
* Those events will only occur once, and listeners could come too late to the party,
10+
* so we need to make sure they get notified as well in those cases.
11+
*/
12+
export class ReplayingSingleUseEventEmitter<
13+
Events extends EventsRecord,
14+
> extends EventEmitter<Events> {
15+
public emitted: Partial<Events> = {};
16+
17+
public emit<Key extends keyof Events>(
18+
event: Key,
19+
...parameters: Events[Key]
20+
) {
21+
super.emit(event, ...parameters);
22+
this.emitted[event] = parameters;
23+
this.listeners[event] = [];
24+
}
25+
26+
public onAll(listener: (event: keyof Events, args: unknown[]) => void) {
27+
Object.entries(this.emitted).forEach(([key, params]) => {
28+
if (params !== undefined) listener(key, params);
29+
});
30+
super.onAll(listener);
31+
}
32+
33+
public on<Key extends keyof Events>(
34+
event: Key,
35+
listener: (...args: Events[Key]) => void
36+
) {
37+
if (this.emitted[event] !== undefined) {
38+
listener(...this.emitted[event]!);
39+
}
40+
super.on(event, listener);
41+
}
42+
}

packages/common/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ export * from "./trees/MerkleTreeStore";
1616
export * from "./trees/InMemoryMerkleTreeStorage";
1717
export * from "./trees/RollupMerkleTree";
1818
export * from "./events/EventEmitterProxy";
19+
export * from "./events/ReplayingSingleUseEventEmitter";
1920
export * from "./trees/MockAsyncMerkleStore";

packages/common/src/utils.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,27 @@ export function requireTrue(
1717
}
1818
}
1919

20+
/**
21+
* Utility function to split an array of type T into a record <K, T[]> based on a
22+
* function T => K that determines the key of each record
23+
*/
24+
export function splitArray<T, K extends string | number>(
25+
arr: T[],
26+
split: (t: T) => K
27+
): Record<K, T[] | undefined> {
28+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
29+
const record = {} as { [Key in K]: T[] };
30+
arr.forEach((element) => {
31+
const k = split(element);
32+
if (record[k] !== undefined) {
33+
record[k].push(element);
34+
} else {
35+
record[k] = [element];
36+
}
37+
});
38+
return record;
39+
}
40+
2041
export function range(
2142
startOrEnd: number,
2243
endOrNothing?: number | undefined
@@ -52,7 +73,7 @@ export function reduceSequential<T, U>(
5273
export function mapSequential<T, R>(
5374
array: T[],
5475
f: (element: T, index: number, array: T[]) => Promise<R>
55-
) {
76+
): Promise<R[]> {
5677
return array.reduce<Promise<R[]>>(async (r, element, index, a) => {
5778
const ret = await r;
5879
const next = await f(element, index, a);

packages/common/src/zkProgrammable/ZkProgrammable.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { ZkProgram, FlexibleProvablePure, Proof, Field, Provable } from "o1js";
22
import { Memoize } from "typescript-memoize";
33

44
import { log } from "../log";
5+
import { dummyVerificationKey } from "../dummyVerificationKey";
56

67
import { MOCK_PROOF } from "./provableMethod";
78

@@ -75,10 +76,7 @@ export function verifyToMockable<PublicInput, PublicOutput>(
7576
};
7677
}
7778

78-
export const MOCK_VERIFICATION_KEY = {
79-
data: "mock-verification-key",
80-
hash: Field(0),
81-
};
79+
export const MOCK_VERIFICATION_KEY = dummyVerificationKey();
8280

8381
export function compileToMockable(
8482
compile: Compile,

packages/common/src/zkProgrammable/provableMethod.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export type ArgumentTypes = (
1515
export type DecoratedMethod = (...args: ArgumentTypes) => Promise<unknown>;
1616

1717
export const MOCK_PROOF = "mock-proof";
18+
// (await Proof.dummy(Field(0), Field(0), 2)).proof as string;
1819

1920
export function toProver(
2021
methodName: string,

0 commit comments

Comments
 (0)