@aboutcircles/sdk-transfers 0.1.9 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +4 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
2
|
-
Context: ${JSON.stringify(this.context,null,2)}`;return y}}class m extends ey{constructor(y,v){super("RpcError",y,{...v,source:v?.source??"RPC_REQUEST"})}static connectionFailed(y,v){return new m("Failed to connect to RPC endpoint",{code:"RPC_CONNECTION_FAILED",source:"RPC_CONNECTION",cause:v,context:{url:y}})}static timeout(y,v){return new m("RPC request timed out",{code:"RPC_TIMEOUT",source:"RPC_TIMEOUT",context:{method:y,timeout:v}})}static invalidResponse(y,v){return new m("Invalid RPC response",{code:"RPC_INVALID_RESPONSE",source:"RPC_RESPONSE",context:{method:y,response:v}})}static fromJsonRpcError(y){return new m(y.message,{code:y.code,source:"RPC_RESPONSE",context:{data:y.data}})}static websocketError(y,v){return new m(y,{code:"RPC_WEBSOCKET_ERROR",source:"RPC_WEBSOCKET",cause:v})}}class Zy{rpcUrl;requestId=0;websocket=null;websocketConnected=!1;pendingResponses={};subscriptionListeners={};reconnectAttempt=0;initialBackoff=2000;maxBackoff=120000;constructor(y){this.rpcUrl=y}async call(y,v){this.requestId++;let b={jsonrpc:"2.0",id:this.requestId,method:y,params:v};try{let S=await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});if(!S.ok)throw m.connectionFailed(this.rpcUrl,Error(`HTTP ${S.status}: ${S.statusText}`));let u=await S.json();if(u.error)throw m.fromJsonRpcError(u.error);if(u.result===void 0)throw m.invalidResponse(y,u);return u.result}catch(S){if(S instanceof m)throw S;throw m.connectionFailed(this.rpcUrl,S)}}setRpcUrl(y){this.rpcUrl=y}getRpcUrl(){return this.rpcUrl}connect(){return new Promise((y)=>{let v=this.rpcUrl.replace("http","ws");if(v.endsWith("/"))v+="ws";else v+="/ws";this.websocket=new WebSocket(v),this.websocket.onopen=()=>{console.log("WebSocket connected"),this.websocketConnected=!0,this.reconnectAttempt=0,y()},this.websocket.onmessage=(b)=>{let S=JSON.parse(b.data),{id:u,method:X,params:D}=S;if(u!==void 0&&this.pendingResponses[u])this.pendingResponses[u].resolve(S),delete this.pendingResponses[u];if(X==="eth_subscription"&&D){let{subscription:N,result:h}=D;if(this.subscriptionListeners[N])this.subscriptionListeners[N].forEach((P)=>P(h))}},this.websocket.onclose=()=>{console.warn("WebSocket closed"),this.websocketConnected=!1},this.websocket.onerror=(b)=>{console.error("WebSocket error:",b),this.websocketConnected=!1,this.scheduleReconnect()}})}scheduleReconnect(){let y=Math.min(this.initialBackoff*Math.pow(2,this.reconnectAttempt),this.maxBackoff),v=y*(Math.random()*0.5),b=y+v;console.log(`Reconnecting in ${Math.round(b)}ms (attempt #${this.reconnectAttempt+1})`),this.reconnectAttempt++,setTimeout(()=>{this.reconnect()},b)}async reconnect(){if(this.websocketConnected)return;try{await this.connect(),console.log("Reconnection successful")}catch(y){console.error("Reconnection attempt failed:",y),this.scheduleReconnect()}}sendMessage(y,v,b=5000){if(!this.websocket||this.websocket.readyState!==WebSocket.OPEN)return Promise.reject(m.connectionFailed(this.rpcUrl));let S=this.requestId++,u={jsonrpc:"2.0",method:y,params:v,id:S};return new Promise((X,D)=>{this.pendingResponses[S]={resolve:X,reject:D},this.websocket.send(JSON.stringify(u)),setTimeout(()=>{if(this.pendingResponses[S])this.pendingResponses[S].reject(m.timeout(y,b)),delete this.pendingResponses[S]},b)})}async subscribe(y){let v=y?.toLowerCase();if(!this.websocketConnected)await this.connect();let b=Vy.create(),S=JSON.stringify(v?{address:v}:{}),u=(await this.sendMessage("eth_subscribe",["circles",S])).result;if(!this.subscriptionListeners[u])this.subscriptionListeners[u]=[];return this.subscriptionListeners[u].push((X)=>{D6(X).forEach((D)=>b.emit(D))}),b.property}}var yy=BigInt(4294967295),iy=BigInt(32);function N6(y,v=!1){if(v)return{h:Number(y&yy),l:Number(y>>iy&yy)};return{h:Number(y>>iy&yy)|0,l:Number(y&yy)|0}}function h6(y,v=!1){let b=y.length,S=new Uint32Array(b),u=new Uint32Array(b);for(let X=0;X<b;X++){let{h:D,l:N}=N6(y[X],v);[S[X],u[X]]=[D,N]}return[S,u]}var P6=(y,v,b)=>y<<b|v>>>32-b,j6=(y,v,b)=>v<<b|y>>>32-b,U6=(y,v,b)=>v<<b-32|y>>>64-b,k6=(y,v,b)=>y<<b-32|v>>>64-b;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function M6(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function $y(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function vy(y,...v){if(!M6(y))throw Error("Uint8Array expected");if(v.length>0&&!v.includes(y.length))throw Error("Uint8Array expected of length "+v+", got length="+y.length)}function Oy(y,v=!0){if(y.destroyed)throw Error("Hash instance has been destroyed");if(v&&y.finished)throw Error("Hash#digest() has already been called")}function x6(y,v){vy(y);let b=v.outputLen;if(y.length<b)throw Error("digestInto() expects output buffer of length at least "+b)}function E6(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function ay(...y){for(let v=0;v<y.length;v++)y[v].fill(0)}var C6=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function A6(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function K6(y){for(let v=0;v<y.length;v++)y[v]=A6(y[v]);return y}var dy=C6?(y)=>y:K6;function V6(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function qy(y){if(typeof y==="string")y=V6(y);return vy(y),y}class oy{}function I6(y){let v=(S)=>y().update(qy(S)).digest(),b=y();return v.outputLen=b.outputLen,v.blockLen=b.blockLen,v.create=()=>y(),v}var W6=BigInt(0),d=BigInt(1),H6=BigInt(2),L6=BigInt(7),g6=BigInt(256),m6=BigInt(113),By=[],ry=[],zy=[];for(let y=0,v=d,b=1,S=0;y<24;y++){[b,S]=[S,(2*b+3*S)%5],By.push(2*(5*S+b)),ry.push((y+1)*(y+2)/2%64);let u=W6;for(let X=0;X<7;X++)if(v=(v<<d^(v>>L6)*m6)%g6,v&H6)u^=d<<(d<<BigInt(X))-d;zy.push(u)}var Jy=h6(zy,!0),s6=Jy[0],Q6=Jy[1],Ry=(y,v,b)=>b>32?U6(y,v,b):P6(y,v,b),Gy=(y,v,b)=>b>32?k6(y,v,b):j6(y,v,b);function F6(y,v=24){let b=new Uint32Array(10);for(let S=24-v;S<24;S++){for(let D=0;D<10;D++)b[D]=y[D]^y[D+10]^y[D+20]^y[D+30]^y[D+40];for(let D=0;D<10;D+=2){let N=(D+8)%10,h=(D+2)%10,P=b[h],j=b[h+1],M=Ry(P,j,1)^b[N],E=Gy(P,j,1)^b[N+1];for(let U=0;U<50;U+=10)y[D+U]^=M,y[D+U+1]^=E}let u=y[2],X=y[3];for(let D=0;D<24;D++){let N=ry[D],h=Ry(u,X,N),P=Gy(u,X,N),j=By[D];u=y[j],X=y[j+1],y[j]=h,y[j+1]=P}for(let D=0;D<50;D+=10){for(let N=0;N<10;N++)b[N]=y[D+N];for(let N=0;N<10;N++)y[D+N]^=~b[(N+2)%10]&b[(N+4)%10]}y[0]^=s6[S],y[1]^=Q6[S]}ay(b)}class Iy extends oy{constructor(y,v,b,S=!1,u=24){super();if(this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=y,this.suffix=v,this.outputLen=b,this.enableXOF=S,this.rounds=u,$y(b),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=E6(this.state)}clone(){return this._cloneInto()}keccak(){dy(this.state32),F6(this.state32,this.rounds),dy(this.state32),this.posOut=0,this.pos=0}update(y){Oy(this),y=qy(y),vy(y);let{blockLen:v,state:b}=this,S=y.length;for(let u=0;u<S;){let X=Math.min(v-this.pos,S-u);for(let D=0;D<X;D++)b[this.pos++]^=y[u++];if(this.pos===v)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:v,pos:b,blockLen:S}=this;if(y[b]^=v,(v&128)!==0&&b===S-1)this.keccak();y[S-1]^=128,this.keccak()}writeInto(y){Oy(this,!1),vy(y),this.finish();let v=this.state,{blockLen:b}=this;for(let S=0,u=y.length;S<u;){if(this.posOut>=b)this.keccak();let X=Math.min(b-this.posOut,u-S);y.set(v.subarray(this.posOut,this.posOut+X),S),this.posOut+=X,S+=X}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return $y(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(x6(y,this),this.finished)throw Error("digest() was already called");return this.writeInto(y),this.destroy(),y}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,ay(this.state)}_cloneInto(y){let{blockLen:v,suffix:b,outputLen:S,rounds:u,enableXOF:X}=this;return y||(y=new Iy(v,b,S,X,u)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=u,y.suffix=b,y.outputLen=S,y.enableXOF=X,y.destroyed=this.destroyed,y}}var t6=(y,v,b)=>I6(()=>new Iy(v,y,b)),T6=(()=>t6(1,136,32))(),y0=[];for(let y=0;y<256;y++)y0[y]=y.toString(16).padStart(2,"0");function Y6(y){let v="0x";for(let b=0;b<y.length;b++)v+=y0[y[b]];return v}function w6(y){let v=y.toLowerCase().replace("0x",""),b=Y6(T6(new TextEncoder().encode(v))).slice(2),S="0x";for(let u=0;u<v.length;u++)S+=parseInt(b[u],16)>=8?v[u].toUpperCase():v[u];return S}function k(y){return y.toLowerCase()}function f6(y){return w6(y)}function _6(y){if(typeof y!=="string")return!1;let v=y.replace("0x","");return v.length===40&&/^[0-9a-fA-F]{40}$/.test(v)}function K(y){if(y===null||y===void 0)return y;if(_6(y))return f6(y);if(Array.isArray(y))return y.map((v)=>K(v));if(typeof y==="object"&&y!==null){let v={};for(let b in y)if(Object.prototype.hasOwnProperty.call(y,b))v[b]=K(y[b]);return v}return y}function c6(y){return{Source:k(y.from),Sink:k(y.to),TargetFlow:y.targetFlow.toString(),WithWrap:y.useWrappedBalances,FromTokens:y.fromTokens?.map(k),ToTokens:y.toTokens?.map(k),ExcludedFromTokens:y.excludeFromTokens?.map(k),ExcludedToTokens:y.excludeToTokens?.map(k),SimulatedBalances:y.simulatedBalances?.map((v)=>({Holder:k(v.holder),Token:k(v.token),Amount:v.amount.toString(),IsWrapped:v.isWrapped,IsStatic:v.isStatic})),SimulatedTrusts:y.simulatedTrusts?.map((v)=>({Truster:k(v.truster),Trustee:k(v.trustee)})),MaxTransfers:y.maxTransfers}}function G(y){let v={};for(let b in y){let S=y[b];if(S===null||S===void 0)v[b]=S;else if(typeof S==="string"&&/^\d+$/.test(S))v[b]=BigInt(S);else if(typeof S==="object"&&!Array.isArray(S))v[b]=G(S);else if(Array.isArray(S))v[b]=S.map((u)=>typeof u==="object"&&u!==null?G(u):u);else v[b]=S}return v}var S9=BigInt(96)*BigInt(1000000000000000000),p6=BigInt("9999999999999999999999999999999999999");class v0{client;constructor(y){this.client=y}async findPath(y){let v=c6(y),b=await this.client.call("circlesV2_findPath",[v]),S=G(b);return K(S)}async findMaxFlow(y){let v=await this.findPath({...y,targetFlow:p6});return BigInt(v.maxFlow)}}class b0{client;constructor(y){this.client=y}async query(y){let v=await this.client.call("circles_query",[y]);return K(v)}async tables(){return this.client.call("circles_tables",[])}async events(y,v,b=null,S=null,u=!1){let X=await this.client.call("circles_events",[y,v,b,S,u]);return K(X)}}var l6=[{name:"blockNumber",sortOrder:"DESC"},{name:"transactionIndex",sortOrder:"DESC"},{name:"logIndex",sortOrder:"DESC"}];class c{params;client;rowTransformer;cursorColumns;orderColumns;get currentPage(){return this._currentPage}_currentPage;constructor(y,v,b){this.client=y,this.params=v,this.rowTransformer=b||v.rowTransformer,this.orderColumns=v.orderColumns,this.cursorColumns=v.cursorColumns||this.buildEventCursorColumns()}buildEventCursorColumns(){let y=l6.map((v)=>({...v,sortOrder:this.params.sortOrder}));if(this.params.table==="TransferBatch")y.push({name:"batchIndex",sortOrder:this.params.sortOrder});return y}transformCursorValue(y,v){if(v)return v(y);if(typeof y==="bigint")return y.toString();return y}createEqualityPredicate(y,v){return{Type:"FilterPredicate",FilterType:"Equals",Column:y.name,Value:this.transformCursorValue(v,y.toValue)}}createComparisonPredicate(y,v){return{Type:"FilterPredicate",FilterType:y.sortOrder==="ASC"?"GreaterThan":"LessThan",Column:y.name,Value:this.transformCursorValue(v,y.toValue)}}buildCursorFilter(y){if(!y)return[];let v=[];for(let b=0;b<this.cursorColumns.length;b++){let S=this.cursorColumns[b],u=y[S.name];if(u===void 0)continue;if(b===0)v.push(this.createComparisonPredicate(S,u));else{let X=[];for(let D=0;D<b;D++){let N=this.cursorColumns[D],h=y[N.name];if(h!==void 0)X.push(this.createEqualityPredicate(N,h))}X.push(this.createComparisonPredicate(S,u)),v.push({Type:"Conjunction",ConjunctionType:"And",Predicates:X})}}if(v.length===0)return[];return[{Type:"Conjunction",ConjunctionType:"Or",Predicates:v}]}buildOrderBy(){if(this.orderColumns&&this.orderColumns.length>0)return this.orderColumns;return this.cursorColumns.map((y)=>({Column:y.name,SortOrder:y.sortOrder}))}combineFilters(y,v){if(!y?.length&&!v?.length)return[];if(!y?.length)return v||[];if(!v?.length)return y;return[{Type:"Conjunction",ConjunctionType:"And",Predicates:[...y,...v]}]}rowsToObjects(y){let{columns:v,rows:b}=y;return b.map((S)=>{let u={};return v.forEach((X,D)=>{u[X]=S[D]}),this.rowTransformer?this.rowTransformer(u):u})}rowToCursor(y){let v={};for(let b of this.cursorColumns)v[b.name]=y[b.name];return v}getCursors(y){if(y.length===0)return{};return{first:this.rowToCursor(y[0]),last:this.rowToCursor(y[y.length-1])}}async queryNextPage(){let y=this.buildCursorFilter(this._currentPage?.lastCursor),v=this.combineFilters(this.params.filter,y),b={Namespace:this.params.namespace,Table:this.params.table,Columns:this.params.columns,Filter:v,Order:this.buildOrderBy(),Limit:this.params.limit},S=await this.client.call("circles_query",[b]),u=this.rowsToObjects(S),X=this.getCursors(u);return this._currentPage={limit:this.params.limit,size:u.length,firstCursor:X.first,lastCursor:X.last,sortOrder:this.params.sortOrder,hasMore:u.length===this.params.limit,results:u},u.length>0}reset(){this._currentPage=void 0}}class S0{client;constructor(y){this.client=y}transformQueryResponse(y){let{columns:v,rows:b}=y;return b.map((S)=>{let u={};return v.forEach((X,D)=>{u[X]=S[D]}),u})}async getCommonTrust(y,v){let b=await this.client.call("circles_getCommonTrust",[k(y),k(v)]);return K(b)}getTrustRelations(y,v=100,b="DESC"){let S=k(y),u=[{Type:"Conjunction",ConjunctionType:"And",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"version",Value:2},{Type:"Conjunction",ConjunctionType:"Or",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"trustee",Value:S},{Type:"FilterPredicate",FilterType:"Equals",Column:"truster",Value:S}]}]}];return new c(this.client,{namespace:"V_Crc",table:"TrustRelations",sortOrder:b,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","version","trustee","truster","expiryTime"],filter:u,limit:v},(X)=>K(X))}async getAggregatedTrustRelations(y){let v=k(y),b=this.getTrustRelations(v,1000),S=[];while(await b.queryNextPage())if(S.push(...b.currentPage.results),!b.currentPage.hasMore)break;let u={};S.forEach((D)=>{let N=k(D.truster),h=k(D.trustee),P=N!==v?D.truster:D.trustee;if(!u[P])u[P]=[];u[P].push(D)});let X=Object.entries(u).filter(([D])=>k(D)!==v).map(([D,N])=>{let h=Math.max(...N.map((j)=>j.timestamp)),P;if(N.length===2)P="mutuallyTrusts";else if(k(N[0]?.trustee)===v)P="trustedBy";else if(k(N[0]?.truster)===v)P="trusts";else throw Error("Unexpected trust list row. Couldn't determine trust relation.");return{subjectAvatar:v,relation:P,objectAvatar:D,timestamp:h}});return K(X)}async getTrustedBy(y){let v=k(y),b=(await this.getAggregatedTrustRelations(v)).filter((S)=>S.relation==="trustedBy");return K(b)}async getTrusts(y){let v=k(y),b=(await this.getAggregatedTrustRelations(v)).filter((S)=>S.relation==="trusts");return K(b)}async getMutualTrusts(y){let v=k(y),b=(await this.getAggregatedTrustRelations(v)).filter((S)=>S.relation==="mutuallyTrusts");return K(b)}}class l{static ONE_64=1n<<64n;static GAMMA_64=18443079296116538654n;static BETA_64=18450409579521241655n;static SECONDS_PER_DAY=86400n;static INFLATION_DAY_ZERO_UNIX=1602720000n;static ATTO_FACTOR=1000000000000000000n;static FACTOR_1E12=1000000000000n;static V1_ACCURACY=100000000n;static V1_INFLATION_PCT_NUM=107n;static V1_INFLATION_PCT_DEN=100n;static PERIOD_SEC=31556952n;static mul64(y,v){return y*v>>64n}static mulU(y,v){return y*v>>64n}static pow64(y,v){let b=y,S=v,u=this.ONE_64;while(S>0n){if((S&1n)===1n)u=this.mul64(u,b);b=this.mul64(b,b),S>>=1n}return u}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,v){return y*v/this.ONE_36}static pow36(y,v){let b=this.ONE_36,S=y,u=v;while(u>0n){if((u&1n)===1n)b=this.mul36(b,S);S=this.mul36(S,S),u>>=1n}return b}static attoCirclesToCircles(y){if(y===0n)return 0;let v=y/this.ATTO_FACTOR,b=y%this.ATTO_FACTOR,S=BigInt(Number.MAX_SAFE_INTEGER);if(v>S||v<-S)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(v)+Number(b)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,v){return this.mulU(this.pow64(this.GAMMA_64,v),y)}static demurrageToInflationary(y,v){return this.mulU(this.pow64(this.BETA_64,v),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,v=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(v))}static attoStaticCirclesToAttoCircles(y,v=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(v))}static inflationaryToDemurrageExact(y,v){let b=this.pow36(this.GAMMA_36,v);return y*b/this.ONE_36}static demurrageToInflationaryExact(y,v){let b=this.pow36(this.BETA_36,v);return y*b/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,v=BigInt(Math.floor(Date.now()/1000))){let b=this.dayFromTimestamp(v);return this.demurrageToInflationaryExact(y,b)}static attoStaticCirclesToAttoCirclesExact(y,v=BigInt(Math.floor(Date.now()/1000))){let b=this.dayFromTimestamp(v);return this.inflationaryToDemurrageExact(y,b)}static truncateToInt64(y){let v=y/this.FACTOR_1E12,b=9223372036854775807n;return v>b?b:v}static blowUpToBigInt(y){return y*this.FACTOR_1E12}static truncateToSixDecimals(y){return this.blowUpToBigInt(this.truncateToInt64(y))}static v1InflateFactor(y){if(y===0n)return this.V1_ACCURACY;return this.V1_ACCURACY*this.V1_INFLATION_PCT_NUM**y/this.V1_INFLATION_PCT_DEN**y}static attoCrcToAttoCircles(y,v){let b=v-this.INFLATION_DAY_ZERO_UNIX,S=b/this.PERIOD_SEC,u=b%this.PERIOD_SEC,X=this.v1InflateFactor(S),D=this.v1InflateFactor(S+1n);return this.v1ToDemurrage(y,X,D,u,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,v){let b=v-this.INFLATION_DAY_ZERO_UNIX,S=b/this.PERIOD_SEC,u=b%this.PERIOD_SEC,X=this.v1InflateFactor(S),D=this.v1InflateFactor(S+1n),N=X*(this.PERIOD_SEC-u)+D*u;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/N}static v1ToDemurrage(y,v,b,S,u){let X=v*(u-S)+b*S;return y*3n*this.V1_ACCURACY*u/X}}class u0{client;constructor(y){this.client=y}async getTotalBalance(y,v=!0){let b=await this.client.call("circlesV2_getTotalBalance",[k(y),v]);return l.circlesToAttoCircles(b)}async getTokenBalances(y){let v=(await this.client.call("circles_getTokenBalances",[k(y)])).map((b)=>G(b));return K(v)}}class X0{client;constructor(y){this.client=y}async getAvatarInfo(y){let v=await this.getAvatarInfoBatch([y]);return v.length>0?v[0]:void 0}async getAvatarInfoBatch(y){if(y.length===0)return[];let v=y.map((S)=>k(S)),b=await this.client.call("circles_getAvatarInfoBatch",[v]);return K(b)}async getNetworkSnapshot(){let y=await this.client.call("circles_getNetworkSnapshot",[]);return K(y)}}class D0{client;constructor(y){this.client=y}async getProfileByCid(y){return this.client.call("circles_getProfileByCid",[y])}async getProfileByCidBatch(y){return this.client.call("circles_getProfileByCidBatch",[y])}async getProfileByAddress(y){return this.client.call("circles_getProfileByAddress",[k(y)])}async getProfileByAddressBatch(y){return this.client.call("circles_getProfileByAddressBatch",[y.map((v)=>v===null?null:k(v))])}async searchProfiles(y,v=10,b=0,S){return this.client.call("circles_searchProfiles",[y.toLowerCase(),v,b,S])}async searchByAddressOrName(y,v=10,b=0,S){let u=[],X=/^0x[a-fA-F0-9]{40}$/.test(y);if(X)try{let D=await this.getProfileByAddress(y);if(D){let N={...D,address:y};if(!S||!N.avatarType||S.includes(N.avatarType))u.push(N)}}catch(D){console.warn("Failed to get profile by address:",D)}try{let D=await this.searchProfiles(y,v,b,S);if(X&&u.length>0){let N=y.toLowerCase(),h=D.filter((P)=>P.address?.toLowerCase()!==N);u.push(...h)}else u.push(...D)}catch(D){console.warn("Failed to search profiles by text:",D)}return u.slice(0,v)}}class N0{client;constructor(y){this.client=y}async getTokenInfo(y){let v=await this.getTokenInfoBatch([y]);return v.length>0?v[0]:void 0}async getTokenInfoBatch(y){if(y.length===0)return[];let v=y.map((S)=>k(S)),b=(await this.client.call("circles_getTokenInfoBatch",[v])).map((S)=>G(S));return K(b)}getTokenHolders(y,v=100,b="DESC"){let S=k(y);return new c(this.client,{namespace:"V_CrcV2",table:"BalancesByAccountAndToken",columns:["account","tokenAddress","demurragedTotalBalance"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"tokenAddress",Value:S}],cursorColumns:[{name:"demurragedTotalBalance",sortOrder:b},{name:"account",sortOrder:"ASC"}],orderColumns:[{Column:"demurragedTotalBalance",SortOrder:b},{Column:"account",SortOrder:"ASC"}],limit:v,sortOrder:b},(u)=>({account:u.account,tokenAddress:u.tokenAddress,demurragedTotalBalance:u.demurragedTotalBalance}))}}class h0{client;constructor(y){this.client=y}transformQueryResponse(y){let{columns:v,rows:b}=y;return b.map((S)=>{let u={};return v.forEach((X,D)=>{u[X]=S[D]}),u})}async getInvitedBy(y){let v=k(y),b=await this.client.call("circles_query",[{Namespace:"CrcV2",Table:"RegisterHuman",Columns:["inviter"],Filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"avatar",Value:v}],Order:[{Column:"blockNumber",SortOrder:"DESC"}],Limit:1}]);if(b.length>0)return K(b[0].inviter);return}async getInvitations(y){let v=k(y),b=96,S=await this.client.call("circles_getAvatarInfoBatch",[[v]]);if((S.length>0?S[0]:void 0)?.version===2)return[];let u=await this.client.call("circles_query",[{Namespace:"V_Crc",Table:"TrustRelations",Columns:["truster","trustee"],Filter:[{Type:"Conjunction",ConjunctionType:"And",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"version",Value:2},{Type:"FilterPredicate",FilterType:"Equals",Column:"trustee",Value:v}]}],Order:[]}]),X=this.transformQueryResponse(u).map((h)=>h.truster);if(X.length===0)return[];let D=await this.client.call("circles_getAvatarInfoBatch",[X]),N=[];for(let h of D){if(!h?.isHuman)continue;let P=(await this.client.call("circles_getTokenBalances",[h.avatar])).find((j)=>k(j.tokenAddress)===k(h.avatar));if(P&&P.circles>=96)N.push(h)}return K(N)}async getInvitationsFrom(y,v=!1){let b=k(y);if(v){let S=await this.client.call("circles_query",[{Namespace:"CrcV2",Table:"RegisterHuman",Columns:["avatar"],Filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"inviter",Value:b}],Order:[{Column:"blockNumber",SortOrder:"DESC"}]}]),u=this.transformQueryResponse(S).map((X)=>X.avatar);return K(u)}else{let S=await this.client.call("circles_query",[{Namespace:"V_Crc",Table:"TrustRelations",Columns:["trustee","truster"],Filter:[{Type:"Conjunction",ConjunctionType:"And",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"version",Value:2},{Type:"FilterPredicate",FilterType:"Equals",Column:"truster",Value:b}]}],Order:[]}]),u=this.transformQueryResponse(S).map((h)=>h.trustee);if(u.length===0)return[];let X=await this.client.call("circles_getAvatarInfoBatch",[u]),D=new Set(X.filter((h)=>h!==null).map((h)=>k(h.avatar))),N=u.filter((h)=>!D.has(k(h)));return K(N)}}}function i6(y,v){let b=BigInt(y),S=l.attoCirclesToCircles(b),u=l.attoCirclesToAttoCrc(b,BigInt(v)),X=l.attoCirclesToCircles(u),D=l.attoCirclesToAttoStaticCircles(b,BigInt(v)),N=l.attoCirclesToCircles(D);return{attoCircles:b,circles:S,staticAttoCircles:D,staticCircles:N,attoCrc:u,crc:X}}class P0{client;constructor(y){this.client=y}getTransactionHistory(y,v=50,b="DESC"){let S=k(y),u=[{Type:"Conjunction",ConjunctionType:"And",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"version",Value:2},{Type:"Conjunction",ConjunctionType:"Or",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"from",Value:S},{Type:"FilterPredicate",FilterType:"Equals",Column:"to",Value:S}]}]}];return new c(this.client,{namespace:"V_Crc",table:"TransferSummary",sortOrder:b,columns:[],filter:u,limit:v},(X)=>{let D=i6(X.value,X.timestamp),N={...X,...D};return K(N)})}}class j0{client;constructor(y){this.client=y}async findGroups(y=50,v){let b=this.getGroups(y,v,"DESC"),S=[];while(await b.queryNextPage()){if(S.push(...b.currentPage.results),S.length>=y)break;if(!b.currentPage.hasMore)break}return S.slice(0,y)}getGroupMemberships(y,v=50,b="DESC"){let S=k(y);return new c(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:b,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"member",Value:S}],limit:v},(u)=>K(u))}getGroupHolders(y,v=100){let b=k(y);return new c(this.client,{namespace:"V_CrcV2",table:"GroupTokenHoldersBalance",sortOrder:"DESC",columns:["group","holder","totalBalance","demurragedTotalBalance","fractionOwnership"],cursorColumns:[{name:"holder",sortOrder:"ASC"}],orderColumns:[{Column:"totalBalance",SortOrder:"DESC"},{Column:"holder",SortOrder:"ASC"}],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:b}],limit:v,rowTransformer:(S)=>{let u={...S,totalBalance:BigInt(S.totalBalance),demurragedTotalBalance:BigInt(S.demurragedTotalBalance)};return K(u)}})}getGroupMembers(y,v=100,b="DESC"){let S=k(y);return new c(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:b,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:S}],limit:v},(u)=>K(u))}getGroups(y=50,v,b="DESC"){let S=[];if(v){if(v.nameStartsWith)S.push({Type:"FilterPredicate",FilterType:"Like",Column:"name",Value:v.nameStartsWith+"%"});if(v.symbolStartsWith)S.push({Type:"FilterPredicate",FilterType:"Like",Column:"symbol",Value:v.symbolStartsWith+"%"});if(v.groupAddressIn&&v.groupAddressIn.length>0){let X=v.groupAddressIn.map((D)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:k(D)}));if(X.length===1)S.push(X[0]);else S.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:X})}if(v.groupTypeIn&&v.groupTypeIn.length>0){let X=v.groupTypeIn.map((D)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"type",Value:D}));if(X.length===1)S.push(X[0]);else S.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:X})}if(v.ownerIn&&v.ownerIn.length>0){let X=v.ownerIn.map((D)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"owner",Value:k(D)}));if(X.length===1)S.push(X[0]);else S.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:X})}if(v.mintHandlerEquals)S.push({Type:"FilterPredicate",FilterType:"Equals",Column:"mintHandler",Value:k(v.mintHandlerEquals)});if(v.treasuryEquals)S.push({Type:"FilterPredicate",FilterType:"Equals",Column:"treasury",Value:k(v.treasuryEquals)})}let u=S.length>1?[{Type:"Conjunction",ConjunctionType:"And",Predicates:S}]:S;return new c(this.client,{namespace:"V_CrcV2",table:"Groups",sortOrder:b,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","type","owner","mintPolicy","mintHandler","treasury","service","feeCollection","memberCount","name","symbol","cidV0Digest","erc20WrapperDemurraged","erc20WrapperStatic"],filter:u,limit:y},(X)=>K(X))}}class U0{client;_pathfinder;_query;_trust;_balance;_avatar;_profile;_token;_invitation;_transaction;_group;constructor(y="https://rpc.circlesubi.network/"){this.client=new Zy(y)}get pathfinder(){if(!this._pathfinder)this._pathfinder=new v0(this.client);return this._pathfinder}get query(){if(!this._query)this._query=new b0(this.client);return this._query}get trust(){if(!this._trust)this._trust=new S0(this.client);return this._trust}get balance(){if(!this._balance)this._balance=new u0(this.client);return this._balance}get avatar(){if(!this._avatar)this._avatar=new X0(this.client);return this._avatar}get profile(){if(!this._profile)this._profile=new D0(this.client);return this._profile}get token(){if(!this._token)this._token=new N0(this.client);return this._token}get invitation(){if(!this._invitation)this._invitation=new h0(this.client);return this._invitation}get transaction(){if(!this._transaction)this._transaction=new P0(this.client);return this._transaction}get group(){if(!this._group)this._group=new j0(this.client);return this._group}setRpcUrl(y){this.client.setRpcUrl(y)}getRpcUrl(){return this.client.getRpcUrl()}}class $6{static ONE_64=1n<<64n;static GAMMA_64=18443079296116538654n;static BETA_64=18450409579521241655n;static SECONDS_PER_DAY=86400n;static INFLATION_DAY_ZERO_UNIX=1602720000n;static ATTO_FACTOR=1000000000000000000n;static FACTOR_1E12=1000000000000n;static V1_ACCURACY=100000000n;static V1_INFLATION_PCT_NUM=107n;static V1_INFLATION_PCT_DEN=100n;static PERIOD_SEC=31556952n;static mul64(y,v){return y*v>>64n}static mulU(y,v){return y*v>>64n}static pow64(y,v){let b=y,S=v,u=this.ONE_64;while(S>0n){if((S&1n)===1n)u=this.mul64(u,b);b=this.mul64(b,b),S>>=1n}return u}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,v){return y*v/this.ONE_36}static pow36(y,v){let b=this.ONE_36,S=y,u=v;while(u>0n){if((u&1n)===1n)b=this.mul36(b,S);S=this.mul36(S,S),u>>=1n}return b}static attoCirclesToCircles(y){if(y===0n)return 0;let v=y/this.ATTO_FACTOR,b=y%this.ATTO_FACTOR,S=BigInt(Number.MAX_SAFE_INTEGER);if(v>S||v<-S)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(v)+Number(b)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,v){return this.mulU(this.pow64(this.GAMMA_64,v),y)}static demurrageToInflationary(y,v){return this.mulU(this.pow64(this.BETA_64,v),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,v=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(v))}static attoStaticCirclesToAttoCircles(y,v=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(v))}static inflationaryToDemurrageExact(y,v){let b=this.pow36(this.GAMMA_36,v);return y*b/this.ONE_36}static demurrageToInflationaryExact(y,v){let b=this.pow36(this.BETA_36,v);return y*b/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,v=BigInt(Math.floor(Date.now()/1000))){let b=this.dayFromTimestamp(v);return this.demurrageToInflationaryExact(y,b)}static attoStaticCirclesToAttoCirclesExact(y,v=BigInt(Math.floor(Date.now()/1000))){let b=this.dayFromTimestamp(v);return this.inflationaryToDemurrageExact(y,b)}static truncateToInt64(y){let v=y/this.FACTOR_1E12,b=9223372036854775807n;return v>b?b:v}static blowUpToBigInt(y){return y*this.FACTOR_1E12}static truncateToSixDecimals(y){return this.blowUpToBigInt(this.truncateToInt64(y))}static v1InflateFactor(y){if(y===0n)return this.V1_ACCURACY;return this.V1_ACCURACY*this.V1_INFLATION_PCT_NUM**y/this.V1_INFLATION_PCT_DEN**y}static attoCrcToAttoCircles(y,v){let b=v-this.INFLATION_DAY_ZERO_UNIX,S=b/this.PERIOD_SEC,u=b%this.PERIOD_SEC,X=this.v1InflateFactor(S),D=this.v1InflateFactor(S+1n);return this.v1ToDemurrage(y,X,D,u,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,v){let b=v-this.INFLATION_DAY_ZERO_UNIX,S=b/this.PERIOD_SEC,u=b%this.PERIOD_SEC,X=this.v1InflateFactor(S),D=this.v1InflateFactor(S+1n),N=X*(this.PERIOD_SEC-u)+D*u;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/N}static v1ToDemurrage(y,v,b,S,u){let X=v*(u-S)+b*S;return y*3n*this.V1_ACCURACY*u/X}}async function Wy(y,v,b){let S=new Map,u=new Set;return b.transfers.forEach((X)=>{if(y.toLowerCase()===X.from.toLowerCase())u.add(X.tokenOwner.toLowerCase())}),(await new U0(v).token.getTokenInfoBatch(Array.from(u))).forEach((X)=>{if(X.isWrapped&&!X.isInflationary)X.tokenType="CrcV2_ERC20WrapperDeployed_Demurraged";S.set(X.tokenAddress.toLowerCase(),X)}),S}function Hy(y,v){let b={};return y.transfers.forEach((S)=>{let u=v.get(S.tokenOwner.toLowerCase());if(u&&u.tokenType.startsWith("CrcV2_ERC20WrapperDeployed")){if(!b[S.tokenOwner])b[S.tokenOwner]=[BigInt(0),u.tokenType];b[S.tokenOwner][0]+=BigInt(S.value)}}),b}function Ly(y,v){let b=y.transfers.map((S)=>{let u=v.get(S.tokenOwner.toLowerCase());if(u&&u.tokenType.startsWith("CrcV2_ERC20WrapperDeployed"))return{...S,tokenOwner:u.tokenOwner};return S});return{...y,transfers:b}}var k0=(y)=>BigInt(y),e=(y)=>parseInt(y,16),O6=(y)=>{if(y.startsWith("0x"))y=y.slice(2);if(y.length%2!==0)throw Error("Invalid hex string");let v=new Uint8Array(y.length/2);for(let b=0;b<y.length;b+=2)v[b/2]=parseInt(y.substr(b,2),16);return v};function d6(y,v){if(typeof v==="string"&&v.startsWith("0x")){let b=v.slice(2);if(b.length===40)return v;if(b.length===64){if(y.toLowerCase().includes("digest")||y.toLowerCase().includes("data")||y.toLowerCase().includes("bytes"))return O6(v);try{return k0(v)}catch{return v}}try{let S=e(v);if(S<Number.MAX_SAFE_INTEGER)return S;return k0(v)}catch{return v}}if(v==="true")return!0;if(v==="false")return!1;return v}function R6(y){let{event:v,values:b}=y,S={$event:v,blockNumber:b.blockNumber?e(b.blockNumber):0,timestamp:b.timestamp?e(b.timestamp):void 0,transactionIndex:b.transactionIndex?e(b.transactionIndex):0,logIndex:b.logIndex?e(b.logIndex):0,transactionHash:b.transactionHash};for(let[u,X]of Object.entries(b)){if(["blockNumber","timestamp","transactionIndex","logIndex","transactionHash"].includes(u))continue;S[u]=d6(u,X)}return S}function G6(y){return y.map(R6)}class gy{_subscribers=[];subscribe(y){return this._subscribers.push(y),()=>{let v=this._subscribers.indexOf(y);if(v>-1)this._subscribers.splice(v,1)}}constructor(){this._subscribers=[]}emit(y){this._subscribers.forEach((v)=>v(y))}static create(){let y=new gy;return{property:y,emit:(v)=>y.emit(v)}}}class V0 extends Error{name;code;source;cause;context;constructor(y,v,b){super(v);if(this.name=y,this.code=b?.code,this.source=b?.source??"UNKNOWN",this.cause=b?.cause,this.context=b?.context,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,source:this.source,context:this.context,cause:this.cause instanceof Error?{name:this.cause.name,message:this.cause.message}:this.cause,stack:this.stack}}toString(){let y=`[${this.source}] ${this.name}: ${this.message}`;if(this.code)y+=` (Code: ${this.code})`;if(this.context)y+=`
|
|
3
|
-
Context: ${JSON.stringify(this.context,null,2)}`;return y}}class s extends V0{constructor(y,v){super("RpcError",y,{...v,source:v?.source??"RPC_REQUEST"})}static connectionFailed(y,v){return new s("Failed to connect to RPC endpoint",{code:"RPC_CONNECTION_FAILED",source:"RPC_CONNECTION",cause:v,context:{url:y}})}static timeout(y,v){return new s("RPC request timed out",{code:"RPC_TIMEOUT",source:"RPC_TIMEOUT",context:{method:y,timeout:v}})}static invalidResponse(y,v){return new s("Invalid RPC response",{code:"RPC_INVALID_RESPONSE",source:"RPC_RESPONSE",context:{method:y,response:v}})}static fromJsonRpcError(y){return new s(y.message,{code:y.code,source:"RPC_RESPONSE",context:{data:y.data}})}static websocketError(y,v){return new s(y,{code:"RPC_WEBSOCKET_ERROR",source:"RPC_WEBSOCKET",cause:v})}}class my{rpcUrl;requestId=0;websocket=null;websocketConnected=!1;pendingResponses={};subscriptionListeners={};reconnectAttempt=0;initialBackoff=2000;maxBackoff=120000;constructor(y){this.rpcUrl=y}async call(y,v){this.requestId++;let b={jsonrpc:"2.0",id:this.requestId,method:y,params:v};try{let S=await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});if(!S.ok)throw s.connectionFailed(this.rpcUrl,Error(`HTTP ${S.status}: ${S.statusText}`));let u=await S.json();if(u.error)throw s.fromJsonRpcError(u.error);if(u.result===void 0)throw s.invalidResponse(y,u);return u.result}catch(S){if(S instanceof s)throw S;throw s.connectionFailed(this.rpcUrl,S)}}setRpcUrl(y){this.rpcUrl=y}getRpcUrl(){return this.rpcUrl}connect(){return new Promise((y)=>{let v=this.rpcUrl.replace("http","ws");if(v.endsWith("/"))v+="ws";else v+="/ws";this.websocket=new WebSocket(v),this.websocket.onopen=()=>{console.log("WebSocket connected"),this.websocketConnected=!0,this.reconnectAttempt=0,y()},this.websocket.onmessage=(b)=>{let S=JSON.parse(b.data),{id:u,method:X,params:D}=S;if(u!==void 0&&this.pendingResponses[u])this.pendingResponses[u].resolve(S),delete this.pendingResponses[u];if(X==="eth_subscription"&&D){let{subscription:N,result:h}=D;if(this.subscriptionListeners[N])this.subscriptionListeners[N].forEach((P)=>P(h))}},this.websocket.onclose=()=>{console.warn("WebSocket closed"),this.websocketConnected=!1},this.websocket.onerror=(b)=>{console.error("WebSocket error:",b),this.websocketConnected=!1,this.scheduleReconnect()}})}scheduleReconnect(){let y=Math.min(this.initialBackoff*Math.pow(2,this.reconnectAttempt),this.maxBackoff),v=y*(Math.random()*0.5),b=y+v;console.log(`Reconnecting in ${Math.round(b)}ms (attempt #${this.reconnectAttempt+1})`),this.reconnectAttempt++,setTimeout(()=>{this.reconnect()},b)}async reconnect(){if(this.websocketConnected)return;try{await this.connect(),console.log("Reconnection successful")}catch(y){console.error("Reconnection attempt failed:",y),this.scheduleReconnect()}}sendMessage(y,v,b=5000){if(!this.websocket||this.websocket.readyState!==WebSocket.OPEN)return Promise.reject(s.connectionFailed(this.rpcUrl));let S=this.requestId++,u={jsonrpc:"2.0",method:y,params:v,id:S};return new Promise((X,D)=>{this.pendingResponses[S]={resolve:X,reject:D},this.websocket.send(JSON.stringify(u)),setTimeout(()=>{if(this.pendingResponses[S])this.pendingResponses[S].reject(s.timeout(y,b)),delete this.pendingResponses[S]},b)})}async subscribe(y){let v=y?.toLowerCase();if(!this.websocketConnected)await this.connect();let b=gy.create(),S=JSON.stringify(v?{address:v}:{}),u=(await this.sendMessage("eth_subscribe",["circles",S])).result;if(!this.subscriptionListeners[u])this.subscriptionListeners[u]=[];return this.subscriptionListeners[u].push((X)=>{G6(X).forEach((D)=>b.emit(D))}),b.property}}var by=BigInt(4294967295),M0=BigInt(32);function n6(y,v=!1){if(v)return{h:Number(y&by),l:Number(y>>M0&by)};return{h:Number(y>>M0&by)|0,l:Number(y&by)|0}}function e6(y,v=!1){let b=y.length,S=new Uint32Array(b),u=new Uint32Array(b);for(let X=0;X<b;X++){let{h:D,l:N}=n6(y[X],v);[S[X],u[X]]=[D,N]}return[S,u]}var Z6=(y,v,b)=>y<<b|v>>>32-b,a6=(y,v,b)=>v<<b|y>>>32-b,q6=(y,v,b)=>v<<b-32|y>>>64-b,o6=(y,v,b)=>y<<b-32|v>>>64-b;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function B6(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function x0(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function Sy(y,...v){if(!B6(y))throw Error("Uint8Array expected");if(v.length>0&&!v.includes(y.length))throw Error("Uint8Array expected of length "+v+", got length="+y.length)}function E0(y,v=!0){if(y.destroyed)throw Error("Hash instance has been destroyed");if(v&&y.finished)throw Error("Hash#digest() has already been called")}function r6(y,v){Sy(y);let b=v.outputLen;if(y.length<b)throw Error("digestInto() expects output buffer of length at least "+b)}function z6(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function I0(...y){for(let v=0;v<y.length;v++)y[v].fill(0)}var J6=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function y8(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function v8(y){for(let v=0;v<y.length;v++)y[v]=y8(y[v]);return y}var C0=J6?(y)=>y:v8;function b8(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function W0(y){if(typeof y==="string")y=b8(y);return Sy(y),y}class H0{}function S8(y){let v=(S)=>y().update(W0(S)).digest(),b=y();return v.outputLen=b.outputLen,v.blockLen=b.blockLen,v.create=()=>y(),v}var u8=BigInt(0),n=BigInt(1),X8=BigInt(2),D8=BigInt(7),N8=BigInt(256),h8=BigInt(113),L0=[],g0=[],m0=[];for(let y=0,v=n,b=1,S=0;y<24;y++){[b,S]=[S,(2*b+3*S)%5],L0.push(2*(5*S+b)),g0.push((y+1)*(y+2)/2%64);let u=u8;for(let X=0;X<7;X++)if(v=(v<<n^(v>>D8)*h8)%N8,v&X8)u^=n<<(n<<BigInt(X))-n;m0.push(u)}var s0=e6(m0,!0),P8=s0[0],j8=s0[1],A0=(y,v,b)=>b>32?q6(y,v,b):Z6(y,v,b),K0=(y,v,b)=>b>32?o6(y,v,b):a6(y,v,b);function U8(y,v=24){let b=new Uint32Array(10);for(let S=24-v;S<24;S++){for(let D=0;D<10;D++)b[D]=y[D]^y[D+10]^y[D+20]^y[D+30]^y[D+40];for(let D=0;D<10;D+=2){let N=(D+8)%10,h=(D+2)%10,P=b[h],j=b[h+1],M=A0(P,j,1)^b[N],E=K0(P,j,1)^b[N+1];for(let U=0;U<50;U+=10)y[D+U]^=M,y[D+U+1]^=E}let u=y[2],X=y[3];for(let D=0;D<24;D++){let N=g0[D],h=A0(u,X,N),P=K0(u,X,N),j=L0[D];u=y[j],X=y[j+1],y[j]=h,y[j+1]=P}for(let D=0;D<50;D+=10){for(let N=0;N<10;N++)b[N]=y[D+N];for(let N=0;N<10;N++)y[D+N]^=~b[(N+2)%10]&b[(N+4)%10]}y[0]^=P8[S],y[1]^=j8[S]}I0(b)}class sy extends H0{constructor(y,v,b,S=!1,u=24){super();if(this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=y,this.suffix=v,this.outputLen=b,this.enableXOF=S,this.rounds=u,x0(b),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=z6(this.state)}clone(){return this._cloneInto()}keccak(){C0(this.state32),U8(this.state32,this.rounds),C0(this.state32),this.posOut=0,this.pos=0}update(y){E0(this),y=W0(y),Sy(y);let{blockLen:v,state:b}=this,S=y.length;for(let u=0;u<S;){let X=Math.min(v-this.pos,S-u);for(let D=0;D<X;D++)b[this.pos++]^=y[u++];if(this.pos===v)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:v,pos:b,blockLen:S}=this;if(y[b]^=v,(v&128)!==0&&b===S-1)this.keccak();y[S-1]^=128,this.keccak()}writeInto(y){E0(this,!1),Sy(y),this.finish();let v=this.state,{blockLen:b}=this;for(let S=0,u=y.length;S<u;){if(this.posOut>=b)this.keccak();let X=Math.min(b-this.posOut,u-S);y.set(v.subarray(this.posOut,this.posOut+X),S),this.posOut+=X,S+=X}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return x0(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(r6(y,this),this.finished)throw Error("digest() was already called");return this.writeInto(y),this.destroy(),y}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,I0(this.state)}_cloneInto(y){let{blockLen:v,suffix:b,outputLen:S,rounds:u,enableXOF:X}=this;return y||(y=new sy(v,b,S,X,u)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=u,y.suffix=b,y.outputLen=S,y.enableXOF=X,y.destroyed=this.destroyed,y}}var k8=(y,v,b)=>S8(()=>new sy(v,y,b)),M8=(()=>k8(1,136,32))(),Q0=[];for(let y=0;y<256;y++)Q0[y]=y.toString(16).padStart(2,"0");function x8(y){let v="0x";for(let b=0;b<y.length;b++)v+=Q0[y[b]];return v}function E8(y){let v=y.toLowerCase().replace("0x",""),b=x8(M8(new TextEncoder().encode(v))).slice(2),S="0x";for(let u=0;u<v.length;u++)S+=parseInt(b[u],16)>=8?v[u].toUpperCase():v[u];return S}function W(y){return y.toLowerCase()}function C8(y){return E8(y)}function A8(y){if(typeof y!=="string")return!1;let v=y.replace("0x","");return v.length===40&&/^[0-9a-fA-F]{40}$/.test(v)}function p(y){if(y===null||y===void 0)return y;if(A8(y))return C8(y);if(Array.isArray(y))return y.map((v)=>p(v));if(typeof y==="object"&&y!==null){let v={};for(let b in y)if(Object.prototype.hasOwnProperty.call(y,b))v[b]=p(y[b]);return v}return y}function K8(y){return{Source:W(y.from),Sink:W(y.to),TargetFlow:y.targetFlow.toString(),WithWrap:y.useWrappedBalances,FromTokens:y.fromTokens?.map(W),ToTokens:y.toTokens?.map(W),ExcludedFromTokens:y.excludeFromTokens?.map(W),ExcludedToTokens:y.excludeToTokens?.map(W),SimulatedBalances:y.simulatedBalances?.map((v)=>({Holder:W(v.holder),Token:W(v.token),Amount:v.amount.toString(),IsWrapped:v.isWrapped,IsStatic:v.isStatic})),SimulatedTrusts:y.simulatedTrusts?.map((v)=>({Truster:W(v.truster),Trustee:W(v.trustee)})),MaxTransfers:y.maxTransfers}}function uy(y){let v={};for(let b in y){let S=y[b];if(S===null||S===void 0)v[b]=S;else if(typeof S==="string"&&/^\d+$/.test(S))v[b]=BigInt(S);else if(typeof S==="object"&&!Array.isArray(S))v[b]=uy(S);else if(Array.isArray(S))v[b]=S.map((u)=>typeof u==="object"&&u!==null?uy(u):u);else v[b]=S}return v}var X9=BigInt(96)*BigInt(1000000000000000000),V8=BigInt("9999999999999999999999999999999999999");class Qy{client;constructor(y){this.client=y}async findPath(y){let v=K8(y),b=await this.client.call("circlesV2_findPath",[v]),S=uy(b);return p(S)}async findMaxFlow(y){let v=await this.findPath({...y,targetFlow:V8});return BigInt(v.maxFlow)}}var I8=[{name:"blockNumber",sortOrder:"DESC"},{name:"transactionIndex",sortOrder:"DESC"},{name:"logIndex",sortOrder:"DESC"}];class Z{params;client;rowTransformer;cursorColumns;orderColumns;get currentPage(){return this._currentPage}_currentPage;constructor(y,v,b){this.client=y,this.params=v,this.rowTransformer=b||v.rowTransformer,this.orderColumns=v.orderColumns,this.cursorColumns=v.cursorColumns||this.buildEventCursorColumns()}buildEventCursorColumns(){let y=I8.map((v)=>({...v,sortOrder:this.params.sortOrder}));if(this.params.table==="TransferBatch")y.push({name:"batchIndex",sortOrder:this.params.sortOrder});return y}transformCursorValue(y,v){if(v)return v(y);if(typeof y==="bigint")return y.toString();return y}createEqualityPredicate(y,v){return{Type:"FilterPredicate",FilterType:"Equals",Column:y.name,Value:this.transformCursorValue(v,y.toValue)}}createComparisonPredicate(y,v){return{Type:"FilterPredicate",FilterType:y.sortOrder==="ASC"?"GreaterThan":"LessThan",Column:y.name,Value:this.transformCursorValue(v,y.toValue)}}buildCursorFilter(y){if(!y)return[];let v=[];for(let b=0;b<this.cursorColumns.length;b++){let S=this.cursorColumns[b],u=y[S.name];if(u===void 0)continue;if(b===0)v.push(this.createComparisonPredicate(S,u));else{let X=[];for(let D=0;D<b;D++){let N=this.cursorColumns[D],h=y[N.name];if(h!==void 0)X.push(this.createEqualityPredicate(N,h))}X.push(this.createComparisonPredicate(S,u)),v.push({Type:"Conjunction",ConjunctionType:"And",Predicates:X})}}if(v.length===0)return[];return[{Type:"Conjunction",ConjunctionType:"Or",Predicates:v}]}buildOrderBy(){if(this.orderColumns&&this.orderColumns.length>0)return this.orderColumns;return this.cursorColumns.map((y)=>({Column:y.name,SortOrder:y.sortOrder}))}combineFilters(y,v){if(!y?.length&&!v?.length)return[];if(!y?.length)return v||[];if(!v?.length)return y;return[{Type:"Conjunction",ConjunctionType:"And",Predicates:[...y,...v]}]}rowsToObjects(y){let{columns:v,rows:b}=y;return b.map((S)=>{let u={};return v.forEach((X,D)=>{u[X]=S[D]}),this.rowTransformer?this.rowTransformer(u):u})}rowToCursor(y){let v={};for(let b of this.cursorColumns)v[b.name]=y[b.name];return v}getCursors(y){if(y.length===0)return{};return{first:this.rowToCursor(y[0]),last:this.rowToCursor(y[y.length-1])}}async queryNextPage(){let y=this.buildCursorFilter(this._currentPage?.lastCursor),v=this.combineFilters(this.params.filter,y),b={Namespace:this.params.namespace,Table:this.params.table,Columns:this.params.columns,Filter:v,Order:this.buildOrderBy(),Limit:this.params.limit},S=await this.client.call("circles_query",[b]),u=this.rowsToObjects(S),X=this.getCursors(u);return this._currentPage={limit:this.params.limit,size:u.length,firstCursor:X.first,lastCursor:X.last,sortOrder:this.params.sortOrder,hasMore:u.length===this.params.limit,results:u},u.length>0}reset(){this._currentPage=void 0}}class F0{static ONE_64=1n<<64n;static GAMMA_64=18443079296116538654n;static BETA_64=18450409579521241655n;static SECONDS_PER_DAY=86400n;static INFLATION_DAY_ZERO_UNIX=1602720000n;static ATTO_FACTOR=1000000000000000000n;static FACTOR_1E12=1000000000000n;static V1_ACCURACY=100000000n;static V1_INFLATION_PCT_NUM=107n;static V1_INFLATION_PCT_DEN=100n;static PERIOD_SEC=31556952n;static mul64(y,v){return y*v>>64n}static mulU(y,v){return y*v>>64n}static pow64(y,v){let b=y,S=v,u=this.ONE_64;while(S>0n){if((S&1n)===1n)u=this.mul64(u,b);b=this.mul64(b,b),S>>=1n}return u}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,v){return y*v/this.ONE_36}static pow36(y,v){let b=this.ONE_36,S=y,u=v;while(u>0n){if((u&1n)===1n)b=this.mul36(b,S);S=this.mul36(S,S),u>>=1n}return b}static attoCirclesToCircles(y){if(y===0n)return 0;let v=y/this.ATTO_FACTOR,b=y%this.ATTO_FACTOR,S=BigInt(Number.MAX_SAFE_INTEGER);if(v>S||v<-S)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(v)+Number(b)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,v){return this.mulU(this.pow64(this.GAMMA_64,v),y)}static demurrageToInflationary(y,v){return this.mulU(this.pow64(this.BETA_64,v),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,v=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(v))}static attoStaticCirclesToAttoCircles(y,v=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(v))}static inflationaryToDemurrageExact(y,v){let b=this.pow36(this.GAMMA_36,v);return y*b/this.ONE_36}static demurrageToInflationaryExact(y,v){let b=this.pow36(this.BETA_36,v);return y*b/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,v=BigInt(Math.floor(Date.now()/1000))){let b=this.dayFromTimestamp(v);return this.demurrageToInflationaryExact(y,b)}static attoStaticCirclesToAttoCirclesExact(y,v=BigInt(Math.floor(Date.now()/1000))){let b=this.dayFromTimestamp(v);return this.inflationaryToDemurrageExact(y,b)}static truncateToInt64(y){let v=y/this.FACTOR_1E12,b=9223372036854775807n;return v>b?b:v}static blowUpToBigInt(y){return y*this.FACTOR_1E12}static truncateToSixDecimals(y){return this.blowUpToBigInt(this.truncateToInt64(y))}static v1InflateFactor(y){if(y===0n)return this.V1_ACCURACY;return this.V1_ACCURACY*this.V1_INFLATION_PCT_NUM**y/this.V1_INFLATION_PCT_DEN**y}static attoCrcToAttoCircles(y,v){let b=v-this.INFLATION_DAY_ZERO_UNIX,S=b/this.PERIOD_SEC,u=b%this.PERIOD_SEC,X=this.v1InflateFactor(S),D=this.v1InflateFactor(S+1n);return this.v1ToDemurrage(y,X,D,u,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,v){let b=v-this.INFLATION_DAY_ZERO_UNIX,S=b/this.PERIOD_SEC,u=b%this.PERIOD_SEC,X=this.v1InflateFactor(S),D=this.v1InflateFactor(S+1n),N=X*(this.PERIOD_SEC-u)+D*u;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/N}static v1ToDemurrage(y,v,b,S,u){let X=v*(u-S)+b*S;return y*3n*this.V1_ACCURACY*u/X}}class Fy{client;constructor(y){this.client=y}async getTotalBalance(y,v=!0){let b=await this.client.call("circlesV2_getTotalBalance",[W(y),v]);return F0.circlesToAttoCircles(b)}async getTokenBalances(y){let v=(await this.client.call("circles_getTokenBalances",[W(y)])).map((b)=>uy(b));return p(v)}}class ty{client;constructor(y){this.client=y}async findGroups(y=50,v){let b=this.getGroups(y,v,"DESC"),S=[];while(await b.queryNextPage()){if(S.push(...b.currentPage.results),S.length>=y)break;if(!b.currentPage.hasMore)break}return S.slice(0,y)}getGroupMemberships(y,v=50,b="DESC"){let S=W(y);return new Z(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:b,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"member",Value:S}],limit:v},(u)=>p(u))}getGroupHolders(y,v=100){let b=W(y);return new Z(this.client,{namespace:"V_CrcV2",table:"GroupTokenHoldersBalance",sortOrder:"DESC",columns:["group","holder","totalBalance","demurragedTotalBalance","fractionOwnership"],cursorColumns:[{name:"holder",sortOrder:"ASC"}],orderColumns:[{Column:"totalBalance",SortOrder:"DESC"},{Column:"holder",SortOrder:"ASC"}],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:b}],limit:v,rowTransformer:(S)=>{let u={...S,totalBalance:BigInt(S.totalBalance),demurragedTotalBalance:BigInt(S.demurragedTotalBalance)};return p(u)}})}getGroupMembers(y,v=100,b="DESC"){let S=W(y);return new Z(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:b,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:S}],limit:v},(u)=>p(u))}getGroups(y=50,v,b="DESC"){let S=[];if(v){if(v.nameStartsWith)S.push({Type:"FilterPredicate",FilterType:"Like",Column:"name",Value:v.nameStartsWith+"%"});if(v.symbolStartsWith)S.push({Type:"FilterPredicate",FilterType:"Like",Column:"symbol",Value:v.symbolStartsWith+"%"});if(v.groupAddressIn&&v.groupAddressIn.length>0){let X=v.groupAddressIn.map((D)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:W(D)}));if(X.length===1)S.push(X[0]);else S.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:X})}if(v.groupTypeIn&&v.groupTypeIn.length>0){let X=v.groupTypeIn.map((D)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"type",Value:D}));if(X.length===1)S.push(X[0]);else S.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:X})}if(v.ownerIn&&v.ownerIn.length>0){let X=v.ownerIn.map((D)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"owner",Value:W(D)}));if(X.length===1)S.push(X[0]);else S.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:X})}if(v.mintHandlerEquals)S.push({Type:"FilterPredicate",FilterType:"Equals",Column:"mintHandler",Value:W(v.mintHandlerEquals)});if(v.treasuryEquals)S.push({Type:"FilterPredicate",FilterType:"Equals",Column:"treasury",Value:W(v.treasuryEquals)})}let u=S.length>1?[{Type:"Conjunction",ConjunctionType:"And",Predicates:S}]:S;return new Z(this.client,{namespace:"V_CrcV2",table:"Groups",sortOrder:b,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","type","owner","mintPolicy","mintHandler","treasury","service","feeCollection","memberCount","name","symbol","cidV0Digest","erc20WrapperDemurraged","erc20WrapperStatic"],filter:u,limit:y},(X)=>p(X))}}class w{static ONE_64=1n<<64n;static GAMMA_64=18443079296116538654n;static BETA_64=18450409579521241655n;static SECONDS_PER_DAY=86400n;static INFLATION_DAY_ZERO_UNIX=1602720000n;static ATTO_FACTOR=1000000000000000000n;static FACTOR_1E12=1000000000000n;static V1_ACCURACY=100000000n;static V1_INFLATION_PCT_NUM=107n;static V1_INFLATION_PCT_DEN=100n;static PERIOD_SEC=31556952n;static mul64(y,v){return y*v>>64n}static mulU(y,v){return y*v>>64n}static pow64(y,v){let b=y,S=v,u=this.ONE_64;while(S>0n){if((S&1n)===1n)u=this.mul64(u,b);b=this.mul64(b,b),S>>=1n}return u}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,v){return y*v/this.ONE_36}static pow36(y,v){let b=this.ONE_36,S=y,u=v;while(u>0n){if((u&1n)===1n)b=this.mul36(b,S);S=this.mul36(S,S),u>>=1n}return b}static attoCirclesToCircles(y){if(y===0n)return 0;let v=y/this.ATTO_FACTOR,b=y%this.ATTO_FACTOR,S=BigInt(Number.MAX_SAFE_INTEGER);if(v>S||v<-S)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(v)+Number(b)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,v){return this.mulU(this.pow64(this.GAMMA_64,v),y)}static demurrageToInflationary(y,v){return this.mulU(this.pow64(this.BETA_64,v),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,v=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(v))}static attoStaticCirclesToAttoCircles(y,v=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(v))}static inflationaryToDemurrageExact(y,v){let b=this.pow36(this.GAMMA_36,v);return y*b/this.ONE_36}static demurrageToInflationaryExact(y,v){let b=this.pow36(this.BETA_36,v);return y*b/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,v=BigInt(Math.floor(Date.now()/1000))){let b=this.dayFromTimestamp(v);return this.demurrageToInflationaryExact(y,b)}static attoStaticCirclesToAttoCirclesExact(y,v=BigInt(Math.floor(Date.now()/1000))){let b=this.dayFromTimestamp(v);return this.inflationaryToDemurrageExact(y,b)}static truncateToInt64(y){let v=y/this.FACTOR_1E12,b=9223372036854775807n;return v>b?b:v}static blowUpToBigInt(y){return y*this.FACTOR_1E12}static truncateToSixDecimals(y){return this.blowUpToBigInt(this.truncateToInt64(y))}static v1InflateFactor(y){if(y===0n)return this.V1_ACCURACY;return this.V1_ACCURACY*this.V1_INFLATION_PCT_NUM**y/this.V1_INFLATION_PCT_DEN**y}static attoCrcToAttoCircles(y,v){let b=v-this.INFLATION_DAY_ZERO_UNIX,S=b/this.PERIOD_SEC,u=b%this.PERIOD_SEC,X=this.v1InflateFactor(S),D=this.v1InflateFactor(S+1n);return this.v1ToDemurrage(y,X,D,u,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,v){let b=v-this.INFLATION_DAY_ZERO_UNIX,S=b/this.PERIOD_SEC,u=b%this.PERIOD_SEC,X=this.v1InflateFactor(S),D=this.v1InflateFactor(S+1n),N=X*(this.PERIOD_SEC-u)+D*u;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/N}static v1ToDemurrage(y,v,b,S,u){let X=v*(u-S)+b*S;return y*3n*this.V1_ACCURACY*u/X}}var Ty="0x0000000000000000000000000000000000000000",h9=BigInt(96)*BigInt(1000000000000000000),P9=BigInt("9999999999999999999999999999999999999");var Xy=BigInt(4294967295),t0=BigInt(32);function W8(y,v=!1){if(v)return{h:Number(y&Xy),l:Number(y>>t0&Xy)};return{h:Number(y>>t0&Xy)|0,l:Number(y&Xy)|0}}function H8(y,v=!1){let b=y.length,S=new Uint32Array(b),u=new Uint32Array(b);for(let X=0;X<b;X++){let{h:D,l:N}=W8(y[X],v);[S[X],u[X]]=[D,N]}return[S,u]}var L8=(y,v,b)=>y<<b|v>>>32-b,g8=(y,v,b)=>v<<b|y>>>32-b,m8=(y,v,b)=>v<<b-32|y>>>64-b,s8=(y,v,b)=>y<<b-32|v>>>64-b;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function Q8(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function T0(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function Ny(y,...v){if(!Q8(y))throw Error("Uint8Array expected");if(v.length>0&&!v.includes(y.length))throw Error("Uint8Array expected of length "+v+", got length="+y.length)}function Y0(y,v=!0){if(y.destroyed)throw Error("Hash instance has been destroyed");if(v&&y.finished)throw Error("Hash#digest() has already been called")}function F8(y,v){Ny(y);let b=v.outputLen;if(y.length<b)throw Error("digestInto() expects output buffer of length at least "+b)}function t8(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function l0(...y){for(let v=0;v<y.length;v++)y[v].fill(0)}var T8=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function Y8(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function w8(y){for(let v=0;v<y.length;v++)y[v]=Y8(y[v]);return y}var w0=T8?(y)=>y:w8;function f8(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function i0(y){if(typeof y==="string")y=f8(y);return Ny(y),y}class $0{}function _8(y){let v=(S)=>y().update(i0(S)).digest(),b=y();return v.outputLen=b.outputLen,v.blockLen=b.blockLen,v.create=()=>y(),v}var c8=BigInt(0),a=BigInt(1),p8=BigInt(2),l8=BigInt(7),i8=BigInt(256),$8=BigInt(113),O0=[],d0=[],R0=[];for(let y=0,v=a,b=1,S=0;y<24;y++){[b,S]=[S,(2*b+3*S)%5],O0.push(2*(5*S+b)),d0.push((y+1)*(y+2)/2%64);let u=c8;for(let X=0;X<7;X++)if(v=(v<<a^(v>>l8)*$8)%i8,v&p8)u^=a<<(a<<BigInt(X))-a;R0.push(u)}var G0=H8(R0,!0),O8=G0[0],d8=G0[1],f0=(y,v,b)=>b>32?m8(y,v,b):L8(y,v,b),_0=(y,v,b)=>b>32?s8(y,v,b):g8(y,v,b);function R8(y,v=24){let b=new Uint32Array(10);for(let S=24-v;S<24;S++){for(let D=0;D<10;D++)b[D]=y[D]^y[D+10]^y[D+20]^y[D+30]^y[D+40];for(let D=0;D<10;D+=2){let N=(D+8)%10,h=(D+2)%10,P=b[h],j=b[h+1],M=f0(P,j,1)^b[N],E=_0(P,j,1)^b[N+1];for(let U=0;U<50;U+=10)y[D+U]^=M,y[D+U+1]^=E}let u=y[2],X=y[3];for(let D=0;D<24;D++){let N=d0[D],h=f0(u,X,N),P=_0(u,X,N),j=O0[D];u=y[j],X=y[j+1],y[j]=h,y[j+1]=P}for(let D=0;D<50;D+=10){for(let N=0;N<10;N++)b[N]=y[D+N];for(let N=0;N<10;N++)y[D+N]^=~b[(N+2)%10]&b[(N+4)%10]}y[0]^=O8[S],y[1]^=d8[S]}l0(b)}class wy extends $0{constructor(y,v,b,S=!1,u=24){super();if(this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=y,this.suffix=v,this.outputLen=b,this.enableXOF=S,this.rounds=u,T0(b),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=t8(this.state)}clone(){return this._cloneInto()}keccak(){w0(this.state32),R8(this.state32,this.rounds),w0(this.state32),this.posOut=0,this.pos=0}update(y){Y0(this),y=i0(y),Ny(y);let{blockLen:v,state:b}=this,S=y.length;for(let u=0;u<S;){let X=Math.min(v-this.pos,S-u);for(let D=0;D<X;D++)b[this.pos++]^=y[u++];if(this.pos===v)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:v,pos:b,blockLen:S}=this;if(y[b]^=v,(v&128)!==0&&b===S-1)this.keccak();y[S-1]^=128,this.keccak()}writeInto(y){Y0(this,!1),Ny(y),this.finish();let v=this.state,{blockLen:b}=this;for(let S=0,u=y.length;S<u;){if(this.posOut>=b)this.keccak();let X=Math.min(b-this.posOut,u-S);y.set(v.subarray(this.posOut,this.posOut+X),S),this.posOut+=X,S+=X}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return T0(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(F8(y,this),this.finished)throw Error("digest() was already called");return this.writeInto(y),this.destroy(),y}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,l0(this.state)}_cloneInto(y){let{blockLen:v,suffix:b,outputLen:S,rounds:u,enableXOF:X}=this;return y||(y=new wy(v,b,S,X,u)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=u,y.suffix=b,y.outputLen=S,y.enableXOF=X,y.destroyed=this.destroyed,y}}var G8=(y,v,b)=>_8(()=>new wy(v,y,b)),n0=(()=>G8(1,136,32))(),e0=[];for(let y=0;y<256;y++)e0[y]=y.toString(16).padStart(2,"0");function Z0(y){let v="0x";for(let b=0;b<y.length;b++)v+=e0[y[b]];return v}var A=64,fy=32,Dy=(y)=>y.startsWith("0x")?y.slice(2):y,f=(y)=>y.toString(16).padStart(A,"0");function n8(y){let v=y.toLowerCase().replace("0x",""),b=Z0(n0(new TextEncoder().encode(v))).slice(2),S="0x";for(let u=0;u<v.length;u++)S+=parseInt(b[u],16)>=8?v[u].toUpperCase():v[u];return S}function Yy(y,v){if(y==="tuple"&&v)return`(${v.map((S)=>Yy(S.type,S.components)).join(",")})`;let b=y.match(/^tuple(\[\d*\])$/);if(b&&v)return`${Yy("tuple",v)}${b[1]}`;return y}function e8(y){let v=(y.inputs||[]).map((b)=>Yy(b.type,b.components));return`${y.name}(${v.join(",")})`}function Z8(y){let v=e8(y),b=n0(new TextEncoder().encode(v));return Z0(b.slice(0,4))}function o(y,v){if(y==="string"||y==="bytes")return!0;if(y.includes("[")){let b=y.slice(0,y.indexOf("["));if(y.endsWith("[]"))return!0;if(b==="tuple")return c0(v);return o(b)}if(y==="tuple")return c0(v);return!1}function c0(y){return y?.some((v)=>o(v.type,v.components))??!1}function i(y,v,b){if(y==="tuple"&&b)return q8(b,v);if(y.includes("["))return a8(y,v,b);return o8(y,v)}function a8(y,v,b){let S=y.slice(0,y.indexOf("[")),u=y.endsWith("[]"),X=o(S,b),D;if(X){let N=v.map((P)=>i(S,P,b)),h=v.length*fy;D=N.map((P)=>{let j=h;return h+=P.length/2,f(j)}).join("")+N.join("")}else D=v.map((N)=>i(S,N,b)).join("");return u?f(v.length)+D:D}function q8(y,v){let b=Array.isArray(v),S=[],u=[],X=[];for(let D=0;D<y.length;D++){let N=y[D],h=b?v[D]:v[N.name||""],P=o(N.type,N.components);if(X.push(P),P)S.push(""),u.push(i(N.type,h,N.components));else S.push(i(N.type,h,N.components))}if(u.length>0){let D=S.reduce((P,j,M)=>P+(X[M]?fy:j.length/2),0),N="",h=0;for(let P=0;P<y.length;P++)if(X[P])N+=f(D),D+=u[h].length/2,h++;else N+=S[P];return N+u.join("")}return S.join("")}function o8(y,v){if(y==="address")return Dy(v).toLowerCase().padStart(A,"0");if(y==="bool")return f(v?1:0);if(y.startsWith("uint")){let b=typeof v==="bigint"?v:BigInt(v);return f(b)}if(y.startsWith("int")){let b=typeof v==="bigint"?v:BigInt(v);if(b<0n){let S=y==="int"?256:parseInt(y.slice(3));b=(1n<<BigInt(S))+b}return f(b)}if(y.startsWith("bytes")&&y!=="bytes")return Dy(v).padEnd(A,"0");if(y==="bytes"){let b=Dy(v),S=f(b.length/2),u=b.padEnd(Math.ceil(b.length/A)*A,"0");return S+u}if(y==="string"){let b=Array.from(new TextEncoder().encode(v)).map((X)=>X.toString(16).padStart(2,"0")).join(""),S=f(b.length/2),u=b.padEnd(Math.ceil(b.length/A)*A,"0");return S+u}throw Error(`Unsupported type: ${y}`)}function q(y,v,b=0,S){if(y==="tuple"&&S)return r8(S,v,b);if(y.includes("["))return B8(y,v,b,S);return z8(y,v,b)}function B8(y,v,b,S){let u=y.slice(0,y.indexOf("[")),X=v.slice(b,b+A);if(y.endsWith("[]")){let N=parseInt(X,16)*2,h=parseInt(v.slice(N,N+A),16),P=[],j=N+A;for(let M=0;M<h;M++){let E=q(u,v,j,S);P.push(E.value),j+=E.consumed}return{value:P,consumed:A}}let D=y.match(/\[(\d+)\]$/);if(D){let N=parseInt(D[1]),h=[],P=0;for(let j=0;j<N;j++){let M=q(u,v,b+P,S);h.push(M.value),P+=M.consumed}return{value:h,consumed:P}}throw Error(`Invalid array type: ${y}`)}function r8(y,v,b){let S=[],u=b;for(let X of y){let D=q(X.type,v,u,X.components);S.push(D.value),u+=D.consumed}return{value:S,consumed:u-b}}function z8(y,v,b){let S=v.slice(b,b+A);if(y==="address")return{value:n8("0x"+S.slice(24)),consumed:A};if(y==="bool")return{value:parseInt(S,16)!==0,consumed:A};if(y.startsWith("uint"))return{value:BigInt("0x"+S),consumed:A};if(y.startsWith("int")){let u=BigInt("0x"+S),X=y==="int"?256:parseInt(y.slice(3)),D=1n<<BigInt(X-1);return{value:u>=D?u-(1n<<BigInt(X)):u,consumed:A}}if(y.startsWith("bytes")&&y!=="bytes"){let u=parseInt(y.match(/^bytes(\d+)$/)[1]);return{value:"0x"+S.slice(0,u*2),consumed:A}}if(y==="bytes"){let u=parseInt(S,16)*2,X=parseInt(v.slice(u,u+A),16)*2;return{value:"0x"+v.slice(u+A,u+A+X),consumed:A}}if(y==="string"){let u=parseInt(S,16)*2,X=parseInt(v.slice(u,u+A),16)*2,D=v.slice(u+A,u+A+X),N=new Uint8Array(D.match(/.{2}/g)?.map((h)=>parseInt(h,16))||[]);return{value:new TextDecoder().decode(N),consumed:A}}throw Error(`Unsupported type: ${y}`)}function p0(y){let{abi:v,functionName:b,args:S=[]}=y,u=v.find((U)=>U.type==="function"&&U.name===b);if(!u)throw Error(`Function "${b}" not found in ABI`);let X=Z8(u),D=u.inputs||[];if(D.length===0)return X;if(S.length!==D.length)throw Error(`Expected ${D.length} arguments, got ${S.length}`);let N=[],h=[],P=[];for(let U=0;U<D.length;U++){let V=D[U],H=V.components,C=o(V.type,H);if(P.push(C),C)N.push(""),h.push(i(V.type,S[U],H));else N.push(i(V.type,S[U],H))}if(h.length===0)return X+N.join("");let j=N.reduce((U,V,H)=>U+(P[H]?fy:V.length/2),0),M="",E=0;for(let U=0;U<D.length;U++)if(P[U])M+=f(j),j+=h[E].length/2,E++;else M+=N[U];return X+M+h.join("")}function J8(y){let{abi:v,functionName:b,data:S}=y,u=v.find((P)=>P.type==="function"&&P.name===b);if(!u)throw Error(`Function "${b}" not found in ABI`);let X=u.outputs||[];if(X.length===0)return;let D=Dy(S);if(X.length===1)return q(X[0].type,D,0,X[0].components).value;let N=[],h=0;for(let P of X){let j=q(P.type,D,h,P.components);N.push(j.value),h+=j.consumed}return N}class _{address;abi;rpcUrl;constructor(y){this.address=y.address,this.abi=y.abi,this.rpcUrl=y.rpcUrl}async read(y,v,b){let S=p0({abi:this.abi,functionName:y,args:v}),u={to:this.address,data:S,...b?.from&&{from:b.from}},X=await(await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"eth_call",params:[u,"latest"]})})).json();if(X.error)throw Error(`RPC Error: ${X.error.message}`);if(!X.result)throw Error("No result returned from RPC call");return J8({abi:this.abi,functionName:y,data:X.result})}encodeWrite(y,v){return p0({abi:this.abi,functionName:y,args:v})}}var y9=[{type:"function",name:"operateFlowMatrix",inputs:[{name:"_flowVertices",type:"address[]"},{name:"_flow",type:"tuple[]",components:[{name:"streamSinkId",type:"uint16"},{name:"amount",type:"uint192"}]},{name:"_streams",type:"tuple[]",components:[{name:"sourceCoordinate",type:"uint16"},{name:"flowEdgeIds",type:"uint16[]"},{name:"data",type:"bytes"}]},{name:"_packedCoordinates",type:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"isApprovedForAll",inputs:[{name:"_account",type:"address"},{name:"_operator",type:"address"}],outputs:[{type:"bool"}],stateMutability:"view"},{type:"function",name:"setApprovalForAll",inputs:[{name:"_operator",type:"address"},{name:"_approved",type:"bool"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"wrap",inputs:[{name:"_avatar",type:"address"},{name:"_amount",type:"uint256"},{name:"_type",type:"uint8"}],outputs:[{type:"address"}],stateMutability:"nonpayable"},{type:"function",name:"trust",inputs:[{name:"_trustReceiver",type:"address"},{name:"_expiry",type:"uint96"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"isTrusted",inputs:[{name:"_truster",type:"address"},{name:"_trustee",type:"address"}],outputs:[{type:"bool"}],stateMutability:"view"},{type:"function",name:"toTokenId",inputs:[{name:"_avatar",type:"address"}],outputs:[{type:"uint256"}],stateMutability:"pure"},{type:"function",name:"safeTransferFrom",inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_id",type:"uint256"},{name:"_value",type:"uint256"},{name:"_data",type:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"isHuman",inputs:[{name:"_human",type:"address"}],outputs:[{type:"bool"}],stateMutability:"view"}];class hy extends _{constructor(y){super({address:y.address,abi:y9,rpcUrl:y.rpcUrl})}async isTrusted(y,v){return this.read("isTrusted",[y,v])}async isApprovedForAll(y,v){return this.read("isApprovedForAll",[y,v])}async toTokenId(y){return this.read("toTokenId",[y])}trust(y,v){return{to:this.address,data:this.encodeWrite("trust",[y,v]),value:0n}}setApprovalForAll(y,v){return{to:this.address,data:this.encodeWrite("setApprovalForAll",[y,v]),value:0n}}wrap(y,v,b){return{to:this.address,data:this.encodeWrite("wrap",[y,v,b]),value:0n}}safeTransferFrom(y,v,b,S,u="0x"){return{to:this.address,data:this.encodeWrite("safeTransferFrom",[y,v,b,S,u]),value:0n}}operateFlowMatrix(y,v,b,S){return{to:this.address,data:this.encodeWrite("operateFlowMatrix",[y,v,b,S]),value:0n}}async isHuman(y){return this.read("isHuman",[y])}}var v9=[{type:"function",name:"erc20Circles",inputs:[{name:"_circlesType",type:"uint8"},{name:"_avatar",type:"address"}],outputs:[{type:"address"}],stateMutability:"view"}];class Py extends _{constructor(y){super({address:y.address,abi:v9,rpcUrl:y.rpcUrl})}async erc20Circles(y,v){return this.read("erc20Circles",[y,v])}}var a0=[{type:"function",name:"unwrap",inputs:[{name:"_amount",type:"uint256"}],outputs:[],stateMutability:"nonpayable"}];class $ extends _{constructor(y){super({address:y.address,abi:a0,rpcUrl:y.rpcUrl})}unwrap(y){return{to:this.address,data:this.encodeWrite("unwrap",[y]),value:0n}}}class O extends _{constructor(y){super({address:y.address,abi:a0,rpcUrl:y.rpcUrl})}unwrap(y){return{to:this.address,data:this.encodeWrite("unwrap",[y]),value:0n}}}var B;((y)=>{y[y.Demurrage=0]="Demurrage",y[y.Inflation=1]="Inflation"})(B||={});var b9;((y)=>{y.Standard="Standard",y.Custom="Custom"})(b9||={});class _y extends Error{name;code;source;cause;context;constructor(y,v,b){super(v);if(this.name=y,this.code=b?.code,this.source=b?.source??"UNKNOWN",this.cause=b?.cause,this.context=b?.context,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,source:this.source,context:this.context,cause:this.cause instanceof Error?{name:this.cause.name,message:this.cause.message}:this.cause,stack:this.stack}}toString(){let y=`[${this.source}] ${this.name}: ${this.message}`;if(this.code)y+=` (Code: ${this.code})`;if(this.context)y+=`
|
|
4
|
-
Context: ${JSON.stringify(this.context,null,2)}`;return y}}class
|
|
1
|
+
var ey=[];for(let y=0;y<256;y++)ey[y]=y.toString(16).padStart(2,"0");function My(y){let u="0x";for(let v=0;v<y.length;v++)u+=ey[y[v]];return u}function y1(y){let u=new Uint8Array(y.length*2);return y.forEach((v,b)=>{let t=v>>8,S=v&255,X=2*b;u[X]=t,u[X+1]=S}),My(u)}function u1(y,u,v){let b=new Set([u.toLowerCase(),v.toLowerCase()]);y.forEach((X)=>{b.add(X.from.toLowerCase()),b.add(X.to.toLowerCase()),b.add(X.tokenOwner.toLowerCase())});let t=[...b].sort((X,h)=>{let s=BigInt(X),N=BigInt(h),D=s<N,U=s>N;return D?-1:U?1:0}),S={};return t.forEach((X,h)=>{S[X]=h}),{sorted:t,idx:S}}function v1(y,u){let v=new Set,b=[],t=null;if(y.forEach((S,X)=>{let h=S.from.toLowerCase(),s=S.to.toLowerCase();if(h===u&&s===u)t=X;else if(s===u)b.push(X)}),t!==null)v.add(t);else b.forEach((S)=>v.add(S));return v}function Ey(y,u,v,b){let t=y.toLowerCase(),S=u.toLowerCase(),{sorted:X,idx:h}=u1(b,t,S),s=v1(b,S),N=b.map((M,W)=>{return{streamSinkId:s.has(W)?1:0,amount:M.value}});if(s.size===0)throw Error(`No terminal edges detected. Flow must have at least one edge delivering to receiver ${S}`);let D=Array.from(s),U=[{sourceCoordinate:h[t],flowEdgeIds:D,data:new Uint8Array(0)}],m=[];b.forEach((M)=>{m.push(h[M.tokenOwner.toLowerCase()]),m.push(h[M.from.toLowerCase()]),m.push(h[M.to.toLowerCase()])});let P=y1(m),x=BigInt(v),V=N.filter((M)=>M.streamSinkId===1).reduce((M,W)=>M+BigInt(W.amount.toString()),BigInt(0));if(V!==x)throw Error(`Terminal sum ${V} does not equal expected ${x}`);return{flowVertices:X,flowEdges:N,streams:U,packedCoordinates:P,sourceCoordinate:h[t]}}function Iy(y,u){let v=y.streams.map((b)=>({sourceCoordinate:b.sourceCoordinate,flowEdgeIds:b.flowEdgeIds,data:b.data instanceof Uint8Array?My(b.data):b.data}));if(u&&v.length>0)v[0].data=u instanceof Uint8Array?My(u):u;return v}var cy=(y)=>BigInt(y),n=(y)=>parseInt(y,16),b1=(y)=>{if(y.startsWith("0x"))y=y.slice(2);if(y.length%2!==0)throw Error("Invalid hex string");let u=new Uint8Array(y.length/2);for(let v=0;v<y.length;v+=2)u[v/2]=parseInt(y.substr(v,2),16);return u};function t1(y,u){if(typeof u==="string"&&u.startsWith("0x")){let v=u.slice(2);if(v.length===40)return u;if(v.length===64){if(y.toLowerCase().includes("digest")||y.toLowerCase().includes("data")||y.toLowerCase().includes("bytes"))return b1(u);try{return cy(u)}catch{return u}}try{let b=n(u);if(b<Number.MAX_SAFE_INTEGER)return b;return cy(u)}catch{return u}}if(u==="true")return!0;if(u==="false")return!1;return u}function S1(y){let{event:u,values:v}=y,b={$event:u,blockNumber:v.blockNumber?n(v.blockNumber):0,timestamp:v.timestamp?n(v.timestamp):void 0,transactionIndex:v.transactionIndex?n(v.transactionIndex):0,logIndex:v.logIndex?n(v.logIndex):0,transactionHash:v.transactionHash};for(let[t,S]of Object.entries(v)){if(["blockNumber","timestamp","transactionIndex","logIndex","transactionHash"].includes(t))continue;b[t]=t1(t,S)}return b}function X1(y){return y.map(S1)}class xy{_subscribers=[];subscribe(y){return this._subscribers.push(y),()=>{let u=this._subscribers.indexOf(y);if(u>-1)this._subscribers.splice(u,1)}}constructor(){this._subscribers=[]}emit(y){this._subscribers.forEach((u)=>u(y))}static create(){let y=new xy;return{property:y,emit:(u)=>y.emit(u)}}}class Gy extends Error{name;code;source;cause;context;constructor(y,u,v){super(u);if(this.name=y,this.code=v?.code,this.source=v?.source??"UNKNOWN",this.cause=v?.cause,this.context=v?.context,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,source:this.source,context:this.context,cause:this.cause instanceof Error?{name:this.cause.name,message:this.cause.message}:this.cause,stack:this.stack}}toString(){let y=`[${this.source}] ${this.name}: ${this.message}`;if(this.code)y+=` (Code: ${this.code})`;if(this.context)y+=`
|
|
2
|
+
Context: ${JSON.stringify(this.context,null,2)}`;return y}}class g extends Gy{constructor(y,u){super("RpcError",y,{...u,source:u?.source??"RPC_REQUEST"})}static connectionFailed(y,u){return new g("Failed to connect to RPC endpoint",{code:"RPC_CONNECTION_FAILED",source:"RPC_CONNECTION",cause:u,context:{url:y}})}static timeout(y,u){return new g("RPC request timed out",{code:"RPC_TIMEOUT",source:"RPC_TIMEOUT",context:{method:y,timeout:u}})}static invalidResponse(y,u){return new g("Invalid RPC response",{code:"RPC_INVALID_RESPONSE",source:"RPC_RESPONSE",context:{method:y,response:u}})}static fromJsonRpcError(y){return new g(y.message,{code:y.code,source:"RPC_RESPONSE",context:{data:y.data}})}static websocketError(y,u){return new g(y,{code:"RPC_WEBSOCKET_ERROR",source:"RPC_WEBSOCKET",cause:u})}}class ay{rpcUrl;requestId=0;websocket=null;websocketConnected=!1;pendingResponses={};subscriptionListeners={};reconnectAttempt=0;initialBackoff=2000;maxBackoff=120000;constructor(y){this.rpcUrl=y}async call(y,u){this.requestId++;let v={jsonrpc:"2.0",id:this.requestId,method:y,params:u};try{let b=await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)});if(!b.ok)throw g.connectionFailed(this.rpcUrl,Error(`HTTP ${b.status}: ${b.statusText}`));let t=await b.json();if(t.error)throw g.fromJsonRpcError(t.error);if(t.result===void 0)throw g.invalidResponse(y,t);return t.result}catch(b){if(b instanceof g)throw b;throw g.connectionFailed(this.rpcUrl,b)}}setRpcUrl(y){this.rpcUrl=y}getRpcUrl(){return this.rpcUrl}connect(){return new Promise((y)=>{let u=this.rpcUrl.replace("http","ws");if(u.endsWith("/"))u+="ws";else u+="/ws";this.websocket=new WebSocket(u),this.websocket.onopen=()=>{console.log("WebSocket connected"),this.websocketConnected=!0,this.reconnectAttempt=0,y()},this.websocket.onmessage=(v)=>{let b=JSON.parse(v.data),{id:t,method:S,params:X}=b;if(t!==void 0&&this.pendingResponses[t])this.pendingResponses[t].resolve(b),delete this.pendingResponses[t];if(S==="eth_subscription"&&X){let{subscription:h,result:s}=X;if(this.subscriptionListeners[h])this.subscriptionListeners[h].forEach((N)=>N(s))}},this.websocket.onclose=()=>{console.warn("WebSocket closed"),this.websocketConnected=!1},this.websocket.onerror=(v)=>{console.error("WebSocket error:",v),this.websocketConnected=!1,this.scheduleReconnect()}})}scheduleReconnect(){let y=Math.min(this.initialBackoff*Math.pow(2,this.reconnectAttempt),this.maxBackoff),u=y*(Math.random()*0.5),v=y+u;console.log(`Reconnecting in ${Math.round(v)}ms (attempt #${this.reconnectAttempt+1})`),this.reconnectAttempt++,setTimeout(()=>{this.reconnect()},v)}async reconnect(){if(this.websocketConnected)return;try{await this.connect(),console.log("Reconnection successful")}catch(y){console.error("Reconnection attempt failed:",y),this.scheduleReconnect()}}sendMessage(y,u,v=5000){if(!this.websocket||this.websocket.readyState!==WebSocket.OPEN)return Promise.reject(g.connectionFailed(this.rpcUrl));let b=this.requestId++,t={jsonrpc:"2.0",method:y,params:u,id:b};return new Promise((S,X)=>{this.pendingResponses[b]={resolve:S,reject:X},this.websocket.send(JSON.stringify(t)),setTimeout(()=>{if(this.pendingResponses[b])this.pendingResponses[b].reject(g.timeout(y,v)),delete this.pendingResponses[b]},v)})}async subscribe(y){let u=y?.toLowerCase();if(!this.websocketConnected)await this.connect();let v=xy.create(),b=JSON.stringify(u?{address:u}:{}),t=(await this.sendMessage("eth_subscribe",["circles",b])).result;if(!this.subscriptionListeners[t])this.subscriptionListeners[t]=[];return this.subscriptionListeners[t].push((S)=>{X1(S).forEach((X)=>v.emit(X))}),v.property}}var yy=BigInt(4294967295),ly=BigInt(32);function h1(y,u=!1){if(u)return{h:Number(y&yy),l:Number(y>>ly&yy)};return{h:Number(y>>ly&yy)|0,l:Number(y&yy)|0}}function s1(y,u=!1){let v=y.length,b=new Uint32Array(v),t=new Uint32Array(v);for(let S=0;S<v;S++){let{h:X,l:h}=h1(y[S],u);[b[S],t[S]]=[X,h]}return[b,t]}var N1=(y,u,v)=>y<<v|u>>>32-v,D1=(y,u,v)=>u<<v|y>>>32-v,P1=(y,u,v)=>u<<v-32|y>>>64-v,j1=(y,u,v)=>y<<v-32|u>>>64-v;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function U1(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function $y(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function uy(y,...u){if(!U1(y))throw Error("Uint8Array expected");if(u.length>0&&!u.includes(y.length))throw Error("Uint8Array expected of length "+u+", got length="+y.length)}function Oy(y,u=!0){if(y.destroyed)throw Error("Hash instance has been destroyed");if(u&&y.finished)throw Error("Hash#digest() has already been called")}function k1(y,u){uy(y);let v=u.outputLen;if(y.length<v)throw Error("digestInto() expects output buffer of length at least "+v)}function m1(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function Zy(...y){for(let u=0;u<y.length;u++)y[u].fill(0)}var M1=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function E1(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function I1(y){for(let u=0;u<y.length;u++)y[u]=E1(y[u]);return y}var dy=M1?(y)=>y:I1;function x1(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function oy(y){if(typeof y==="string")y=x1(y);return uy(y),y}class qy{}function A1(y){let u=(b)=>y().update(oy(b)).digest(),v=y();return u.outputLen=v.outputLen,u.blockLen=v.blockLen,u.create=()=>y(),u}var K1=BigInt(0),d=BigInt(1),V1=BigInt(2),C1=BigInt(7),W1=BigInt(256),g1=BigInt(113),By=[],ry=[],zy=[];for(let y=0,u=d,v=1,b=0;y<24;y++){[v,b]=[b,(2*v+3*b)%5],By.push(2*(5*b+v)),ry.push((y+1)*(y+2)/2%64);let t=K1;for(let S=0;S<7;S++)if(u=(u<<d^(u>>C1)*g1)%W1,u&V1)t^=d<<(d<<BigInt(S))-d;zy.push(t)}var Jy=s1(zy,!0),H1=Jy[0],L1=Jy[1],ny=(y,u,v)=>v>32?P1(y,u,v):N1(y,u,v),Ry=(y,u,v)=>v>32?j1(y,u,v):D1(y,u,v);function F1(y,u=24){let v=new Uint32Array(10);for(let b=24-u;b<24;b++){for(let X=0;X<10;X++)v[X]=y[X]^y[X+10]^y[X+20]^y[X+30]^y[X+40];for(let X=0;X<10;X+=2){let h=(X+8)%10,s=(X+2)%10,N=v[s],D=v[s+1],U=ny(N,D,1)^v[h],m=Ry(N,D,1)^v[h+1];for(let P=0;P<50;P+=10)y[X+P]^=U,y[X+P+1]^=m}let t=y[2],S=y[3];for(let X=0;X<24;X++){let h=ry[X],s=ny(t,S,h),N=Ry(t,S,h),D=By[X];t=y[D],S=y[D+1],y[D]=s,y[D+1]=N}for(let X=0;X<50;X+=10){for(let h=0;h<10;h++)v[h]=y[X+h];for(let h=0;h<10;h++)y[X+h]^=~v[(h+2)%10]&v[(h+4)%10]}y[0]^=H1[b],y[1]^=L1[b]}Zy(v)}class Ay extends qy{constructor(y,u,v,b=!1,t=24){super();if(this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=y,this.suffix=u,this.outputLen=v,this.enableXOF=b,this.rounds=t,$y(v),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=m1(this.state)}clone(){return this._cloneInto()}keccak(){dy(this.state32),F1(this.state32,this.rounds),dy(this.state32),this.posOut=0,this.pos=0}update(y){Oy(this),y=oy(y),uy(y);let{blockLen:u,state:v}=this,b=y.length;for(let t=0;t<b;){let S=Math.min(u-this.pos,b-t);for(let X=0;X<S;X++)v[this.pos++]^=y[t++];if(this.pos===u)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:u,pos:v,blockLen:b}=this;if(y[v]^=u,(u&128)!==0&&v===b-1)this.keccak();y[b-1]^=128,this.keccak()}writeInto(y){Oy(this,!1),uy(y),this.finish();let u=this.state,{blockLen:v}=this;for(let b=0,t=y.length;b<t;){if(this.posOut>=v)this.keccak();let S=Math.min(v-this.posOut,t-b);y.set(u.subarray(this.posOut,this.posOut+S),b),this.posOut+=S,b+=S}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return $y(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(k1(y,this),this.finished)throw Error("digest() was already called");return this.writeInto(y),this.destroy(),y}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,Zy(this.state)}_cloneInto(y){let{blockLen:u,suffix:v,outputLen:b,rounds:t,enableXOF:S}=this;return y||(y=new Ay(u,v,b,S,t)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=t,y.suffix=v,y.outputLen=b,y.enableXOF=S,y.destroyed=this.destroyed,y}}var Q1=(y,u,v)=>A1(()=>new Ay(u,y,v)),T1=(()=>Q1(1,136,32))(),y0=[];for(let y=0;y<256;y++)y0[y]=y.toString(16).padStart(2,"0");function i1(y){let u="0x";for(let v=0;v<y.length;v++)u+=y0[y[v]];return u}function f1(y){let u=y.toLowerCase().replace("0x",""),v=i1(T1(new TextEncoder().encode(u))).slice(2),b="0x";for(let t=0;t<u.length;t++)b+=parseInt(v[t],16)>=8?u[t].toUpperCase():u[t];return b}function j(y){return y.toLowerCase()}function w1(y){return f1(y)}function Y1(y){if(typeof y!=="string")return!1;let u=y.replace("0x","");return u.length===40&&/^[0-9a-fA-F]{40}$/.test(u)}function I(y){if(y===null||y===void 0)return y;if(Y1(y))return w1(y);if(Array.isArray(y))return y.map((u)=>I(u));if(typeof y==="object"&&y!==null){let u={};for(let v in y)if(Object.prototype.hasOwnProperty.call(y,v))u[v]=I(y[v]);return u}return y}function _1(y){return{Source:j(y.from),Sink:j(y.to),TargetFlow:y.targetFlow.toString(),WithWrap:y.useWrappedBalances,FromTokens:y.fromTokens?.map(j),ToTokens:y.toTokens?.map(j),ExcludedFromTokens:y.excludeFromTokens?.map(j),ExcludedToTokens:y.excludeToTokens?.map(j),SimulatedBalances:y.simulatedBalances?.map((u)=>({Holder:j(u.holder),Token:j(u.token),Amount:u.amount.toString(),IsWrapped:u.isWrapped,IsStatic:u.isStatic})),SimulatedTrusts:y.simulatedTrusts?.map((u)=>({Truster:j(u.truster),Trustee:j(u.trustee)})),MaxTransfers:y.maxTransfers}}function R(y){let u={};for(let v in y){let b=y[v];if(b===null||b===void 0)u[v]=b;else if(typeof b==="string"&&/^\d+$/.test(b))u[v]=BigInt(b);else if(typeof b==="object"&&!Array.isArray(b))u[v]=R(b);else if(Array.isArray(b))u[v]=b.map((t)=>typeof t==="object"&&t!==null?R(t):t);else u[v]=b}return u}var b8=BigInt(96)*BigInt(1000000000000000000),p1=BigInt("9999999999999999999999999999999999999");class u0{client;constructor(y){this.client=y}async findPath(y){let u=_1(y),v=await this.client.call("circlesV2_findPath",[u]),b=R(v);return I(b)}async findMaxFlow(y){let u=await this.findPath({...y,targetFlow:p1});return BigInt(u.maxFlow)}}class v0{client;constructor(y){this.client=y}async query(y){let u=await this.client.call("circles_query",[y]);return I(u)}async tables(){return this.client.call("circles_tables",[])}async events(y,u,v=null,b=null,t=!1){let S=await this.client.call("circles_events",[y,u,v,b,t]);return I(S)}}var c1=[{name:"blockNumber",sortOrder:"DESC"},{name:"transactionIndex",sortOrder:"DESC"},{name:"logIndex",sortOrder:"DESC"}];class _{params;client;rowTransformer;cursorColumns;orderColumns;get currentPage(){return this._currentPage}_currentPage;constructor(y,u,v){this.client=y,this.params=u,this.rowTransformer=v||u.rowTransformer,this.orderColumns=u.orderColumns,this.cursorColumns=u.cursorColumns||this.buildEventCursorColumns()}buildEventCursorColumns(){let y=c1.map((u)=>({...u,sortOrder:this.params.sortOrder}));if(this.params.table==="TransferBatch")y.push({name:"batchIndex",sortOrder:this.params.sortOrder});return y}transformCursorValue(y,u){if(u)return u(y);if(typeof y==="bigint")return y.toString();return y}createEqualityPredicate(y,u){return{Type:"FilterPredicate",FilterType:"Equals",Column:y.name,Value:this.transformCursorValue(u,y.toValue)}}createComparisonPredicate(y,u){return{Type:"FilterPredicate",FilterType:y.sortOrder==="ASC"?"GreaterThan":"LessThan",Column:y.name,Value:this.transformCursorValue(u,y.toValue)}}buildCursorFilter(y){if(!y)return[];let u=[];for(let v=0;v<this.cursorColumns.length;v++){let b=this.cursorColumns[v],t=y[b.name];if(t===void 0)continue;if(v===0)u.push(this.createComparisonPredicate(b,t));else{let S=[];for(let X=0;X<v;X++){let h=this.cursorColumns[X],s=y[h.name];if(s!==void 0)S.push(this.createEqualityPredicate(h,s))}S.push(this.createComparisonPredicate(b,t)),u.push({Type:"Conjunction",ConjunctionType:"And",Predicates:S})}}if(u.length===0)return[];return[{Type:"Conjunction",ConjunctionType:"Or",Predicates:u}]}buildOrderBy(){if(this.orderColumns&&this.orderColumns.length>0)return this.orderColumns;return this.cursorColumns.map((y)=>({Column:y.name,SortOrder:y.sortOrder}))}combineFilters(y,u){if(!y?.length&&!u?.length)return[];if(!y?.length)return u||[];if(!u?.length)return y;return[{Type:"Conjunction",ConjunctionType:"And",Predicates:[...y,...u]}]}rowsToObjects(y){let{columns:u,rows:v}=y;return v.map((b)=>{let t={};return u.forEach((S,X)=>{t[S]=b[X]}),this.rowTransformer?this.rowTransformer(t):t})}rowToCursor(y){let u={};for(let v of this.cursorColumns)u[v.name]=y[v.name];return u}getCursors(y){if(y.length===0)return{};return{first:this.rowToCursor(y[0]),last:this.rowToCursor(y[y.length-1])}}async queryNextPage(){let y=this.buildCursorFilter(this._currentPage?.lastCursor),u=this.combineFilters(this.params.filter,y),v={Namespace:this.params.namespace,Table:this.params.table,Columns:this.params.columns,Filter:u,Order:this.buildOrderBy(),Limit:this.params.limit},b=await this.client.call("circles_query",[v]),t=this.rowsToObjects(b),S=this.getCursors(t);return this._currentPage={limit:this.params.limit,size:t.length,firstCursor:S.first,lastCursor:S.last,sortOrder:this.params.sortOrder,hasMore:t.length===this.params.limit,results:t},t.length>0}reset(){this._currentPage=void 0}}class b0{client;constructor(y){this.client=y}transformQueryResponse(y){let{columns:u,rows:v}=y;return v.map((b)=>{let t={};return u.forEach((S,X)=>{t[S]=b[X]}),t})}async getCommonTrust(y,u){let v=await this.client.call("circles_getCommonTrust",[j(y),j(u)]);return I(v)}getTrustRelations(y,u=100,v="DESC"){let b=j(y),t=[{Type:"Conjunction",ConjunctionType:"And",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"version",Value:2},{Type:"Conjunction",ConjunctionType:"Or",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"trustee",Value:b},{Type:"FilterPredicate",FilterType:"Equals",Column:"truster",Value:b}]}]}];return new _(this.client,{namespace:"V_Crc",table:"TrustRelations",sortOrder:v,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","version","trustee","truster","expiryTime"],filter:t,limit:u},(S)=>I(S))}async getAggregatedTrustRelations(y){let u=j(y),v=this.getTrustRelations(u,1000),b=[];while(await v.queryNextPage())if(b.push(...v.currentPage.results),!v.currentPage.hasMore)break;let t={};b.forEach((X)=>{let h=j(X.truster),s=j(X.trustee),N=h!==u?X.truster:X.trustee;if(!t[N])t[N]=[];t[N].push(X)});let S=Object.entries(t).filter(([X])=>j(X)!==u).map(([X,h])=>{let s=Math.max(...h.map((D)=>D.timestamp)),N;if(h.length===2)N="mutuallyTrusts";else if(j(h[0]?.trustee)===u)N="trustedBy";else if(j(h[0]?.truster)===u)N="trusts";else throw Error("Unexpected trust list row. Couldn't determine trust relation.");return{subjectAvatar:u,relation:N,objectAvatar:X,timestamp:s}});return I(S)}async getTrustedBy(y){let u=j(y),v=(await this.getAggregatedTrustRelations(u)).filter((b)=>b.relation==="trustedBy");return I(v)}async getTrusts(y){let u=j(y),v=(await this.getAggregatedTrustRelations(u)).filter((b)=>b.relation==="trusts");return I(v)}async getMutualTrusts(y){let u=j(y),v=(await this.getAggregatedTrustRelations(u)).filter((b)=>b.relation==="mutuallyTrusts");return I(v)}}class c{static ONE_64=1n<<64n;static GAMMA_64=18443079296116538654n;static BETA_64=18450409579521241655n;static SECONDS_PER_DAY=86400n;static INFLATION_DAY_ZERO_UNIX=1602720000n;static ATTO_FACTOR=1000000000000000000n;static FACTOR_1E12=1000000000000n;static V1_ACCURACY=100000000n;static V1_INFLATION_PCT_NUM=107n;static V1_INFLATION_PCT_DEN=100n;static PERIOD_SEC=31556952n;static mul64(y,u){return y*u>>64n}static mulU(y,u){return y*u>>64n}static pow64(y,u){let v=y,b=u,t=this.ONE_64;while(b>0n){if((b&1n)===1n)t=this.mul64(t,v);v=this.mul64(v,v),b>>=1n}return t}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,u){return y*u/this.ONE_36}static pow36(y,u){let v=this.ONE_36,b=y,t=u;while(t>0n){if((t&1n)===1n)v=this.mul36(v,b);b=this.mul36(b,b),t>>=1n}return v}static attoCirclesToCircles(y){if(y===0n)return 0;let u=y/this.ATTO_FACTOR,v=y%this.ATTO_FACTOR,b=BigInt(Number.MAX_SAFE_INTEGER);if(u>b||u<-b)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(u)+Number(v)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,u){return this.mulU(this.pow64(this.GAMMA_64,u),y)}static demurrageToInflationary(y,u){return this.mulU(this.pow64(this.BETA_64,u),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,u=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(u))}static attoStaticCirclesToAttoCircles(y,u=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(u))}static inflationaryToDemurrageExact(y,u){let v=this.pow36(this.GAMMA_36,u);return y*v/this.ONE_36}static demurrageToInflationaryExact(y,u){let v=this.pow36(this.BETA_36,u);return y*v/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,u=BigInt(Math.floor(Date.now()/1000))){let v=this.dayFromTimestamp(u);return this.demurrageToInflationaryExact(y,v)}static attoStaticCirclesToAttoCirclesExact(y,u=BigInt(Math.floor(Date.now()/1000))){let v=this.dayFromTimestamp(u);return this.inflationaryToDemurrageExact(y,v)}static truncateToInt64(y){let u=y/this.FACTOR_1E12,v=9223372036854775807n;return u>v?v:u}static blowUpToBigInt(y){return y*this.FACTOR_1E12}static truncateToSixDecimals(y){return this.blowUpToBigInt(this.truncateToInt64(y))}static v1InflateFactor(y){if(y===0n)return this.V1_ACCURACY;return this.V1_ACCURACY*this.V1_INFLATION_PCT_NUM**y/this.V1_INFLATION_PCT_DEN**y}static attoCrcToAttoCircles(y,u){let v=u-this.INFLATION_DAY_ZERO_UNIX,b=v/this.PERIOD_SEC,t=v%this.PERIOD_SEC,S=this.v1InflateFactor(b),X=this.v1InflateFactor(b+1n);return this.v1ToDemurrage(y,S,X,t,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,u){let v=u-this.INFLATION_DAY_ZERO_UNIX,b=v/this.PERIOD_SEC,t=v%this.PERIOD_SEC,S=this.v1InflateFactor(b),X=this.v1InflateFactor(b+1n),h=S*(this.PERIOD_SEC-t)+X*t;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/h}static v1ToDemurrage(y,u,v,b,t){let S=u*(t-b)+v*b;return y*3n*this.V1_ACCURACY*t/S}}class t0{client;constructor(y){this.client=y}async getTotalBalance(y,u=!0){let v=await this.client.call("circlesV2_getTotalBalance",[j(y),u]);return c.circlesToAttoCircles(v)}async getTokenBalances(y){let u=(await this.client.call("circles_getTokenBalances",[j(y)])).map((v)=>R(v));return I(u)}}class S0{client;constructor(y){this.client=y}async getAvatarInfo(y){let u=await this.getAvatarInfoBatch([y]);return u.length>0?u[0]:void 0}async getAvatarInfoBatch(y){if(y.length===0)return[];let u=y.map((b)=>j(b)),v=await this.client.call("circles_getAvatarInfoBatch",[u]);return I(v)}async getNetworkSnapshot(){let y=await this.client.call("circles_getNetworkSnapshot",[]);return I(y)}}class X0{client;constructor(y){this.client=y}async getProfileByCid(y){return this.client.call("circles_getProfileByCid",[y])}async getProfileByCidBatch(y){return this.client.call("circles_getProfileByCidBatch",[y])}async getProfileByAddress(y){return this.client.call("circles_getProfileByAddress",[j(y)])}async getProfileByAddressBatch(y){return this.client.call("circles_getProfileByAddressBatch",[y.map((u)=>u===null?null:j(u))])}async searchProfiles(y,u=10,v=0,b){return this.client.call("circles_searchProfiles",[y.toLowerCase(),u,v,b])}async searchByAddressOrName(y,u=10,v=0,b){let t=[],S=/^0x[a-fA-F0-9]{40}$/.test(y);if(S)try{let X=await this.getProfileByAddress(y);if(X){let h={...X,address:y};if(!b||!h.avatarType||b.includes(h.avatarType))t.push(h)}}catch(X){console.warn("Failed to get profile by address:",X)}try{let X=await this.searchProfiles(y,u,v,b);if(S&&t.length>0){let h=y.toLowerCase(),s=X.filter((N)=>N.address?.toLowerCase()!==h);t.push(...s)}else t.push(...X)}catch(X){console.warn("Failed to search profiles by text:",X)}return t.slice(0,u)}}class h0{client;constructor(y){this.client=y}async getTokenInfo(y){let u=await this.getTokenInfoBatch([y]);return u.length>0?u[0]:void 0}async getTokenInfoBatch(y){if(y.length===0)return[];let u=y.map((b)=>j(b)),v=(await this.client.call("circles_getTokenInfoBatch",[u])).map((b)=>R(b));return I(v)}getTokenHolders(y,u=100,v="DESC"){let b=j(y);return new _(this.client,{namespace:"V_CrcV2",table:"BalancesByAccountAndToken",columns:["account","tokenAddress","demurragedTotalBalance"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"tokenAddress",Value:b}],cursorColumns:[{name:"demurragedTotalBalance",sortOrder:v},{name:"account",sortOrder:"ASC"}],orderColumns:[{Column:"demurragedTotalBalance",SortOrder:v},{Column:"account",SortOrder:"ASC"}],limit:u,sortOrder:v},(t)=>({account:t.account,tokenAddress:t.tokenAddress,demurragedTotalBalance:t.demurragedTotalBalance}))}}class s0{client;constructor(y){this.client=y}transformQueryResponse(y){let{columns:u,rows:v}=y;return v.map((b)=>{let t={};return u.forEach((S,X)=>{t[S]=b[X]}),t})}async getInvitedBy(y){let u=j(y),v=await this.client.call("circles_query",[{Namespace:"CrcV2",Table:"RegisterHuman",Columns:["inviter"],Filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"avatar",Value:u}],Order:[{Column:"blockNumber",SortOrder:"DESC"}],Limit:1}]);if(v.length>0)return I(v[0].inviter);return}async getInvitations(y){let u=j(y),v=96,b=await this.client.call("circles_getAvatarInfoBatch",[[u]]);if((b.length>0?b[0]:void 0)?.version===2)return[];let t=await this.client.call("circles_query",[{Namespace:"V_Crc",Table:"TrustRelations",Columns:["truster","trustee"],Filter:[{Type:"Conjunction",ConjunctionType:"And",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"version",Value:2},{Type:"FilterPredicate",FilterType:"Equals",Column:"trustee",Value:u}]}],Order:[]}]),S=this.transformQueryResponse(t).map((s)=>s.truster);if(S.length===0)return[];let X=await this.client.call("circles_getAvatarInfoBatch",[S]),h=[];for(let s of X){if(!s?.isHuman)continue;let N=(await this.client.call("circles_getTokenBalances",[s.avatar])).find((D)=>j(D.tokenAddress)===j(s.avatar));if(N&&N.circles>=96)h.push(s)}return I(h)}async getInvitationsFrom(y,u=!1){let v=j(y);if(u){let b=await this.client.call("circles_query",[{Namespace:"CrcV2",Table:"RegisterHuman",Columns:["avatar"],Filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"inviter",Value:v}],Order:[{Column:"blockNumber",SortOrder:"DESC"}]}]),t=this.transformQueryResponse(b).map((S)=>S.avatar);return I(t)}else{let b=await this.client.call("circles_query",[{Namespace:"V_Crc",Table:"TrustRelations",Columns:["trustee","truster"],Filter:[{Type:"Conjunction",ConjunctionType:"And",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"version",Value:2},{Type:"FilterPredicate",FilterType:"Equals",Column:"truster",Value:v}]}],Order:[]}]),t=this.transformQueryResponse(b).map((s)=>s.trustee);if(t.length===0)return[];let S=await this.client.call("circles_getAvatarInfoBatch",[t]),X=new Set(S.filter((s)=>s!==null).map((s)=>j(s.avatar))),h=t.filter((s)=>!X.has(j(s)));return I(h)}}}function l1(y,u){let v=BigInt(y),b=c.attoCirclesToCircles(v),t=c.attoCirclesToAttoCrc(v,BigInt(u)),S=c.attoCirclesToCircles(t),X=c.attoCirclesToAttoStaticCircles(v,BigInt(u)),h=c.attoCirclesToCircles(X);return{attoCircles:v,circles:b,staticAttoCircles:X,staticCircles:h,attoCrc:t,crc:S}}class N0{client;constructor(y){this.client=y}getTransactionHistory(y,u=50,v="DESC"){let b=j(y),t=[{Type:"Conjunction",ConjunctionType:"And",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"version",Value:2},{Type:"Conjunction",ConjunctionType:"Or",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"from",Value:b},{Type:"FilterPredicate",FilterType:"Equals",Column:"to",Value:b}]}]}];return new _(this.client,{namespace:"V_Crc",table:"TransferSummary",sortOrder:v,columns:[],filter:t,limit:u},(S)=>{let X=l1(S.value,S.timestamp),h={...S,...X};return I(h)})}}class D0{client;constructor(y){this.client=y}async findGroups(y=50,u){let v=this.getGroups(y,u,"DESC"),b=[];while(await v.queryNextPage()){if(b.push(...v.currentPage.results),b.length>=y)break;if(!v.currentPage.hasMore)break}return b.slice(0,y)}getGroupMemberships(y,u=50,v="DESC"){let b=j(y);return new _(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:v,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"member",Value:b}],limit:u},(t)=>I(t))}getGroupHolders(y,u=100){let v=j(y);return new _(this.client,{namespace:"V_CrcV2",table:"GroupTokenHoldersBalance",sortOrder:"DESC",columns:["group","holder","totalBalance","demurragedTotalBalance","fractionOwnership"],cursorColumns:[{name:"holder",sortOrder:"ASC"}],orderColumns:[{Column:"totalBalance",SortOrder:"DESC"},{Column:"holder",SortOrder:"ASC"}],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:v}],limit:u,rowTransformer:(b)=>{let t={...b,totalBalance:BigInt(b.totalBalance),demurragedTotalBalance:BigInt(b.demurragedTotalBalance)};return I(t)}})}getGroupMembers(y,u=100,v="DESC"){let b=j(y);return new _(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:v,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:b}],limit:u},(t)=>I(t))}getGroups(y=50,u,v="DESC"){let b=[];if(u){if(u.nameStartsWith)b.push({Type:"FilterPredicate",FilterType:"Like",Column:"name",Value:u.nameStartsWith+"%"});if(u.symbolStartsWith)b.push({Type:"FilterPredicate",FilterType:"Like",Column:"symbol",Value:u.symbolStartsWith+"%"});if(u.groupAddressIn&&u.groupAddressIn.length>0){let S=u.groupAddressIn.map((X)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:j(X)}));if(S.length===1)b.push(S[0]);else b.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:S})}if(u.groupTypeIn&&u.groupTypeIn.length>0){let S=u.groupTypeIn.map((X)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"type",Value:X}));if(S.length===1)b.push(S[0]);else b.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:S})}if(u.ownerIn&&u.ownerIn.length>0){let S=u.ownerIn.map((X)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"owner",Value:j(X)}));if(S.length===1)b.push(S[0]);else b.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:S})}if(u.mintHandlerEquals)b.push({Type:"FilterPredicate",FilterType:"Equals",Column:"mintHandler",Value:j(u.mintHandlerEquals)});if(u.treasuryEquals)b.push({Type:"FilterPredicate",FilterType:"Equals",Column:"treasury",Value:j(u.treasuryEquals)})}let t=b.length>1?[{Type:"Conjunction",ConjunctionType:"And",Predicates:b}]:b;return new _(this.client,{namespace:"V_CrcV2",table:"Groups",sortOrder:v,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","type","owner","mintPolicy","mintHandler","treasury","service","feeCollection","memberCount","name","symbol","cidV0Digest","erc20WrapperDemurraged","erc20WrapperStatic"],filter:t,limit:y},(S)=>I(S))}}class P0{client;_pathfinder;_query;_trust;_balance;_avatar;_profile;_token;_invitation;_transaction;_group;constructor(y="https://rpc.circlesubi.network/"){this.client=new ay(y)}get pathfinder(){if(!this._pathfinder)this._pathfinder=new u0(this.client);return this._pathfinder}get query(){if(!this._query)this._query=new v0(this.client);return this._query}get trust(){if(!this._trust)this._trust=new b0(this.client);return this._trust}get balance(){if(!this._balance)this._balance=new t0(this.client);return this._balance}get avatar(){if(!this._avatar)this._avatar=new S0(this.client);return this._avatar}get profile(){if(!this._profile)this._profile=new X0(this.client);return this._profile}get token(){if(!this._token)this._token=new h0(this.client);return this._token}get invitation(){if(!this._invitation)this._invitation=new s0(this.client);return this._invitation}get transaction(){if(!this._transaction)this._transaction=new N0(this.client);return this._transaction}get group(){if(!this._group)this._group=new D0(this.client);return this._group}setRpcUrl(y){this.client.setRpcUrl(y)}getRpcUrl(){return this.client.getRpcUrl()}}class $1{static ONE_64=1n<<64n;static GAMMA_64=18443079296116538654n;static BETA_64=18450409579521241655n;static SECONDS_PER_DAY=86400n;static INFLATION_DAY_ZERO_UNIX=1602720000n;static ATTO_FACTOR=1000000000000000000n;static FACTOR_1E12=1000000000000n;static V1_ACCURACY=100000000n;static V1_INFLATION_PCT_NUM=107n;static V1_INFLATION_PCT_DEN=100n;static PERIOD_SEC=31556952n;static mul64(y,u){return y*u>>64n}static mulU(y,u){return y*u>>64n}static pow64(y,u){let v=y,b=u,t=this.ONE_64;while(b>0n){if((b&1n)===1n)t=this.mul64(t,v);v=this.mul64(v,v),b>>=1n}return t}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,u){return y*u/this.ONE_36}static pow36(y,u){let v=this.ONE_36,b=y,t=u;while(t>0n){if((t&1n)===1n)v=this.mul36(v,b);b=this.mul36(b,b),t>>=1n}return v}static attoCirclesToCircles(y){if(y===0n)return 0;let u=y/this.ATTO_FACTOR,v=y%this.ATTO_FACTOR,b=BigInt(Number.MAX_SAFE_INTEGER);if(u>b||u<-b)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(u)+Number(v)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,u){return this.mulU(this.pow64(this.GAMMA_64,u),y)}static demurrageToInflationary(y,u){return this.mulU(this.pow64(this.BETA_64,u),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,u=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(u))}static attoStaticCirclesToAttoCircles(y,u=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(u))}static inflationaryToDemurrageExact(y,u){let v=this.pow36(this.GAMMA_36,u);return y*v/this.ONE_36}static demurrageToInflationaryExact(y,u){let v=this.pow36(this.BETA_36,u);return y*v/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,u=BigInt(Math.floor(Date.now()/1000))){let v=this.dayFromTimestamp(u);return this.demurrageToInflationaryExact(y,v)}static attoStaticCirclesToAttoCirclesExact(y,u=BigInt(Math.floor(Date.now()/1000))){let v=this.dayFromTimestamp(u);return this.inflationaryToDemurrageExact(y,v)}static truncateToInt64(y){let u=y/this.FACTOR_1E12,v=9223372036854775807n;return u>v?v:u}static blowUpToBigInt(y){return y*this.FACTOR_1E12}static truncateToSixDecimals(y){return this.blowUpToBigInt(this.truncateToInt64(y))}static v1InflateFactor(y){if(y===0n)return this.V1_ACCURACY;return this.V1_ACCURACY*this.V1_INFLATION_PCT_NUM**y/this.V1_INFLATION_PCT_DEN**y}static attoCrcToAttoCircles(y,u){let v=u-this.INFLATION_DAY_ZERO_UNIX,b=v/this.PERIOD_SEC,t=v%this.PERIOD_SEC,S=this.v1InflateFactor(b),X=this.v1InflateFactor(b+1n);return this.v1ToDemurrage(y,S,X,t,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,u){let v=u-this.INFLATION_DAY_ZERO_UNIX,b=v/this.PERIOD_SEC,t=v%this.PERIOD_SEC,S=this.v1InflateFactor(b),X=this.v1InflateFactor(b+1n),h=S*(this.PERIOD_SEC-t)+X*t;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/h}static v1ToDemurrage(y,u,v,b,t){let S=u*(t-b)+v*b;return y*3n*this.V1_ACCURACY*t/S}}async function Ky(y,u,v){let b=new Map,t=new Set;return v.transfers.forEach((S)=>{if(y.toLowerCase()===S.from.toLowerCase())t.add(S.tokenOwner.toLowerCase())}),(await new P0(u).token.getTokenInfoBatch(Array.from(t))).forEach((S)=>{if(S.isWrapped&&!S.isInflationary)S.tokenType="CrcV2_ERC20WrapperDeployed_Demurraged";b.set(S.tokenAddress.toLowerCase(),S)}),b}function Vy(y,u){let v={};return y.transfers.forEach((b)=>{let t=u.get(b.tokenOwner.toLowerCase());if(t&&t.tokenType.startsWith("CrcV2_ERC20WrapperDeployed")){if(!v[b.tokenOwner])v[b.tokenOwner]=[BigInt(0),t.tokenType];v[b.tokenOwner][0]+=BigInt(b.value)}}),v}function Cy(y,u){let v=y.transfers.map((b)=>{let t=u.get(b.tokenOwner.toLowerCase());if(t&&t.tokenType.startsWith("CrcV2_ERC20WrapperDeployed"))return{...b,tokenOwner:t.tokenOwner};return b});return{...y,transfers:v}}var j0=(y)=>BigInt(y),G=(y)=>parseInt(y,16),O1=(y)=>{if(y.startsWith("0x"))y=y.slice(2);if(y.length%2!==0)throw Error("Invalid hex string");let u=new Uint8Array(y.length/2);for(let v=0;v<y.length;v+=2)u[v/2]=parseInt(y.substr(v,2),16);return u};function d1(y,u){if(typeof u==="string"&&u.startsWith("0x")){let v=u.slice(2);if(v.length===40)return u;if(v.length===64){if(y.toLowerCase().includes("digest")||y.toLowerCase().includes("data")||y.toLowerCase().includes("bytes"))return O1(u);try{return j0(u)}catch{return u}}try{let b=G(u);if(b<Number.MAX_SAFE_INTEGER)return b;return j0(u)}catch{return u}}if(u==="true")return!0;if(u==="false")return!1;return u}function n1(y){let{event:u,values:v}=y,b={$event:u,blockNumber:v.blockNumber?G(v.blockNumber):0,timestamp:v.timestamp?G(v.timestamp):void 0,transactionIndex:v.transactionIndex?G(v.transactionIndex):0,logIndex:v.logIndex?G(v.logIndex):0,transactionHash:v.transactionHash};for(let[t,S]of Object.entries(v)){if(["blockNumber","timestamp","transactionIndex","logIndex","transactionHash"].includes(t))continue;b[t]=d1(t,S)}return b}function R1(y){return y.map(n1)}class Wy{_subscribers=[];subscribe(y){return this._subscribers.push(y),()=>{let u=this._subscribers.indexOf(y);if(u>-1)this._subscribers.splice(u,1)}}constructor(){this._subscribers=[]}emit(y){this._subscribers.forEach((u)=>u(y))}static create(){let y=new Wy;return{property:y,emit:(u)=>y.emit(u)}}}class x0 extends Error{name;code;source;cause;context;constructor(y,u,v){super(u);if(this.name=y,this.code=v?.code,this.source=v?.source??"UNKNOWN",this.cause=v?.cause,this.context=v?.context,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,source:this.source,context:this.context,cause:this.cause instanceof Error?{name:this.cause.name,message:this.cause.message}:this.cause,stack:this.stack}}toString(){let y=`[${this.source}] ${this.name}: ${this.message}`;if(this.code)y+=` (Code: ${this.code})`;if(this.context)y+=`
|
|
3
|
+
Context: ${JSON.stringify(this.context,null,2)}`;return y}}class H extends x0{constructor(y,u){super("RpcError",y,{...u,source:u?.source??"RPC_REQUEST"})}static connectionFailed(y,u){return new H("Failed to connect to RPC endpoint",{code:"RPC_CONNECTION_FAILED",source:"RPC_CONNECTION",cause:u,context:{url:y}})}static timeout(y,u){return new H("RPC request timed out",{code:"RPC_TIMEOUT",source:"RPC_TIMEOUT",context:{method:y,timeout:u}})}static invalidResponse(y,u){return new H("Invalid RPC response",{code:"RPC_INVALID_RESPONSE",source:"RPC_RESPONSE",context:{method:y,response:u}})}static fromJsonRpcError(y){return new H(y.message,{code:y.code,source:"RPC_RESPONSE",context:{data:y.data}})}static websocketError(y,u){return new H(y,{code:"RPC_WEBSOCKET_ERROR",source:"RPC_WEBSOCKET",cause:u})}}class gy{rpcUrl;requestId=0;websocket=null;websocketConnected=!1;pendingResponses={};subscriptionListeners={};reconnectAttempt=0;initialBackoff=2000;maxBackoff=120000;constructor(y){this.rpcUrl=y}async call(y,u){this.requestId++;let v={jsonrpc:"2.0",id:this.requestId,method:y,params:u};try{let b=await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)});if(!b.ok)throw H.connectionFailed(this.rpcUrl,Error(`HTTP ${b.status}: ${b.statusText}`));let t=await b.json();if(t.error)throw H.fromJsonRpcError(t.error);if(t.result===void 0)throw H.invalidResponse(y,t);return t.result}catch(b){if(b instanceof H)throw b;throw H.connectionFailed(this.rpcUrl,b)}}setRpcUrl(y){this.rpcUrl=y}getRpcUrl(){return this.rpcUrl}connect(){return new Promise((y)=>{let u=this.rpcUrl.replace("http","ws");if(u.endsWith("/"))u+="ws";else u+="/ws";this.websocket=new WebSocket(u),this.websocket.onopen=()=>{console.log("WebSocket connected"),this.websocketConnected=!0,this.reconnectAttempt=0,y()},this.websocket.onmessage=(v)=>{let b=JSON.parse(v.data),{id:t,method:S,params:X}=b;if(t!==void 0&&this.pendingResponses[t])this.pendingResponses[t].resolve(b),delete this.pendingResponses[t];if(S==="eth_subscription"&&X){let{subscription:h,result:s}=X;if(this.subscriptionListeners[h])this.subscriptionListeners[h].forEach((N)=>N(s))}},this.websocket.onclose=()=>{console.warn("WebSocket closed"),this.websocketConnected=!1},this.websocket.onerror=(v)=>{console.error("WebSocket error:",v),this.websocketConnected=!1,this.scheduleReconnect()}})}scheduleReconnect(){let y=Math.min(this.initialBackoff*Math.pow(2,this.reconnectAttempt),this.maxBackoff),u=y*(Math.random()*0.5),v=y+u;console.log(`Reconnecting in ${Math.round(v)}ms (attempt #${this.reconnectAttempt+1})`),this.reconnectAttempt++,setTimeout(()=>{this.reconnect()},v)}async reconnect(){if(this.websocketConnected)return;try{await this.connect(),console.log("Reconnection successful")}catch(y){console.error("Reconnection attempt failed:",y),this.scheduleReconnect()}}sendMessage(y,u,v=5000){if(!this.websocket||this.websocket.readyState!==WebSocket.OPEN)return Promise.reject(H.connectionFailed(this.rpcUrl));let b=this.requestId++,t={jsonrpc:"2.0",method:y,params:u,id:b};return new Promise((S,X)=>{this.pendingResponses[b]={resolve:S,reject:X},this.websocket.send(JSON.stringify(t)),setTimeout(()=>{if(this.pendingResponses[b])this.pendingResponses[b].reject(H.timeout(y,v)),delete this.pendingResponses[b]},v)})}async subscribe(y){let u=y?.toLowerCase();if(!this.websocketConnected)await this.connect();let v=Wy.create(),b=JSON.stringify(u?{address:u}:{}),t=(await this.sendMessage("eth_subscribe",["circles",b])).result;if(!this.subscriptionListeners[t])this.subscriptionListeners[t]=[];return this.subscriptionListeners[t].push((S)=>{R1(S).forEach((X)=>v.emit(X))}),v.property}}var vy=BigInt(4294967295),U0=BigInt(32);function e1(y,u=!1){if(u)return{h:Number(y&vy),l:Number(y>>U0&vy)};return{h:Number(y>>U0&vy)|0,l:Number(y&vy)|0}}function G1(y,u=!1){let v=y.length,b=new Uint32Array(v),t=new Uint32Array(v);for(let S=0;S<v;S++){let{h:X,l:h}=e1(y[S],u);[b[S],t[S]]=[X,h]}return[b,t]}var a1=(y,u,v)=>y<<v|u>>>32-v,Z1=(y,u,v)=>u<<v|y>>>32-v,o1=(y,u,v)=>u<<v-32|y>>>64-v,q1=(y,u,v)=>y<<v-32|u>>>64-v;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function B1(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function k0(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function by(y,...u){if(!B1(y))throw Error("Uint8Array expected");if(u.length>0&&!u.includes(y.length))throw Error("Uint8Array expected of length "+u+", got length="+y.length)}function m0(y,u=!0){if(y.destroyed)throw Error("Hash instance has been destroyed");if(u&&y.finished)throw Error("Hash#digest() has already been called")}function r1(y,u){by(y);let v=u.outputLen;if(y.length<v)throw Error("digestInto() expects output buffer of length at least "+v)}function z1(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function A0(...y){for(let u=0;u<y.length;u++)y[u].fill(0)}var J1=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function y6(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function u6(y){for(let u=0;u<y.length;u++)y[u]=y6(y[u]);return y}var M0=J1?(y)=>y:u6;function v6(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function K0(y){if(typeof y==="string")y=v6(y);return by(y),y}class V0{}function b6(y){let u=(b)=>y().update(K0(b)).digest(),v=y();return u.outputLen=v.outputLen,u.blockLen=v.blockLen,u.create=()=>y(),u}var t6=BigInt(0),e=BigInt(1),S6=BigInt(2),X6=BigInt(7),h6=BigInt(256),s6=BigInt(113),C0=[],W0=[],g0=[];for(let y=0,u=e,v=1,b=0;y<24;y++){[v,b]=[b,(2*v+3*b)%5],C0.push(2*(5*b+v)),W0.push((y+1)*(y+2)/2%64);let t=t6;for(let S=0;S<7;S++)if(u=(u<<e^(u>>X6)*s6)%h6,u&S6)t^=e<<(e<<BigInt(S))-e;g0.push(t)}var H0=G1(g0,!0),N6=H0[0],D6=H0[1],E0=(y,u,v)=>v>32?o1(y,u,v):a1(y,u,v),I0=(y,u,v)=>v>32?q1(y,u,v):Z1(y,u,v);function P6(y,u=24){let v=new Uint32Array(10);for(let b=24-u;b<24;b++){for(let X=0;X<10;X++)v[X]=y[X]^y[X+10]^y[X+20]^y[X+30]^y[X+40];for(let X=0;X<10;X+=2){let h=(X+8)%10,s=(X+2)%10,N=v[s],D=v[s+1],U=E0(N,D,1)^v[h],m=I0(N,D,1)^v[h+1];for(let P=0;P<50;P+=10)y[X+P]^=U,y[X+P+1]^=m}let t=y[2],S=y[3];for(let X=0;X<24;X++){let h=W0[X],s=E0(t,S,h),N=I0(t,S,h),D=C0[X];t=y[D],S=y[D+1],y[D]=s,y[D+1]=N}for(let X=0;X<50;X+=10){for(let h=0;h<10;h++)v[h]=y[X+h];for(let h=0;h<10;h++)y[X+h]^=~v[(h+2)%10]&v[(h+4)%10]}y[0]^=N6[b],y[1]^=D6[b]}A0(v)}class Hy extends V0{constructor(y,u,v,b=!1,t=24){super();if(this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=y,this.suffix=u,this.outputLen=v,this.enableXOF=b,this.rounds=t,k0(v),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=z1(this.state)}clone(){return this._cloneInto()}keccak(){M0(this.state32),P6(this.state32,this.rounds),M0(this.state32),this.posOut=0,this.pos=0}update(y){m0(this),y=K0(y),by(y);let{blockLen:u,state:v}=this,b=y.length;for(let t=0;t<b;){let S=Math.min(u-this.pos,b-t);for(let X=0;X<S;X++)v[this.pos++]^=y[t++];if(this.pos===u)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:u,pos:v,blockLen:b}=this;if(y[v]^=u,(u&128)!==0&&v===b-1)this.keccak();y[b-1]^=128,this.keccak()}writeInto(y){m0(this,!1),by(y),this.finish();let u=this.state,{blockLen:v}=this;for(let b=0,t=y.length;b<t;){if(this.posOut>=v)this.keccak();let S=Math.min(v-this.posOut,t-b);y.set(u.subarray(this.posOut,this.posOut+S),b),this.posOut+=S,b+=S}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return k0(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(r1(y,this),this.finished)throw Error("digest() was already called");return this.writeInto(y),this.destroy(),y}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,A0(this.state)}_cloneInto(y){let{blockLen:u,suffix:v,outputLen:b,rounds:t,enableXOF:S}=this;return y||(y=new Hy(u,v,b,S,t)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=t,y.suffix=v,y.outputLen=b,y.enableXOF=S,y.destroyed=this.destroyed,y}}var j6=(y,u,v)=>b6(()=>new Hy(u,y,v)),U6=(()=>j6(1,136,32))(),L0=[];for(let y=0;y<256;y++)L0[y]=y.toString(16).padStart(2,"0");function k6(y){let u="0x";for(let v=0;v<y.length;v++)u+=L0[y[v]];return u}function m6(y){let u=y.toLowerCase().replace("0x",""),v=k6(U6(new TextEncoder().encode(u))).slice(2),b="0x";for(let t=0;t<u.length;t++)b+=parseInt(v[t],16)>=8?u[t].toUpperCase():u[t];return b}function K(y){return y.toLowerCase()}function M6(y){return m6(y)}function E6(y){if(typeof y!=="string")return!1;let u=y.replace("0x","");return u.length===40&&/^[0-9a-fA-F]{40}$/.test(u)}function p(y){if(y===null||y===void 0)return y;if(E6(y))return M6(y);if(Array.isArray(y))return y.map((u)=>p(u));if(typeof y==="object"&&y!==null){let u={};for(let v in y)if(Object.prototype.hasOwnProperty.call(y,v))u[v]=p(y[v]);return u}return y}function I6(y){return{Source:K(y.from),Sink:K(y.to),TargetFlow:y.targetFlow.toString(),WithWrap:y.useWrappedBalances,FromTokens:y.fromTokens?.map(K),ToTokens:y.toTokens?.map(K),ExcludedFromTokens:y.excludeFromTokens?.map(K),ExcludedToTokens:y.excludeToTokens?.map(K),SimulatedBalances:y.simulatedBalances?.map((u)=>({Holder:K(u.holder),Token:K(u.token),Amount:u.amount.toString(),IsWrapped:u.isWrapped,IsStatic:u.isStatic})),SimulatedTrusts:y.simulatedTrusts?.map((u)=>({Truster:K(u.truster),Trustee:K(u.trustee)})),MaxTransfers:y.maxTransfers}}function ty(y){let u={};for(let v in y){let b=y[v];if(b===null||b===void 0)u[v]=b;else if(typeof b==="string"&&/^\d+$/.test(b))u[v]=BigInt(b);else if(typeof b==="object"&&!Array.isArray(b))u[v]=ty(b);else if(Array.isArray(b))u[v]=b.map((t)=>typeof t==="object"&&t!==null?ty(t):t);else u[v]=b}return u}var S8=BigInt(96)*BigInt(1000000000000000000),x6=BigInt("9999999999999999999999999999999999999");class Ly{client;constructor(y){this.client=y}async findPath(y){let u=I6(y),v=await this.client.call("circlesV2_findPath",[u]),b=ty(v);return p(b)}async findMaxFlow(y){let u=await this.findPath({...y,targetFlow:x6});return BigInt(u.maxFlow)}}var A6=[{name:"blockNumber",sortOrder:"DESC"},{name:"transactionIndex",sortOrder:"DESC"},{name:"logIndex",sortOrder:"DESC"}];class a{params;client;rowTransformer;cursorColumns;orderColumns;get currentPage(){return this._currentPage}_currentPage;constructor(y,u,v){this.client=y,this.params=u,this.rowTransformer=v||u.rowTransformer,this.orderColumns=u.orderColumns,this.cursorColumns=u.cursorColumns||this.buildEventCursorColumns()}buildEventCursorColumns(){let y=A6.map((u)=>({...u,sortOrder:this.params.sortOrder}));if(this.params.table==="TransferBatch")y.push({name:"batchIndex",sortOrder:this.params.sortOrder});return y}transformCursorValue(y,u){if(u)return u(y);if(typeof y==="bigint")return y.toString();return y}createEqualityPredicate(y,u){return{Type:"FilterPredicate",FilterType:"Equals",Column:y.name,Value:this.transformCursorValue(u,y.toValue)}}createComparisonPredicate(y,u){return{Type:"FilterPredicate",FilterType:y.sortOrder==="ASC"?"GreaterThan":"LessThan",Column:y.name,Value:this.transformCursorValue(u,y.toValue)}}buildCursorFilter(y){if(!y)return[];let u=[];for(let v=0;v<this.cursorColumns.length;v++){let b=this.cursorColumns[v],t=y[b.name];if(t===void 0)continue;if(v===0)u.push(this.createComparisonPredicate(b,t));else{let S=[];for(let X=0;X<v;X++){let h=this.cursorColumns[X],s=y[h.name];if(s!==void 0)S.push(this.createEqualityPredicate(h,s))}S.push(this.createComparisonPredicate(b,t)),u.push({Type:"Conjunction",ConjunctionType:"And",Predicates:S})}}if(u.length===0)return[];return[{Type:"Conjunction",ConjunctionType:"Or",Predicates:u}]}buildOrderBy(){if(this.orderColumns&&this.orderColumns.length>0)return this.orderColumns;return this.cursorColumns.map((y)=>({Column:y.name,SortOrder:y.sortOrder}))}combineFilters(y,u){if(!y?.length&&!u?.length)return[];if(!y?.length)return u||[];if(!u?.length)return y;return[{Type:"Conjunction",ConjunctionType:"And",Predicates:[...y,...u]}]}rowsToObjects(y){let{columns:u,rows:v}=y;return v.map((b)=>{let t={};return u.forEach((S,X)=>{t[S]=b[X]}),this.rowTransformer?this.rowTransformer(t):t})}rowToCursor(y){let u={};for(let v of this.cursorColumns)u[v.name]=y[v.name];return u}getCursors(y){if(y.length===0)return{};return{first:this.rowToCursor(y[0]),last:this.rowToCursor(y[y.length-1])}}async queryNextPage(){let y=this.buildCursorFilter(this._currentPage?.lastCursor),u=this.combineFilters(this.params.filter,y),v={Namespace:this.params.namespace,Table:this.params.table,Columns:this.params.columns,Filter:u,Order:this.buildOrderBy(),Limit:this.params.limit},b=await this.client.call("circles_query",[v]),t=this.rowsToObjects(b),S=this.getCursors(t);return this._currentPage={limit:this.params.limit,size:t.length,firstCursor:S.first,lastCursor:S.last,sortOrder:this.params.sortOrder,hasMore:t.length===this.params.limit,results:t},t.length>0}reset(){this._currentPage=void 0}}class F0{static ONE_64=1n<<64n;static GAMMA_64=18443079296116538654n;static BETA_64=18450409579521241655n;static SECONDS_PER_DAY=86400n;static INFLATION_DAY_ZERO_UNIX=1602720000n;static ATTO_FACTOR=1000000000000000000n;static FACTOR_1E12=1000000000000n;static V1_ACCURACY=100000000n;static V1_INFLATION_PCT_NUM=107n;static V1_INFLATION_PCT_DEN=100n;static PERIOD_SEC=31556952n;static mul64(y,u){return y*u>>64n}static mulU(y,u){return y*u>>64n}static pow64(y,u){let v=y,b=u,t=this.ONE_64;while(b>0n){if((b&1n)===1n)t=this.mul64(t,v);v=this.mul64(v,v),b>>=1n}return t}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,u){return y*u/this.ONE_36}static pow36(y,u){let v=this.ONE_36,b=y,t=u;while(t>0n){if((t&1n)===1n)v=this.mul36(v,b);b=this.mul36(b,b),t>>=1n}return v}static attoCirclesToCircles(y){if(y===0n)return 0;let u=y/this.ATTO_FACTOR,v=y%this.ATTO_FACTOR,b=BigInt(Number.MAX_SAFE_INTEGER);if(u>b||u<-b)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(u)+Number(v)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,u){return this.mulU(this.pow64(this.GAMMA_64,u),y)}static demurrageToInflationary(y,u){return this.mulU(this.pow64(this.BETA_64,u),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,u=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(u))}static attoStaticCirclesToAttoCircles(y,u=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(u))}static inflationaryToDemurrageExact(y,u){let v=this.pow36(this.GAMMA_36,u);return y*v/this.ONE_36}static demurrageToInflationaryExact(y,u){let v=this.pow36(this.BETA_36,u);return y*v/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,u=BigInt(Math.floor(Date.now()/1000))){let v=this.dayFromTimestamp(u);return this.demurrageToInflationaryExact(y,v)}static attoStaticCirclesToAttoCirclesExact(y,u=BigInt(Math.floor(Date.now()/1000))){let v=this.dayFromTimestamp(u);return this.inflationaryToDemurrageExact(y,v)}static truncateToInt64(y){let u=y/this.FACTOR_1E12,v=9223372036854775807n;return u>v?v:u}static blowUpToBigInt(y){return y*this.FACTOR_1E12}static truncateToSixDecimals(y){return this.blowUpToBigInt(this.truncateToInt64(y))}static v1InflateFactor(y){if(y===0n)return this.V1_ACCURACY;return this.V1_ACCURACY*this.V1_INFLATION_PCT_NUM**y/this.V1_INFLATION_PCT_DEN**y}static attoCrcToAttoCircles(y,u){let v=u-this.INFLATION_DAY_ZERO_UNIX,b=v/this.PERIOD_SEC,t=v%this.PERIOD_SEC,S=this.v1InflateFactor(b),X=this.v1InflateFactor(b+1n);return this.v1ToDemurrage(y,S,X,t,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,u){let v=u-this.INFLATION_DAY_ZERO_UNIX,b=v/this.PERIOD_SEC,t=v%this.PERIOD_SEC,S=this.v1InflateFactor(b),X=this.v1InflateFactor(b+1n),h=S*(this.PERIOD_SEC-t)+X*t;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/h}static v1ToDemurrage(y,u,v,b,t){let S=u*(t-b)+v*b;return y*3n*this.V1_ACCURACY*t/S}}class Fy{client;constructor(y){this.client=y}async getTotalBalance(y,u=!0){let v=await this.client.call("circlesV2_getTotalBalance",[K(y),u]);return F0.circlesToAttoCircles(v)}async getTokenBalances(y){let u=(await this.client.call("circles_getTokenBalances",[K(y)])).map((v)=>ty(v));return p(u)}}class Qy{client;constructor(y){this.client=y}async findGroups(y=50,u){let v=this.getGroups(y,u,"DESC"),b=[];while(await v.queryNextPage()){if(b.push(...v.currentPage.results),b.length>=y)break;if(!v.currentPage.hasMore)break}return b.slice(0,y)}getGroupMemberships(y,u=50,v="DESC"){let b=K(y);return new a(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:v,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"member",Value:b}],limit:u},(t)=>p(t))}getGroupHolders(y,u=100){let v=K(y);return new a(this.client,{namespace:"V_CrcV2",table:"GroupTokenHoldersBalance",sortOrder:"DESC",columns:["group","holder","totalBalance","demurragedTotalBalance","fractionOwnership"],cursorColumns:[{name:"holder",sortOrder:"ASC"}],orderColumns:[{Column:"totalBalance",SortOrder:"DESC"},{Column:"holder",SortOrder:"ASC"}],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:v}],limit:u,rowTransformer:(b)=>{let t={...b,totalBalance:BigInt(b.totalBalance),demurragedTotalBalance:BigInt(b.demurragedTotalBalance)};return p(t)}})}getGroupMembers(y,u=100,v="DESC"){let b=K(y);return new a(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:v,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:b}],limit:u},(t)=>p(t))}getGroups(y=50,u,v="DESC"){let b=[];if(u){if(u.nameStartsWith)b.push({Type:"FilterPredicate",FilterType:"Like",Column:"name",Value:u.nameStartsWith+"%"});if(u.symbolStartsWith)b.push({Type:"FilterPredicate",FilterType:"Like",Column:"symbol",Value:u.symbolStartsWith+"%"});if(u.groupAddressIn&&u.groupAddressIn.length>0){let S=u.groupAddressIn.map((X)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:K(X)}));if(S.length===1)b.push(S[0]);else b.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:S})}if(u.groupTypeIn&&u.groupTypeIn.length>0){let S=u.groupTypeIn.map((X)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"type",Value:X}));if(S.length===1)b.push(S[0]);else b.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:S})}if(u.ownerIn&&u.ownerIn.length>0){let S=u.ownerIn.map((X)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"owner",Value:K(X)}));if(S.length===1)b.push(S[0]);else b.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:S})}if(u.mintHandlerEquals)b.push({Type:"FilterPredicate",FilterType:"Equals",Column:"mintHandler",Value:K(u.mintHandlerEquals)});if(u.treasuryEquals)b.push({Type:"FilterPredicate",FilterType:"Equals",Column:"treasury",Value:K(u.treasuryEquals)})}let t=b.length>1?[{Type:"Conjunction",ConjunctionType:"And",Predicates:b}]:b;return new a(this.client,{namespace:"V_CrcV2",table:"Groups",sortOrder:v,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","type","owner","mintPolicy","mintHandler","treasury","service","feeCollection","memberCount","name","symbol","cidV0Digest","erc20WrapperDemurraged","erc20WrapperStatic"],filter:t,limit:y},(S)=>p(S))}}class w{static ONE_64=1n<<64n;static GAMMA_64=18443079296116538654n;static BETA_64=18450409579521241655n;static SECONDS_PER_DAY=86400n;static INFLATION_DAY_ZERO_UNIX=1602720000n;static ATTO_FACTOR=1000000000000000000n;static FACTOR_1E12=1000000000000n;static V1_ACCURACY=100000000n;static V1_INFLATION_PCT_NUM=107n;static V1_INFLATION_PCT_DEN=100n;static PERIOD_SEC=31556952n;static mul64(y,u){return y*u>>64n}static mulU(y,u){return y*u>>64n}static pow64(y,u){let v=y,b=u,t=this.ONE_64;while(b>0n){if((b&1n)===1n)t=this.mul64(t,v);v=this.mul64(v,v),b>>=1n}return t}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,u){return y*u/this.ONE_36}static pow36(y,u){let v=this.ONE_36,b=y,t=u;while(t>0n){if((t&1n)===1n)v=this.mul36(v,b);b=this.mul36(b,b),t>>=1n}return v}static attoCirclesToCircles(y){if(y===0n)return 0;let u=y/this.ATTO_FACTOR,v=y%this.ATTO_FACTOR,b=BigInt(Number.MAX_SAFE_INTEGER);if(u>b||u<-b)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(u)+Number(v)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,u){return this.mulU(this.pow64(this.GAMMA_64,u),y)}static demurrageToInflationary(y,u){return this.mulU(this.pow64(this.BETA_64,u),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,u=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(u))}static attoStaticCirclesToAttoCircles(y,u=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(u))}static inflationaryToDemurrageExact(y,u){let v=this.pow36(this.GAMMA_36,u);return y*v/this.ONE_36}static demurrageToInflationaryExact(y,u){let v=this.pow36(this.BETA_36,u);return y*v/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,u=BigInt(Math.floor(Date.now()/1000))){let v=this.dayFromTimestamp(u);return this.demurrageToInflationaryExact(y,v)}static attoStaticCirclesToAttoCirclesExact(y,u=BigInt(Math.floor(Date.now()/1000))){let v=this.dayFromTimestamp(u);return this.inflationaryToDemurrageExact(y,v)}static truncateToInt64(y){let u=y/this.FACTOR_1E12,v=9223372036854775807n;return u>v?v:u}static blowUpToBigInt(y){return y*this.FACTOR_1E12}static truncateToSixDecimals(y){return this.blowUpToBigInt(this.truncateToInt64(y))}static v1InflateFactor(y){if(y===0n)return this.V1_ACCURACY;return this.V1_ACCURACY*this.V1_INFLATION_PCT_NUM**y/this.V1_INFLATION_PCT_DEN**y}static attoCrcToAttoCircles(y,u){let v=u-this.INFLATION_DAY_ZERO_UNIX,b=v/this.PERIOD_SEC,t=v%this.PERIOD_SEC,S=this.v1InflateFactor(b),X=this.v1InflateFactor(b+1n);return this.v1ToDemurrage(y,S,X,t,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,u){let v=u-this.INFLATION_DAY_ZERO_UNIX,b=v/this.PERIOD_SEC,t=v%this.PERIOD_SEC,S=this.v1InflateFactor(b),X=this.v1InflateFactor(b+1n),h=S*(this.PERIOD_SEC-t)+X*t;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/h}static v1ToDemurrage(y,u,v,b,t){let S=u*(t-b)+v*b;return y*3n*this.V1_ACCURACY*t/S}}var Ty="0x0000000000000000000000000000000000000000",s8=BigInt(96)*BigInt(1000000000000000000),N8=BigInt("9999999999999999999999999999999999999");var Sy=BigInt(4294967295),Q0=BigInt(32);function K6(y,u=!1){if(u)return{h:Number(y&Sy),l:Number(y>>Q0&Sy)};return{h:Number(y>>Q0&Sy)|0,l:Number(y&Sy)|0}}function V6(y,u=!1){let v=y.length,b=new Uint32Array(v),t=new Uint32Array(v);for(let S=0;S<v;S++){let{h:X,l:h}=K6(y[S],u);[b[S],t[S]]=[X,h]}return[b,t]}var C6=(y,u,v)=>y<<v|u>>>32-v,W6=(y,u,v)=>u<<v|y>>>32-v,g6=(y,u,v)=>u<<v-32|y>>>64-v,H6=(y,u,v)=>y<<v-32|u>>>64-v;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function L6(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function T0(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function hy(y,...u){if(!L6(y))throw Error("Uint8Array expected");if(u.length>0&&!u.includes(y.length))throw Error("Uint8Array expected of length "+u+", got length="+y.length)}function i0(y,u=!0){if(y.destroyed)throw Error("Hash instance has been destroyed");if(u&&y.finished)throw Error("Hash#digest() has already been called")}function F6(y,u){hy(y);let v=u.outputLen;if(y.length<v)throw Error("digestInto() expects output buffer of length at least "+v)}function Q6(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function c0(...y){for(let u=0;u<y.length;u++)y[u].fill(0)}var T6=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function i6(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function f6(y){for(let u=0;u<y.length;u++)y[u]=i6(y[u]);return y}var f0=T6?(y)=>y:f6;function w6(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function l0(y){if(typeof y==="string")y=w6(y);return hy(y),y}class $0{}function Y6(y){let u=(b)=>y().update(l0(b)).digest(),v=y();return u.outputLen=v.outputLen,u.blockLen=v.blockLen,u.create=()=>y(),u}var _6=BigInt(0),Z=BigInt(1),p6=BigInt(2),c6=BigInt(7),l6=BigInt(256),$6=BigInt(113),O0=[],d0=[],n0=[];for(let y=0,u=Z,v=1,b=0;y<24;y++){[v,b]=[b,(2*v+3*b)%5],O0.push(2*(5*b+v)),d0.push((y+1)*(y+2)/2%64);let t=_6;for(let S=0;S<7;S++)if(u=(u<<Z^(u>>c6)*$6)%l6,u&p6)t^=Z<<(Z<<BigInt(S))-Z;n0.push(t)}var R0=V6(n0,!0),O6=R0[0],d6=R0[1],w0=(y,u,v)=>v>32?g6(y,u,v):C6(y,u,v),Y0=(y,u,v)=>v>32?H6(y,u,v):W6(y,u,v);function n6(y,u=24){let v=new Uint32Array(10);for(let b=24-u;b<24;b++){for(let X=0;X<10;X++)v[X]=y[X]^y[X+10]^y[X+20]^y[X+30]^y[X+40];for(let X=0;X<10;X+=2){let h=(X+8)%10,s=(X+2)%10,N=v[s],D=v[s+1],U=w0(N,D,1)^v[h],m=Y0(N,D,1)^v[h+1];for(let P=0;P<50;P+=10)y[X+P]^=U,y[X+P+1]^=m}let t=y[2],S=y[3];for(let X=0;X<24;X++){let h=d0[X],s=w0(t,S,h),N=Y0(t,S,h),D=O0[X];t=y[D],S=y[D+1],y[D]=s,y[D+1]=N}for(let X=0;X<50;X+=10){for(let h=0;h<10;h++)v[h]=y[X+h];for(let h=0;h<10;h++)y[X+h]^=~v[(h+2)%10]&v[(h+4)%10]}y[0]^=O6[b],y[1]^=d6[b]}c0(v)}class fy extends $0{constructor(y,u,v,b=!1,t=24){super();if(this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=y,this.suffix=u,this.outputLen=v,this.enableXOF=b,this.rounds=t,T0(v),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=Q6(this.state)}clone(){return this._cloneInto()}keccak(){f0(this.state32),n6(this.state32,this.rounds),f0(this.state32),this.posOut=0,this.pos=0}update(y){i0(this),y=l0(y),hy(y);let{blockLen:u,state:v}=this,b=y.length;for(let t=0;t<b;){let S=Math.min(u-this.pos,b-t);for(let X=0;X<S;X++)v[this.pos++]^=y[t++];if(this.pos===u)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:u,pos:v,blockLen:b}=this;if(y[v]^=u,(u&128)!==0&&v===b-1)this.keccak();y[b-1]^=128,this.keccak()}writeInto(y){i0(this,!1),hy(y),this.finish();let u=this.state,{blockLen:v}=this;for(let b=0,t=y.length;b<t;){if(this.posOut>=v)this.keccak();let S=Math.min(v-this.posOut,t-b);y.set(u.subarray(this.posOut,this.posOut+S),b),this.posOut+=S,b+=S}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return T0(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(F6(y,this),this.finished)throw Error("digest() was already called");return this.writeInto(y),this.destroy(),y}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,c0(this.state)}_cloneInto(y){let{blockLen:u,suffix:v,outputLen:b,rounds:t,enableXOF:S}=this;return y||(y=new fy(u,v,b,S,t)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=t,y.suffix=v,y.outputLen=b,y.enableXOF=S,y.destroyed=this.destroyed,y}}var R6=(y,u,v)=>Y6(()=>new fy(u,y,v)),e0=(()=>R6(1,136,32))(),G0=[];for(let y=0;y<256;y++)G0[y]=y.toString(16).padStart(2,"0");function a0(y){let u="0x";for(let v=0;v<y.length;v++)u+=G0[y[v]];return u}var E=64,wy=32,Xy=(y)=>y.startsWith("0x")?y.slice(2):y,Y=(y)=>y.toString(16).padStart(E,"0");function e6(y){let u=y.toLowerCase().replace("0x",""),v=a0(e0(new TextEncoder().encode(u))).slice(2),b="0x";for(let t=0;t<u.length;t++)b+=parseInt(v[t],16)>=8?u[t].toUpperCase():u[t];return b}function iy(y,u){if(y==="tuple"&&u)return`(${u.map((b)=>iy(b.type,b.components)).join(",")})`;let v=y.match(/^tuple(\[\d*\])$/);if(v&&u)return`${iy("tuple",u)}${v[1]}`;return y}function G6(y){let u=(y.inputs||[]).map((v)=>iy(v.type,v.components));return`${y.name}(${u.join(",")})`}function a6(y){let u=G6(y),v=e0(new TextEncoder().encode(u));return a0(v.slice(0,4))}function q(y,u){if(y==="string"||y==="bytes")return!0;if(y.includes("[")){let v=y.slice(0,y.indexOf("["));if(y.endsWith("[]"))return!0;if(v==="tuple")return _0(u);return q(v)}if(y==="tuple")return _0(u);return!1}function _0(y){return y?.some((u)=>q(u.type,u.components))??!1}function l(y,u,v){if(y==="tuple"&&v)return o6(v,u);if(y.includes("["))return Z6(y,u,v);return q6(y,u)}function Z6(y,u,v){let b=y.slice(0,y.indexOf("[")),t=y.endsWith("[]"),S=q(b,v),X;if(S){let h=u.map((N)=>l(b,N,v)),s=u.length*wy;X=h.map((N)=>{let D=s;return s+=N.length/2,Y(D)}).join("")+h.join("")}else X=u.map((h)=>l(b,h,v)).join("");return t?Y(u.length)+X:X}function o6(y,u){let v=Array.isArray(u),b=[],t=[],S=[];for(let X=0;X<y.length;X++){let h=y[X],s=v?u[X]:u[h.name||""],N=q(h.type,h.components);if(S.push(N),N)b.push(""),t.push(l(h.type,s,h.components));else b.push(l(h.type,s,h.components))}if(t.length>0){let X=b.reduce((N,D,U)=>N+(S[U]?wy:D.length/2),0),h="",s=0;for(let N=0;N<y.length;N++)if(S[N])h+=Y(X),X+=t[s].length/2,s++;else h+=b[N];return h+t.join("")}return b.join("")}function q6(y,u){if(y==="address")return Xy(u).toLowerCase().padStart(E,"0");if(y==="bool")return Y(u?1:0);if(y.startsWith("uint")){let v=typeof u==="bigint"?u:BigInt(u);return Y(v)}if(y.startsWith("int")){let v=typeof u==="bigint"?u:BigInt(u);if(v<0n){let b=y==="int"?256:parseInt(y.slice(3));v=(1n<<BigInt(b))+v}return Y(v)}if(y.startsWith("bytes")&&y!=="bytes")return Xy(u).padEnd(E,"0");if(y==="bytes"){let v=Xy(u),b=Y(v.length/2),t=v.padEnd(Math.ceil(v.length/E)*E,"0");return b+t}if(y==="string"){let v=Array.from(new TextEncoder().encode(u)).map((S)=>S.toString(16).padStart(2,"0")).join(""),b=Y(v.length/2),t=v.padEnd(Math.ceil(v.length/E)*E,"0");return b+t}throw Error(`Unsupported type: ${y}`)}function o(y,u,v=0,b){if(y==="tuple"&&b)return r6(b,u,v);if(y.includes("["))return B6(y,u,v,b);return z6(y,u,v)}function B6(y,u,v,b){let t=y.slice(0,y.indexOf("[")),S=u.slice(v,v+E);if(y.endsWith("[]")){let h=parseInt(S,16)*2,s=parseInt(u.slice(h,h+E),16),N=[],D=h+E;for(let U=0;U<s;U++){let m=o(t,u,D,b);N.push(m.value),D+=m.consumed}return{value:N,consumed:E}}let X=y.match(/\[(\d+)\]$/);if(X){let h=parseInt(X[1]),s=[],N=0;for(let D=0;D<h;D++){let U=o(t,u,v+N,b);s.push(U.value),N+=U.consumed}return{value:s,consumed:N}}throw Error(`Invalid array type: ${y}`)}function r6(y,u,v){let b=[],t=v;for(let S of y){let X=o(S.type,u,t,S.components);b.push(X.value),t+=X.consumed}return{value:b,consumed:t-v}}function z6(y,u,v){let b=u.slice(v,v+E);if(y==="address")return{value:e6("0x"+b.slice(24)),consumed:E};if(y==="bool")return{value:parseInt(b,16)!==0,consumed:E};if(y.startsWith("uint"))return{value:BigInt("0x"+b),consumed:E};if(y.startsWith("int")){let t=BigInt("0x"+b),S=y==="int"?256:parseInt(y.slice(3)),X=1n<<BigInt(S-1);return{value:t>=X?t-(1n<<BigInt(S)):t,consumed:E}}if(y.startsWith("bytes")&&y!=="bytes"){let t=parseInt(y.match(/^bytes(\d+)$/)[1]);return{value:"0x"+b.slice(0,t*2),consumed:E}}if(y==="bytes"){let t=parseInt(b,16)*2,S=parseInt(u.slice(t,t+E),16)*2;return{value:"0x"+u.slice(t+E,t+E+S),consumed:E}}if(y==="string"){let t=parseInt(b,16)*2,S=parseInt(u.slice(t,t+E),16)*2,X=u.slice(t+E,t+E+S),h=new Uint8Array(X.match(/.{2}/g)?.map((s)=>parseInt(s,16))||[]);return{value:new TextDecoder().decode(h),consumed:E}}throw Error(`Unsupported type: ${y}`)}function p0(y){let{abi:u,functionName:v,args:b=[]}=y,t=u.find((P)=>P.type==="function"&&P.name===v);if(!t)throw Error(`Function "${v}" not found in ABI`);let S=a6(t),X=t.inputs||[];if(X.length===0)return S;if(b.length!==X.length)throw Error(`Expected ${X.length} arguments, got ${b.length}`);let h=[],s=[],N=[];for(let P=0;P<X.length;P++){let x=X[P],V=x.components,M=q(x.type,V);if(N.push(M),M)h.push(""),s.push(l(x.type,b[P],V));else h.push(l(x.type,b[P],V))}if(s.length===0)return S+h.join("");let D=h.reduce((P,x,V)=>P+(N[V]?wy:x.length/2),0),U="",m=0;for(let P=0;P<X.length;P++)if(N[P])U+=Y(D),D+=s[m].length/2,m++;else U+=h[P];return S+U+s.join("")}function J6(y){let{abi:u,functionName:v,data:b}=y,t=u.find((N)=>N.type==="function"&&N.name===v);if(!t)throw Error(`Function "${v}" not found in ABI`);let S=t.outputs||[];if(S.length===0)return;let X=Xy(b);if(S.length===1)return o(S[0].type,X,0,S[0].components).value;let h=[],s=0;for(let N of S){let D=o(N.type,X,s,N.components);h.push(D.value),s+=D.consumed}return h}class T{address;abi;rpcUrl;constructor(y){this.address=y.address,this.abi=y.abi,this.rpcUrl=y.rpcUrl}async read(y,u,v){let b=p0({abi:this.abi,functionName:y,args:u}),t={to:this.address,data:b,...v?.from&&{from:v.from}},S=await(await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"eth_call",params:[t,"latest"]})})).json();if(S.error)throw Error(`RPC Error: ${S.error.message}`);if(!S.result)throw Error("No result returned from RPC call");return J6({abi:this.abi,functionName:y,data:S.result})}encodeWrite(y,u){return p0({abi:this.abi,functionName:y,args:u})}}var y8=[{type:"function",name:"operateFlowMatrix",inputs:[{name:"_flowVertices",type:"address[]"},{name:"_flow",type:"tuple[]",components:[{name:"streamSinkId",type:"uint16"},{name:"amount",type:"uint192"}]},{name:"_streams",type:"tuple[]",components:[{name:"sourceCoordinate",type:"uint16"},{name:"flowEdgeIds",type:"uint16[]"},{name:"data",type:"bytes"}]},{name:"_packedCoordinates",type:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"isApprovedForAll",inputs:[{name:"_account",type:"address"},{name:"_operator",type:"address"}],outputs:[{type:"bool"}],stateMutability:"view"},{type:"function",name:"setApprovalForAll",inputs:[{name:"_operator",type:"address"},{name:"_approved",type:"bool"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"wrap",inputs:[{name:"_avatar",type:"address"},{name:"_amount",type:"uint256"},{name:"_type",type:"uint8"}],outputs:[{type:"address"}],stateMutability:"nonpayable"},{type:"function",name:"trust",inputs:[{name:"_trustReceiver",type:"address"},{name:"_expiry",type:"uint96"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"isTrusted",inputs:[{name:"_truster",type:"address"},{name:"_trustee",type:"address"}],outputs:[{type:"bool"}],stateMutability:"view"},{type:"function",name:"toTokenId",inputs:[{name:"_avatar",type:"address"}],outputs:[{type:"uint256"}],stateMutability:"pure"},{type:"function",name:"safeTransferFrom",inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_id",type:"uint256"},{name:"_value",type:"uint256"},{name:"_data",type:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"isHuman",inputs:[{name:"_human",type:"address"}],outputs:[{type:"bool"}],stateMutability:"view"},{type:"function",name:"safeBatchTransferFrom",inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_ids",type:"uint256[]"},{name:"_values",type:"uint256[]"},{name:"_data",type:"bytes"}],outputs:[],stateMutability:"nonpayable"}];class sy extends T{constructor(y){super({address:y.address,abi:y8,rpcUrl:y.rpcUrl})}async isTrusted(y,u){return this.read("isTrusted",[y,u])}async isApprovedForAll(y,u){return this.read("isApprovedForAll",[y,u])}async toTokenId(y){return this.read("toTokenId",[y])}trust(y,u){return{to:this.address,data:this.encodeWrite("trust",[y,u]),value:0n}}setApprovalForAll(y,u){return{to:this.address,data:this.encodeWrite("setApprovalForAll",[y,u]),value:0n}}wrap(y,u,v){return{to:this.address,data:this.encodeWrite("wrap",[y,u,v]),value:0n}}safeTransferFrom(y,u,v,b,t="0x"){return{to:this.address,data:this.encodeWrite("safeTransferFrom",[y,u,v,b,t]),value:0n}}operateFlowMatrix(y,u,v,b){return{to:this.address,data:this.encodeWrite("operateFlowMatrix",[y,u,v,b]),value:0n}}async isHuman(y){return this.read("isHuman",[y])}safeBatchTransferFrom(y,u,v,b,t="0x"){return{to:this.address,data:this.encodeWrite("safeBatchTransferFrom",[y,u,v,b,t]),value:0n}}}var u8=[{type:"function",name:"erc20Circles",inputs:[{name:"_circlesType",type:"uint8"},{name:"_avatar",type:"address"}],outputs:[{type:"address"}],stateMutability:"view"}];class Ny extends T{constructor(y){super({address:y.address,abi:u8,rpcUrl:y.rpcUrl})}async erc20Circles(y,u){return this.read("erc20Circles",[y,u])}}var Z0=[{type:"function",name:"unwrap",inputs:[{name:"_amount",type:"uint256"}],outputs:[],stateMutability:"nonpayable"}];class $ extends T{constructor(y){super({address:y.address,abi:Z0,rpcUrl:y.rpcUrl})}unwrap(y){return{to:this.address,data:this.encodeWrite("unwrap",[y]),value:0n}}}class O extends T{constructor(y){super({address:y.address,abi:Z0,rpcUrl:y.rpcUrl})}unwrap(y){return{to:this.address,data:this.encodeWrite("unwrap",[y]),value:0n}}}var B;((y)=>{y[y.Demurrage=0]="Demurrage",y[y.Inflation=1]="Inflation"})(B||={});var v8;((y)=>{y.Standard="Standard",y.Custom="Custom"})(v8||={});class Yy extends Error{name;code;source;cause;context;constructor(y,u,v){super(u);if(this.name=y,this.code=v?.code,this.source=v?.source??"UNKNOWN",this.cause=v?.cause,this.context=v?.context,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,source:this.source,context:this.context,cause:this.cause instanceof Error?{name:this.cause.name,message:this.cause.message}:this.cause,stack:this.stack}}toString(){let y=`[${this.source}] ${this.name}: ${this.message}`;if(this.code)y+=` (Code: ${this.code})`;if(this.context)y+=`
|
|
4
|
+
Context: ${JSON.stringify(this.context,null,2)}`;return y}}class C extends Yy{constructor(y,u){super("TransferError",y,{...u,source:u?.source||"TRANSFERS"})}static noPathFound(y,u,v){return new C(`No valid transfer path found from ${y} to ${u}. ${v||"This could mean there's no trust connection, insufficient balance, or the tokens are not transferable."}`,{code:"TRANSFER_NO_PATH",source:"PATHFINDING",context:{from:y,to:u,reason:v}})}static insufficientBalance(y,u,v,b){let t=Number(y)/1000000000000000000,S=Number(u)/1000000000000000000;return new C(`Insufficient balance for transfer. Requested: ${t.toFixed(6)} CRC, Available: ${S.toFixed(6)} CRC.`,{code:"TRANSFER_INSUFFICIENT_BALANCE",source:"VALIDATION",context:{from:v,to:b,requested:y.toString(),available:u.toString(),requestedCrc:t,availableCrc:S}})}static wrappedTokensRequired(){return new C("Insufficient unwrapped token balance for transfer. Your balance contains wrapped tokens (ERC20 wrappers), but useWrappedBalances option is not enabled. Please enable it by passing { useWrappedBalances: true } in the transfer options.",{code:"TRANSFER_WRAPPED_TOKENS_REQUIRED",source:"VALIDATION"})}static unregisteredAvatars(y){return new C(`Flow matrix contains ${y.length} unregistered avatar(s): ${y.join(", ")}. All addresses in the flow must be registered Circles avatars (human or group).`,{code:"TRANSFER_UNREGISTERED_AVATARS",source:"FLOW_MATRIX",context:{unregisteredAddresses:y,count:y.length}})}static flowMatrixMismatch(y,u){return new C(`Flow matrix terminal sum (${y}) does not equal expected amount (${u})`,{code:"TRANSFER_FLOW_MATRIX_MISMATCH",source:"FLOW_MATRIX",context:{terminalSum:y.toString(),expected:u.toString()}})}static emptyPath(y,u){return new C(`Transfer path is empty for route from ${y} to ${u}`,{code:"TRANSFER_EMPTY_PATH",source:"PATHFINDING",context:{from:y,to:u}})}}class o0{config;hubV2;liftERC20;rpcClient;pathfinder;balance;group;constructor(y){this.config=y,this.hubV2=new sy({address:y.v2HubAddress,rpcUrl:y.circlesRpcUrl}),this.liftERC20=new Ny({address:y.liftERC20Address,rpcUrl:y.circlesRpcUrl}),this.rpcClient=new gy(y.circlesRpcUrl),this.pathfinder=new Ly(this.rpcClient),this.balance=new Fy(this.rpcClient),this.group=new Qy(this.rpcClient)}async buildFlowMatrixTx(y,u,v,b,t=!1){let S=y.toLowerCase(),X=u.toLowerCase();if(!v.transfers||v.transfers.length===0)throw C.noPathFound(S,X);let h={...v};if(t&&b?.toTokens?.length===1){let L=b.toTokens[0].toLowerCase();if(v.maxFlow>0n)h.transfers.push({from:X,to:X,tokenOwner:L,value:v.maxFlow})}let s=await Ky(S,this.config.circlesRpcUrl,h),N=Vy(h,s),D=Object.keys(N).length>0;if(D&&!b?.useWrappedBalances)throw C.wrappedTokensRequired();let U=[],m=[];if(D){let L=await this._getTokenBalanceMap(S),i=this._createDemurragedUnwrapCalls(N),{unwrapCalls:Dy,wrapCalls:r}=this._createInflationaryUnwrapAndWrapCalls(N,s,L);U=[...i,...Dy],m=r,h=Cy(h,s)}let P=Ey(S,X,h.maxFlow,h.transfers),x=Iy(P,b?.txData),V=this.hubV2.operateFlowMatrix(P.flowVertices,P.flowEdges,x,P.packedCoordinates),M=!1;try{M=await this.hubV2.isApprovedForAll(S,S)}catch(L){console.warn("Failed to check approval status, including approval transaction:",L)}return[...M?[]:[this.hubV2.setApprovalForAll(S,!0)],...U,V,...m]}async constructAdvancedTransfer(y,u,v,b,t=!1){let S=y.toLowerCase(),X=u.toLowerCase(),h=BigInt(v);if(S===X&&b?.fromTokens?.length===1&&b?.toTokens?.length===1){let P=b.fromTokens[0],x=b.toTokens[0],[V,M]=await Promise.all([this.liftERC20.erc20Circles(B.Demurrage,x),this.liftERC20.erc20Circles(B.Inflation,x)]);if(P.toLowerCase()===V.toLowerCase()&&V!==Ty){let L=new $({address:P,rpcUrl:this.config.circlesRpcUrl}).unwrap(h);return[{to:L.to,data:L.data,value:L.value??0n}]}if(P.toLowerCase()===M.toLowerCase()&&M!==Ty){let W=new O({address:P,rpcUrl:this.config.circlesRpcUrl}),L=w.attoCirclesToAttoStaticCircles(h),i=W.unwrap(L);return[{to:i.to,data:i.data,value:i.value??0n}]}}let s=this._truncateToSixDecimals(h),N=await this._getDefaultTokenExcludeList(X,b?.excludeFromTokens),{...D}=b||{},U={...D,...N?{excludeFromTokens:N}:{}},m=await this.pathfinder.findPath({from:S,to:X,targetFlow:s,...U});if(!m.transfers||m.transfers.length===0)throw C.noPathFound(S,X);if(m.maxFlow<s)throw C.insufficientBalance(s,m.maxFlow,S,X);return this.buildFlowMatrixTx(S,X,m,b,t)}async constructReplenish(y,u,v,b){let t=y.toLowerCase(),S=u.toLowerCase(),X=(b||y).toLowerCase(),h=BigInt(v),N=(await this.balance.getTokenBalances(t)).filter((k)=>k.tokenOwner.toLowerCase()===S),D=0n,U=0n,m=0n,P=null,x=null;for(let k of N)if(k.isWrapped)if(k.tokenType.includes("Demurrage"))U=BigInt(k.attoCircles),P=k.tokenAddress;else m=BigInt(k.staticAttoCircles),x=k.tokenAddress;else D=BigInt(k.attoCircles);let V=D+U+w.attoStaticCirclesToAttoCircles(m),M=[];if(D>=h){if(console.log(`✓ Already have ${Number(D)/1000000000000000000} CRC unwrapped (target: ${Number(h)/1000000000000000000} CRC). No replenish needed.`),X!==t){let k=await this.hubV2.toTokenId(S),A=this.hubV2.safeTransferFrom(t,X,k,h);M.push({to:A.to,data:A.data,value:A.value??0n})}return M}let W=h-D;if(console.log(`Current unwrapped: ${Number(D)/1000000000000000000} CRC`),console.log(`Target amount: ${Number(h)/1000000000000000000} CRC`),console.log(`Need to acquire: ${Number(W)/1000000000000000000} CRC`),V>=h){let k=W;if(U>0n&&P&&k>0n){let A=k>U?U:k,f=new $({address:P,rpcUrl:this.config.circlesRpcUrl}).unwrap(A);M.push({to:f.to,data:f.data,value:f.value??0n}),k-=A}if(m>0n&&x&&k>0n){let A=w.attoCirclesToAttoStaticCircles(k),Q=A>m?m:A,my=new O({address:x,rpcUrl:this.config.circlesRpcUrl}).unwrap(Q);M.push({to:my.to,data:my.data,value:my.value??0n})}if(X!==t){let A=await this.hubV2.toTokenId(S),Q=this.hubV2.safeTransferFrom(t,X,A,h);M.push({to:Q.to,data:Q.data,value:Q.value??0n})}return M}let i=!await this.hubV2.isTrusted(t,S),Dy=BigInt(Math.floor(Date.now()/1000)+31536000),r=w.truncateToInt64(W),q0=W%w.FACTOR_1E12!==0n,z=w.blowUpToBigInt(q0?r+1n:r),F;try{F=await this.pathfinder.findPath({from:t,to:X,targetFlow:z,toTokens:[S],useWrappedBalances:!0,simulatedTrusts:i?[{truster:t,trustee:S}]:void 0})}catch(k){let A=Number(V)/1000000000000000000,Q=Number(h)/1000000000000000000,f=Number(W)/1000000000000000000;throw new C(`Insufficient tokens to replenish. Target: ${Q.toFixed(6)} CRC, Current unwrapped: ${Number(D)/1000000000000000000} CRC, Need: ${f.toFixed(6)} CRC, Available (including all paths): ${A.toFixed(6)} CRC. Cannot acquire the remaining ${(Number(W-(V-D))/1000000000000000000).toFixed(6)} CRC.`,{code:"REPLENISH_INSUFFICIENT_TOKENS",source:"VALIDATION",context:{from:t,tokenId:S,target:h.toString(),unwrapped:D.toString(),deficit:W.toString(),available:V.toString(),targetCrc:Q,unwrappedCrc:Number(D)/1000000000000000000,deficitCrc:f,availableCrc:A}})}if(!F.transfers||F.transfers.length===0)throw C.noPathFound(t,X,`No path to acquire token ${S}`);if(F.maxFlow<z){let k=Number(F.maxFlow)/1000000000000000000,A=Number(z)/1000000000000000000;throw new C(`Pathfinder can only provide ${k.toFixed(6)} CRC of the ${A.toFixed(6)} CRC deficit needed for token ${S}.`,{code:"REPLENISH_INSUFFICIENT_PATH_FLOW",source:"PATHFINDING",context:{from:t,tokenId:S,deficit:z.toString(),pathFlow:F.maxFlow.toString(),deficitCrc:A,pathFlowCrc:k}})}if(i){let k=this.hubV2.trust(S,Dy);M.push({to:k.to,data:k.data,value:k.value??0n})}let Py=await Ky(t,this.config.circlesRpcUrl,F),jy=Vy(F,Py),B0=Object.keys(jy).length>0,_y=[],Uy=[];if(B0){let k=await this._getTokenBalanceMap(t),A=this._createDemurragedUnwrapCalls(jy),{unwrapCalls:Q,wrapCalls:f}=this._createInflationaryUnwrapAndWrapCalls(jy,Py,k);_y=[...A,...Q],Uy=f,F=Cy(F,Py)}let J=Ey(t,X,F.maxFlow,F.transfers),r0=Iy(J),ky=this.hubV2.operateFlowMatrix(J.flowVertices,J.flowEdges,r0,J.packedCoordinates),z0={to:ky.to,data:ky.data,value:ky.value??0n},py=!1;try{py=await this.hubV2.isApprovedForAll(t,t)}catch(k){console.warn("Failed to check approval status, including approval transaction:",k)}if(i){let k=this.hubV2.trust(S,0n);Uy.push({to:k.to,data:k.data,value:k.value??0n})}let J0=py?[]:[{to:this.hubV2.setApprovalForAll(t,!0).to,data:this.hubV2.setApprovalForAll(t,!0).data,value:0n}];return M.push(...J0,..._y,z0,...Uy),M}async _getTokenBalanceMap(y){let u=await this.balance.getTokenBalances(y),v=new Map;return u.forEach((b)=>{v.set(b.tokenAddress.toLowerCase(),b.staticAttoCircles)}),v}_createDemurragedUnwrapCalls(y){let u=[];for(let[v,[b,t]]of Object.entries(y)){if(t!=="CrcV2_ERC20WrapperDeployed_Demurraged")continue;let X=new $({address:v,rpcUrl:this.config.circlesRpcUrl}).unwrap(b);u.push({to:X.to,data:X.data,value:X.value??0n})}return u}_createInflationaryUnwrapAndWrapCalls(y,u,v){let b=[],t=[];for(let[S,[X,h]]of Object.entries(y)){if(h!=="CrcV2_ERC20WrapperDeployed_Inflationary")continue;let s=u.get(S.toLowerCase()),N=v.get(S.toLowerCase())||0n;if(N===0n)continue;let U=new O({address:S,rpcUrl:this.config.circlesRpcUrl}).unwrap(N);b.push({to:U.to,data:U.data,value:U.value??0n});let m=s?.tokenOwner,P=w.attoStaticCirclesToAttoCircles(N)-X;if(P>0n){let x=this.hubV2.wrap(m,P,B.Inflation);t.push({to:x.to,data:x.data,value:x.value??0n})}}return{unwrapCalls:b,wrapCalls:t}}_truncateToSixDecimals(y){let u=BigInt(1e6),v=BigInt(10)**BigInt(18);return y/(v/u)*(v/u)}async _getDefaultTokenExcludeList(y,u){let v=await this.group.findGroups(1,{mintHandlerEquals:y}),b=new Set;if(v.length>0){let t=v[0];if(b.add(t.group.toLowerCase()),t.erc20WrapperDemurraged)b.add(t.erc20WrapperDemurraged.toLowerCase());if(t.erc20WrapperStatic)b.add(t.erc20WrapperStatic.toLowerCase())}if(u?.forEach((t)=>b.add(t.toLowerCase())),b.size===0)return;return Array.from(b)}}export{C as TransferError,o0 as TransferBuilder};
|