@corpus-core/colibri-stateless 1.1.10 → 1.1.12
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/README.md +49 -0
- package/c4w.js +1 -1
- package/c4w.wasm +0 -0
- package/cjs/http.js +1 -1
- package/cjs/index.js +15 -5
- package/cjs/strategy.js +2 -2
- package/cjs/wasm.js +2 -1
- package/cjs/wasm_cjs.js +2 -1
- package/cjs/wasm_shared.js +11 -1
- package/http.js +1 -1
- package/index.d.ts +4 -2
- package/index.js +14 -5
- package/package.json +1 -1
- package/strategy.js +2 -2
- package/types.d.ts +7 -2
- package/wasm.d.ts +1 -0
- package/wasm.js +1 -0
- package/wasm_cjs.d.ts +1 -0
- package/wasm_cjs.js +1 -0
- package/wasm_shared.d.ts +4 -2
- package/wasm_shared.js +11 -1
package/README.md
CHANGED
|
@@ -282,6 +282,10 @@ The constructor of the colibri client accepts a configuration-object, which may
|
|
|
282
282
|
```js
|
|
283
283
|
new Colibri({ include_code: true})
|
|
284
284
|
```
|
|
285
|
+
- `privacy_mode` - **PAP (Pragmatic Adaptive Privacy)** mode: `"none"` (default) or `"basic"`. With `"basic"`, the verifier may use cached storage for optimistic execution and verify afterwards; method type can depend on params.
|
|
286
|
+
```js
|
|
287
|
+
new Colibri({ privacy_mode: "basic" })
|
|
288
|
+
```
|
|
285
289
|
|
|
286
290
|
- `verify`- a function to decide which request should be verified and which should be fetched from the default RPC-Provider. It allows you to speed up performance for requests which are not critical.
|
|
287
291
|
```js
|
|
@@ -372,6 +376,51 @@ If you prefer not to use presets or your environment doesn't support them well:
|
|
|
372
376
|
After a successful build (using either method), the JS/WASM module will be in the configured build directory's `emscripten` subfolder (e.g., `build/wasm/emscripten`).
|
|
373
377
|
|
|
374
378
|
|
|
379
|
+
## Debugging WASM
|
|
380
|
+
|
|
381
|
+
When tracking down bugs in the C core running as WASM, there are two approaches depending on the level of detail you need.
|
|
382
|
+
|
|
383
|
+
### Source-level C debugging in the browser (recommended)
|
|
384
|
+
|
|
385
|
+
The `wasm-debug` CMake preset produces a WASM build with full [DWARF](https://yurydelendik.github.io/webassembly-dwarf/) debug info. Combined with the Chrome extension **C/C++ DevTools Support (DWARF)**, this allows setting breakpoints in C source files, inspecting variables and structs, and stepping through C code directly in Chrome DevTools.
|
|
386
|
+
|
|
387
|
+
1. Install the Chrome extension [C/C++ DevTools Support (DWARF)](https://chromewebstore.google.com/detail/cc++-devtools-support-dwa/pdcpmagijalfljmkmjngeonclgbbannb).
|
|
388
|
+
|
|
389
|
+
2. Build with the debug preset:
|
|
390
|
+
```sh
|
|
391
|
+
cmake --preset wasm-debug
|
|
392
|
+
cmake --build build/wasm-debug
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
3. Serve the project root (so both build output and source files are accessible):
|
|
396
|
+
```sh
|
|
397
|
+
python3 -m http.server 8080
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
4. Open the debug test harness in Chrome:
|
|
401
|
+
```
|
|
402
|
+
http://localhost:8080/bindings/emscripten/test/debug.html
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
5. Open DevTools (F12), go to the **Sources** tab. After the WASM module loads, your C source files appear in the file tree. Set breakpoints, select a test case, and click Run.
|
|
406
|
+
|
|
407
|
+
> **Note:** The DWARF extension only works in browser tabs, not in Node.js inspect sessions. For C-level debugging, always use the browser approach.
|
|
408
|
+
|
|
409
|
+
The debug build uses `-O1` instead of `-O0` to keep crypto operations (BLS, SHA256) at a reasonable speed while preserving most debug information. If you need full variable visibility at the cost of performance, change `-O1` to `-O0` in `bindings/emscripten/CMakeLists.txt`.
|
|
410
|
+
|
|
411
|
+
### Node.js test debugging (JS-level)
|
|
412
|
+
|
|
413
|
+
For debugging the JavaScript/TypeScript layer or seeing C function names in stack traces without full source mapping:
|
|
414
|
+
|
|
415
|
+
```sh
|
|
416
|
+
cd bindings/emscripten
|
|
417
|
+
node --inspect-brk --test test/rpc.test.mjs
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
Then open `chrome://inspect` in Chrome and click "inspect" on the Node.js target. You can set breakpoints in the JS/TS files and see readable C function names in call stacks (via `--profiling-funcs`), but C source stepping is not available in this mode.
|
|
421
|
+
|
|
422
|
+
There is also a VS Code / Cursor launch configuration **"WASM Node Test (inspect)"** that starts the debugger automatically.
|
|
423
|
+
|
|
375
424
|
## Concept
|
|
376
425
|
|
|
377
426
|
The idea behind C4 is to create a ultra light client or better verifier which can be used in Websites, Mobile applications, but especially in embedded systems. The Prover is a library which can used within you mobile app or in the backend to create Proof that the given data is valid. The Verifier is a library which can be used within the embedded system to verify this Proof.
|
package/c4w.js
CHANGED
|
@@ -5,7 +5,7 @@ var c4w = (() => {
|
|
|
5
5
|
async function(moduleArg = {}) {
|
|
6
6
|
var moduleRtn;
|
|
7
7
|
|
|
8
|
-
var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.slice(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var wasmBinary=Module["wasmBinary"];var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);Module["HEAP64"]=HEAP64=new BigInt64Array(b);Module["HEAPU64"]=HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports["r"]()}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("c4w.wasm")}return new URL("c4w.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["q"];updateMemoryViews();removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(mod,inst)=>{receiveInstance(mod,inst);resolve(mod.exports)})})}wasmBinaryFile??=findWasmBinary();try{var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}catch(e){readyPromiseReject(e);return Promise.reject(e)}}var ASM_CONSTS={167388:($0,$1)=>{var keyStr=UTF8ToString($0);var data=Module.storage.get(keyStr);if(data){var bufferPtr=_c4w_buffer_alloc($1,data.length);HEAPU8.set(data,bufferPtr);return 1}return 0},167576:($0,$1,$2)=>{var keyStr=UTF8ToString($0);var array=new Uint8Array($2);array.set(HEAPU8.subarray($1,$1+$2));Module.storage.set(keyStr,array)},167719:$0=>{var keyStr=UTF8ToString($0);Module.storage.del(keyStr)}};class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.unshift(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.unshift(cb);var noExitRuntime=Module["noExitRuntime"]||true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]);class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var SYSCALLS={varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;return 0}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;return 0}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs}var __abort_js=()=>abort("");var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset<winterOffset){stringToUTF8(winterName,std_name,17);stringToUTF8(summerName,dst_name,17)}else{stringToUTF8(winterName,dst_name,17);stringToUTF8(summerName,std_name,17)}};var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==106?HEAP64[buf>>3]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i<str.length;++i){HEAP8[buffer++]=str.charCodeAt(i)}HEAP8[buffer]=0};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);HEAPU32[penviron_buf_size>>2]=bufSize;return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var _fd_close=fd=>52;var _fd_read=(fd,iov,iovcnt,pnum)=>52;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>num<INT53_MIN||num>INT53_MAX?NaN:Number(num);function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);return 70}var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func(...cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}ret=onDone(ret);return ret};var cwrap=(ident,returnType,argTypes,opts)=>{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};var wasmImports={a:___assert_fail,b:___cxa_throw,g:___syscall_fcntl64,i:___syscall_ioctl,j:___syscall_openat,l:__abort_js,k:__tzset_js,d:_emscripten_asm_const_int,m:_emscripten_resize_heap,o:_environ_get,p:_environ_sizes_get,c:_exit,e:_fd_close,h:_fd_read,n:_fd_seek,f:_fd_write};var wasmExports=await createWasm();var ___wasm_call_ctors=wasmExports["r"];var _c4w_create_proof_ctx=Module["_c4w_create_proof_ctx"]=wasmExports["s"];var _c4w_free_proof_ctx=Module["_c4w_free_proof_ctx"]=wasmExports["t"];var _c4w_execute_proof_ctx=Module["_c4w_execute_proof_ctx"]=wasmExports["u"];var _c4w_req_set_response=Module["_c4w_req_set_response"]=wasmExports["v"];var _c4w_req_set_error=Module["_c4w_req_set_error"]=wasmExports["w"];var _c4w_create_verify_ctx=Module["_c4w_create_verify_ctx"]=wasmExports["x"];var _c4w_free_verify_ctx=Module["_c4w_free_verify_ctx"]=wasmExports["y"];var _free=Module["_free"]=wasmExports["z"];var _c4w_get_method_type=Module["_c4w_get_method_type"]=wasmExports["A"];var _c4w_verify_proof=Module["_c4w_verify_proof"]=wasmExports["B"];var _c4w_req_free=Module["_c4w_req_free"]=wasmExports["C"];var _c4w_buffer_alloc=Module["_c4w_buffer_alloc"]=wasmExports["D"];var _init_storage=Module["_init_storage"]=wasmExports["E"];var _malloc=Module["_malloc"]=wasmExports["G"];var __emscripten_stack_restore=wasmExports["H"];var __emscripten_stack_alloc=wasmExports["I"];var _emscripten_stack_get_current=wasmExports["J"];Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["UTF8ToString"]=UTF8ToString;Module["stringToUTF8"]=stringToUTF8;function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();moduleRtn=readyPromise;
|
|
8
|
+
var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.slice(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var wasmBinary=Module["wasmBinary"];var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);Module["HEAP64"]=HEAP64=new BigInt64Array(b);Module["HEAPU64"]=HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports["r"]()}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("c4w.wasm")}return new URL("c4w.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["q"];updateMemoryViews();removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(mod,inst)=>{receiveInstance(mod,inst);resolve(mod.exports)})})}wasmBinaryFile??=findWasmBinary();try{var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}catch(e){readyPromiseReject(e);return Promise.reject(e)}}var ASM_CONSTS={168732:($0,$1)=>{var keyStr=UTF8ToString($0);var data=Module.storage.get(keyStr);if(data){var bufferPtr=_c4w_buffer_alloc($1,data.length);HEAPU8.set(data,bufferPtr);return 1}return 0},168920:($0,$1,$2)=>{var keyStr=UTF8ToString($0);var array=new Uint8Array($2);array.set(HEAPU8.subarray($1,$1+$2));Module.storage.set(keyStr,array)},169063:$0=>{var keyStr=UTF8ToString($0);Module.storage.del(keyStr)}};class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.unshift(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.unshift(cb);var noExitRuntime=Module["noExitRuntime"]||true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]);class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var SYSCALLS={varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;return 0}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;return 0}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs}var __abort_js=()=>abort("");var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset<winterOffset){stringToUTF8(winterName,std_name,17);stringToUTF8(summerName,dst_name,17)}else{stringToUTF8(winterName,dst_name,17);stringToUTF8(summerName,std_name,17)}};var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==106?HEAP64[buf>>3]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i<str.length;++i){HEAP8[buffer++]=str.charCodeAt(i)}HEAP8[buffer]=0};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);HEAPU32[penviron_buf_size>>2]=bufSize;return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var _fd_close=fd=>52;var _fd_read=(fd,iov,iovcnt,pnum)=>52;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>num<INT53_MIN||num>INT53_MAX?NaN:Number(num);function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);return 70}var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func(...cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}ret=onDone(ret);return ret};var cwrap=(ident,returnType,argTypes,opts)=>{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};var wasmImports={a:___assert_fail,b:___cxa_throw,g:___syscall_fcntl64,i:___syscall_ioctl,j:___syscall_openat,l:__abort_js,k:__tzset_js,d:_emscripten_asm_const_int,m:_emscripten_resize_heap,o:_environ_get,p:_environ_sizes_get,c:_exit,e:_fd_close,h:_fd_read,n:_fd_seek,f:_fd_write};var wasmExports=await createWasm();var ___wasm_call_ctors=wasmExports["r"];var _c4w_create_proof_ctx=Module["_c4w_create_proof_ctx"]=wasmExports["s"];var _c4w_free_proof_ctx=Module["_c4w_free_proof_ctx"]=wasmExports["t"];var _c4w_execute_proof_ctx=Module["_c4w_execute_proof_ctx"]=wasmExports["u"];var _c4w_req_set_response=Module["_c4w_req_set_response"]=wasmExports["v"];var _c4w_req_set_error=Module["_c4w_req_set_error"]=wasmExports["w"];var _c4w_create_verify_ctx=Module["_c4w_create_verify_ctx"]=wasmExports["x"];var _c4w_free_verify_ctx=Module["_c4w_free_verify_ctx"]=wasmExports["y"];var _free=Module["_free"]=wasmExports["z"];var _c4w_get_method_type=Module["_c4w_get_method_type"]=wasmExports["A"];var _c4w_verify_proof=Module["_c4w_verify_proof"]=wasmExports["B"];var _c4w_decode_proof=Module["_c4w_decode_proof"]=wasmExports["C"];var _c4w_req_free=Module["_c4w_req_free"]=wasmExports["D"];var _c4w_buffer_alloc=Module["_c4w_buffer_alloc"]=wasmExports["E"];var _init_storage=Module["_init_storage"]=wasmExports["F"];var _malloc=Module["_malloc"]=wasmExports["H"];var __emscripten_stack_restore=wasmExports["I"];var __emscripten_stack_alloc=wasmExports["J"];var _emscripten_stack_get_current=wasmExports["K"];Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["UTF8ToString"]=UTF8ToString;Module["stringToUTF8"]=stringToUTF8;function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();moduleRtn=readyPromise;
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
return moduleRtn;
|
package/c4w.wasm
CHANGED
|
Binary file
|
package/cjs/http.js
CHANGED
|
@@ -143,7 +143,7 @@ async function handle_request(req, conf) {
|
|
|
143
143
|
: req.url;
|
|
144
144
|
let cacheable = conf.cache && conf.cache.cacheable(req);
|
|
145
145
|
if (cacheable && conf.cache) {
|
|
146
|
-
const data = conf.cache.get(req);
|
|
146
|
+
const data = await conf.cache.get(req);
|
|
147
147
|
if (data) {
|
|
148
148
|
if (conf.debug)
|
|
149
149
|
log(`::: ${path} (len=${data.length} bytes) CACHED`);
|
package/cjs/index.js
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* SPDX-License-Identifier: MIT
|
|
23
23
|
*/
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.PrototypeProtection = exports.TransactionVerifier = exports.MethodType = exports.ProviderRpcError = exports.set_wasm_url = exports.Strategy = void 0;
|
|
25
|
+
exports.PrototypeProtection = exports.TransactionVerifier = exports.MethodType = exports.ProviderRpcError = exports.decode_proof = exports.set_wasm_url = exports.Strategy = void 0;
|
|
26
26
|
// Import the Emscripten-generated module
|
|
27
27
|
const wasm_js_1 = require("./wasm.js");
|
|
28
28
|
const eventEmitter_js_1 = require("./eventEmitter.js");
|
|
@@ -39,6 +39,7 @@ const http_js_1 = require("./http.js");
|
|
|
39
39
|
// Public helper for controlling WASM loading behavior in Node/bundlers.
|
|
40
40
|
var wasm_js_2 = require("./wasm.js");
|
|
41
41
|
Object.defineProperty(exports, "set_wasm_url", { enumerable: true, get: function () { return wasm_js_2.set_wasm_url; } });
|
|
42
|
+
Object.defineProperty(exports, "decode_proof", { enumerable: true, get: function () { return wasm_js_2.decode_proof; } });
|
|
42
43
|
// Re-export transaction verification utilities
|
|
43
44
|
var transactionVerifier_js_2 = require("./transactionVerifier.js");
|
|
44
45
|
Object.defineProperty(exports, "TransactionVerifier", { enumerable: true, get: function () { return transactionVerifier_js_2.TransactionVerifier; } });
|
|
@@ -69,6 +70,7 @@ class C4Client {
|
|
|
69
70
|
constructor(config) {
|
|
70
71
|
this.initMap = new Map();
|
|
71
72
|
this.flags = 0;
|
|
73
|
+
this.verify_flags = 0;
|
|
72
74
|
const chainId = config?.chainId ? (0, chains_js_1.get_chain_id)(config?.chainId + '') : 1;
|
|
73
75
|
const chain_config = { ...chains_js_1.default_config[chainId + ''] };
|
|
74
76
|
// Protect against config manipulation (deep-freeze at sensitive boundaries)
|
|
@@ -85,6 +87,12 @@ class C4Client {
|
|
|
85
87
|
// Apply config immutability/protection
|
|
86
88
|
transactionVerifier_js_1.PrototypeProtection.protectConfig(baseConfig, ['rpcs', 'beacon_apis', 'prover', 'checkpointz']);
|
|
87
89
|
this.config = baseConfig;
|
|
90
|
+
if (this.config.include_code)
|
|
91
|
+
this.flags |= 1;
|
|
92
|
+
if (this.config.use_accesslist)
|
|
93
|
+
this.flags |= (1 << 6);
|
|
94
|
+
if (this.config.privacy_mode === 'basic')
|
|
95
|
+
this.verify_flags |= 2;
|
|
88
96
|
if (!this.config.warningHandler)
|
|
89
97
|
this.config.warningHandler = async (req, message) => console.warn(message);
|
|
90
98
|
if (!this.config.proofStrategy)
|
|
@@ -123,12 +131,14 @@ class C4Client {
|
|
|
123
131
|
/**
|
|
124
132
|
* Checks whether the RPC method is supported or proofable.
|
|
125
133
|
* @param method - The method to check
|
|
134
|
+
* @param args - Optional method arguments (used in PAP mode to check cached data availability)
|
|
126
135
|
* @returns The method type
|
|
127
136
|
*/
|
|
128
|
-
async getMethodSupport(method) {
|
|
137
|
+
async getMethodSupport(method, args) {
|
|
129
138
|
const c4w = await (0, wasm_js_1.getC4w)();
|
|
130
139
|
const free_buffers = [];
|
|
131
|
-
const
|
|
140
|
+
const paramsStr = args ? JSON.stringify(args) : null;
|
|
141
|
+
const method_type = c4w._c4w_get_method_type(BigInt(this.config.chainId), (0, wasm_js_1.as_char_ptr)(method, c4w, free_buffers), paramsStr ? (0, wasm_js_1.as_char_ptr)(paramsStr, c4w, free_buffers) : 0, this.verify_flags);
|
|
132
142
|
free_buffers.forEach(ptr => c4w._free(ptr));
|
|
133
143
|
return method_type;
|
|
134
144
|
}
|
|
@@ -184,7 +194,7 @@ class C4Client {
|
|
|
184
194
|
const witness_keys_ptr = this.config.checkpoint_witness_keys
|
|
185
195
|
? (0, wasm_js_1.as_char_ptr)(this.config.checkpoint_witness_keys, c4w, free_buffers)
|
|
186
196
|
: 0;
|
|
187
|
-
ctx = c4w._c4w_create_verify_ctx((0, wasm_js_1.copy_to_c)(proof, c4w, free_buffers), proof.length, (0, wasm_js_1.as_char_ptr)(method, c4w, free_buffers), (0, wasm_js_1.as_char_ptr)(JSON.stringify(args), c4w, free_buffers), BigInt(this.config.chainId), checkpoint_ptr, witness_keys_ptr);
|
|
197
|
+
ctx = c4w._c4w_create_verify_ctx((0, wasm_js_1.copy_to_c)(proof, c4w, free_buffers), proof.length, (0, wasm_js_1.as_char_ptr)(method, c4w, free_buffers), (0, wasm_js_1.as_char_ptr)(JSON.stringify(args), c4w, free_buffers), BigInt(this.config.chainId), checkpoint_ptr, witness_keys_ptr, this.verify_flags);
|
|
188
198
|
while (true) {
|
|
189
199
|
const state = (0, wasm_js_1.as_json)(c4w._c4w_verify_proof(ctx), c4w, true);
|
|
190
200
|
switch (state.status) {
|
|
@@ -227,7 +237,7 @@ class C4Client {
|
|
|
227
237
|
return await transactionVerifier_js_1.TransactionVerifier.verifyAndSendTransaction(args[0], this.config, (method, args, methodType) => this.rpc(method, args, methodType), http_js_1.fetch_rpc);
|
|
228
238
|
}
|
|
229
239
|
if (method_type === undefined)
|
|
230
|
-
method_type = await this.getMethodSupport(method);
|
|
240
|
+
method_type = await this.getMethodSupport(method, args);
|
|
231
241
|
switch (method_type) {
|
|
232
242
|
case types_js_1.MethodType.PROOFABLE: {
|
|
233
243
|
if (this.config.verify && !this.config.verify(method, args)) {
|
package/cjs/strategy.js
CHANGED
|
@@ -75,7 +75,7 @@ function OnlyProofStrategy(client, req, config, fetch_rpc) {
|
|
|
75
75
|
return client.rpc(req.method, argsToArray(req.params));
|
|
76
76
|
}
|
|
77
77
|
async function ProofIfPossibleStrategy(client, req, config, fetch_rpc) {
|
|
78
|
-
const method_type = await client.getMethodSupport(req.method);
|
|
78
|
+
const method_type = await client.getMethodSupport(req.method, argsToArray(req.params));
|
|
79
79
|
switch (method_type) {
|
|
80
80
|
case types_js_1.MethodType.PROOFABLE:
|
|
81
81
|
case types_js_1.MethodType.LOCAL:
|
|
@@ -85,7 +85,7 @@ async function ProofIfPossibleStrategy(client, req, config, fetch_rpc) {
|
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
async function WarningStrategy(client, req, config, fetch_rpc) {
|
|
88
|
-
const method_type = await client.getMethodSupport(req.method);
|
|
88
|
+
const method_type = await client.getMethodSupport(req.method, argsToArray(req.params));
|
|
89
89
|
switch (method_type) {
|
|
90
90
|
case types_js_1.MethodType.LOCAL:
|
|
91
91
|
return client.rpc(req.method, argsToArray(req.params), method_type);
|
package/cjs/wasm.js
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* SPDX-License-Identifier: MIT
|
|
23
23
|
*/
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.set_trusted_checkpoint = exports.get_prover_config_hex = exports.getC4w = exports.loadC4WModule = exports.set_wasm_url = exports.get_default_storage = exports.copy_to_c = exports.as_json = exports.as_char_ptr = exports.as_bytes = void 0;
|
|
25
|
+
exports.decode_proof = exports.set_trusted_checkpoint = exports.get_prover_config_hex = exports.getC4w = exports.loadC4WModule = exports.set_wasm_url = exports.get_default_storage = exports.copy_to_c = exports.as_json = exports.as_char_ptr = exports.as_bytes = void 0;
|
|
26
26
|
// This file is used only for the CommonJS build output. It must not use
|
|
27
27
|
// `import.meta` because that is a parse error in CommonJS environments (e.g. Jest).
|
|
28
28
|
const node_path_1 = require("node:path");
|
|
@@ -63,3 +63,4 @@ exports.loadC4WModule = api.loadC4WModule;
|
|
|
63
63
|
exports.getC4w = api.getC4w;
|
|
64
64
|
exports.get_prover_config_hex = api.get_prover_config_hex;
|
|
65
65
|
exports.set_trusted_checkpoint = api.set_trusted_checkpoint;
|
|
66
|
+
exports.decode_proof = api.decode_proof;
|
package/cjs/wasm_cjs.js
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* SPDX-License-Identifier: MIT
|
|
23
23
|
*/
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.set_trusted_checkpoint = exports.get_prover_config_hex = exports.getC4w = exports.loadC4WModule = exports.set_wasm_url = exports.get_default_storage = exports.copy_to_c = exports.as_json = exports.as_char_ptr = exports.as_bytes = void 0;
|
|
25
|
+
exports.decode_proof = exports.set_trusted_checkpoint = exports.get_prover_config_hex = exports.getC4w = exports.loadC4WModule = exports.set_wasm_url = exports.get_default_storage = exports.copy_to_c = exports.as_json = exports.as_char_ptr = exports.as_bytes = void 0;
|
|
26
26
|
// This file is used only for the CommonJS build output. It must not use
|
|
27
27
|
// `import.meta` because that is a parse error in CommonJS environments (e.g. Jest).
|
|
28
28
|
const node_path_1 = require("node:path");
|
|
@@ -63,3 +63,4 @@ exports.loadC4WModule = api.loadC4WModule;
|
|
|
63
63
|
exports.getC4w = api.getC4w;
|
|
64
64
|
exports.get_prover_config_hex = api.get_prover_config_hex;
|
|
65
65
|
exports.set_trusted_checkpoint = api.set_trusted_checkpoint;
|
|
66
|
+
exports.decode_proof = api.decode_proof;
|
package/cjs/wasm_shared.js
CHANGED
|
@@ -208,14 +208,24 @@ function createC4wApi(options) {
|
|
|
208
208
|
async function set_trusted_checkpoint(chainId, checkpoint) {
|
|
209
209
|
const c4w = await getC4w();
|
|
210
210
|
const free_buffers = [];
|
|
211
|
-
c4w._c4w_create_verify_ctx(0, 0, 0, 0, BigInt(chainId), as_char_ptr(checkpoint, c4w, free_buffers), 0);
|
|
211
|
+
c4w._c4w_create_verify_ctx(0, 0, 0, 0, BigInt(chainId), as_char_ptr(checkpoint, c4w, free_buffers), 0, 0);
|
|
212
212
|
free_buffers.forEach(ptr => c4w._free(ptr));
|
|
213
213
|
}
|
|
214
|
+
async function decode_proof(proof) {
|
|
215
|
+
const c4w = await getC4w();
|
|
216
|
+
const ptr = copy_to_c(proof, c4w);
|
|
217
|
+
const resultPtr = c4w._c4w_decode_proof(ptr, proof.length);
|
|
218
|
+
c4w._free(ptr);
|
|
219
|
+
if (!resultPtr)
|
|
220
|
+
throw new Error('Unknown proof format');
|
|
221
|
+
return as_json(resultPtr, c4w, true);
|
|
222
|
+
}
|
|
214
223
|
return {
|
|
215
224
|
set_wasm_url,
|
|
216
225
|
loadC4WModule,
|
|
217
226
|
getC4w,
|
|
218
227
|
get_prover_config_hex,
|
|
219
228
|
set_trusted_checkpoint,
|
|
229
|
+
decode_proof,
|
|
220
230
|
};
|
|
221
231
|
}
|
package/http.js
CHANGED
|
@@ -138,7 +138,7 @@ export async function handle_request(req, conf) {
|
|
|
138
138
|
: req.url;
|
|
139
139
|
let cacheable = conf.cache && conf.cache.cacheable(req);
|
|
140
140
|
if (cacheable && conf.cache) {
|
|
141
|
-
const data = conf.cache.get(req);
|
|
141
|
+
const data = await conf.cache.get(req);
|
|
142
142
|
if (data) {
|
|
143
143
|
if (conf.debug)
|
|
144
144
|
log(`::: ${path} (len=${data.length} bytes) CACHED`);
|
package/index.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ import { ProviderRpcError, RequestArguments, Cache, Config as C4Config, DataRequ
|
|
|
25
25
|
import { EthSubscribeSubscriptionType, EthNewFilterType } from './subscriptionManager.js';
|
|
26
26
|
import Strategy from './strategy.js';
|
|
27
27
|
export { Strategy };
|
|
28
|
-
export { set_wasm_url } from "./wasm.js";
|
|
28
|
+
export { set_wasm_url, decode_proof } from "./wasm.js";
|
|
29
29
|
export { ProviderRpcError, RequestArguments, Cache, C4Config, DataRequest, C4MethodType as MethodType, ProviderMessage, EthSubscribeSubscriptionType, EthNewFilterType };
|
|
30
30
|
export { TransactionVerifier, PrototypeProtection } from './transactionVerifier.js';
|
|
31
31
|
export default class C4Client {
|
|
@@ -35,6 +35,7 @@ export default class C4Client {
|
|
|
35
35
|
private subscriptionManager;
|
|
36
36
|
private initMap;
|
|
37
37
|
private flags;
|
|
38
|
+
private verify_flags;
|
|
38
39
|
private static readonly CRITICAL_METHODS;
|
|
39
40
|
/**
|
|
40
41
|
* Creates a new Colibri client instance.
|
|
@@ -53,9 +54,10 @@ export default class C4Client {
|
|
|
53
54
|
/**
|
|
54
55
|
* Checks whether the RPC method is supported or proofable.
|
|
55
56
|
* @param method - The method to check
|
|
57
|
+
* @param args - Optional method arguments (used in PAP mode to check cached data availability)
|
|
56
58
|
* @returns The method type
|
|
57
59
|
*/
|
|
58
|
-
getMethodSupport(method: string): Promise<C4MethodType>;
|
|
60
|
+
getMethodSupport(method: string, args?: any[]): Promise<C4MethodType>;
|
|
59
61
|
/**
|
|
60
62
|
* Creates a proof for the given method and arguments.
|
|
61
63
|
* @param method - The method to create a proof for
|
package/index.js
CHANGED
|
@@ -32,7 +32,7 @@ import { TransactionVerifier, PrototypeProtection } from './transactionVerifier.
|
|
|
32
32
|
import { fetch_rpc, handle_request } from './http.js';
|
|
33
33
|
export { Strategy };
|
|
34
34
|
// Public helper for controlling WASM loading behavior in Node/bundlers.
|
|
35
|
-
export { set_wasm_url } from "./wasm.js";
|
|
35
|
+
export { set_wasm_url, decode_proof } from "./wasm.js";
|
|
36
36
|
// Re-export types needed by consumers of the C4Client module
|
|
37
37
|
export { ProviderRpcError, C4MethodType as MethodType };
|
|
38
38
|
// Re-export transaction verification utilities
|
|
@@ -63,6 +63,7 @@ class C4Client {
|
|
|
63
63
|
constructor(config) {
|
|
64
64
|
this.initMap = new Map();
|
|
65
65
|
this.flags = 0;
|
|
66
|
+
this.verify_flags = 0;
|
|
66
67
|
const chainId = config?.chainId ? get_chain_id(config?.chainId + '') : 1;
|
|
67
68
|
const chain_config = { ...default_config[chainId + ''] };
|
|
68
69
|
// Protect against config manipulation (deep-freeze at sensitive boundaries)
|
|
@@ -79,6 +80,12 @@ class C4Client {
|
|
|
79
80
|
// Apply config immutability/protection
|
|
80
81
|
PrototypeProtection.protectConfig(baseConfig, ['rpcs', 'beacon_apis', 'prover', 'checkpointz']);
|
|
81
82
|
this.config = baseConfig;
|
|
83
|
+
if (this.config.include_code)
|
|
84
|
+
this.flags |= 1;
|
|
85
|
+
if (this.config.use_accesslist)
|
|
86
|
+
this.flags |= (1 << 6);
|
|
87
|
+
if (this.config.privacy_mode === 'basic')
|
|
88
|
+
this.verify_flags |= 2;
|
|
82
89
|
if (!this.config.warningHandler)
|
|
83
90
|
this.config.warningHandler = async (req, message) => console.warn(message);
|
|
84
91
|
if (!this.config.proofStrategy)
|
|
@@ -117,12 +124,14 @@ class C4Client {
|
|
|
117
124
|
/**
|
|
118
125
|
* Checks whether the RPC method is supported or proofable.
|
|
119
126
|
* @param method - The method to check
|
|
127
|
+
* @param args - Optional method arguments (used in PAP mode to check cached data availability)
|
|
120
128
|
* @returns The method type
|
|
121
129
|
*/
|
|
122
|
-
async getMethodSupport(method) {
|
|
130
|
+
async getMethodSupport(method, args) {
|
|
123
131
|
const c4w = await getC4w();
|
|
124
132
|
const free_buffers = [];
|
|
125
|
-
const
|
|
133
|
+
const paramsStr = args ? JSON.stringify(args) : null;
|
|
134
|
+
const method_type = c4w._c4w_get_method_type(BigInt(this.config.chainId), as_char_ptr(method, c4w, free_buffers), paramsStr ? as_char_ptr(paramsStr, c4w, free_buffers) : 0, this.verify_flags);
|
|
126
135
|
free_buffers.forEach(ptr => c4w._free(ptr));
|
|
127
136
|
return method_type;
|
|
128
137
|
}
|
|
@@ -178,7 +187,7 @@ class C4Client {
|
|
|
178
187
|
const witness_keys_ptr = this.config.checkpoint_witness_keys
|
|
179
188
|
? as_char_ptr(this.config.checkpoint_witness_keys, c4w, free_buffers)
|
|
180
189
|
: 0;
|
|
181
|
-
ctx = c4w._c4w_create_verify_ctx(copy_to_c(proof, c4w, free_buffers), proof.length, as_char_ptr(method, c4w, free_buffers), as_char_ptr(JSON.stringify(args), c4w, free_buffers), BigInt(this.config.chainId), checkpoint_ptr, witness_keys_ptr);
|
|
190
|
+
ctx = c4w._c4w_create_verify_ctx(copy_to_c(proof, c4w, free_buffers), proof.length, as_char_ptr(method, c4w, free_buffers), as_char_ptr(JSON.stringify(args), c4w, free_buffers), BigInt(this.config.chainId), checkpoint_ptr, witness_keys_ptr, this.verify_flags);
|
|
182
191
|
while (true) {
|
|
183
192
|
const state = as_json(c4w._c4w_verify_proof(ctx), c4w, true);
|
|
184
193
|
switch (state.status) {
|
|
@@ -221,7 +230,7 @@ class C4Client {
|
|
|
221
230
|
return await TransactionVerifier.verifyAndSendTransaction(args[0], this.config, (method, args, methodType) => this.rpc(method, args, methodType), fetch_rpc);
|
|
222
231
|
}
|
|
223
232
|
if (method_type === undefined)
|
|
224
|
-
method_type = await this.getMethodSupport(method);
|
|
233
|
+
method_type = await this.getMethodSupport(method, args);
|
|
225
234
|
switch (method_type) {
|
|
226
235
|
case C4MethodType.PROOFABLE: {
|
|
227
236
|
if (this.config.verify && !this.config.verify(method, args)) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@corpus-core/colibri-stateless",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.12",
|
|
4
4
|
"description": "Colibri is a stateless and trustless ethereum client, which is optimized for the mobile apps or embedded devices, because it does not hols the state, but verifies on demand.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
package/strategy.js
CHANGED
|
@@ -73,7 +73,7 @@ function OnlyProofStrategy(client, req, config, fetch_rpc) {
|
|
|
73
73
|
return client.rpc(req.method, argsToArray(req.params));
|
|
74
74
|
}
|
|
75
75
|
async function ProofIfPossibleStrategy(client, req, config, fetch_rpc) {
|
|
76
|
-
const method_type = await client.getMethodSupport(req.method);
|
|
76
|
+
const method_type = await client.getMethodSupport(req.method, argsToArray(req.params));
|
|
77
77
|
switch (method_type) {
|
|
78
78
|
case MethodType.PROOFABLE:
|
|
79
79
|
case MethodType.LOCAL:
|
|
@@ -83,7 +83,7 @@ async function ProofIfPossibleStrategy(client, req, config, fetch_rpc) {
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
async function WarningStrategy(client, req, config, fetch_rpc) {
|
|
86
|
-
const method_type = await client.getMethodSupport(req.method);
|
|
86
|
+
const method_type = await client.getMethodSupport(req.method, argsToArray(req.params));
|
|
87
87
|
switch (method_type) {
|
|
88
88
|
case MethodType.LOCAL:
|
|
89
89
|
return client.rpc(req.method, argsToArray(req.params), method_type);
|
package/types.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export declare class ProviderRpcError extends Error {
|
|
|
28
28
|
}
|
|
29
29
|
export interface ColibriClient {
|
|
30
30
|
rpc(method: string, params: any[], method_type?: MethodType): Promise<any>;
|
|
31
|
-
getMethodSupport(method: string): Promise<MethodType>;
|
|
31
|
+
getMethodSupport(method: string, args?: any[]): Promise<MethodType>;
|
|
32
32
|
}
|
|
33
33
|
export type FetchRpc = (urls: string[], payload: any, as_proof: boolean) => Promise<any>;
|
|
34
34
|
export type ProofStrategy = (client: ColibriClient, req: RequestArguments, config: Config, fetch_rpc: FetchRpc) => Promise<any>;
|
|
@@ -44,9 +44,11 @@ export interface ProviderMessage {
|
|
|
44
44
|
readonly type: string;
|
|
45
45
|
readonly data: unknown;
|
|
46
46
|
}
|
|
47
|
+
/** Pragmatic Adaptive Privacy mode. PAP_BASIC sets VERIFY_FLAG_PAP for method-type and verification. */
|
|
48
|
+
export type PrivacyMode = 'none' | 'basic';
|
|
47
49
|
export interface Cache {
|
|
48
50
|
cacheable(req: DataRequest): boolean;
|
|
49
|
-
get(req: DataRequest): Uint8Array | undefined
|
|
51
|
+
get(req: DataRequest): Uint8Array | undefined | null | Promise<Uint8Array | undefined | null>;
|
|
50
52
|
set(req: DataRequest, data: Uint8Array): void;
|
|
51
53
|
}
|
|
52
54
|
export interface ChainConfig {
|
|
@@ -71,6 +73,9 @@ export interface Config extends ChainConfig {
|
|
|
71
73
|
cache?: Cache;
|
|
72
74
|
debug?: boolean;
|
|
73
75
|
include_code?: boolean;
|
|
76
|
+
use_accesslist?: boolean;
|
|
77
|
+
/** Pragmatic Adaptive Privacy mode. Default "none". "basic" sets verify flag for PAP. */
|
|
78
|
+
privacy_mode?: PrivacyMode;
|
|
74
79
|
zk_proof?: boolean;
|
|
75
80
|
chains: {
|
|
76
81
|
[chainId: number]: ChainConfig;
|
package/wasm.d.ts
CHANGED
|
@@ -28,3 +28,4 @@ export declare const loadC4WModule: () => Promise<C4W>;
|
|
|
28
28
|
export declare const getC4w: () => Promise<C4W>;
|
|
29
29
|
export declare const get_prover_config_hex: (chainId: number) => Promise<string>;
|
|
30
30
|
export declare const set_trusted_checkpoint: (chainId: number, checkpoint: string) => Promise<void>;
|
|
31
|
+
export declare const decode_proof: (proof: Uint8Array) => Promise<any>;
|
package/wasm.js
CHANGED
package/wasm_cjs.d.ts
CHANGED
|
@@ -28,3 +28,4 @@ export declare const loadC4WModule: () => Promise<C4W>;
|
|
|
28
28
|
export declare const getC4w: () => Promise<C4W>;
|
|
29
29
|
export declare const get_prover_config_hex: (chainId: number) => Promise<string>;
|
|
30
30
|
export declare const set_trusted_checkpoint: (chainId: number, checkpoint: string) => Promise<void>;
|
|
31
|
+
export declare const decode_proof: (proof: Uint8Array) => Promise<any>;
|
package/wasm_cjs.js
CHANGED
package/wasm_shared.d.ts
CHANGED
|
@@ -27,11 +27,12 @@ export interface C4W {
|
|
|
27
27
|
_c4w_get_pending_data_request: (proofCtx: number) => number;
|
|
28
28
|
_c4w_req_set_response: (reqPtr: number, data: number, len: number, node_index: number) => void;
|
|
29
29
|
_c4w_req_set_error: (reqPtr: number, error: number, node_index: number) => void;
|
|
30
|
-
_c4w_get_method_type: (chain_id: bigint, method: number) => number;
|
|
31
|
-
_c4w_create_verify_ctx: (proof: number, proof_len: number, method: number, args: number, chain_id: bigint, trusted_checkpoint: number, witness_keys: number) => number;
|
|
30
|
+
_c4w_get_method_type: (chain_id: bigint, method: number, params: number, flags: number) => number;
|
|
31
|
+
_c4w_create_verify_ctx: (proof: number, proof_len: number, method: number, args: number, chain_id: bigint, trusted_checkpoint: number, witness_keys: number, flags: number) => number;
|
|
32
32
|
_c4w_free_verify_ctx: (verifyCtx: number) => void;
|
|
33
33
|
_c4w_verify_proof: (verifyCtx: number) => number;
|
|
34
34
|
_c4w_req_free: (reqPtr: number) => void;
|
|
35
|
+
_c4w_decode_proof: (data: number, len: number) => number;
|
|
35
36
|
_init_storage: () => void;
|
|
36
37
|
HEAPU8: Uint8Array;
|
|
37
38
|
stringToUTF8: (str: string, ptr: number, length: number) => number;
|
|
@@ -65,4 +66,5 @@ export declare function createC4wApi(options: {
|
|
|
65
66
|
getC4w: () => Promise<C4W>;
|
|
66
67
|
get_prover_config_hex: (chainId: number) => Promise<string>;
|
|
67
68
|
set_trusted_checkpoint: (chainId: number, checkpoint: string) => Promise<void>;
|
|
69
|
+
decode_proof: (proof: Uint8Array) => Promise<any>;
|
|
68
70
|
};
|
package/wasm_shared.js
CHANGED
|
@@ -198,14 +198,24 @@ export function createC4wApi(options) {
|
|
|
198
198
|
async function set_trusted_checkpoint(chainId, checkpoint) {
|
|
199
199
|
const c4w = await getC4w();
|
|
200
200
|
const free_buffers = [];
|
|
201
|
-
c4w._c4w_create_verify_ctx(0, 0, 0, 0, BigInt(chainId), as_char_ptr(checkpoint, c4w, free_buffers), 0);
|
|
201
|
+
c4w._c4w_create_verify_ctx(0, 0, 0, 0, BigInt(chainId), as_char_ptr(checkpoint, c4w, free_buffers), 0, 0);
|
|
202
202
|
free_buffers.forEach(ptr => c4w._free(ptr));
|
|
203
203
|
}
|
|
204
|
+
async function decode_proof(proof) {
|
|
205
|
+
const c4w = await getC4w();
|
|
206
|
+
const ptr = copy_to_c(proof, c4w);
|
|
207
|
+
const resultPtr = c4w._c4w_decode_proof(ptr, proof.length);
|
|
208
|
+
c4w._free(ptr);
|
|
209
|
+
if (!resultPtr)
|
|
210
|
+
throw new Error('Unknown proof format');
|
|
211
|
+
return as_json(resultPtr, c4w, true);
|
|
212
|
+
}
|
|
204
213
|
return {
|
|
205
214
|
set_wasm_url,
|
|
206
215
|
loadC4WModule,
|
|
207
216
|
getC4w,
|
|
208
217
|
get_prover_config_hex,
|
|
209
218
|
set_trusted_checkpoint,
|
|
219
|
+
decode_proof,
|
|
210
220
|
};
|
|
211
221
|
}
|