Repository files navigation

Overview:

The mission of DelphinusLab is to provide Web2 developers with a concise toolset to leverage the power of Web3 in their applications. The ZKWASM (ZKSNARK virtual machine that supports Web Assembly) serves as a trustless layer between rich applications running on WASM runtime and smart contracts on chain.

WASM (or WebAssembly) is an open standard binary code format similar to assembly. Its initial objective was to provide an alternative to java-script with improved performance for the current web ecosystem. Benefiting from its platform independence, front-end flexibility (can be compiled from the majority of languages including C, C++, assembly script, rust, etc.), good isolated runtime and speed comes closer to the speed of a native binary, its usage is arising in distributed cloud and edge computing. Recently it has become a popular binary format for users to run customized functions on AWS Lambda, Open Yurt, AZURE, etc.

The idea of ZKWASM is derived from ZKSNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) which is a combination of SNARG (Succinct non-interactive arguments) and zero-knowledge proof. In general, the adoption of ZKSNARK usually requires implementing a program in arithmetic circuits or circuit-friendly languages (Pinocchio, TinyRAM, Buffet/Pequin, Geppetto, xJsnark framework, ZoKrates) that forms a barrier for existing programs to leverage its power. An alternative approach is, instead of applying ZKSNARK on the source code, applying it on the bytecode level of a virtual machine and implementing a zksnark-backed virtual machine. In this work, we take the approach of writing the whole WASM virtual machine in ZKSNARK circuits so that existing WASM applications can benefit from ZKSNARK by simply running on the ZKWASM, without any modification. Therefore, the cloud service provider can prove to any user that the computation result is computed honestly and no private information is leaked.

Circuit Details:

https://ieeexplore.ieee.org/document/10587123

Quick start with ZKWASM command line

Dependency

Make sure the following packages are installed.

clang lld

Install Instructions

git clone --recurse-submodules https://github.com/DelphinusLab/zkwasm
cargo build

Setup input:

wasm code

Runtime input:

input of wasm function and the top level function must be zkmain

Proving target:

simulation of wasm execution of target wasm bytecode with particular inputs are correct.

Command line:

Setup via WASM image:

delphinus-cli --params <PARAMS> <NAME> setup [OPTIONS] --wasm <WASM>

with OPTIONS:

 -h, --help
Print help information
--host <HOST_MODE>
Specify execution host environment for the runtime [default: default] [possible values:
default, standard]
-k <K>
Size of the circuit. [default: 18]
--phantom <PHANTOM_FUNCTIONS>
Specify phantom functions whose body will be ignored in the circuit
--wasm <WASM>
Path to the Wasm image

Single prove and verify:

cargo run --release -- --params <PARAMS> <NAME> prove [OPTIONS] --wasm <WASM> --output <OUTPUT>

with OPTIONS:

 --ctxin <CONTEXT_INPUT>
Context inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--ctxin`
--ctxout [<CONTEXT_OUTPUT>...]
Path to context output
--file
Enabling the file backend for table to support enormous execution trace. It may reduce
the speed of execution.
-h, --help
Print help information
-m, --mock
Enable mock test before proving
-o, --output <OUTPUT>
Path to output directory
--private <PRIVATE_INPUT>
Private inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--private`
--public <PUBLIC_INPUT>
Public inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--public`
--wasm <WASM>
Path to the Wasm image
cargo run --release -- --params <PARAMS> <NAME> verify --output <OUTPUT>

Batch prove and verify:

Please see zkWASM continuation batcher at https://github.com/DelphinusLab/continuation-batcher for batching proof with host circuits and verifier generation in smart contracts.

Operations Spec [WIP]

We use z3 (https://github.com/Z3Prover/z3) to check that all operations are compiled to zkp circuits correctly.

[This is a WIP project, only sample code are provided here. Please contact xgao@zoyoe.com for state circuit customization and application integration.

Issue tracking:

  • chore: non-feature requirements such as CI/CD, building script or work flow enhancement.
  • feat: feature need, we could use feat(circuit), feat(lang), feat(CLI) to categorize features
  • bug: bug report, we also could use bug(circuit), bug(lang) to categorize bugs
  • doc: documents related issues.

Project Bootstrap:

About

No description, website, or topics provided.

Resources

Stars

545 stars

Watchers

15 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Overview:

The mission of DelphinusLab is to provide Web2 developers with a concise toolset to leverage the power of Web3 in their applications. The ZKWASM (ZKSNARK virtual machine that supports Web Assembly) serves as a trustless layer between rich applications running on WASM runtime and smart contracts on chain.

WASM (or WebAssembly) is an open standard binary code format similar to assembly. Its initial objective was to provide an alternative to java-script with improved performance for the current web ecosystem. Benefiting from its platform independence, front-end flexibility (can be compiled from the majority of languages including C, C++, assembly script, rust, etc.), good isolated runtime and speed comes closer to the speed of a native binary, its usage is arising in distributed cloud and edge computing. Recently it has become a popular binary format for users to run customized functions on AWS Lambda, Open Yurt, AZURE, etc.

The idea of ZKWASM is derived from ZKSNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) which is a combination of SNARG (Succinct non-interactive arguments) and zero-knowledge proof. In general, the adoption of ZKSNARK usually requires implementing a program in arithmetic circuits or circuit-friendly languages (Pinocchio, TinyRAM, Buffet/Pequin, Geppetto, xJsnark framework, ZoKrates) that forms a barrier for existing programs to leverage its power. An alternative approach is, instead of applying ZKSNARK on the source code, applying it on the bytecode level of a virtual machine and implementing a zksnark-backed virtual machine. In this work, we take the approach of writing the whole WASM virtual machine in ZKSNARK circuits so that existing WASM applications can benefit from ZKSNARK by simply running on the ZKWASM, without any modification. Therefore, the cloud service provider can prove to any user that the computation result is computed honestly and no private information is leaked.

Circuit Details:

https://ieeexplore.ieee.org/document/10587123

Quick start with ZKWASM command line

Dependency

Make sure the following packages are installed.

clang lld

Install Instructions

git clone --recurse-submodules https://github.com/DelphinusLab/zkwasm
cargo build

Setup input:

wasm code

Runtime input:

input of wasm function and the top level function must be zkmain

Proving target:

simulation of wasm execution of target wasm bytecode with particular inputs are correct.

Command line:

Setup via WASM image:

delphinus-cli --params <PARAMS> <NAME> setup [OPTIONS] --wasm <WASM>

with OPTIONS:

 -h, --help
Print help information
--host <HOST_MODE>
Specify execution host environment for the runtime [default: default] [possible values:
default, standard]
-k <K>
Size of the circuit. [default: 18]
--phantom <PHANTOM_FUNCTIONS>
Specify phantom functions whose body will be ignored in the circuit
--wasm <WASM>
Path to the Wasm image

Single prove and verify:

cargo run --release -- --params <PARAMS> <NAME> prove [OPTIONS] --wasm <WASM> --output <OUTPUT>

with OPTIONS:

 --ctxin <CONTEXT_INPUT>
Context inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--ctxin`
--ctxout [<CONTEXT_OUTPUT>...]
Path to context output
--file
Enabling the file backend for table to support enormous execution trace. It may reduce
the speed of execution.
-h, --help
Print help information
-m, --mock
Enable mock test before proving
-o, --output <OUTPUT>
Path to output directory
--private <PRIVATE_INPUT>
Private inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--private`
--public <PUBLIC_INPUT>
Public inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--public`
--wasm <WASM>
Path to the Wasm image
cargo run --release -- --params <PARAMS> <NAME> verify --output <OUTPUT>

Batch prove and verify:

Please see zkWASM continuation batcher at https://github.com/DelphinusLab/continuation-batcher for batching proof with host circuits and verifier generation in smart contracts.

Operations Spec [WIP]

We use z3 (https://github.com/Z3Prover/z3) to check that all operations are compiled to zkp circuits correctly.

[This is a WIP project, only sample code are provided here. Please contact xgao@zoyoe.com for state circuit customization and application integration.

Issue tracking:

  • chore: non-feature requirements such as CI/CD, building script or work flow enhancement.
  • feat: feature need, we could use feat(circuit), feat(lang), feat(CLI) to categorize features
  • bug: bug report, we also could use bug(circuit), bug(lang) to categorize bugs
  • doc: documents related issues.

Project Bootstrap:

About

No description, website, or topics provided.

Resources

Stars

545 stars

Watchers

15 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Overview:

The mission of DelphinusLab is to provide Web2 developers with a concise toolset to leverage the power of Web3 in their applications. The ZKWASM (ZKSNARK virtual machine that supports Web Assembly) serves as a trustless layer between rich applications running on WASM runtime and smart contracts on chain.

WASM (or WebAssembly) is an open standard binary code format similar to assembly. Its initial objective was to provide an alternative to java-script with improved performance for the current web ecosystem. Benefiting from its platform independence, front-end flexibility (can be compiled from the majority of languages including C, C++, assembly script, rust, etc.), good isolated runtime and speed comes closer to the speed of a native binary, its usage is arising in distributed cloud and edge computing. Recently it has become a popular binary format for users to run customized functions on AWS Lambda, Open Yurt, AZURE, etc.

The idea of ZKWASM is derived from ZKSNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) which is a combination of SNARG (Succinct non-interactive arguments) and zero-knowledge proof. In general, the adoption of ZKSNARK usually requires implementing a program in arithmetic circuits or circuit-friendly languages (Pinocchio, TinyRAM, Buffet/Pequin, Geppetto, xJsnark framework, ZoKrates) that forms a barrier for existing programs to leverage its power. An alternative approach is, instead of applying ZKSNARK on the source code, applying it on the bytecode level of a virtual machine and implementing a zksnark-backed virtual machine. In this work, we take the approach of writing the whole WASM virtual machine in ZKSNARK circuits so that existing WASM applications can benefit from ZKSNARK by simply running on the ZKWASM, without any modification. Therefore, the cloud service provider can prove to any user that the computation result is computed honestly and no private information is leaked.

Circuit Details:

https://ieeexplore.ieee.org/document/10587123

Quick start with ZKWASM command line

Dependency

Make sure the following packages are installed.

clang lld

Install Instructions

git clone --recurse-submodules https://github.com/DelphinusLab/zkwasm
cargo build

Setup input:

wasm code

Runtime input:

input of wasm function and the top level function must be zkmain

Proving target:

simulation of wasm execution of target wasm bytecode with particular inputs are correct.

Command line:

Setup via WASM image:

delphinus-cli --params <PARAMS> <NAME> setup [OPTIONS] --wasm <WASM>

with OPTIONS:

 -h, --help
Print help information
--host <HOST_MODE>
Specify execution host environment for the runtime [default: default] [possible values:
default, standard]
-k <K>
Size of the circuit. [default: 18]
--phantom <PHANTOM_FUNCTIONS>
Specify phantom functions whose body will be ignored in the circuit
--wasm <WASM>
Path to the Wasm image

Single prove and verify:

cargo run --release -- --params <PARAMS> <NAME> prove [OPTIONS] --wasm <WASM> --output <OUTPUT>

with OPTIONS:

 --ctxin <CONTEXT_INPUT>
Context inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--ctxin`
--ctxout [<CONTEXT_OUTPUT>...]
Path to context output
--file
Enabling the file backend for table to support enormous execution trace. It may reduce
the speed of execution.
-h, --help
Print help information
-m, --mock
Enable mock test before proving
-o, --output <OUTPUT>
Path to output directory
--private <PRIVATE_INPUT>
Private inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--private`
--public <PUBLIC_INPUT>
Public inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--public`
--wasm <WASM>
Path to the Wasm image
cargo run --release -- --params <PARAMS> <NAME> verify --output <OUTPUT>

Batch prove and verify:

Please see zkWASM continuation batcher at https://github.com/DelphinusLab/continuation-batcher for batching proof with host circuits and verifier generation in smart contracts.

Operations Spec [WIP]

We use z3 (https://github.com/Z3Prover/z3) to check that all operations are compiled to zkp circuits correctly.

[This is a WIP project, only sample code are provided here. Please contact xgao@zoyoe.com for state circuit customization and application integration.

Issue tracking:

  • chore: non-feature requirements such as CI/CD, building script or work flow enhancement.
  • feat: feature need, we could use feat(circuit), feat(lang), feat(CLI) to categorize features
  • bug: bug report, we also could use bug(circuit), bug(lang) to categorize bugs
  • doc: documents related issues.

Project Bootstrap:

About

No description, website, or topics provided.

Resources

Stars

545 stars

Watchers

15 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Overview:

The mission of DelphinusLab is to provide Web2 developers with a concise toolset to leverage the power of Web3 in their applications. The ZKWASM (ZKSNARK virtual machine that supports Web Assembly) serves as a trustless layer between rich applications running on WASM runtime and smart contracts on chain.

WASM (or WebAssembly) is an open standard binary code format similar to assembly. Its initial objective was to provide an alternative to java-script with improved performance for the current web ecosystem. Benefiting from its platform independence, front-end flexibility (can be compiled from the majority of languages including C, C++, assembly script, rust, etc.), good isolated runtime and speed comes closer to the speed of a native binary, its usage is arising in distributed cloud and edge computing. Recently it has become a popular binary format for users to run customized functions on AWS Lambda, Open Yurt, AZURE, etc.

The idea of ZKWASM is derived from ZKSNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) which is a combination of SNARG (Succinct non-interactive arguments) and zero-knowledge proof. In general, the adoption of ZKSNARK usually requires implementing a program in arithmetic circuits or circuit-friendly languages (Pinocchio, TinyRAM, Buffet/Pequin, Geppetto, xJsnark framework, ZoKrates) that forms a barrier for existing programs to leverage its power. An alternative approach is, instead of applying ZKSNARK on the source code, applying it on the bytecode level of a virtual machine and implementing a zksnark-backed virtual machine. In this work, we take the approach of writing the whole WASM virtual machine in ZKSNARK circuits so that existing WASM applications can benefit from ZKSNARK by simply running on the ZKWASM, without any modification. Therefore, the cloud service provider can prove to any user that the computation result is computed honestly and no private information is leaked.

Circuit Details:

https://ieeexplore.ieee.org/document/10587123

Quick start with ZKWASM command line

Dependency

Make sure the following packages are installed.

clang lld

Install Instructions

git clone --recurse-submodules https://github.com/DelphinusLab/zkwasm
cargo build

Setup input:

wasm code

Runtime input:

input of wasm function and the top level function must be zkmain

Proving target:

simulation of wasm execution of target wasm bytecode with particular inputs are correct.

Command line:

Setup via WASM image:

delphinus-cli --params <PARAMS> <NAME> setup [OPTIONS] --wasm <WASM>

with OPTIONS:

 -h, --help
Print help information
--host <HOST_MODE>
Specify execution host environment for the runtime [default: default] [possible values:
default, standard]
-k <K>
Size of the circuit. [default: 18]
--phantom <PHANTOM_FUNCTIONS>
Specify phantom functions whose body will be ignored in the circuit
--wasm <WASM>
Path to the Wasm image

Single prove and verify:

cargo run --release -- --params <PARAMS> <NAME> prove [OPTIONS] --wasm <WASM> --output <OUTPUT>

with OPTIONS:

 --ctxin <CONTEXT_INPUT>
Context inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--ctxin`
--ctxout [<CONTEXT_OUTPUT>...]
Path to context output
--file
Enabling the file backend for table to support enormous execution trace. It may reduce
the speed of execution.
-h, --help
Print help information
-m, --mock
Enable mock test before proving
-o, --output <OUTPUT>
Path to output directory
--private <PRIVATE_INPUT>
Private inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--private`
--public <PUBLIC_INPUT>
Public inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--public`
--wasm <WASM>
Path to the Wasm image
cargo run --release -- --params <PARAMS> <NAME> verify --output <OUTPUT>

Batch prove and verify:

Please see zkWASM continuation batcher at https://github.com/DelphinusLab/continuation-batcher for batching proof with host circuits and verifier generation in smart contracts.

Operations Spec [WIP]

We use z3 (https://github.com/Z3Prover/z3) to check that all operations are compiled to zkp circuits correctly.

[This is a WIP project, only sample code are provided here. Please contact xgao@zoyoe.com for state circuit customization and application integration.

Issue tracking:

  • chore: non-feature requirements such as CI/CD, building script or work flow enhancement.
  • feat: feature need, we could use feat(circuit), feat(lang), feat(CLI) to categorize features
  • bug: bug report, we also could use bug(circuit), bug(lang) to categorize bugs
  • doc: documents related issues.

Project Bootstrap:

About

No description, website, or topics provided.

Resources

Stars

545 stars

Watchers

15 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Overview:

The mission of DelphinusLab is to provide Web2 developers with a concise toolset to leverage the power of Web3 in their applications. The ZKWASM (ZKSNARK virtual machine that supports Web Assembly) serves as a trustless layer between rich applications running on WASM runtime and smart contracts on chain.

WASM (or WebAssembly) is an open standard binary code format similar to assembly. Its initial objective was to provide an alternative to java-script with improved performance for the current web ecosystem. Benefiting from its platform independence, front-end flexibility (can be compiled from the majority of languages including C, C++, assembly script, rust, etc.), good isolated runtime and speed comes closer to the speed of a native binary, its usage is arising in distributed cloud and edge computing. Recently it has become a popular binary format for users to run customized functions on AWS Lambda, Open Yurt, AZURE, etc.

The idea of ZKWASM is derived from ZKSNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) which is a combination of SNARG (Succinct non-interactive arguments) and zero-knowledge proof. In general, the adoption of ZKSNARK usually requires implementing a program in arithmetic circuits or circuit-friendly languages (Pinocchio, TinyRAM, Buffet/Pequin, Geppetto, xJsnark framework, ZoKrates) that forms a barrier for existing programs to leverage its power. An alternative approach is, instead of applying ZKSNARK on the source code, applying it on the bytecode level of a virtual machine and implementing a zksnark-backed virtual machine. In this work, we take the approach of writing the whole WASM virtual machine in ZKSNARK circuits so that existing WASM applications can benefit from ZKSNARK by simply running on the ZKWASM, without any modification. Therefore, the cloud service provider can prove to any user that the computation result is computed honestly and no private information is leaked.

Circuit Details:

https://ieeexplore.ieee.org/document/10587123

Quick start with ZKWASM command line

Dependency

Make sure the following packages are installed.

clang lld

Install Instructions

git clone --recurse-submodules https://github.com/DelphinusLab/zkwasm
cargo build

Setup input:

wasm code

Runtime input:

input of wasm function and the top level function must be zkmain

Proving target:

simulation of wasm execution of target wasm bytecode with particular inputs are correct.

Command line:

Setup via WASM image:

delphinus-cli --params <PARAMS> <NAME> setup [OPTIONS] --wasm <WASM>

with OPTIONS:

 -h, --help
Print help information
--host <HOST_MODE>
Specify execution host environment for the runtime [default: default] [possible values:
default, standard]
-k <K>
Size of the circuit. [default: 18]
--phantom <PHANTOM_FUNCTIONS>
Specify phantom functions whose body will be ignored in the circuit
--wasm <WASM>
Path to the Wasm image

Single prove and verify:

cargo run --release -- --params <PARAMS> <NAME> prove [OPTIONS] --wasm <WASM> --output <OUTPUT>

with OPTIONS:

 --ctxin <CONTEXT_INPUT>
Context inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--ctxin`
--ctxout [<CONTEXT_OUTPUT>...]
Path to context output
--file
Enabling the file backend for table to support enormous execution trace. It may reduce
the speed of execution.
-h, --help
Print help information
-m, --mock
Enable mock test before proving
-o, --output <OUTPUT>
Path to output directory
--private <PRIVATE_INPUT>
Private inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--private`
--public <PUBLIC_INPUT>
Public inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--public`
--wasm <WASM>
Path to the Wasm image
cargo run --release -- --params <PARAMS> <NAME> verify --output <OUTPUT>

Batch prove and verify:

Please see zkWASM continuation batcher at https://github.com/DelphinusLab/continuation-batcher for batching proof with host circuits and verifier generation in smart contracts.

Operations Spec [WIP]

We use z3 (https://github.com/Z3Prover/z3) to check that all operations are compiled to zkp circuits correctly.

[This is a WIP project, only sample code are provided here. Please contact xgao@zoyoe.com for state circuit customization and application integration.

Issue tracking:

  • chore: non-feature requirements such as CI/CD, building script or work flow enhancement.
  • feat: feature need, we could use feat(circuit), feat(lang), feat(CLI) to categorize features
  • bug: bug report, we also could use bug(circuit), bug(lang) to categorize bugs
  • doc: documents related issues.

Project Bootstrap:

About

No description, website, or topics provided.

Resources

Stars

545 stars

Watchers

15 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Overview:

The mission of DelphinusLab is to provide Web2 developers with a concise toolset to leverage the power of Web3 in their applications. The ZKWASM (ZKSNARK virtual machine that supports Web Assembly) serves as a trustless layer between rich applications running on WASM runtime and smart contracts on chain.

WASM (or WebAssembly) is an open standard binary code format similar to assembly. Its initial objective was to provide an alternative to java-script with improved performance for the current web ecosystem. Benefiting from its platform independence, front-end flexibility (can be compiled from the majority of languages including C, C++, assembly script, rust, etc.), good isolated runtime and speed comes closer to the speed of a native binary, its usage is arising in distributed cloud and edge computing. Recently it has become a popular binary format for users to run customized functions on AWS Lambda, Open Yurt, AZURE, etc.

The idea of ZKWASM is derived from ZKSNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) which is a combination of SNARG (Succinct non-interactive arguments) and zero-knowledge proof. In general, the adoption of ZKSNARK usually requires implementing a program in arithmetic circuits or circuit-friendly languages (Pinocchio, TinyRAM, Buffet/Pequin, Geppetto, xJsnark framework, ZoKrates) that forms a barrier for existing programs to leverage its power. An alternative approach is, instead of applying ZKSNARK on the source code, applying it on the bytecode level of a virtual machine and implementing a zksnark-backed virtual machine. In this work, we take the approach of writing the whole WASM virtual machine in ZKSNARK circuits so that existing WASM applications can benefit from ZKSNARK by simply running on the ZKWASM, without any modification. Therefore, the cloud service provider can prove to any user that the computation result is computed honestly and no private information is leaked.

Circuit Details:

https://ieeexplore.ieee.org/document/10587123

Quick start with ZKWASM command line

Dependency

Make sure the following packages are installed.

clang lld

Install Instructions

git clone --recurse-submodules https://github.com/DelphinusLab/zkwasm
cargo build

Setup input:

wasm code

Runtime input:

input of wasm function and the top level function must be zkmain

Proving target:

simulation of wasm execution of target wasm bytecode with particular inputs are correct.

Command line:

Setup via WASM image:

delphinus-cli --params <PARAMS> <NAME> setup [OPTIONS] --wasm <WASM>

with OPTIONS:

 -h, --help
Print help information
--host <HOST_MODE>
Specify execution host environment for the runtime [default: default] [possible values:
default, standard]
-k <K>
Size of the circuit. [default: 18]
--phantom <PHANTOM_FUNCTIONS>
Specify phantom functions whose body will be ignored in the circuit
--wasm <WASM>
Path to the Wasm image

Single prove and verify:

cargo run --release -- --params <PARAMS> <NAME> prove [OPTIONS] --wasm <WASM> --output <OUTPUT>

with OPTIONS:

 --ctxin <CONTEXT_INPUT>
Context inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--ctxin`
--ctxout [<CONTEXT_OUTPUT>...]
Path to context output
--file
Enabling the file backend for table to support enormous execution trace. It may reduce
the speed of execution.
-h, --help
Print help information
-m, --mock
Enable mock test before proving
-o, --output <OUTPUT>
Path to output directory
--private <PRIVATE_INPUT>
Private inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--private`
--public <PUBLIC_INPUT>
Public inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--public`
--wasm <WASM>
Path to the Wasm image
cargo run --release -- --params <PARAMS> <NAME> verify --output <OUTPUT>

Batch prove and verify:

Please see zkWASM continuation batcher at https://github.com/DelphinusLab/continuation-batcher for batching proof with host circuits and verifier generation in smart contracts.

Operations Spec [WIP]

We use z3 (https://github.com/Z3Prover/z3) to check that all operations are compiled to zkp circuits correctly.

[This is a WIP project, only sample code are provided here. Please contact xgao@zoyoe.com for state circuit customization and application integration.

Issue tracking:

  • chore: non-feature requirements such as CI/CD, building script or work flow enhancement.
  • feat: feature need, we could use feat(circuit), feat(lang), feat(CLI) to categorize features
  • bug: bug report, we also could use bug(circuit), bug(lang) to categorize bugs
  • doc: documents related issues.

Project Bootstrap:

About

No description, website, or topics provided.

Resources

Stars

545 stars

Watchers

15 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Overview:

The mission of DelphinusLab is to provide Web2 developers with a concise toolset to leverage the power of Web3 in their applications. The ZKWASM (ZKSNARK virtual machine that supports Web Assembly) serves as a trustless layer between rich applications running on WASM runtime and smart contracts on chain.

WASM (or WebAssembly) is an open standard binary code format similar to assembly. Its initial objective was to provide an alternative to java-script with improved performance for the current web ecosystem. Benefiting from its platform independence, front-end flexibility (can be compiled from the majority of languages including C, C++, assembly script, rust, etc.), good isolated runtime and speed comes closer to the speed of a native binary, its usage is arising in distributed cloud and edge computing. Recently it has become a popular binary format for users to run customized functions on AWS Lambda, Open Yurt, AZURE, etc.

The idea of ZKWASM is derived from ZKSNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) which is a combination of SNARG (Succinct non-interactive arguments) and zero-knowledge proof. In general, the adoption of ZKSNARK usually requires implementing a program in arithmetic circuits or circuit-friendly languages (Pinocchio, TinyRAM, Buffet/Pequin, Geppetto, xJsnark framework, ZoKrates) that forms a barrier for existing programs to leverage its power. An alternative approach is, instead of applying ZKSNARK on the source code, applying it on the bytecode level of a virtual machine and implementing a zksnark-backed virtual machine. In this work, we take the approach of writing the whole WASM virtual machine in ZKSNARK circuits so that existing WASM applications can benefit from ZKSNARK by simply running on the ZKWASM, without any modification. Therefore, the cloud service provider can prove to any user that the computation result is computed honestly and no private information is leaked.

Circuit Details:

https://ieeexplore.ieee.org/document/10587123

Quick start with ZKWASM command line

Dependency

Make sure the following packages are installed.

clang lld

Install Instructions

git clone --recurse-submodules https://github.com/DelphinusLab/zkwasm
cargo build

Setup input:

wasm code

Runtime input:

input of wasm function and the top level function must be zkmain

Proving target:

simulation of wasm execution of target wasm bytecode with particular inputs are correct.

Command line:

Setup via WASM image:

delphinus-cli --params <PARAMS> <NAME> setup [OPTIONS] --wasm <WASM>

with OPTIONS:

 -h, --help
Print help information
--host <HOST_MODE>
Specify execution host environment for the runtime [default: default] [possible values:
default, standard]
-k <K>
Size of the circuit. [default: 18]
--phantom <PHANTOM_FUNCTIONS>
Specify phantom functions whose body will be ignored in the circuit
--wasm <WASM>
Path to the Wasm image

Single prove and verify:

cargo run --release -- --params <PARAMS> <NAME> prove [OPTIONS] --wasm <WASM> --output <OUTPUT>

with OPTIONS:

 --ctxin <CONTEXT_INPUT>
Context inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--ctxin`
--ctxout [<CONTEXT_OUTPUT>...]
Path to context output
--file
Enabling the file backend for table to support enormous execution trace. It may reduce
the speed of execution.
-h, --help
Print help information
-m, --mock
Enable mock test before proving
-o, --output <OUTPUT>
Path to output directory
--private <PRIVATE_INPUT>
Private inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--private`
--public <PUBLIC_INPUT>
Public inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--public`
--wasm <WASM>
Path to the Wasm image
cargo run --release -- --params <PARAMS> <NAME> verify --output <OUTPUT>

Batch prove and verify:

Please see zkWASM continuation batcher at https://github.com/DelphinusLab/continuation-batcher for batching proof with host circuits and verifier generation in smart contracts.

Operations Spec [WIP]

We use z3 (https://github.com/Z3Prover/z3) to check that all operations are compiled to zkp circuits correctly.

[This is a WIP project, only sample code are provided here. Please contact xgao@zoyoe.com for state circuit customization and application integration.

Issue tracking:

  • chore: non-feature requirements such as CI/CD, building script or work flow enhancement.
  • feat: feature need, we could use feat(circuit), feat(lang), feat(CLI) to categorize features
  • bug: bug report, we also could use bug(circuit), bug(lang) to categorize bugs
  • doc: documents related issues.

Project Bootstrap:

About

No description, website, or topics provided.

Resources

Stars

545 stars

Watchers

15 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Overview:

The mission of DelphinusLab is to provide Web2 developers with a concise toolset to leverage the power of Web3 in their applications. The ZKWASM (ZKSNARK virtual machine that supports Web Assembly) serves as a trustless layer between rich applications running on WASM runtime and smart contracts on chain.

WASM (or WebAssembly) is an open standard binary code format similar to assembly. Its initial objective was to provide an alternative to java-script with improved performance for the current web ecosystem. Benefiting from its platform independence, front-end flexibility (can be compiled from the majority of languages including C, C++, assembly script, rust, etc.), good isolated runtime and speed comes closer to the speed of a native binary, its usage is arising in distributed cloud and edge computing. Recently it has become a popular binary format for users to run customized functions on AWS Lambda, Open Yurt, AZURE, etc.

The idea of ZKWASM is derived from ZKSNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) which is a combination of SNARG (Succinct non-interactive arguments) and zero-knowledge proof. In general, the adoption of ZKSNARK usually requires implementing a program in arithmetic circuits or circuit-friendly languages (Pinocchio, TinyRAM, Buffet/Pequin, Geppetto, xJsnark framework, ZoKrates) that forms a barrier for existing programs to leverage its power. An alternative approach is, instead of applying ZKSNARK on the source code, applying it on the bytecode level of a virtual machine and implementing a zksnark-backed virtual machine. In this work, we take the approach of writing the whole WASM virtual machine in ZKSNARK circuits so that existing WASM applications can benefit from ZKSNARK by simply running on the ZKWASM, without any modification. Therefore, the cloud service provider can prove to any user that the computation result is computed honestly and no private information is leaked.

Circuit Details:

https://ieeexplore.ieee.org/document/10587123

Quick start with ZKWASM command line

Dependency

Make sure the following packages are installed.

clang lld

Install Instructions

git clone --recurse-submodules https://github.com/DelphinusLab/zkwasm
cargo build

Setup input:

wasm code

Runtime input:

input of wasm function and the top level function must be zkmain

Proving target:

simulation of wasm execution of target wasm bytecode with particular inputs are correct.

Command line:

Setup via WASM image:

delphinus-cli --params <PARAMS> <NAME> setup [OPTIONS] --wasm <WASM>

with OPTIONS:

 -h, --help
Print help information
--host <HOST_MODE>
Specify execution host environment for the runtime [default: default] [possible values:
default, standard]
-k <K>
Size of the circuit. [default: 18]
--phantom <PHANTOM_FUNCTIONS>
Specify phantom functions whose body will be ignored in the circuit
--wasm <WASM>
Path to the Wasm image

Single prove and verify:

cargo run --release -- --params <PARAMS> <NAME> prove [OPTIONS] --wasm <WASM> --output <OUTPUT>

with OPTIONS:

 --ctxin <CONTEXT_INPUT>
Context inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--ctxin`
--ctxout [<CONTEXT_OUTPUT>...]
Path to context output
--file
Enabling the file backend for table to support enormous execution trace. It may reduce
the speed of execution.
-h, --help
Print help information
-m, --mock
Enable mock test before proving
-o, --output <OUTPUT>
Path to output directory
--private <PRIVATE_INPUT>
Private inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--private`
--public <PUBLIC_INPUT>
Public inputs with format value:type where type=i64|bytes|bytes-packed, values can be
separated by `,` or multiple occurrences of `--public`
--wasm <WASM>
Path to the Wasm image
cargo run --release -- --params <PARAMS> <NAME> verify --output <OUTPUT>

Batch prove and verify:

Please see zkWASM continuation batcher at https://github.com/DelphinusLab/continuation-batcher for batching proof with host circuits and verifier generation in smart contracts.

Operations Spec [WIP]

We use z3 (https://github.com/Z3Prover/z3) to check that all operations are compiled to zkp circuits correctly.

[This is a WIP project, only sample code are provided here. Please contact xgao@zoyoe.com for state circuit customization and application integration.

Issue tracking:

  • chore: non-feature requirements such as CI/CD, building script or work flow enhancement.
  • feat: feature need, we could use feat(circuit), feat(lang), feat(CLI) to categorize features
  • bug: bug report, we also could use bug(circuit), bug(lang) to categorize bugs
  • doc: documents related issues.

Project Bootstrap:

About

No description, website, or topics provided.

Resources

Stars

545 stars

Watchers

15 watching

Forks

Releases

Packages

Used by

Contributors

Languages