@vlayer/sdk 0.1.0-nightly-20241028-591419e → 0.1.0-nightly-202410292-42360cf
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/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
|
-
};
|