From f2b3011fb3c7a9c3ead0a311cce4dacc427a1934 Mon Sep 17 00:00:00 2001 From: niftynei Date: Tue, 4 Jul 2023 19:09:40 -0400 Subject: [PATCH 1/2] add id to commando.c turn the type from int to string -> print directly to CLN --- commando.c | 7 +++++-- commando.h | 2 +- dist/js/lnsocket.js | 6 +++--- dist/js/lnsocket.wasm | Bin 147919 -> 142399 bytes 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/commando.c b/commando.c index 9112498..6fbfd9f 100644 --- a/commando.c +++ b/commando.c @@ -4,9 +4,10 @@ #include "endian.h" #include "commando.h" #include "export.h" +#include int EXPORT commando_make_rpc_msg(const char *method, const char *params, - const char *rune, unsigned int req_id, unsigned char *buf, int buflen) + const char *rune, const char *req_id, unsigned char *buf, int buflen) { struct cursor msgbuf; int ok; @@ -27,7 +28,9 @@ int EXPORT commando_make_rpc_msg(const char *method, const char *params, cursor_push_str(&msgbuf, params) && cursor_push_str(&msgbuf, ",\"rune\":\"") && cursor_push_str(&msgbuf, rune) && - cursor_push_str(&msgbuf, "\",\"id\":\"d0\",\"jsonrpc\":\"2.0\"}"); + cursor_push_str(&msgbuf, "\",\"id\":\"") && + cursor_push_str(&msgbuf, req_id) && + cursor_push_str(&msgbuf, "\",\"jsonrpc\":\"2.0\"}"); if (!ok) return 0; diff --git a/commando.h b/commando.h index 1e4d211..27d8411 100644 --- a/commando.h +++ b/commando.h @@ -9,6 +9,6 @@ #define COMMANDO_REPLY_CONTINUES 0x594b #define COMMANDO_REPLY_TERM 0x594d -int EXPORT commando_make_rpc_msg(const char *method, const char *params, const char *rune, unsigned int req_id, unsigned char *buf, int buflen); +int EXPORT commando_make_rpc_msg(const char *method, const char *params, const char *rune, const char *id, unsigned char *buf, int buflen); #endif /* LNSOCKET_COMMANDO */ diff --git a/dist/js/lnsocket.js b/dist/js/lnsocket.js index a07f248..a54e818 100644 --- a/dist/js/lnsocket.js +++ b/dist/js/lnsocket.js @@ -3,14 +3,14 @@ var Module = (() => { var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; return ( -function(Module = {}) { +function(Module) { + Module = Module || {}; -var Module=typeof Module!="undefined"?Module:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});Module.getRandomValue=function(){const window_="object"===typeof window?window:this;const crypto_=typeof window_.crypto!=="undefined"?window_.crypto:window_.msCrypto;let randomBytesNode;let fn;if(!crypto_){randomBytesNode=require("crypto").randomBytes;fn=randomValuesNode}else{fn=randomValuesStandard}function randomValuesNode(){return randomBytesNode(1)[0]>>>0}function randomValuesStandard(){var buf=new Uint32Array(1);crypto_.getRandomValues(buf);return buf[0]>>>0}return fn}();var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;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(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};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=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="lnsocket.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(binaryFile)})}}return Promise.resolve().then(function(){return getBinary(binaryFile)})}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(function(binary){return WebAssembly.instantiate(binary,imports)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"a":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["i"];updateMemoryViews();wasmTable=Module["asm"]["m"];addOnInit(Module["asm"]["j"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);readyPromiseReject(e)}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var ASM_CONSTS={70256:()=>{return Module.getRandomValue()},70292:()=>{if(Module.getRandomValue===undefined){try{var window_="object"===typeof window?window:self;var crypto_=typeof window_.crypto!=="undefined"?window_.crypto:window_.msCrypto;var randomValuesStandard=function(){var buf=new Uint32Array(1);crypto_.getRandomValues(buf);return buf[0]>>>0};randomValuesStandard();Module.getRandomValue=randomValuesStandard}catch(e){try{var crypto=require("crypto");var randomValueNodeJS=function(){var buf=crypto["randomBytes"](4);return(buf[0]<<24|buf[1]<<16|buf[2]<<8|buf[3])>>>0};randomValueNodeJS();Module.getRandomValue=randomValueNodeJS}catch(e){throw"No secure random number generator found"}}}}};function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){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>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function _abort(){abort("")}var readEmAsmArgsArray=[];function readEmAsmArgs(sigPtr,buf){readEmAsmArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){buf+=ch!=105&buf;readEmAsmArgsArray.push(ch==105?HEAP32[buf]:HEAPF64[buf++>>1]);++buf}return readEmAsmArgsArray}function runEmAsmFunction(code,sigPtr,argbuf){var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_asm_const_int(code,sigPtr,argbuf){return runEmAsmFunction(code,sigPtr,argbuf)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _fd_close(fd){return 52}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){return 70}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0}function getCFunc(ident){var func=Module["_"+ident];return func}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=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}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function stringToUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret}function 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;itype==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return function(){return ccall(ident,returnType,argTypes,arguments,opts)}}var wasmImports={"a":___assert_fail,"b":_abort,"h":_emscripten_asm_const_int,"g":_emscripten_memcpy_big,"d":_emscripten_resize_heap,"f":_fd_close,"c":_fd_seek,"e":_fd_write};var asm=createWasm();var ___wasm_call_ctors=function(){return(___wasm_call_ctors=Module["asm"]["j"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["k"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["l"]).apply(null,arguments)};var ___errno_location=function(){return(___errno_location=Module["asm"]["__errno_location"]).apply(null,arguments)};var _lnsocket_make_default_initmsg=Module["_lnsocket_make_default_initmsg"]=function(){return(_lnsocket_make_default_initmsg=Module["_lnsocket_make_default_initmsg"]=Module["asm"]["n"]).apply(null,arguments)};var _lnsocket_encrypt=Module["_lnsocket_encrypt"]=function(){return(_lnsocket_encrypt=Module["_lnsocket_encrypt"]=Module["asm"]["o"]).apply(null,arguments)};var _lnsocket_decrypt=Module["_lnsocket_decrypt"]=function(){return(_lnsocket_decrypt=Module["_lnsocket_decrypt"]=Module["asm"]["p"]).apply(null,arguments)};var _lnsocket_decrypt_header=Module["_lnsocket_decrypt_header"]=function(){return(_lnsocket_decrypt_header=Module["_lnsocket_decrypt_header"]=Module["asm"]["q"]).apply(null,arguments)};var _lnsocket_make_pong_msg=Module["_lnsocket_make_pong_msg"]=function(){return(_lnsocket_make_pong_msg=Module["_lnsocket_make_pong_msg"]=Module["asm"]["r"]).apply(null,arguments)};var _lnsocket_make_pong_from_ping=Module["_lnsocket_make_pong_from_ping"]=function(){return(_lnsocket_make_pong_from_ping=Module["_lnsocket_make_pong_from_ping"]=Module["asm"]["s"]).apply(null,arguments)};var _lnsocket_make_ping_msg=Module["_lnsocket_make_ping_msg"]=function(){return(_lnsocket_make_ping_msg=Module["_lnsocket_make_ping_msg"]=Module["asm"]["t"]).apply(null,arguments)};var _lnsocket_msgbuf=Module["_lnsocket_msgbuf"]=function(){return(_lnsocket_msgbuf=Module["_lnsocket_msgbuf"]=Module["asm"]["u"]).apply(null,arguments)};var _lnsocket_create=Module["_lnsocket_create"]=function(){return(_lnsocket_create=Module["_lnsocket_create"]=Module["asm"]["v"]).apply(null,arguments)};var _lnsocket_destroy=Module["_lnsocket_destroy"]=function(){return(_lnsocket_destroy=Module["_lnsocket_destroy"]=Module["asm"]["w"]).apply(null,arguments)};var _htons=function(){return(_htons=Module["asm"]["htons"]).apply(null,arguments)};var _lnsocket_secp=Module["_lnsocket_secp"]=function(){return(_lnsocket_secp=Module["_lnsocket_secp"]=Module["asm"]["x"]).apply(null,arguments)};var _lnsocket_genkey=Module["_lnsocket_genkey"]=function(){return(_lnsocket_genkey=Module["_lnsocket_genkey"]=Module["asm"]["y"]).apply(null,arguments)};var _lnsocket_setkey=Module["_lnsocket_setkey"]=function(){return(_lnsocket_setkey=Module["_lnsocket_setkey"]=Module["asm"]["z"]).apply(null,arguments)};var _lnsocket_print_errors=Module["_lnsocket_print_errors"]=function(){return(_lnsocket_print_errors=Module["_lnsocket_print_errors"]=Module["asm"]["A"]).apply(null,arguments)};var _lnsocket_act_two=Module["_lnsocket_act_two"]=function(){return(_lnsocket_act_two=Module["_lnsocket_act_two"]=Module["asm"]["B"]).apply(null,arguments)};var _commando_make_rpc_msg=Module["_commando_make_rpc_msg"]=function(){return(_commando_make_rpc_msg=Module["_commando_make_rpc_msg"]=Module["asm"]["C"]).apply(null,arguments)};var _lnsocket_act_one=Module["_lnsocket_act_one"]=function(){return(_lnsocket_act_one=Module["_lnsocket_act_one"]=Module["asm"]["D"]).apply(null,arguments)};var _htonl=function(){return(_htonl=Module["asm"]["htonl"]).apply(null,arguments)};var _ntohs=function(){return(_ntohs=Module["asm"]["ntohs"]).apply(null,arguments)};var stackSave=function(){return(stackSave=Module["asm"]["E"]).apply(null,arguments)};var stackRestore=function(){return(stackRestore=Module["asm"]["F"]).apply(null,arguments)};var stackAlloc=function(){return(stackAlloc=Module["asm"]["G"]).apply(null,arguments)};Module["ccall"]=ccall;Module["cwrap"]=cwrap;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){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(); +var Module=typeof Module!="undefined"?Module:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});Module.getRandomValue=function(){const window_="object"===typeof window?window:this;const crypto_=typeof window_.crypto!=="undefined"?window_.crypto:window_.msCrypto;let randomBytesNode;let fn;if(!crypto_){randomBytesNode=require("crypto").randomBytes;fn=randomValuesNode}else{fn=randomValuesStandard}function randomValuesNode(){return randomBytesNode(1)[0]>>>0}function randomValuesStandard(){var buf=new Uint32Array(1);crypto_.getRandomValues(buf);return buf[0]>>>0}return fn}();var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;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(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText});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=((url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=(()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()});xhr.onerror=onerror;xhr.send(null)})}setWindowTitle=(title=>document.title=title)}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function getCFunc(ident){var func=Module["_"+ident];return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(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=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=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}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="lnsocket.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["i"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["m"];addOnInit(Module["asm"]["j"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var ASM_CONSTS={70252:function(){return Module.getRandomValue()},70288:function(){if(Module.getRandomValue===undefined){try{var window_="object"===typeof window?window:self;var crypto_=typeof window_.crypto!=="undefined"?window_.crypto:window_.msCrypto;var randomValuesStandard=function(){var buf=new Uint32Array(1);crypto_.getRandomValues(buf);return buf[0]>>>0};randomValuesStandard();Module.getRandomValue=randomValuesStandard}catch(e){try{var crypto=require("crypto");var randomValueNodeJS=function(){var buf=crypto["randomBytes"](4);return(buf[0]<<24|buf[1]<<16|buf[2]<<8|buf[3])>>>0};randomValueNodeJS();Module.getRandomValue=randomValueNodeJS}catch(e){throw"No secure random number generator found"}}}}};function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func=="number"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function getWasmTableEntry(funcPtr){return wasmTable.get(funcPtr)}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function _abort(){abort("")}var readAsmConstArgsArray=[];function readAsmConstArgs(sigPtr,buf){readAsmConstArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){var readAsmConstArgsDouble=ch<105;if(readAsmConstArgsDouble&&buf&1)buf++;readAsmConstArgsArray.push(readAsmConstArgsDouble?HEAPF64[buf++>>1]:HEAP32[buf]);++buf}return readAsmConstArgsArray}function _emscripten_asm_const_int(code,sigPtr,argbuf){var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var SYSCALLS={buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0}var asmLibraryArg={"a":___assert_fail,"b":_abort,"h":_emscripten_asm_const_int,"g":_emscripten_memcpy_big,"c":_emscripten_resize_heap,"f":_fd_close,"d":_fd_seek,"e":_fd_write};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["j"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["k"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["l"]).apply(null,arguments)};var _lnsocket_make_default_initmsg=Module["_lnsocket_make_default_initmsg"]=function(){return(_lnsocket_make_default_initmsg=Module["_lnsocket_make_default_initmsg"]=Module["asm"]["n"]).apply(null,arguments)};var _lnsocket_encrypt=Module["_lnsocket_encrypt"]=function(){return(_lnsocket_encrypt=Module["_lnsocket_encrypt"]=Module["asm"]["o"]).apply(null,arguments)};var _lnsocket_decrypt=Module["_lnsocket_decrypt"]=function(){return(_lnsocket_decrypt=Module["_lnsocket_decrypt"]=Module["asm"]["p"]).apply(null,arguments)};var _lnsocket_decrypt_header=Module["_lnsocket_decrypt_header"]=function(){return(_lnsocket_decrypt_header=Module["_lnsocket_decrypt_header"]=Module["asm"]["q"]).apply(null,arguments)};var _lnsocket_make_pong_msg=Module["_lnsocket_make_pong_msg"]=function(){return(_lnsocket_make_pong_msg=Module["_lnsocket_make_pong_msg"]=Module["asm"]["r"]).apply(null,arguments)};var _lnsocket_make_pong_from_ping=Module["_lnsocket_make_pong_from_ping"]=function(){return(_lnsocket_make_pong_from_ping=Module["_lnsocket_make_pong_from_ping"]=Module["asm"]["s"]).apply(null,arguments)};var _lnsocket_make_ping_msg=Module["_lnsocket_make_ping_msg"]=function(){return(_lnsocket_make_ping_msg=Module["_lnsocket_make_ping_msg"]=Module["asm"]["t"]).apply(null,arguments)};var _lnsocket_msgbuf=Module["_lnsocket_msgbuf"]=function(){return(_lnsocket_msgbuf=Module["_lnsocket_msgbuf"]=Module["asm"]["u"]).apply(null,arguments)};var _lnsocket_create=Module["_lnsocket_create"]=function(){return(_lnsocket_create=Module["_lnsocket_create"]=Module["asm"]["v"]).apply(null,arguments)};var _lnsocket_destroy=Module["_lnsocket_destroy"]=function(){return(_lnsocket_destroy=Module["_lnsocket_destroy"]=Module["asm"]["w"]).apply(null,arguments)};var _lnsocket_secp=Module["_lnsocket_secp"]=function(){return(_lnsocket_secp=Module["_lnsocket_secp"]=Module["asm"]["x"]).apply(null,arguments)};var _lnsocket_genkey=Module["_lnsocket_genkey"]=function(){return(_lnsocket_genkey=Module["_lnsocket_genkey"]=Module["asm"]["y"]).apply(null,arguments)};var _lnsocket_setkey=Module["_lnsocket_setkey"]=function(){return(_lnsocket_setkey=Module["_lnsocket_setkey"]=Module["asm"]["z"]).apply(null,arguments)};var _lnsocket_print_errors=Module["_lnsocket_print_errors"]=function(){return(_lnsocket_print_errors=Module["_lnsocket_print_errors"]=Module["asm"]["A"]).apply(null,arguments)};var _lnsocket_act_two=Module["_lnsocket_act_two"]=function(){return(_lnsocket_act_two=Module["_lnsocket_act_two"]=Module["asm"]["B"]).apply(null,arguments)};var _commando_make_rpc_msg=Module["_commando_make_rpc_msg"]=function(){return(_commando_make_rpc_msg=Module["_commando_make_rpc_msg"]=Module["asm"]["C"]).apply(null,arguments)};var _lnsocket_act_one=Module["_lnsocket_act_one"]=function(){return(_lnsocket_act_one=Module["_lnsocket_act_one"]=Module["asm"]["D"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["E"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["F"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["G"]).apply(null,arguments)};Module["ccall"]=ccall;Module["cwrap"]=cwrap;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); return Module.ready } - ); })(); if (typeof exports === 'object' && typeof module === 'object') diff --git a/dist/js/lnsocket.wasm b/dist/js/lnsocket.wasm index 6111de8685a623cb7224b6949252861948cb1667..b917cb5cf4faf75dc4dd1cfd197e8c04c2cc186a 100755 GIT binary patch delta 51673 zcmcef37A|*b?@)eJ<~niGt;xTX0+VClI@W#S@I?cTefv4NVYM?HaLz0B#1ncm=*z# zq{s$j-3gM-5FiK|kjVlfCRi*6fdUvvVwte$1xUp95D!R1ARu-D1_T)E{r;zJ&vcJu zut~l*`qZ~>t*1_%bL!NoQ+5AsXYu|ch17fImOt@5&-0J_(Z(Q6y^Ud-rhaMCe$N_iVQtrkW5JNzBWL#>K-f7BIhPyOv`PJhjYt%^|1?g-8+r2aGg zXL_Cd{()EE_kVdIzt8fz`TavL&+i{u%pZF`;hQ}_oc8bZ2fV=`40FC0428a5%z3#W z=D0SXE&wqB{`E_r?-{h_EpW`j?8D{^v-t+zEdAIquc(?kK-Zp=8>RsV) z@&44`>TUJ^)Z5~3^EUgpdXxTb-Yx#~z32Ha@Sf`@-k?ke{0!Z?h2PFwx74G2 z)IoTX-+G*jLbBFZk-byZZH|ITJtsFuUb663eg-J$C0#0*Bj16CJHD6SFyIk4Psu%& z9B$iEvbbKwb-NkU6E2lplX7vVt=eMI2!rn2vuXA$V#83ZHj~BqIWw6HCidN{QAZJRfjei%Sa(Db?}Sl?}6 zUF_*`;AOo}_tQ7|evmE(yiIYq#3Pe89+Z_YjDl6cV6yvdx#T2&oz~4~jYgrORs~gR z0Nd5dNG_#E>+^|M>h_YI^O7hz{DvIk5c`!sR&8F5E{_L=T27B#jdH4@vTjvSh|(}3 zdef?av7^R-5C~1)Ks%K)O5}{_Csk`a1VM86Zq?n_4)DlMfA67*hvJWp(M}eU0hdQoEuqMfPuxTdLaS zat>~fORYJJ*~{fSqY{O-$HjCP&2&ZGJEJmjJEP*nl>Hs-ykqA~No%|?v2uFiQ-W_t z)VDpJ1#M?sY{K0I+(lK`UbIL@0C9l!W)gtANMsuIwAHoCWv$HVO<@*rpn`j_8;fa~T_1$3c#$G<1N*j z7_4C4_U;nYmrD)?b@-~(c=i%K2i2NQ!wTk+a(1!tnrzrEP>=DredG>c;vLnjf zItd@qZ4v*fpe)XTz{>$Zj;BGj)&W=s2BpXQ0t6xvEP=}Co6o<;8au;rbyr|o*nB~cl*uO=Of≪w!;=MdhsLPvy4lL6g+ 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 Date: Tue, 4 Jul 2023 18:30:50 -0400 Subject: [PATCH 2/2] go: use a string for the request-id + randomize it Lets us send a bunch of messages at once (but currently incredibly not thread safe lol) --- .gitignore | 4 +++- go/lnsocket.go | 10 +++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 088a0bf..617141c 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,6 @@ examples/lnsocket.wasm examples/websockets_big.js examples/websockets_big.html rust/bindings.rs -Cargo.lock \ No newline at end of file +Cargo.lock + +*.swp diff --git a/go/lnsocket.go b/go/lnsocket.go index 7947866..8124e7e 100644 --- a/go/lnsocket.go +++ b/go/lnsocket.go @@ -5,6 +5,7 @@ import ( "encoding/hex" "fmt" "io" + "math/rand" "net" "github.com/btcsuite/btcd/btcec/v2" @@ -24,7 +25,7 @@ type CommandoMsg struct { Rune string Method string Params string - RequestId uint64 + RequestId string } func NewCommandoMsg(token string, method string, params string) CommandoMsg { @@ -32,6 +33,7 @@ func NewCommandoMsg(token string, method string, params string) CommandoMsg { Rune: token, Method: method, Params: params, + RequestId: fmt.Sprintf("lnsocket:%d", rand.Uint64()), } } @@ -47,7 +49,7 @@ func (msg *CommandoMsg) Decode(reader io.Reader, size uint32) error { } func (msg *CommandoMsg) Encode(buf *bytes.Buffer, pver uint32) error { - if err := lnwire.WriteUint64(buf, msg.RequestId); err != nil { + if err := lnwire.WriteUint64(buf, 0); err != nil { return err } @@ -57,7 +59,9 @@ func (msg *CommandoMsg) Encode(buf *bytes.Buffer, pver uint32) error { buf.WriteString(msg.Params) buf.WriteString(",\"rune\":\"") buf.WriteString(msg.Rune) - buf.WriteString("\",\"id\":\"d0\",\"jsonrpc\":\"2.0\"}") + buf.WriteString("\",\"id\":\"") + buf.WriteString(msg.RequestId) + buf.WriteString("\",\"jsonrpc\":\"2.0\"}") return nil }