diff --git a/banani-browser.js b/banani-browser.js index 2bc78aa..6494fc5 100644 --- a/banani-browser.js +++ b/banani-browser.js @@ -1,4 +1,4 @@ -(()=>{var wr=Object.create;var Le=Object.defineProperty;var Br=Object.getOwnPropertyDescriptor;var xr=Object.getOwnPropertyNames;var Qr=Object.getPrototypeOf,dr=Object.prototype.hasOwnProperty;var s=(e,n)=>Le(e,"name",{value:n,configurable:!0}),An=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,t)=>(typeof require<"u"?require:n)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var M=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),Me=(e,n)=>{for(var t in n)Le(e,t,{get:n[t],enumerable:!0})},br=(e,n,t,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let g of xr(n))!dr.call(e,g)&&g!==t&&Le(e,g,{get:()=>n[g],enumerable:!(i=Br(n,g))||i.enumerable});return e};var on=(e,n,t)=>(t=e!=null?wr(Qr(e)):{},br(n||!e||!e.__esModule?Le(t,"default",{value:e,enumerable:!0}):t,e));var lt=M((vi,an)=>{an.exports=In;var Ve=class extends Error{static{s(this,"AssertionError")}};Ve.prototype.name="AssertionError";function In(e,n){if(!e){var t=new Ve(n);throw Error.captureStackTrace&&Error.captureStackTrace(t,In),t}}s(In,"assert")});var cn=M((Pi,gn)=>{function sn(e){return e.length}s(sn,"byteLength");function _r(e){let n=e.byteLength,t="";for(let i=0;i{var ge="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Z=new Uint8Array(256);for(let e=0;e1&&e.charCodeAt(n-1)===61&&n--,n*3>>>2}s(hn,"byteLength");function Sr(e){let n=e.byteLength,t="";for(let i=0;i>2]+ge[(e[i]&3)<<4|e[i+1]>>4]+ge[(e[i+1]&15)<<2|e[i+2]>>6]+ge[e[i+2]&63];return n%3===2?t=t.substring(0,t.length-1)+"=":n%3===1&&(t=t.substring(0,t.length-2)+"=="),t}s(Sr,"toString");function Dr(e,n,t=0,i=hn(n)){let g=Math.min(i,e.byteLength-t);for(let f=0,y=0;y>4,e[y++]=(x&15)<<4|b>>2,e[y++]=(b&3)<<6|_&63}return g}s(Dr,"write");fn.exports={byteLength:hn,toString:Sr,write:Dr}});var En=M((Ri,yn)=>{function ln(e){return e.length>>>1}s(ln,"byteLength");function Ur(e){let n=e.byteLength;e=new DataView(e.buffer,e.byteOffset,n);let t="",i=0;for(let g=n-n%4;i=48&&e<=57)return e-48;if(e>=65&&e<=70)return e-65+10;if(e>=97&&e<=102)return e-97+10}s(un,"hexValue")});var Bn=M((Li,wn)=>{function yt(e){let n=0;for(let t=0,i=e.length;t=55296&&g<=56319&&t+1=56320&&f<=57343){n+=4,t++;continue}}g<=127?n+=1:g<=2047?n+=2:n+=3}return n}s(yt,"byteLength");var Et;if(typeof TextDecoder<"u"){let e=new TextDecoder;Et=s(function(t){return e.decode(t)},"toString")}else Et=s(function(n){let t=n.byteLength,i="",g=0;for(;g0){let x=0;for(;x>b,b-=6;b>=0;)n[w++]=128|x>>b&63,b-=6;y+=x>=65536?2:1}return f},"write");wn.exports={byteLength:yt,toString:Et,write:wt}});var dn=M((Vi,Qn)=>{function xn(e){return e.length*2}s(xn,"byteLength");function vr(e){let n=e.byteLength,t="";for(let i=0;i>8,b=w%256;e[t+y*2]=b,e[t+y*2+1]=x}return g}s(Fr,"write");Qn.exports={byteLength:xn,toString:vr,write:Fr}});var Dn=M((xt,Sn)=>{var Pr=cn(),Kr=Cn(),kr=En(),Yr=Bn(),Rr=dn(),Ge=new Uint8Array(Uint16Array.of(255).buffer)[0]===255;function Qe(e){switch(e){case"ascii":return Pr;case"base64":return Kr;case"hex":return kr;case"utf8":case"utf-8":case void 0:return Yr;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Rr;default:throw new Error(`Unknown encoding: ${e}`)}}s(Qe,"codecFor");function bn(e){return e instanceof Uint8Array}s(bn,"isBuffer");function Hr(e){try{return Qe(e),!0}catch{return!1}}s(Hr,"isEncoding");function Lr(e,n,t){let i=new Uint8Array(e);return n!==void 0&&xt.fill(i,n,0,i.byteLength,t),i}s(Lr,"alloc");function Mr(e){return new Uint8Array(e)}s(Mr,"allocUnsafe");function Vr(e){return new Uint8Array(e)}s(Vr,"allocUnsafeSlow");function Gr(e,n){return Qe(n).byteLength(e)}s(Gr,"byteLength");function Nr(e,n){if(e===n)return 0;let t=Math.min(e.byteLength,n.byteLength);e=new DataView(e.buffer,e.byteOffset,e.byteLength),n=new DataView(n.buffer,n.byteOffset,n.byteLength);let i=0;for(let g=t-t%4;if)return 1}return e.byteLength>n.byteLength?1:e.byteLengthg+f.byteLength,0));let t=new Uint8Array(n),i=0;for(let g of e){if(i+g.byteLength>t.byteLength){let f=g.subarray(0,t.byteLength-i);return t.set(f,i),t}t.set(g,i),i+=g.byteLength}return t}s(Tr,"concat");function Or(e,n,t=0,i=0,g=e.byteLength){if(g>0&&g=e.byteLength)throw new RangeError("sourceStart is out of range");if(g<0)throw new RangeError("sourceEnd is out of range");t>=n.byteLength&&(t=n.byteLength),g>e.byteLength&&(g=e.byteLength),n.byteLength-t=e.byteLength){if(g)return-1;t=e.byteLength-1}else if(t<0)if(g)t=0;else return-1;if(typeof n=="string")n=Bt(n,i);else if(typeof n=="number")return n=n&255,g?e.indexOf(n,t):e.lastIndexOf(n,t);if(n.byteLength===0)return-1;if(g){let f=-1;for(let y=t;ye.byteLength&&(t=e.byteLength-n.byteLength);for(let f=t;f>=0;f--){let y=!0;for(let w=0;w=g||i<=t?"":(t<0&&(t=0),i>g&&(i=g),(t!==0||i{var Ci=s((e,n)=>s(function(){return n||(0,e[Object.keys(e)[0]])((n={exports:{}}).exports,n),n.exports},"__require"),"__commonJS"),ui=(()=>{for(var e=new Uint8Array(128),n=0;n<64;n++)e[n<26?n+65:n<52?n+71:n<62?n-4:n*4-205]=n;return t=>{for(var i=t.length,g=new Uint8Array((i-(t[i-1]=="=")-(t[i-2]=="="))*3/4|0),f=0,y=0;f>4,g[y++]=x<<4|b>>2,g[y++]=b<<6|_}return g}})(),li=Ci({"wasm-binary:./blake2b.wat"(e,n){n.exports=ui("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")}}),yi=li(),Ei=WebAssembly.compile(yi);Un.exports=async e=>(await WebAssembly.instantiate(await Ei,e)).exports});var Hn=M((Xi,G)=>{var K=lt(),wi=Dn(),J=null,vn=typeof WebAssembly<"u"&&mn()().then(e=>{J=e}),O=64,Ne=[];G.exports=v;var Fn=G.exports.BYTES_MIN=16,Pn=G.exports.BYTES_MAX=64,Ji=G.exports.BYTES=32,Kn=G.exports.KEYBYTES_MIN=16,kn=G.exports.KEYBYTES_MAX=64,ji=G.exports.KEYBYTES=32,Yn=G.exports.SALTBYTES=16,Rn=G.exports.PERSONALBYTES=16;function v(e,n,t,i,g){if(!(this instanceof v))return new v(e,n,t,i,g);if(!J)throw new Error("WASM not loaded. Wait for Blake2b.ready(cb)");e||(e=32),g!==!0&&(K(e>=Fn,"digestLength must be at least "+Fn+", was given "+e),K(e<=Pn,"digestLength must be at most "+Pn+", was given "+e),n!=null&&(K(n instanceof Uint8Array,"key must be Uint8Array or Buffer"),K(n.length>=Kn,"key must be at least "+Kn+", was given "+n.length),K(n.length<=kn,"key must be at least "+kn+", was given "+n.length)),t!=null&&(K(t instanceof Uint8Array,"salt must be Uint8Array or Buffer"),K(t.length===Yn,"salt must be exactly "+Yn+", was given "+t.length)),i!=null&&(K(i instanceof Uint8Array,"personal must be Uint8Array or Buffer"),K(i.length===Rn,"personal must be exactly "+Rn+", was given "+i.length))),Ne.length||(Ne.push(O),O+=216),this.digestLength=e,this.finalized=!1,this.pointer=Ne.pop(),this._memory=new Uint8Array(J.memory.buffer),this._memory.fill(0,0,64),this._memory[0]=this.digestLength,this._memory[1]=n?n.length:0,this._memory[2]=1,this._memory[3]=1,t&&this._memory.set(t,32),i&&this._memory.set(i,48),this.pointer+216>this._memory.length&&this._realloc(this.pointer+216),J.blake2b_init(this.pointer,this.digestLength),n&&(this.update(n),this._memory.fill(0,O,O+n.length),this._memory[this.pointer+200]=128)}s(v,"Blake2b");v.prototype._realloc=function(e){J.memory.grow(Math.max(0,Math.ceil(Math.abs(e-this._memory.length)/65536))),this._memory=new Uint8Array(J.memory.buffer)};v.prototype.update=function(e){return K(this.finalized===!1,"Hash instance finalized"),K(e instanceof Uint8Array,"input must be Uint8Array or Buffer"),O+e.length>this._memory.length&&this._realloc(O+e.length),this._memory.set(e,O),J.blake2b_update(this.pointer,O,O+e.length),this};v.prototype.digest=function(e){if(K(this.finalized===!1,"Hash instance finalized"),this.finalized=!0,Ne.push(this.pointer),J.blake2b_final(this.pointer),!e||e==="binary")return this._memory.slice(this.pointer+128,this.pointer+128+this.digestLength);if(typeof e=="string")return wi.toString(this._memory,e,this.pointer+128,this.pointer+128+this.digestLength);K(e instanceof Uint8Array&&e.length>=this.digestLength,"input must be Uint8Array or Buffer");for(var n=0;ne(),e):e(new Error("WebAssembly not supported"))};v.prototype.ready=v.ready;v.prototype.getPartialHash=function(){return this._memory.slice(this.pointer,this.pointer+216)};v.prototype.setPartialHash=function(e){this._memory.set(e,this.pointer)};function Bi(){}s(Bi,"noop")});var Qt=M((Zi,F)=>{var Y=lt(),be=Hn();function Te(e,n,t){var i=e[n]+e[t],g=e[n+1]+e[t+1];i>=4294967296&&g++,e[n]=i,e[n+1]=g}s(Te,"ADD64AA");function Ln(e,n,t,i){var g=e[n]+t;t<0&&(g+=4294967296);var f=e[n+1]+i;g>=4294967296&&f++,e[n]=g,e[n+1]=f}s(Ln,"ADD64AC");function Jn(e,n){return e[n]^e[n+1]<<8^e[n+2]<<16^e[n+3]<<24}s(Jn,"B2B_GET32");function q(e,n,t,i,g,f){var y=de[g],w=de[g+1],x=de[f],b=de[f+1];Te(B,e,n),Ln(B,e,y,w);var _=B[i]^B[e],S=B[i+1]^B[e+1];B[i]=S,B[i+1]=_,Te(B,t,i),_=B[n]^B[t],S=B[n+1]^B[t+1],B[n]=_>>>24^S<<8,B[n+1]=S>>>24^_<<8,Te(B,e,n),Ln(B,e,x,b),_=B[i]^B[e],S=B[i+1]^B[e+1],B[i]=_>>>16^S<<16,B[i+1]=S>>>16^_<<16,Te(B,t,i),_=B[n]^B[t],S=B[n+1]^B[t+1],B[n]=S>>>31^_<<1,B[n+1]=_>>>31^S<<1}s(q,"B2B_G");var jn=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),xi=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3],U=new Uint8Array(xi.map(function(e){return e*2})),B=new Uint32Array(32),de=new Uint32Array(32);function Xn(e,n){var t=0;for(t=0;t<16;t++)B[t]=e.h[t],B[t+16]=jn[t];for(B[24]=B[24]^e.t,B[25]=B[25]^e.t/4294967296,n&&(B[28]=~B[28],B[29]=~B[29]),t=0;t<32;t++)de[t]=Jn(e.b,4*t);for(t=0;t<12;t++)q(0,8,16,24,U[t*16+0],U[t*16+1]),q(2,10,18,26,U[t*16+2],U[t*16+3]),q(4,12,20,28,U[t*16+4],U[t*16+5]),q(6,14,22,30,U[t*16+6],U[t*16+7]),q(0,10,20,30,U[t*16+8],U[t*16+9]),q(2,12,22,24,U[t*16+10],U[t*16+11]),q(4,14,16,26,U[t*16+12],U[t*16+13]),q(6,8,18,28,U[t*16+14],U[t*16+15]);for(t=0;t<16;t++)e.h[t]=e.h[t]^B[t]^B[t+16]}s(Xn,"blake2bCompress");var W=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);function ce(e,n,t,i){W.fill(0),this.b=new Uint8Array(128),this.h=new Uint32Array(16),this.t=0,this.c=0,this.outlen=e,W[0]=e,n&&(W[1]=n.length),W[2]=1,W[3]=1,t&&W.set(t,32),i&&W.set(i,48);for(var g=0;g<16;g++)this.h[g]=jn[g]^Jn(W,g*4);n&&(qn(this,n),this.c=128)}s(ce,"Blake2b");ce.prototype.update=function(e){return Y(e instanceof Uint8Array,"input must be Uint8Array or Buffer"),qn(this,e),this};ce.prototype.digest=function(e){var n=!e||e==="binary"||e==="hex"?new Uint8Array(this.outlen):e;return Y(n instanceof Uint8Array,'out must be "binary", "hex", Uint8Array, or Buffer'),Y(n.length>=this.outlen,"out must have at least outlen bytes of space"),Qi(this,n),e==="hex"?di(n):n};ce.prototype.final=ce.prototype.digest;ce.ready=function(e){be.ready(function(){e()})};function qn(e,n){for(var t=0;t>2]>>8*(t&3);return n}s(Qi,"blake2bFinal");function di(e){for(var n="",t=0;t=Mn,"outlen must be at least "+Mn+", was given "+n),Y(n<=Vn,"outlen must be at most "+Vn+", was given "+n),t!=null&&(Y(t instanceof Uint8Array,"key must be Uint8Array or Buffer"),Y(t.length>=Gn,"key must be at least "+Gn+", was given "+t.length),Y(t.length<=Nn,"key must be at most "+Nn+", was given "+t.length)),i!=null&&(Y(i instanceof Uint8Array,"salt must be Uint8Array or Buffer"),Y(i.length===Tn,"salt must be exactly "+Tn+", was given "+i.length)),g!=null&&(Y(g instanceof Uint8Array,"personal must be Uint8Array or Buffer"),Y(g.length===On,"personal must be exactly "+On+", was given "+g.length))),new _i(n,t,i,g)},"createHash");F.exports.ready=function(e){be.ready(function(){e()})};F.exports.WASM_SUPPORTED=be.SUPPORTED;F.exports.WASM_LOADED=!1;var Mn=F.exports.BYTES_MIN=16,Vn=F.exports.BYTES_MAX=64,Wi=F.exports.BYTES=32,Gn=F.exports.KEYBYTES_MIN=16,Nn=F.exports.KEYBYTES_MAX=64,zi=F.exports.KEYBYTES=32,Tn=F.exports.SALTBYTES=16,On=F.exports.PERSONALBYTES=16;be.ready(function(e){e||(F.exports.WASM_LOADED=!0,F.exports=be)})});var Wn=M((eA,Oe)=>{(function(e){"use strict";let n=Qt();var t=s(function(r,o){this.hi=r|0,this.lo=o|0},"u64"),i=s(function(r){var o,A=new Float64Array(16);if(r)for(o=0;o>>32-o}s(X,"L32");function re(r,o){var A=r[o+3]&255;return A=A<<8|r[o+2]&255,A=A<<8|r[o+1]&255,A<<8|r[o+0]&255}s(re,"ld32");function kt(r,o){var A=r[o]<<24|r[o+1]<<16|r[o+2]<<8|r[o+3],I=r[o+4]<<24|r[o+5]<<16|r[o+6]<<8|r[o+7];return new t(A,I)}s(kt,"dl64");function ze(r,o,A){var I;for(I=0;I<4;I++)r[o+I]=A&255,A>>>=8}s(ze,"st32");function Yt(r,o,A){r[o]=A.hi>>24&255,r[o+1]=A.hi>>16&255,r[o+2]=A.hi>>8&255,r[o+3]=A.hi&255,r[o+4]=A.lo>>24&255,r[o+5]=A.lo>>16&255,r[o+6]=A.lo>>8&255,r[o+7]=A.lo&255}s(Yt,"ts64");function Ze(r,o,A,I,a){var c,u=0;for(c=0;c>>8)-1}s(Ze,"vn");function Rt(r,o,A,I){return Ze(r,o,A,I,16)}s(Rt,"crypto_verify_16");function $e(r,o,A,I){return Ze(r,o,A,I,32)}s($e,"crypto_verify_32");function Ht(r,o,A,I,a){var c=new Uint32Array(16),u=new Uint32Array(16),l=new Uint32Array(16),h=new Uint32Array(4),C,E,d;for(C=0;C<4;C++)u[5*C]=re(I,4*C),u[1+C]=re(A,4*C),u[6+C]=re(o,4*C),u[11+C]=re(A,16+4*C);for(C=0;C<16;C++)l[C]=u[C];for(C=0;C<20;C++){for(E=0;E<4;E++){for(d=0;d<4;d++)h[d]=u[(5*E+4*d)%16];for(h[1]^=X(h[0]+h[3]|0,7),h[2]^=X(h[1]+h[0]|0,9),h[3]^=X(h[2]+h[1]|0,13),h[0]^=X(h[3]+h[2]|0,18),d=0;d<4;d++)c[4*E+(E+d)%4]=h[d]}for(d=0;d<16;d++)u[d]=c[d]}if(a){for(C=0;C<16;C++)u[C]=u[C]+l[C]|0;for(C=0;C<4;C++)u[5*C]=u[5*C]-re(I,4*C)|0,u[6+C]=u[6+C]-re(o,4*C)|0;for(C=0;C<4;C++)ze(r,4*C,u[5*C]),ze(r,16+4*C,u[6+C])}else for(C=0;C<16;C++)ze(r,4*C,u[C]+l[C]|0)}s(Ht,"core");function Lt(r,o,A,I){return Ht(r,o,A,I,!1),0}s(Lt,"crypto_core_salsa20");function Ue(r,o,A,I){return Ht(r,o,A,I,!0),0}s(Ue,"crypto_core_hsalsa20");var Ce=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function et(r,o,A,I,a,c,u){var l=new Uint8Array(16),h=new Uint8Array(64),C,E;if(!a)return 0;for(E=0;E<16;E++)l[E]=0;for(E=0;E<8;E++)l[E]=c[E];for(;a>=64;){for(Lt(h,l,u,Ce),E=0;E<64;E++)r[o+E]=(A?A[I+E]:0)^h[E];for(C=1,E=8;E<16;E++)C=C+(l[E]&255)|0,l[E]=C&255,C>>>=8;a-=64,o+=64,A&&(I+=64)}if(a>0)for(Lt(h,l,u,Ce),E=0;E>>=8}s(nt,"add1305");var rr=new Uint32Array([5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252]);function rt(r,o,A,I,a,c){var u,l,h,C,E=new Uint32Array(17),d=new Uint32Array(17),p=new Uint32Array(17),L=new Uint32Array(17),se=new Uint32Array(17);for(h=0;h<17;h++)d[h]=p[h]=0;for(h=0;h<16;h++)d[h]=c[h];for(d[3]&=15,d[4]&=252,d[7]&=15,d[8]&=252,d[11]&=15,d[12]&=252,d[15]&=15;a>0;){for(h=0;h<17;h++)L[h]=0;for(h=0;h<16&&h>>=8;for(C=C+p[16]|0,p[16]=C&3,C=5*(C>>>2)|0,h=0;h<16;h++)C=C+p[h]|0,p[h]=C&255,C>>>=8;C=C+p[16]|0,p[16]=C}for(h=0;h<17;h++)se[h]=p[h];for(nt(p,rr),u=-(p[16]>>>7)|0,h=0;h<17;h++)p[h]^=u&(se[h]^p[h]);for(h=0;h<16;h++)L[h]=c[h+16];for(L[16]=0,nt(p,L),h=0;h<16;h++)r[o+h]=p[h];return 0}s(rt,"crypto_onetimeauth");function Gt(r,o,A,I,a,c){var u=new Uint8Array(16);return rt(u,0,A,I,a,c),Rt(r,o,u,0)}s(Gt,"crypto_onetimeauth_verify");function it(r,o,A,I,a){var c;if(A<32)return-1;for(tt(r,0,o,0,A,I,a),rt(r,16,r,32,A-32,r),c=0;c<16;c++)r[c]=0;return 0}s(it,"crypto_secretbox");function At(r,o,A,I,a){var c,u=new Uint8Array(32);if(A<32||(Vt(u,0,32,I,a),Gt(o,16,o,32,A-32,u)!==0))return-1;for(tt(r,0,o,0,A,I,a),c=0;c<32;c++)r[c]=0;return 0}s(At,"crypto_secretbox_open");function N(r,o){var A;for(A=0;A<16;A++)r[A]=o[A]|0}s(N,"set25519");function ue(r){var o,A;for(A=0;A<16;A++)r[A]+=65536,o=Math.floor(r[A]/65536),r[(A+1)*(A<15?1:0)]+=o-1+37*(o-1)*(A===15?1:0),r[A]-=o*65536}s(ue,"car25519");function ie(r,o,A){for(var I,a=~(A-1),c=0;c<16;c++)I=a&(r[c]^o[c]),r[c]^=I,o[c]^=I}s(ie,"sel25519");function Ae(r,o){var A,I,a,c=i(),u=i();for(A=0;A<16;A++)u[A]=o[A];for(ue(u),ue(u),ue(u),I=0;I<2;I++){for(c[0]=u[0]-65517,A=1;A<15;A++)c[A]=u[A]-65535-(c[A-1]>>16&1),c[A-1]&=65535;c[15]=u[15]-32767-(c[14]>>16&1),a=c[15]>>16&1,c[14]&=65535,ie(u,c,1-a)}for(A=0;A<16;A++)r[2*A]=u[A]&255,r[2*A+1]=u[A]>>8}s(Ae,"pack25519");function Nt(r,o){var A=new Uint8Array(32),I=new Uint8Array(32);return Ae(A,r),Ae(I,o),$e(A,0,I,0)}s(Nt,"neq25519");function Tt(r){var o=new Uint8Array(32);return Ae(o,r),o[0]&1}s(Tt,"par25519");function ot(r,o){var A;for(A=0;A<16;A++)r[A]=o[2*A]+(o[2*A+1]<<8);r[15]&=32767}s(ot,"unpack25519");function R(r,o,A){var I;for(I=0;I<16;I++)r[I]=o[I]+A[I]|0}s(R,"A");function H(r,o,A){var I;for(I=0;I<16;I++)r[I]=o[I]-A[I]|0}s(H,"Z");function Q(r,o,A){var I,a,c=new Float64Array(31);for(I=0;I<31;I++)c[I]=0;for(I=0;I<16;I++)for(a=0;a<16;a++)c[I+a]+=o[I]*A[a];for(I=0;I<15;I++)c[I]+=38*c[I+16];for(I=0;I<16;I++)r[I]=c[I];ue(r),ue(r)}s(Q,"M");function k(r,o){Q(r,o,o)}s(k,"S");function Ot(r,o){var A=i(),I;for(I=0;I<16;I++)A[I]=o[I];for(I=253;I>=0;I--)k(A,A),I!==2&&I!==4&&Q(A,A,o);for(I=0;I<16;I++)r[I]=A[I]}s(Ot,"inv25519");function Jt(r,o){var A=i(),I;for(I=0;I<16;I++)A[I]=o[I];for(I=250;I>=0;I--)k(A,A),I!==1&&Q(A,A,o);for(I=0;I<16;I++)r[I]=A[I]}s(Jt,"pow2523");function me(r,o,A){var I=new Uint8Array(32),a=new Float64Array(80),c,u,l=i(),h=i(),C=i(),E=i(),d=i(),p=i();for(u=0;u<31;u++)I[u]=o[u];for(I[31]=o[31]&127|64,I[0]&=248,ot(a,A),u=0;u<16;u++)h[u]=a[u],E[u]=l[u]=C[u]=0;for(l[0]=E[0]=1,u=254;u>=0;--u)c=I[u>>>3]>>>(u&7)&1,ie(l,h,c),ie(C,E,c),R(d,l,C),H(l,l,C),R(C,h,E),H(h,h,E),k(E,d),k(p,l),Q(l,C,l),Q(C,h,d),R(d,l,C),H(l,l,C),k(h,l),H(C,E,p),Q(l,C,b),R(l,l,E),Q(C,C,l),Q(l,E,p),Q(E,h,a),k(h,d),ie(l,h,c),ie(C,E,c);for(u=0;u<16;u++)a[u+16]=l[u],a[u+32]=C[u],a[u+48]=h[u],a[u+64]=E[u];var L=a.subarray(32),se=a.subarray(16);return Ot(L,L),Q(se,se,L),Ae(r,se),0}s(me,"crypto_scalarmult");function ve(r,o){return me(r,o,y)}s(ve,"crypto_scalarmult_base");function jt(r,o){return g(o,32),ve(r,o)}s(jt,"crypto_box_keypair");function Fe(r,o,A){var I=new Uint8Array(32);return me(I,A,o),Ue(r,f,I,Ce)}s(Fe,"crypto_box_beforenm");var Xt=it,ir=At;function Ar(r,o,A,I,a,c){var u=new Uint8Array(32);return Fe(u,a,c),Xt(r,o,A,I,u)}s(Ar,"crypto_box");function or(r,o,A,I,a,c){var u=new Uint8Array(32);return Fe(u,a,c),ir(r,o,A,I,u)}s(or,"crypto_box_open");function le(){var r=0,o=0,A=0,I=0,a=65535,c,u,l;for(l=0;l>>16,A+=u&a,I+=u>>>16;return o+=r>>>16,A+=o>>>16,I+=A>>>16,new t(A&a|I<<16,r&a|o<<16)}s(le,"add64");function qt(r,o){return new t(r.hi>>>o,r.lo>>>o|r.hi<<32-o)}s(qt,"shr64");function Pe(){var r=0,o=0,A;for(A=0;A>>o|r.lo<>>o|r.hi<>>o|r.hi<>>o|r.lo<=128;){for(h=0;h<16;h++)u[h]=kt(o,8*h+E);for(h=0;h<80;h++){for(C=0;C<8;C++)a[C]=c[C];for(l=le(c[7],gr(c[4]),Ir(c[4],c[5],c[6]),fr[h],u[h%16]),a[7]=le(l,sr(c[0]),ar(c[0],c[1],c[2])),a[3]=le(a[3],l),C=0;C<8;C++)c[(C+1)%8]=a[C];if(h%16===15)for(C=0;C<16;C++)u[C]=le(u[C],u[(C+9)%16],cr(u[(C+1)%16]),hr(u[(C+14)%16]))}for(h=0;h<8;h++)c[h]=le(c[h],I[h]),I[h]=c[h];E+=128,A-=128}for(h=0;h<8;h++)Yt(r,8*h,I[h]);return A}s(Wt,"crypto_hashblocks");let oe=s((r,o)=>n(o).update(r).digest(),"crypto_hash_blake2b");var Cr=new Uint8Array([106,9,230,103,243,188,201,8,187,103,174,133,132,202,167,59,60,110,243,114,254,148,248,43,165,79,245,58,95,29,54,241,81,14,82,127,173,230,130,209,155,5,104,140,43,62,108,31,31,131,217,171,251,65,189,107,91,224,205,25,19,126,33,121]);function zt(r,o,A){var I=new Uint8Array(64),a=new Uint8Array(256),c,u=A;for(c=0;c<64;c++)I[c]=Cr[c];for(Wt(I,o,A),A%=128,c=0;c<256;c++)a[c]=0;for(c=0;c=0;--a)I=A[a/8|0]>>(a&7)&1,Zt(r,o,I),Ke(o,r),Ke(r,r),Zt(r,o,I)}s(It,"scalarmult");function ye(r,o){var A=[i(),i(),i(),i()];N(A[0],m),N(A[1],j),N(A[2],x),Q(A[3],m,j),It(r,A,o)}s(ye,"scalarbase");function at(r,o,A){var I=new Uint8Array(64),a=[i(),i(),i(),i()],c;A||g(o,32);I=oe(o,64),I[0]&=248,I[31]&=127,I[31]|=64,ye(a,I),ke(r,a);return 0}s(at,"crypto_sign_keypair");var Ye=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function st(r,o){var A,I,a,c;for(I=63;I>=32;--I){for(A=0,a=I-32,c=I-12;a>4)*Ye[a],A=o[a]>>8,o[a]&=255;for(a=0;a<32;a++)o[a]-=A*Ye[a];for(I=0;I<32;I++)o[I+1]+=o[I]>>8,r[I]=o[I]&255}s(st,"modL");function gt(r){var o=new Float64Array(64),A;for(A=0;A<64;A++)o[A]=r[A];for(A=0;A<64;A++)r[A]=0;st(r,o)}s(gt,"reduce");function $t(r,o,A,I){var a=new Uint8Array(64),c=new Uint8Array(64),u=new Uint8Array(64),l,h,C=new Float64Array(64),E=[i(),i(),i(),i()];let d=rn(I);a=oe(I,64),a[0]&=248,a[31]&=127,a[31]|=64;var p=A+64;for(l=0;l>7&&H(r[0],w,r[0]),Q(r[3],r[0],r[1]),0)}s(ur,"unpackneg");function ct(r,o,A,I){var a,c=new Uint8Array(32),u=new Uint8Array(64),l=[i(),i(),i(),i()],h=[i(),i(),i(),i()];if(A<64||ur(h,I))return-1;for(a=0;a=0};function rn(r){let o=new Uint8Array(64),A=[i(),i(),i(),i()],I,a=new Uint8Array(32);return o=oe(r,64),o[0]&=248,o[31]&=127,o[31]|=64,ye(A,o),ke(a,A),a}s(rn,"derivePublicFromSecret"),e.sign.keyPair=function(){var r=new Uint8Array(z),o=new Uint8Array(ae);return at(r,o),{publicKey:r,secretKey:o}},e.sign.keyPair.fromSecretKey=function(r){if(P(r),r.length!==ae)throw new Error("bad secret key size");var o=new Uint8Array(z);return o=rn(r),{publicKey:o,secretKey:new Uint8Array(r)}},e.sign.keyPair.fromSeed=function(r){if(P(r),r.length!==Ct)throw new Error("bad seed size");for(var o=new Uint8Array(z),A=new Uint8Array(ae),I=0;I<32;I++)A[I]=r[I];return at(o,A,!0),{publicKey:o,secretKey:A}},e.sign.publicKeyLength=z,e.sign.secretKeyLength=ae,e.sign.seedLength=Ct,e.sign.signatureLength=T,e.hash=function(r){P(r);var o=new Uint8Array(ut);return zt(o,r,r.length),o},e.hash.hashLength=ut,e.verify=function(r,o){return P(r,o),r.length===0||o.length===0||r.length!==o.length?!1:Ze(r,0,o,0,r.length)===0},e.setPRNG=function(r){g=r},function(){var r=typeof self<"u"?self.crypto||self.msCrypto:null;if(r&&r.getRandomValues){var o=65536;e.setPRNG(function(A,I){var a,c=new Uint8Array(I);for(a=0;a$n,construct_message_block_and_hash:()=>St,get_address_from_public_key:()=>De,get_private_key_from_seed:()=>pt,get_public_key_from_address:()=>he,get_public_key_from_private_key:()=>je,hash_block:()=>te,hex_to_uint8array:()=>D,int_to_uint8array:()=>zn,raw_to_whole:()=>_t,sign_block_hash:()=>ne,sign_message:()=>Dt,uint8array_to_base32:()=>dt,uint8array_to_hex:()=>ee,utf8_to_uint8array:()=>er,verify_block_hash:()=>nr,verify_signed_message:()=>Ui,whole_to_raw:()=>Se});var Je=on(Wn()),pe=on(Qt());var pi="0000000000000000000000000000000000000000000000000000000000000006",bt="62616E616E6F6D73672D",_e=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];function ee(e){let n="";for(let t=0;t0;f--)g-=t[n-f]*16**(2*(f-1));t[n-i]=Math.floor(g/16**(2*(i-1)))}return t}s(zn,"int_to_uint8array");var Zn=["1","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","m","n","o","p","q","r","s","t","u","w","x","y","z"];function dt(e){let n="";for(let t=0;t=5)y=e[g]>>w-5&31;else{let x=5-w;y=(e[g]<>8-x&2**(8-x)-1)}n+=Zn[y]}return n}s(dt,"uint8array_to_base32");function Si(e,n){let t="",i=e;for(let g=0;g=2**(n-1-g)?(t+="1",i-=2**(n-1-g)):t+="0";return t}s(Si,"int_to_binary");function Di(e){let n=0;for(let t=0;tSi(Zn.indexOf(i),5)).join(""),t=new Uint8Array(Math.ceil(e.length*5/8));for(let i=0;in-i[1].length)throw Error(`Too many decimals, cannot exceed ${n}`);t=BigInt(i[0])*BigInt(10)**BigInt(n)+BigInt(i[1])*BigInt(10)**BigInt(n-i[1].length)}else t=BigInt(e)*BigInt(10)**BigInt(n);return t}s(Se,"whole_to_raw");function _t(e,n=tr){let t=e.toString(),i;if(t.length>n)i=t.slice(0,-n)+"."+t.slice(-n);else{let f=n-t.length;i="0."+"0".repeat(f>0?f:0)+t}let g=i.length;for(let f=0;fqe,RPCWithBackup:()=>Ut});var qe=class{constructor(n,t=!1){this.DECIMALS=void 0;this.debug=!1;this.rpc_url=n,this.use_pending=t}static{s(this,"RPC")}async call(n){this.debug&&console.log(JSON.stringify(n));let t=await fetch(this.rpc_url,{method:"POST",headers:this.headers??{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!t.ok&&this.debug&&console.log(await t.text()),!t.ok)throw Error(`Request to RPC node failed with status code ${t.status}`);let i=await t.json();if(i.error)throw Error(`RPC node response: ${i.error}`);return i}async get_block_count(){return await this.call({action:"block_count"})}async get_block_info(n){return await this.call({action:"block_info",hash:n,json_block:!0})}async get_blocks(n){return await this.call({action:"blocks",hashes:n,json_block:!0})}async get_blocks_info(n){return await this.call({action:"blocks_info",hashes:n,json_block:!0})}async get_representatives(){return await this.call({action:"representatives"})}async get_representatives_online(n){return await this.call({action:"representatives_online",weight:n?!0:void 0})}async get_account_history(n,t,i,g,f,y,w){return await this.call({action:"account_history",account:n,count:`${t}`,raw:i?!0:void 0,head:g,offset:f?`${f}`:void 0,reverse:y?!0:void 0,account_filter:w})}async get_account_info(n,t,i,g,f){return await this.call({action:"account_info",account:n,include_confirmed:t?!0:void 0,representative:i?!0:void 0,weight:g?!0:void 0,pending:f?!0:void 0})}async get_account_balance(n){return await this.call({action:"account_balance",account:n})}async get_accounts_balances(n){return await this.call({action:"accounts_balances",accounts:n})}async get_account_representative(n){return await this.call({action:"account_representative",account:n})}async get_accounts_representatives(n){return await this.call({action:"accounts_representatives",account:n})}async get_account_weight(n){return await this.call({action:"account_weight",account:n})}async get_account_receivable(n,t,i,g){return await this.call({action:this.use_pending?"pending":"receivable",account:n,count:t?`${t}`:void 0,threshold:i?Se(i,this.DECIMALS).toString():void 0,source:g?!0:void 0})}async get_delegators(n,t,i,g){return await this.call({action:"delegators",account:n,threshold:t?`${t}`:void 0,count:i?`${i}`:void 0,start:g})}async get_delegators_count(n){return await this.call({action:"account_weight",account:n})}},Ut=class extends qe{static{s(this,"RPCWithBackup")}constructor(n,t,i=!1){if(n.length<2)throw Error("Must provide at least two RPC URLs");super(n[0],i),this.rpc_urls=n,this.timeout=t}async call(n){let t=0;for(;;)try{let i=await fetch(this.rpc_urls[t],{method:"POST",headers:this.headers??{"Content-Type":"application/json"},body:JSON.stringify(n),signal:AbortSignal.timeout(this.timeout)});if(!i.ok)throw Error(`Request to RPC node failed with status code ${i.status}`);let g=await i.json();if(g.error)throw Error(`RPC node response: ${g.error}`);return g}catch(i){if(!this.rpc_urls[++t])throw Error(i)}}};var Ft={};Me(Ft,{PrivateKeyAccount:()=>vt,Wallet:()=>We});var We=class e{constructor(n,t,i=0,g){this.add_do_work=!0;if(this.rpc=n,typeof t!="string"||t?.length!==64)throw Error("Seed needs to be 64 character (hex) string");this.seed=t,this.index=i,this.work_function=g}static{s(this,"Wallet")}static gen_random_wallet(n){let t=new Uint8Array(32);crypto.getRandomValues(t);let i=ee(t);return new e(n,i)}get private_key(){return pt(this.seed,this.index)}get public_key(){return je(this.private_key)}get address(){return De(this.public_key)}async send_process(n,t){return(await this.rpc.call({action:"process",json_block:"true",subtype:t,block:n,do_work:!n.work&&this.add_do_work?!0:void 0})).hash}async send(n,t,i,g,f){let y=Se(t,this.rpc.DECIMALS),w=f??await this.get_account_info(void 0,!0),x=he(n);g||(g=w.representative);let b=BigInt(w.balance),_=b-y;if(_<0n)throw Error(`Insufficient funds to send. Cannot send more than balance; ie, Before balance (raw: ${b}) less than send amount (raw: ${y})`);let S={type:"state",account:this.address,previous:w.frontier,representative:g,balance:_.toString(),link:x,link_as_account:n},m=te(S),j;i&&(j=await this.work_function(m));let fe=ne(this.private_key,m),X={...S,signature:fe,work:j};return await this.send_process(X,"send")}async send_all(n,t,i){let g=await this.get_account_info(void 0,!0);return await this.send(n,_t(BigInt(g.balance),this.rpc.DECIMALS),t,i,g)}async receive(n,t,i){let g=await this.rpc.get_block_info(n),f=0n;i||(i=this.address);let y;try{let m=await this.get_account_info(void 0,!0);y=m.frontier,i=m.representative,f=BigInt(m.balance)}catch{y="0".repeat(64)}let w={type:"state",account:this.address,previous:y,representative:i,balance:(f+BigInt(g.amount)).toString(),link:n},x=te(w),b;t&&(b=await this.work_function(x));let _=ne(this.private_key,x),S={...w,signature:_,work:b};return await this.send_process(S,"receive")}async receive_all(n=20,t,i){let g=(await this.get_account_receivable(n,t,!0)).blocks,f,y,w;try{let b=await this.get_account_info(void 0,!0);f=b.frontier,y=b.representative,w=BigInt(b.balance)}catch{f="0".repeat(64),y=this.address,w=BigInt(0)}let x=[];for(let b of Object.keys(g)){let _=(w+BigInt(g[b].amount)).toString(),S={type:"state",account:this.address,previous:f,representative:y,balance:_,link:b},m=te(S),j;i&&(j=await this.work_function(m));let fe=ne(this.private_key,m),X={...S,signature:fe,work:j};await this.send_process(X,"receive"),x.push(m),f=m,w=BigInt(_)}return x}async change_representative(n,t){let i=await this.get_account_info(),g={type:"state",account:this.address,previous:i.frontier,representative:n,balance:i.balance,link:"0".repeat(64)},f=te(g),y;t&&(y=await this.work_function(f));let w=ne(this.private_key,f),x={...g,signature:w,work:y};return await this.send_process(x,"change")}async change_rep(n,t){return await this.change_representative(n,t)}async get_account_info(n,t,i,g){return await this.rpc.get_account_info(this.address,n,t,i,g)}async get_account_receivable(n,t,i){return await this.rpc.get_account_receivable(this.address,n,t,i)}sign_message(n){return Dt(this.private_key,n)}},vt=class extends We{static{s(this,"PrivateKeyAccount")}constructor(n,t,i){if(typeof t!="string"||t?.length!==64)throw Error("Priv key needs to be 64 character (hex) string");super(n,t,0,i),this._private_key=t}get private_key(){return this._private_key}};var Kt={};Me(Kt,{RPCWorkProvider:()=>Pt});var Pt=class{constructor(n){this.extra_payload={};this.rpc=n}static{s(this,"RPCWorkProvider")}async request_work(n){return(await this.rpc.call({action:"work_generate",hash:n,...this.extra_payload})).work}};window.banani={...Xe,...mt,...Ft,...Kt};})(); +"use strict";(()=>{var wr=Object.create;var Le=Object.defineProperty;var Br=Object.getOwnPropertyDescriptor;var xr=Object.getOwnPropertyNames;var dr=Object.getPrototypeOf,Qr=Object.prototype.hasOwnProperty;var s=(e,n)=>Le(e,"name",{value:n,configurable:!0}),on=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,t)=>(typeof require<"u"?require:n)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var M=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),Me=(e,n)=>{for(var t in n)Le(e,t,{get:n[t],enumerable:!0})},br=(e,n,t,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let c of xr(n))!Qr.call(e,c)&&c!==t&&Le(e,c,{get:()=>n[c],enumerable:!(i=Br(n,c))||i.enumerable});return e};var An=(e,n,t)=>(t=e!=null?wr(dr(e)):{},br(n||!e||!e.__esModule?Le(t,"default",{value:e,enumerable:!0}):t,e));var lt=M((Fi,an)=>{an.exports=In;var Ve=class extends Error{static{s(this,"AssertionError")}};Ve.prototype.name="AssertionError";function In(e,n){if(!e){var t=new Ve(n);throw Error.captureStackTrace&&Error.captureStackTrace(t,In),t}}s(In,"assert")});var gn=M((ki,cn)=>{function sn(e){return e.length}s(sn,"byteLength");function _r(e){let n=e.byteLength,t="";for(let i=0;i{var ce="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Z=new Uint8Array(256);for(let e=0;e1&&e.charCodeAt(n-1)===61&&n--,n*3>>>2}s(hn,"byteLength");function Sr(e){let n=e.byteLength,t="";for(let i=0;i>2]+ce[(e[i]&3)<<4|e[i+1]>>4]+ce[(e[i+1]&15)<<2|e[i+2]>>6]+ce[e[i+2]&63];return n%3===2?t=t.substring(0,t.length-1)+"=":n%3===1&&(t=t.substring(0,t.length-2)+"=="),t}s(Sr,"toString");function Dr(e,n,t=0,i=hn(n)){let c=Math.min(i,e.byteLength-t);for(let f=0,y=0;y>4,e[y++]=(x&15)<<4|b>>2,e[y++]=(b&3)<<6|_&63}return c}s(Dr,"write");fn.exports={byteLength:hn,toString:Sr,write:Dr}});var En=M((Hi,yn)=>{function ln(e){return e.length>>>1}s(ln,"byteLength");function Ur(e){let n=e.byteLength;e=new DataView(e.buffer,e.byteOffset,n);let t="",i=0;for(let c=n-n%4;i=48&&e<=57)return e-48;if(e>=65&&e<=70)return e-65+10;if(e>=97&&e<=102)return e-97+10}s(un,"hexValue")});var Bn=M((Mi,wn)=>{function yt(e){let n=0;for(let t=0,i=e.length;t=55296&&c<=56319&&t+1=56320&&f<=57343){n+=4,t++;continue}}c<=127?n+=1:c<=2047?n+=2:n+=3}return n}s(yt,"byteLength");var Et;if(typeof TextDecoder<"u"){let e=new TextDecoder;Et=s(function(t){return e.decode(t)},"toString")}else Et=s(function(n){let t=n.byteLength,i="",c=0;for(;c0){let x=0;for(;x>b,b-=6;b>=0;)n[w++]=128|x>>b&63,b-=6;y+=x>=65536?2:1}return f},"write");wn.exports={byteLength:yt,toString:Et,write:wt}});var Qn=M((Gi,dn)=>{function xn(e){return e.length*2}s(xn,"byteLength");function vr(e){let n=e.byteLength,t="";for(let i=0;i>8,b=w%256;e[t+y*2]=b,e[t+y*2+1]=x}return c}s(Fr,"write");dn.exports={byteLength:xn,toString:vr,write:Fr}});var Dn=M((xt,Sn)=>{var Pr=gn(),kr=Cn(),Kr=En(),Yr=Bn(),Rr=Qn(),Ge=new Uint8Array(Uint16Array.of(255).buffer)[0]===255;function de(e){switch(e){case"ascii":return Pr;case"base64":return kr;case"hex":return Kr;case"utf8":case"utf-8":case void 0:return Yr;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Rr;default:throw new Error(`Unknown encoding: ${e}`)}}s(de,"codecFor");function bn(e){return e instanceof Uint8Array}s(bn,"isBuffer");function Hr(e){try{return de(e),!0}catch{return!1}}s(Hr,"isEncoding");function Lr(e,n,t){let i=new Uint8Array(e);return n!==void 0&&xt.fill(i,n,0,i.byteLength,t),i}s(Lr,"alloc");function Mr(e){return new Uint8Array(e)}s(Mr,"allocUnsafe");function Vr(e){return new Uint8Array(e)}s(Vr,"allocUnsafeSlow");function Gr(e,n){return de(n).byteLength(e)}s(Gr,"byteLength");function Nr(e,n){if(e===n)return 0;let t=Math.min(e.byteLength,n.byteLength);e=new DataView(e.buffer,e.byteOffset,e.byteLength),n=new DataView(n.buffer,n.byteOffset,n.byteLength);let i=0;for(let c=t-t%4;if)return 1}return e.byteLength>n.byteLength?1:e.byteLengthc+f.byteLength,0));let t=new Uint8Array(n),i=0;for(let c of e){if(i+c.byteLength>t.byteLength){let f=c.subarray(0,t.byteLength-i);return t.set(f,i),t}t.set(c,i),i+=c.byteLength}return t}s(Tr,"concat");function Or(e,n,t=0,i=0,c=e.byteLength){if(c>0&&c=e.byteLength)throw new RangeError("sourceStart is out of range");if(c<0)throw new RangeError("sourceEnd is out of range");t>=n.byteLength&&(t=n.byteLength),c>e.byteLength&&(c=e.byteLength),n.byteLength-t=e.byteLength){if(c)return-1;t=e.byteLength-1}else if(t<0)if(c)t=0;else return-1;if(typeof n=="string")n=Bt(n,i);else if(typeof n=="number")return n=n&255,c?e.indexOf(n,t):e.lastIndexOf(n,t);if(n.byteLength===0)return-1;if(c){let f=-1;for(let y=t;ye.byteLength&&(t=e.byteLength-n.byteLength);for(let f=t;f>=0;f--){let y=!0;for(let w=0;w=c||i<=t?"":(t<0&&(t=0),i>c&&(i=c),(t!==0||i{var Ci=s((e,n)=>s(function(){return n||(0,e[Object.keys(e)[0]])((n={exports:{}}).exports,n),n.exports},"__require"),"__commonJS"),ui=(()=>{for(var e=new Uint8Array(128),n=0;n<64;n++)e[n<26?n+65:n<52?n+71:n<62?n-4:n*4-205]=n;return t=>{for(var i=t.length,c=new Uint8Array((i-(t[i-1]=="=")-(t[i-2]=="="))*3/4|0),f=0,y=0;f>4,c[y++]=x<<4|b>>2,c[y++]=b<<6|_}return c}})(),li=Ci({"wasm-binary:./blake2b.wat"(e,n){n.exports=ui("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")}}),yi=li(),Ei=WebAssembly.compile(yi);Un.exports=async e=>(await WebAssembly.instantiate(await Ei,e)).exports});var Hn=M((qi,G)=>{var k=lt(),wi=Dn(),J=null,vn=typeof WebAssembly<"u"&&mn()().then(e=>{J=e}),O=64,Ne=[];G.exports=m;var Fn=G.exports.BYTES_MIN=16,Pn=G.exports.BYTES_MAX=64,ji=G.exports.BYTES=32,kn=G.exports.KEYBYTES_MIN=16,Kn=G.exports.KEYBYTES_MAX=64,Xi=G.exports.KEYBYTES=32,Yn=G.exports.SALTBYTES=16,Rn=G.exports.PERSONALBYTES=16;function m(e,n,t,i,c){if(!(this instanceof m))return new m(e,n,t,i,c);if(!J)throw new Error("WASM not loaded. Wait for Blake2b.ready(cb)");e||(e=32),c!==!0&&(k(e>=Fn,"digestLength must be at least "+Fn+", was given "+e),k(e<=Pn,"digestLength must be at most "+Pn+", was given "+e),n!=null&&(k(n instanceof Uint8Array,"key must be Uint8Array or Buffer"),k(n.length>=kn,"key must be at least "+kn+", was given "+n.length),k(n.length<=Kn,"key must be at least "+Kn+", was given "+n.length)),t!=null&&(k(t instanceof Uint8Array,"salt must be Uint8Array or Buffer"),k(t.length===Yn,"salt must be exactly "+Yn+", was given "+t.length)),i!=null&&(k(i instanceof Uint8Array,"personal must be Uint8Array or Buffer"),k(i.length===Rn,"personal must be exactly "+Rn+", was given "+i.length))),Ne.length||(Ne.push(O),O+=216),this.digestLength=e,this.finalized=!1,this.pointer=Ne.pop(),this._memory=new Uint8Array(J.memory.buffer),this._memory.fill(0,0,64),this._memory[0]=this.digestLength,this._memory[1]=n?n.length:0,this._memory[2]=1,this._memory[3]=1,t&&this._memory.set(t,32),i&&this._memory.set(i,48),this.pointer+216>this._memory.length&&this._realloc(this.pointer+216),J.blake2b_init(this.pointer,this.digestLength),n&&(this.update(n),this._memory.fill(0,O,O+n.length),this._memory[this.pointer+200]=128)}s(m,"Blake2b");m.prototype._realloc=function(e){J.memory.grow(Math.max(0,Math.ceil(Math.abs(e-this._memory.length)/65536))),this._memory=new Uint8Array(J.memory.buffer)};m.prototype.update=function(e){return k(this.finalized===!1,"Hash instance finalized"),k(e instanceof Uint8Array,"input must be Uint8Array or Buffer"),O+e.length>this._memory.length&&this._realloc(O+e.length),this._memory.set(e,O),J.blake2b_update(this.pointer,O,O+e.length),this};m.prototype.digest=function(e){if(k(this.finalized===!1,"Hash instance finalized"),this.finalized=!0,Ne.push(this.pointer),J.blake2b_final(this.pointer),!e||e==="binary")return this._memory.slice(this.pointer+128,this.pointer+128+this.digestLength);if(typeof e=="string")return wi.toString(this._memory,e,this.pointer+128,this.pointer+128+this.digestLength);k(e instanceof Uint8Array&&e.length>=this.digestLength,"input must be Uint8Array or Buffer");for(var n=0;ne(),e):e(new Error("WebAssembly not supported"))};m.prototype.ready=m.ready;m.prototype.getPartialHash=function(){return this._memory.slice(this.pointer,this.pointer+216)};m.prototype.setPartialHash=function(e){this._memory.set(e,this.pointer)};function Bi(){}s(Bi,"noop")});var dt=M(($i,v)=>{var Y=lt(),be=Hn();function Te(e,n,t){var i=e[n]+e[t],c=e[n+1]+e[t+1];i>=4294967296&&c++,e[n]=i,e[n+1]=c}s(Te,"ADD64AA");function Ln(e,n,t,i){var c=e[n]+t;t<0&&(c+=4294967296);var f=e[n+1]+i;c>=4294967296&&f++,e[n]=c,e[n+1]=f}s(Ln,"ADD64AC");function Jn(e,n){return e[n]^e[n+1]<<8^e[n+2]<<16^e[n+3]<<24}s(Jn,"B2B_GET32");function q(e,n,t,i,c,f){var y=Qe[c],w=Qe[c+1],x=Qe[f],b=Qe[f+1];Te(B,e,n),Ln(B,e,y,w);var _=B[i]^B[e],S=B[i+1]^B[e+1];B[i]=S,B[i+1]=_,Te(B,t,i),_=B[n]^B[t],S=B[n+1]^B[t+1],B[n]=_>>>24^S<<8,B[n+1]=S>>>24^_<<8,Te(B,e,n),Ln(B,e,x,b),_=B[i]^B[e],S=B[i+1]^B[e+1],B[i]=_>>>16^S<<16,B[i+1]=S>>>16^_<<16,Te(B,t,i),_=B[n]^B[t],S=B[n+1]^B[t+1],B[n]=S>>>31^_<<1,B[n+1]=_>>>31^S<<1}s(q,"B2B_G");var jn=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),xi=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3],U=new Uint8Array(xi.map(function(e){return e*2})),B=new Uint32Array(32),Qe=new Uint32Array(32);function Xn(e,n){var t=0;for(t=0;t<16;t++)B[t]=e.h[t],B[t+16]=jn[t];for(B[24]=B[24]^e.t,B[25]=B[25]^e.t/4294967296,n&&(B[28]=~B[28],B[29]=~B[29]),t=0;t<32;t++)Qe[t]=Jn(e.b,4*t);for(t=0;t<12;t++)q(0,8,16,24,U[t*16+0],U[t*16+1]),q(2,10,18,26,U[t*16+2],U[t*16+3]),q(4,12,20,28,U[t*16+4],U[t*16+5]),q(6,14,22,30,U[t*16+6],U[t*16+7]),q(0,10,20,30,U[t*16+8],U[t*16+9]),q(2,12,22,24,U[t*16+10],U[t*16+11]),q(4,14,16,26,U[t*16+12],U[t*16+13]),q(6,8,18,28,U[t*16+14],U[t*16+15]);for(t=0;t<16;t++)e.h[t]=e.h[t]^B[t]^B[t+16]}s(Xn,"blake2bCompress");var W=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);function ge(e,n,t,i){W.fill(0),this.b=new Uint8Array(128),this.h=new Uint32Array(16),this.t=0,this.c=0,this.outlen=e,W[0]=e,n&&(W[1]=n.length),W[2]=1,W[3]=1,t&&W.set(t,32),i&&W.set(i,48);for(var c=0;c<16;c++)this.h[c]=jn[c]^Jn(W,c*4);n&&(qn(this,n),this.c=128)}s(ge,"Blake2b");ge.prototype.update=function(e){return Y(e instanceof Uint8Array,"input must be Uint8Array or Buffer"),qn(this,e),this};ge.prototype.digest=function(e){var n=!e||e==="binary"||e==="hex"?new Uint8Array(this.outlen):e;return Y(n instanceof Uint8Array,'out must be "binary", "hex", Uint8Array, or Buffer'),Y(n.length>=this.outlen,"out must have at least outlen bytes of space"),di(this,n),e==="hex"?Qi(n):n};ge.prototype.final=ge.prototype.digest;ge.ready=function(e){be.ready(function(){e()})};function qn(e,n){for(var t=0;t>2]>>8*(t&3);return n}s(di,"blake2bFinal");function Qi(e){for(var n="",t=0;t=Mn,"outlen must be at least "+Mn+", was given "+n),Y(n<=Vn,"outlen must be at most "+Vn+", was given "+n),t!=null&&(Y(t instanceof Uint8Array,"key must be Uint8Array or Buffer"),Y(t.length>=Gn,"key must be at least "+Gn+", was given "+t.length),Y(t.length<=Nn,"key must be at most "+Nn+", was given "+t.length)),i!=null&&(Y(i instanceof Uint8Array,"salt must be Uint8Array or Buffer"),Y(i.length===Tn,"salt must be exactly "+Tn+", was given "+i.length)),c!=null&&(Y(c instanceof Uint8Array,"personal must be Uint8Array or Buffer"),Y(c.length===On,"personal must be exactly "+On+", was given "+c.length))),new _i(n,t,i,c)},"createHash");v.exports.ready=function(e){be.ready(function(){e()})};v.exports.WASM_SUPPORTED=be.SUPPORTED;v.exports.WASM_LOADED=!1;var Mn=v.exports.BYTES_MIN=16,Vn=v.exports.BYTES_MAX=64,zi=v.exports.BYTES=32,Gn=v.exports.KEYBYTES_MIN=16,Nn=v.exports.KEYBYTES_MAX=64,Zi=v.exports.KEYBYTES=32,Tn=v.exports.SALTBYTES=16,On=v.exports.PERSONALBYTES=16;be.ready(function(e){e||(v.exports.WASM_LOADED=!0,v.exports=be)})});var Wn=M((to,Oe)=>{"use strict";(function(e){"use strict";let n=dt();var t=s(function(r,A){this.hi=r|0,this.lo=A|0},"u64"),i=s(function(r){var A,o=new Float64Array(16);if(r)for(A=0;A>>32-A}s(X,"L32");function re(r,A){var o=r[A+3]&255;return o=o<<8|r[A+2]&255,o=o<<8|r[A+1]&255,o<<8|r[A+0]&255}s(re,"ld32");function Kt(r,A){var o=r[A]<<24|r[A+1]<<16|r[A+2]<<8|r[A+3],I=r[A+4]<<24|r[A+5]<<16|r[A+6]<<8|r[A+7];return new t(o,I)}s(Kt,"dl64");function ze(r,A,o){var I;for(I=0;I<4;I++)r[A+I]=o&255,o>>>=8}s(ze,"st32");function Yt(r,A,o){r[A]=o.hi>>24&255,r[A+1]=o.hi>>16&255,r[A+2]=o.hi>>8&255,r[A+3]=o.hi&255,r[A+4]=o.lo>>24&255,r[A+5]=o.lo>>16&255,r[A+6]=o.lo>>8&255,r[A+7]=o.lo&255}s(Yt,"ts64");function Ze(r,A,o,I,a){var g,u=0;for(g=0;g>>8)-1}s(Ze,"vn");function Rt(r,A,o,I){return Ze(r,A,o,I,16)}s(Rt,"crypto_verify_16");function $e(r,A,o,I){return Ze(r,A,o,I,32)}s($e,"crypto_verify_32");function Ht(r,A,o,I,a){var g=new Uint32Array(16),u=new Uint32Array(16),l=new Uint32Array(16),h=new Uint32Array(4),C,E,Q;for(C=0;C<4;C++)u[5*C]=re(I,4*C),u[1+C]=re(o,4*C),u[6+C]=re(A,4*C),u[11+C]=re(o,16+4*C);for(C=0;C<16;C++)l[C]=u[C];for(C=0;C<20;C++){for(E=0;E<4;E++){for(Q=0;Q<4;Q++)h[Q]=u[(5*E+4*Q)%16];for(h[1]^=X(h[0]+h[3]|0,7),h[2]^=X(h[1]+h[0]|0,9),h[3]^=X(h[2]+h[1]|0,13),h[0]^=X(h[3]+h[2]|0,18),Q=0;Q<4;Q++)g[4*E+(E+Q)%4]=h[Q]}for(Q=0;Q<16;Q++)u[Q]=g[Q]}if(a){for(C=0;C<16;C++)u[C]=u[C]+l[C]|0;for(C=0;C<4;C++)u[5*C]=u[5*C]-re(I,4*C)|0,u[6+C]=u[6+C]-re(A,4*C)|0;for(C=0;C<4;C++)ze(r,4*C,u[5*C]),ze(r,16+4*C,u[6+C])}else for(C=0;C<16;C++)ze(r,4*C,u[C]+l[C]|0)}s(Ht,"core");function Lt(r,A,o,I){return Ht(r,A,o,I,!1),0}s(Lt,"crypto_core_salsa20");function Ue(r,A,o,I){return Ht(r,A,o,I,!0),0}s(Ue,"crypto_core_hsalsa20");var Ce=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function et(r,A,o,I,a,g,u){var l=new Uint8Array(16),h=new Uint8Array(64),C,E;if(!a)return 0;for(E=0;E<16;E++)l[E]=0;for(E=0;E<8;E++)l[E]=g[E];for(;a>=64;){for(Lt(h,l,u,Ce),E=0;E<64;E++)r[A+E]=(o?o[I+E]:0)^h[E];for(C=1,E=8;E<16;E++)C=C+(l[E]&255)|0,l[E]=C&255,C>>>=8;a-=64,A+=64,o&&(I+=64)}if(a>0)for(Lt(h,l,u,Ce),E=0;E>>=8}s(nt,"add1305");var rr=new Uint32Array([5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252]);function rt(r,A,o,I,a,g){var u,l,h,C,E=new Uint32Array(17),Q=new Uint32Array(17),p=new Uint32Array(17),L=new Uint32Array(17),se=new Uint32Array(17);for(h=0;h<17;h++)Q[h]=p[h]=0;for(h=0;h<16;h++)Q[h]=g[h];for(Q[3]&=15,Q[4]&=252,Q[7]&=15,Q[8]&=252,Q[11]&=15,Q[12]&=252,Q[15]&=15;a>0;){for(h=0;h<17;h++)L[h]=0;for(h=0;h<16&&h>>=8;for(C=C+p[16]|0,p[16]=C&3,C=5*(C>>>2)|0,h=0;h<16;h++)C=C+p[h]|0,p[h]=C&255,C>>>=8;C=C+p[16]|0,p[16]=C}for(h=0;h<17;h++)se[h]=p[h];for(nt(p,rr),u=-(p[16]>>>7)|0,h=0;h<17;h++)p[h]^=u&(se[h]^p[h]);for(h=0;h<16;h++)L[h]=g[h+16];for(L[16]=0,nt(p,L),h=0;h<16;h++)r[A+h]=p[h];return 0}s(rt,"crypto_onetimeauth");function Gt(r,A,o,I,a,g){var u=new Uint8Array(16);return rt(u,0,o,I,a,g),Rt(r,A,u,0)}s(Gt,"crypto_onetimeauth_verify");function it(r,A,o,I,a){var g;if(o<32)return-1;for(tt(r,0,A,0,o,I,a),rt(r,16,r,32,o-32,r),g=0;g<16;g++)r[g]=0;return 0}s(it,"crypto_secretbox");function ot(r,A,o,I,a){var g,u=new Uint8Array(32);if(o<32||(Vt(u,0,32,I,a),Gt(A,16,A,32,o-32,u)!==0))return-1;for(tt(r,0,A,0,o,I,a),g=0;g<32;g++)r[g]=0;return 0}s(ot,"crypto_secretbox_open");function N(r,A){var o;for(o=0;o<16;o++)r[o]=A[o]|0}s(N,"set25519");function ue(r){var A,o;for(o=0;o<16;o++)r[o]+=65536,A=Math.floor(r[o]/65536),r[(o+1)*(o<15?1:0)]+=A-1+37*(A-1)*(o===15?1:0),r[o]-=A*65536}s(ue,"car25519");function ie(r,A,o){for(var I,a=~(o-1),g=0;g<16;g++)I=a&(r[g]^A[g]),r[g]^=I,A[g]^=I}s(ie,"sel25519");function oe(r,A){var o,I,a,g=i(),u=i();for(o=0;o<16;o++)u[o]=A[o];for(ue(u),ue(u),ue(u),I=0;I<2;I++){for(g[0]=u[0]-65517,o=1;o<15;o++)g[o]=u[o]-65535-(g[o-1]>>16&1),g[o-1]&=65535;g[15]=u[15]-32767-(g[14]>>16&1),a=g[15]>>16&1,g[14]&=65535,ie(u,g,1-a)}for(o=0;o<16;o++)r[2*o]=u[o]&255,r[2*o+1]=u[o]>>8}s(oe,"pack25519");function Nt(r,A){var o=new Uint8Array(32),I=new Uint8Array(32);return oe(o,r),oe(I,A),$e(o,0,I,0)}s(Nt,"neq25519");function Tt(r){var A=new Uint8Array(32);return oe(A,r),A[0]&1}s(Tt,"par25519");function At(r,A){var o;for(o=0;o<16;o++)r[o]=A[2*o]+(A[2*o+1]<<8);r[15]&=32767}s(At,"unpack25519");function R(r,A,o){var I;for(I=0;I<16;I++)r[I]=A[I]+o[I]|0}s(R,"A");function H(r,A,o){var I;for(I=0;I<16;I++)r[I]=A[I]-o[I]|0}s(H,"Z");function d(r,A,o){var I,a,g=new Float64Array(31);for(I=0;I<31;I++)g[I]=0;for(I=0;I<16;I++)for(a=0;a<16;a++)g[I+a]+=A[I]*o[a];for(I=0;I<15;I++)g[I]+=38*g[I+16];for(I=0;I<16;I++)r[I]=g[I];ue(r),ue(r)}s(d,"M");function K(r,A){d(r,A,A)}s(K,"S");function Ot(r,A){var o=i(),I;for(I=0;I<16;I++)o[I]=A[I];for(I=253;I>=0;I--)K(o,o),I!==2&&I!==4&&d(o,o,A);for(I=0;I<16;I++)r[I]=o[I]}s(Ot,"inv25519");function Jt(r,A){var o=i(),I;for(I=0;I<16;I++)o[I]=A[I];for(I=250;I>=0;I--)K(o,o),I!==1&&d(o,o,A);for(I=0;I<16;I++)r[I]=o[I]}s(Jt,"pow2523");function me(r,A,o){var I=new Uint8Array(32),a=new Float64Array(80),g,u,l=i(),h=i(),C=i(),E=i(),Q=i(),p=i();for(u=0;u<31;u++)I[u]=A[u];for(I[31]=A[31]&127|64,I[0]&=248,At(a,o),u=0;u<16;u++)h[u]=a[u],E[u]=l[u]=C[u]=0;for(l[0]=E[0]=1,u=254;u>=0;--u)g=I[u>>>3]>>>(u&7)&1,ie(l,h,g),ie(C,E,g),R(Q,l,C),H(l,l,C),R(C,h,E),H(h,h,E),K(E,Q),K(p,l),d(l,C,l),d(C,h,Q),R(Q,l,C),H(l,l,C),K(h,l),H(C,E,p),d(l,C,b),R(l,l,E),d(C,C,l),d(l,E,p),d(E,h,a),K(h,Q),ie(l,h,g),ie(C,E,g);for(u=0;u<16;u++)a[u+16]=l[u],a[u+32]=C[u],a[u+48]=h[u],a[u+64]=E[u];var L=a.subarray(32),se=a.subarray(16);return Ot(L,L),d(se,se,L),oe(r,se),0}s(me,"crypto_scalarmult");function ve(r,A){return me(r,A,y)}s(ve,"crypto_scalarmult_base");function jt(r,A){return c(A,32),ve(r,A)}s(jt,"crypto_box_keypair");function Fe(r,A,o){var I=new Uint8Array(32);return me(I,o,A),Ue(r,f,I,Ce)}s(Fe,"crypto_box_beforenm");var Xt=it,ir=ot;function or(r,A,o,I,a,g){var u=new Uint8Array(32);return Fe(u,a,g),Xt(r,A,o,I,u)}s(or,"crypto_box");function Ar(r,A,o,I,a,g){var u=new Uint8Array(32);return Fe(u,a,g),ir(r,A,o,I,u)}s(Ar,"crypto_box_open");function le(){var r=0,A=0,o=0,I=0,a=65535,g,u,l;for(l=0;l>>16,o+=u&a,I+=u>>>16;return A+=r>>>16,o+=A>>>16,I+=o>>>16,new t(o&a|I<<16,r&a|A<<16)}s(le,"add64");function qt(r,A){return new t(r.hi>>>A,r.lo>>>A|r.hi<<32-A)}s(qt,"shr64");function Pe(){var r=0,A=0,o;for(o=0;o>>A|r.lo<>>A|r.hi<>>A|r.hi<>>A|r.lo<=128;){for(h=0;h<16;h++)u[h]=Kt(A,8*h+E);for(h=0;h<80;h++){for(C=0;C<8;C++)a[C]=g[C];for(l=le(g[7],cr(g[4]),Ir(g[4],g[5],g[6]),fr[h],u[h%16]),a[7]=le(l,sr(g[0]),ar(g[0],g[1],g[2])),a[3]=le(a[3],l),C=0;C<8;C++)g[(C+1)%8]=a[C];if(h%16===15)for(C=0;C<16;C++)u[C]=le(u[C],u[(C+9)%16],gr(u[(C+1)%16]),hr(u[(C+14)%16]))}for(h=0;h<8;h++)g[h]=le(g[h],I[h]),I[h]=g[h];E+=128,o-=128}for(h=0;h<8;h++)Yt(r,8*h,I[h]);return o}s(Wt,"crypto_hashblocks");let Ae=s((r,A)=>n(A).update(r).digest(),"crypto_hash_blake2b");var Cr=new Uint8Array([106,9,230,103,243,188,201,8,187,103,174,133,132,202,167,59,60,110,243,114,254,148,248,43,165,79,245,58,95,29,54,241,81,14,82,127,173,230,130,209,155,5,104,140,43,62,108,31,31,131,217,171,251,65,189,107,91,224,205,25,19,126,33,121]);function zt(r,A,o){var I=new Uint8Array(64),a=new Uint8Array(256),g,u=o;for(g=0;g<64;g++)I[g]=Cr[g];for(Wt(I,A,o),o%=128,g=0;g<256;g++)a[g]=0;for(g=0;g=0;--a)I=o[a/8|0]>>(a&7)&1,Zt(r,A,I),ke(A,r),ke(r,r),Zt(r,A,I)}s(It,"scalarmult");function ye(r,A){var o=[i(),i(),i(),i()];N(o[0],F),N(o[1],j),N(o[2],x),d(o[3],F,j),It(r,o,A)}s(ye,"scalarbase");function at(r,A,o){var I=new Uint8Array(64),a=[i(),i(),i(),i()],g;o||c(A,32);I=Ae(A,64),I[0]&=248,I[31]&=127,I[31]|=64,ye(a,I),Ke(r,a);return 0}s(at,"crypto_sign_keypair");var Ye=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function st(r,A){var o,I,a,g;for(I=63;I>=32;--I){for(o=0,a=I-32,g=I-12;a>4)*Ye[a],o=A[a]>>8,A[a]&=255;for(a=0;a<32;a++)A[a]-=o*Ye[a];for(I=0;I<32;I++)A[I+1]+=A[I]>>8,r[I]=A[I]&255}s(st,"modL");function ct(r){var A=new Float64Array(64),o;for(o=0;o<64;o++)A[o]=r[o];for(o=0;o<64;o++)r[o]=0;st(r,A)}s(ct,"reduce");function $t(r,A,o,I){var a=new Uint8Array(64),g=new Uint8Array(64),u=new Uint8Array(64),l,h,C=new Float64Array(64),E=[i(),i(),i(),i()];let Q=rn(I);a=Ae(I,64),a[0]&=248,a[31]&=127,a[31]|=64;var p=o+64;for(l=0;l>7&&H(r[0],w,r[0]),d(r[3],r[0],r[1]),0)}s(ur,"unpackneg");function gt(r,A,o,I){var a,g=new Uint8Array(32),u=new Uint8Array(64),l=[i(),i(),i(),i()],h=[i(),i(),i(),i()];if(o<64||ur(h,I))return-1;for(a=0;a=0};function rn(r){let A=new Uint8Array(64),o=[i(),i(),i(),i()],I,a=new Uint8Array(32);return A=Ae(r,64),A[0]&=248,A[31]&=127,A[31]|=64,ye(o,A),Ke(a,o),a}s(rn,"derivePublicFromSecret"),e.sign.keyPair=function(){var r=new Uint8Array(z),A=new Uint8Array(ae);return at(r,A),{publicKey:r,secretKey:A}},e.sign.keyPair.fromSecretKey=function(r){if(P(r),r.length!==ae)throw new Error("bad secret key size");var A=new Uint8Array(z);return A=rn(r),{publicKey:A,secretKey:new Uint8Array(r)}},e.sign.keyPair.fromSeed=function(r){if(P(r),r.length!==Ct)throw new Error("bad seed size");for(var A=new Uint8Array(z),o=new Uint8Array(ae),I=0;I<32;I++)o[I]=r[I];return at(A,o,!0),{publicKey:A,secretKey:o}},e.sign.publicKeyLength=z,e.sign.secretKeyLength=ae,e.sign.seedLength=Ct,e.sign.signatureLength=T,e.hash=function(r){P(r);var A=new Uint8Array(ut);return zt(A,r,r.length),A},e.hash.hashLength=ut,e.verify=function(r,A){return P(r,A),r.length===0||A.length===0||r.length!==A.length?!1:Ze(r,0,A,0,r.length)===0},e.setPRNG=function(r){c=r},function(){var r=typeof self<"u"?self.crypto||self.msCrypto:null;if(r&&r.getRandomValues){var A=65536;e.setPRNG(function(o,I){var a,g=new Uint8Array(I);for(a=0;aUi,base32_to_uint8array:()=>$n,construct_message_block_and_hash:()=>St,get_address_from_public_key:()=>De,get_private_key_from_seed:()=>pt,get_public_key_from_address:()=>he,get_public_key_from_private_key:()=>je,hash_block:()=>te,hex_to_uint8array:()=>D,int_to_uint8array:()=>zn,raw_to_whole:()=>_t,sign_block_hash:()=>ne,sign_message:()=>Dt,uint8array_to_base32:()=>Qt,uint8array_to_hex:()=>ee,utf8_to_uint8array:()=>er,verify_block_hash:()=>nr,verify_signed_message:()=>mi,whole_to_raw:()=>Se});var Je=An(Wn()),pe=An(dt());var pi="0000000000000000000000000000000000000000000000000000000000000006",bt="62616E616E6F6D73672D",_e=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];function ee(e){let n="";for(let t=0;t0;f--)c-=t[n-f]*16**(2*(f-1));t[n-i]=Math.floor(c/16**(2*(i-1)))}return t}s(zn,"int_to_uint8array");var Zn=["1","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","m","n","o","p","q","r","s","t","u","w","x","y","z"];function Qt(e){let n="";for(let t=0;t=5)y=e[c]>>w-5&31;else{let x=5-w;y=(e[c]<>8-x&2**(8-x)-1)}n+=Zn[y]}return n}s(Qt,"uint8array_to_base32");function Si(e,n){let t="",i=e;for(let c=0;c=2**(n-1-c)?(t+="1",i-=2**(n-1-c)):t+="0";return t}s(Si,"int_to_binary");function Di(e){let n=0;for(let t=0;tSi(Zn.indexOf(i),5)).join(""),t=new Uint8Array(Math.ceil(e.length*5/8));for(let i=0;in-i[1].length)throw Error(`Too many decimals, cannot exceed ${n}`);t=BigInt(i[0])*BigInt(10)**BigInt(n)+BigInt(i[1])*BigInt(10)**BigInt(n-i[1].length)}else t=BigInt(e)*BigInt(10)**BigInt(n);return t}s(Se,"whole_to_raw");function _t(e,n=tr){let t=e.toString(),i;if(t.length>n)i=t.slice(0,-n)+"."+t.slice(-n);else{let f=n-t.length;i="0."+"0".repeat(f>0?f:0)+t}let c=i.length;for(let f=0;fqe,RPCWithBackup:()=>Ut});var qe=class{constructor(n,t=!1){this.DECIMALS=void 0;this.debug=!1;this.rpc_url=n,this.use_pending=t}static{s(this,"RPC")}async call(n){this.debug&&console.log(JSON.stringify(n));let t=await fetch(this.rpc_url,{method:"POST",headers:this.headers??{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!t.ok&&this.debug&&console.log(await t.text()),!t.ok)throw Error(`Request to RPC node failed with status code ${t.status}`);let i=await t.json();if(i.error)throw Error(`RPC node response: ${i.error}`);return i}async get_block_count(){return await this.call({action:"block_count"})}async get_block_info(n){return await this.call({action:"block_info",hash:n,json_block:!0})}async get_blocks(n){return await this.call({action:"blocks",hashes:n,json_block:!0})}async get_blocks_info(n){return await this.call({action:"blocks_info",hashes:n,json_block:!0})}async get_representatives(){return await this.call({action:"representatives"})}async get_representatives_online(n){return await this.call({action:"representatives_online",weight:n?!0:void 0})}async get_account_history(n,t,i,c,f,y,w){return await this.call({action:"account_history",account:n,count:`${t}`,raw:i?!0:void 0,head:c,offset:f?`${f}`:void 0,reverse:y?!0:void 0,account_filter:w})}async get_account_info(n,t,i,c,f){return await this.call({action:"account_info",account:n,include_confirmed:t?!0:void 0,representative:i?!0:void 0,weight:c?!0:void 0,pending:f?!0:void 0})}async get_account_balance(n){return await this.call({action:"account_balance",account:n})}async get_accounts_balances(n){return await this.call({action:"accounts_balances",accounts:n})}async get_account_representative(n){return await this.call({action:"account_representative",account:n})}async get_accounts_representatives(n){return await this.call({action:"accounts_representatives",account:n})}async get_account_weight(n){return await this.call({action:"account_weight",account:n})}async get_account_receivable(n,t,i,c){return await this.call({action:this.use_pending?"pending":"receivable",account:n,count:t?`${t}`:void 0,threshold:i?Se(i,this.DECIMALS).toString():void 0,source:c?!0:void 0})}async get_delegators(n,t,i,c){return await this.call({action:"delegators",account:n,threshold:t?`${t}`:void 0,count:i?`${i}`:void 0,start:c})}async get_delegators_count(n){return await this.call({action:"account_weight",account:n})}},Ut=class extends qe{static{s(this,"RPCWithBackup")}constructor(n,t,i=!1){if(n.length<2)throw Error("Must provide at least two RPC URLs");super(n[0],i),this.rpc_urls=n,this.timeout=t}async call(n){let t=0;for(;;)try{let i=await fetch(this.rpc_urls[t],{method:"POST",headers:this.headers??{"Content-Type":"application/json"},body:JSON.stringify(n),signal:AbortSignal.timeout(this.timeout)});if(!i.ok)throw Error(`Request to RPC node failed with status code ${i.status}`);let c=await i.json();if(c.error)throw Error(`RPC node response: ${c.error}`);return c}catch(i){if(!this.rpc_urls[++t])throw Error(i instanceof Error?i.toString():"RPC call error")}}};var Ft={};Me(Ft,{PrivateKeyAccount:()=>vt,Wallet:()=>We});var We=class e{constructor(n,t,i=0,c){this.add_do_work=!0;if(this.rpc=n,typeof t!="string"||t?.length!==64)throw Error("Seed needs to be 64 character (hex) string");this.seed=t,this.index=i,this.work_function=c}static{s(this,"Wallet")}static gen_random_wallet(n){let t=new Uint8Array(32);crypto.getRandomValues(t);let i=ee(t);return new e(n,i)}get private_key(){return pt(this.seed,this.index)}get public_key(){return je(this.private_key)}get address(){return De(this.public_key)}async send_process(n,t){return(await this.rpc.call({action:"process",json_block:"true",subtype:t,block:n,do_work:!n.work&&this.add_do_work?!0:void 0})).hash}async send(n,t,i,c,f){let y=Se(t,this.rpc.DECIMALS),w=f??await this.get_account_info(void 0,!0),x=he(n);if(c===void 0){if(w.representative===void 0)throw Error("Missing field 'representative' in `cached_account_info`");c=w.representative}let b=BigInt(w.balance),_=b-y;if(_<0n)throw Error(`Insufficient funds to send. Cannot send more than balance; ie, Before balance (raw: ${b}) less than send amount (raw: ${y})`);let S={type:"state",account:this.address,previous:w.frontier,representative:c,balance:_.toString(),link:x,link_as_account:n},F=te(S),j;i&&this.work_function&&(j=await this.work_function(w.frontier));let fe=ne(this.private_key,F),X={...S,signature:fe,work:j};return await this.send_process(X,"send")}async send_all(n,t,i){let c=await this.get_account_info(void 0,!0);return await this.send(n,_t(BigInt(c.balance),this.rpc.DECIMALS),t,i,c)}async receive(n,t,i){let c=await this.rpc.get_block_info(n),f=0n,y;try{let F=await this.get_account_info(void 0,!0);y=F.frontier,i||(i=F.representative),f=BigInt(F.balance)}catch{y="0".repeat(64)}i===void 0&&(i=this.address);let w={type:"state",account:this.address,previous:y,representative:i,balance:(f+BigInt(c.amount)).toString(),link:n},x=te(w),b;t&&this.work_function&&(b=await this.work_function(y==="0".repeat(64)?this.public_key:y));let _=ne(this.private_key,x),S={...w,signature:_,work:b};return await this.send_process(S,"receive")}async receive_all(n=20,t,i){let c=(await this.get_account_receivable(n,t,!0)).blocks,f,y,w;try{let b=await this.get_account_info(void 0,!0);f=b.frontier,y=b.representative,w=BigInt(b.balance)}catch{f="0".repeat(64),w=BigInt(0)}y===void 0&&(y=this.address);let x=[];for(let b of Object.keys(c)){let _=(w+BigInt(c[b].amount)).toString(),S={type:"state",account:this.address,previous:f,representative:y,balance:_,link:b},F=te(S),j;i&&this.work_function&&(j=await this.work_function(f==="0".repeat(64)?this.public_key:f));let fe=ne(this.private_key,F),X={...S,signature:fe,work:j};await this.send_process(X,"receive"),x.push(F),f=F,w=BigInt(_)}return x}async change_representative(n,t){let i=await this.get_account_info(),c={type:"state",account:this.address,previous:i.frontier,representative:n,balance:i.balance,link:"0".repeat(64)},f=te(c),y;t&&this.work_function&&(y=await this.work_function(i.frontier));let w=ne(this.private_key,f),x={...c,signature:w,work:y};return await this.send_process(x,"change")}async change_rep(n,t){return await this.change_representative(n,t)}async get_account_info(n,t,i,c){return await this.rpc.get_account_info(this.address,n,t,i,c)}async get_account_receivable(n,t,i){return await this.rpc.get_account_receivable(this.address,n,t,i)}sign_message(n){return Dt(this.private_key,n)}},vt=class extends We{static{s(this,"PrivateKeyAccount")}constructor(n,t,i){if(typeof t!="string"||t?.length!==64)throw Error("Priv key needs to be 64 character (hex) string");super(n,t,0,i),this._private_key=t}get private_key(){return this._private_key}};var kt={};Me(kt,{RPCWorkProvider:()=>Pt});var Pt=class{constructor(n){this.extra_payload={};this.rpc=n}static{s(this,"RPCWorkProvider")}async request_work(n){return(await this.rpc.call({action:"work_generate",hash:n,...this.extra_payload})).work}};window.banani={...Xe,...mt,...Ft,...kt};})(); //!!! BANANO CHANGE: we are replacing the below line with blake2b //!!! BANANO CHANGE: below line commented out //!!! BANANO CHANGE: Changed hashing to blake2b, and the derive pk thing diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js index 9fd7ed2..2afdc5b 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WXbU/bMBCA/0s/ozG6wdi+UaYJtGmrAKkfpilynUtj1TiV7RSqaf99ThMaJ34552vuuef8cmfK778zDa969mW2lGxPNHyHww2lVS307Gy2I7o0IcqJUqDOHeRdqZ+54bZM5LMvF/Prf2cn38Py1jWYj0jOiulyQei23nmz+zDmqeR2Kas9y0H6TRYQc60I5+A5jPZ7LLM7pAXhRFAYnAcTGmRBqPE41FA5v7xylXdM6UoeFryi25jU5tK1yEp7aoKSvKQu9g2dJE9c8hFMEN+LokKUHZIgewAKZm7WHGuBAThJ/FjVEu0wDz6pyFMpQZUVz5Pr2BlJpXaGB6GJZnt8NyM4ocAK2KbUiPgEJQhVN7UKcdpcina4OdTu4rEi4UFE5+4I3B6PP7CkAYGqYnNmA6joZ/XINoLoWkJYZkGoUKFLU6lrC17fKRpTfAUOG2JeLxU9dxdLk+I+RGXC929pXpMNREXDJv4lOBPBRyAETy4QfxLiKROKJRZApP7fNJYu/Jtm9M7kuSmreoc+7Jr3pP08ynz/+dPF5dzNXkoo2GvA0QYx03ECbjh/alLHpkEwybQgitGwqw8n2e6IKr2eJpBk+GFGiB7CC7LiSb5H0yZwWxKxgbB0DKWZ63Wj8AvbGOZZmT/0juD4Ec00XfutFlSzSjgCK4Z51kTBh3mmq6w2M3FNpCSH3ld0FnXu44buq4+WlpocLWuqs2fT2GQD2bo5loyIPCsHPdKXwHIi5TagM9IOUVbI6jnb1WvOaLYF72YiOFJk1/4315BtpgLIQyW8MFbgtJI2hYxfnVEJPz6xiLXQ1EJWSqRYc23tLfq8fTSmgFe8Ox0oIjQMLnSgiFCSl4Z9Gc5y77LjEY0yv7O6jg9NyAjBZN0YBU1dPKLp99/soH0DfDofl6w1l4c7DRQT6uIav1SXiij3IFlxQC7EgXBhc/KQx+7GC0bEx8Zq9mUazeez447mz3/hgMFozRIAAA==" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WXW0/bMBSA/0uf0TrKYIy3tmwCjUFFkfowTZHrnDRWQ1LZTqGa9t/nNKFx4stxXnO+8x3fjuv+/juS8C5HN6MFZ3si4SccppQWZS5HZ6MdkakK0YwIAWJsIJ9S+ZopbsvyeHRzPrn+d3byPS/mpkF9RHJWTKYzQrflzprdhjFPwbcLXuxZDNxu0gCfa0WyDCyLUX/3ZTaLNCMZySl01oPlEnhCqPIYVFc5ubwylXdMyIIfZllBtz6pzoVrkZG21AAleQsd7Ac6SB445CMYIL7PkwJRNkiA7BkoqL5ZZ9gR6ICDxMui5OgJs+CDirykHERaZHFwHT0jqNRO8ZBLItken00PDiiwArZJJSI+QQFC0XStQJw6F6LtTg61m7iviLsR0b47AvPj8juG1CFQla/PdAAVPRZLtsmJLDm4ZRqECgU6NBE6Nuf2naI+xS1ksCHq9hLedTexMCnuQ1QqfP+RZjXpgFfUPcRPecZy5yXgggcX8F8J/pQBxQILIFL7m0bTud80vXsmjlVZ0TrkYVfdJ/XnXubnb1/PLydm9oJDwt4djjqImY4dMM2ylyq1b+oEg0wzIhh1u9pwkO2OiNTqqQJBhgfVQvTgHpAWD/It1TGBeUryDbilfSjMXK4rhV1YxzDPSv3QG4LjRzRTndofZU4lK3JDoMUwz+P08Sm6/T6//zV9WLaiPeGseo2IcQfo2i500ZoIuJhEsohK1VzXhHNyaH1JMxwxtnFd7dUXTUtVjuQlldGr6hCygWhdrW9E8jhKO4etLYHleMptQEak7sYo4cVrtCvXGaPRFqyT8eBIkV39t7Ai60wBELtKWGGswGkkdQrpX1+9EnZ8YBFtoKGFtBRPsWrb6l20eduoTwHv+Ok0II9QMbjQgDxCTt4q9q17KbQuPe7RCPVga068q0N6CCZr2shpauIeTTv/agb1HWDT2bhgrdo83Kkgn1Am1/immpRHuQfOkgOyIQaEC6uVh9i3N1bQIz4erGpe6qDZfHrc0Pz5D5DZJy4WEwAA" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 8715f22..e34cfc3 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/classes/PrivateKeyAccount.html b/docs/classes/PrivateKeyAccount.html index 6e4e450..b6247a8 100644 --- a/docs/classes/PrivateKeyAccount.html +++ b/docs/classes/PrivateKeyAccount.html @@ -1,5 +1,5 @@ PrivateKeyAccount | banani

Class PrivateKeyAccount

Does everything a Wallet can do, except a private key is put in instead of a seed, and so limited to one address. Means changing .index will not do anything obviously.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

_private_key: string
add_do_work: boolean = true
index: number

Seed index. Seeds can have multiple private keys and addresses

-
seed: string
work_function?: WorkFunction

Accessors

  • get address(): `ban_${string}` | `nano_${string}`
  • Returns `ban_${string}` | `nano_${string}`

  • get private_key(): string
  • Returns string

  • get public_key(): string
  • Returns string

Methods

  • Parameters

    • new_representative: `ban_${string}` | `nano_${string}`
    • Optional work: boolean

    Returns Promise<string>

  • Parameters

    • Optional new_representative: `ban_${string}` | `nano_${string}`

      banano address to change representative to

      +
    • Optional work_function: WorkFunction

    Returns PrivateKeyAccount

Properties

_private_key: string
add_do_work: boolean = true
index: number

Seed index. Seeds can have multiple private keys and addresses

+
seed: string
work_function?: WorkFunction

Accessors

  • get address(): `ban_${string}` | `nano_${string}`
  • Returns `ban_${string}` | `nano_${string}`

  • get private_key(): string
  • Returns string

  • get public_key(): string
  • Returns string

Methods

  • Parameters

    • new_representative: `ban_${string}` | `nano_${string}`
    • Optional work: boolean

    Returns Promise<string>

  • Parameters

    • Optional new_representative: `ban_${string}` | `nano_${string}`

      banano address to change representative to

    • Optional gen_work: boolean

      whether or not to call work function to generate work

      -

    Returns Promise<string>

  • Parameters

    • Optional include_confirmed: boolean
    • Optional representative: boolean
    • Optional weight: boolean
    • Optional pending: boolean

    Returns Promise<AccountInfoRPC>

  • Parameters

    • Optional block_hash: string

      send block to receive

      +

    Returns Promise<string>

  • Parameters

    • Optional include_confirmed: boolean
    • Optional representative: boolean
    • Optional weight: boolean
    • Optional pending: boolean

    Returns Promise<AccountInfoRPC>

  • Parameters

    • Optional block_hash: string

      send block to receive

    • Optional gen_work: boolean

      whether or not to call work function to generate work

    • Optional representative: `ban_${string}` | `nano_${string}`

      optionally provide a representative if you do not want to use the current representative receive bananos from a specific send block

      -

    Returns Promise<string>

  • Parameters

    • Optional count: number = 20

      Max amount of blocks to receive +

    Returns Promise<string>

  • Parameters

    • Optional count: number = 20

      Max amount of blocks to receive receive all (up to count and exceeding threshold if applicable) receivable blocks

    • Optional threshold: `${number}`

      Min amount of Banano to receive in whole

    • Optional gen_work: boolean

      whether or not to call work function to generate work Receive all receivable transactions (up to count, and over threshold

      -

    Returns Promise<string[]>

  • Parameters

    • Optional to: `ban_${string}` | `nano_${string}`

      address to send to

      +

    Returns Promise<string[]>

  • Parameters

    • Optional to: `ban_${string}` | `nano_${string}`

      address to send to

    • Optional amount: `${number}`

      amount in whole bananos to send

    • Optional gen_work: boolean

      whether or not to call work function to generate work

    • Optional representative: `ban_${string}` | `nano_${string}`

      optionally provide a representative if you do not want to use the current representative

    • Optional cached_account_info: AccountInfoRPC

      can save one rpc call in some cases. Mostly for internal use. Make sure that in the RPC call, "representative" is "true" Send Bananos

      -

    Returns Promise<string>

  • Parameters

    • to: `ban_${string}` | `nano_${string}`
    • Optional work: boolean
    • Optional representative: `ban_${string}` | `nano_${string}`

    Returns Promise<string>

\ No newline at end of file +

Returns Promise<string>

  • Parameters

    • to: `ban_${string}` | `nano_${string}`
    • Optional work: boolean
    • Optional representative: `ban_${string}` | `nano_${string}`

    Returns Promise<string>

\ No newline at end of file diff --git a/docs/classes/RPC.html b/docs/classes/RPC.html index 88d2af4..260e90c 100644 --- a/docs/classes/RPC.html +++ b/docs/classes/RPC.html @@ -1,5 +1,5 @@ RPC | banani

Class RPC

Sends RPC requests to the RPC node, also has wrappers for actions that only read the network (write actions are handled by the Wallet class)

-

Hierarchy (view full)

Implements

Constructors

Hierarchy (view full)

Implements

Constructors

  • Parameters

    • rpc_url: string
    • Optional use_pending: boolean = false

      If true, uses "pending" instead of "receivable" in RPC action names, for compatibility with older versions of the node

      -

    Returns RPC

Properties

DECIMALS: any = undefined
debug: boolean = false
headers: Record<string, string>

HTTP headers to send with any RPC requests, defaults to { "Content-Type": "application/json" }

-
rpc_url: string
use_pending: boolean

Methods

  • The function that sends the RPC POST request

    -

    Parameters

    • payload: Record<string, any>

    Returns Promise<Record<string, any>>

\ No newline at end of file +

Returns RPC

Properties

DECIMALS: undefined = undefined
debug: boolean = false
headers: undefined | Record<string, string>

HTTP headers to send with any RPC requests, defaults to { "Content-Type": "application/json" }

+
rpc_url: string
use_pending: boolean

Methods

  • The function that sends the RPC POST request

    +

    Parameters

    • payload: Record<string, any>

    Returns Promise<Record<string, any>>

\ No newline at end of file diff --git a/docs/classes/RPCWithBackup.html b/docs/classes/RPCWithBackup.html index 9db6a30..c1da64c 100644 --- a/docs/classes/RPCWithBackup.html +++ b/docs/classes/RPCWithBackup.html @@ -1,5 +1,5 @@ RPCWithBackup | banani

Class RPCWithBackup

Sends RPC requests to the RPC node, also has wrappers for actions that only read the network (write actions are handled by the Wallet class)

-

Hierarchy (view full)

  • RPC
    • RPCWithBackup

Constructors

Hierarchy (view full)

  • RPC
    • RPCWithBackup

Constructors

  • Parameters

    • rpc_urls: string[]
    • Optional timeout: number

      Request to RPC timeout, in milliseconds. If RPC request fails or timeouts, tries the next RPC

      -
    • use_pending: boolean = false

    Returns RPCWithBackup

Properties

DECIMALS: any = undefined
debug: boolean = false
headers: Record<string, string>

HTTP headers to send with any RPC requests, defaults to { "Content-Type": "application/json" }

-
rpc_url: string
rpc_urls: string[]
timeout: number
use_pending: boolean

Methods

  • The function that sends the RPC POST request

    -

    Parameters

    • payload: Record<string, any>

    Returns Promise<Record<string, any>>

\ No newline at end of file +
  • use_pending: boolean = false
  • Returns RPCWithBackup

    Properties

    DECIMALS: undefined = undefined
    debug: boolean = false
    headers: undefined | Record<string, string>

    HTTP headers to send with any RPC requests, defaults to { "Content-Type": "application/json" }

    +
    rpc_url: string
    rpc_urls: string[]
    timeout: number
    use_pending: boolean

    Methods

    • The function that sends the RPC POST request

      +

      Parameters

      • payload: Record<string, any>

      Returns Promise<Record<string, any>>

    \ No newline at end of file diff --git a/docs/classes/RPCWorkProvider.html b/docs/classes/RPCWorkProvider.html index adacd76..154fdd9 100644 --- a/docs/classes/RPCWorkProvider.html +++ b/docs/classes/RPCWorkProvider.html @@ -1,6 +1,6 @@ -RPCWorkProvider | banani

    Class RPCWorkProvider

    Constructors

    constructor +RPCWorkProvider | banani

    Class RPCWorkProvider

    Constructors

    Properties

    Methods

    Constructors

    Properties

    extra_payload: Record<string, any> = {}

    Extra json to send with the rpc payload. Needed for rpc.nano.to's work_generate, unfortunately

    -
    rpc: RPC

    Methods

    • Parameters

      • block_hash: string

      Returns Promise<string>

    \ No newline at end of file +

    Constructors

    Properties

    extra_payload: Record<string, any> = {}

    Extra json to send with the rpc payload. Needed for rpc.nano.to's work_generate, unfortunately

    +
    rpc: RPC

    Methods

    • Parameters

      • block_hash: string

      Returns Promise<string>

    \ No newline at end of file diff --git a/docs/classes/Wallet.html b/docs/classes/Wallet.html index 249b66a..7b83c1e 100644 --- a/docs/classes/Wallet.html +++ b/docs/classes/Wallet.html @@ -1,5 +1,5 @@ Wallet | banani

    Class Wallet

    wallets are created from seeds, so they can have multiple addresses by changing the index. use wallets to "write" (send, receive, change rep) to the network

    -

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Properties

    Constructors

    • Parameters

      • rpc: RPCInterface
      • Optional seed: string

        Seed for the wallet from which private keys are derived. 64 character hex string (32 bytes)

        -
      • index: number = 0
      • Optional work_function: WorkFunction

      Returns Wallet

    Properties

    add_do_work: boolean = true
    index: number

    Seed index. Seeds can have multiple private keys and addresses

    -
    seed: string
    work_function?: WorkFunction

    Accessors

    • get address(): `ban_${string}` | `nano_${string}`
    • Returns `ban_${string}` | `nano_${string}`

    • get private_key(): string
    • Returns string

    • get public_key(): string
    • Returns string

    Methods

    • Parameters

      • new_representative: `ban_${string}` | `nano_${string}`
      • Optional work: boolean

      Returns Promise<string>

    • Parameters

      • Optional new_representative: `ban_${string}` | `nano_${string}`

        banano address to change representative to

        +
      • index: number = 0
      • Optional work_function: WorkFunction

      Returns Wallet

    Properties

    add_do_work: boolean = true
    index: number

    Seed index. Seeds can have multiple private keys and addresses

    +
    seed: string
    work_function?: WorkFunction

    Accessors

    • get address(): `ban_${string}` | `nano_${string}`
    • Returns `ban_${string}` | `nano_${string}`

    • get private_key(): string
    • Returns string

    • get public_key(): string
    • Returns string

    Methods

    • Parameters

      • new_representative: `ban_${string}` | `nano_${string}`
      • Optional work: boolean

      Returns Promise<string>

    • Parameters

      • Optional new_representative: `ban_${string}` | `nano_${string}`

        banano address to change representative to

      • Optional gen_work: boolean

        whether or not to call work function to generate work

        -

      Returns Promise<string>

    • Parameters

      • Optional include_confirmed: boolean
      • Optional representative: boolean
      • Optional weight: boolean
      • Optional pending: boolean

      Returns Promise<AccountInfoRPC>

    • Parameters

      • Optional block_hash: string

        send block to receive

        +

      Returns Promise<string>

    • Parameters

      • Optional include_confirmed: boolean
      • Optional representative: boolean
      • Optional weight: boolean
      • Optional pending: boolean

      Returns Promise<AccountInfoRPC>

    • Parameters

      • Optional block_hash: string

        send block to receive

      • Optional gen_work: boolean

        whether or not to call work function to generate work

      • Optional representative: `ban_${string}` | `nano_${string}`

        optionally provide a representative if you do not want to use the current representative receive bananos from a specific send block

        -

      Returns Promise<string>

    • Parameters

      • Optional count: number = 20

        Max amount of blocks to receive +

      Returns Promise<string>

    • Parameters

      • Optional count: number = 20

        Max amount of blocks to receive receive all (up to count and exceeding threshold if applicable) receivable blocks

      • Optional threshold: `${number}`

        Min amount of Banano to receive in whole

      • Optional gen_work: boolean

        whether or not to call work function to generate work Receive all receivable transactions (up to count, and over threshold

        -

      Returns Promise<string[]>

    • Parameters

      • Optional to: `ban_${string}` | `nano_${string}`

        address to send to

        +

      Returns Promise<string[]>

    • Parameters

      • Optional to: `ban_${string}` | `nano_${string}`

        address to send to

      • Optional amount: `${number}`

        amount in whole bananos to send

      • Optional gen_work: boolean

        whether or not to call work function to generate work

      • Optional representative: `ban_${string}` | `nano_${string}`

        optionally provide a representative if you do not want to use the current representative

      • Optional cached_account_info: AccountInfoRPC

        can save one rpc call in some cases. Mostly for internal use. Make sure that in the RPC call, "representative" is "true" Send Bananos

        -

      Returns Promise<string>

    • Parameters

      • to: `ban_${string}` | `nano_${string}`
      • Optional work: boolean
      • Optional representative: `ban_${string}` | `nano_${string}`

      Returns Promise<string>

    • Parameters

      • message: string

      Returns string

    \ No newline at end of file +

    Returns Promise<string>

    • Parameters

      • to: `ban_${string}` | `nano_${string}`
      • Optional work: boolean
      • Optional representative: `ban_${string}` | `nano_${string}`

      Returns Promise<string>

    • Parameters

      • message: string

      Returns string

    \ No newline at end of file diff --git a/docs/functions/base32_to_uint8array.html b/docs/functions/base32_to_uint8array.html index c530e55..fcdd70b 100644 --- a/docs/functions/base32_to_uint8array.html +++ b/docs/functions/base32_to_uint8array.html @@ -1 +1 @@ -base32_to_uint8array | banani

    Function base32_to_uint8array

    • Parameters

      • base32: string

      Returns Uint8Array

    \ No newline at end of file +base32_to_uint8array | banani

    Function base32_to_uint8array

    • Parameters

      • base32: string

      Returns Uint8Array

    \ No newline at end of file diff --git a/docs/functions/construct_message_block_and_hash.html b/docs/functions/construct_message_block_and_hash.html index 711c9d4..b16e860 100644 --- a/docs/functions/construct_message_block_and_hash.html +++ b/docs/functions/construct_message_block_and_hash.html @@ -1,2 +1,2 @@ construct_message_block_and_hash | banani

    Function construct_message_block_and_hash

    • For use in sign_message and verify_signed_message

      -

      Parameters

      • address: `ban_${string}` | `nano_${string}`
      • message: string
      • preamble: string = MESSAGE_PREAMBLE

      Returns string

    \ No newline at end of file +

    Parameters

    • address: `ban_${string}` | `nano_${string}`
    • message: string
    • preamble: string = MESSAGE_PREAMBLE

    Returns string

    \ No newline at end of file diff --git a/docs/functions/get_address_from_public_key.html b/docs/functions/get_address_from_public_key.html index a80c02c..70637a4 100644 --- a/docs/functions/get_address_from_public_key.html +++ b/docs/functions/get_address_from_public_key.html @@ -1 +1 @@ -get_address_from_public_key | banani

    Function get_address_from_public_key

    \ No newline at end of file +get_address_from_public_key | banani

    Function get_address_from_public_key

    \ No newline at end of file diff --git a/docs/functions/get_private_key_from_seed.html b/docs/functions/get_private_key_from_seed.html index 2578ea1..1ac4b85 100644 --- a/docs/functions/get_private_key_from_seed.html +++ b/docs/functions/get_private_key_from_seed.html @@ -1 +1 @@ -get_private_key_from_seed | banani

    Function get_private_key_from_seed

    • Parameters

      • seed: string
      • index: number

      Returns string

    \ No newline at end of file +get_private_key_from_seed | banani

    Function get_private_key_from_seed

    • Parameters

      • seed: string
      • index: number

      Returns string

    \ No newline at end of file diff --git a/docs/functions/get_public_key_from_address.html b/docs/functions/get_public_key_from_address.html index af088ca..7088dba 100644 --- a/docs/functions/get_public_key_from_address.html +++ b/docs/functions/get_public_key_from_address.html @@ -1 +1 @@ -get_public_key_from_address | banani

    Function get_public_key_from_address

    • Parameters

      • address: `ban_${string}` | `nano_${string}`

      Returns string

    \ No newline at end of file +get_public_key_from_address | banani

    Function get_public_key_from_address

    • Parameters

      • address: `ban_${string}` | `nano_${string}`

      Returns string

    \ No newline at end of file diff --git a/docs/functions/get_public_key_from_private_key.html b/docs/functions/get_public_key_from_private_key.html index 51b3146..51ddaae 100644 --- a/docs/functions/get_public_key_from_private_key.html +++ b/docs/functions/get_public_key_from_private_key.html @@ -1 +1 @@ -get_public_key_from_private_key | banani

    Function get_public_key_from_private_key

    • Parameters

      • private_key: string

      Returns string

    \ No newline at end of file +get_public_key_from_private_key | banani

    Function get_public_key_from_private_key

    • Parameters

      • private_key: string

      Returns string

    \ No newline at end of file diff --git a/docs/functions/hash_block.html b/docs/functions/hash_block.html index efcb643..1bfd45b 100644 --- a/docs/functions/hash_block.html +++ b/docs/functions/hash_block.html @@ -1 +1 @@ -hash_block | banani

    Function hash_block

    \ No newline at end of file +hash_block | banani

    Function hash_block

    \ No newline at end of file diff --git a/docs/functions/hex_to_uint8array.html b/docs/functions/hex_to_uint8array.html index dfba06e..dcc0d98 100644 --- a/docs/functions/hex_to_uint8array.html +++ b/docs/functions/hex_to_uint8array.html @@ -1 +1 @@ -hex_to_uint8array | banani

    Function hex_to_uint8array

    • Parameters

      • hex: string

      Returns Uint8Array

    \ No newline at end of file +hex_to_uint8array | banani

    Function hex_to_uint8array

    • Parameters

      • hex: string

      Returns Uint8Array

    \ No newline at end of file diff --git a/docs/functions/int_to_uint8array.html b/docs/functions/int_to_uint8array.html index 51411f3..3de1226 100644 --- a/docs/functions/int_to_uint8array.html +++ b/docs/functions/int_to_uint8array.html @@ -1 +1 @@ -int_to_uint8array | banani

    Function int_to_uint8array

    • Parameters

      • int: number
      • len: number

      Returns Uint8Array

    \ No newline at end of file +int_to_uint8array | banani

    Function int_to_uint8array

    • Parameters

      • int: number
      • len: number

      Returns Uint8Array

    \ No newline at end of file diff --git a/docs/functions/raw_to_whole.html b/docs/functions/raw_to_whole.html index 8d76204..afa2f9b 100644 --- a/docs/functions/raw_to_whole.html +++ b/docs/functions/raw_to_whole.html @@ -1,2 +1,2 @@ raw_to_whole | banani

    Function raw_to_whole

    • Turn raw Bananos (bigint) into whole Bananos (string)

      -

      Parameters

      • raw: bigint
      • decimals: number = BANANO_DECIMALS

      Returns Whole

    \ No newline at end of file +

    Parameters

    • raw: bigint
    • decimals: number = BANANO_DECIMALS

    Returns Whole

    \ No newline at end of file diff --git a/docs/functions/sign_block_hash.html b/docs/functions/sign_block_hash.html index 75d9edf..8871322 100644 --- a/docs/functions/sign_block_hash.html +++ b/docs/functions/sign_block_hash.html @@ -1 +1 @@ -sign_block_hash | banani

    Function sign_block_hash

    • Parameters

      • private_key: string
      • block_hash: string

      Returns string

    \ No newline at end of file +sign_block_hash | banani

    Function sign_block_hash

    • Parameters

      • private_key: string
      • block_hash: string

      Returns string

    \ No newline at end of file diff --git a/docs/functions/sign_message.html b/docs/functions/sign_message.html index c14eeab..10c45e8 100644 --- a/docs/functions/sign_message.html +++ b/docs/functions/sign_message.html @@ -1,3 +1,3 @@ sign_message | banani

    Function sign_message

    • Sign message by constructing a dummy block with the message (why not just sign the message itself instead of putting it in a dummy block? ledger support). This is already the standard across Banano services and wallets which support signing so please don't invent your own scheme

      Parameters

      • private_key: string
      • message: string
      • preamble: string = MESSAGE_PREAMBLE

      Returns string

      The signature in hex

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/functions/uint8array_to_base32.html b/docs/functions/uint8array_to_base32.html index 2f8d674..916ffb5 100644 --- a/docs/functions/uint8array_to_base32.html +++ b/docs/functions/uint8array_to_base32.html @@ -1 +1 @@ -uint8array_to_base32 | banani

    Function uint8array_to_base32

    • Parameters

      • uint8array: Uint8Array

      Returns string

    \ No newline at end of file +uint8array_to_base32 | banani

    Function uint8array_to_base32

    • Parameters

      • uint8array: Uint8Array

      Returns string

    \ No newline at end of file diff --git a/docs/functions/uint8array_to_hex.html b/docs/functions/uint8array_to_hex.html index 84b8992..2b39ffa 100644 --- a/docs/functions/uint8array_to_hex.html +++ b/docs/functions/uint8array_to_hex.html @@ -1 +1 @@ -uint8array_to_hex | banani

    Function uint8array_to_hex

    • Parameters

      • uint8array: Uint8Array

      Returns string

    \ No newline at end of file +uint8array_to_hex | banani

    Function uint8array_to_hex

    • Parameters

      • uint8array: Uint8Array

      Returns string

    \ No newline at end of file diff --git a/docs/functions/utf8_to_uint8array.html b/docs/functions/utf8_to_uint8array.html index 7bd5eaa..5fda94b 100644 --- a/docs/functions/utf8_to_uint8array.html +++ b/docs/functions/utf8_to_uint8array.html @@ -1 +1 @@ -utf8_to_uint8array | banani

    Function utf8_to_uint8array

    • Parameters

      • utf8: string

      Returns Uint8Array

    \ No newline at end of file +utf8_to_uint8array | banani

    Function utf8_to_uint8array

    • Parameters

      • utf8: string

      Returns Uint8Array

    \ No newline at end of file diff --git a/docs/functions/verify_block_hash.html b/docs/functions/verify_block_hash.html index 3b84103..38a8432 100644 --- a/docs/functions/verify_block_hash.html +++ b/docs/functions/verify_block_hash.html @@ -1,2 +1,2 @@ verify_block_hash | banani

    Function verify_block_hash

    • Make sure the alleged signature for a block hash is valid

      -

      Parameters

      • public_key: string
      • signature: string
      • block_hash: string

      Returns boolean

    \ No newline at end of file +

    Parameters

    • public_key: string
    • signature: string
    • block_hash: string

    Returns boolean

    \ No newline at end of file diff --git a/docs/functions/verify_signed_message.html b/docs/functions/verify_signed_message.html index 871a884..c66fd0c 100644 --- a/docs/functions/verify_signed_message.html +++ b/docs/functions/verify_signed_message.html @@ -1,3 +1,3 @@ verify_signed_message | banani

    Function verify_signed_message

    • Use to verify message signatures. A wrapper for verify_block_hash

      Parameters

      • address: `ban_${string}` | `nano_${string}`
      • message: string
      • signature: string
      • preamble: string = MESSAGE_PREAMBLE

      Returns boolean

      Whether the message signature was actually signed by that address

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/functions/whole_to_raw.html b/docs/functions/whole_to_raw.html index 6d935ae..1ad24f8 100644 --- a/docs/functions/whole_to_raw.html +++ b/docs/functions/whole_to_raw.html @@ -1,2 +1,2 @@ whole_to_raw | banani

    Function whole_to_raw

    • Turn whole Bananos (string) into raw Bananos (bigint)

      -

      Parameters

      • whole: `${number}`
      • decimals: number = BANANO_DECIMALS

      Returns bigint

    \ No newline at end of file +

    Parameters

    • whole: `${number}`
    • decimals: number = BANANO_DECIMALS

    Returns bigint

    \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 5eb0a8e..f22ff01 100644 --- a/docs/index.html +++ b/docs/index.html @@ -27,7 +27,7 @@ how to install banani on react.js

  • if Boompow goes offline (as it has done in the past), many Banano services will go down, which is not great for users and is not a very decentralized or resilient way to make your thing
  • Unrelated, do remember that Nano has harder work thresholds than Banano.

    -

    Using for Nano instead of Banano

    The main differences between Nano and Banano; or at least those relevant to a library like this, are the different amount of decimals. So, when creating a Wallet with banani, make sure to do my_rpc.DECIMALS = 31 otherwise your sends will be off by two magnitudes which is bad.

    +

    Using for Nano instead of Banano

    The main differences between Nano and Banano; or at least those relevant to a library like this, are the different amount of decimals. So, when creating a Wallet with banani, make sure to do rpc.DECIMALS = banani.NANO_DECIMALS otherwise your sends will be off by one magnitude which is bad.

    Also, a different preamble should be used for message signing.

    Dependencies

    Banani has two external dependencies, tweetnacl and blake2b. Blake2b probably has its own dependencies, but I haven't checked.

    Tweetnacl is not listed as a dependency in the package.json because it has been modified to use blake2b for the hashing algorithm. So, a modified version of it is distributed directly along with the package (see tweetnacl_mod.js). Clone the repo and run npm run cryptodiff to see the changes made from regular tweetnacl.

    diff --git a/docs/interfaces/AccountBalanceRPC.html b/docs/interfaces/AccountBalanceRPC.html index a4c3002..969e198 100644 --- a/docs/interfaces/AccountBalanceRPC.html +++ b/docs/interfaces/AccountBalanceRPC.html @@ -1,4 +1,4 @@ -AccountBalanceRPC | banani

    Interface AccountBalanceRPC

    interface AccountBalanceRPC {
        balance: `${number}`;
        pending: `${number}`;
        receivable?: `${number}`;
    }

    Properties

    balance +AccountBalanceRPC | banani

    Interface AccountBalanceRPC

    interface AccountBalanceRPC {
        balance: `${number}`;
        pending: `${number}`;
        receivable?: `${number}`;
    }

    Properties

    balance: `${number}`
    pending: `${number}`
    receivable?: `${number}`
    \ No newline at end of file +

    Properties

    balance: `${number}`
    pending: `${number}`
    receivable?: `${number}`
    \ No newline at end of file diff --git a/docs/interfaces/AccountHistoryBlock.html b/docs/interfaces/AccountHistoryBlock.html index aa70dc4..977817a 100644 --- a/docs/interfaces/AccountHistoryBlock.html +++ b/docs/interfaces/AccountHistoryBlock.html @@ -1,8 +1,8 @@ -AccountHistoryBlock | banani

    Interface AccountHistoryBlock

    interface AccountHistoryBlock {
        account: `ban_${string}` | `nano_${string}`;
        amount: `${number}`;
        confirmed: boolean;
        hash: string;
        height: `${number}`;
        local_timestamp: `${number}`;
        type: BlockStateChangeTypes;
    }

    Properties

    account +AccountHistoryBlock | banani

    Interface AccountHistoryBlock

    interface AccountHistoryBlock {
        account: `ban_${string}` | `nano_${string}`;
        amount: `${number}`;
        confirmed: boolean;
        hash: string;
        height: `${number}`;
        local_timestamp: `${number}`;
        type: BlockStateChangeTypes;
    }

    Properties

    account: `ban_${string}` | `nano_${string}`
    amount: `${number}`
    confirmed: boolean
    hash: string
    height: `${number}`
    local_timestamp: `${number}`
    \ No newline at end of file +

    Properties

    account: `ban_${string}` | `nano_${string}`
    amount: `${number}`
    confirmed: boolean
    hash: string
    height: `${number}`
    local_timestamp: `${number}`
    \ No newline at end of file diff --git a/docs/interfaces/AccountHistoryRPC.html b/docs/interfaces/AccountHistoryRPC.html index 369977b..5b3abc4 100644 --- a/docs/interfaces/AccountHistoryRPC.html +++ b/docs/interfaces/AccountHistoryRPC.html @@ -1,4 +1,4 @@ -AccountHistoryRPC | banani

    Interface AccountHistoryRPC

    interface AccountHistoryRPC {
        account: `ban_${string}` | `nano_${string}`;
        history: AccountHistoryBlock[];
        previous?: string;
    }

    Properties

    account +AccountHistoryRPC | banani

    Interface AccountHistoryRPC

    interface AccountHistoryRPC {
        account: `ban_${string}` | `nano_${string}`;
        history: AccountHistoryBlock[];
        previous?: string;
    }

    Properties

    account: `ban_${string}` | `nano_${string}`
    previous?: string
    \ No newline at end of file +

    Properties

    account: `ban_${string}` | `nano_${string}`
    previous?: string
    \ No newline at end of file diff --git a/docs/interfaces/AccountHistoryRawBlock.html b/docs/interfaces/AccountHistoryRawBlock.html index 488401d..4ab40c0 100644 --- a/docs/interfaces/AccountHistoryRawBlock.html +++ b/docs/interfaces/AccountHistoryRawBlock.html @@ -1,4 +1,4 @@ -AccountHistoryRawBlock | banani

    Interface AccountHistoryRawBlock

    interface AccountHistoryRawBlock {
        account: `ban_${string}` | `nano_${string}`;
        amount: `${number}`;
        amount_decimal: `${number}`;
        balance: `${number}`;
        balance_decimal: `${number}`;
        confirmed: "false" | "true";
        hash: string;
        height: `${number}`;
        link: string;
        local_timestamp: `${number}`;
        previous: string;
        representative: `ban_${string}` | `nano_${string}`;
        signature: string;
        subtype: BlockSubtype;
        type: BlockAllTypes;
        work: string;
    }

    Properties

    account +AccountHistoryRawBlock | banani

    Interface AccountHistoryRawBlock

    interface AccountHistoryRawBlock {
        account: `ban_${string}` | `nano_${string}`;
        amount: `${number}`;
        amount_decimal: `${number}`;
        balance: `${number}`;
        balance_decimal: `${number}`;
        confirmed: "false" | "true";
        hash: string;
        height: `${number}`;
        link: string;
        local_timestamp: `${number}`;
        previous: string;
        representative: `ban_${string}` | `nano_${string}`;
        signature: string;
        subtype: BlockSubtype;
        type: BlockAllTypes;
        work: string;
    }

    Properties

    Properties

    account: `ban_${string}` | `nano_${string}`
    amount: `${number}`
    amount_decimal: `${number}`
    balance: `${number}`
    balance_decimal: `${number}`
    confirmed: "false" | "true"
    hash: string
    height: `${number}`
    link: string
    local_timestamp: `${number}`
    previous: string
    representative: `ban_${string}` | `nano_${string}`
    signature: string
    subtype: BlockSubtype
    work: string
    \ No newline at end of file +

    Properties

    account: `ban_${string}` | `nano_${string}`
    amount: `${number}`
    amount_decimal: `${number}`
    balance: `${number}`
    balance_decimal: `${number}`
    confirmed: "false" | "true"
    hash: string
    height: `${number}`
    link: string
    local_timestamp: `${number}`
    previous: string
    representative: `ban_${string}` | `nano_${string}`
    signature: string
    subtype: BlockSubtype
    work: string
    \ No newline at end of file diff --git a/docs/interfaces/AccountHistoryRawRPC.html b/docs/interfaces/AccountHistoryRawRPC.html index bc6f476..0926147 100644 --- a/docs/interfaces/AccountHistoryRawRPC.html +++ b/docs/interfaces/AccountHistoryRawRPC.html @@ -1,4 +1,4 @@ -AccountHistoryRawRPC | banani

    Interface AccountHistoryRawRPC

    interface AccountHistoryRawRPC {
        account: `ban_${string}` | `nano_${string}`;
        history: AccountHistoryRawBlock[];
        previous?: string;
    }

    Properties

    account +AccountHistoryRawRPC | banani

    Interface AccountHistoryRawRPC

    interface AccountHistoryRawRPC {
        account: `ban_${string}` | `nano_${string}`;
        history: AccountHistoryRawBlock[];
        previous?: string;
    }

    Properties

    account: `ban_${string}` | `nano_${string}`
    previous?: string
    \ No newline at end of file +

    Properties

    account: `ban_${string}` | `nano_${string}`
    previous?: string
    \ No newline at end of file diff --git a/docs/interfaces/AccountInfoRPC.html b/docs/interfaces/AccountInfoRPC.html index 3fd5884..b7d5fff 100644 --- a/docs/interfaces/AccountInfoRPC.html +++ b/docs/interfaces/AccountInfoRPC.html @@ -1,4 +1,4 @@ -AccountInfoRPC | banani

    Interface AccountInfoRPC

    interface AccountInfoRPC {
        account_version: `${number}`;
        balance: `${number}`;
        block_count: `${number}`;
        confirmation_height?: `${number}`;
        confirmation_height_frontier?: string;
        confirmed_balance?: `${number}`;
        confirmed_frontier?: string;
        confirmed_height?: `${number}`;
        confirmed_pending?: `${number}`;
        confirmed_receivable?: `${number}`;
        confirmed_representative?: `ban_${string}` | `nano_${string}`;
        frontier: string;
        modified_timestamp: `${number}`;
        open_block: string;
        pending?: `${number}`;
        receivable?: `${number}`;
        representative?: `ban_${string}` | `nano_${string}`;
        representative_block: string;
        weight?: `${number}`;
    }

    Properties

    account_version +AccountInfoRPC | banani

    Interface AccountInfoRPC

    interface AccountInfoRPC {
        account_version: `${number}`;
        balance: `${number}`;
        block_count: `${number}`;
        confirmation_height?: `${number}`;
        confirmation_height_frontier?: string;
        confirmed_balance?: `${number}`;
        confirmed_frontier?: string;
        confirmed_height?: `${number}`;
        confirmed_pending?: `${number}`;
        confirmed_receivable?: `${number}`;
        confirmed_representative?: `ban_${string}` | `nano_${string}`;
        frontier: string;
        modified_timestamp: `${number}`;
        open_block: string;
        pending?: `${number}`;
        receivable?: `${number}`;
        representative?: `ban_${string}` | `nano_${string}`;
        representative_block: string;
        weight?: `${number}`;
    }

    Properties

    account_version: `${number}`
    balance: `${number}`
    block_count: `${number}`
    confirmation_height?: `${number}`
    confirmation_height_frontier?: string
    confirmed_balance?: `${number}`
    confirmed_frontier?: string
    confirmed_height?: `${number}`
    confirmed_pending?: `${number}`
    confirmed_receivable?: `${number}`
    confirmed_representative?: `ban_${string}` | `nano_${string}`
    frontier: string
    modified_timestamp: `${number}`
    open_block: string
    pending?: `${number}`
    receivable?: `${number}`
    representative?: `ban_${string}` | `nano_${string}`
    representative_block: string
    weight?: `${number}`
    \ No newline at end of file +

    Properties

    account_version: `${number}`
    balance: `${number}`
    block_count: `${number}`
    confirmation_height?: `${number}`
    confirmation_height_frontier?: string
    confirmed_balance?: `${number}`
    confirmed_frontier?: string
    confirmed_height?: `${number}`
    confirmed_pending?: `${number}`
    confirmed_receivable?: `${number}`
    confirmed_representative?: `ban_${string}` | `nano_${string}`
    frontier: string
    modified_timestamp: `${number}`
    open_block: string
    pending?: `${number}`
    receivable?: `${number}`
    representative?: `ban_${string}` | `nano_${string}`
    representative_block: string
    weight?: `${number}`
    \ No newline at end of file diff --git a/docs/interfaces/AccountReceivableRPC.html b/docs/interfaces/AccountReceivableRPC.html index e46b51d..cecd786 100644 --- a/docs/interfaces/AccountReceivableRPC.html +++ b/docs/interfaces/AccountReceivableRPC.html @@ -1,2 +1,2 @@ -AccountReceivableRPC | banani

    Interface AccountReceivableRPC

    interface AccountReceivableRPC {
        blocks: string[];
    }

    Properties

    Properties

    blocks: string[]
    \ No newline at end of file +AccountReceivableRPC | banani

    Interface AccountReceivableRPC

    interface AccountReceivableRPC {
        blocks: string[];
    }

    Properties

    Properties

    blocks: string[]
    \ No newline at end of file diff --git a/docs/interfaces/AccountReceivableSourceRPC.html b/docs/interfaces/AccountReceivableSourceRPC.html index ec9d7a3..bc817aa 100644 --- a/docs/interfaces/AccountReceivableSourceRPC.html +++ b/docs/interfaces/AccountReceivableSourceRPC.html @@ -1,2 +1,2 @@ -AccountReceivableSourceRPC | banani

    Interface AccountReceivableSourceRPC

    interface AccountReceivableSourceRPC {
        blocks: Record<string, {
            amount: `${number}`;
            source: `ban_${string}` | `nano_${string}`;
        }>;
    }

    Properties

    Properties

    blocks: Record<string, {
        amount: `${number}`;
        source: `ban_${string}` | `nano_${string}`;
    }>

    Type declaration

    • amount: `${number}`
    • source: `ban_${string}` | `nano_${string}`
    \ No newline at end of file +AccountReceivableSourceRPC | banani

    Interface AccountReceivableSourceRPC

    interface AccountReceivableSourceRPC {
        blocks: Record<string, {
            amount: `${number}`;
            source: `ban_${string}` | `nano_${string}`;
        }>;
    }

    Properties

    Properties

    blocks: Record<string, {
        amount: `${number}`;
        source: `ban_${string}` | `nano_${string}`;
    }>

    Type declaration

    • amount: `${number}`
    • source: `ban_${string}` | `nano_${string}`
    \ No newline at end of file diff --git a/docs/interfaces/AccountReceivableThresholdRPC.html b/docs/interfaces/AccountReceivableThresholdRPC.html index 20a3e65..4341091 100644 --- a/docs/interfaces/AccountReceivableThresholdRPC.html +++ b/docs/interfaces/AccountReceivableThresholdRPC.html @@ -1,2 +1,2 @@ -AccountReceivableThresholdRPC | banani

    Interface AccountReceivableThresholdRPC

    interface AccountReceivableThresholdRPC {
        blocks: Record<string, `${number}`>;
    }

    Properties

    Properties

    blocks: Record<string, `${number}`>
    \ No newline at end of file +AccountReceivableThresholdRPC | banani

    Interface AccountReceivableThresholdRPC

    interface AccountReceivableThresholdRPC {
        blocks: Record<string, `${number}`>;
    }

    Properties

    Properties

    blocks: Record<string, `${number}`>
    \ No newline at end of file diff --git a/docs/interfaces/AccountRepresentativeRPC.html b/docs/interfaces/AccountRepresentativeRPC.html index cc75043..c7fd698 100644 --- a/docs/interfaces/AccountRepresentativeRPC.html +++ b/docs/interfaces/AccountRepresentativeRPC.html @@ -1,2 +1,2 @@ -AccountRepresentativeRPC | banani

    Interface AccountRepresentativeRPC

    interface AccountRepresentativeRPC {
        representative: `ban_${string}` | `nano_${string}`;
    }

    Properties

    Properties

    representative: `ban_${string}` | `nano_${string}`
    \ No newline at end of file +AccountRepresentativeRPC | banani

    Interface AccountRepresentativeRPC

    interface AccountRepresentativeRPC {
        representative: `ban_${string}` | `nano_${string}`;
    }

    Properties

    Properties

    representative: `ban_${string}` | `nano_${string}`
    \ No newline at end of file diff --git a/docs/interfaces/AccountWeightRPC.html b/docs/interfaces/AccountWeightRPC.html index 5ef29a9..cd472ce 100644 --- a/docs/interfaces/AccountWeightRPC.html +++ b/docs/interfaces/AccountWeightRPC.html @@ -1,2 +1,2 @@ -AccountWeightRPC | banani

    Interface AccountWeightRPC

    interface AccountWeightRPC {
        weight: `${number}`;
    }

    Properties

    Properties

    weight: `${number}`
    \ No newline at end of file +AccountWeightRPC | banani

    Interface AccountWeightRPC

    interface AccountWeightRPC {
        weight: `${number}`;
    }

    Properties

    Properties

    weight: `${number}`
    \ No newline at end of file diff --git a/docs/interfaces/AccountsBalancesRPC.html b/docs/interfaces/AccountsBalancesRPC.html index 156a109..d4dc062 100644 --- a/docs/interfaces/AccountsBalancesRPC.html +++ b/docs/interfaces/AccountsBalancesRPC.html @@ -1,2 +1,2 @@ -AccountsBalancesRPC | banani

    Interface AccountsBalancesRPC

    interface AccountsBalancesRPC {
        balances: Record<`ban_${string}` | `nano_${string}`, AccountBalanceRPC>;
    }

    Properties

    Properties

    balances: Record<`ban_${string}` | `nano_${string}`, AccountBalanceRPC>
    \ No newline at end of file +AccountsBalancesRPC | banani

    Interface AccountsBalancesRPC

    interface AccountsBalancesRPC {
        balances: Record<`ban_${string}` | `nano_${string}`, AccountBalanceRPC>;
    }

    Properties

    Properties

    balances: Record<`ban_${string}` | `nano_${string}`, AccountBalanceRPC>
    \ No newline at end of file diff --git a/docs/interfaces/AccountsRepresentativesRPC.html b/docs/interfaces/AccountsRepresentativesRPC.html index 54bcd5c..dee6c39 100644 --- a/docs/interfaces/AccountsRepresentativesRPC.html +++ b/docs/interfaces/AccountsRepresentativesRPC.html @@ -1,2 +1,2 @@ -AccountsRepresentativesRPC | banani

    Interface AccountsRepresentativesRPC

    interface AccountsRepresentativesRPC {
        representatives: Record<`ban_${string}` | `nano_${string}`, `ban_${string}` | `nano_${string}`>;
    }

    Properties

    Properties

    representatives: Record<`ban_${string}` | `nano_${string}`, `ban_${string}` | `nano_${string}`>
    \ No newline at end of file +AccountsRepresentativesRPC | banani

    Interface AccountsRepresentativesRPC

    interface AccountsRepresentativesRPC {
        representatives: Record<`ban_${string}` | `nano_${string}`, `ban_${string}` | `nano_${string}`>;
    }

    Properties

    Properties

    representatives: Record<`ban_${string}` | `nano_${string}`, `ban_${string}` | `nano_${string}`>
    \ No newline at end of file diff --git a/docs/interfaces/Block.html b/docs/interfaces/Block.html index 29144ce..5458c2b 100644 --- a/docs/interfaces/Block.html +++ b/docs/interfaces/Block.html @@ -1,4 +1,4 @@ -Block | banani

    Interface Block

    interface Block {
        account: `ban_${string}` | `nano_${string}`;
        balance: `${number}`;
        link: string;
        link_as_account?: `ban_${string}` | `nano_${string}`;
        previous: string;
        representative: `ban_${string}` | `nano_${string}`;
        signature: string;
        type: BlockAllTypes;
        work?: string;
    }

    Hierarchy (view full)

    Properties

    account +Block | banani

    Interface Block

    interface Block {
        account: `ban_${string}` | `nano_${string}`;
        balance: `${number}`;
        link: string;
        link_as_account?: `ban_${string}` | `nano_${string}`;
        previous: string;
        representative: `ban_${string}` | `nano_${string}`;
        signature: string;
        type: BlockAllTypes;
        work?: string;
    }

    Hierarchy (view full)

    Properties

    account: `ban_${string}` | `nano_${string}`
    balance: `${number}`
    link: string
    link_as_account?: `ban_${string}` | `nano_${string}`
    previous: string
    representative: `ban_${string}` | `nano_${string}`
    signature: string
    work?: string
    \ No newline at end of file +

    Properties

    account: `ban_${string}` | `nano_${string}`
    balance: `${number}`
    link: string
    link_as_account?: `ban_${string}` | `nano_${string}`
    previous: string
    representative: `ban_${string}` | `nano_${string}`
    signature: string
    work?: string
    \ No newline at end of file diff --git a/docs/interfaces/BlockCountRPC.html b/docs/interfaces/BlockCountRPC.html index 4c0afeb..561aa4a 100644 --- a/docs/interfaces/BlockCountRPC.html +++ b/docs/interfaces/BlockCountRPC.html @@ -1,4 +1,4 @@ -BlockCountRPC | banani

    Interface BlockCountRPC

    interface BlockCountRPC {
        cemented?: `${number}`;
        count: `${number}`;
        unchecked: `${number}`;
    }

    Properties

    cemented? +BlockCountRPC | banani

    Interface BlockCountRPC

    interface BlockCountRPC {
        cemented?: `${number}`;
        count: `${number}`;
        unchecked: `${number}`;
    }

    Properties

    cemented?: `${number}`
    count: `${number}`
    unchecked: `${number}`
    \ No newline at end of file +

    Properties

    cemented?: `${number}`
    count: `${number}`
    unchecked: `${number}`
    \ No newline at end of file diff --git a/docs/interfaces/BlockInfoRPC.html b/docs/interfaces/BlockInfoRPC.html index 1af96bd..baabef6 100644 --- a/docs/interfaces/BlockInfoRPC.html +++ b/docs/interfaces/BlockInfoRPC.html @@ -1,4 +1,4 @@ -BlockInfoRPC | banani

    Interface BlockInfoRPC

    interface BlockInfoRPC {
        amount: `${number}`;
        balance: `${number}`;
        block_account: `ban_${string}` | `nano_${string}`;
        confirmed?: "false" | "true";
        contents: Block;
        height: `${number}`;
        subtype?: BlockSubtype;
        successor?: string;
        timestamp: `${number}`;
    }

    Properties

    amount +BlockInfoRPC | banani

    Interface BlockInfoRPC

    interface BlockInfoRPC {
        amount: `${number}`;
        balance: `${number}`;
        block_account: `ban_${string}` | `nano_${string}`;
        confirmed?: "false" | "true";
        contents: Block;
        height: `${number}`;
        subtype?: BlockSubtype;
        successor?: string;
        timestamp: `${number}`;
    }

    Properties

    amount: `${number}`
    balance: `${number}`
    block_account: `ban_${string}` | `nano_${string}`
    confirmed?: "false" | "true"
    contents: Block
    height: `${number}`
    subtype?: BlockSubtype
    successor?: string
    timestamp: `${number}`
    \ No newline at end of file +

    Properties

    amount: `${number}`
    balance: `${number}`
    block_account: `ban_${string}` | `nano_${string}`
    confirmed?: "false" | "true"
    contents: Block
    height: `${number}`
    subtype?: BlockSubtype
    successor?: string
    timestamp: `${number}`
    \ No newline at end of file diff --git a/docs/interfaces/BlockNoSignature.html b/docs/interfaces/BlockNoSignature.html index 1ef0638..49f5b77 100644 --- a/docs/interfaces/BlockNoSignature.html +++ b/docs/interfaces/BlockNoSignature.html @@ -1,8 +1,8 @@ -BlockNoSignature | banani

    Interface BlockNoSignature

    interface BlockNoSignature {
        account: `ban_${string}` | `nano_${string}`;
        balance: `${number}`;
        link: string;
        link_as_account?: `ban_${string}` | `nano_${string}`;
        previous: string;
        representative: `ban_${string}` | `nano_${string}`;
        type: BlockAllTypes;
    }

    Hierarchy (view full)

    Properties

    account +BlockNoSignature | banani

    Interface BlockNoSignature

    interface BlockNoSignature {
        account: `ban_${string}` | `nano_${string}`;
        balance: `${number}`;
        link: string;
        link_as_account?: `ban_${string}` | `nano_${string}`;
        previous: string;
        representative: `ban_${string}` | `nano_${string}`;
        type: BlockAllTypes;
    }

    Hierarchy (view full)

    Properties

    account: `ban_${string}` | `nano_${string}`
    balance: `${number}`
    link: string
    link_as_account?: `ban_${string}` | `nano_${string}`
    previous: string
    representative: `ban_${string}` | `nano_${string}`
    \ No newline at end of file +

    Properties

    account: `ban_${string}` | `nano_${string}`
    balance: `${number}`
    link: string
    link_as_account?: `ban_${string}` | `nano_${string}`
    previous: string
    representative: `ban_${string}` | `nano_${string}`
    \ No newline at end of file diff --git a/docs/interfaces/BlocksInfoRPC.html b/docs/interfaces/BlocksInfoRPC.html index 5c89af2..424e208 100644 --- a/docs/interfaces/BlocksInfoRPC.html +++ b/docs/interfaces/BlocksInfoRPC.html @@ -1,2 +1,2 @@ -BlocksInfoRPC | banani

    Interface BlocksInfoRPC

    interface BlocksInfoRPC {
        blocks: Record<string, BlockInfoRPC>;
    }

    Properties

    Properties

    blocks: Record<string, BlockInfoRPC>
    \ No newline at end of file +BlocksInfoRPC | banani

    Interface BlocksInfoRPC

    interface BlocksInfoRPC {
        blocks: Record<string, BlockInfoRPC>;
    }

    Properties

    Properties

    blocks: Record<string, BlockInfoRPC>
    \ No newline at end of file diff --git a/docs/interfaces/BlocksRPC.html b/docs/interfaces/BlocksRPC.html index 7a7f126..09598b1 100644 --- a/docs/interfaces/BlocksRPC.html +++ b/docs/interfaces/BlocksRPC.html @@ -1,2 +1,2 @@ -BlocksRPC | banani

    Interface BlocksRPC

    interface BlocksRPC {
        blocks: Record<string, Block>;
    }

    Properties

    Properties

    blocks: Record<string, Block>
    \ No newline at end of file +BlocksRPC | banani

    Interface BlocksRPC

    interface BlocksRPC {
        blocks: Record<string, Block>;
    }

    Properties

    Properties

    blocks: Record<string, Block>
    \ No newline at end of file diff --git a/docs/interfaces/DelegatorsCountRPC.html b/docs/interfaces/DelegatorsCountRPC.html index 26b76d3..b1f410d 100644 --- a/docs/interfaces/DelegatorsCountRPC.html +++ b/docs/interfaces/DelegatorsCountRPC.html @@ -1,2 +1,2 @@ -DelegatorsCountRPC | banani

    Interface DelegatorsCountRPC

    interface DelegatorsCountRPC {
        count: `${number}`;
    }

    Properties

    Properties

    count: `${number}`
    \ No newline at end of file +DelegatorsCountRPC | banani

    Interface DelegatorsCountRPC

    interface DelegatorsCountRPC {
        count: `${number}`;
    }

    Properties

    Properties

    count: `${number}`
    \ No newline at end of file diff --git a/docs/interfaces/DelegatorsRPC.html b/docs/interfaces/DelegatorsRPC.html index efda8d4..ead09e5 100644 --- a/docs/interfaces/DelegatorsRPC.html +++ b/docs/interfaces/DelegatorsRPC.html @@ -1,2 +1,2 @@ -DelegatorsRPC | banani

    Interface DelegatorsRPC

    interface DelegatorsRPC {
        delegators: Record<`ban_${string}` | `nano_${string}`, `${number}`>;
    }

    Properties

    Properties

    delegators: Record<`ban_${string}` | `nano_${string}`, `${number}`>
    \ No newline at end of file +DelegatorsRPC | banani

    Interface DelegatorsRPC

    interface DelegatorsRPC {
        delegators: Record<`ban_${string}` | `nano_${string}`, `${number}`>;
    }

    Properties

    Properties

    delegators: Record<`ban_${string}` | `nano_${string}`, `${number}`>
    \ No newline at end of file diff --git a/docs/interfaces/RPCInterface.html b/docs/interfaces/RPCInterface.html index 56a7917..d3130f0 100644 --- a/docs/interfaces/RPCInterface.html +++ b/docs/interfaces/RPCInterface.html @@ -1,9 +1,9 @@ RPCInterface | banani

    Interface RPCInterface

    Implement this interface if the built-in RPC class does not fit your needs. The easiest way to do this is by just extending the built-in RPC class

    -
    interface RPCInterface {
        DECIMALS?: number;
        rpc_url: string;
        use_pending: boolean;
        call(payload): Promise<Record<string, string>>;
        get_account_info(account, include_confirmed?, representative?, weight?, pending?): Promise<AccountInfoRPC>;
        get_account_receivable(account, count?, threshold?, source?): Promise<AccountReceivableRPC | AccountReceivableThresholdRPC | AccountReceivableSourceRPC>;
        get_block_info(block_hash): Promise<BlockInfoRPC>;
    }

    Implemented by

    Properties

    interface RPCInterface {
        DECIMALS?: number;
        rpc_url: string;
        use_pending: boolean;
        call(payload): Promise<Record<string, string>>;
        get_account_info(account, include_confirmed?, representative?, weight?, pending?): Promise<AccountInfoRPC>;
        get_account_receivable(account, count?, threshold?, source?): Promise<AccountReceivableRPC | AccountReceivableThresholdRPC | AccountReceivableSourceRPC>;
        get_block_info(block_hash): Promise<BlockInfoRPC>;
    }

    Implemented by

    Properties

    DECIMALS?: number
    rpc_url: string
    use_pending: boolean

    Methods

    • Parameters

      • payload: Record<string, any>

      Returns Promise<Record<string, string>>

    • Parameters

      • account: `ban_${string}` | `nano_${string}`
      • Optional include_confirmed: boolean
      • Optional representative: boolean
      • Optional weight: boolean
      • Optional pending: boolean

      Returns Promise<AccountInfoRPC>

    \ No newline at end of file +

    Properties

    DECIMALS?: number
    rpc_url: string
    use_pending: boolean

    Methods

    • Parameters

      • payload: Record<string, any>

      Returns Promise<Record<string, string>>

    • Parameters

      • account: `ban_${string}` | `nano_${string}`
      • Optional include_confirmed: boolean
      • Optional representative: boolean
      • Optional weight: boolean
      • Optional pending: boolean

      Returns Promise<AccountInfoRPC>

    \ No newline at end of file diff --git a/docs/interfaces/RepresentativesOnlineRPC.html b/docs/interfaces/RepresentativesOnlineRPC.html index 4750ea5..7adeada 100644 --- a/docs/interfaces/RepresentativesOnlineRPC.html +++ b/docs/interfaces/RepresentativesOnlineRPC.html @@ -1,2 +1,2 @@ -RepresentativesOnlineRPC | banani

    Interface RepresentativesOnlineRPC

    interface RepresentativesOnlineRPC {
        representatives: (`ban_${string}` | `nano_${string}`)[];
    }

    Properties

    Properties

    representatives: (`ban_${string}` | `nano_${string}`)[]
    \ No newline at end of file +RepresentativesOnlineRPC | banani

    Interface RepresentativesOnlineRPC

    interface RepresentativesOnlineRPC {
        representatives: (`ban_${string}` | `nano_${string}`)[];
    }

    Properties

    Properties

    representatives: (`ban_${string}` | `nano_${string}`)[]
    \ No newline at end of file diff --git a/docs/interfaces/RepresentativesOnlineWeightRPC.html b/docs/interfaces/RepresentativesOnlineWeightRPC.html index 2994e59..51ee70f 100644 --- a/docs/interfaces/RepresentativesOnlineWeightRPC.html +++ b/docs/interfaces/RepresentativesOnlineWeightRPC.html @@ -1,2 +1,2 @@ -RepresentativesOnlineWeightRPC | banani

    Interface RepresentativesOnlineWeightRPC

    interface RepresentativesOnlineWeightRPC {
        representatives: Record<`ban_${string}` | `nano_${string}`, {
            weight: `${number}`;
        }>;
    }

    Properties

    Properties

    representatives: Record<`ban_${string}` | `nano_${string}`, {
        weight: `${number}`;
    }>

    Type declaration

    • weight: `${number}`
    \ No newline at end of file +RepresentativesOnlineWeightRPC | banani

    Interface RepresentativesOnlineWeightRPC

    interface RepresentativesOnlineWeightRPC {
        representatives: Record<`ban_${string}` | `nano_${string}`, {
            weight: `${number}`;
        }>;
    }

    Properties

    Properties

    representatives: Record<`ban_${string}` | `nano_${string}`, {
        weight: `${number}`;
    }>

    Type declaration

    • weight: `${number}`
    \ No newline at end of file diff --git a/docs/interfaces/RepresentativesRPC.html b/docs/interfaces/RepresentativesRPC.html index 3c4e81a..472906c 100644 --- a/docs/interfaces/RepresentativesRPC.html +++ b/docs/interfaces/RepresentativesRPC.html @@ -1,2 +1,2 @@ -RepresentativesRPC | banani

    Interface RepresentativesRPC

    interface RepresentativesRPC {
        representatives: Record<`ban_${string}` | `nano_${string}`, `${number}`>;
    }

    Properties

    Properties

    representatives: Record<`ban_${string}` | `nano_${string}`, `${number}`>
    \ No newline at end of file +RepresentativesRPC | banani

    Interface RepresentativesRPC

    interface RepresentativesRPC {
        representatives: Record<`ban_${string}` | `nano_${string}`, `${number}`>;
    }

    Properties

    Properties

    representatives: Record<`ban_${string}` | `nano_${string}`, `${number}`>
    \ No newline at end of file diff --git a/docs/interfaces/WorkProvider.html b/docs/interfaces/WorkProvider.html index 89a5a4a..e417742 100644 --- a/docs/interfaces/WorkProvider.html +++ b/docs/interfaces/WorkProvider.html @@ -1,2 +1,2 @@ -WorkProvider | banani

    Interface WorkProvider

    interface WorkProvider {
        request_work(block_hash): Promise<string>;
    }

    Methods

    Methods

    • Parameters

      • block_hash: string

      Returns Promise<string>

    \ No newline at end of file +WorkProvider | banani

    Interface WorkProvider

    interface WorkProvider {
        request_work(block_hash): Promise<string>;
    }

    Methods

    Methods

    • Parameters

      • block_hash: string

      Returns Promise<string>

    \ No newline at end of file diff --git a/docs/modules.html b/docs/modules.html index f05e0e5..76feed3 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -39,6 +39,7 @@ BlockSubtype Whole WorkFunction +

    Variables

    Functions

    base32_to_uint8array construct_message_block_and_hash get_address_from_public_key diff --git a/docs/types/Address.html b/docs/types/Address.html index 57045ce..2d8ba3c 100644 --- a/docs/types/Address.html +++ b/docs/types/Address.html @@ -1 +1 @@ -Address | banani

    Type alias Address

    Address: `${AddressPrefix}${string}`
    \ No newline at end of file +Address | banani

    Type alias Address

    Address: `${AddressPrefix}${string}`
    \ No newline at end of file diff --git a/docs/types/AddressPrefix.html b/docs/types/AddressPrefix.html index bdd843c..5ab150f 100644 --- a/docs/types/AddressPrefix.html +++ b/docs/types/AddressPrefix.html @@ -1 +1 @@ -AddressPrefix | banani

    Type alias AddressPrefix

    AddressPrefix: "ban_" | "nano_"
    \ No newline at end of file +AddressPrefix | banani

    Type alias AddressPrefix

    AddressPrefix: "ban_" | "nano_"
    \ No newline at end of file diff --git a/docs/types/BlockAllTypes.html b/docs/types/BlockAllTypes.html index 69db554..2bba148 100644 --- a/docs/types/BlockAllTypes.html +++ b/docs/types/BlockAllTypes.html @@ -1 +1 @@ -BlockAllTypes | banani

    Type alias BlockAllTypes

    BlockAllTypes: BlockLegacyTypes | "state"
    \ No newline at end of file +BlockAllTypes | banani

    Type alias BlockAllTypes

    BlockAllTypes: BlockLegacyTypes | "state"
    \ No newline at end of file diff --git a/docs/types/BlockBasicTypes.html b/docs/types/BlockBasicTypes.html index 14f7397..8bb1096 100644 --- a/docs/types/BlockBasicTypes.html +++ b/docs/types/BlockBasicTypes.html @@ -1 +1 @@ -BlockBasicTypes | banani

    Type alias BlockBasicTypes

    BlockBasicTypes: BlockStateChangeTypes | "change"
    \ No newline at end of file +BlockBasicTypes | banani

    Type alias BlockBasicTypes

    BlockBasicTypes: BlockStateChangeTypes | "change"
    \ No newline at end of file diff --git a/docs/types/BlockHash.html b/docs/types/BlockHash.html index 994bdaf..7ae646e 100644 --- a/docs/types/BlockHash.html +++ b/docs/types/BlockHash.html @@ -1,2 +1,2 @@ BlockHash | banani

    Type alias BlockHash

    BlockHash: string

    32 byte block hash represented as 64 char hexadecimal

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/types/BlockLegacyTypes.html b/docs/types/BlockLegacyTypes.html index 59f32a6..c0eea9b 100644 --- a/docs/types/BlockLegacyTypes.html +++ b/docs/types/BlockLegacyTypes.html @@ -1 +1 @@ -BlockLegacyTypes | banani

    Type alias BlockLegacyTypes

    BlockLegacyTypes: BlockBasicTypes | "open"
    \ No newline at end of file +BlockLegacyTypes | banani

    Type alias BlockLegacyTypes

    BlockLegacyTypes: BlockBasicTypes | "open"
    \ No newline at end of file diff --git a/docs/types/BlockStateChangeTypes.html b/docs/types/BlockStateChangeTypes.html index 7b43626..448f578 100644 --- a/docs/types/BlockStateChangeTypes.html +++ b/docs/types/BlockStateChangeTypes.html @@ -1 +1 @@ -BlockStateChangeTypes | banani

    Type alias BlockStateChangeTypes

    BlockStateChangeTypes: "send" | "receive"
    \ No newline at end of file +BlockStateChangeTypes | banani

    Type alias BlockStateChangeTypes

    BlockStateChangeTypes: "send" | "receive"
    \ No newline at end of file diff --git a/docs/types/BlockSubtype.html b/docs/types/BlockSubtype.html index 5918506..ff57852 100644 --- a/docs/types/BlockSubtype.html +++ b/docs/types/BlockSubtype.html @@ -1 +1 @@ -BlockSubtype | banani

    Type alias BlockSubtype

    BlockSubtype: BlockBasicTypes | "epoch"
    \ No newline at end of file +BlockSubtype | banani

    Type alias BlockSubtype

    BlockSubtype: BlockBasicTypes | "epoch"
    \ No newline at end of file diff --git a/docs/types/Whole.html b/docs/types/Whole.html index 3f964b6..bbe4d37 100644 --- a/docs/types/Whole.html +++ b/docs/types/Whole.html @@ -1,2 +1,2 @@ Whole | banani

    Type alias Whole

    Whole: `${number}`

    Does NOT mean whole number, can be decimal like "4.2001". Use instead of regular number since those lose precision when decimal

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/types/WorkFunction.html b/docs/types/WorkFunction.html index 2b573d6..10f74a1 100644 --- a/docs/types/WorkFunction.html +++ b/docs/types/WorkFunction.html @@ -1 +1 @@ -WorkFunction | banani

    Type alias WorkFunction

    WorkFunction: ((block_hash) => Promise<string>)

    Type declaration

      • (block_hash): Promise<string>
      • Parameters

        Returns Promise<string>

    \ No newline at end of file +WorkFunction | banani

    Type alias WorkFunction

    WorkFunction: ((block_hash) => Promise<string>)

    Type declaration

      • (block_hash): Promise<string>
      • Parameters

        Returns Promise<string>

    \ No newline at end of file diff --git a/docs/variables/NANO_DECIMALS.html b/docs/variables/NANO_DECIMALS.html new file mode 100644 index 0000000..e1216ff --- /dev/null +++ b/docs/variables/NANO_DECIMALS.html @@ -0,0 +1,2 @@ +NANO_DECIMALS | banani

    Variable NANO_DECIMALSConst

    NANO_DECIMALS: number = 30

    Do rpc.DECIMALS = banani.NANO_DECIMALS if using Nano. Putting the wrong amount of decimals in may result in LOSS OF FUNDS.

    +
    \ No newline at end of file diff --git a/package.json b/package.json index 41c5154..53da83b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "banani", - "version": "1.0.5", + "version": "1.0.6", "description": "JS/TS library for the Banano cryptocurrency in the style of bananopie", "main": "main.js", "scripts": { diff --git a/wallet.ts b/wallet.ts index 6aebab5..8c071f5 100644 --- a/wallet.ts +++ b/wallet.ts @@ -89,7 +89,7 @@ export class Wallet { }; const s_block_hash = util.hash_block(block_ns); //block hash of the send block let work = undefined; - if (gen_work && this.work_function) work = await this.work_function(s_block_hash); + if (gen_work && this.work_function) work = await this.work_function(info.frontier); const signature = util.sign_block_hash(this.private_key, s_block_hash); const block = { ...block_ns, signature, work }; return await this.send_process(block, "send"); @@ -134,7 +134,7 @@ export class Wallet { }; const r_block_hash = util.hash_block(block_ns); //block hash of the receive block let work = undefined; - if (gen_work && this.work_function) work = await this.work_function(r_block_hash); + if (gen_work && this.work_function) work = await this.work_function(previous === "0".repeat(64) ? this.public_key : previous); const signature = util.sign_block_hash(this.private_key, r_block_hash); const block = { ...block_ns, signature, work }; return await this.send_process(block, "receive"); @@ -177,7 +177,7 @@ export class Wallet { }; const r_block_hash = util.hash_block(block_ns); //block hash of the receive block let work = undefined; - if (gen_work && this.work_function) work = await this.work_function(r_block_hash); + if (gen_work && this.work_function) work = await this.work_function(previous === "0".repeat(64) ? this.public_key : previous); const signature = util.sign_block_hash(this.private_key, r_block_hash); const block = { ...block_ns, signature, work }; await this.send_process(block, "receive"); @@ -204,7 +204,7 @@ export class Wallet { }; const c_block_hash = util.hash_block(block_ns); //block hash of the change block let work = undefined; - if (gen_work && this.work_function) work = await this.work_function(c_block_hash); + if (gen_work && this.work_function) work = await this.work_function(info.frontier); const signature = util.sign_block_hash(this.private_key, c_block_hash); const block = { ...block_ns, signature, work }; return await this.send_process(block, "change");