From 4c693965f83321cdd7dd247f3869845ea0639c95 Mon Sep 17 00:00:00 2001 From: stjet <49297268+stjet@users.noreply.github.com> Date: Fri, 8 Aug 2025 04:12:46 +0000 Subject: [PATCH] add slow pure javascript work function - v1.0.10 --- banani-browser.js | 2 +- docs/assets/navigation.js | 2 +- docs/assets/search.js | 2 +- docs/classes/PrivateKeyAccount.html | 18 ++++---- docs/classes/RPC.html | 44 +++++++++---------- docs/classes/RPCWithBackup.html | 44 +++++++++---------- docs/classes/RPCWorkProvider.html | 7 +-- docs/classes/SlowJavascriptWorkProvider.html | 4 ++ docs/classes/Wallet.html | 18 ++++---- docs/functions/base32_to_uint8array.html | 2 +- .../construct_message_block_and_hash.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/verify_signed_message.html | 2 +- docs/functions/whole_to_raw.html | 2 +- docs/hierarchy.html | 2 +- docs/index.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/TelemetryAddressRPC.html | 4 +- docs/interfaces/TelemetryRPC.html | 4 +- docs/interfaces/TelemetryRawRPC.html | 4 +- docs/interfaces/VersionRPC.html | 4 +- docs/interfaces/WorkProvider.html | 4 +- docs/modules.html | 1 + 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 +- docs/variables/NANO_DECIMALS.html | 2 +- node_test/index.js | 5 +++ package.json | 2 +- wallet.ts | 5 +-- work.ts | 26 +++++++++-- 75 files changed, 198 insertions(+), 164 deletions(-) create mode 100644 docs/classes/SlowJavascriptWorkProvider.html diff --git a/banani-browser.js b/banani-browser.js index 0116608..6bf8ba2 100644 --- a/banani-browser.js +++ b/banani-browser.js @@ -1,4 +1,4 @@ -"use strict";(()=>{var wr=Object.create;var He=Object.defineProperty;var Br=Object.getOwnPropertyDescriptor;var xr=Object.getOwnPropertyNames;var dr=Object.getPrototypeOf,Qr=Object.prototype.hasOwnProperty;var s=(e,n)=>He(e,"name",{value:n,configurable:!0}),on=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,t)=>(typeof require<"u"?require:n)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var M=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),Le=(e,n)=>{for(var t in n)He(e,t,{get:n[t],enumerable:!0})},br=(e,n,t,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let c of xr(n))!Qr.call(e,c)&&c!==t&&He(e,c,{get:()=>n[c],enumerable:!(i=Br(n,c))||i.enumerable});return e};var An=(e,n,t)=>(t=e!=null?wr(dr(e)):{},br(n||!e||!e.__esModule?He(t,"default",{value:e,enumerable:!0}):t,e));var ut=M((Pi,In)=>{In.exports=an;var Me=class extends Error{static{s(this,"AssertionError")}};Me.prototype.name="AssertionError";function an(e,n){if(!e){var t=new Me(n);throw Error.captureStackTrace&&Error.captureStackTrace(t,an),t}}s(an,"assert")});var gn=M((ki,cn)=>{function sn(e){return e.length}s(sn,"byteLength");function _r(e){let n=e.byteLength,t="";for(let i=0;i{var ce="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Z=new Uint8Array(256);for(let e=0;e1&&e.charCodeAt(n-1)===61&&n--,n*3>>>2}s(hn,"byteLength");function Sr(e){let n=e.byteLength,t="";for(let i=0;i>2]+ce[(e[i]&3)<<4|e[i+1]>>4]+ce[(e[i+1]&15)<<2|e[i+2]>>6]+ce[e[i+2]&63];return n%3===2?t=t.substring(0,t.length-1)+"=":n%3===1&&(t=t.substring(0,t.length-2)+"=="),t}s(Sr,"toString");function Dr(e,n,t=0,i=hn(n)){let c=Math.min(i,e.byteLength-t);for(let f=0,y=0;y>4,e[y++]=(x&15)<<4|b>>2,e[y++]=(b&3)<<6|_&63}return c}s(Dr,"write");fn.exports={byteLength:hn,toString:Sr,write:Dr}});var En=M((Hi,yn)=>{function ln(e){return e.length>>>1}s(ln,"byteLength");function Ur(e){let n=e.byteLength;e=new DataView(e.buffer,e.byteOffset,n);let t="",i=0;for(let c=n-n%4;i=48&&e<=57)return e-48;if(e>=65&&e<=70)return e-65+10;if(e>=97&&e<=102)return e-97+10}s(un,"hexValue")});var Bn=M((Mi,wn)=>{function lt(e){let n=0;for(let t=0,i=e.length;t=55296&&c<=56319&&t+1=56320&&f<=57343){n+=4,t++;continue}}c<=127?n+=1:c<=2047?n+=2:n+=3}return n}s(lt,"byteLength");var yt;if(typeof TextDecoder<"u"){let e=new TextDecoder;yt=s(function(t){return e.decode(t)},"toString")}else yt=s(function(n){let t=n.byteLength,i="",c=0;for(;c0){let x=0;for(;x>b,b-=6;b>=0;)n[w++]=128|x>>b&63,b-=6;y+=x>=65536?2:1}return f},"write");wn.exports={byteLength:lt,toString:yt,write:Et}});var Qn=M((Gi,dn)=>{function xn(e){return e.length*2}s(xn,"byteLength");function vr(e){let n=e.byteLength,t="";for(let i=0;i>8,b=w%256;e[t+y*2]=b,e[t+y*2+1]=x}return c}s(Pr,"write");dn.exports={byteLength:xn,toString:vr,write:Pr}});var Dn=M((Bt,Sn)=>{var Fr=gn(),kr=Cn(),Kr=En(),Rr=Bn(),Yr=Qn(),Ve=new Uint8Array(Uint16Array.of(255).buffer)[0]===255;function de(e){switch(e){case"ascii":return Fr;case"base64":return kr;case"hex":return Kr;case"utf8":case"utf-8":case void 0:return Rr;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Yr;default:throw new Error(`Unknown encoding: ${e}`)}}s(de,"codecFor");function bn(e){return e instanceof Uint8Array}s(bn,"isBuffer");function Hr(e){try{return de(e),!0}catch{return!1}}s(Hr,"isEncoding");function Lr(e,n,t){let i=new Uint8Array(e);return n!==void 0&&Bt.fill(i,n,0,i.byteLength,t),i}s(Lr,"alloc");function Mr(e){return new Uint8Array(e)}s(Mr,"allocUnsafe");function Vr(e){return new Uint8Array(e)}s(Vr,"allocUnsafeSlow");function Gr(e,n){return de(n).byteLength(e)}s(Gr,"byteLength");function Tr(e,n){if(e===n)return 0;let t=Math.min(e.byteLength,n.byteLength);e=new DataView(e.buffer,e.byteOffset,e.byteLength),n=new DataView(n.buffer,n.byteOffset,n.byteLength);let i=0;for(let c=t-t%4;if)return 1}return e.byteLength>n.byteLength?1:e.byteLengthc+f.byteLength,0));let t=new Uint8Array(n),i=0;for(let c of e){if(i+c.byteLength>t.byteLength){let f=c.subarray(0,t.byteLength-i);return t.set(f,i),t}t.set(c,i),i+=c.byteLength}return t}s(Nr,"concat");function Or(e,n,t=0,i=0,c=e.byteLength){if(c>0&&c=e.byteLength)throw new RangeError("sourceStart is out of range");if(c<0)throw new RangeError("sourceEnd is out of range");t>=n.byteLength&&(t=n.byteLength),c>e.byteLength&&(c=e.byteLength),n.byteLength-t=e.byteLength){if(c)return-1;t=e.byteLength-1}else if(t<0)if(c)t=0;else return-1;if(typeof n=="string")n=wt(n,i);else if(typeof n=="number")return n=n&255,c?e.indexOf(n,t):e.lastIndexOf(n,t);if(n.byteLength===0)return-1;if(c){let f=-1;for(let y=t;ye.byteLength&&(t=e.byteLength-n.byteLength);for(let f=t;f>=0;f--){let y=!0;for(let w=0;w=c||i<=t?"":(t<0&&(t=0),i>c&&(i=c),(t!==0||i{var Ci=s((e,n)=>s(function(){return n||(0,e[Object.keys(e)[0]])((n={exports:{}}).exports,n),n.exports},"__require"),"__commonJS"),ui=(()=>{for(var e=new Uint8Array(128),n=0;n<64;n++)e[n<26?n+65:n<52?n+71:n<62?n-4:n*4-205]=n;return t=>{for(var i=t.length,c=new Uint8Array((i-(t[i-1]=="=")-(t[i-2]=="="))*3/4|0),f=0,y=0;f>4,c[y++]=x<<4|b>>2,c[y++]=b<<6|_}return c}})(),li=Ci({"wasm-binary:./blake2b.wat"(e,n){n.exports=ui("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")}}),yi=li(),Ei=WebAssembly.compile(yi);Un.exports=async e=>(await WebAssembly.instantiate(await Ei,e)).exports});var Hn=M((qi,G)=>{var k=ut(),wi=Dn(),J=null,vn=typeof WebAssembly<"u"&&mn()().then(e=>{J=e}),O=64,Ge=[];G.exports=m;var Pn=G.exports.BYTES_MIN=16,Fn=G.exports.BYTES_MAX=64,ji=G.exports.BYTES=32,kn=G.exports.KEYBYTES_MIN=16,Kn=G.exports.KEYBYTES_MAX=64,Xi=G.exports.KEYBYTES=32,Rn=G.exports.SALTBYTES=16,Yn=G.exports.PERSONALBYTES=16;function m(e,n,t,i,c){if(!(this instanceof m))return new m(e,n,t,i,c);if(!J)throw new Error("WASM not loaded. Wait for Blake2b.ready(cb)");e||(e=32),c!==!0&&(k(e>=Pn,"digestLength must be at least "+Pn+", was given "+e),k(e<=Fn,"digestLength must be at most "+Fn+", was given "+e),n!=null&&(k(n instanceof Uint8Array,"key must be Uint8Array or Buffer"),k(n.length>=kn,"key must be at least "+kn+", was given "+n.length),k(n.length<=Kn,"key must be at least "+Kn+", was given "+n.length)),t!=null&&(k(t instanceof Uint8Array,"salt must be Uint8Array or Buffer"),k(t.length===Rn,"salt must be exactly "+Rn+", was given "+t.length)),i!=null&&(k(i instanceof Uint8Array,"personal must be Uint8Array or Buffer"),k(i.length===Yn,"personal must be exactly "+Yn+", was given "+i.length))),Ge.length||(Ge.push(O),O+=216),this.digestLength=e,this.finalized=!1,this.pointer=Ge.pop(),this._memory=new Uint8Array(J.memory.buffer),this._memory.fill(0,0,64),this._memory[0]=this.digestLength,this._memory[1]=n?n.length:0,this._memory[2]=1,this._memory[3]=1,t&&this._memory.set(t,32),i&&this._memory.set(i,48),this.pointer+216>this._memory.length&&this._realloc(this.pointer+216),J.blake2b_init(this.pointer,this.digestLength),n&&(this.update(n),this._memory.fill(0,O,O+n.length),this._memory[this.pointer+200]=128)}s(m,"Blake2b");m.prototype._realloc=function(e){J.memory.grow(Math.max(0,Math.ceil(Math.abs(e-this._memory.length)/65536))),this._memory=new Uint8Array(J.memory.buffer)};m.prototype.update=function(e){return k(this.finalized===!1,"Hash instance finalized"),k(e instanceof Uint8Array,"input must be Uint8Array or Buffer"),O+e.length>this._memory.length&&this._realloc(O+e.length),this._memory.set(e,O),J.blake2b_update(this.pointer,O,O+e.length),this};m.prototype.digest=function(e){if(k(this.finalized===!1,"Hash instance finalized"),this.finalized=!0,Ge.push(this.pointer),J.blake2b_final(this.pointer),!e||e==="binary")return this._memory.slice(this.pointer+128,this.pointer+128+this.digestLength);if(typeof e=="string")return wi.toString(this._memory,e,this.pointer+128,this.pointer+128+this.digestLength);k(e instanceof Uint8Array&&e.length>=this.digestLength,"input must be Uint8Array or Buffer");for(var n=0;ne(),e):e(new Error("WebAssembly not supported"))};m.prototype.ready=m.ready;m.prototype.getPartialHash=function(){return this._memory.slice(this.pointer,this.pointer+216)};m.prototype.setPartialHash=function(e){this._memory.set(e,this.pointer)};function Bi(){}s(Bi,"noop")});var xt=M(($i,v)=>{var R=ut(),be=Hn();function Te(e,n,t){var i=e[n]+e[t],c=e[n+1]+e[t+1];i>=4294967296&&c++,e[n]=i,e[n+1]=c}s(Te,"ADD64AA");function Ln(e,n,t,i){var c=e[n]+t;t<0&&(c+=4294967296);var f=e[n+1]+i;c>=4294967296&&f++,e[n]=c,e[n+1]=f}s(Ln,"ADD64AC");function Jn(e,n){return e[n]^e[n+1]<<8^e[n+2]<<16^e[n+3]<<24}s(Jn,"B2B_GET32");function q(e,n,t,i,c,f){var y=Qe[c],w=Qe[c+1],x=Qe[f],b=Qe[f+1];Te(B,e,n),Ln(B,e,y,w);var _=B[i]^B[e],S=B[i+1]^B[e+1];B[i]=S,B[i+1]=_,Te(B,t,i),_=B[n]^B[t],S=B[n+1]^B[t+1],B[n]=_>>>24^S<<8,B[n+1]=S>>>24^_<<8,Te(B,e,n),Ln(B,e,x,b),_=B[i]^B[e],S=B[i+1]^B[e+1],B[i]=_>>>16^S<<16,B[i+1]=S>>>16^_<<16,Te(B,t,i),_=B[n]^B[t],S=B[n+1]^B[t+1],B[n]=S>>>31^_<<1,B[n+1]=_>>>31^S<<1}s(q,"B2B_G");var jn=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),xi=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3],U=new Uint8Array(xi.map(function(e){return e*2})),B=new Uint32Array(32),Qe=new Uint32Array(32);function Xn(e,n){var t=0;for(t=0;t<16;t++)B[t]=e.h[t],B[t+16]=jn[t];for(B[24]=B[24]^e.t,B[25]=B[25]^e.t/4294967296,n&&(B[28]=~B[28],B[29]=~B[29]),t=0;t<32;t++)Qe[t]=Jn(e.b,4*t);for(t=0;t<12;t++)q(0,8,16,24,U[t*16+0],U[t*16+1]),q(2,10,18,26,U[t*16+2],U[t*16+3]),q(4,12,20,28,U[t*16+4],U[t*16+5]),q(6,14,22,30,U[t*16+6],U[t*16+7]),q(0,10,20,30,U[t*16+8],U[t*16+9]),q(2,12,22,24,U[t*16+10],U[t*16+11]),q(4,14,16,26,U[t*16+12],U[t*16+13]),q(6,8,18,28,U[t*16+14],U[t*16+15]);for(t=0;t<16;t++)e.h[t]=e.h[t]^B[t]^B[t+16]}s(Xn,"blake2bCompress");var W=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);function ge(e,n,t,i){W.fill(0),this.b=new Uint8Array(128),this.h=new Uint32Array(16),this.t=0,this.c=0,this.outlen=e,W[0]=e,n&&(W[1]=n.length),W[2]=1,W[3]=1,t&&W.set(t,32),i&&W.set(i,48);for(var c=0;c<16;c++)this.h[c]=jn[c]^Jn(W,c*4);n&&(qn(this,n),this.c=128)}s(ge,"Blake2b");ge.prototype.update=function(e){return R(e instanceof Uint8Array,"input must be Uint8Array or Buffer"),qn(this,e),this};ge.prototype.digest=function(e){var n=!e||e==="binary"||e==="hex"?new Uint8Array(this.outlen):e;return R(n instanceof Uint8Array,'out must be "binary", "hex", Uint8Array, or Buffer'),R(n.length>=this.outlen,"out must have at least outlen bytes of space"),di(this,n),e==="hex"?Qi(n):n};ge.prototype.final=ge.prototype.digest;ge.ready=function(e){be.ready(function(){e()})};function qn(e,n){for(var t=0;t>2]>>8*(t&3);return n}s(di,"blake2bFinal");function Qi(e){for(var n="",t=0;t=Mn,"outlen must be at least "+Mn+", was given "+n),R(n<=Vn,"outlen must be at most "+Vn+", was given "+n),t!=null&&(R(t instanceof Uint8Array,"key must be Uint8Array or Buffer"),R(t.length>=Gn,"key must be at least "+Gn+", was given "+t.length),R(t.length<=Tn,"key must be at most "+Tn+", was given "+t.length)),i!=null&&(R(i instanceof Uint8Array,"salt must be Uint8Array or Buffer"),R(i.length===Nn,"salt must be exactly "+Nn+", was given "+i.length)),c!=null&&(R(c instanceof Uint8Array,"personal must be Uint8Array or Buffer"),R(c.length===On,"personal must be exactly "+On+", was given "+c.length))),new _i(n,t,i,c)},"createHash");v.exports.ready=function(e){be.ready(function(){e()})};v.exports.WASM_SUPPORTED=be.SUPPORTED;v.exports.WASM_LOADED=!1;var Mn=v.exports.BYTES_MIN=16,Vn=v.exports.BYTES_MAX=64,zi=v.exports.BYTES=32,Gn=v.exports.KEYBYTES_MIN=16,Tn=v.exports.KEYBYTES_MAX=64,Zi=v.exports.KEYBYTES=32,Nn=v.exports.SALTBYTES=16,On=v.exports.PERSONALBYTES=16;be.ready(function(e){e||(v.exports.WASM_LOADED=!0,v.exports=be)})});var Wn=M((to,Ne)=>{"use strict";(function(e){"use strict";let n=xt();var t=s(function(r,A){this.hi=r|0,this.lo=A|0},"u64"),i=s(function(r){var A,o=new Float64Array(16);if(r)for(A=0;A>>32-A}s(X,"L32");function re(r,A){var o=r[A+3]&255;return o=o<<8|r[A+2]&255,o=o<<8|r[A+1]&255,o<<8|r[A+0]&255}s(re,"ld32");function Kt(r,A){var o=r[A]<<24|r[A+1]<<16|r[A+2]<<8|r[A+3],a=r[A+4]<<24|r[A+5]<<16|r[A+6]<<8|r[A+7];return new t(o,a)}s(Kt,"dl64");function We(r,A,o){var a;for(a=0;a<4;a++)r[A+a]=o&255,o>>>=8}s(We,"st32");function Rt(r,A,o){r[A]=o.hi>>24&255,r[A+1]=o.hi>>16&255,r[A+2]=o.hi>>8&255,r[A+3]=o.hi&255,r[A+4]=o.lo>>24&255,r[A+5]=o.lo>>16&255,r[A+6]=o.lo>>8&255,r[A+7]=o.lo&255}s(Rt,"ts64");function ze(r,A,o,a,I){var g,u=0;for(g=0;g>>8)-1}s(ze,"vn");function Yt(r,A,o,a){return ze(r,A,o,a,16)}s(Yt,"crypto_verify_16");function Ze(r,A,o,a){return ze(r,A,o,a,32)}s(Ze,"crypto_verify_32");function Ht(r,A,o,a,I){var g=new Uint32Array(16),u=new Uint32Array(16),l=new Uint32Array(16),h=new Uint32Array(4),C,E,Q;for(C=0;C<4;C++)u[5*C]=re(a,4*C),u[1+C]=re(o,4*C),u[6+C]=re(A,4*C),u[11+C]=re(o,16+4*C);for(C=0;C<16;C++)l[C]=u[C];for(C=0;C<20;C++){for(E=0;E<4;E++){for(Q=0;Q<4;Q++)h[Q]=u[(5*E+4*Q)%16];for(h[1]^=X(h[0]+h[3]|0,7),h[2]^=X(h[1]+h[0]|0,9),h[3]^=X(h[2]+h[1]|0,13),h[0]^=X(h[3]+h[2]|0,18),Q=0;Q<4;Q++)g[4*E+(E+Q)%4]=h[Q]}for(Q=0;Q<16;Q++)u[Q]=g[Q]}if(I){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(a,4*C)|0,u[6+C]=u[6+C]-re(A,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)}s(Ht,"core");function Lt(r,A,o,a){return Ht(r,A,o,a,!1),0}s(Lt,"crypto_core_salsa20");function De(r,A,o,a){return Ht(r,A,o,a,!0),0}s(De,"crypto_core_hsalsa20");var Ce=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function $e(r,A,o,a,I,g,u){var l=new Uint8Array(16),h=new Uint8Array(64),C,E;if(!I)return 0;for(E=0;E<16;E++)l[E]=0;for(E=0;E<8;E++)l[E]=g[E];for(;I>=64;){for(Lt(h,l,u,Ce),E=0;E<64;E++)r[A+E]=(o?o[a+E]:0)^h[E];for(C=1,E=8;E<16;E++)C=C+(l[E]&255)|0,l[E]=C&255,C>>>=8;I-=64,A+=64,o&&(a+=64)}if(I>0)for(Lt(h,l,u,Ce),E=0;E>>=8}s(tt,"add1305");var rr=new Uint32Array([5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252]);function nt(r,A,o,a,I,g){var u,l,h,C,E=new Uint32Array(17),Q=new Uint32Array(17),p=new Uint32Array(17),L=new Uint32Array(17),se=new Uint32Array(17);for(h=0;h<17;h++)Q[h]=p[h]=0;for(h=0;h<16;h++)Q[h]=g[h];for(Q[3]&=15,Q[4]&=252,Q[7]&=15,Q[8]&=252,Q[11]&=15,Q[12]&=252,Q[15]&=15;I>0;){for(h=0;h<17;h++)L[h]=0;for(h=0;h<16&&h>>=8;for(C=C+p[16]|0,p[16]=C&3,C=5*(C>>>2)|0,h=0;h<16;h++)C=C+p[h]|0,p[h]=C&255,C>>>=8;C=C+p[16]|0,p[16]=C}for(h=0;h<17;h++)se[h]=p[h];for(tt(p,rr),u=-(p[16]>>>7)|0,h=0;h<17;h++)p[h]^=u&(se[h]^p[h]);for(h=0;h<16;h++)L[h]=g[h+16];for(L[16]=0,tt(p,L),h=0;h<16;h++)r[A+h]=p[h];return 0}s(nt,"crypto_onetimeauth");function Gt(r,A,o,a,I,g){var u=new Uint8Array(16);return nt(u,0,o,a,I,g),Yt(r,A,u,0)}s(Gt,"crypto_onetimeauth_verify");function rt(r,A,o,a,I){var g;if(o<32)return-1;for(et(r,0,A,0,o,a,I),nt(r,16,r,32,o-32,r),g=0;g<16;g++)r[g]=0;return 0}s(rt,"crypto_secretbox");function it(r,A,o,a,I){var g,u=new Uint8Array(32);if(o<32||(Vt(u,0,32,a,I),Gt(A,16,A,32,o-32,u)!==0))return-1;for(et(r,0,A,0,o,a,I),g=0;g<32;g++)r[g]=0;return 0}s(it,"crypto_secretbox_open");function T(r,A){var o;for(o=0;o<16;o++)r[o]=A[o]|0}s(T,"set25519");function ue(r){var A,o;for(o=0;o<16;o++)r[o]+=65536,A=Math.floor(r[o]/65536),r[(o+1)*(o<15?1:0)]+=A-1+37*(A-1)*(o===15?1:0),r[o]-=A*65536}s(ue,"car25519");function ie(r,A,o){for(var a,I=~(o-1),g=0;g<16;g++)a=I&(r[g]^A[g]),r[g]^=a,A[g]^=a}s(ie,"sel25519");function oe(r,A){var o,a,I,g=i(),u=i();for(o=0;o<16;o++)u[o]=A[o];for(ue(u),ue(u),ue(u),a=0;a<2;a++){for(g[0]=u[0]-65517,o=1;o<15;o++)g[o]=u[o]-65535-(g[o-1]>>16&1),g[o-1]&=65535;g[15]=u[15]-32767-(g[14]>>16&1),I=g[15]>>16&1,g[14]&=65535,ie(u,g,1-I)}for(o=0;o<16;o++)r[2*o]=u[o]&255,r[2*o+1]=u[o]>>8}s(oe,"pack25519");function Tt(r,A){var o=new Uint8Array(32),a=new Uint8Array(32);return oe(o,r),oe(a,A),Ze(o,0,a,0)}s(Tt,"neq25519");function Nt(r){var A=new Uint8Array(32);return oe(A,r),A[0]&1}s(Nt,"par25519");function ot(r,A){var o;for(o=0;o<16;o++)r[o]=A[2*o]+(A[2*o+1]<<8);r[15]&=32767}s(ot,"unpack25519");function Y(r,A,o){var a;for(a=0;a<16;a++)r[a]=A[a]+o[a]|0}s(Y,"A");function H(r,A,o){var a;for(a=0;a<16;a++)r[a]=A[a]-o[a]|0}s(H,"Z");function d(r,A,o){var a,I,g=new Float64Array(31);for(a=0;a<31;a++)g[a]=0;for(a=0;a<16;a++)for(I=0;I<16;I++)g[a+I]+=A[a]*o[I];for(a=0;a<15;a++)g[a]+=38*g[a+16];for(a=0;a<16;a++)r[a]=g[a];ue(r),ue(r)}s(d,"M");function K(r,A){d(r,A,A)}s(K,"S");function Ot(r,A){var o=i(),a;for(a=0;a<16;a++)o[a]=A[a];for(a=253;a>=0;a--)K(o,o),a!==2&&a!==4&&d(o,o,A);for(a=0;a<16;a++)r[a]=o[a]}s(Ot,"inv25519");function Jt(r,A){var o=i(),a;for(a=0;a<16;a++)o[a]=A[a];for(a=250;a>=0;a--)K(o,o),a!==1&&d(o,o,A);for(a=0;a<16;a++)r[a]=o[a]}s(Jt,"pow2523");function Ue(r,A,o){var a=new Uint8Array(32),I=new Float64Array(80),g,u,l=i(),h=i(),C=i(),E=i(),Q=i(),p=i();for(u=0;u<31;u++)a[u]=A[u];for(a[31]=A[31]&127|64,a[0]&=248,ot(I,o),u=0;u<16;u++)h[u]=I[u],E[u]=l[u]=C[u]=0;for(l[0]=E[0]=1,u=254;u>=0;--u)g=a[u>>>3]>>>(u&7)&1,ie(l,h,g),ie(C,E,g),Y(Q,l,C),H(l,l,C),Y(C,h,E),H(h,h,E),K(E,Q),K(p,l),d(l,C,l),d(C,h,Q),Y(Q,l,C),H(l,l,C),K(h,l),H(C,E,p),d(l,C,b),Y(l,l,E),d(C,C,l),d(l,E,p),d(E,h,I),K(h,Q),ie(l,h,g),ie(C,E,g);for(u=0;u<16;u++)I[u+16]=l[u],I[u+32]=C[u],I[u+48]=h[u],I[u+64]=E[u];var L=I.subarray(32),se=I.subarray(16);return Ot(L,L),d(se,se,L),oe(r,se),0}s(Ue,"crypto_scalarmult");function me(r,A){return Ue(r,A,y)}s(me,"crypto_scalarmult_base");function jt(r,A){return c(A,32),me(r,A)}s(jt,"crypto_box_keypair");function ve(r,A,o){var a=new Uint8Array(32);return Ue(a,o,A),De(r,f,a,Ce)}s(ve,"crypto_box_beforenm");var Xt=rt,ir=it;function or(r,A,o,a,I,g){var u=new Uint8Array(32);return ve(u,I,g),Xt(r,A,o,a,u)}s(or,"crypto_box");function Ar(r,A,o,a,I,g){var u=new Uint8Array(32);return ve(u,I,g),ir(r,A,o,a,u)}s(Ar,"crypto_box_open");function le(){var r=0,A=0,o=0,a=0,I=65535,g,u,l;for(l=0;l>>16,o+=u&I,a+=u>>>16;return A+=r>>>16,o+=A>>>16,a+=o>>>16,new t(o&I|a<<16,r&I|A<<16)}s(le,"add64");function qt(r,A){return new t(r.hi>>>A,r.lo>>>A|r.hi<<32-A)}s(qt,"shr64");function Pe(){var r=0,A=0,o;for(o=0;o>>A|r.lo<>>A|r.hi<>>A|r.hi<>>A|r.lo<=128;){for(h=0;h<16;h++)u[h]=Kt(A,8*h+E);for(h=0;h<80;h++){for(C=0;C<8;C++)I[C]=g[C];for(l=le(g[7],cr(g[4]),ar(g[4],g[5],g[6]),fr[h],u[h%16]),I[7]=le(l,sr(g[0]),Ir(g[0],g[1],g[2])),I[3]=le(I[3],l),C=0;C<8;C++)g[(C+1)%8]=I[C];if(h%16===15)for(C=0;C<16;C++)u[C]=le(u[C],u[(C+9)%16],gr(u[(C+1)%16]),hr(u[(C+14)%16]))}for(h=0;h<8;h++)g[h]=le(g[h],a[h]),a[h]=g[h];E+=128,o-=128}for(h=0;h<8;h++)Rt(r,8*h,a[h]);return o}s(Wt,"crypto_hashblocks");let Ae=s((r,A)=>n(A).update(r).digest(),"crypto_hash_blake2b");var Cr=new Uint8Array([106,9,230,103,243,188,201,8,187,103,174,133,132,202,167,59,60,110,243,114,254,148,248,43,165,79,245,58,95,29,54,241,81,14,82,127,173,230,130,209,155,5,104,140,43,62,108,31,31,131,217,171,251,65,189,107,91,224,205,25,19,126,33,121]);function zt(r,A,o){var a=new Uint8Array(64),I=new Uint8Array(256),g,u=o;for(g=0;g<64;g++)a[g]=Cr[g];for(Wt(a,A,o),o%=128,g=0;g<256;g++)I[g]=0;for(g=0;g=0;--I)a=o[I/8|0]>>(I&7)&1,Zt(r,A,a),Fe(A,r),Fe(r,r),Zt(r,A,a)}s(At,"scalarmult");function ye(r,A){var o=[i(),i(),i(),i()];T(o[0],P),T(o[1],j),T(o[2],x),d(o[3],P,j),At(r,o,A)}s(ye,"scalarbase");function at(r,A,o){var a=new Uint8Array(64),I=[i(),i(),i(),i()],g;o||c(A,32);a=Ae(A,64),a[0]&=248,a[31]&=127,a[31]|=64,ye(I,a),ke(r,I);return 0}s(at,"crypto_sign_keypair");var Ke=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 It(r,A){var o,a,I,g;for(a=63;a>=32;--a){for(o=0,I=a-32,g=a-12;I>4)*Ke[I],o=A[I]>>8,A[I]&=255;for(I=0;I<32;I++)A[I]-=o*Ke[I];for(a=0;a<32;a++)A[a+1]+=A[a]>>8,r[a]=A[a]&255}s(It,"modL");function st(r){var A=new Float64Array(64),o;for(o=0;o<64;o++)A[o]=r[o];for(o=0;o<64;o++)r[o]=0;It(r,A)}s(st,"reduce");function $t(r,A,o,a){var I=new Uint8Array(64),g=new Uint8Array(64),u=new Uint8Array(64),l,h,C=new Float64Array(64),E=[i(),i(),i(),i()];let Q=rn(a);I=Ae(a,64),I[0]&=248,I[31]&=127,I[31]|=64;var p=o+64;for(l=0;l>7&&H(r[0],w,r[0]),d(r[3],r[0],r[1]),0)}s(ur,"unpackneg");function ct(r,A,o,a){var I,g=new Uint8Array(32),u=new Uint8Array(64),l=[i(),i(),i(),i()],h=[i(),i(),i(),i()];if(o<64||ur(h,a))return-1;for(I=0;I=0};function rn(r){let A=new Uint8Array(64),o=[i(),i(),i(),i()],a,I=new Uint8Array(32);return A=Ae(r,64),A[0]&=248,A[31]&=127,A[31]|=64,ye(o,A),ke(I,o),I}s(rn,"derivePublicFromSecret"),e.sign.keyPair=function(){var r=new Uint8Array(z),A=new Uint8Array(Ie);return at(r,A),{publicKey:r,secretKey:A}},e.sign.keyPair.fromSecretKey=function(r){if(F(r),r.length!==Ie)throw new Error("bad secret key size");var A=new Uint8Array(z);return A=rn(r),{publicKey:A,secretKey:new Uint8Array(r)}},e.sign.keyPair.fromSeed=function(r){if(F(r),r.length!==ft)throw new Error("bad seed size");for(var A=new Uint8Array(z),o=new Uint8Array(Ie),a=0;a<32;a++)o[a]=r[a];return at(A,o,!0),{publicKey:A,secretKey:o}},e.sign.publicKeyLength=z,e.sign.secretKeyLength=Ie,e.sign.seedLength=ft,e.sign.signatureLength=N,e.hash=function(r){F(r);var A=new Uint8Array(Ct);return zt(A,r,r.length),A},e.hash.hashLength=Ct,e.verify=function(r,A){return F(r,A),r.length===0||A.length===0||r.length!==A.length?!1:ze(r,0,A,0,r.length)===0},e.setPRNG=function(r){c=r},function(){var r=typeof self<"u"?self.crypto||self.msCrypto:null;if(r&&r.getRandomValues){var A=65536;e.setPRNG(function(o,a){var I,g=new Uint8Array(a);for(I=0;IUi,base32_to_uint8array:()=>$n,construct_message_block_and_hash:()=>St,get_address_from_public_key:()=>Se,get_private_key_from_seed:()=>pt,get_public_key_from_address:()=>he,get_public_key_from_private_key:()=>Je,hash_block:()=>te,hex_to_uint8array:()=>D,int_to_uint8array:()=>zn,raw_to_whole:()=>_t,sign_block_hash:()=>ne,sign_message:()=>Dt,uint8array_to_base32:()=>dt,uint8array_to_hex:()=>ee,utf8_to_uint8array:()=>er,verify_block_hash:()=>nr,verify_signed_message:()=>mi,whole_to_raw:()=>bt});var Oe=An(Wn()),pe=An(xt());var pi="0000000000000000000000000000000000000000000000000000000000000006",Qt="62616E616E6F6D73672D",_e=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];function ee(e){let n="";for(let t=0;t0;f--)c-=t[n-f]*16**(2*(f-1));t[n-i]=Math.floor(c/16**(2*(i-1)))}return t}s(zn,"int_to_uint8array");var Zn=["1","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","m","n","o","p","q","r","s","t","u","w","x","y","z"];function dt(e){let n="";for(let t=0;t=5)y=e[c]>>w-5&31;else{let x=5-w;y=(e[c]<>8-x&2**(8-x)-1)}n+=Zn[y]}return n}s(dt,"uint8array_to_base32");function Si(e,n){let t="",i=e;for(let c=0;c=2**(n-1-c)?(t+="1",i-=2**(n-1-c)):t+="0";return t}s(Si,"int_to_binary");function Di(e){let n=0;for(let t=0;tSi(Zn.indexOf(i),5)).join(""),t=new Uint8Array(Math.ceil(e.length*5/8));for(let i=0;in-i[1].length)throw Error(`Too many decimals, cannot exceed ${n}`);t=BigInt(i[0])*BigInt(10)**BigInt(n)+BigInt(i[1])*BigInt(10)**BigInt(n-i[1].length)}else t=BigInt(e)*BigInt(10)**BigInt(n);return t}s(bt,"whole_to_raw");function _t(e,n=tr){let t=e.toString(),i;if(t.length>n)i=t.slice(0,-n)+"."+t.slice(-n);else{let f=n-t.length;i="0."+"0".repeat(f>0?f:0)+t}let c=i.length;for(let f=0;fXe,RPCWithBackup:()=>Ut});var Xe=class{constructor(n,t=!1){this.DECIMALS=void 0;this.debug=!1;this.rpc_url=n,this.use_pending=t}static{s(this,"RPC")}async call(n){this.debug&&console.log(JSON.stringify(n));let t=await fetch(this.rpc_url,{method:"POST",headers:this.headers??{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!t.ok&&this.debug&&console.log(await t.text()),!t.ok)throw Error(`Request to RPC node failed with status code ${t.status}`);let i=await t.json();if(i.error)throw Error(`RPC node response: ${i.error}`);return i}async get_block_count(){return await this.call({action:"block_count"})}async get_block_info(n){return await this.call({action:"block_info",hash:n,json_block:!0})}async get_blocks(n){return await this.call({action:"blocks",hashes:n,json_block:!0})}async get_blocks_info(n){return await this.call({action:"blocks_info",hashes:n,json_block:!0})}async get_representatives(){return await this.call({action:"representatives"})}async get_representatives_online(n){return await this.call({action:"representatives_online",weight:n?!0:void 0})}async get_account_history(n,t,i,c,f,y,w){return await this.call({action:"account_history",account:n,count:`${t}`,raw:i?!0:void 0,head:c,offset:f?`${f}`:void 0,reverse:y?!0:void 0,account_filter:w})}async get_account_info(n,t,i,c,f){return await this.call({action:"account_info",account:n,include_confirmed:t?!0:void 0,representative:i?!0:void 0,weight:c?!0:void 0,pending:f?!0:void 0})}async get_account_balance(n){return await this.call({action:"account_balance",account:n})}async get_accounts_balances(n){return await this.call({action:"accounts_balances",accounts:n})}async get_account_representative(n){return await this.call({action:"account_representative",account:n})}async get_accounts_representatives(n){return await this.call({action:"accounts_representatives",account:n})}async get_account_weight(n){return await this.call({action:"account_weight",account:n})}async get_account_receivable(n,t,i,c){return await this.call({action:this.use_pending?"pending":"receivable",account:n,count:t?`${t}`:void 0,threshold:i,source:c?!0:void 0})}async get_delegators(n,t,i,c){return await this.call({action:"delegators",account:n,threshold:t,count:i?`${i}`:void 0,start:c})}async get_delegators_count(n){return await this.call({action:"account_weight",account:n})}async get_telemetry(n,t,i){return await this.call({action:"telemetry",raw:n||void 0,address:t||void 0,port:i?`${i}`:void 0})}async get_version(){return await this.call({action:"version"})}},Ut=class extends Xe{static{s(this,"RPCWithBackup")}constructor(n,t,i=!1){if(n.length<2)throw Error("Must provide at least two RPC URLs");super(n[0],i),this.rpc_urls=n,this.timeout=t}async call(n){let t=0;for(;;)try{let i=await fetch(this.rpc_urls[t],{method:"POST",headers:this.headers??{"Content-Type":"application/json"},body:JSON.stringify(n),signal:AbortSignal.timeout(this.timeout)});if(!i.ok)throw Error(`Request to RPC node failed with status code ${i.status}`);let c=await i.json();if(c.error)throw Error(`RPC node response: ${c.error}`);return c}catch(i){if(!this.rpc_urls[++t])throw Error(i instanceof Error?i.toString():"RPC call error")}}};var Pt={};Le(Pt,{PrivateKeyAccount:()=>vt,Wallet:()=>qe});var qe=class e{constructor(n,t,i=0,c){this.add_do_work=!0;if(this.rpc=n,typeof t!="string"||t?.length!==64)throw Error("Seed needs to be 64 character (hex) string");this.seed=t,this.index=i,this.work_function=c}static{s(this,"Wallet")}static gen_random_wallet(n){let t=new Uint8Array(32);crypto.getRandomValues(t);let i=ee(t);return new e(n,i)}get private_key(){return pt(this.seed,this.index)}get public_key(){return Je(this.private_key)}get address(){return Se(this.public_key)}async send_process(n,t){return(await this.rpc.call({action:"process",json_block:"true",subtype:t,block:n,do_work:!n.work&&this.add_do_work?!0:void 0})).hash}async send(n,t,i,c,f){let y=bt(t,this.rpc.DECIMALS),w=f??await this.get_account_info(void 0,!0),x=he(n);if(c===void 0){if(w.representative===void 0)throw Error("Missing field 'representative' in `cached_account_info`");c=w.representative}let b=BigInt(w.balance),_=b-y;if(_<0n)throw Error(`Insufficient funds to send. Cannot send more than balance; ie, Before balance (raw: ${b}) less than send amount (raw: ${y})`);let S={type:"state",account:this.address,previous:w.frontier,representative:c,balance:_.toString(),link:x,link_as_account:n},P=te(S),j;i&&this.work_function&&(j=await this.work_function(w.frontier));let fe=ne(this.private_key,P),X={...S,signature:fe,work:j};return await this.send_process(X,"send")}async send_all(n,t,i){let c=await this.get_account_info(void 0,!0);return await this.send(n,_t(BigInt(c.balance),this.rpc.DECIMALS),t,i,c)}async receive(n,t,i){let c=await this.rpc.get_block_info(n),f=0n,y;try{let P=await this.get_account_info(void 0,!0);y=P.frontier,i||(i=P.representative),f=BigInt(P.balance)}catch{y="0".repeat(64)}i===void 0&&(i=this.address);let w={type:"state",account:this.address,previous:y,representative:i,balance:(f+BigInt(c.amount)).toString(),link:n},x=te(w),b;t&&this.work_function&&(b=await this.work_function(y==="0".repeat(64)?this.public_key:y));let _=ne(this.private_key,x),S={...w,signature:_,work:b};return await this.send_process(S,"receive")}async receive_all(n=20,t,i){let c=(await this.get_account_receivable(n,t,!0)).blocks,f,y,w;try{let b=await this.get_account_info(void 0,!0);f=b.frontier,y=b.representative,w=BigInt(b.balance)}catch{f="0".repeat(64),w=BigInt(0)}y===void 0&&(y=this.address);let x=[];for(let b of Object.keys(c)){let _=(w+BigInt(c[b].amount)).toString(),S={type:"state",account:this.address,previous:f,representative:y,balance:_,link:b},P=te(S),j;i&&this.work_function&&(j=await this.work_function(f==="0".repeat(64)?this.public_key:f));let fe=ne(this.private_key,P),X={...S,signature:fe,work:j};await this.send_process(X,"receive"),x.push(P),f=P,w=BigInt(_)}return x}async change_representative(n,t){let i=await this.get_account_info(),c={type:"state",account:this.address,previous:i.frontier,representative:n,balance:i.balance,link:"0".repeat(64)},f=te(c),y;t&&this.work_function&&(y=await this.work_function(i.frontier));let w=ne(this.private_key,f),x={...c,signature:w,work:y};return await this.send_process(x,"change")}async change_rep(n,t){return await this.change_representative(n,t)}async get_account_info(n,t,i,c){return await this.rpc.get_account_info(this.address,n,t,i,c)}async get_account_receivable(n,t,i){return await this.rpc.get_account_receivable(this.address,n,t,i)}sign_message(n){return Dt(this.private_key,n)}},vt=class extends qe{static{s(this,"PrivateKeyAccount")}constructor(n,t,i){if(typeof t!="string"||t?.length!==64)throw Error("Priv key needs to be 64 character (hex) string");super(n,t,0,i),this._private_key=t}get private_key(){return this._private_key}};var kt={};Le(kt,{RPCWorkProvider:()=>Ft});var Ft=class{constructor(n){this.extra_payload={};this.rpc=n}static{s(this,"RPCWorkProvider")}async request_work(n){return(await this.rpc.call({action:"work_generate",hash:n,...this.extra_payload})).work}};window.banani={...je,...mt,...Pt,...kt};})(); +"use strict";(()=>{var dr=Object.create;var He=Object.defineProperty;var xr=Object.getOwnPropertyDescriptor;var Qr=Object.getOwnPropertyNames;var br=Object.getPrototypeOf,_r=Object.prototype.hasOwnProperty;var s=(e,n)=>He(e,"name",{value:n,configurable:!0}),In=(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),Le=(e,n)=>{for(var t in n)He(e,t,{get:n[t],enumerable:!0})},pr=(e,n,t,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let c of Qr(n))!_r.call(e,c)&&c!==t&&He(e,c,{get:()=>n[c],enumerable:!(i=xr(n,c))||i.enumerable});return e};var Et=(e,n,t)=>(t=e!=null?dr(br(e)):{},pr(n||!e||!e.__esModule?He(t,"default",{value:e,enumerable:!0}):t,e));var wt=M((Ki,cn)=>{cn.exports=sn;var Me=class extends Error{static{s(this,"AssertionError")}};Me.prototype.name="AssertionError";function sn(e,n){if(!e){var t=new Me(n);throw Error.captureStackTrace&&Error.captureStackTrace(t,sn),t}}s(sn,"assert")});var fn=M((Yi,hn)=>{function gn(e){return e.length}s(gn,"byteLength");function Sr(e){let n=e.byteLength,t="";for(let i=0;i{var ge="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",te=new Uint8Array(256);for(let e=0;e1&&e.charCodeAt(n-1)===61&&n--,n*3>>>2}s(Cn,"byteLength");function Ur(e){let n=e.byteLength,t="";for(let i=0;i>2]+ge[(e[i]&3)<<4|e[i+1]>>4]+ge[(e[i+1]&15)<<2|e[i+2]>>6]+ge[e[i+2]&63];return n%3===2?t=t.substring(0,t.length-1)+"=":n%3===1&&(t=t.substring(0,t.length-2)+"=="),t}s(Ur,"toString");function mr(e,n,t=0,i=Cn(n)){let c=Math.min(i,e.byteLength-t);for(let f=0,y=0;y>4,e[y++]=(B&15)<<4|x>>2,e[y++]=(x&3)<<6|_&63}return c}s(mr,"write");un.exports={byteLength:Cn,toString:Ur,write:mr}});var Bn=M((Vi,wn)=>{function En(e){return e.length>>>1}s(En,"byteLength");function vr(e){let n=e.byteLength;e=new DataView(e.buffer,e.byteOffset,n);let t="",i=0;for(let c=n-n%4;i=48&&e<=57)return e-48;if(e>=65&&e<=70)return e-65+10;if(e>=97&&e<=102)return e-97+10}s(yn,"hexValue")});var xn=M((Ti,dn)=>{function Bt(e){let n=0;for(let t=0,i=e.length;t=55296&&c<=56319&&t+1=56320&&f<=57343){n+=4,t++;continue}}c<=127?n+=1:c<=2047?n+=2:n+=3}return n}s(Bt,"byteLength");var dt;if(typeof TextDecoder<"u"){let e=new TextDecoder;dt=s(function(t){return e.decode(t)},"toString")}else dt=s(function(n){let t=n.byteLength,i="",c=0;for(;c0){let B=0;for(;B>x,x-=6;x>=0;)n[w++]=128|B>>x&63,x-=6;y+=B>=65536?2:1}return f},"write");dn.exports={byteLength:Bt,toString:dt,write:xt}});var _n=M((Oi,bn)=>{function Qn(e){return e.length*2}s(Qn,"byteLength");function Pr(e){let n=e.byteLength,t="";for(let i=0;i>8,x=w%256;e[t+y*2]=x,e[t+y*2+1]=B}return c}s(Fr,"write");bn.exports={byteLength:Qn,toString:Pr,write:Fr}});var mn=M((bt,Un)=>{var Kr=fn(),Rr=ln(),Yr=Bn(),Hr=xn(),Lr=_n(),Ve=new Uint8Array(Uint16Array.of(255).buffer)[0]===255;function xe(e){switch(e){case"ascii":return Kr;case"base64":return Rr;case"hex":return Yr;case"utf8":case"utf-8":case void 0:return Hr;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Lr;default:throw new Error(`Unknown encoding: ${e}`)}}s(xe,"codecFor");function pn(e){return e instanceof Uint8Array}s(pn,"isBuffer");function Mr(e){try{return xe(e),!0}catch{return!1}}s(Mr,"isEncoding");function Vr(e,n,t){let i=new Uint8Array(e);return n!==void 0&&bt.fill(i,n,0,i.byteLength,t),i}s(Vr,"alloc");function Gr(e){return new Uint8Array(e)}s(Gr,"allocUnsafe");function Tr(e){return new Uint8Array(e)}s(Tr,"allocUnsafeSlow");function Nr(e,n){return xe(n).byteLength(e)}s(Nr,"byteLength");function Or(e,n){if(e===n)return 0;let t=Math.min(e.byteLength,n.byteLength);e=new DataView(e.buffer,e.byteOffset,e.byteLength),n=new DataView(n.buffer,n.byteOffset,n.byteLength);let i=0;for(let c=t-t%4;if)return 1}return e.byteLength>n.byteLength?1:e.byteLengthc+f.byteLength,0));let t=new Uint8Array(n),i=0;for(let c of e){if(i+c.byteLength>t.byteLength){let f=c.subarray(0,t.byteLength-i);return t.set(f,i),t}t.set(c,i),i+=c.byteLength}return t}s(Jr,"concat");function jr(e,n,t=0,i=0,c=e.byteLength){if(c>0&&c=e.byteLength)throw new RangeError("sourceStart is out of range");if(c<0)throw new RangeError("sourceEnd is out of range");t>=n.byteLength&&(t=n.byteLength),c>e.byteLength&&(c=e.byteLength),n.byteLength-t=e.byteLength){if(c)return-1;t=e.byteLength-1}else if(t<0)if(c)t=0;else return-1;if(typeof n=="string")n=Qt(n,i);else if(typeof n=="number")return n=n&255,c?e.indexOf(n,t):e.lastIndexOf(n,t);if(n.byteLength===0)return-1;if(c){let f=-1;for(let y=t;ye.byteLength&&(t=e.byteLength-n.byteLength);for(let f=t;f>=0;f--){let y=!0;for(let w=0;w=c||i<=t?"":(t<0&&(t=0),i>c&&(i=c),(t!==0||i{var li=s((e,n)=>s(function(){return n||(0,e[Object.keys(e)[0]])((n={exports:{}}).exports,n),n.exports},"__require"),"__commonJS"),yi=(()=>{for(var e=new Uint8Array(128),n=0;n<64;n++)e[n<26?n+65:n<52?n+71:n<62?n-4:n*4-205]=n;return t=>{for(var i=t.length,c=new Uint8Array((i-(t[i-1]=="=")-(t[i-2]=="="))*3/4|0),f=0,y=0;f>4,c[y++]=B<<4|x>>2,c[y++]=x<<6|_}return c}})(),Ei=li({"wasm-binary:./blake2b.wat"(e,n){n.exports=yi("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")}}),wi=Ei(),Bi=WebAssembly.compile(wi);vn.exports=async e=>(await WebAssembly.instantiate(await Bi,e)).exports});var Mn=M((Zi,T)=>{var F=wt(),di=mn(),X=null,Pn=typeof WebAssembly<"u"&&kn()().then(e=>{X=e}),j=64,Ge=[];T.exports=v;var Fn=T.exports.BYTES_MIN=16,Kn=T.exports.BYTES_MAX=64,qi=T.exports.BYTES=32,Rn=T.exports.KEYBYTES_MIN=16,Yn=T.exports.KEYBYTES_MAX=64,zi=T.exports.KEYBYTES=32,Hn=T.exports.SALTBYTES=16,Ln=T.exports.PERSONALBYTES=16;function v(e,n,t,i,c){if(!(this instanceof v))return new v(e,n,t,i,c);if(!X)throw new Error("WASM not loaded. Wait for Blake2b.ready(cb)");e||(e=32),c!==!0&&(F(e>=Fn,"digestLength must be at least "+Fn+", was given "+e),F(e<=Kn,"digestLength must be at most "+Kn+", was given "+e),n!=null&&(F(n instanceof Uint8Array,"key must be Uint8Array or Buffer"),F(n.length>=Rn,"key must be at least "+Rn+", was given "+n.length),F(n.length<=Yn,"key must be at least "+Yn+", was given "+n.length)),t!=null&&(F(t instanceof Uint8Array,"salt must be Uint8Array or Buffer"),F(t.length===Hn,"salt must be exactly "+Hn+", was given "+t.length)),i!=null&&(F(i instanceof Uint8Array,"personal must be Uint8Array or Buffer"),F(i.length===Ln,"personal must be exactly "+Ln+", was given "+i.length))),Ge.length||(Ge.push(j),j+=216),this.digestLength=e,this.finalized=!1,this.pointer=Ge.pop(),this._memory=new Uint8Array(X.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),X.blake2b_init(this.pointer,this.digestLength),n&&(this.update(n),this._memory.fill(0,j,j+n.length),this._memory[this.pointer+200]=128)}s(v,"Blake2b");v.prototype._realloc=function(e){X.memory.grow(Math.max(0,Math.ceil(Math.abs(e-this._memory.length)/65536))),this._memory=new Uint8Array(X.memory.buffer)};v.prototype.update=function(e){return F(this.finalized===!1,"Hash instance finalized"),F(e instanceof Uint8Array,"input must be Uint8Array or Buffer"),j+e.length>this._memory.length&&this._realloc(j+e.length),this._memory.set(e,j),X.blake2b_update(this.pointer,j,j+e.length),this};v.prototype.digest=function(e){if(F(this.finalized===!1,"Hash instance finalized"),this.finalized=!0,Ge.push(this.pointer),X.blake2b_final(this.pointer),!e||e==="binary")return this._memory.slice(this.pointer+128,this.pointer+128+this.digestLength);if(typeof e=="string")return di.toString(this._memory,e,this.pointer+128,this.pointer+128+this.digestLength);F(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 xi(){}s(xi,"noop")});var Ne=M((no,k)=>{var R=wt(),be=Mn();function Te(e,n,t){var i=e[n]+e[t],c=e[n+1]+e[t+1];i>=4294967296&&c++,e[n]=i,e[n+1]=c}s(Te,"ADD64AA");function Vn(e,n,t,i){var c=e[n]+t;t<0&&(c+=4294967296);var f=e[n+1]+i;c>=4294967296&&f++,e[n]=c,e[n+1]=f}s(Vn,"ADD64AC");function Xn(e,n){return e[n]^e[n+1]<<8^e[n+2]<<16^e[n+3]<<24}s(Xn,"B2B_GET32");function q(e,n,t,i,c,f){var y=Qe[c],w=Qe[c+1],B=Qe[f],x=Qe[f+1];Te(d,e,n),Vn(d,e,y,w);var _=d[i]^d[e],S=d[i+1]^d[e+1];d[i]=S,d[i+1]=_,Te(d,t,i),_=d[n]^d[t],S=d[n+1]^d[t+1],d[n]=_>>>24^S<<8,d[n+1]=S>>>24^_<<8,Te(d,e,n),Vn(d,e,B,x),_=d[i]^d[e],S=d[i+1]^d[e+1],d[i]=_>>>16^S<<16,d[i+1]=S>>>16^_<<16,Te(d,t,i),_=d[n]^d[t],S=d[n+1]^d[t+1],d[n]=S>>>31^_<<1,d[n+1]=_>>>31^S<<1}s(q,"B2B_G");var Wn=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),Qi=[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(Qi.map(function(e){return e*2})),d=new Uint32Array(32),Qe=new Uint32Array(32);function qn(e,n){var t=0;for(t=0;t<16;t++)d[t]=e.h[t],d[t+16]=Wn[t];for(d[24]=d[24]^e.t,d[25]=d[25]^e.t/4294967296,n&&(d[28]=~d[28],d[29]=~d[29]),t=0;t<32;t++)Qe[t]=Xn(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]^d[t]^d[t+16]}s(qn,"blake2bCompress");var z=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 he(e,n,t,i){z.fill(0),this.b=new Uint8Array(128),this.h=new Uint32Array(16),this.t=0,this.c=0,this.outlen=e,z[0]=e,n&&(z[1]=n.length),z[2]=1,z[3]=1,t&&z.set(t,32),i&&z.set(i,48);for(var c=0;c<16;c++)this.h[c]=Wn[c]^Xn(z,c*4);n&&(zn(this,n),this.c=128)}s(he,"Blake2b");he.prototype.update=function(e){return R(e instanceof Uint8Array,"input must be Uint8Array or Buffer"),zn(this,e),this};he.prototype.digest=function(e){var n=!e||e==="binary"||e==="hex"?new Uint8Array(this.outlen):e;return R(n instanceof Uint8Array,'out must be "binary", "hex", Uint8Array, or Buffer'),R(n.length>=this.outlen,"out must have at least outlen bytes of space"),bi(this,n),e==="hex"?_i(n):n};he.prototype.final=he.prototype.digest;he.ready=function(e){be.ready(function(){e()})};function zn(e,n){for(var t=0;t>2]>>8*(t&3);return n}s(bi,"blake2bFinal");function _i(e){for(var n="",t=0;t=Gn,"outlen must be at least "+Gn+", was given "+n),R(n<=Tn,"outlen must be at most "+Tn+", was given "+n),t!=null&&(R(t instanceof Uint8Array,"key must be Uint8Array or Buffer"),R(t.length>=Nn,"key must be at least "+Nn+", was given "+t.length),R(t.length<=On,"key must be at most "+On+", was given "+t.length)),i!=null&&(R(i instanceof Uint8Array,"salt must be Uint8Array or Buffer"),R(i.length===Jn,"salt must be exactly "+Jn+", was given "+i.length)),c!=null&&(R(c instanceof Uint8Array,"personal must be Uint8Array or Buffer"),R(c.length===jn,"personal must be exactly "+jn+", was given "+c.length))),new Si(n,t,i,c)},"createHash");k.exports.ready=function(e){be.ready(function(){e()})};k.exports.WASM_SUPPORTED=be.SUPPORTED;k.exports.WASM_LOADED=!1;var Gn=k.exports.BYTES_MIN=16,Tn=k.exports.BYTES_MAX=64,eo=k.exports.BYTES=32,Nn=k.exports.KEYBYTES_MIN=16,On=k.exports.KEYBYTES_MAX=64,to=k.exports.KEYBYTES=32,Jn=k.exports.SALTBYTES=16,jn=k.exports.PERSONALBYTES=16;be.ready(function(e){e||(k.exports.WASM_LOADED=!0,k.exports=be)})});var Zn=M((io,Oe)=>{"use strict";(function(e){"use strict";let n=Ne();var t=s(function(r,A){this.hi=r|0,this.lo=A|0},"u64"),i=s(function(r){var A,o=new Float64Array(16);if(r)for(A=0;A>>32-A}s(W,"L32");function ie(r,A){var o=r[A+3]&255;return o=o<<8|r[A+2]&255,o=o<<8|r[A+1]&255,o<<8|r[A+0]&255}s(ie,"ld32");function Ht(r,A){var o=r[A]<<24|r[A+1]<<16|r[A+2]<<8|r[A+3],a=r[A+4]<<24|r[A+5]<<16|r[A+6]<<8|r[A+7];return new t(o,a)}s(Ht,"dl64");function $e(r,A,o){var a;for(a=0;a<4;a++)r[A+a]=o&255,o>>>=8}s($e,"st32");function Lt(r,A,o){r[A]=o.hi>>24&255,r[A+1]=o.hi>>16&255,r[A+2]=o.hi>>8&255,r[A+3]=o.hi&255,r[A+4]=o.lo>>24&255,r[A+5]=o.lo>>16&255,r[A+6]=o.lo>>8&255,r[A+7]=o.lo&255}s(Lt,"ts64");function et(r,A,o,a,I){var g,u=0;for(g=0;g>>8)-1}s(et,"vn");function Mt(r,A,o,a){return et(r,A,o,a,16)}s(Mt,"crypto_verify_16");function tt(r,A,o,a){return et(r,A,o,a,32)}s(tt,"crypto_verify_32");function Vt(r,A,o,a,I){var g=new Uint32Array(16),u=new Uint32Array(16),l=new Uint32Array(16),h=new Uint32Array(4),C,E,b;for(C=0;C<4;C++)u[5*C]=ie(a,4*C),u[1+C]=ie(o,4*C),u[6+C]=ie(A,4*C),u[11+C]=ie(o,16+4*C);for(C=0;C<16;C++)l[C]=u[C];for(C=0;C<20;C++){for(E=0;E<4;E++){for(b=0;b<4;b++)h[b]=u[(5*E+4*b)%16];for(h[1]^=W(h[0]+h[3]|0,7),h[2]^=W(h[1]+h[0]|0,9),h[3]^=W(h[2]+h[1]|0,13),h[0]^=W(h[3]+h[2]|0,18),b=0;b<4;b++)g[4*E+(E+b)%4]=h[b]}for(b=0;b<16;b++)u[b]=g[b]}if(I){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]-ie(a,4*C)|0,u[6+C]=u[6+C]-ie(A,4*C)|0;for(C=0;C<4;C++)$e(r,4*C,u[5*C]),$e(r,16+4*C,u[6+C])}else for(C=0;C<16;C++)$e(r,4*C,u[C]+l[C]|0)}s(Vt,"core");function Gt(r,A,o,a){return Vt(r,A,o,a,!1),0}s(Gt,"crypto_core_salsa20");function De(r,A,o,a){return Vt(r,A,o,a,!0),0}s(De,"crypto_core_hsalsa20");var Ce=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function nt(r,A,o,a,I,g,u){var l=new Uint8Array(16),h=new Uint8Array(64),C,E;if(!I)return 0;for(E=0;E<16;E++)l[E]=0;for(E=0;E<8;E++)l[E]=g[E];for(;I>=64;){for(Gt(h,l,u,Ce),E=0;E<64;E++)r[A+E]=(o?o[a+E]:0)^h[E];for(C=1,E=8;E<16;E++)C=C+(l[E]&255)|0,l[E]=C&255,C>>>=8;I-=64,A+=64,o&&(a+=64)}if(I>0)for(Gt(h,l,u,Ce),E=0;E>>=8}s(it,"add1305");var or=new Uint32Array([5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252]);function ot(r,A,o,a,I,g){var u,l,h,C,E=new Uint32Array(17),b=new Uint32Array(17),p=new Uint32Array(17),L=new Uint32Array(17),ce=new Uint32Array(17);for(h=0;h<17;h++)b[h]=p[h]=0;for(h=0;h<16;h++)b[h]=g[h];for(b[3]&=15,b[4]&=252,b[7]&=15,b[8]&=252,b[11]&=15,b[12]&=252,b[15]&=15;I>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++)ce[h]=p[h];for(it(p,or),u=-(p[16]>>>7)|0,h=0;h<17;h++)p[h]^=u&(ce[h]^p[h]);for(h=0;h<16;h++)L[h]=g[h+16];for(L[16]=0,it(p,L),h=0;h<16;h++)r[A+h]=p[h];return 0}s(ot,"crypto_onetimeauth");function Ot(r,A,o,a,I,g){var u=new Uint8Array(16);return ot(u,0,o,a,I,g),Mt(r,A,u,0)}s(Ot,"crypto_onetimeauth_verify");function At(r,A,o,a,I){var g;if(o<32)return-1;for(rt(r,0,A,0,o,a,I),ot(r,16,r,32,o-32,r),g=0;g<16;g++)r[g]=0;return 0}s(At,"crypto_secretbox");function at(r,A,o,a,I){var g,u=new Uint8Array(32);if(o<32||(Nt(u,0,32,a,I),Ot(A,16,A,32,o-32,u)!==0))return-1;for(rt(r,0,A,0,o,a,I),g=0;g<32;g++)r[g]=0;return 0}s(at,"crypto_secretbox_open");function O(r,A){var o;for(o=0;o<16;o++)r[o]=A[o]|0}s(O,"set25519");function ue(r){var A,o;for(o=0;o<16;o++)r[o]+=65536,A=Math.floor(r[o]/65536),r[(o+1)*(o<15?1:0)]+=A-1+37*(A-1)*(o===15?1:0),r[o]-=A*65536}s(ue,"car25519");function oe(r,A,o){for(var a,I=~(o-1),g=0;g<16;g++)a=I&(r[g]^A[g]),r[g]^=a,A[g]^=a}s(oe,"sel25519");function Ae(r,A){var o,a,I,g=i(),u=i();for(o=0;o<16;o++)u[o]=A[o];for(ue(u),ue(u),ue(u),a=0;a<2;a++){for(g[0]=u[0]-65517,o=1;o<15;o++)g[o]=u[o]-65535-(g[o-1]>>16&1),g[o-1]&=65535;g[15]=u[15]-32767-(g[14]>>16&1),I=g[15]>>16&1,g[14]&=65535,oe(u,g,1-I)}for(o=0;o<16;o++)r[2*o]=u[o]&255,r[2*o+1]=u[o]>>8}s(Ae,"pack25519");function Jt(r,A){var o=new Uint8Array(32),a=new Uint8Array(32);return Ae(o,r),Ae(a,A),tt(o,0,a,0)}s(Jt,"neq25519");function jt(r){var A=new Uint8Array(32);return Ae(A,r),A[0]&1}s(jt,"par25519");function It(r,A){var o;for(o=0;o<16;o++)r[o]=A[2*o]+(A[2*o+1]<<8);r[15]&=32767}s(It,"unpack25519");function Y(r,A,o){var a;for(a=0;a<16;a++)r[a]=A[a]+o[a]|0}s(Y,"A");function H(r,A,o){var a;for(a=0;a<16;a++)r[a]=A[a]-o[a]|0}s(H,"Z");function Q(r,A,o){var a,I,g=new Float64Array(31);for(a=0;a<31;a++)g[a]=0;for(a=0;a<16;a++)for(I=0;I<16;I++)g[a+I]+=A[a]*o[I];for(a=0;a<15;a++)g[a]+=38*g[a+16];for(a=0;a<16;a++)r[a]=g[a];ue(r),ue(r)}s(Q,"M");function K(r,A){Q(r,A,A)}s(K,"S");function Xt(r,A){var o=i(),a;for(a=0;a<16;a++)o[a]=A[a];for(a=253;a>=0;a--)K(o,o),a!==2&&a!==4&&Q(o,o,A);for(a=0;a<16;a++)r[a]=o[a]}s(Xt,"inv25519");function Wt(r,A){var o=i(),a;for(a=0;a<16;a++)o[a]=A[a];for(a=250;a>=0;a--)K(o,o),a!==1&&Q(o,o,A);for(a=0;a<16;a++)r[a]=o[a]}s(Wt,"pow2523");function Ue(r,A,o){var a=new Uint8Array(32),I=new Float64Array(80),g,u,l=i(),h=i(),C=i(),E=i(),b=i(),p=i();for(u=0;u<31;u++)a[u]=A[u];for(a[31]=A[31]&127|64,a[0]&=248,It(I,o),u=0;u<16;u++)h[u]=I[u],E[u]=l[u]=C[u]=0;for(l[0]=E[0]=1,u=254;u>=0;--u)g=a[u>>>3]>>>(u&7)&1,oe(l,h,g),oe(C,E,g),Y(b,l,C),H(l,l,C),Y(C,h,E),H(h,h,E),K(E,b),K(p,l),Q(l,C,l),Q(C,h,b),Y(b,l,C),H(l,l,C),K(h,l),H(C,E,p),Q(l,C,x),Y(l,l,E),Q(C,C,l),Q(l,E,p),Q(E,h,I),K(h,b),oe(l,h,g),oe(C,E,g);for(u=0;u<16;u++)I[u+16]=l[u],I[u+32]=C[u],I[u+48]=h[u],I[u+64]=E[u];var L=I.subarray(32),ce=I.subarray(16);return Xt(L,L),Q(ce,ce,L),Ae(r,ce),0}s(Ue,"crypto_scalarmult");function me(r,A){return Ue(r,A,y)}s(me,"crypto_scalarmult_base");function qt(r,A){return c(A,32),me(r,A)}s(qt,"crypto_box_keypair");function ve(r,A,o){var a=new Uint8Array(32);return Ue(a,o,A),De(r,f,a,Ce)}s(ve,"crypto_box_beforenm");var zt=At,Ar=at;function ar(r,A,o,a,I,g){var u=new Uint8Array(32);return ve(u,I,g),zt(r,A,o,a,u)}s(ar,"crypto_box");function Ir(r,A,o,a,I,g){var u=new Uint8Array(32);return ve(u,I,g),Ar(r,A,o,a,u)}s(Ir,"crypto_box_open");function le(){var r=0,A=0,o=0,a=0,I=65535,g,u,l;for(l=0;l>>16,o+=u&I,a+=u>>>16;return A+=r>>>16,o+=A>>>16,a+=o>>>16,new t(o&I|a<<16,r&I|A<<16)}s(le,"add64");function Zt(r,A){return new t(r.hi>>>A,r.lo>>>A|r.hi<<32-A)}s(Zt,"shr64");function ke(){var r=0,A=0,o;for(o=0;o>>A|r.lo<>>A|r.hi<>>A|r.hi<>>A|r.lo<=128;){for(h=0;h<16;h++)u[h]=Ht(A,8*h+E);for(h=0;h<80;h++){for(C=0;C<8;C++)I[C]=g[C];for(l=le(g[7],hr(g[4]),sr(g[4],g[5],g[6]),ur[h],u[h%16]),I[7]=le(l,gr(g[0]),cr(g[0],g[1],g[2])),I[3]=le(I[3],l),C=0;C<8;C++)g[(C+1)%8]=I[C];if(h%16===15)for(C=0;C<16;C++)u[C]=le(u[C],u[(C+9)%16],fr(u[(C+1)%16]),Cr(u[(C+14)%16]))}for(h=0;h<8;h++)g[h]=le(g[h],a[h]),a[h]=g[h];E+=128,o-=128}for(h=0;h<8;h++)Lt(r,8*h,a[h]);return o}s($t,"crypto_hashblocks");let ae=s((r,A)=>n(A).update(r).digest(),"crypto_hash_blake2b");var lr=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 en(r,A,o){var a=new Uint8Array(64),I=new Uint8Array(256),g,u=o;for(g=0;g<64;g++)a[g]=lr[g];for($t(a,A,o),o%=128,g=0;g<256;g++)I[g]=0;for(g=0;g=0;--I)a=o[I/8|0]>>(I&7)&1,tn(r,A,a),Pe(A,r),Pe(r,r),tn(r,A,a)}s(st,"scalarmult");function ye(r,A){var o=[i(),i(),i(),i()];O(o[0],m),O(o[1],V),O(o[2],B),Q(o[3],m,V),st(r,o,A)}s(ye,"scalarbase");function ct(r,A,o){var a=new Uint8Array(64),I=[i(),i(),i(),i()],g;o||c(A,32);a=ae(A,64),a[0]&=248,a[31]&=127,a[31]|=64,ye(I,a),Fe(r,I);return 0}s(ct,"crypto_sign_keypair");var Ke=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,A){var o,a,I,g;for(a=63;a>=32;--a){for(o=0,I=a-32,g=a-12;I>4)*Ke[I],o=A[I]>>8,A[I]&=255;for(I=0;I<32;I++)A[I]-=o*Ke[I];for(a=0;a<32;a++)A[a+1]+=A[a]>>8,r[a]=A[a]&255}s(gt,"modL");function ht(r){var A=new Float64Array(64),o;for(o=0;o<64;o++)A[o]=r[o];for(o=0;o<64;o++)r[o]=0;gt(r,A)}s(ht,"reduce");function nn(r,A,o,a){var I=new Uint8Array(64),g=new Uint8Array(64),u=new Uint8Array(64),l,h,C=new Float64Array(64),E=[i(),i(),i(),i()];let b=an(a);I=ae(a,64),I[0]&=248,I[31]&=127,I[31]|=64;var p=o+64;for(l=0;l>7&&H(r[0],w,r[0]),Q(r[3],r[0],r[1]),0)}s(yr,"unpackneg");function ft(r,A,o,a){var I,g=new Uint8Array(32),u=new Uint8Array(64),l=[i(),i(),i(),i()],h=[i(),i(),i(),i()];if(o<64||yr(h,a))return-1;for(I=0;I=0};function an(r){let A=new Uint8Array(64),o=[i(),i(),i(),i()],a,I=new Uint8Array(32);return A=ae(r,64),A[0]&=248,A[31]&=127,A[31]|=64,ye(o,A),Fe(I,o),I}s(an,"derivePublicFromSecret"),e.sign.keyPair=function(){var r=new Uint8Array(ee),A=new Uint8Array(se);return ct(r,A),{publicKey:r,secretKey:A}},e.sign.keyPair.fromSecretKey=function(r){if(P(r),r.length!==se)throw new Error("bad secret key size");var A=new Uint8Array(ee);return A=an(r),{publicKey:A,secretKey:new Uint8Array(r)}},e.sign.keyPair.fromSeed=function(r){if(P(r),r.length!==lt)throw new Error("bad seed size");for(var A=new Uint8Array(ee),o=new Uint8Array(se),a=0;a<32;a++)o[a]=r[a];return ct(A,o,!0),{publicKey:A,secretKey:o}},e.sign.publicKeyLength=ee,e.sign.secretKeyLength=se,e.sign.seedLength=lt,e.sign.signatureLength=J,e.hash=function(r){P(r);var A=new Uint8Array(yt);return en(A,r,r.length),A},e.hash.hashLength=yt,e.verify=function(r,A){return P(r,A),r.length===0||A.length===0||r.length!==A.length?!1:et(r,0,A,0,r.length)===0},e.setPRNG=function(r){c=r},function(){var r=typeof self<"u"?self.crypto||self.msCrypto:null;if(r&&r.getRandomValues){var A=65536;e.setPRNG(function(o,a){var I,g=new Uint8Array(a);for(I=0;Ivi,base32_to_uint8array:()=>er,construct_message_block_and_hash:()=>Ut,get_address_from_public_key:()=>Se,get_private_key_from_seed:()=>Dt,get_public_key_from_address:()=>re,get_public_key_from_private_key:()=>We,hash_block:()=>Z,hex_to_uint8array:()=>D,int_to_uint8array:()=>je,raw_to_whole:()=>St,sign_block_hash:()=>$,sign_message:()=>mt,uint8array_to_base32:()=>_t,uint8array_to_hex:()=>N,utf8_to_uint8array:()=>tr,verify_block_hash:()=>rr,verify_signed_message:()=>ki,whole_to_raw:()=>Xe});var Je=Et(Zn()),pe=Et(Ne());var Di="0000000000000000000000000000000000000000000000000000000000000006",pt="62616E616E6F6D73672D",_e=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];function N(e){let n="";for(let t=0;t0;f--)c-=t[n-f]*16**(2*(f-1));t[n-i]=Math.floor(c/16**(2*(i-1)))}return t}s(je,"int_to_uint8array");var $n=["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 _t(e){let n="";for(let t=0;t=5)y=e[c]>>w-5&31;else{let B=5-w;y=(e[c]<>8-B&2**(8-B)-1)}n+=$n[y]}return n}s(_t,"uint8array_to_base32");function Ui(e,n){let t="",i=e;for(let c=0;c=2**(n-1-c)?(t+="1",i-=2**(n-1-c)):t+="0";return t}s(Ui,"int_to_binary");function mi(e){let n=0;for(let t=0;tUi($n.indexOf(i),5)).join(""),t=new Uint8Array(Math.ceil(e.length*5/8));for(let i=0;in-i[1].length)throw Error(`Too many decimals, cannot exceed ${n}`);t=BigInt(i[0])*BigInt(10)**BigInt(n)+BigInt(i[1])*BigInt(10)**BigInt(n-i[1].length)}else t=BigInt(e)*BigInt(10)**BigInt(n);return t}s(Xe,"whole_to_raw");function St(e,n=nr){let t=e.toString(),i;if(t.length>n)i=t.slice(0,-n)+"."+t.slice(-n);else{let f=n-t.length;i="0."+"0".repeat(f>0?f:0)+t}let c=i.length;for(let f=0;fze,RPCWithBackup:()=>vt});var ze=class{constructor(n,t=!1){this.DECIMALS=void 0;this.debug=!1;this.rpc_url=n,this.use_pending=t}static{s(this,"RPC")}async call(n){this.debug&&console.log(JSON.stringify(n));let t=await fetch(this.rpc_url,{method:"POST",headers:this.headers??{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!t.ok&&this.debug&&console.log(await t.text()),!t.ok)throw Error(`Request to RPC node failed with status code ${t.status}`);let i=await t.json();if(i.error)throw Error(`RPC node response: ${i.error}`);return i}async get_block_count(){return await this.call({action:"block_count"})}async get_block_info(n){return await this.call({action:"block_info",hash:n,json_block:!0})}async get_blocks(n){return await this.call({action:"blocks",hashes:n,json_block:!0})}async get_blocks_info(n){return await this.call({action:"blocks_info",hashes:n,json_block:!0})}async get_representatives(){return await this.call({action:"representatives"})}async get_representatives_online(n){return await this.call({action:"representatives_online",weight:n?!0:void 0})}async get_account_history(n,t,i,c,f,y,w){return await this.call({action:"account_history",account:n,count:`${t}`,raw:i?!0:void 0,head:c,offset:f?`${f}`:void 0,reverse:y?!0:void 0,account_filter:w})}async get_account_info(n,t,i,c,f){return await this.call({action:"account_info",account:n,include_confirmed:t?!0:void 0,representative:i?!0:void 0,weight:c?!0:void 0,pending:f?!0:void 0})}async get_account_balance(n){return await this.call({action:"account_balance",account:n})}async get_accounts_balances(n){return await this.call({action:"accounts_balances",accounts:n})}async get_account_representative(n){return await this.call({action:"account_representative",account:n})}async get_accounts_representatives(n){return await this.call({action:"accounts_representatives",account:n})}async get_account_weight(n){return await this.call({action:"account_weight",account:n})}async get_account_receivable(n,t,i,c){return await this.call({action:this.use_pending?"pending":"receivable",account:n,count:t?`${t}`:void 0,threshold:i,source:c?!0:void 0})}async get_delegators(n,t,i,c){return await this.call({action:"delegators",account:n,threshold:t,count:i?`${i}`:void 0,start:c})}async get_delegators_count(n){return await this.call({action:"account_weight",account:n})}async get_telemetry(n,t,i){return await this.call({action:"telemetry",raw:n||void 0,address:t||void 0,port:i?`${i}`:void 0})}async get_version(){return await this.call({action:"version"})}},vt=class extends ze{static{s(this,"RPCWithBackup")}constructor(n,t,i=!1){if(n.length<2)throw Error("Must provide at least two RPC URLs");super(n[0],i),this.rpc_urls=n,this.timeout=t}async call(n){let t=0;for(;;)try{let i=await fetch(this.rpc_urls[t],{method:"POST",headers:this.headers??{"Content-Type":"application/json"},body:JSON.stringify(n),signal:AbortSignal.timeout(this.timeout)});if(!i.ok)throw Error(`Request to RPC node failed with status code ${i.status}`);let c=await i.json();if(c.error)throw Error(`RPC node response: ${c.error}`);return c}catch(i){if(!this.rpc_urls[++t])throw Error(i instanceof Error?i.toString():"RPC call error")}}};var Ft={};Le(Ft,{PrivateKeyAccount:()=>Pt,Wallet:()=>Ze});var Ze=class e{constructor(n,t,i=0,c){this.add_do_work=!0;if(this.rpc=n,typeof t!="string"||t?.length!==64)throw Error("Seed needs to be 64 character (hex) string");this.seed=t,this.index=i,this.work_function=c}static{s(this,"Wallet")}static gen_random_wallet(n){let t=new Uint8Array(32);crypto.getRandomValues(t);let i=N(t);return new e(n,i)}get private_key(){return Dt(this.seed,this.index)}get public_key(){return We(this.private_key)}get address(){return Se(this.public_key)}async send_process(n,t){return(await this.rpc.call({action:"process",json_block:"true",subtype:t,block:n,do_work:!n.work&&this.add_do_work?!0:void 0})).hash}async send(n,t,i,c,f){let y=Xe(t,this.rpc.DECIMALS),w=f??await this.get_account_info(void 0,!0),B=re(n);if(c===void 0){if(w.representative===void 0)throw Error("Missing field 'representative' in `cached_account_info`");c=w.representative}let x=BigInt(w.balance),_=x-y;if(_<0n)throw Error(`Insufficient funds to send. Cannot send more than balance; ie, Before balance (raw: ${x}) less than send amount (raw: ${y})`);let S={type:"state",account:this.address,previous:w.frontier,representative:c,balance:_.toString(),link:B,link_as_account:n},m=Z(S),V;i&&this.work_function&&(V=await this.work_function(w.frontier));let fe=$(this.private_key,m),W={...S,signature:fe,work:V};return await this.send_process(W,"send")}async send_fixed_final_bal(n,t,i,c,f){let y=Xe(t,this.rpc.DECIMALS),w=f??await this.get_account_info(void 0,!0),B=re(n);if(c===void 0){if(w.representative===void 0)throw Error("Missing field 'representative' in `cached_account_info`");c=w.representative}if(y<0n)throw Error("End balance cannot be negative");let x={type:"state",account:this.address,previous:w.frontier,representative:c,balance:y.toString(),link:B,link_as_account:n},_=Z(x),S;i&&this.work_function&&(S=await this.work_function(w.frontier));let m=$(this.private_key,_),V={...x,signature:m,work:S};return await this.send_process(V,"send")}async send_all(n,t,i){let c=await this.get_account_info(void 0,!0);return await this.send(n,St(BigInt(c.balance),this.rpc.DECIMALS),t,i,c)}async receive(n,t,i){let c=await this.rpc.get_block_info(n),f=0n,y;try{let m=await this.get_account_info(void 0,!0);y=m.frontier,i||(i=m.representative),f=BigInt(m.balance)}catch{y="0".repeat(64)}i===void 0&&(i=this.address);let w={type:"state",account:this.address,previous:y,representative:i,balance:(f+BigInt(c.amount)).toString(),link:n},B=Z(w),x;t&&this.work_function&&(x=await this.work_function(y==="0".repeat(64)?this.public_key:y));let _=$(this.private_key,B),S={...w,signature:_,work:x};return await this.send_process(S,"receive")}async receive_all(n=20,t,i){let c=(await this.get_account_receivable(n,t,!0)).blocks,f,y,w;try{let x=await this.get_account_info(void 0,!0);f=x.frontier,y=x.representative,w=BigInt(x.balance)}catch{f="0".repeat(64),w=BigInt(0)}y===void 0&&(y=this.address);let B=[];for(let x of Object.keys(c)){let _=(w+BigInt(c[x].amount)).toString(),S={type:"state",account:this.address,previous:f,representative:y,balance:_,link:x},m=Z(S),V;i&&this.work_function&&(V=await this.work_function(f==="0".repeat(64)?this.public_key:f));let fe=$(this.private_key,m),W={...S,signature:fe,work:V};await this.send_process(W,"receive"),B.push(m),f=m,w=BigInt(_)}return B}async change_representative(n,t){let i=await this.get_account_info(),c={type:"state",account:this.address,previous:i.frontier,representative:n,balance:i.balance,link:"0".repeat(64)},f=Z(c),y;t&&this.work_function&&(y=await this.work_function(i.frontier));let w=$(this.private_key,f),B={...c,signature:w,work:y};return await this.send_process(B,"change")}async change_rep(n,t){return await this.change_representative(n,t)}async get_account_info(n,t,i,c){return await this.rpc.get_account_info(this.address,n,t,i,c)}async get_account_receivable(n,t,i){return await this.rpc.get_account_receivable(this.address,n,t,i)}sign_message(n){return mt(this.private_key,n)}},Pt=class extends Ze{static{s(this,"PrivateKeyAccount")}constructor(n,t,i){if(typeof t!="string"||t?.length!==64)throw Error("Priv key needs to be 64 character (hex) string");super(n,t,0,i),this._private_key=t}get private_key(){return this._private_key}};var Yt={};Le(Yt,{RPCWorkProvider:()=>Kt,SlowJavascriptWorkProvider:()=>Rt});var ir=Et(Ne());var Pi="0xFFFFFE0000000000",Kt=class{constructor(n){this.extra_payload={};this.rpc=n}static{s(this,"RPCWorkProvider")}async request_work(n){return(await this.rpc.call({action:"work_generate",hash:n,...this.extra_payload})).work}},Rt=class{static{s(this,"SlowJavascriptWorkProvider")}async request_work(n){let t=0;for(;;){let i=je(t,8).reverse(),c=N((0,ir.default)(8,void 0,void 0,void 0,!0).update(i).update(D(n)).digest().reverse());if(BigInt(`0x${c}`)>BigInt(Pi))return N(i.reverse());t+=1}}};window.banani={...qe,...kt,...Ft,...Yt};})(); //!!! 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 9df7212..5d35990 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WXW2/aMBSA/wvP1brStev2BnRTq3UtKtV4mKbIOCfEIiTIdmjRtP8+h6TEiS/Hec35znd8O8b8/juS8CZHX0dzzvZEwg84TCgtylyOzkY7IlMVohkRAsS5gXxI5TZT3Ibl8ejrxfjm39nJ9zyfmQb1EclZMplOCd2UO2t2G8Y8Bd/MebFnMXC7SQN8riXJMrAsRv3dl9ks0pRkJKfQWQ+WS+AJocpjUF3l+OraVN4xIQt+mGYF3fikOheuRUbaUgOU5DV0sO/oIHngkI9ggPg+TwpE2SABsmegoPpmlWFHoAMOEi+KkqMnzIIPKvKSchBpkcXBdfSMoFI7xUMuiWR7fDY9OKDAEtg6lYj4BAUIRdO1AnHqXIi2OznUbuK+Iu5GRPvuCMyOy+8YUodAVb4+0wFU9Fgs2DonsuTglmkQKhTo0ETo2Jzbd4r6FLeQwZqo20t4193EwqS4D1Gp8P17mtWkA15R9xA/5RnLnZeACx5cwH8l+FMGFAssgEhf1KZsQfLDJI5VmtNq4YK0qC9Y5P5F7jE+3S/gghW5y9SGfRL7O1DTuN+Bvbu5XsvWIQ+76g6uP/cyP375fHE1NrPnHBL25nDUQcx0vDUmWfZSpfZNnWCQaUoEo25XGw6y3RGRWj1VIMjwoK4denAPSIsH+RaqtWCWknwNbmkfCjOXq0phF9YxzLNUjyNDcPyIZqpT+73MqVQdYAi0GOZ5nDw+RbffZvc/Jw+LVrQnnFUvOHHeAbq2S120IgIux5EsolI11w3hnBxaX9IMR5zbuK72+pOmpSpH8pLKaKs6hKwhWlXrG5E8jtLOYWtLYDmecmuQEam7MUp4sY125SpjNNqAdTIeHCmyq/9KV2SdKQBiVwkrjBU4jaROIf3rq1fCjg8sog00tJCW4ilWbVu9izZvG/Up4A0/nQbkESoGFxqQR8jJa8W+di+F1qXHPRqhHrnNiXd1SA/BZE0bOU1N3KNp51/NoL4DbDobF6xVm4c7FeQTyuQG31ST8ij3wFlyQDbEgHBhtfIQ+/bGCnrEx4NVzUsdNJtPjxuaP/8BUgLZh0oUAAA=" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WX32/aMBCA/xeeq3Wla9f1DeimdutaVKrxME2RcS7EIiSR7UDRtP99DkmJk9g+5zX33Xf+dcb8/juS8CZHt6M5Zzsi4QccJpRmRSpHZ6OcyFiFaEKEAHHeQz7EcpsobsPScHR7Mb75d3byvcxnfYP6iOQsmYynhG6K3JjdhDFPxjdznu1YCNxs0gCXa5Fk++9kRwTlLJdurZ11VViSJAHDclffXZn1NkxJQlIKrRVnqQQeEao8PaqtHF9d95X3TMiMH6ZJRjcuqc75a5GRNtQAJdn7DvYdHST3HPIR9BA/pFGGKGvEQ/YCFFRnrhLsCLTAQeJFVnD0hBnwQUVeYw4izpLQu46e4VUqVzykkki2w2fTgT0KLIGtY4mIT5CHUNRdKxCnzvlo25ND7X3cVcTeiGjfHYHZcfktQ2oRqMrVZzqAip6yBVunRBYc7DINQoUCHZrwHZt1+05Rl+IOElgTdXsJ57r3MT8p7kNUKvzwnmY06YBT1D7Ez2nCUuslYIMHF3BfCe6UAcU8CyDSV7UpW5D8MAlDlWa1GjgvLerzFtl/kTuMS/cLuGBZajM1YZfE/CTUNPZ3YOdurtaycchDXt7B1edO5scvny+uxv3sOYeIvVkcVRAzHW+NSZK8lqldUyvoZZoSwajd1YS9bPdExEZPGfAyPKprhx7sA9LiXr6Fai2YxSRdg13ahfzMxapUmIVVDPMs1eOoJzh+RDPVqf1WpFSqDugJtBjmeZo8PQd3X2cPPyePi0a0I5yVLzhx3gLatktdtCICLseBzIJCNdcN4ZwcGl9UD0ecm7i29vqTpqUqR/KCymCrOoSsIViV6xuQNAzi1mFrSmA5jnJrkAGpujGIeLYN8mKVMBpswDgZB44Uyas/6yVZZQqA0FbCCGMFTiOpUkj3+uqUMOMDi2gD9S2kpTiKldtW7aLJ20RdCnjDT2cPcggVgwt7kEPIyb5k9+1LoXHpcYdGqEdufeJtHdJBMFndRlZTHXdomvmXM6juAJPOxHlr1ebhTgW5hDK6wTe1TzmUO+AsOiAb0oNwYbnyELr2xgg6xMeDVc5LHTSTT4/3NH/+A5csbqasFAAA" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 85e9ddc..73cd21c 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/classes/PrivateKeyAccount.html b/docs/classes/PrivateKeyAccount.html index c1fe8c2..b84721b 100644 --- a/docs/classes/PrivateKeyAccount.html +++ b/docs/classes/PrivateKeyAccount.html @@ -1,5 +1,5 @@ PrivateKeyAccount | banani

Class PrivateKeyAccount

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

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

_private_key: string
add_do_work: boolean = true
index: number

Seed index. Seeds can have multiple private keys and addresses

-
seed: string
work_function?: WorkFunction

Accessors

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

  • get private_key(): string
  • Returns string

  • get public_key(): string
  • Returns string

Methods

  • Parameters

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

    Returns Promise<string>

  • Parameters

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

      banano address to change representative to

      +
    • Optional work_function: WorkFunction

    Returns PrivateKeyAccount

Properties

_private_key: string
add_do_work: boolean = true
index: number

Seed index. Seeds can have multiple private keys and addresses

+
seed: string
work_function?: WorkFunction

Accessors

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

  • get private_key(): string
  • Returns string

  • get public_key(): string
  • Returns string

Methods

  • Parameters

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

    Returns Promise<string>

  • Parameters

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

      banano address to change representative to

    • Optional gen_work: boolean

      whether or not to call work function to generate work

      -

    Returns Promise<string>

  • Parameters

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

    Returns Promise<AccountInfoRPC>

  • Parameters

    • Optional block_hash: string

      send block to receive

      +

    Returns Promise<string>

  • Parameters

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

    Returns Promise<AccountInfoRPC>

  • Parameters

    • Optional block_hash: string

      send block to receive

    • Optional gen_work: boolean

      whether or not to call work function to generate work

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

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

      -

    Returns Promise<string>

  • Parameters

    • Optional count: number = 20

      Max amount of blocks to receive +

    Returns Promise<string>

  • Parameters

    • Optional count: number = 20

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

    • Optional threshold: `${number}`

      Min amount of Banano to receive in whole

    • Optional gen_work: boolean

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

      -

    Returns Promise<string[]>

  • Parameters

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

      address to send to

      +

    Returns Promise<string[]>

  • Parameters

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

      address to send to

    • Optional amount: `${number}`

      amount in whole bananos to send

    • Optional gen_work: boolean

      whether or not to call work function to generate work

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

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

    • Optional cached_account_info: AccountInfoRPC

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

      -

    Returns Promise<string>

  • Parameters

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

    Returns Promise<string>

\ No newline at end of file +

Returns Promise<string>

  • Parameters

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

    Returns Promise<string>

  • Send by passing in a fixed final balance

    +

    Parameters

    • to: `ban_${string}` | `nano_${string}`
    • end_bal: `${number}`
    • Optional gen_work: boolean
    • Optional representative: `ban_${string}` | `nano_${string}`
    • Optional cached_account_info: AccountInfoRPC

    Returns Promise<string>

\ No newline at end of file diff --git a/docs/classes/RPC.html b/docs/classes/RPC.html index 49f5379..f1f5db4 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

Properties

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: undefined = undefined
debug: boolean = false
headers: undefined | Record<string, string>

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

-
rpc_url: string
use_pending: boolean

Methods

  • The function that sends the RPC POST request

    -

    Type Parameters

    • T extends Record<string, any>

    Parameters

    • payload: Record<string, any>

    Returns Promise<T>

\ No newline at end of file +

Returns RPC

Properties

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

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

+
rpc_url: string
use_pending: boolean

Methods

  • The function that sends the RPC POST request

    +

    Type Parameters

    • T extends Record<string, any>

    Parameters

    • payload: Record<string, any>

    Returns Promise<T>

\ No newline at end of file diff --git a/docs/classes/RPCWithBackup.html b/docs/classes/RPCWithBackup.html index ad9cc4b..6bb0a69 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

Properties

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: undefined = undefined
debug: boolean = false
headers: undefined | Record<string, string>

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

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

Methods

  • The function that sends the RPC POST request

    -

    Type Parameters

    • T extends Record<string, any>

    Parameters

    • payload: Record<string, any>

    Returns Promise<T>

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

    Properties

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

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

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

    Methods

    • The function that sends the RPC POST request

      +

      Type Parameters

      • T extends Record<string, any>

      Parameters

      • payload: Record<string, any>

      Returns Promise<T>

    \ No newline at end of file diff --git a/docs/classes/RPCWorkProvider.html b/docs/classes/RPCWorkProvider.html index fe6a6ab..9ba0917 100644 --- a/docs/classes/RPCWorkProvider.html +++ b/docs/classes/RPCWorkProvider.html @@ -1,6 +1,7 @@ -RPCWorkProvider | banani

    Class RPCWorkProvider

    Constructors

    constructor +RPCWorkProvider | banani

    Class RPCWorkProvider

    Request work from an RPC provider that supports the work_generate RPC call

    +

    Implements

    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/SlowJavascriptWorkProvider.html b/docs/classes/SlowJavascriptWorkProvider.html new file mode 100644 index 0000000..0c162dc --- /dev/null +++ b/docs/classes/SlowJavascriptWorkProvider.html @@ -0,0 +1,4 @@ +SlowJavascriptWorkProvider | banani

    Class SlowJavascriptWorkProvider

    Use Javascript to slowly generate work for blocks

    +

    Implements

    Constructors

    Methods

    Constructors

    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 079c5cb..70a7827 100644 --- a/docs/classes/Wallet.html +++ b/docs/classes/Wallet.html @@ -1,5 +1,5 @@ Wallet | banani

    Class Wallet

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

    -

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    • Parameters

      • rpc: RPCInterface
      • Optional seed: string

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

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

      Returns Wallet

    Properties

    add_do_work: boolean = true
    index: number

    Seed index. Seeds can have multiple private keys and addresses

    -
    seed: string
    work_function?: WorkFunction

    Accessors

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

    • get private_key(): string
    • Returns string

    • get public_key(): string
    • Returns string

    Methods

    • Parameters

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

      Returns Promise<string>

    • Parameters

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

        banano address to change representative to

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

      Returns Wallet

    Properties

    add_do_work: boolean = true
    index: number

    Seed index. Seeds can have multiple private keys and addresses

    +
    seed: string
    work_function?: WorkFunction

    Accessors

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

    • get private_key(): string
    • Returns string

    • get public_key(): string
    • Returns string

    Methods

    • Parameters

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

      Returns Promise<string>

    • Parameters

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

        banano address to change representative to

      • Optional gen_work: boolean

        whether or not to call work function to generate work

        -

      Returns Promise<string>

    • Parameters

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

      Returns Promise<AccountInfoRPC>

    • Parameters

      • Optional block_hash: string

        send block to receive

        +

      Returns Promise<string>

    • Parameters

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

      Returns Promise<AccountInfoRPC>

    • Parameters

      • Optional block_hash: string

        send block to receive

      • Optional gen_work: boolean

        whether or not to call work function to generate work

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

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

        -

      Returns Promise<string>

    • Parameters

      • Optional count: number = 20

        Max amount of blocks to receive +

      Returns Promise<string>

    • Parameters

      • Optional count: number = 20

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

      • Optional threshold: `${number}`

        Min amount of Banano to receive in whole

      • Optional gen_work: boolean

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

        -

      Returns Promise<string[]>

    • Parameters

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

        address to send to

        +

      Returns Promise<string[]>

    • Parameters

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

        address to send to

      • Optional amount: `${number}`

        amount in whole bananos to send

      • Optional gen_work: boolean

        whether or not to call work function to generate work

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

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

      • Optional cached_account_info: AccountInfoRPC

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

        -

      Returns Promise<string>

    • Parameters

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

      Returns Promise<string>

    • Parameters

      • message: string

      Returns string

    \ No newline at end of file +

    Returns Promise<string>

    • Parameters

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

      Returns Promise<string>

    • Send by passing in a fixed final balance

      +

      Parameters

      • to: `ban_${string}` | `nano_${string}`
      • end_bal: `${number}`
      • Optional gen_work: boolean
      • Optional representative: `ban_${string}` | `nano_${string}`
      • Optional cached_account_info: AccountInfoRPC

      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 423c54b..8959973 100644 --- a/docs/functions/base32_to_uint8array.html +++ b/docs/functions/base32_to_uint8array.html @@ -1 +1 @@ -base32_to_uint8array | banani

    Function base32_to_uint8array

    • Parameters

      • base32: string

      Returns Uint8Array

    \ No newline at end of file +base32_to_uint8array | banani

    Function base32_to_uint8array

    • Parameters

      • base32: string

      Returns Uint8Array

    \ No newline at end of file diff --git a/docs/functions/construct_message_block_and_hash.html b/docs/functions/construct_message_block_and_hash.html index 987f769..4aaae2b 100644 --- a/docs/functions/construct_message_block_and_hash.html +++ b/docs/functions/construct_message_block_and_hash.html @@ -1,2 +1,2 @@ construct_message_block_and_hash | banani

    Function construct_message_block_and_hash

    • For use in sign_message and verify_signed_message

      -

      Parameters

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

      Returns string

    \ No newline at end of file +

    Parameters

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

    Returns string

    \ No newline at end of file diff --git a/docs/functions/get_address_from_public_key.html b/docs/functions/get_address_from_public_key.html index 56b2a81..8d01ed6 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 a839296..60eed10 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 f7e321d..fd73358 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 7cde11b..73b2585 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 585ebeb..ee90a3e 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 02268a3..934778d 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 b0b42e2..c161109 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 e4a90ec..72729db 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 60c216f..7965a80 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 b4b5d50..d7b8e7d 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 d303b72..35e90cb 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 a1b3425..bc1e6a1 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 fd0c3f0..9c83955 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 d2d8a84..e32a770 100644 --- a/docs/functions/verify_block_hash.html +++ b/docs/functions/verify_block_hash.html @@ -1,2 +1,2 @@ verify_block_hash | banani

    Function verify_block_hash

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

      -

      Parameters

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

      Returns boolean

    \ No newline at end of file +

    Parameters

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

    Returns boolean

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

    Function verify_signed_message

    • Use to verify message signatures. A wrapper for verify_block_hash

      Parameters

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

      Returns boolean

      Whether the message signature was actually signed by that address

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/functions/whole_to_raw.html b/docs/functions/whole_to_raw.html index ca82e97..80b6ee1 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 1225ff0..72a30a0 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/index.html b/docs/index.html index f22ff01..dca855d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2,7 +2,7 @@

    how to buy banani from beatrice how to install banani on react.js

    -

    Banani is a library for the Banano cryptocurrency that will support sending, receiving, changing rep, RPC calls, message signing, wallet management, etc. It aims to be a more powerful and sensible version of @bananocoin/bananojs. Banani takes heavy inspiration from the Python bananopie (which I also wrote), which in turn takes some inspiration from my experiences with ethers.js.

    +

    Banani is a library for the Banano cryptocurrency that will support sending, receiving, changing rep, RPC calls, message signing, wallet management, etc. It aims to be a more powerful and sensible version of @bananocoin/bananojs. Banani takes heavy inspiration from the Python bananopie (which I [prussia] also wrote), which in turn takes some inspiration from my experiences with ethers.js.

    Please report any bugs or request features by opening an Github issue. You can ask for help or ask questions in the #frankensteins-lab channel of the Banano discord and people will be typically be eager to assist if they can.

    Installing

    npm install banani
     
    diff --git a/docs/interfaces/AccountBalanceRPC.html b/docs/interfaces/AccountBalanceRPC.html index 8399ba1..67cb99b 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 90d2957..a725b3b 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 18188b8..1f3fde7 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 a115d53..42424bf 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 b1e1ad7..0fcb4ff 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 083f5bf..9e2585b 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 5578a40..6c918c1 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 4792008..c0f30fd 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 77eefae..134fc2f 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 70e2f27..ca0d3e0 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 a2738ef..18216e8 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 17b2373..eea7e84 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 b15643a..6c55cf9 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 717b92d..2a3bcbb 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 16ec71a..c258db3 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 8c16e80..cc3508d 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 eda1d32..3278ff4 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 350a53f..e7f3bd6 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 52ea3e8..80b21f8 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 a6fdc38..c84657e 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 45e48c1..0455cb0 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 ffb5fab..2156557 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 6acb3d6..8629798 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 cba78a7..2726116 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 a216fc7..8c07525 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/TelemetryAddressRPC.html b/docs/interfaces/TelemetryAddressRPC.html index b75be59..0d9e1bc 100644 --- a/docs/interfaces/TelemetryAddressRPC.html +++ b/docs/interfaces/TelemetryAddressRPC.html @@ -1,4 +1,4 @@ -TelemetryAddressRPC | banani

    Interface TelemetryAddressRPC

    interface TelemetryAddressRPC {
        account_count: `${number}`;
        active_difficulty: `${number}`;
        bandwidth_cap: `${number}`;
        block_count: `${number}`;
        cemented_count: `${number}`;
        genesis_block: string;
        major_version: `${number}`;
        maker: string;
        minor_version: `${number}`;
        network_identifier: string;
        node_id: string;
        patch_version: `${number}`;
        peer_count: `${number}`;
        pre_release_version: `${number}`;
        protocol_version: `${number}`;
        signature: string;
        timestamp: `${number}`;
        unchecked_count: `${number}`;
        uptime: `${number}`;
    }

    Hierarchy (view full)

    Properties

    account_count +TelemetryAddressRPC | banani

    Interface TelemetryAddressRPC

    interface TelemetryAddressRPC {
        account_count: `${number}`;
        active_difficulty: `${number}`;
        bandwidth_cap: `${number}`;
        block_count: `${number}`;
        cemented_count: `${number}`;
        genesis_block: string;
        major_version: `${number}`;
        maker: string;
        minor_version: `${number}`;
        network_identifier: string;
        node_id: string;
        patch_version: `${number}`;
        peer_count: `${number}`;
        pre_release_version: `${number}`;
        protocol_version: `${number}`;
        signature: string;
        timestamp: `${number}`;
        unchecked_count: `${number}`;
        uptime: `${number}`;
    }

    Hierarchy (view full)

    Properties

    account_count: `${number}`
    active_difficulty: `${number}`
    bandwidth_cap: `${number}`
    block_count: `${number}`
    cemented_count: `${number}`
    genesis_block: string
    major_version: `${number}`
    maker: string
    minor_version: `${number}`
    network_identifier: string
    node_id: string
    patch_version: `${number}`
    peer_count: `${number}`
    pre_release_version: `${number}`
    protocol_version: `${number}`
    signature: string
    timestamp: `${number}`
    unchecked_count: `${number}`
    uptime: `${number}`
    \ No newline at end of file +

    Properties

    account_count: `${number}`
    active_difficulty: `${number}`
    bandwidth_cap: `${number}`
    block_count: `${number}`
    cemented_count: `${number}`
    genesis_block: string
    major_version: `${number}`
    maker: string
    minor_version: `${number}`
    network_identifier: string
    node_id: string
    patch_version: `${number}`
    peer_count: `${number}`
    pre_release_version: `${number}`
    protocol_version: `${number}`
    signature: string
    timestamp: `${number}`
    unchecked_count: `${number}`
    uptime: `${number}`
    \ No newline at end of file diff --git a/docs/interfaces/TelemetryRPC.html b/docs/interfaces/TelemetryRPC.html index d84a2f2..047f274 100644 --- a/docs/interfaces/TelemetryRPC.html +++ b/docs/interfaces/TelemetryRPC.html @@ -1,4 +1,4 @@ -TelemetryRPC | banani

    Interface TelemetryRPC

    interface TelemetryRPC {
        account_count: `${number}`;
        active_difficulty: `${number}`;
        bandwidth_cap: `${number}`;
        block_count: `${number}`;
        cemented_count: `${number}`;
        genesis_block: string;
        major_version: `${number}`;
        maker: string;
        minor_version: `${number}`;
        network_identifier: string;
        node_id: string;
        patch_version: `${number}`;
        peer_count: `${number}`;
        pre_release_version: `${number}`;
        protocol_version: `${number}`;
        signature: string;
        timestamp: `${number}`;
        unchecked_count: `${number}`;
        uptime: `${number}`;
    }

    Hierarchy (view full)

    Properties

    account_count +TelemetryRPC | banani

    Interface TelemetryRPC

    interface TelemetryRPC {
        account_count: `${number}`;
        active_difficulty: `${number}`;
        bandwidth_cap: `${number}`;
        block_count: `${number}`;
        cemented_count: `${number}`;
        genesis_block: string;
        major_version: `${number}`;
        maker: string;
        minor_version: `${number}`;
        network_identifier: string;
        node_id: string;
        patch_version: `${number}`;
        peer_count: `${number}`;
        pre_release_version: `${number}`;
        protocol_version: `${number}`;
        signature: string;
        timestamp: `${number}`;
        unchecked_count: `${number}`;
        uptime: `${number}`;
    }

    Hierarchy (view full)

    Properties

    account_count: `${number}`
    active_difficulty: `${number}`
    bandwidth_cap: `${number}`
    block_count: `${number}`
    cemented_count: `${number}`
    genesis_block: string
    major_version: `${number}`
    maker: string
    minor_version: `${number}`
    network_identifier: string
    node_id: string
    patch_version: `${number}`
    peer_count: `${number}`
    pre_release_version: `${number}`
    protocol_version: `${number}`
    signature: string
    timestamp: `${number}`
    unchecked_count: `${number}`
    uptime: `${number}`
    \ No newline at end of file +

    Properties

    account_count: `${number}`
    active_difficulty: `${number}`
    bandwidth_cap: `${number}`
    block_count: `${number}`
    cemented_count: `${number}`
    genesis_block: string
    major_version: `${number}`
    maker: string
    minor_version: `${number}`
    network_identifier: string
    node_id: string
    patch_version: `${number}`
    peer_count: `${number}`
    pre_release_version: `${number}`
    protocol_version: `${number}`
    signature: string
    timestamp: `${number}`
    unchecked_count: `${number}`
    uptime: `${number}`
    \ No newline at end of file diff --git a/docs/interfaces/TelemetryRawRPC.html b/docs/interfaces/TelemetryRawRPC.html index e98ca91..1c7a04f 100644 --- a/docs/interfaces/TelemetryRawRPC.html +++ b/docs/interfaces/TelemetryRawRPC.html @@ -1,4 +1,4 @@ -TelemetryRawRPC | banani

    Interface TelemetryRawRPC

    interface TelemetryRawRPC {
        account_count: `${number}`;
        active_difficulty: `${number}`;
        address: string;
        bandwidth_cap: `${number}`;
        block_count: `${number}`;
        cemented_count: `${number}`;
        genesis_block: string;
        major_version: `${number}`;
        maker: string;
        minor_version: `${number}`;
        network_identifier: string;
        node_id: string;
        patch_version: `${number}`;
        peer_count: `${number}`;
        port: `${number}`;
        pre_release_version: `${number}`;
        protocol_version: `${number}`;
        signature: string;
        timestamp: `${number}`;
        unchecked_count: `${number}`;
        uptime: `${number}`;
    }

    Hierarchy (view full)

    Properties

    account_count +TelemetryRawRPC | banani

    Interface TelemetryRawRPC

    interface TelemetryRawRPC {
        account_count: `${number}`;
        active_difficulty: `${number}`;
        address: string;
        bandwidth_cap: `${number}`;
        block_count: `${number}`;
        cemented_count: `${number}`;
        genesis_block: string;
        major_version: `${number}`;
        maker: string;
        minor_version: `${number}`;
        network_identifier: string;
        node_id: string;
        patch_version: `${number}`;
        peer_count: `${number}`;
        port: `${number}`;
        pre_release_version: `${number}`;
        protocol_version: `${number}`;
        signature: string;
        timestamp: `${number}`;
        unchecked_count: `${number}`;
        uptime: `${number}`;
    }

    Hierarchy (view full)

    Properties

    account_count: `${number}`
    active_difficulty: `${number}`
    address: string
    bandwidth_cap: `${number}`
    block_count: `${number}`
    cemented_count: `${number}`
    genesis_block: string
    major_version: `${number}`
    maker: string
    minor_version: `${number}`
    network_identifier: string
    node_id: string
    patch_version: `${number}`
    peer_count: `${number}`
    port: `${number}`
    pre_release_version: `${number}`
    protocol_version: `${number}`
    signature: string
    timestamp: `${number}`
    unchecked_count: `${number}`
    uptime: `${number}`
    \ No newline at end of file +

    Properties

    account_count: `${number}`
    active_difficulty: `${number}`
    address: string
    bandwidth_cap: `${number}`
    block_count: `${number}`
    cemented_count: `${number}`
    genesis_block: string
    major_version: `${number}`
    maker: string
    minor_version: `${number}`
    network_identifier: string
    node_id: string
    patch_version: `${number}`
    peer_count: `${number}`
    port: `${number}`
    pre_release_version: `${number}`
    protocol_version: `${number}`
    signature: string
    timestamp: `${number}`
    unchecked_count: `${number}`
    uptime: `${number}`
    \ No newline at end of file diff --git a/docs/interfaces/VersionRPC.html b/docs/interfaces/VersionRPC.html index bc63c24..edb8736 100644 --- a/docs/interfaces/VersionRPC.html +++ b/docs/interfaces/VersionRPC.html @@ -1,4 +1,4 @@ -VersionRPC | banani

    Interface VersionRPC

    interface VersionRPC {
        build_info: string;
        network: string;
        network_identifier: string;
        node_vendor: string;
        protocol_version: `${number}`;
        rpc_version: `${number}`;
        store_vendor: string;
        store_version: `${number}`;
    }

    Properties

    build_info +VersionRPC | banani

    Interface VersionRPC

    interface VersionRPC {
        build_info: string;
        network: string;
        network_identifier: string;
        node_vendor: string;
        protocol_version: `${number}`;
        rpc_version: `${number}`;
        store_vendor: string;
        store_version: `${number}`;
    }

    Properties

    build_info: string
    network: string
    network_identifier: string
    node_vendor: string
    protocol_version: `${number}`
    rpc_version: `${number}`
    store_vendor: string
    store_version: `${number}`
    \ No newline at end of file +

    Properties

    build_info: string
    network: string
    network_identifier: string
    node_vendor: string
    protocol_version: `${number}`
    rpc_version: `${number}`
    store_vendor: string
    store_version: `${number}`
    \ No newline at end of file diff --git a/docs/interfaces/WorkProvider.html b/docs/interfaces/WorkProvider.html index 3b4455c..795069e 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: WorkFunction;
    }

    Implemented by

    Properties

    Properties

    request_work: WorkFunction
    \ No newline at end of file diff --git a/docs/modules.html b/docs/modules.html index 2192219..aeae1cd 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -2,6 +2,7 @@ RPC RPCWithBackup RPCWorkProvider +SlowJavascriptWorkProvider Wallet

    Interfaces

    AccountBalanceRPC AccountHistoryBlock diff --git a/docs/types/Address.html b/docs/types/Address.html index c04e71f..cde0356 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 72c5e1c..21c686f 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 eee38d6..a9dd841 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 d7fc51c..4f9da87 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 119c37d..55153c7 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 dbf1775..71434c7 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 a48151d..acf6025 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 60c0935..197872e 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 886dd75..cd7fff6 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 72c35d2..0b59425 100644 --- a/docs/types/WorkFunction.html +++ b/docs/types/WorkFunction.html @@ -1 +1 @@ -WorkFunction | banani

    Type alias WorkFunction

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

    Type declaration

      • (block_hash): Promise<string>
      • Parameters

        Returns Promise<string>

    \ No newline at end of file +WorkFunction | banani

    Type alias WorkFunction

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

    Type declaration

      • (block_hash): Promise<string>
      • Parameters

        Returns Promise<string>

    \ No newline at end of file diff --git a/docs/variables/NANO_DECIMALS.html b/docs/variables/NANO_DECIMALS.html index 29dae28..b042878 100644 --- a/docs/variables/NANO_DECIMALS.html +++ b/docs/variables/NANO_DECIMALS.html @@ -1,2 +1,2 @@ NANO_DECIMALS | banani

    Variable NANO_DECIMALSConst

    NANO_DECIMALS: number = 30

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

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/node_test/index.js b/node_test/index.js index 676f1d9..fa1aeb7 100644 --- a/node_test/index.js +++ b/node_test/index.js @@ -26,6 +26,9 @@ console.log("sig verify 2 (should be false)", banani.verify_signed_message(banan console.log("verify block hash test", banani.verify_block_hash(banani.get_public_key_from_address("ban_1d59mzcc7yyuixyzc7femupc76yjsuoko79mm7y8td461opcpgiphjxjcje7"), "F5F4EBEC4DA188FD1C8F3848D5D7140E135D8DE79C4523148E70A737730740D370D67A9570DF91E6AC946D0DE81830F3144FE4192528A0D5A7283EF06B316505", "26722EF85256481A358A538D6D0EDA1B8B8F337AD4F9CB58C41BBC44949FDA21")); +console.log("running work test (may take a while)") +console.log("work test", (await new banani.SlowJavascriptWorkProvider().request_work("B7FBEF33567E37E04E772C473CCED4FA9245CC7A4C1BDE8A2576F7384E7919E1")) == "0000000000423B3B"); + const test_seed = fs.readFileSync("./.secret", "utf-8").trim(); let wallet = new banani.Wallet(rpc, test_seed); @@ -49,6 +52,8 @@ await wallet.receive(send_hash); console.log("send 2"); await wallet.send(t_address, "0.1"); console.log("send 3"); +await wallet.send_fixed_final_bal(t_address, "0.500201"); +console.log("send 4"); await wallet.send_all(t_address); wallet.index = 2; diff --git a/package.json b/package.json index de14264..597dd2a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "banani", - "version": "1.0.9", + "version": "1.0.10", "description": "JS/TS library for the Banano cryptocurrency in the style of bananopie", "main": "main.js", "scripts": { diff --git a/wallet.ts b/wallet.ts index 2a77bba..3fa49bb 100644 --- a/wallet.ts +++ b/wallet.ts @@ -1,8 +1,7 @@ import * as util from "./util"; import type { AccountInfoRPC, AccountReceivableRPC, AccountReceivableThresholdRPC, AccountReceivableSourceRPC, Address, Block, BlockNoSignature, BlockSubtype, BlockHash } from "./rpc_types"; import type { RPCInterface } from "./rpc"; - -export type WorkFunction = (block_hash: BlockHash) => Promise; +import type { WorkFunction } from "./work"; /** 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 { @@ -94,7 +93,7 @@ export class Wallet { const block = { ...block_ns, signature, work }; return await this.send_process(block, "send"); } - /* Send by passing in a fixed final balance */ + /** Send by passing in a fixed final balance */ async send_fixed_final_bal(to: Address, end_bal: util.Whole, gen_work?: boolean, representative?: Address, cached_account_info?: AccountInfoRPC): Promise { const raw_end = util.whole_to_raw(end_bal, this.rpc.DECIMALS); const info = cached_account_info ?? (await this.get_account_info(undefined, true)); //this should be lazy. the true makes sure representative is included diff --git a/work.ts b/work.ts index 8d407bc..debf176 100644 --- a/work.ts +++ b/work.ts @@ -1,11 +1,18 @@ +import blake2b from "blake2b"; +import { uint8array_to_hex, int_to_uint8array, hex_to_uint8array } from "./util"; import type { BlockHash } from "./rpc_types"; import type { RPC } from "./rpc"; +const BANANO_WORK_THRESHOLD = "0xFFFFFE0000000000"; + +export type WorkFunction = (block_hash: BlockHash) => Promise; + export interface WorkProvider { - request_work(block_hash: BlockHash): Promise; + request_work: WorkFunction; } -export class RPCWorkProvider { +/** Request work from an RPC provider that supports the `work_generate` RPC call */ +export class RPCWorkProvider implements WorkProvider { readonly rpc: RPC; /** Extra json to send with the rpc payload. Needed for rpc.nano.to's work_generate, unfortunately */ @@ -26,4 +33,17 @@ export class RPCWorkProvider { } } -// +/** Use Javascript to slowly generate work for blocks */ +export class SlowJavascriptWorkProvider implements WorkProvider { + async request_work(block_hash: BlockHash): Promise { + let nonce = 0; + while (true) { + const nonce_bytes = int_to_uint8array(nonce, 8).reverse(); + const work = uint8array_to_hex(blake2b(8, undefined, undefined, undefined, true).update(nonce_bytes).update(hex_to_uint8array(block_hash)).digest().reverse()); //noAssert = true so we can have byte of 8 (min for this library is 16 for some reason) + if (BigInt(`0x${work}`) > BigInt(BANANO_WORK_THRESHOLD)) { + return uint8array_to_hex(nonce_bytes.reverse()); + } + nonce += 1; + } + } +}