@vlayer/sdk 0.1.0-nightly-20241028-74b5b0d → 0.1.0-nightly-202410292-42360cf
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/api/email/dnsResolver.d.ts +1 -0
- package/dist/api/email/dnsResolver.js +6 -0
- package/dist/api/email/dnsResolver.test.d.ts +1 -0
- package/dist/api/email/dnsResolver.test.js +12 -0
- package/dist/api/email/parseEmail.d.ts +10 -0
- package/dist/api/email/parseEmail.js +38 -0
- package/dist/api/email/parseEmail.test.d.ts +1 -0
- package/dist/api/email/parseEmail.test.js +91 -0
- package/dist/api/email/preverify.d.ts +4 -0
- package/dist/api/email/preverify.js +18 -0
- package/dist/api/email/preverify.test.d.ts +1 -0
- package/dist/api/email/preverify.test.js +25 -0
- package/dist/api/helpers.d.ts +38 -0
- package/dist/api/helpers.js +72 -0
- package/dist/api/lib/client.d.ts +6 -0
- package/dist/api/lib/client.js +45 -0
- package/dist/api/lib/types/ethereum.d.ts +14 -0
- package/dist/api/lib/types/ethereum.js +12 -0
- package/dist/api/lib/types/index.js +3 -0
- package/dist/api/lib/types/viem.d.ts +8 -0
- package/dist/api/lib/types/viem.js +1 -0
- package/dist/api/lib/types/vlayer.d.ts +47 -0
- package/dist/api/lib/types/vlayer.js +1 -0
- package/dist/api/lib/types/webProofProvider.d.ts +29 -0
- package/dist/api/lib/types/webProofProvider.js +1 -0
- package/dist/api/prover.d.ts +2 -0
- package/dist/api/prover.js +15 -0
- package/dist/api/v_call.d.ts +2 -0
- package/dist/api/v_call.js +30 -0
- package/dist/api/webProof/createWebProof.d.ts +2 -0
- package/dist/api/webProof/createWebProof.js +7 -0
- package/dist/api/webProof/index.js +3 -0
- package/dist/api/webProof/providers/extension.d.ts +2 -0
- package/dist/api/webProof/providers/extension.js +32 -0
- package/dist/api/webProof/providers/index.js +1 -0
- package/dist/api/webProof/steps/expectUrl.d.ts +2 -0
- package/dist/api/webProof/steps/expectUrl.js +8 -0
- package/dist/api/webProof/steps/index.d.ts +9 -0
- package/dist/api/webProof/steps/index.js +9 -0
- package/dist/api/webProof/steps/notarize.d.ts +2 -0
- package/dist/api/webProof/steps/notarize.js +9 -0
- package/dist/api/webProof/steps/startPage.d.ts +2 -0
- package/dist/api/webProof/steps/startPage.js +8 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +7 -0
- package/dist/testHelpers/readFile.d.ts +1 -0
- package/dist/testHelpers/readFile.js +2 -0
- package/dist/web-proof-commons/index.d.ts +3 -0
- package/dist/web-proof-commons/index.js +3 -0
- package/dist/web-proof-commons/types/message.d.ts +56 -0
- package/dist/web-proof-commons/types/message.js +5 -0
- package/dist/web-proof-commons/types/webProof.d.ts +86 -0
- package/dist/web-proof-commons/types/webProof.js +10 -0
- package/dist/web-proof-commons/utils.d.ts +7 -0
- package/dist/web-proof-commons/utils.js +5 -0
- package/package.json +16 -7
- package/.changeset/config.json +0 -11
- package/CHANGELOG.md +0 -7
- package/eslint.config.ts +0 -22
- package/src/api/email/dnsResolver.test.ts +0 -18
- package/src/api/email/dnsResolver.ts +0 -7
- package/src/api/email/parseEmail.test.ts +0 -133
- package/src/api/email/parseEmail.ts +0 -49
- package/src/api/email/preverify.test.ts +0 -37
- package/src/api/email/preverify.ts +0 -19
- package/src/api/email/testdata/test_email.txt +0 -21
- package/src/api/email/testdata/test_email_multiple_dkims.txt +0 -28
- package/src/api/email/testdata/test_email_unknown_domain.txt +0 -21
- package/src/api/helpers.ts +0 -173
- package/src/api/lib/client.ts +0 -76
- package/src/api/lib/types/ethereum.ts +0 -43
- package/src/api/lib/types/viem.ts +0 -28
- package/src/api/lib/types/vlayer.ts +0 -60
- package/src/api/lib/types/webProofProvider.ts +0 -44
- package/src/api/prover.ts +0 -34
- package/src/api/v_call.ts +0 -45
- package/src/api/webProof/createWebProof.ts +0 -9
- package/src/api/webProof/providers/extension.ts +0 -72
- package/src/api/webProof/steps/expectUrl.ts +0 -12
- package/src/api/webProof/steps/index.ts +0 -11
- package/src/api/webProof/steps/notarize.ts +0 -17
- package/src/api/webProof/steps/startPage.ts +0 -12
- package/src/index.ts +0 -9
- package/src/testHelpers/readFile.ts +0 -3
- package/src/web-proof-commons/index.ts +0 -3
- package/src/web-proof-commons/types/message.ts +0 -73
- package/src/web-proof-commons/types/webProof.ts +0 -111
- package/src/web-proof-commons/utils.ts +0 -12
- package/tsconfig.json +0 -24
- package/vite.config.ts +0 -7
- /package/{src/api/lib/types/index.ts → dist/api/lib/types/index.d.ts} +0 -0
- /package/{src/api/webProof/index.ts → dist/api/webProof/index.d.ts} +0 -0
- /package/{src/api/webProof/providers/index.ts → dist/api/webProof/providers/index.d.ts} +0 -0
@@ -1,28 +0,0 @@
|
|
1
|
-
DKIM-Signature: a=rsa-sha256; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
|
2
|
-
c=simple/simple; d=google.com;
|
3
|
-
h=Received:From:To:Subject:Date:Message-ID; i=joe@football.example.com;
|
4
|
-
s=20230601; t=1615825284; v=1;
|
5
|
-
b=Xh4Ujb2wv5x54gXtulCiy4C0e+plRm6pZ4owF+kICpYzs/8WkTVIDBrzhJP0DAYCpnL62T0G
|
6
|
-
k+0OH8pi/yqETVjKtKk+peMnNvKkut0GeWZMTze0bfq3/JUK3Ln3jTzzpXxrgVnvBxeY9EZIL4g
|
7
|
-
s4wwFRRKz/1bksZGSjD8uuSU=
|
8
|
-
DKIM-Signature: a=rsa-sha256; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
|
9
|
-
c=simple/simple; d=google.com;
|
10
|
-
h=Received:From:To:Subject:Date:Message-ID; i=joe@football.example.com;
|
11
|
-
s=20230601; t=1615825284; v=1;
|
12
|
-
b=Xh4Ujb2wv5x54gXtulCiy4C0e+plRm6pZ4owF+kICpYzs/8WkTVIDBrzhJP0DAYCpnL62T0G
|
13
|
-
k+0OH8pi/yqETVjKtKk+peMnNvKkut0GeWZMTze0bfq3/JUK3Ln3jTzzpXxrgVnvBxeY9EZIL4g
|
14
|
-
s4wwFRRKz/1bksZGSjD8uuSU=
|
15
|
-
Received: from client1.football.example.com [192.0.2.1]
|
16
|
-
by submitserver.example.com with SUBMISSION;
|
17
|
-
Fri, 11 Jul 2003 21:01:54 -0700 (PDT)
|
18
|
-
From: Joe SixPack <joe@football.example.com>
|
19
|
-
To: Suzie Q <suzie@shopping.example.net>
|
20
|
-
Subject: Is dinner ready?
|
21
|
-
Date: Fri, 11 Jul 2003 21:00:37 -0700 (PDT)
|
22
|
-
Message-ID: <20030712040037.46341.5F8J@football.example.com>
|
23
|
-
|
24
|
-
Hi.
|
25
|
-
|
26
|
-
We lost the game. Are you hungry yet?
|
27
|
-
|
28
|
-
Joe.
|
@@ -1,21 +0,0 @@
|
|
1
|
-
DKIM-Signature: a=rsa-sha256; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
|
2
|
-
c=simple/simple; d=foobar.xyz;
|
3
|
-
h=Received:From:To:Subject:Date:Message-ID; i=joe@football.example.com;
|
4
|
-
s=wertyu; t=1615825284; v=1;
|
5
|
-
b=Xh4Ujb2wv5x54gXtulCiy4C0e+plRm6pZ4owF+kICpYzs/8WkTVIDBrzhJP0DAYCpnL62T0G
|
6
|
-
k+0OH8pi/yqETVjKtKk+peMnNvKkut0GeWZMTze0bfq3/JUK3Ln3jTzzpXxrgVnvBxeY9EZIL4g
|
7
|
-
s4wwFRRKz/1bksZGSjD8uuSU=
|
8
|
-
Received: from client1.football.example.com [192.0.2.1]
|
9
|
-
by submitserver.example.com with SUBMISSION;
|
10
|
-
Fri, 11 Jul 2003 21:01:54 -0700 (PDT)
|
11
|
-
From: Joe SixPack <joe@football.example.com>
|
12
|
-
To: Suzie Q <suzie@shopping.example.net>
|
13
|
-
Subject: Is dinner ready?
|
14
|
-
Date: Fri, 11 Jul 2003 21:00:37 -0700 (PDT)
|
15
|
-
Message-ID: <20030712040037.46341.5F8J@football.example.com>
|
16
|
-
|
17
|
-
Hi.
|
18
|
-
|
19
|
-
We lost the game. Are you hungry yet?
|
20
|
-
|
21
|
-
Joe.
|
package/src/api/helpers.ts
DELETED
@@ -1,173 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
type Abi,
|
3
|
-
Account,
|
4
|
-
type Address,
|
5
|
-
type Chain,
|
6
|
-
type ContractFunctionArgs,
|
7
|
-
type ContractFunctionName,
|
8
|
-
createTestClient,
|
9
|
-
type Hex,
|
10
|
-
http,
|
11
|
-
HttpTransport,
|
12
|
-
publicActions,
|
13
|
-
PublicClient,
|
14
|
-
walletActions,
|
15
|
-
WriteContractParameters,
|
16
|
-
} from "viem";
|
17
|
-
|
18
|
-
import { privateKeyToAccount, generatePrivateKey } from "viem/accounts";
|
19
|
-
import { foundry } from "viem/chains";
|
20
|
-
|
21
|
-
import type { ContractSpec, ContractArg } from "types/ethereum";
|
22
|
-
|
23
|
-
const rpcUrls: Map<number, HttpTransport> = new Map([[foundry.id, http()]]);
|
24
|
-
|
25
|
-
export const chainIds = [foundry.id];
|
26
|
-
|
27
|
-
export function createAnvilClient(
|
28
|
-
chainId: number = foundry.id,
|
29
|
-
): ReturnType<typeof walletActions> & PublicClient {
|
30
|
-
const transport = rpcUrls.get(chainId);
|
31
|
-
if (transport == undefined) {
|
32
|
-
throw Error(`No url for chainId ${chainId}`);
|
33
|
-
}
|
34
|
-
|
35
|
-
return createTestClient({
|
36
|
-
chain: foundry,
|
37
|
-
mode: "anvil",
|
38
|
-
transport: transport,
|
39
|
-
})
|
40
|
-
.extend(publicActions)
|
41
|
-
.extend(walletActions);
|
42
|
-
}
|
43
|
-
|
44
|
-
export async function deployContract(
|
45
|
-
contractSpec: ContractSpec,
|
46
|
-
args: ContractArg[] = [],
|
47
|
-
chainId: number = foundry.id,
|
48
|
-
): Promise<Address> {
|
49
|
-
const ethClient = createAnvilClient(chainId);
|
50
|
-
|
51
|
-
const [deployer] = await ethClient.getAddresses();
|
52
|
-
|
53
|
-
const txHash = await ethClient.deployContract({
|
54
|
-
abi: contractSpec.abi,
|
55
|
-
bytecode: contractSpec.bytecode.object,
|
56
|
-
account: deployer,
|
57
|
-
args,
|
58
|
-
chain: foundry,
|
59
|
-
});
|
60
|
-
|
61
|
-
const receipt = await ethClient.waitForTransactionReceipt({ hash: txHash });
|
62
|
-
|
63
|
-
if (receipt.status != "success") {
|
64
|
-
throw new Error(
|
65
|
-
`Contract deployment failed with status: ${receipt.status}`,
|
66
|
-
);
|
67
|
-
}
|
68
|
-
|
69
|
-
return receipt.contractAddress as Address;
|
70
|
-
}
|
71
|
-
|
72
|
-
type DeploySpec<T extends Abi> = {
|
73
|
-
abi: T;
|
74
|
-
bytecode: {
|
75
|
-
object: Hex;
|
76
|
-
};
|
77
|
-
};
|
78
|
-
|
79
|
-
type Tail<T> = T extends readonly [unknown, ...infer U] ? U : [];
|
80
|
-
|
81
|
-
export async function deployProverVerifier<P extends Abi, V extends Abi>(
|
82
|
-
proverSpec: DeploySpec<P>,
|
83
|
-
verifierSpec: DeploySpec<V>,
|
84
|
-
args: {
|
85
|
-
prover?: ContractArg[];
|
86
|
-
verifier?: Tail<ContractArg>[];
|
87
|
-
} = {},
|
88
|
-
chainId: number = foundry.id,
|
89
|
-
) {
|
90
|
-
console.log("Deploying prover");
|
91
|
-
const proverAddress = await deployContract(
|
92
|
-
proverSpec,
|
93
|
-
args.prover ?? [],
|
94
|
-
chainId,
|
95
|
-
);
|
96
|
-
console.log(`Prover has been deployed on ${proverAddress} address`);
|
97
|
-
|
98
|
-
console.log("Deploying verifier");
|
99
|
-
const verifierAddress = await deployContract(
|
100
|
-
verifierSpec,
|
101
|
-
[proverAddress, ...(args.verifier ?? [])],
|
102
|
-
chainId,
|
103
|
-
);
|
104
|
-
console.log(`Verifier has been deployed on ${verifierAddress} address`);
|
105
|
-
|
106
|
-
return [proverAddress, verifierAddress];
|
107
|
-
}
|
108
|
-
|
109
|
-
export async function call<
|
110
|
-
T extends Abi,
|
111
|
-
F extends ContractFunctionName<T, "pure" | "view">,
|
112
|
-
>(
|
113
|
-
abi: T,
|
114
|
-
address: Address,
|
115
|
-
functionName: F,
|
116
|
-
args?: ContractFunctionArgs<T, "pure" | "view", F>,
|
117
|
-
chainId: number = foundry.id,
|
118
|
-
) {
|
119
|
-
const ethClient = createAnvilClient(chainId);
|
120
|
-
|
121
|
-
return ethClient.readContract({
|
122
|
-
abi,
|
123
|
-
address,
|
124
|
-
functionName,
|
125
|
-
args,
|
126
|
-
});
|
127
|
-
}
|
128
|
-
|
129
|
-
export async function writeContract<
|
130
|
-
T extends Abi,
|
131
|
-
F extends ContractFunctionName<T, "payable" | "nonpayable">,
|
132
|
-
>(
|
133
|
-
address: Address,
|
134
|
-
abi: T,
|
135
|
-
functionName: F,
|
136
|
-
args: ContractFunctionArgs<T, "payable" | "nonpayable", F>,
|
137
|
-
sender?: Address,
|
138
|
-
chain: Chain = foundry,
|
139
|
-
) {
|
140
|
-
const ethClient = createAnvilClient(chain.id);
|
141
|
-
const selectedSender = sender || (await ethClient.getAddresses())[0];
|
142
|
-
|
143
|
-
const txHash = await ethClient.writeContract({
|
144
|
-
address,
|
145
|
-
abi: abi as Abi,
|
146
|
-
functionName,
|
147
|
-
args: args as readonly unknown[],
|
148
|
-
chain,
|
149
|
-
account: selectedSender,
|
150
|
-
chainOverride: undefined,
|
151
|
-
} as WriteContractParameters<
|
152
|
-
Abi,
|
153
|
-
ContractFunctionName<Abi, "nonpayable" | "payable">,
|
154
|
-
ContractFunctionArgs<Abi, "nonpayable" | "payable", F>,
|
155
|
-
Chain | undefined,
|
156
|
-
Account | undefined,
|
157
|
-
Chain | undefined
|
158
|
-
>);
|
159
|
-
|
160
|
-
const txReceipt = await ethClient.waitForTransactionReceipt({ hash: txHash });
|
161
|
-
|
162
|
-
if (txReceipt.status != "success") {
|
163
|
-
throw new Error(`Transaction failed with status: ${txReceipt.status}`);
|
164
|
-
}
|
165
|
-
|
166
|
-
return txReceipt;
|
167
|
-
}
|
168
|
-
|
169
|
-
export const getTestAccount = () => privateKeyToAccount(generatePrivateKey());
|
170
|
-
|
171
|
-
export const getTestAddresses = (
|
172
|
-
chainId: number = foundry.id,
|
173
|
-
): Promise<Address[]> => createAnvilClient(chainId).getAddresses();
|
package/src/api/lib/client.ts
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
import { VCallResponse, VlayerClient } from "types/vlayer";
|
2
|
-
import { WebProofProvider } from "types/webProofProvider";
|
3
|
-
|
4
|
-
import { prove } from "../prover";
|
5
|
-
import { createExtensionWebProofProvider } from "../webProof";
|
6
|
-
import { type Abi, decodeFunctionResult } from "viem";
|
7
|
-
|
8
|
-
function dropEmptyProofFromArgs(args: unknown) {
|
9
|
-
if (Array.isArray(args)) {
|
10
|
-
return args.slice(1) as unknown[];
|
11
|
-
}
|
12
|
-
return [];
|
13
|
-
}
|
14
|
-
|
15
|
-
function generateRandomHash() {
|
16
|
-
let hash = "0x";
|
17
|
-
for (let i = 0; i < 40; ++i) {
|
18
|
-
hash += Math.floor(Math.random() * 16).toString(16);
|
19
|
-
}
|
20
|
-
return hash;
|
21
|
-
}
|
22
|
-
|
23
|
-
export const createVlayerClient = (
|
24
|
-
{
|
25
|
-
url = "http://127.0.0.1:3000",
|
26
|
-
webProofProvider = createExtensionWebProofProvider(),
|
27
|
-
}: {
|
28
|
-
url?: string;
|
29
|
-
webProofProvider?: WebProofProvider;
|
30
|
-
} = {
|
31
|
-
url: "http://127.0.0.1:3000",
|
32
|
-
webProofProvider: createExtensionWebProofProvider(),
|
33
|
-
},
|
34
|
-
): VlayerClient => {
|
35
|
-
console.log("createVlayerClient with", url, webProofProvider);
|
36
|
-
const resultHashMap = new Map<
|
37
|
-
string,
|
38
|
-
[Promise<VCallResponse>, Abi, string]
|
39
|
-
>();
|
40
|
-
|
41
|
-
return {
|
42
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
43
|
-
prove: async ({ address, functionName, chainId, proverAbi, args }) => {
|
44
|
-
const result_promise = prove(
|
45
|
-
address,
|
46
|
-
proverAbi,
|
47
|
-
functionName,
|
48
|
-
args,
|
49
|
-
chainId,
|
50
|
-
url,
|
51
|
-
);
|
52
|
-
const hash = generateRandomHash();
|
53
|
-
resultHashMap.set(hash, [result_promise, proverAbi, functionName]);
|
54
|
-
return { hash };
|
55
|
-
},
|
56
|
-
waitForProvingResult: async ({ hash }) => {
|
57
|
-
const savedProvingData = resultHashMap.get(hash);
|
58
|
-
if (!savedProvingData) {
|
59
|
-
throw new Error("No result found for hash " + hash);
|
60
|
-
}
|
61
|
-
const {
|
62
|
-
result: { proof, evm_call_result },
|
63
|
-
} = await savedProvingData[0];
|
64
|
-
|
65
|
-
const result = dropEmptyProofFromArgs(
|
66
|
-
decodeFunctionResult({
|
67
|
-
abi: savedProvingData[1],
|
68
|
-
data: evm_call_result,
|
69
|
-
functionName: savedProvingData[2],
|
70
|
-
}),
|
71
|
-
);
|
72
|
-
|
73
|
-
return [proof, ...result];
|
74
|
-
},
|
75
|
-
};
|
76
|
-
};
|
@@ -1,43 +0,0 @@
|
|
1
|
-
import { Abi, Address, Hex } from "viem";
|
2
|
-
import { Branded } from "../../../web-proof-commons";
|
3
|
-
|
4
|
-
export type Bytecode = {
|
5
|
-
object: Hex;
|
6
|
-
};
|
7
|
-
|
8
|
-
export type ContractSpec = {
|
9
|
-
abi: Abi;
|
10
|
-
bytecode: Bytecode;
|
11
|
-
};
|
12
|
-
|
13
|
-
export type ContractArg =
|
14
|
-
| number
|
15
|
-
| string
|
16
|
-
| boolean
|
17
|
-
| bigint
|
18
|
-
| number[]
|
19
|
-
| string[]
|
20
|
-
| boolean[]
|
21
|
-
| bigint[]
|
22
|
-
| Address[];
|
23
|
-
|
24
|
-
export type EthereumAddress = Branded<Hex, "EthereumAddress">;
|
25
|
-
export type EthereumTxHash = Branded<Hex, "EthereumTxHash">;
|
26
|
-
|
27
|
-
export function assertEthereumAddress(
|
28
|
-
hash: string,
|
29
|
-
): asserts hash is EthereumAddress {
|
30
|
-
const regex = /^(0x)?[0-9a-fA-F]{40}$/;
|
31
|
-
if (!regex.test(hash)) {
|
32
|
-
throw new Error(`Invalid ethereum account ${hash}`);
|
33
|
-
}
|
34
|
-
}
|
35
|
-
|
36
|
-
export function assertEthereumTxHash(
|
37
|
-
hash: string,
|
38
|
-
): asserts hash is EthereumTxHash {
|
39
|
-
const regex = /^(0x)?[0-9a-fA-F]{64}$/;
|
40
|
-
if (!regex.test(hash)) {
|
41
|
-
throw new Error(`Invalid ethereum tx hash ${hash}`);
|
42
|
-
}
|
43
|
-
}
|
@@ -1,28 +0,0 @@
|
|
1
|
-
import { Abi, ContractFunctionName } from "viem";
|
2
|
-
import { AbiParametersToPrimitiveTypes, ExtractAbiFunction } from "abitype";
|
3
|
-
|
4
|
-
type Without<T extends readonly unknown[], P> = T extends readonly [
|
5
|
-
infer F,
|
6
|
-
...infer R,
|
7
|
-
]
|
8
|
-
? F extends P
|
9
|
-
? Without<R, P>
|
10
|
-
: readonly [F, ...Without<R, P>]
|
11
|
-
: [];
|
12
|
-
|
13
|
-
export type ContractFunctionArgsWithout<
|
14
|
-
abi extends Abi,
|
15
|
-
functionName extends ContractFunctionName<abi>,
|
16
|
-
without,
|
17
|
-
> =
|
18
|
-
AbiParametersToPrimitiveTypes<
|
19
|
-
Without<
|
20
|
-
ExtractAbiFunction<abi extends Abi ? abi : Abi, functionName>["inputs"],
|
21
|
-
without
|
22
|
-
>,
|
23
|
-
"inputs"
|
24
|
-
> extends infer args
|
25
|
-
? [args] extends [never]
|
26
|
-
? readonly unknown[]
|
27
|
-
: args
|
28
|
-
: readonly unknown[];
|
@@ -1,60 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
Abi,
|
3
|
-
AbiStateMutability,
|
4
|
-
Address,
|
5
|
-
ContractFunctionArgs,
|
6
|
-
ContractFunctionName,
|
7
|
-
Hex,
|
8
|
-
} from "viem";
|
9
|
-
|
10
|
-
type Calldata = string;
|
11
|
-
|
12
|
-
export type CallParams = {
|
13
|
-
to: Address;
|
14
|
-
data: Calldata;
|
15
|
-
};
|
16
|
-
|
17
|
-
export type CallContext = {
|
18
|
-
chain_id: number; // 31337
|
19
|
-
};
|
20
|
-
|
21
|
-
export type Proof = {
|
22
|
-
length: bigint;
|
23
|
-
seal: {
|
24
|
-
verifierSelector: Hex;
|
25
|
-
seal: readonly [Hex, Hex, Hex, Hex, Hex, Hex, Hex, Hex];
|
26
|
-
mode: number;
|
27
|
-
};
|
28
|
-
callAssumptions: {
|
29
|
-
proverContractAddress: Address;
|
30
|
-
functionSelector: Hex;
|
31
|
-
settleBlockHash: Hex;
|
32
|
-
settleBlockNumber: bigint;
|
33
|
-
};
|
34
|
-
};
|
35
|
-
|
36
|
-
export interface VCallResult {
|
37
|
-
evm_call_result: Hex;
|
38
|
-
proof: Proof;
|
39
|
-
}
|
40
|
-
|
41
|
-
export interface VCallResponse {
|
42
|
-
jsonrpc: string;
|
43
|
-
result: VCallResult;
|
44
|
-
id: number;
|
45
|
-
}
|
46
|
-
|
47
|
-
export type VlayerClient = {
|
48
|
-
prove: <T extends Abi, F extends ContractFunctionName<T>>(args: {
|
49
|
-
address: Hex;
|
50
|
-
proverAbi: T;
|
51
|
-
functionName: F;
|
52
|
-
chainId: number;
|
53
|
-
args: ContractFunctionArgs<T, AbiStateMutability, F>;
|
54
|
-
}) => Promise<{ hash: string }>;
|
55
|
-
waitForProvingResult: ({
|
56
|
-
hash,
|
57
|
-
}: {
|
58
|
-
hash: string;
|
59
|
-
}) => Promise<[Proof, ...unknown[]]>;
|
60
|
-
};
|
@@ -1,44 +0,0 @@
|
|
1
|
-
import { Hex, Abi, ContractFunctionName } from "viem";
|
2
|
-
import type { ContractFunctionArgsWithout } from "./viem";
|
3
|
-
import { Branded, WebProof, WebProofStep } from "../../../web-proof-commons";
|
4
|
-
|
5
|
-
export type WebProofSetupInput = {
|
6
|
-
logoUrl: string;
|
7
|
-
steps: WebProofStep[];
|
8
|
-
};
|
9
|
-
|
10
|
-
export type WebProofSetup = Branded<
|
11
|
-
WebProofSetupInput & {
|
12
|
-
isWebProof: true;
|
13
|
-
},
|
14
|
-
"webProof"
|
15
|
-
>;
|
16
|
-
|
17
|
-
export type ProverCallCommitment<
|
18
|
-
T extends Abi,
|
19
|
-
F extends ContractFunctionName<T>,
|
20
|
-
> = {
|
21
|
-
address: Hex;
|
22
|
-
proverAbi: T;
|
23
|
-
functionName: F;
|
24
|
-
commitmentArgs: ContractFunctionArgsWithout<T, F, { name: "webProof" }>;
|
25
|
-
chainId: number;
|
26
|
-
};
|
27
|
-
|
28
|
-
export type GetWebProofArgs<
|
29
|
-
T extends Abi,
|
30
|
-
F extends ContractFunctionName<T>,
|
31
|
-
> = {
|
32
|
-
proverCallCommitment: ProverCallCommitment<T, F>;
|
33
|
-
} & WebProofSetupInput;
|
34
|
-
|
35
|
-
export type WebProofProvider = {
|
36
|
-
getWebProof: <T extends Abi, F extends ContractFunctionName<T>>(
|
37
|
-
args: GetWebProofArgs<T, F>,
|
38
|
-
) => Promise<WebProof>;
|
39
|
-
};
|
40
|
-
|
41
|
-
export type WebProofProviderSetup = {
|
42
|
-
notaryUrl?: string;
|
43
|
-
wsProxyUrl?: string;
|
44
|
-
};
|
package/src/api/prover.ts
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
type Abi,
|
3
|
-
AbiStateMutability,
|
4
|
-
type Address,
|
5
|
-
ContractFunctionArgs,
|
6
|
-
ContractFunctionName,
|
7
|
-
encodeFunctionData,
|
8
|
-
} from "viem";
|
9
|
-
|
10
|
-
import { type CallContext, type CallParams } from "types/vlayer";
|
11
|
-
import { v_call } from "./v_call";
|
12
|
-
import { foundry } from "viem/chains";
|
13
|
-
|
14
|
-
export async function prove<T extends Abi, F extends ContractFunctionName<T>>(
|
15
|
-
prover: Address,
|
16
|
-
abi: T,
|
17
|
-
functionName: F,
|
18
|
-
args: ContractFunctionArgs<T, AbiStateMutability, F>,
|
19
|
-
chainId: number = foundry.id,
|
20
|
-
url: string = "http://127.0.0.1:3000",
|
21
|
-
) {
|
22
|
-
const calldata = encodeFunctionData({
|
23
|
-
abi: abi as Abi,
|
24
|
-
functionName: functionName as string,
|
25
|
-
args: args as readonly unknown[],
|
26
|
-
});
|
27
|
-
|
28
|
-
const call: CallParams = { to: prover, data: calldata };
|
29
|
-
const context: CallContext = {
|
30
|
-
chain_id: chainId,
|
31
|
-
};
|
32
|
-
|
33
|
-
return v_call(call, context, url);
|
34
|
-
}
|
package/src/api/v_call.ts
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
import { CallContext, CallParams, VCallResponse } from "types/vlayer";
|
2
|
-
|
3
|
-
function v_callBody(call: CallParams, context: CallContext) {
|
4
|
-
return {
|
5
|
-
method: "v_call",
|
6
|
-
params: [call, context],
|
7
|
-
id: 1,
|
8
|
-
jsonrpc: "2.0",
|
9
|
-
};
|
10
|
-
}
|
11
|
-
|
12
|
-
export async function v_call(
|
13
|
-
call: CallParams,
|
14
|
-
context: CallContext,
|
15
|
-
url: string = "http://127.0.0.1:3000",
|
16
|
-
): Promise<VCallResponse> {
|
17
|
-
const response = await fetch(url, {
|
18
|
-
method: "POST",
|
19
|
-
body: JSON.stringify(v_callBody(call, context)),
|
20
|
-
headers: { "Content-Type": "application/json" },
|
21
|
-
});
|
22
|
-
|
23
|
-
if (!response.ok) {
|
24
|
-
throw new Error(`HTTP error! status: ${response.status}`);
|
25
|
-
}
|
26
|
-
|
27
|
-
const response_json = await response.json();
|
28
|
-
|
29
|
-
//TODO we should launch some schema validation here
|
30
|
-
assertObject(response_json);
|
31
|
-
|
32
|
-
if ("error" in response_json) {
|
33
|
-
throw new Error(
|
34
|
-
`Error response: ${(response_json.error as { message: string }).message || "unknown error"}`,
|
35
|
-
);
|
36
|
-
}
|
37
|
-
|
38
|
-
return response_json as Promise<VCallResponse>;
|
39
|
-
}
|
40
|
-
|
41
|
-
function assertObject(x: unknown): asserts x is object {
|
42
|
-
if (typeof x !== "object") {
|
43
|
-
throw new Error("Expected object");
|
44
|
-
}
|
45
|
-
}
|
@@ -1,72 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
type WebProofProvider,
|
3
|
-
type WebProofProviderSetup,
|
4
|
-
type WebProofSetupInput,
|
5
|
-
} from "../../lib/types/webProofProvider";
|
6
|
-
|
7
|
-
import {
|
8
|
-
ExtensionAction,
|
9
|
-
type ExtensionMessage,
|
10
|
-
ExtensionMessageType,
|
11
|
-
type MessageToExtension,
|
12
|
-
WebProof,
|
13
|
-
} from "../../../web-proof-commons";
|
14
|
-
|
15
|
-
// NOTE @types/chrome and webextension-polyfill work only in the extension context
|
16
|
-
// and looks that there is no community driven package providing typings for chrome.runtime
|
17
|
-
// or polyfill logic for the browser APIs available in the browser context
|
18
|
-
// we intentionally use chrome here instead of browser as we support only chrome for now
|
19
|
-
// and there could be some differences in the API between browsers
|
20
|
-
|
21
|
-
declare const chrome: {
|
22
|
-
runtime: {
|
23
|
-
sendMessage: (
|
24
|
-
extensionId: string | undefined,
|
25
|
-
message: MessageToExtension,
|
26
|
-
) => void;
|
27
|
-
connect: (extensionId: string) => {
|
28
|
-
onMessage: {
|
29
|
-
addListener: (message: unknown) => void;
|
30
|
-
};
|
31
|
-
};
|
32
|
-
};
|
33
|
-
};
|
34
|
-
|
35
|
-
// this id is fixed in the extension by the key in manifest.json
|
36
|
-
const EXTENSION_ID = "jbchhcgphfokabmfacnkafoeeeppjmpl";
|
37
|
-
|
38
|
-
export const createExtensionWebProofProvider = (
|
39
|
-
{
|
40
|
-
notaryUrl = "https://notary.pse.dev/v0.1.0-alpha.5/",
|
41
|
-
wsProxyUrl = "wss://notary.pse.dev/proxy",
|
42
|
-
}: WebProofProviderSetup = {
|
43
|
-
notaryUrl: "https://notary.pse.dev/v0.1.0-alpha.5/",
|
44
|
-
wsProxyUrl: "wss://notary.pse.dev/proxy",
|
45
|
-
},
|
46
|
-
): WebProofProvider => {
|
47
|
-
return {
|
48
|
-
getWebProof: async function (webProofSetup: WebProofSetupInput) {
|
49
|
-
return new Promise<WebProof>((resolve, reject) => {
|
50
|
-
chrome.runtime.sendMessage(EXTENSION_ID, {
|
51
|
-
action: ExtensionAction.RequestWebProof,
|
52
|
-
payload: {
|
53
|
-
notaryUrl,
|
54
|
-
wsProxyUrl,
|
55
|
-
logoUrl: webProofSetup.logoUrl,
|
56
|
-
steps: webProofSetup.steps,
|
57
|
-
},
|
58
|
-
});
|
59
|
-
const port = chrome.runtime.connect(EXTENSION_ID);
|
60
|
-
// TODO: validate message in runtime
|
61
|
-
port.onMessage.addListener((message: ExtensionMessage) => {
|
62
|
-
if (message.type === ExtensionMessageType.ProofDone) {
|
63
|
-
resolve(message.proof);
|
64
|
-
}
|
65
|
-
if (message.type === ExtensionMessageType.ProofError) {
|
66
|
-
reject(new Error(message.error));
|
67
|
-
}
|
68
|
-
});
|
69
|
-
});
|
70
|
-
},
|
71
|
-
};
|
72
|
-
};
|
@@ -1,17 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
EXTENSION_STEP,
|
3
|
-
WebProofStepNotarize,
|
4
|
-
} from "../../../web-proof-commons";
|
5
|
-
|
6
|
-
export const notarize = (
|
7
|
-
url: string,
|
8
|
-
method: string = "GET",
|
9
|
-
label: string,
|
10
|
-
) => {
|
11
|
-
return {
|
12
|
-
url,
|
13
|
-
method,
|
14
|
-
label,
|
15
|
-
step: EXTENSION_STEP.notarize,
|
16
|
-
} as WebProofStepNotarize;
|
17
|
-
};
|