From 2b0dd01f24cf2a734840242820eae594221b6d77 Mon Sep 17 00:00:00 2001 From: stjet <49297268+stjet@users.noreply.github.com> Date: Sat, 20 Jul 2024 21:06:22 +0000 Subject: [PATCH] add private key account, fix rpcwithbackup --- banani-browser.js | 2 +- docs/assets/navigation.js | 2 +- docs/assets/search.js | 2 +- docs/classes/PrivateKeyAccount.html | 43 +++++++++++++++++++ docs/classes/RPC.html | 40 ++++++++--------- docs/classes/RPCWithBackup.html | 40 ++++++++--------- docs/classes/RPCWorkProvider.html | 6 +-- docs/classes/Wallet.html | 21 +++++---- docs/functions/base32_to_uint8array.html | 2 +- .../get_address_from_public_key.html | 2 +- docs/functions/get_private_key_from_seed.html | 2 +- .../get_public_key_from_address.html | 2 +- .../get_public_key_from_private_key.html | 2 +- docs/functions/hash_block.html | 2 +- docs/functions/hex_to_uint8array.html | 2 +- docs/functions/int_to_uint8array.html | 2 +- docs/functions/raw_to_whole.html | 2 +- docs/functions/sign_block_hash.html | 2 +- docs/functions/sign_message.html | 2 +- docs/functions/uint8array_to_base32.html | 2 +- docs/functions/uint8array_to_hex.html | 2 +- docs/functions/utf8_to_uint8array.html | 2 +- docs/functions/verify_block_hash.html | 2 +- docs/functions/whole_to_raw.html | 2 +- docs/hierarchy.html | 2 +- docs/interfaces/AccountBalanceRPC.html | 4 +- docs/interfaces/AccountHistoryBlock.html | 4 +- docs/interfaces/AccountHistoryRPC.html | 4 +- docs/interfaces/AccountHistoryRawBlock.html | 4 +- docs/interfaces/AccountHistoryRawRPC.html | 4 +- docs/interfaces/AccountInfoRPC.html | 4 +- docs/interfaces/AccountReceivableRPC.html | 4 +- .../AccountReceivableSourceRPC.html | 4 +- .../AccountReceivableThresholdRPC.html | 4 +- docs/interfaces/AccountRepresentativeRPC.html | 4 +- docs/interfaces/AccountWeightRPC.html | 4 +- docs/interfaces/AccountsBalancesRPC.html | 4 +- .../AccountsRepresentativesRPC.html | 4 +- docs/interfaces/Block.html | 4 +- docs/interfaces/BlockCountRPC.html | 4 +- docs/interfaces/BlockInfoRPC.html | 4 +- docs/interfaces/BlockNoSignature.html | 4 +- docs/interfaces/BlocksInfoRPC.html | 4 +- docs/interfaces/BlocksRPC.html | 4 +- docs/interfaces/DelegatorsCountRPC.html | 4 +- docs/interfaces/DelegatorsRPC.html | 4 +- docs/interfaces/RPCInterface.html | 4 +- docs/interfaces/RepresentativesOnlineRPC.html | 4 +- .../RepresentativesOnlineWeightRPC.html | 4 +- docs/interfaces/RepresentativesRPC.html | 4 +- docs/interfaces/WorkProvider.html | 4 +- docs/modules.html | 3 +- docs/types/Address.html | 2 +- docs/types/AddressPrefix.html | 2 +- docs/types/BlockAllTypes.html | 2 +- docs/types/BlockBasicTypes.html | 2 +- docs/types/BlockHash.html | 2 +- docs/types/BlockLegacyTypes.html | 2 +- docs/types/BlockStateChangeTypes.html | 2 +- docs/types/BlockSubtype.html | 2 +- docs/types/Whole.html | 2 +- docs/types/WorkFunction.html | 2 +- node_test/index.js | 11 +++-- node_test/package-lock.json | 8 ++-- node_test/package.json | 2 +- package.json | 2 +- rpc.ts | 1 + wallet.ts | 21 +++++++-- 68 files changed, 212 insertions(+), 150 deletions(-) create mode 100644 docs/classes/PrivateKeyAccount.html diff --git a/banani-browser.js b/banani-browser.js index 46c7822..832117b 100644 --- a/banani-browser.js +++ b/banani-browser.js @@ -1,4 +1,4 @@ -(()=>{var ur=Object.create;var Le=Object.defineProperty;var lr=Object.getOwnPropertyDescriptor;var yr=Object.getOwnPropertyNames;var Er=Object.getPrototypeOf,wr=Object.prototype.hasOwnProperty;var c=(e,n)=>Le(e,"name",{value:n,configurable:!0}),tn=(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 yr(n))!wr.call(e,g)&&g!==t&&Le(e,g,{get:()=>n[g],enumerable:!(i=lr(n,g))||i.enumerable});return e};var nn=(e,n,t)=>(t=e!=null?ur(Er(e)):{},Br(n||!e||!e.__esModule?Le(t,"default",{value:e,enumerable:!0}):t,e));var lt=M((Di,An)=>{An.exports=rn;var Ve=class extends Error{static{c(this,"AssertionError")}};Ve.prototype.name="AssertionError";function rn(e,n){if(!e){var t=new Ve(n);throw Error.captureStackTrace&&Error.captureStackTrace(t,rn),t}}c(rn,"assert")});var an=M((mi,In)=>{function on(e){return e.length}c(on,"byteLength");function xr(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}c(cn,"byteLength");function dr(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}c(dr,"toString");function br(e,n,t=0,i=cn(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}c(br,"write");gn.exports={byteLength:cn,toString:dr,write:br}});var un=M((Ki,Cn)=>{function fn(e){return e.length>>>1}c(fn,"byteLength");function _r(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}c(hn,"hexValue")});var yn=M((Yi,ln)=>{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}c(yt,"byteLength");var Et;if(typeof TextDecoder<"u"){let e=new TextDecoder;Et=c(function(t){return e.decode(t)},"toString")}else Et=c(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");ln.exports={byteLength:yt,toString:Et,write:wt}});var Bn=M((Hi,wn)=>{function En(e){return e.length*2}c(En,"byteLength");function Sr(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}c(Dr,"write");wn.exports={byteLength:En,toString:Sr,write:Dr}});var _n=M((xt,bn)=>{var Ur=an(),mr=sn(),vr=un(),Fr=yn(),Pr=Bn(),Ge=new Uint8Array(Uint16Array.of(255).buffer)[0]===255;function xe(e){switch(e){case"ascii":return Ur;case"base64":return mr;case"hex":return vr;case"utf8":case"utf-8":case void 0:return Fr;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Pr;default:throw new Error(`Unknown encoding: ${e}`)}}c(xe,"codecFor");function xn(e){return e instanceof Uint8Array}c(xn,"isBuffer");function Kr(e){try{return xe(e),!0}catch{return!1}}c(Kr,"isEncoding");function kr(e,n,t){let i=new Uint8Array(e);return n!==void 0&&xt.fill(i,n,0,i.byteLength,t),i}c(kr,"alloc");function Yr(e){return new Uint8Array(e)}c(Yr,"allocUnsafe");function Rr(e){return new Uint8Array(e)}c(Rr,"allocUnsafeSlow");function Hr(e,n){return xe(n).byteLength(e)}c(Hr,"byteLength");function Lr(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}c(Mr,"concat");function Vr(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 gi=c((e,n)=>c(function(){return n||(0,e[Object.keys(e)[0]])((n={exports:{}}).exports,n),n.exports},"__require"),"__commonJS"),si=(()=>{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}})(),hi=gi({"wasm-binary:./blake2b.wat"(e,n){n.exports=si("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")}}),fi=hi(),Ci=WebAssembly.compile(fi);pn.exports=async e=>(await WebAssembly.instantiate(await Ci,e)).exports});var kn=M((Oi,G)=>{var K=lt(),ui=_n(),J=null,Dn=typeof WebAssembly<"u"&&Sn()().then(e=>{J=e}),O=64,Ne=[];G.exports=v;var Un=G.exports.BYTES_MIN=16,mn=G.exports.BYTES_MAX=64,Ni=G.exports.BYTES=32,vn=G.exports.KEYBYTES_MIN=16,Fn=G.exports.KEYBYTES_MAX=64,Ti=G.exports.KEYBYTES=32,Pn=G.exports.SALTBYTES=16,Kn=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>=Un,"digestLength must be at least "+Un+", was given "+e),K(e<=mn,"digestLength must be at most "+mn+", was given "+e),n!=null&&(K(n instanceof Uint8Array,"key must be Uint8Array or Buffer"),K(n.length>=vn,"key must be at least "+vn+", was given "+n.length),K(n.length<=Fn,"key must be at least "+Fn+", was given "+n.length)),t!=null&&(K(t instanceof Uint8Array,"salt must be Uint8Array or Buffer"),K(t.length===Pn,"salt must be exactly "+Pn+", was given "+t.length)),i!=null&&(K(i instanceof Uint8Array,"personal must be Uint8Array or Buffer"),K(i.length===Kn,"personal must be exactly "+Kn+", 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)}c(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 ui.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 li(){}c(li,"noop")});var Qt=M((qi,F)=>{var Y=lt(),de=kn();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}c(Te,"ADD64AA");function Yn(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}c(Yn,"ADD64AC");function Nn(e,n){return e[n]^e[n+1]<<8^e[n+2]<<16^e[n+3]<<24}c(Nn,"B2B_GET32");function q(e,n,t,i,g,f){var y=Qe[g],w=Qe[g+1],x=Qe[f],b=Qe[f+1];Te(B,e,n),Yn(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),Yn(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}c(q,"B2B_G");var Tn=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),yi=[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(yi.map(function(e){return e*2})),B=new Uint32Array(32),Qe=new Uint32Array(32);function On(e,n){var t=0;for(t=0;t<16;t++)B[t]=e.h[t],B[t+16]=Tn[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]=Nn(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]}c(On,"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 g=0;g<16;g++)this.h[g]=Tn[g]^Nn(W,g*4);n&&(Jn(this,n),this.c=128)}c(ge,"Blake2b");ge.prototype.update=function(e){return Y(e instanceof Uint8Array,"input must be Uint8Array or Buffer"),Jn(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"),Ei(this,n),e==="hex"?wi(n):n};ge.prototype.final=ge.prototype.digest;ge.ready=function(e){de.ready(function(){e()})};function Jn(e,n){for(var t=0;t>2]>>8*(t&3);return n}c(Ei,"blake2bFinal");function wi(e){for(var n="",t=0;t=Rn,"outlen must be at least "+Rn+", was given "+n),Y(n<=Hn,"outlen must be at most "+Hn+", was given "+n),t!=null&&(Y(t instanceof Uint8Array,"key must be Uint8Array or Buffer"),Y(t.length>=Ln,"key must be at least "+Ln+", was given "+t.length),Y(t.length<=Mn,"key must be at most "+Mn+", was given "+t.length)),i!=null&&(Y(i instanceof Uint8Array,"salt must be Uint8Array or Buffer"),Y(i.length===Vn,"salt must be exactly "+Vn+", was given "+i.length)),g!=null&&(Y(g instanceof Uint8Array,"personal must be Uint8Array or Buffer"),Y(g.length===Gn,"personal must be exactly "+Gn+", was given "+g.length))),new xi(n,t,i,g)},"createHash");F.exports.ready=function(e){de.ready(function(){e()})};F.exports.WASM_SUPPORTED=de.SUPPORTED;F.exports.WASM_LOADED=!1;var Rn=F.exports.BYTES_MIN=16,Hn=F.exports.BYTES_MAX=64,ji=F.exports.BYTES=32,Ln=F.exports.KEYBYTES_MIN=16,Mn=F.exports.KEYBYTES_MAX=64,Xi=F.exports.KEYBYTES=32,Vn=F.exports.SALTBYTES=16,Gn=F.exports.PERSONALBYTES=16;de.ready(function(e){e||(F.exports.WASM_LOADED=!0,F.exports=de)})});var jn=M((zi,Oe)=>{(function(e){"use strict";let n=Qt();var t=c(function(r,o){this.hi=r|0,this.lo=o|0},"u64"),i=c(function(r){var o,A=new Float64Array(16);if(r)for(o=0;o>>32-o}c(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}c(re,"ld32");function Pt(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)}c(Pt,"dl64");function We(r,o,A){var I;for(I=0;I<4;I++)r[o+I]=A&255,A>>>=8}c(We,"st32");function Kt(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}c(Kt,"ts64");function ze(r,o,A,I,a){var s,u=0;for(s=0;s>>8)-1}c(ze,"vn");function kt(r,o,A,I){return ze(r,o,A,I,16)}c(kt,"crypto_verify_16");function Ze(r,o,A,I){return ze(r,o,A,I,32)}c(Ze,"crypto_verify_32");function Yt(r,o,A,I,a){var s=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++)s[4*E+(E+d)%4]=h[d]}for(d=0;d<16;d++)u[d]=s[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++)We(r,4*C,u[5*C]),We(r,16+4*C,u[6+C])}else for(C=0;C<16;C++)We(r,4*C,u[C]+l[C]|0)}c(Yt,"core");function Rt(r,o,A,I){return Yt(r,o,A,I,!1),0}c(Rt,"crypto_core_salsa20");function Ue(r,o,A,I){return Yt(r,o,A,I,!0),0}c(Ue,"crypto_core_hsalsa20");var he=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function $e(r,o,A,I,a,s,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]=s[E];for(;a>=64;){for(Rt(h,l,u,he),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(Rt(h,l,u,he),E=0;E>>=8}c(tt,"add1305");var $n=new Uint32Array([5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252]);function nt(r,o,A,I,a,s){var u,l,h,C,E=new Uint32Array(17),d=new Uint32Array(17),p=new Uint32Array(17),L=new Uint32Array(17),ae=new Uint32Array(17);for(h=0;h<17;h++)d[h]=p[h]=0;for(h=0;h<16;h++)d[h]=s[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++)ae[h]=p[h];for(tt(p,$n),u=-(p[16]>>>7)|0,h=0;h<17;h++)p[h]^=u&(ae[h]^p[h]);for(h=0;h<16;h++)L[h]=s[h+16];for(L[16]=0,tt(p,L),h=0;h<16;h++)r[o+h]=p[h];return 0}c(nt,"crypto_onetimeauth");function Mt(r,o,A,I,a,s){var u=new Uint8Array(16);return nt(u,0,A,I,a,s),kt(r,o,u,0)}c(Mt,"crypto_onetimeauth_verify");function rt(r,o,A,I,a){var s;if(A<32)return-1;for(et(r,0,o,0,A,I,a),nt(r,16,r,32,A-32,r),s=0;s<16;s++)r[s]=0;return 0}c(rt,"crypto_secretbox");function it(r,o,A,I,a){var s,u=new Uint8Array(32);if(A<32||(Lt(u,0,32,I,a),Mt(o,16,o,32,A-32,u)!==0))return-1;for(et(r,0,o,0,A,I,a),s=0;s<32;s++)r[s]=0;return 0}c(it,"crypto_secretbox_open");function N(r,o){var A;for(A=0;A<16;A++)r[A]=o[A]|0}c(N,"set25519");function fe(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}c(fe,"car25519");function ie(r,o,A){for(var I,a=~(A-1),s=0;s<16;s++)I=a&(r[s]^o[s]),r[s]^=I,o[s]^=I}c(ie,"sel25519");function Ae(r,o){var A,I,a,s=i(),u=i();for(A=0;A<16;A++)u[A]=o[A];for(fe(u),fe(u),fe(u),I=0;I<2;I++){for(s[0]=u[0]-65517,A=1;A<15;A++)s[A]=u[A]-65535-(s[A-1]>>16&1),s[A-1]&=65535;s[15]=u[15]-32767-(s[14]>>16&1),a=s[15]>>16&1,s[14]&=65535,ie(u,s,1-a)}for(A=0;A<16;A++)r[2*A]=u[A]&255,r[2*A+1]=u[A]>>8}c(Ae,"pack25519");function Vt(r,o){var A=new Uint8Array(32),I=new Uint8Array(32);return Ae(A,r),Ae(I,o),Ze(A,0,I,0)}c(Vt,"neq25519");function Gt(r){var o=new Uint8Array(32);return Ae(o,r),o[0]&1}c(Gt,"par25519");function At(r,o){var A;for(A=0;A<16;A++)r[A]=o[2*A]+(o[2*A+1]<<8);r[15]&=32767}c(At,"unpack25519");function R(r,o,A){var I;for(I=0;I<16;I++)r[I]=o[I]+A[I]|0}c(R,"A");function H(r,o,A){var I;for(I=0;I<16;I++)r[I]=o[I]-A[I]|0}c(H,"Z");function Q(r,o,A){var I,a,s=new Float64Array(31);for(I=0;I<31;I++)s[I]=0;for(I=0;I<16;I++)for(a=0;a<16;a++)s[I+a]+=o[I]*A[a];for(I=0;I<15;I++)s[I]+=38*s[I+16];for(I=0;I<16;I++)r[I]=s[I];fe(r),fe(r)}c(Q,"M");function k(r,o){Q(r,o,o)}c(k,"S");function Nt(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]}c(Nt,"inv25519");function Tt(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]}c(Tt,"pow2523");function me(r,o,A){var I=new Uint8Array(32),a=new Float64Array(80),s,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,At(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)s=I[u>>>3]>>>(u&7)&1,ie(l,h,s),ie(C,E,s),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,s),ie(C,E,s);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),ae=a.subarray(16);return Nt(L,L),Q(ae,ae,L),Ae(r,ae),0}c(me,"crypto_scalarmult");function ve(r,o){return me(r,o,y)}c(ve,"crypto_scalarmult_base");function Ot(r,o){return g(o,32),ve(r,o)}c(Ot,"crypto_box_keypair");function Fe(r,o,A){var I=new Uint8Array(32);return me(I,A,o),Ue(r,f,I,he)}c(Fe,"crypto_box_beforenm");var Jt=rt,er=it;function tr(r,o,A,I,a,s){var u=new Uint8Array(32);return Fe(u,a,s),Jt(r,o,A,I,u)}c(tr,"crypto_box");function nr(r,o,A,I,a,s){var u=new Uint8Array(32);return Fe(u,a,s),er(r,o,A,I,u)}c(nr,"crypto_box_open");function Ce(){var r=0,o=0,A=0,I=0,a=65535,s,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)}c(Ce,"add64");function jt(r,o){return new t(r.hi>>>o,r.lo>>>o|r.hi<<32-o)}c(jt,"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]=Pt(o,8*h+E);for(h=0;h<80;h++){for(C=0;C<8;C++)a[C]=s[C];for(l=Ce(s[7],or(s[4]),rr(s[4],s[5],s[6]),cr[h],u[h%16]),a[7]=Ce(l,Ar(s[0]),ir(s[0],s[1],s[2])),a[3]=Ce(a[3],l),C=0;C<8;C++)s[(C+1)%8]=a[C];if(h%16===15)for(C=0;C<16;C++)u[C]=Ce(u[C],u[(C+9)%16],Ir(u[(C+1)%16]),ar(u[(C+14)%16]))}for(h=0;h<8;h++)s[h]=Ce(s[h],I[h]),I[h]=s[h];E+=128,A-=128}for(h=0;h<8;h++)Kt(r,8*h,I[h]);return A}c(Xt,"crypto_hashblocks");let ue=c((r,o)=>n(o).update(r).digest(),"crypto_hash_blake2b");var gr=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 ot(r,o,A){var I=new Uint8Array(64),a=new Uint8Array(256),s,u=A;for(s=0;s<64;s++)I[s]=gr[s];for(Xt(I,o,A),A%=128,s=0;s<256;s++)a[s]=0;for(s=0;s=0;--a)I=A[a/8|0]>>(a&7)&1,qt(r,o,I),Ke(o,r),Ke(r,r),qt(r,o,I)}c(It,"scalarmult");function le(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)}c(le,"scalarbase");function at(r,o,A){var I=new Uint8Array(64),a=[i(),i(),i(),i()],s;A||g(o,32);I=ue(o,64),I[0]&=248,I[31]&=127,I[31]|=64,le(a,I),ke(r,a);return 0}c(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 ct(r,o){var A,I,a,s;for(I=63;I>=32;--I){for(A=0,a=I-32,s=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}c(ct,"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;ct(r,o)}c(gt,"reduce");function Wt(r,o,A,I){var a=new Uint8Array(64),s=new Uint8Array(64),u=new Uint8Array(64),l,h,C=new Float64Array(64),E=[i(),i(),i(),i()];let d=en(I);a=ue(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)}c(sr,"unpackneg");function st(r,o,A,I){var a,s=new Uint8Array(32),u=new Uint8Array(64),l=[i(),i(),i(),i()],h=[i(),i(),i(),i()];if(A<64||sr(h,I))return-1;for(a=0;a=0};function en(r){let o=new Uint8Array(64),A=[i(),i(),i(),i()],I,a=new Uint8Array(32);return o=ue(r,64),o[0]&=248,o[31]&=127,o[31]|=64,le(A,o),ke(a,A),a}c(en,"derivePublicFromSecret"),e.sign.keyPair=function(){var r=new Uint8Array(z),o=new Uint8Array(Ie);return at(r,o),{publicKey:r,secretKey:o}},e.sign.keyPair.fromSecretKey=function(r){if(P(r),r.length!==Ie)throw new Error("bad secret key size");var o=new Uint8Array(z);return o=en(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(Ie),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=Ie,e.sign.seedLength=Ct,e.sign.signatureLength=T,e.hash=function(r){P(r);var o=new Uint8Array(ut);return ot(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,s=new Uint8Array(I);for(a=0;aWn,get_address_from_public_key:()=>_e,get_private_key_from_seed:()=>_t,get_public_key_from_address:()=>pe,get_public_key_from_private_key:()=>je,hash_block:()=>te,hex_to_uint8array:()=>D,int_to_uint8array:()=>Xn,raw_to_whole:()=>bt,sign_block_hash:()=>ne,sign_message:()=>pt,uint8array_to_base32:()=>dt,uint8array_to_hex:()=>ee,utf8_to_uint8array:()=>zn,verify_block_hash:()=>pi,whole_to_raw:()=>De});var Je=nn(jn()),Se=nn(Qt());var Qi="0000000000000000000000000000000000000000000000000000000000000006",di="62616E616E6F6D73672D",be=["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}c(Xn,"int_to_uint8array");var qn=["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+=qn[y]}return n}c(dt,"uint8array_to_base32");function bi(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}c(bi,"int_to_binary");function _i(e){let n=0;for(let t=0;tbi(qn.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}c(De,"whole_to_raw");function bt(e,n=Zn){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:()=>St});var qe=class{constructor(n,t=!1){this.DECIMALS=void 0;this.debug=!1;this.rpc_url=n,this.use_pending=t}static{c(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?"true":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?"true":void 0,head:g,offset:f?`${f}`:void 0,reverse:y?"true":void 0,account_filter:w})}async get_account_info(n,t,i,g,f){return await this.call({action:"account_info",account:n,representative:i?"true":void 0,weight:g?"true":void 0,pending:f?"true":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?De(i,this.DECIMALS).toString():void 0,source:g?"true":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})}},St=class extends qe{static{c(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}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 mt={};Me(mt,{Wallet:()=>Ut});var Ut=class e{constructor(n,t,i=0,g=!1,f){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=f}static{c(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 _t(this.seed,this.index)}get public_key(){return je(this.private_key)}get address(){return _e(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=De(t,this.rpc.DECIMALS),w=f??await this.get_account_info(void 0,!0),x=pe(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 se=ne(this.private_key,m),X={...S,signature:se,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,bt(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 se=ne(this.private_key,m),X={...S,signature:se,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 pt(this.private_key,n)}};var Ft={};Me(Ft,{RPCWorkProvider:()=>vt});var vt=class{constructor(n){this.extra_payload={};this.rpc=n}static{c(this,"RPCWorkProvider")}async request_work(n){return(await this.rpc.call({action:"work_generate",hash:n,...this.extra_payload})).work}};window.banani={...Xe,...Dt,...mt,...Ft};})(); +(()=>{var lr=Object.create;var Le=Object.defineProperty;var yr=Object.getOwnPropertyDescriptor;var Er=Object.getOwnPropertyNames;var wr=Object.getPrototypeOf,Br=Object.prototype.hasOwnProperty;var c=(e,n)=>Le(e,"name",{value:n,configurable:!0}),nn=(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})},xr=(e,n,t,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let g of Er(n))!Br.call(e,g)&&g!==t&&Le(e,g,{get:()=>n[g],enumerable:!(i=yr(n,g))||i.enumerable});return e};var rn=(e,n,t)=>(t=e!=null?lr(wr(e)):{},xr(n||!e||!e.__esModule?Le(t,"default",{value:e,enumerable:!0}):t,e));var yt=M((Ui,on)=>{on.exports=An;var Ve=class extends Error{static{c(this,"AssertionError")}};Ve.prototype.name="AssertionError";function An(e,n){if(!e){var t=new Ve(n);throw Error.captureStackTrace&&Error.captureStackTrace(t,An),t}}c(An,"assert")});var cn=M((vi,an)=>{function In(e){return e.length}c(In,"byteLength");function Qr(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}c(gn,"byteLength");function br(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}c(br,"toString");function _r(e,n,t=0,i=gn(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}c(_r,"write");sn.exports={byteLength:gn,toString:br,write:_r}});var ln=M((ki,un)=>{function Cn(e){return e.length>>>1}c(Cn,"byteLength");function pr(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}c(fn,"hexValue")});var En=M((Ri,yn)=>{function Et(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}c(Et,"byteLength");var wt;if(typeof TextDecoder<"u"){let e=new TextDecoder;wt=c(function(t){return e.decode(t)},"toString")}else wt=c(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");yn.exports={byteLength:Et,toString:wt,write:Bt}});var xn=M((Li,Bn)=>{function wn(e){return e.length*2}c(wn,"byteLength");function Dr(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}c(Ur,"write");Bn.exports={byteLength:wn,toString:Dr,write:Ur}});var pn=M((Qt,_n)=>{var mr=cn(),vr=hn(),Fr=ln(),Pr=En(),Kr=xn(),Ge=new Uint8Array(Uint16Array.of(255).buffer)[0]===255;function xe(e){switch(e){case"ascii":return mr;case"base64":return vr;case"hex":return Fr;case"utf8":case"utf-8":case void 0:return Pr;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Kr;default:throw new Error(`Unknown encoding: ${e}`)}}c(xe,"codecFor");function Qn(e){return e instanceof Uint8Array}c(Qn,"isBuffer");function kr(e){try{return xe(e),!0}catch{return!1}}c(kr,"isEncoding");function Yr(e,n,t){let i=new Uint8Array(e);return n!==void 0&&Qt.fill(i,n,0,i.byteLength,t),i}c(Yr,"alloc");function Rr(e){return new Uint8Array(e)}c(Rr,"allocUnsafe");function Hr(e){return new Uint8Array(e)}c(Hr,"allocUnsafeSlow");function Lr(e,n){return xe(n).byteLength(e)}c(Lr,"byteLength");function Mr(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}c(Vr,"concat");function Gr(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=xt(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 si=c((e,n)=>c(function(){return n||(0,e[Object.keys(e)[0]])((n={exports:{}}).exports,n),n.exports},"__require"),"__commonJS"),hi=(()=>{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}})(),fi=si({"wasm-binary:./blake2b.wat"(e,n){n.exports=hi("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")}}),Ci=fi(),ui=WebAssembly.compile(Ci);Sn.exports=async e=>(await WebAssembly.instantiate(await ui,e)).exports});var Yn=M((Ji,G)=>{var K=yt(),li=pn(),J=null,Un=typeof WebAssembly<"u"&&Dn()().then(e=>{J=e}),O=64,Ne=[];G.exports=v;var mn=G.exports.BYTES_MIN=16,vn=G.exports.BYTES_MAX=64,Ti=G.exports.BYTES=32,Fn=G.exports.KEYBYTES_MIN=16,Pn=G.exports.KEYBYTES_MAX=64,Oi=G.exports.KEYBYTES=32,Kn=G.exports.SALTBYTES=16,kn=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>=mn,"digestLength must be at least "+mn+", was given "+e),K(e<=vn,"digestLength must be at most "+vn+", was given "+e),n!=null&&(K(n instanceof Uint8Array,"key must be Uint8Array or Buffer"),K(n.length>=Fn,"key must be at least "+Fn+", was given "+n.length),K(n.length<=Pn,"key must be at least "+Pn+", was given "+n.length)),t!=null&&(K(t instanceof Uint8Array,"salt must be Uint8Array or Buffer"),K(t.length===Kn,"salt must be exactly "+Kn+", was given "+t.length)),i!=null&&(K(i instanceof Uint8Array,"personal must be Uint8Array or Buffer"),K(i.length===kn,"personal must be exactly "+kn+", 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)}c(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 li.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 yi(){}c(yi,"noop")});var dt=M((Wi,F)=>{var Y=yt(),de=Yn();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}c(Te,"ADD64AA");function Rn(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}c(Rn,"ADD64AC");function Tn(e,n){return e[n]^e[n+1]<<8^e[n+2]<<16^e[n+3]<<24}c(Tn,"B2B_GET32");function q(e,n,t,i,g,f){var y=Qe[g],w=Qe[g+1],x=Qe[f],b=Qe[f+1];Te(B,e,n),Rn(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),Rn(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}c(q,"B2B_G");var On=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),Ei=[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(Ei.map(function(e){return e*2})),B=new Uint32Array(32),Qe=new Uint32Array(32);function Jn(e,n){var t=0;for(t=0;t<16;t++)B[t]=e.h[t],B[t+16]=On[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]=Tn(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]}c(Jn,"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 g=0;g<16;g++)this.h[g]=On[g]^Tn(W,g*4);n&&(jn(this,n),this.c=128)}c(ge,"Blake2b");ge.prototype.update=function(e){return Y(e instanceof Uint8Array,"input must be Uint8Array or Buffer"),jn(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"),wi(this,n),e==="hex"?Bi(n):n};ge.prototype.final=ge.prototype.digest;ge.ready=function(e){de.ready(function(){e()})};function jn(e,n){for(var t=0;t>2]>>8*(t&3);return n}c(wi,"blake2bFinal");function Bi(e){for(var n="",t=0;t=Hn,"outlen must be at least "+Hn+", was given "+n),Y(n<=Ln,"outlen must be at most "+Ln+", was given "+n),t!=null&&(Y(t instanceof Uint8Array,"key must be Uint8Array or Buffer"),Y(t.length>=Mn,"key must be at least "+Mn+", was given "+t.length),Y(t.length<=Vn,"key must be at most "+Vn+", was given "+t.length)),i!=null&&(Y(i instanceof Uint8Array,"salt must be Uint8Array or Buffer"),Y(i.length===Gn,"salt must be exactly "+Gn+", was given "+i.length)),g!=null&&(Y(g instanceof Uint8Array,"personal must be Uint8Array or Buffer"),Y(g.length===Nn,"personal must be exactly "+Nn+", was given "+g.length))),new Qi(n,t,i,g)},"createHash");F.exports.ready=function(e){de.ready(function(){e()})};F.exports.WASM_SUPPORTED=de.SUPPORTED;F.exports.WASM_LOADED=!1;var Hn=F.exports.BYTES_MIN=16,Ln=F.exports.BYTES_MAX=64,Xi=F.exports.BYTES=32,Mn=F.exports.KEYBYTES_MIN=16,Vn=F.exports.KEYBYTES_MAX=64,qi=F.exports.KEYBYTES=32,Gn=F.exports.SALTBYTES=16,Nn=F.exports.PERSONALBYTES=16;de.ready(function(e){e||(F.exports.WASM_LOADED=!0,F.exports=de)})});var Xn=M((Zi,Oe)=>{(function(e){"use strict";let n=dt();var t=c(function(r,o){this.hi=r|0,this.lo=o|0},"u64"),i=c(function(r){var o,A=new Float64Array(16);if(r)for(o=0;o>>32-o}c(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}c(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)}c(Kt,"dl64");function ze(r,o,A){var I;for(I=0;I<4;I++)r[o+I]=A&255,A>>>=8}c(ze,"st32");function kt(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}c(kt,"ts64");function Ze(r,o,A,I,a){var s,u=0;for(s=0;s>>8)-1}c(Ze,"vn");function Yt(r,o,A,I){return Ze(r,o,A,I,16)}c(Yt,"crypto_verify_16");function $e(r,o,A,I){return Ze(r,o,A,I,32)}c($e,"crypto_verify_32");function Rt(r,o,A,I,a){var s=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++)s[4*E+(E+d)%4]=h[d]}for(d=0;d<16;d++)u[d]=s[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)}c(Rt,"core");function Ht(r,o,A,I){return Rt(r,o,A,I,!1),0}c(Ht,"crypto_core_salsa20");function Ue(r,o,A,I){return Rt(r,o,A,I,!0),0}c(Ue,"crypto_core_hsalsa20");var he=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,s,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]=s[E];for(;a>=64;){for(Ht(h,l,u,he),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(Ht(h,l,u,he),E=0;E>>=8}c(nt,"add1305");var er=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,s){var u,l,h,C,E=new Uint32Array(17),d=new Uint32Array(17),p=new Uint32Array(17),L=new Uint32Array(17),ae=new Uint32Array(17);for(h=0;h<17;h++)d[h]=p[h]=0;for(h=0;h<16;h++)d[h]=s[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++)ae[h]=p[h];for(nt(p,er),u=-(p[16]>>>7)|0,h=0;h<17;h++)p[h]^=u&(ae[h]^p[h]);for(h=0;h<16;h++)L[h]=s[h+16];for(L[16]=0,nt(p,L),h=0;h<16;h++)r[o+h]=p[h];return 0}c(rt,"crypto_onetimeauth");function Vt(r,o,A,I,a,s){var u=new Uint8Array(16);return rt(u,0,A,I,a,s),Yt(r,o,u,0)}c(Vt,"crypto_onetimeauth_verify");function it(r,o,A,I,a){var s;if(A<32)return-1;for(tt(r,0,o,0,A,I,a),rt(r,16,r,32,A-32,r),s=0;s<16;s++)r[s]=0;return 0}c(it,"crypto_secretbox");function At(r,o,A,I,a){var s,u=new Uint8Array(32);if(A<32||(Mt(u,0,32,I,a),Vt(o,16,o,32,A-32,u)!==0))return-1;for(tt(r,0,o,0,A,I,a),s=0;s<32;s++)r[s]=0;return 0}c(At,"crypto_secretbox_open");function N(r,o){var A;for(A=0;A<16;A++)r[A]=o[A]|0}c(N,"set25519");function fe(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}c(fe,"car25519");function ie(r,o,A){for(var I,a=~(A-1),s=0;s<16;s++)I=a&(r[s]^o[s]),r[s]^=I,o[s]^=I}c(ie,"sel25519");function Ae(r,o){var A,I,a,s=i(),u=i();for(A=0;A<16;A++)u[A]=o[A];for(fe(u),fe(u),fe(u),I=0;I<2;I++){for(s[0]=u[0]-65517,A=1;A<15;A++)s[A]=u[A]-65535-(s[A-1]>>16&1),s[A-1]&=65535;s[15]=u[15]-32767-(s[14]>>16&1),a=s[15]>>16&1,s[14]&=65535,ie(u,s,1-a)}for(A=0;A<16;A++)r[2*A]=u[A]&255,r[2*A+1]=u[A]>>8}c(Ae,"pack25519");function Gt(r,o){var A=new Uint8Array(32),I=new Uint8Array(32);return Ae(A,r),Ae(I,o),$e(A,0,I,0)}c(Gt,"neq25519");function Nt(r){var o=new Uint8Array(32);return Ae(o,r),o[0]&1}c(Nt,"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}c(ot,"unpack25519");function R(r,o,A){var I;for(I=0;I<16;I++)r[I]=o[I]+A[I]|0}c(R,"A");function H(r,o,A){var I;for(I=0;I<16;I++)r[I]=o[I]-A[I]|0}c(H,"Z");function Q(r,o,A){var I,a,s=new Float64Array(31);for(I=0;I<31;I++)s[I]=0;for(I=0;I<16;I++)for(a=0;a<16;a++)s[I+a]+=o[I]*A[a];for(I=0;I<15;I++)s[I]+=38*s[I+16];for(I=0;I<16;I++)r[I]=s[I];fe(r),fe(r)}c(Q,"M");function k(r,o){Q(r,o,o)}c(k,"S");function Tt(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]}c(Tt,"inv25519");function Ot(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]}c(Ot,"pow2523");function me(r,o,A){var I=new Uint8Array(32),a=new Float64Array(80),s,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)s=I[u>>>3]>>>(u&7)&1,ie(l,h,s),ie(C,E,s),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,s),ie(C,E,s);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),ae=a.subarray(16);return Tt(L,L),Q(ae,ae,L),Ae(r,ae),0}c(me,"crypto_scalarmult");function ve(r,o){return me(r,o,y)}c(ve,"crypto_scalarmult_base");function Jt(r,o){return g(o,32),ve(r,o)}c(Jt,"crypto_box_keypair");function Fe(r,o,A){var I=new Uint8Array(32);return me(I,A,o),Ue(r,f,I,he)}c(Fe,"crypto_box_beforenm");var jt=it,tr=At;function nr(r,o,A,I,a,s){var u=new Uint8Array(32);return Fe(u,a,s),jt(r,o,A,I,u)}c(nr,"crypto_box");function rr(r,o,A,I,a,s){var u=new Uint8Array(32);return Fe(u,a,s),tr(r,o,A,I,u)}c(rr,"crypto_box_open");function Ce(){var r=0,o=0,A=0,I=0,a=65535,s,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)}c(Ce,"add64");function Xt(r,o){return new t(r.hi>>>o,r.lo>>>o|r.hi<<32-o)}c(Xt,"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]=s[C];for(l=Ce(s[7],Ir(s[4]),ir(s[4],s[5],s[6]),gr[h],u[h%16]),a[7]=Ce(l,or(s[0]),Ar(s[0],s[1],s[2])),a[3]=Ce(a[3],l),C=0;C<8;C++)s[(C+1)%8]=a[C];if(h%16===15)for(C=0;C<16;C++)u[C]=Ce(u[C],u[(C+9)%16],ar(u[(C+1)%16]),cr(u[(C+14)%16]))}for(h=0;h<8;h++)s[h]=Ce(s[h],I[h]),I[h]=s[h];E+=128,A-=128}for(h=0;h<8;h++)kt(r,8*h,I[h]);return A}c(qt,"crypto_hashblocks");let ue=c((r,o)=>n(o).update(r).digest(),"crypto_hash_blake2b");var sr=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 It(r,o,A){var I=new Uint8Array(64),a=new Uint8Array(256),s,u=A;for(s=0;s<64;s++)I[s]=sr[s];for(qt(I,o,A),A%=128,s=0;s<256;s++)a[s]=0;for(s=0;s=0;--a)I=A[a/8|0]>>(a&7)&1,Wt(r,o,I),Ke(o,r),Ke(r,r),Wt(r,o,I)}c(at,"scalarmult");function le(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),at(r,A,o)}c(le,"scalarbase");function ct(r,o,A){var I=new Uint8Array(64),a=[i(),i(),i(),i()],s;A||g(o,32);I=ue(o,64),I[0]&=248,I[31]&=127,I[31]|=64,le(a,I),ke(r,a);return 0}c(ct,"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 gt(r,o){var A,I,a,s;for(I=63;I>=32;--I){for(A=0,a=I-32,s=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}c(gt,"modL");function st(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;gt(r,o)}c(st,"reduce");function zt(r,o,A,I){var a=new Uint8Array(64),s=new Uint8Array(64),u=new Uint8Array(64),l,h,C=new Float64Array(64),E=[i(),i(),i(),i()];let d=tn(I);a=ue(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)}c(hr,"unpackneg");function ht(r,o,A,I){var a,s=new Uint8Array(32),u=new Uint8Array(64),l=[i(),i(),i(),i()],h=[i(),i(),i(),i()];if(A<64||hr(h,I))return-1;for(a=0;a=0};function tn(r){let o=new Uint8Array(64),A=[i(),i(),i(),i()],I,a=new Uint8Array(32);return o=ue(r,64),o[0]&=248,o[31]&=127,o[31]|=64,le(A,o),ke(a,A),a}c(tn,"derivePublicFromSecret"),e.sign.keyPair=function(){var r=new Uint8Array(z),o=new Uint8Array(Ie);return ct(r,o),{publicKey:r,secretKey:o}},e.sign.keyPair.fromSecretKey=function(r){if(P(r),r.length!==Ie)throw new Error("bad secret key size");var o=new Uint8Array(z);return o=tn(r),{publicKey:o,secretKey:new Uint8Array(r)}},e.sign.keyPair.fromSeed=function(r){if(P(r),r.length!==ut)throw new Error("bad seed size");for(var o=new Uint8Array(z),A=new Uint8Array(Ie),I=0;I<32;I++)A[I]=r[I];return ct(o,A,!0),{publicKey:o,secretKey:A}},e.sign.publicKeyLength=z,e.sign.secretKeyLength=Ie,e.sign.seedLength=ut,e.sign.signatureLength=T,e.hash=function(r){P(r);var o=new Uint8Array(lt);return It(o,r,r.length),o},e.hash.hashLength=lt,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,s=new Uint8Array(I);for(a=0;azn,get_address_from_public_key:()=>_e,get_private_key_from_seed:()=>pt,get_public_key_from_address:()=>pe,get_public_key_from_private_key:()=>je,hash_block:()=>te,hex_to_uint8array:()=>D,int_to_uint8array:()=>qn,raw_to_whole:()=>_t,sign_block_hash:()=>ne,sign_message:()=>St,uint8array_to_base32:()=>bt,uint8array_to_hex:()=>ee,utf8_to_uint8array:()=>Zn,verify_block_hash:()=>Si,whole_to_raw:()=>De});var Je=rn(Xn()),Se=rn(dt());var di="0000000000000000000000000000000000000000000000000000000000000006",bi="62616E616E6F6D73672D",be=["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}c(qn,"int_to_uint8array");var Wn=["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 bt(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+=Wn[y]}return n}c(bt,"uint8array_to_base32");function _i(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}c(_i,"int_to_binary");function pi(e){let n=0;for(let t=0;t_i(Wn.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}c(De,"whole_to_raw");function _t(e,n=$n){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:()=>Dt});var qe=class{constructor(n,t=!1){this.DECIMALS=void 0;this.debug=!1;this.rpc_url=n,this.use_pending=t}static{c(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?"true":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?"true":void 0,head:g,offset:f?`${f}`:void 0,reverse:y?"true":void 0,account_filter:w})}async get_account_info(n,t,i,g,f){return await this.call({action:"account_info",account:n,representative:i?"true":void 0,weight:g?"true":void 0,pending:f?"true":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?De(i,this.DECIMALS).toString():void 0,source:g?"true":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})}},Dt=class extends qe{static{c(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 vt={};Me(vt,{PrivateKeyAccount:()=>mt,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{c(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 _e(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=De(t,this.rpc.DECIMALS),w=f??await this.get_account_info(void 0,!0),x=pe(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 se=ne(this.private_key,m),X={...S,signature:se,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 se=ne(this.private_key,m),X={...S,signature:se,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 St(this.private_key,n)}},mt=class extends We{static{c(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 Pt={};Me(Pt,{RPCWorkProvider:()=>Ft});var Ft=class{constructor(n){this.extra_payload={};this.rpc=n}static{c(this,"RPCWorkProvider")}async request_work(n){return(await this.rpc.call({action:"work_generate",hash:n,...this.extra_payload})).work}};window.banani={...Xe,...Ut,...vt,...Pt};})(); //!!! 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 75e27ff..1a9956c 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WW32+bMBCA/xeeq3XN1i7rW5NpaqVpi5pKeZgm5MABVhxAtskPTfvfZyANBhufeQz33XcH9jn+/TeQcJLBY/C6WgY3QUlkpn5EjAgB4lY9/JDJPVORHc3j4PFuNv93o+dsqMwWJNpVpTW7C2Oegu9WvDjQGLjdpAEu14YwBtJUtM9dmU9RVFS5XBBG8gh634PmEnhCIuUxqL5ydv9gKp+pkAU/L1gR7VxSnfPXIp121AQlOfo2+45Oknu23IAe4pc8KRDlBfGQvUIE9EC2DNsCPXCSeF1UHN1hFnxSkbeMg8gKFnvX0TO8SpWKh1wSSQ/42wxgjwIboGkmEfEV8hCKy9QKxKlzPtr+y6F2E3cVGR9EdO4aYNl8/pGWegSqcs2ZDqCin8WapjmRFYdxmQahQoG2Jnx7G12+a9Sl+AYMUqJOL+H87ibmJ8V9iEqFX97TrCYdcIr6m/hXzmg+egiMwZMLuI8Ed8qEYp4FEKn9TqPpxu80g3MmjlVZ0TnkuazPk/bxIPPj1y939zMze8UhoacRRxvETM0EPDH2VqcOTb2gl2lBBI3GXV3Yy/ZMRGb11AEvww81QtF5vCEt7uVbq20Cy4zkKYxLh5CfudrWCruwjWGejfqjNwTNQzRT7drvVR5JWuSGQIthni0R8GkWyiKs1EzMCefk3PmSi0Xc2ri+++Gzpk1BhqTd1WHCi31YVltGo3AHVrsDR4qUXF2bJNRkmykA4rESVhgrcO2kTSHDY2BQwo5PLKI16ltIS3EUy9QYhtv+ZabzdlGXAk74djEgh1AxuNCAHEJOjjV77A9X59LjDo1QF5/2a4RZ71jrTAMEk+3VTiCptSc97tB071+/QTuUNp2N89aqxcOdCnIJZTLHF9WkHMoDcJqckQUxIIewWf+6vNoPNpceNzR//gNZEW9ntREAAA==" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WX32+bMBCA/xeeq3XN1i7rW5NparVpi9pKeagm5MABVhxAtskPTfvfZyANBhufeeW+++6wfQ55+xtIOMrgPlhxuicSfsDpIYqKKpfBVVASmalQxIgQIK4N5EMmd0xxW5rHwf3NbP7v6uJ7Xi1Ng3qI5KypzBYk2lalNbsLY56Cb1e82NMYuN2kAS7XmjAGlsVon7syz4u0IIzkEfTWg+YSeEIi5TGovnJ2e2cqH6mQBT8tWBFtXVKd89cinXbUBCU5+Db7jk6Se7bcgB7ipzwpEOUZ8ZA9QwRqbjYMOwI9cJL4pag4esIs+KQirxkHkRUs9q6jZ3iVKhUPuSSS7vG3GcAeBdZA00wi4gvkIRTnqRWIU+d8tP2XQ+0m7ioyPojo3DXAsln+kZZ6BKpyzZkOoKJfxQtNcyIrDuMyDUKFAm1N+PY2un2XqEvxDRikRN1ewrnuJuYnxX2ISoWf3tOsJh1wivqH+HfOaD56CYzBkwu4rwR3yoRingUQqf2bRtONf9MM7pk4VmVF55Cnsr5P2seDzI9fv9zczszsFYeEHkccbRAzNRPwwNhrnTo09YJepgURNBp3dWEv2yMRmdVTB7wMP9UIRafxhrS4l+9FHRNYZiRPYVw6hPzM1aZW2IVtDPOs1Q+9IWgeopnq1H6v8kjSIjcEWgzzbIiAT7NQFmGlZmJOOCenzpecLeLaxvXdd581bQoyJO2pDhNe7MKy2jAahVuw2h04UqRs/17VZJspAOKxElYYK3DppE0hw2tgUMKOTyyiNepbSEtxFMvUGIab/sdM5+2iLgUc8eNiQA6hYnChATmEnBxq9tAfrs6lxx0aoT582tUIs9611pkGCCbbqZNAUmtPetyh6d6/foN2KG06G+etVZuHOxXkEspkjm+qSTmUe+A0OSEbYkAOYbP/dXl1HmwuPW5o/vwHNT4giAUSAAA=" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index ad7def5..ef34241 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 new file mode 100644 index 0000000..368d168 --- /dev/null +++ b/docs/classes/PrivateKeyAccount.html @@ -0,0 +1,43 @@ +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

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

      +
    • 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 +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

      +
    • 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 diff --git a/docs/classes/RPC.html b/docs/classes/RPC.html index 7088d52..c7ba10b 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: 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 diff --git a/docs/classes/RPCWithBackup.html b/docs/classes/RPCWithBackup.html index dcdac71..c7a91e9 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: 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 diff --git a/docs/classes/RPCWorkProvider.html b/docs/classes/RPCWorkProvider.html index b0cf6d2..56ae31f 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 52b1f4e..ac774f8 100644 --- a/docs/classes/Wallet.html +++ b/docs/classes/Wallet.html @@ -1,10 +1,9 @@ -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

    -

    Constructors

    constructor +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

    • 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
      • try_work: boolean = false
      • 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
    try_work: boolean
    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

        +

    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

      • 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 9806235..9771e67 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/get_address_from_public_key.html b/docs/functions/get_address_from_public_key.html index 5c1f631..4399618 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 f27a4df..9182ae9 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 f0d1416..6ddc116 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 2e8514a..8227aec 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 78fe6a3..6f38600 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 ff40236..c98345e 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 2085738..0ecd974 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 93fa658..7d1b523 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 e3c998c..d653efd 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 1eaa0f1..f3304cf 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 270922f..20703a6 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 7ad5656..baea269 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 58625cd..b3607fa 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 7b27122..996feb5 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/whole_to_raw.html b/docs/functions/whole_to_raw.html index 5bbbfd3..79e2f05 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/hierarchy.html b/docs/hierarchy.html index 77451b1..65c9543 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -1 +1 @@ -banani
    \ No newline at end of file +banani
    \ No newline at end of file diff --git a/docs/interfaces/AccountBalanceRPC.html b/docs/interfaces/AccountBalanceRPC.html index 9cc1365..26a3100 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 b927ccd..dee71a3 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 a7f2118..88cb548 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 b5d34cc..73b56f3 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 4ce4ab3..4eb68f2 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 5658dd6..6c993e3 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 79b3987..25f463a 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 93af8d9..4f89c23 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 251b78d..16c104e 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 2f61ab5..bfaac5b 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 534cc9c..c8dd005 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 bb28860..83d6592 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 27896e8..3d4fa03 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 7bfbdd5..25a1e6d 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 ed1436c..546b79f 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 9030b17..7f3f9ed 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 5660ca7..f4f1f20 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 b9a4ab3..12da5ae 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 dc9be06..0d88bb7 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 d1f9357..6424650 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 67d1981..54bf3b1 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 d8195dc..8d19e0c 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 bceef6e..1a7aa20 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 f7e5dc6..d6f6773 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 b53efb5..74e77e1 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 61f410e..2034946 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 d1e097a..47afff1 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -1,4 +1,5 @@ -banani

    banani

    Index

    Classes

    RPC +banani

    banani

    Index

    Classes

    PrivateKeyAccount +RPC RPCWithBackup RPCWorkProvider Wallet diff --git a/docs/types/Address.html b/docs/types/Address.html index 53729ac..593085c 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 06428c5..d715c92 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 dd0dbd6..ca72952 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 aafda91..57dda66 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 6d7f2e4..13df45a 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 cec8bcc..2f2b5fe 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 7d398fb..d2cfaed 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 d58132c..145a20f 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 87888a7..0a766b7 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 e177c62..5b58ed1 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/node_test/index.js b/node_test/index.js index c078c57..bfa2366 100644 --- a/node_test/index.js +++ b/node_test/index.js @@ -1,7 +1,11 @@ -//import * as banani from "../main.js" +//import * as banani from "../main.js"; import * as banani from "banani"; import * as fs from "fs"; +let rpc_backup = new banani.RPCWithBackup(["https://doesnotexist239932093293854758.com", "https://kaliumapi.appditto.com/api"], 3000); + +console.log(await rpc_backup.get_block_count()); + let rpc = new banani.RPC("https://kaliumapi.appditto.com/api"); //rpc.debug = true console.log(rpc.rpc_url); @@ -9,8 +13,9 @@ console.log(rpc.rpc_url); console.log(await rpc.get_block_count()); let random_wallet = banani.Wallet.gen_random_wallet(rpc); +let private_key_account = new banani.PrivateKeyAccount(rpc, random_wallet.private_key); -console.log("random", random_wallet.address); +console.log("random", random_wallet.address, random_wallet.address === private_key_account.address); console.log("sig", random_wallet.sign_message("test message\ntest test")); let test_seed = fs.readFileSync("./.secret", "utf-8").trim(); @@ -41,5 +46,3 @@ console.log("receive 2"); console.log(await wallet.receive_all()); await wallet.change_rep("ban_3p3sp1ynb5i3qxmqoha3pt79hyk8gxhtr58tk51qctwyyik6hy4dbbqbanan"); - -// diff --git a/node_test/package-lock.json b/node_test/package-lock.json index bba4129..83c5db1 100644 --- a/node_test/package-lock.json +++ b/node_test/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "banani": "^1.0.0" + "banani": "^1.0.1" } }, "node_modules/b4a": { @@ -19,9 +19,9 @@ "license": "Apache-2.0" }, "node_modules/banani": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/banani/-/banani-1.0.0.tgz", - "integrity": "sha512-qktSBh4qWcnX8L24ZplShQAESrTZ++Y/ipjSfP2c0z8xz7aL5TUyy19+oQZz9nnpNNXrRdtll3Ye17dQUWcrfQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/banani/-/banani-1.0.1.tgz", + "integrity": "sha512-rykB15fBYdLYZVbT0otidIgN9hBTiWBMA+HpwvooR/Z2D2Jroe3Cya+bgoF1qD7PWkKUP9Nw4TRZVVYicpI9yw==", "license": "MIT", "dependencies": { "blake2b": "^2.1.4" diff --git a/node_test/package.json b/node_test/package.json index 23de473..6fa4878 100644 --- a/node_test/package.json +++ b/node_test/package.json @@ -10,6 +10,6 @@ "description": "", "type": "module", "dependencies": { - "banani": "^1.0.0" + "banani": "^1.0.1" } } diff --git a/package.json b/package.json index 2a50efc..249a4c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "banani", - "version": "1.0.0", + "version": "1.0.1", "description": "JS/TS library for the Banano cryptocurrency in the style of bananopie", "main": "main.js", "scripts": { diff --git a/rpc.ts b/rpc.ts index 64716f7..55dd543 100644 --- a/rpc.ts +++ b/rpc.ts @@ -193,6 +193,7 @@ export class RPCWithBackup extends RPC { if (rpc_urls.length < 2) throw Error("Must provide at least two RPC URLs"); super(rpc_urls[0], use_pending); this.rpc_urls = rpc_urls; + this.timeout = timeout; } async call(payload: Record): Promise> { let i = 0; diff --git a/wallet.ts b/wallet.ts index d0f0a29..2902833 100644 --- a/wallet.ts +++ b/wallet.ts @@ -4,21 +4,20 @@ import type { RPCInterface, RPC } from "./rpc"; export type WorkFunction = (block_hash: BlockHash) => Promise; -/** 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 */ +/** 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 */ export class Wallet { readonly seed: string; readonly rpc: RPCInterface; /** Seed index. Seeds can have multiple private keys and addresses */ index: number; - try_work: boolean; add_do_work: boolean = true; work_function?: WorkFunction; /** * @param {string} [seed] Seed for the wallet from which private keys are derived. 64 character hex string (32 bytes) */ - constructor(rpc: RPCInterface, seed: string, index: number = 0, try_work: boolean = false, work_function?: WorkFunction) { + constructor(rpc: RPCInterface, seed: string, index: number = 0, work_function?: WorkFunction) { this.rpc = rpc; if (typeof seed !== "string" || seed?.length !== 64) throw Error("Seed needs to be 64 character (hex) string"); this.seed = seed; @@ -224,3 +223,19 @@ export class Wallet { return util.sign_message(this.private_key, message); } } + +/** 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. */ +export class PrivateKeyAccount extends Wallet { + _private_key: string; + /** + * @param {string} [private_key] Private key. 64 character hex string (32 bytes) + */ + constructor(rpc: RPCInterface, private_key: string, work_function?: WorkFunction) { + if (typeof private_key !== "string" || private_key?.length !== 64) throw Error("Priv key needs to be 64 character (hex) string"); + super(rpc, private_key, 0, work_function); + this._private_key = private_key; + } + get private_key(): string { + return this._private_key; + } +}