Skip to content

Commit

Permalink
feat: zkml circuits
Browse files Browse the repository at this point in the history
  • Loading branch information
kidneyweakx committed Aug 22, 2023
1 parent 61057ac commit 00971ad
Show file tree
Hide file tree
Showing 7 changed files with 175 additions and 2 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ yarn-error.log*

# ui
dist/
artifacts/
.env
temp
11 changes: 11 additions & 0 deletions packages/zk-circuits/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
INFURA_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
PRIVATE_KEY="zzz"

# Block explorer API keys
ARBISCAN_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
BSCSCAN_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
ETHERSCAN_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
GNOSISSCAN_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
OPTIMISM_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
POLYGONSCAN_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
SNOWTRACE_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
79 changes: 79 additions & 0 deletions packages/zk-circuits/circuits/circuits.circom
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
pragma circom 2.0.0;

include "../node_modules/circomlib-ml/circuits/BatchNormalization2D.circom";
include "../node_modules/circomlib-ml/circuits/ArgMax.circom";
include "../node_modules/circomlib-ml/circuits/Dense.circom";
include "../node_modules/circomlib-ml/circuits/Conv2D.circom";
include "../node_modules/circomlib-ml/circuits/GlobalAveragePooling2D.circom";
include "../node_modules/circomlib-ml/circuits/AveragePooling2D.circom";

template Model() {
signal input in[50][50][1];
signal input conv2d_weights[3][3][1][4];
signal input conv2d_bias[4];
signal input batch_normalization_a[4];
signal input batch_normalization_b[4];
signal input dense_weights[4][2];
signal input dense_bias[2];
signal output out[1];

component conv2d = Conv2D(50, 50, 1, 4, 3, 1);
component batch_normalization = BatchNormalization2D(48, 48, 4);
component average_pooling2d = AveragePooling2D(48, 48, 4, 2, 2, 250000000000);
component global_average_pooling2d = GlobalAveragePooling2D(24, 24, 4, 1736111111);
component dense = Dense(4, 2);
component softmax = ArgMax(2);

for (var i0 = 0; i0 < 50; i0++) {
for (var i1 = 0; i1 < 50; i1++) {
for (var i2 = 0; i2 < 1; i2++) {
conv2d.in[i0][i1][i2] <== in[i0][i1][i2];
}}}
for (var i0 = 0; i0 < 3; i0++) {
for (var i1 = 0; i1 < 3; i1++) {
for (var i2 = 0; i2 < 1; i2++) {
for (var i3 = 0; i3 < 4; i3++) {
conv2d.weights[i0][i1][i2][i3] <== conv2d_weights[i0][i1][i2][i3];
}}}}
for (var i0 = 0; i0 < 4; i0++) {
conv2d.bias[i0] <== conv2d_bias[i0];
}
for (var i0 = 0; i0 < 48; i0++) {
for (var i1 = 0; i1 < 48; i1++) {
for (var i2 = 0; i2 < 4; i2++) {
batch_normalization.in[i0][i1][i2] <== conv2d.out[i0][i1][i2];
}}}
for (var i0 = 0; i0 < 4; i0++) {
batch_normalization.a[i0] <== batch_normalization_a[i0];
}
for (var i0 = 0; i0 < 4; i0++) {
batch_normalization.b[i0] <== batch_normalization_b[i0];
}
for (var i0 = 0; i0 < 48; i0++) {
for (var i1 = 0; i1 < 48; i1++) {
for (var i2 = 0; i2 < 4; i2++) {
average_pooling2d.in[i0][i1][i2] <== batch_normalization.out[i0][i1][i2];
}}}
for (var i0 = 0; i0 < 24; i0++) {
for (var i1 = 0; i1 < 24; i1++) {
for (var i2 = 0; i2 < 4; i2++) {
global_average_pooling2d.in[i0][i1][i2] <== average_pooling2d.out[i0][i1][i2];
}}}
for (var i0 = 0; i0 < 4; i0++) {
dense.in[i0] <== global_average_pooling2d.out[i0];
}
for (var i0 = 0; i0 < 4; i0++) {
for (var i1 = 0; i1 < 2; i1++) {
dense.weights[i0][i1] <== dense_weights[i0][i1];
}}
for (var i0 = 0; i0 < 2; i0++) {
dense.bias[i0] <== dense_bias[i0];
}
for (var i0 = 0; i0 < 2; i0++) {
softmax.in[i0] <== dense.out[i0];
}
out[0] <== softmax.out;

}

component main = Model();
67 changes: 67 additions & 0 deletions packages/zk-circuits/circuits/circuits.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"conv2d_weights": [
"403405242368",
"304365797376",
"235511644160",
"117679210496",
"369820598272",
"369435803648",
"221078290432",
"-425134292992",
"80874520576",
"245514108928",
"187810496512",
"-330524065792",
"-32316233728",
"-14922057728",
"-200911880192",
"1920103296",
"-41124859904",
"-115676495872",
"-215916150784",
"173553500160",
"-117569585152",
"-75012554752",
"-49569116160",
"-174658912256",
"-264812494848",
"-263167295488",
"-255334825984",
"359079608320",
"-243380076544",
"-393249521664",
"-161447706624",
"74104496128",
"-186532839424",
"-221273522176",
"-172075499520",
"-46639788032"
],
"conv2d_bias": ["0", "0", "0", "0"],
"batch_normalization_a": [
"11801251020800",
"7735594713088",
"5929726640128",
"3613041360896"
],
"batch_normalization_b": [
"245876039268925291102208",
"714476048871186646433792",
"1332232071569024141492224",
"430300893967944391852032"
],
"dense_weights": [
"-740124786688",
"1196192301056",
"-1536958136320",
"1008642883584",
"-403481919488",
"1017656573952",
"678901579776",
"-1020546908160"
],
"dense_bias": [
"-37879988551139837203300000819793879167869894840645006131200",
"37879962474107746081822244188339672384849354037826764668928"
]
}
4 changes: 2 additions & 2 deletions packages/zk-circuits/hardhat.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,10 @@ const config: HardhatUserConfig = {
},
circom: {
inputBasePath: './circuits',
ptau: 'https://hermez.s3-eu-west-1.amazonaws.com/powersOfTau28_hez_final_15.ptau',
ptau: 'https://hermez.s3-eu-west-1.amazonaws.com/powersOfTau28_hez_final_20.ptau',
circuits: [
{
name: 'himitsu',
name: 'circuits',
},
],
},
Expand Down
3 changes: 3 additions & 0 deletions packages/zk-circuits/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"version": "0.1.0",
"main": "index.js",
"scripts": {
"circom:dev": "hardhat circom --deterministic --debug --verbose",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "kidneyweakx",
Expand All @@ -13,12 +14,14 @@
"@nomiclabs/hardhat-etherscan": "^3.1.7",
"@openzeppelin/contracts": "^4.9.3",
"circomlib": "^2.0.5",
"circomlib-ml": "^1.4.4",
"circomlibjs": "^0.1.7",
"dotenv": "^16.3.1",
"ethers": "^5.7.0",
"hardhat": "^2.17.1",
"hardhat-circom": "^3.3.2",
"snarkjs": "^0.7.0",
"tsconfig": "workspace:*",
"typescript": "^4.9.4"
}
}
10 changes: 10 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 00971ad

Please sign in to comment.