@aboutcircles/sdk-transfers 0.1.11 → 0.1.13

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.
Files changed (2) hide show
  1. package/dist/index.js +4 -4
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
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};
1
+ var Ry=[];for(let y=0;y<256;y++)Ry[y]=y.toString(16).padStart(2,"0");function My(y){let u="0x";for(let v=0;v<y.length;v++)u+=Ry[y[v]];return u}function yu(y){let u=new Uint8Array(y.length*2);return y.forEach((v,t)=>{let b=v>>8,S=v&255,X=2*t;u[X]=b,u[X+1]=S}),My(u)}function uu(y,u,v){let t=new Set([u.toLowerCase(),v.toLowerCase()]);y.forEach((X)=>{t.add(X.from.toLowerCase()),t.add(X.to.toLowerCase()),t.add(X.tokenOwner.toLowerCase())});let b=[...t].sort((X,s)=>{let h=BigInt(X),N=BigInt(s),D=h<N,U=h>N;return D?-1:U?1:0}),S={};return b.forEach((X,s)=>{S[X]=s}),{sorted:b,idx:S}}function vu(y,u){let v=new Set,t=[],b=null;if(y.forEach((S,X)=>{let s=S.from.toLowerCase(),h=S.to.toLowerCase();if(s===u&&h===u)b=X;else if(h===u)t.push(X)}),b!==null)v.add(b);else t.forEach((S)=>v.add(S));return v}function Iy(y,u,v,t){let b=y.toLowerCase(),S=u.toLowerCase(),{sorted:X,idx:s}=uu(t,b,S),h=vu(t,S),N=t.map((M,C)=>{return{streamSinkId:h.has(C)?1:0,amount:M.value}});if(h.size===0)throw Error(`No terminal edges detected. Flow must have at least one edge delivering to receiver ${S}`);let D=Array.from(h),U=[{sourceCoordinate:s[b],flowEdgeIds:D,data:new Uint8Array(0)}],k=[];t.forEach((M)=>{k.push(s[M.tokenOwner.toLowerCase()]),k.push(s[M.from.toLowerCase()]),k.push(s[M.to.toLowerCase()])});let P=yu(k),x=BigInt(v),V=N.filter((M)=>M.streamSinkId===1).reduce((M,C)=>M+BigInt(C.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:s[b]}}function Ey(y,u){let v=y.streams.map((t)=>({sourceCoordinate:t.sourceCoordinate,flowEdgeIds:t.flowEdgeIds,data:t.data instanceof Uint8Array?My(t.data):t.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),tu=(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 bu(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 tu(u);try{return cy(u)}catch{return u}}try{let t=n(u);if(t<Number.MAX_SAFE_INTEGER)return t;return cy(u)}catch{return u}}if(u==="true")return!0;if(u==="false")return!1;return u}function Su(y){let{event:u,values:v}=y,t={$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[b,S]of Object.entries(v)){if(["blockNumber","timestamp","transactionIndex","logIndex","transactionHash"].includes(b))continue;t[b]=bu(b,S)}return t}function Xu(y){return y.map(Su)}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 i extends Gy{constructor(y,u){super("RpcError",y,{...u,source:u?.source??"RPC_REQUEST"})}static connectionFailed(y,u){return new i("Failed to connect to RPC endpoint",{code:"RPC_CONNECTION_FAILED",source:"RPC_CONNECTION",cause:u,context:{url:y}})}static timeout(y,u){return new i("RPC request timed out",{code:"RPC_TIMEOUT",source:"RPC_TIMEOUT",context:{method:y,timeout:u}})}static invalidResponse(y,u){return new i("Invalid RPC response",{code:"RPC_INVALID_RESPONSE",source:"RPC_RESPONSE",context:{method:y,response:u}})}static fromJsonRpcError(y){return new i(y.message,{code:y.code,source:"RPC_RESPONSE",context:{data:y.data}})}static websocketError(y,u){return new i(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 t=await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)});if(!t.ok)throw i.connectionFailed(this.rpcUrl,Error(`HTTP ${t.status}: ${t.statusText}`));let b=await t.json();if(b.error)throw i.fromJsonRpcError(b.error);if(b.result===void 0)throw i.invalidResponse(y,b);return b.result}catch(t){if(t instanceof i)throw t;throw i.connectionFailed(this.rpcUrl,t)}}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 t=JSON.parse(v.data),{id:b,method:S,params:X}=t;if(b!==void 0&&this.pendingResponses[b])this.pendingResponses[b].resolve(t),delete this.pendingResponses[b];if(S==="eth_subscription"&&X){let{subscription:s,result:h}=X;if(this.subscriptionListeners[s])this.subscriptionListeners[s].forEach((N)=>N(h))}},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(i.connectionFailed(this.rpcUrl));let t=this.requestId++,b={jsonrpc:"2.0",method:y,params:u,id:t};return new Promise((S,X)=>{this.pendingResponses[t]={resolve:S,reject:X},this.websocket.send(JSON.stringify(b)),setTimeout(()=>{if(this.pendingResponses[t])this.pendingResponses[t].reject(i.timeout(y,v)),delete this.pendingResponses[t]},v)})}async subscribe(y){let u=y?.toLowerCase();if(!this.websocketConnected)await this.connect();let v=xy.create(),t=JSON.stringify(u?{address:u}:{}),b=(await this.sendMessage("eth_subscribe",["circles",t])).result;if(!this.subscriptionListeners[b])this.subscriptionListeners[b]=[];return this.subscriptionListeners[b].push((S)=>{Xu(S).forEach((X)=>v.emit(X))}),v.property}}var yy=BigInt(4294967295),ly=BigInt(32);function su(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 hu(y,u=!1){let v=y.length,t=new Uint32Array(v),b=new Uint32Array(v);for(let S=0;S<v;S++){let{h:X,l:s}=su(y[S],u);[t[S],b[S]]=[X,s]}return[t,b]}var Nu=(y,u,v)=>y<<v|u>>>32-v,Du=(y,u,v)=>u<<v|y>>>32-v,Pu=(y,u,v)=>u<<v-32|y>>>64-v,ju=(y,u,v)=>y<<v-32|u>>>64-v;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function Uu(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(!Uu(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 dy(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 mu(y,u){uy(y);let v=u.outputLen;if(y.length<v)throw Error("digestInto() expects output buffer of length at least "+v)}function ku(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 Mu=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function Iu(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function Eu(y){for(let u=0;u<y.length;u++)y[u]=Iu(y[u]);return y}var Oy=Mu?(y)=>y:Eu;function xu(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function oy(y){if(typeof y==="string")y=xu(y);return uy(y),y}class qy{}function Au(y){let u=(t)=>y().update(oy(t)).digest(),v=y();return u.outputLen=v.outputLen,u.blockLen=v.blockLen,u.create=()=>y(),u}var Ku=BigInt(0),O=BigInt(1),Vu=BigInt(2),Wu=BigInt(7),Cu=BigInt(256),iu=BigInt(113),By=[],ry=[],zy=[];for(let y=0,u=O,v=1,t=0;y<24;y++){[v,t]=[t,(2*v+3*t)%5],By.push(2*(5*t+v)),ry.push((y+1)*(y+2)/2%64);let b=Ku;for(let S=0;S<7;S++)if(u=(u<<O^(u>>Wu)*iu)%Cu,u&Vu)b^=O<<(O<<BigInt(S))-O;zy.push(b)}var Jy=hu(zy,!0),gu=Jy[0],Hu=Jy[1],ny=(y,u,v)=>v>32?Pu(y,u,v):Nu(y,u,v),ey=(y,u,v)=>v>32?ju(y,u,v):Du(y,u,v);function Lu(y,u=24){let v=new Uint32Array(10);for(let t=24-u;t<24;t++){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 s=(X+8)%10,h=(X+2)%10,N=v[h],D=v[h+1],U=ny(N,D,1)^v[s],k=ey(N,D,1)^v[s+1];for(let P=0;P<50;P+=10)y[X+P]^=U,y[X+P+1]^=k}let b=y[2],S=y[3];for(let X=0;X<24;X++){let s=ry[X],h=ny(b,S,s),N=ey(b,S,s),D=By[X];b=y[D],S=y[D+1],y[D]=h,y[D+1]=N}for(let X=0;X<50;X+=10){for(let s=0;s<10;s++)v[s]=y[X+s];for(let s=0;s<10;s++)y[X+s]^=~v[(s+2)%10]&v[(s+4)%10]}y[0]^=gu[t],y[1]^=Hu[t]}Zy(v)}class Ay extends qy{constructor(y,u,v,t=!1,b=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=t,this.rounds=b,$y(v),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=ku(this.state)}clone(){return this._cloneInto()}keccak(){Oy(this.state32),Lu(this.state32,this.rounds),Oy(this.state32),this.posOut=0,this.pos=0}update(y){dy(this),y=oy(y),uy(y);let{blockLen:u,state:v}=this,t=y.length;for(let b=0;b<t;){let S=Math.min(u-this.pos,t-b);for(let X=0;X<S;X++)v[this.pos++]^=y[b++];if(this.pos===u)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:u,pos:v,blockLen:t}=this;if(y[v]^=u,(u&128)!==0&&v===t-1)this.keccak();y[t-1]^=128,this.keccak()}writeInto(y){dy(this,!1),uy(y),this.finish();let u=this.state,{blockLen:v}=this;for(let t=0,b=y.length;t<b;){if(this.posOut>=v)this.keccak();let S=Math.min(v-this.posOut,b-t);y.set(u.subarray(this.posOut,this.posOut+S),t),this.posOut+=S,t+=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(mu(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:t,rounds:b,enableXOF:S}=this;return y||(y=new Ay(u,v,t,S,b)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=b,y.suffix=v,y.outputLen=t,y.enableXOF=S,y.destroyed=this.destroyed,y}}var Fu=(y,u,v)=>Au(()=>new Ay(u,y,v)),Qu=(()=>Fu(1,136,32))(),y0=[];for(let y=0;y<256;y++)y0[y]=y.toString(16).padStart(2,"0");function Tu(y){let u="0x";for(let v=0;v<y.length;v++)u+=y0[y[v]];return u}function fu(y){let u=y.toLowerCase().replace("0x",""),v=Tu(Qu(new TextEncoder().encode(u))).slice(2),t="0x";for(let b=0;b<u.length;b++)t+=parseInt(v[b],16)>=8?u[b].toUpperCase():u[b];return t}function j(y){return y.toLowerCase()}function wu(y){return fu(y)}function Yu(y){if(typeof y!=="string")return!1;let u=y.replace("0x","");return u.length===40&&/^[0-9a-fA-F]{40}$/.test(u)}function E(y){if(y===null||y===void 0)return y;if(Yu(y))return wu(y);if(Array.isArray(y))return y.map((u)=>E(u));if(typeof y==="object"&&y!==null){let u={};for(let v in y)if(Object.prototype.hasOwnProperty.call(y,v))u[v]=E(y[v]);return u}return y}function pu(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 e(y){let u={};for(let v in y){let t=y[v];if(t===null||t===void 0)u[v]=t;else if(typeof t==="string"&&/^\d+$/.test(t))u[v]=BigInt(t);else if(typeof t==="object"&&!Array.isArray(t))u[v]=e(t);else if(Array.isArray(t))u[v]=t.map((b)=>typeof b==="object"&&b!==null?e(b):b);else u[v]=t}return u}var t8=BigInt(96)*BigInt(1000000000000000000),_u=BigInt("9999999999999999999999999999999999999");class u0{client;constructor(y){this.client=y}async findPath(y){let u=pu(y),v=await this.client.call("circlesV2_findPath",[u]),t=e(v);return E(t)}async findMaxFlow(y){let u=await this.findPath({...y,targetFlow:_u});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 E(u)}async tables(){return this.client.call("circles_tables",[])}async events(y,u,v=null,t=null,b=!1){let S=await this.client.call("circles_events",[y,u,v,t,b]);return E(S)}}var cu=[{name:"blockNumber",sortOrder:"DESC"},{name:"transactionIndex",sortOrder:"DESC"},{name:"logIndex",sortOrder:"DESC"}];class p{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=cu.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 t=this.cursorColumns[v],b=y[t.name];if(b===void 0)continue;if(v===0)u.push(this.createComparisonPredicate(t,b));else{let S=[];for(let X=0;X<v;X++){let s=this.cursorColumns[X],h=y[s.name];if(h!==void 0)S.push(this.createEqualityPredicate(s,h))}S.push(this.createComparisonPredicate(t,b)),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((t)=>{let b={};return u.forEach((S,X)=>{b[S]=t[X]}),this.rowTransformer?this.rowTransformer(b):b})}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},t=await this.client.call("circles_query",[v]),b=this.rowsToObjects(t),S=this.getCursors(b);return this._currentPage={limit:this.params.limit,size:b.length,firstCursor:S.first,lastCursor:S.last,sortOrder:this.params.sortOrder,hasMore:b.length===this.params.limit,results:b},b.length>0}reset(){this._currentPage=void 0}}class t0{client;constructor(y){this.client=y}transformQueryResponse(y){let{columns:u,rows:v}=y;return v.map((t)=>{let b={};return u.forEach((S,X)=>{b[S]=t[X]}),b})}async getCommonTrust(y,u){let v=await this.client.call("circles_getCommonTrust",[j(y),j(u)]);return E(v)}getTrustRelations(y,u=100,v="DESC"){let t=j(y),b=[{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:t},{Type:"FilterPredicate",FilterType:"Equals",Column:"truster",Value:t}]}]}];return new p(this.client,{namespace:"V_Crc",table:"TrustRelations",sortOrder:v,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","version","trustee","truster","expiryTime"],filter:b,limit:u},(S)=>E(S))}async getAggregatedTrustRelations(y){let u=j(y),v=this.getTrustRelations(u,1000),t=[];while(await v.queryNextPage())if(t.push(...v.currentPage.results),!v.currentPage.hasMore)break;let b={};t.forEach((X)=>{let s=j(X.truster),h=j(X.trustee),N=s!==u?X.truster:X.trustee;if(!b[N])b[N]=[];b[N].push(X)});let S=Object.entries(b).filter(([X])=>j(X)!==u).map(([X,s])=>{let h=Math.max(...s.map((D)=>D.timestamp)),N;if(s.length===2)N="mutuallyTrusts";else if(j(s[0]?.trustee)===u)N="trustedBy";else if(j(s[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:h}});return E(S)}async getTrustedBy(y){let u=j(y),v=(await this.getAggregatedTrustRelations(u)).filter((t)=>t.relation==="trustedBy");return E(v)}async getTrusts(y){let u=j(y),v=(await this.getAggregatedTrustRelations(u)).filter((t)=>t.relation==="trusts");return E(v)}async getMutualTrusts(y){let u=j(y),v=(await this.getAggregatedTrustRelations(u)).filter((t)=>t.relation==="mutuallyTrusts");return E(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,t=u,b=this.ONE_64;while(t>0n){if((t&1n)===1n)b=this.mul64(b,v);v=this.mul64(v,v),t>>=1n}return b}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,t=y,b=u;while(b>0n){if((b&1n)===1n)v=this.mul36(v,t);t=this.mul36(t,t),b>>=1n}return v}static attoCirclesToCircles(y){if(y===0n)return 0;let u=y/this.ATTO_FACTOR,v=y%this.ATTO_FACTOR,t=BigInt(Number.MAX_SAFE_INTEGER);if(u>t||u<-t)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,t=v/this.PERIOD_SEC,b=v%this.PERIOD_SEC,S=this.v1InflateFactor(t),X=this.v1InflateFactor(t+1n);return this.v1ToDemurrage(y,S,X,b,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,u){let v=u-this.INFLATION_DAY_ZERO_UNIX,t=v/this.PERIOD_SEC,b=v%this.PERIOD_SEC,S=this.v1InflateFactor(t),X=this.v1InflateFactor(t+1n),s=S*(this.PERIOD_SEC-b)+X*b;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/s}static v1ToDemurrage(y,u,v,t,b){let S=u*(b-t)+v*t;return y*3n*this.V1_ACCURACY*b/S}}class b0{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)=>e(v));return E(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((t)=>j(t)),v=await this.client.call("circles_getAvatarInfoBatch",[u]);return E(v)}async getNetworkSnapshot(){let y=await this.client.call("circles_getNetworkSnapshot",[]);return E(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,t){return this.client.call("circles_searchProfiles",[y.toLowerCase(),u,v,t])}async searchByAddressOrName(y,u=10,v=0,t){let b=[],S=/^0x[a-fA-F0-9]{40}$/.test(y);if(S)try{let X=await this.getProfileByAddress(y);if(X){let s={...X,address:y};if(!t||!s.avatarType||t.includes(s.avatarType))b.push(s)}}catch(X){console.warn("Failed to get profile by address:",X)}try{let X=await this.searchProfiles(y,u,v,t);if(S&&b.length>0){let s=y.toLowerCase(),h=X.filter((N)=>N.address?.toLowerCase()!==s);b.push(...h)}else b.push(...X)}catch(X){console.warn("Failed to search profiles by text:",X)}return b.slice(0,u)}}class s0{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((t)=>j(t)),v=(await this.client.call("circles_getTokenInfoBatch",[u])).map((t)=>e(t));return E(v)}getTokenHolders(y,u=100,v="DESC"){let t=j(y);return new p(this.client,{namespace:"V_CrcV2",table:"BalancesByAccountAndToken",columns:["account","tokenAddress","demurragedTotalBalance"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"tokenAddress",Value:t}],cursorColumns:[{name:"demurragedTotalBalance",sortOrder:v},{name:"account",sortOrder:"ASC"}],orderColumns:[{Column:"demurragedTotalBalance",SortOrder:v},{Column:"account",SortOrder:"ASC"}],limit:u,sortOrder:v},(b)=>({account:b.account,tokenAddress:b.tokenAddress,demurragedTotalBalance:b.demurragedTotalBalance}))}}class h0{client;constructor(y){this.client=y}transformQueryResponse(y){let{columns:u,rows:v}=y;return v.map((t)=>{let b={};return u.forEach((S,X)=>{b[S]=t[X]}),b})}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 E(v[0].inviter);return}async getInvitations(y){let u=j(y),v=96,t=await this.client.call("circles_getAvatarInfoBatch",[[u]]);if((t.length>0?t[0]:void 0)?.version===2)return[];let b=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(b).map((h)=>h.truster);if(S.length===0)return[];let X=await this.client.call("circles_getAvatarInfoBatch",[S]),s=[];for(let h of X){if(!h?.isHuman)continue;let N=(await this.client.call("circles_getTokenBalances",[h.avatar])).find((D)=>j(D.tokenAddress)===j(h.avatar));if(N&&N.circles>=96)s.push(h)}return E(s)}async getInvitationsFrom(y,u=!1){let v=j(y);if(u){let t=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"}]}]),b=this.transformQueryResponse(t).map((S)=>S.avatar);return E(b)}else{let t=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:[]}]),b=this.transformQueryResponse(t).map((h)=>h.trustee);if(b.length===0)return[];let S=await this.client.call("circles_getAvatarInfoBatch",[b]),X=new Set(S.filter((h)=>h!==null).map((h)=>j(h.avatar))),s=b.filter((h)=>!X.has(j(h)));return E(s)}}}function lu(y,u){let v=BigInt(y),t=c.attoCirclesToCircles(v),b=c.attoCirclesToAttoCrc(v,BigInt(u)),S=c.attoCirclesToCircles(b),X=c.attoCirclesToAttoStaticCircles(v,BigInt(u)),s=c.attoCirclesToCircles(X);return{attoCircles:v,circles:t,staticAttoCircles:X,staticCircles:s,attoCrc:b,crc:S}}class N0{client;constructor(y){this.client=y}getTransactionHistory(y,u=50,v="DESC"){let t=j(y),b=[{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:t},{Type:"FilterPredicate",FilterType:"Equals",Column:"to",Value:t}]}]}];return new p(this.client,{namespace:"V_Crc",table:"TransferSummary",sortOrder:v,columns:[],filter:b,limit:u},(S)=>{let X=lu(S.value,S.timestamp),s={...S,...X};return E(s)})}}class D0{client;constructor(y){this.client=y}async findGroups(y=50,u){let v=this.getGroups(y,u,"DESC"),t=[];while(await v.queryNextPage()){if(t.push(...v.currentPage.results),t.length>=y)break;if(!v.currentPage.hasMore)break}return t.slice(0,y)}getGroupMemberships(y,u=50,v="DESC"){let t=j(y);return new p(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:t}],limit:u},(b)=>E(b))}getGroupHolders(y,u=100){let v=j(y);return new p(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:(t)=>{let b={...t,totalBalance:BigInt(t.totalBalance),demurragedTotalBalance:BigInt(t.demurragedTotalBalance)};return E(b)}})}getGroupMembers(y,u=100,v="DESC"){let t=j(y);return new p(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:t}],limit:u},(b)=>E(b))}getGroups(y=50,u,v="DESC"){let t=[];if(u){if(u.nameStartsWith)t.push({Type:"FilterPredicate",FilterType:"Like",Column:"name",Value:u.nameStartsWith+"%"});if(u.symbolStartsWith)t.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)t.push(S[0]);else t.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)t.push(S[0]);else t.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)t.push(S[0]);else t.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:S})}if(u.mintHandlerEquals)t.push({Type:"FilterPredicate",FilterType:"Equals",Column:"mintHandler",Value:j(u.mintHandlerEquals)});if(u.treasuryEquals)t.push({Type:"FilterPredicate",FilterType:"Equals",Column:"treasury",Value:j(u.treasuryEquals)})}let b=t.length>1?[{Type:"Conjunction",ConjunctionType:"And",Predicates:t}]:t;return new p(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:b,limit:y},(S)=>E(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 t0(this.client);return this._trust}get balance(){if(!this._balance)this._balance=new b0(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 s0(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 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 $u{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,t=u,b=this.ONE_64;while(t>0n){if((t&1n)===1n)b=this.mul64(b,v);v=this.mul64(v,v),t>>=1n}return b}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,t=y,b=u;while(b>0n){if((b&1n)===1n)v=this.mul36(v,t);t=this.mul36(t,t),b>>=1n}return v}static attoCirclesToCircles(y){if(y===0n)return 0;let u=y/this.ATTO_FACTOR,v=y%this.ATTO_FACTOR,t=BigInt(Number.MAX_SAFE_INTEGER);if(u>t||u<-t)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,t=v/this.PERIOD_SEC,b=v%this.PERIOD_SEC,S=this.v1InflateFactor(t),X=this.v1InflateFactor(t+1n);return this.v1ToDemurrage(y,S,X,b,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,u){let v=u-this.INFLATION_DAY_ZERO_UNIX,t=v/this.PERIOD_SEC,b=v%this.PERIOD_SEC,S=this.v1InflateFactor(t),X=this.v1InflateFactor(t+1n),s=S*(this.PERIOD_SEC-b)+X*b;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/s}static v1ToDemurrage(y,u,v,t,b){let S=u*(b-t)+v*t;return y*3n*this.V1_ACCURACY*b/S}}async function Ky(y,u,v){let t=new Map,b=new Set;return v.transfers.forEach((S)=>{if(y.toLowerCase()===S.from.toLowerCase())b.add(S.tokenOwner.toLowerCase())}),(await new P0(u).token.getTokenInfoBatch(Array.from(b))).forEach((S)=>{if(S.isWrapped&&!S.isInflationary)S.tokenType="CrcV2_ERC20WrapperDeployed_Demurraged";t.set(S.tokenAddress.toLowerCase(),S)}),t}function Vy(y,u){let v={};return y.transfers.forEach((t)=>{let b=u.get(t.tokenOwner.toLowerCase());if(b&&b.tokenType.startsWith("CrcV2_ERC20WrapperDeployed")){if(!v[t.tokenOwner])v[t.tokenOwner]=[BigInt(0),b.tokenType];v[t.tokenOwner][0]+=BigInt(t.value)}}),v}function Wy(y,u){let v=y.transfers.map((t)=>{let b=u.get(t.tokenOwner.toLowerCase());if(b&&b.tokenType.startsWith("CrcV2_ERC20WrapperDeployed"))return{...t,tokenOwner:b.tokenOwner};return t});return{...y,transfers:v}}var j0=(y)=>BigInt(y),G=(y)=>parseInt(y,16),du=(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 Ou(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 du(u);try{return j0(u)}catch{return u}}try{let t=G(u);if(t<Number.MAX_SAFE_INTEGER)return t;return j0(u)}catch{return u}}if(u==="true")return!0;if(u==="false")return!1;return u}function nu(y){let{event:u,values:v}=y,t={$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[b,S]of Object.entries(v)){if(["blockNumber","timestamp","transactionIndex","logIndex","transactionHash"].includes(b))continue;t[b]=Ou(b,S)}return t}function eu(y){return y.map(nu)}class Cy{_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 Cy;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 g extends x0{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 iy{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 t=await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)});if(!t.ok)throw g.connectionFailed(this.rpcUrl,Error(`HTTP ${t.status}: ${t.statusText}`));let b=await t.json();if(b.error)throw g.fromJsonRpcError(b.error);if(b.result===void 0)throw g.invalidResponse(y,b);return b.result}catch(t){if(t instanceof g)throw t;throw g.connectionFailed(this.rpcUrl,t)}}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 t=JSON.parse(v.data),{id:b,method:S,params:X}=t;if(b!==void 0&&this.pendingResponses[b])this.pendingResponses[b].resolve(t),delete this.pendingResponses[b];if(S==="eth_subscription"&&X){let{subscription:s,result:h}=X;if(this.subscriptionListeners[s])this.subscriptionListeners[s].forEach((N)=>N(h))}},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 t=this.requestId++,b={jsonrpc:"2.0",method:y,params:u,id:t};return new Promise((S,X)=>{this.pendingResponses[t]={resolve:S,reject:X},this.websocket.send(JSON.stringify(b)),setTimeout(()=>{if(this.pendingResponses[t])this.pendingResponses[t].reject(g.timeout(y,v)),delete this.pendingResponses[t]},v)})}async subscribe(y){let u=y?.toLowerCase();if(!this.websocketConnected)await this.connect();let v=Cy.create(),t=JSON.stringify(u?{address:u}:{}),b=(await this.sendMessage("eth_subscribe",["circles",t])).result;if(!this.subscriptionListeners[b])this.subscriptionListeners[b]=[];return this.subscriptionListeners[b].push((S)=>{eu(S).forEach((X)=>v.emit(X))}),v.property}}var vy=BigInt(4294967295),U0=BigInt(32);function Ru(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 Gu(y,u=!1){let v=y.length,t=new Uint32Array(v),b=new Uint32Array(v);for(let S=0;S<v;S++){let{h:X,l:s}=Ru(y[S],u);[t[S],b[S]]=[X,s]}return[t,b]}var au=(y,u,v)=>y<<v|u>>>32-v,Zu=(y,u,v)=>u<<v|y>>>32-v,ou=(y,u,v)=>u<<v-32|y>>>64-v,qu=(y,u,v)=>y<<v-32|u>>>64-v;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function Bu(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function m0(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function ty(y,...u){if(!Bu(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 k0(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 ru(y,u){ty(y);let v=u.outputLen;if(y.length<v)throw Error("digestInto() expects output buffer of length at least "+v)}function zu(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 Ju=(()=>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=Ju?(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 ty(y),y}class V0{}function t6(y){let u=(t)=>y().update(K0(t)).digest(),v=y();return u.outputLen=v.outputLen,u.blockLen=v.blockLen,u.create=()=>y(),u}var b6=BigInt(0),R=BigInt(1),S6=BigInt(2),X6=BigInt(7),s6=BigInt(256),h6=BigInt(113),W0=[],C0=[],i0=[];for(let y=0,u=R,v=1,t=0;y<24;y++){[v,t]=[t,(2*v+3*t)%5],W0.push(2*(5*t+v)),C0.push((y+1)*(y+2)/2%64);let b=b6;for(let S=0;S<7;S++)if(u=(u<<R^(u>>X6)*h6)%s6,u&S6)b^=R<<(R<<BigInt(S))-R;i0.push(b)}var g0=Gu(i0,!0),N6=g0[0],D6=g0[1],I0=(y,u,v)=>v>32?ou(y,u,v):au(y,u,v),E0=(y,u,v)=>v>32?qu(y,u,v):Zu(y,u,v);function P6(y,u=24){let v=new Uint32Array(10);for(let t=24-u;t<24;t++){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 s=(X+8)%10,h=(X+2)%10,N=v[h],D=v[h+1],U=I0(N,D,1)^v[s],k=E0(N,D,1)^v[s+1];for(let P=0;P<50;P+=10)y[X+P]^=U,y[X+P+1]^=k}let b=y[2],S=y[3];for(let X=0;X<24;X++){let s=C0[X],h=I0(b,S,s),N=E0(b,S,s),D=W0[X];b=y[D],S=y[D+1],y[D]=h,y[D+1]=N}for(let X=0;X<50;X+=10){for(let s=0;s<10;s++)v[s]=y[X+s];for(let s=0;s<10;s++)y[X+s]^=~v[(s+2)%10]&v[(s+4)%10]}y[0]^=N6[t],y[1]^=D6[t]}A0(v)}class gy extends V0{constructor(y,u,v,t=!1,b=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=t,this.rounds=b,m0(v),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=zu(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){k0(this),y=K0(y),ty(y);let{blockLen:u,state:v}=this,t=y.length;for(let b=0;b<t;){let S=Math.min(u-this.pos,t-b);for(let X=0;X<S;X++)v[this.pos++]^=y[b++];if(this.pos===u)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:u,pos:v,blockLen:t}=this;if(y[v]^=u,(u&128)!==0&&v===t-1)this.keccak();y[t-1]^=128,this.keccak()}writeInto(y){k0(this,!1),ty(y),this.finish();let u=this.state,{blockLen:v}=this;for(let t=0,b=y.length;t<b;){if(this.posOut>=v)this.keccak();let S=Math.min(v-this.posOut,b-t);y.set(u.subarray(this.posOut,this.posOut+S),t),this.posOut+=S,t+=S}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return m0(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(ru(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:t,rounds:b,enableXOF:S}=this;return y||(y=new gy(u,v,t,S,b)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=b,y.suffix=v,y.outputLen=t,y.enableXOF=S,y.destroyed=this.destroyed,y}}var j6=(y,u,v)=>t6(()=>new gy(u,y,v)),U6=(()=>j6(1,136,32))(),H0=[];for(let y=0;y<256;y++)H0[y]=y.toString(16).padStart(2,"0");function m6(y){let u="0x";for(let v=0;v<y.length;v++)u+=H0[y[v]];return u}function k6(y){let u=y.toLowerCase().replace("0x",""),v=m6(U6(new TextEncoder().encode(u))).slice(2),t="0x";for(let b=0;b<u.length;b++)t+=parseInt(v[b],16)>=8?u[b].toUpperCase():u[b];return t}function K(y){return y.toLowerCase()}function M6(y){return k6(y)}function I6(y){if(typeof y!=="string")return!1;let u=y.replace("0x","");return u.length===40&&/^[0-9a-fA-F]{40}$/.test(u)}function _(y){if(y===null||y===void 0)return y;if(I6(y))return M6(y);if(Array.isArray(y))return y.map((u)=>_(u));if(typeof y==="object"&&y!==null){let u={};for(let v in y)if(Object.prototype.hasOwnProperty.call(y,v))u[v]=_(y[v]);return u}return y}function E6(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 by(y){let u={};for(let v in y){let t=y[v];if(t===null||t===void 0)u[v]=t;else if(typeof t==="string"&&/^\d+$/.test(t))u[v]=BigInt(t);else if(typeof t==="object"&&!Array.isArray(t))u[v]=by(t);else if(Array.isArray(t))u[v]=t.map((b)=>typeof b==="object"&&b!==null?by(b):b);else u[v]=t}return u}var S8=BigInt(96)*BigInt(1000000000000000000),x6=BigInt("9999999999999999999999999999999999999");class Hy{client;constructor(y){this.client=y}async findPath(y){let u=E6(y),v=await this.client.call("circlesV2_findPath",[u]),t=by(v);return _(t)}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 t=this.cursorColumns[v],b=y[t.name];if(b===void 0)continue;if(v===0)u.push(this.createComparisonPredicate(t,b));else{let S=[];for(let X=0;X<v;X++){let s=this.cursorColumns[X],h=y[s.name];if(h!==void 0)S.push(this.createEqualityPredicate(s,h))}S.push(this.createComparisonPredicate(t,b)),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((t)=>{let b={};return u.forEach((S,X)=>{b[S]=t[X]}),this.rowTransformer?this.rowTransformer(b):b})}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},t=await this.client.call("circles_query",[v]),b=this.rowsToObjects(t),S=this.getCursors(b);return this._currentPage={limit:this.params.limit,size:b.length,firstCursor:S.first,lastCursor:S.last,sortOrder:this.params.sortOrder,hasMore:b.length===this.params.limit,results:b},b.length>0}reset(){this._currentPage=void 0}}class L0{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,t=u,b=this.ONE_64;while(t>0n){if((t&1n)===1n)b=this.mul64(b,v);v=this.mul64(v,v),t>>=1n}return b}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,t=y,b=u;while(b>0n){if((b&1n)===1n)v=this.mul36(v,t);t=this.mul36(t,t),b>>=1n}return v}static attoCirclesToCircles(y){if(y===0n)return 0;let u=y/this.ATTO_FACTOR,v=y%this.ATTO_FACTOR,t=BigInt(Number.MAX_SAFE_INTEGER);if(u>t||u<-t)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,t=v/this.PERIOD_SEC,b=v%this.PERIOD_SEC,S=this.v1InflateFactor(t),X=this.v1InflateFactor(t+1n);return this.v1ToDemurrage(y,S,X,b,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,u){let v=u-this.INFLATION_DAY_ZERO_UNIX,t=v/this.PERIOD_SEC,b=v%this.PERIOD_SEC,S=this.v1InflateFactor(t),X=this.v1InflateFactor(t+1n),s=S*(this.PERIOD_SEC-b)+X*b;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/s}static v1ToDemurrage(y,u,v,t,b){let S=u*(b-t)+v*t;return y*3n*this.V1_ACCURACY*b/S}}class Ly{client;constructor(y){this.client=y}async getTotalBalance(y,u=!0){let v=await this.client.call("circlesV2_getTotalBalance",[K(y),u]);return L0.circlesToAttoCircles(v)}async getTokenBalances(y){let u=(await this.client.call("circles_getTokenBalances",[K(y)])).map((v)=>by(v));return _(u)}}class Fy{client;constructor(y){this.client=y}async findGroups(y=50,u){let v=this.getGroups(y,u,"DESC"),t=[];while(await v.queryNextPage()){if(t.push(...v.currentPage.results),t.length>=y)break;if(!v.currentPage.hasMore)break}return t.slice(0,y)}getGroupMemberships(y,u=50,v="DESC"){let t=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:t}],limit:u},(b)=>_(b))}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:(t)=>{let b={...t,totalBalance:BigInt(t.totalBalance),demurragedTotalBalance:BigInt(t.demurragedTotalBalance)};return _(b)}})}getGroupMembers(y,u=100,v="DESC"){let t=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:t}],limit:u},(b)=>_(b))}getGroups(y=50,u,v="DESC"){let t=[];if(u){if(u.nameStartsWith)t.push({Type:"FilterPredicate",FilterType:"Like",Column:"name",Value:u.nameStartsWith+"%"});if(u.symbolStartsWith)t.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)t.push(S[0]);else t.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)t.push(S[0]);else t.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)t.push(S[0]);else t.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:S})}if(u.mintHandlerEquals)t.push({Type:"FilterPredicate",FilterType:"Equals",Column:"mintHandler",Value:K(u.mintHandlerEquals)});if(u.treasuryEquals)t.push({Type:"FilterPredicate",FilterType:"Equals",Column:"treasury",Value:K(u.treasuryEquals)})}let b=t.length>1?[{Type:"Conjunction",ConjunctionType:"And",Predicates:t}]:t;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:b,limit:y},(S)=>_(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,t=u,b=this.ONE_64;while(t>0n){if((t&1n)===1n)b=this.mul64(b,v);v=this.mul64(v,v),t>>=1n}return b}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,t=y,b=u;while(b>0n){if((b&1n)===1n)v=this.mul36(v,t);t=this.mul36(t,t),b>>=1n}return v}static attoCirclesToCircles(y){if(y===0n)return 0;let u=y/this.ATTO_FACTOR,v=y%this.ATTO_FACTOR,t=BigInt(Number.MAX_SAFE_INTEGER);if(u>t||u<-t)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,t=v/this.PERIOD_SEC,b=v%this.PERIOD_SEC,S=this.v1InflateFactor(t),X=this.v1InflateFactor(t+1n);return this.v1ToDemurrage(y,S,X,b,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,u){let v=u-this.INFLATION_DAY_ZERO_UNIX,t=v/this.PERIOD_SEC,b=v%this.PERIOD_SEC,S=this.v1InflateFactor(t),X=this.v1InflateFactor(t+1n),s=S*(this.PERIOD_SEC-b)+X*b;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/s}static v1ToDemurrage(y,u,v,t,b){let S=u*(b-t)+v*t;return y*3n*this.V1_ACCURACY*b/S}}var Qy="0x0000000000000000000000000000000000000000",h8=BigInt(96)*BigInt(1000000000000000000),N8=BigInt("9999999999999999999999999999999999999");var Sy=BigInt(4294967295),F0=BigInt(32);function K6(y,u=!1){if(u)return{h:Number(y&Sy),l:Number(y>>F0&Sy)};return{h:Number(y>>F0&Sy)|0,l:Number(y&Sy)|0}}function V6(y,u=!1){let v=y.length,t=new Uint32Array(v),b=new Uint32Array(v);for(let S=0;S<v;S++){let{h:X,l:s}=K6(y[S],u);[t[S],b[S]]=[X,s]}return[t,b]}var W6=(y,u,v)=>y<<v|u>>>32-v,C6=(y,u,v)=>u<<v|y>>>32-v,i6=(y,u,v)=>u<<v-32|y>>>64-v,g6=(y,u,v)=>y<<v-32|u>>>64-v;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function H6(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function Q0(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function sy(y,...u){if(!H6(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 T0(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 L6(y,u){sy(y);let v=u.outputLen;if(y.length<v)throw Error("digestInto() expects output buffer of length at least "+v)}function F6(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 Q6=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function T6(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]=T6(y[u]);return y}var f0=Q6?(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 sy(y),y}class $0{}function Y6(y){let u=(t)=>y().update(l0(t)).digest(),v=y();return u.outputLen=v.outputLen,u.blockLen=v.blockLen,u.create=()=>y(),u}var p6=BigInt(0),Z=BigInt(1),_6=BigInt(2),c6=BigInt(7),l6=BigInt(256),$6=BigInt(113),d0=[],O0=[],n0=[];for(let y=0,u=Z,v=1,t=0;y<24;y++){[v,t]=[t,(2*v+3*t)%5],d0.push(2*(5*t+v)),O0.push((y+1)*(y+2)/2%64);let b=p6;for(let S=0;S<7;S++)if(u=(u<<Z^(u>>c6)*$6)%l6,u&_6)b^=Z<<(Z<<BigInt(S))-Z;n0.push(b)}var e0=V6(n0,!0),d6=e0[0],O6=e0[1],w0=(y,u,v)=>v>32?i6(y,u,v):W6(y,u,v),Y0=(y,u,v)=>v>32?g6(y,u,v):C6(y,u,v);function n6(y,u=24){let v=new Uint32Array(10);for(let t=24-u;t<24;t++){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 s=(X+8)%10,h=(X+2)%10,N=v[h],D=v[h+1],U=w0(N,D,1)^v[s],k=Y0(N,D,1)^v[s+1];for(let P=0;P<50;P+=10)y[X+P]^=U,y[X+P+1]^=k}let b=y[2],S=y[3];for(let X=0;X<24;X++){let s=O0[X],h=w0(b,S,s),N=Y0(b,S,s),D=d0[X];b=y[D],S=y[D+1],y[D]=h,y[D+1]=N}for(let X=0;X<50;X+=10){for(let s=0;s<10;s++)v[s]=y[X+s];for(let s=0;s<10;s++)y[X+s]^=~v[(s+2)%10]&v[(s+4)%10]}y[0]^=d6[t],y[1]^=O6[t]}c0(v)}class fy extends $0{constructor(y,u,v,t=!1,b=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=t,this.rounds=b,Q0(v),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=F6(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){T0(this),y=l0(y),sy(y);let{blockLen:u,state:v}=this,t=y.length;for(let b=0;b<t;){let S=Math.min(u-this.pos,t-b);for(let X=0;X<S;X++)v[this.pos++]^=y[b++];if(this.pos===u)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:u,pos:v,blockLen:t}=this;if(y[v]^=u,(u&128)!==0&&v===t-1)this.keccak();y[t-1]^=128,this.keccak()}writeInto(y){T0(this,!1),sy(y),this.finish();let u=this.state,{blockLen:v}=this;for(let t=0,b=y.length;t<b;){if(this.posOut>=v)this.keccak();let S=Math.min(v-this.posOut,b-t);y.set(u.subarray(this.posOut,this.posOut+S),t),this.posOut+=S,t+=S}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return Q0(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(L6(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:t,rounds:b,enableXOF:S}=this;return y||(y=new fy(u,v,t,S,b)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=b,y.suffix=v,y.outputLen=t,y.enableXOF=S,y.destroyed=this.destroyed,y}}var e6=(y,u,v)=>Y6(()=>new fy(u,y,v)),R0=(()=>e6(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 I=64,wy=32,Xy=(y)=>y.startsWith("0x")?y.slice(2):y,Y=(y)=>y.toString(16).padStart(I,"0");function R6(y){let u=y.toLowerCase().replace("0x",""),v=a0(R0(new TextEncoder().encode(u))).slice(2),t="0x";for(let b=0;b<u.length;b++)t+=parseInt(v[b],16)>=8?u[b].toUpperCase():u[b];return t}function Ty(y,u){if(y==="tuple"&&u)return`(${u.map((t)=>Ty(t.type,t.components)).join(",")})`;let v=y.match(/^tuple(\[\d*\])$/);if(v&&u)return`${Ty("tuple",u)}${v[1]}`;return y}function G6(y){let u=(y.inputs||[]).map((v)=>Ty(v.type,v.components));return`${y.name}(${u.join(",")})`}function a6(y){let u=G6(y),v=R0(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 p0(u);return q(v)}if(y==="tuple")return p0(u);return!1}function p0(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 t=y.slice(0,y.indexOf("[")),b=y.endsWith("[]"),S=q(t,v),X;if(S){let s=u.map((N)=>l(t,N,v)),h=u.length*wy;X=s.map((N)=>{let D=h;return h+=N.length/2,Y(D)}).join("")+s.join("")}else X=u.map((s)=>l(t,s,v)).join("");return b?Y(u.length)+X:X}function o6(y,u){let v=Array.isArray(u),t=[],b=[],S=[];for(let X=0;X<y.length;X++){let s=y[X],h=v?u[X]:u[s.name||""],N=q(s.type,s.components);if(S.push(N),N)t.push(""),b.push(l(s.type,h,s.components));else t.push(l(s.type,h,s.components))}if(b.length>0){let X=t.reduce((N,D,U)=>N+(S[U]?wy:D.length/2),0),s="",h=0;for(let N=0;N<y.length;N++)if(S[N])s+=Y(X),X+=b[h].length/2,h++;else s+=t[N];return s+b.join("")}return t.join("")}function q6(y,u){if(y==="address")return Xy(u).toLowerCase().padStart(I,"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 t=y==="int"?256:parseInt(y.slice(3));v=(1n<<BigInt(t))+v}return Y(v)}if(y.startsWith("bytes")&&y!=="bytes")return Xy(u).padEnd(I,"0");if(y==="bytes"){let v=Xy(u),t=Y(v.length/2),b=v.padEnd(Math.ceil(v.length/I)*I,"0");return t+b}if(y==="string"){let v=Array.from(new TextEncoder().encode(u)).map((S)=>S.toString(16).padStart(2,"0")).join(""),t=Y(v.length/2),b=v.padEnd(Math.ceil(v.length/I)*I,"0");return t+b}throw Error(`Unsupported type: ${y}`)}function o(y,u,v=0,t){if(y==="tuple"&&t)return r6(t,u,v);if(y.includes("["))return B6(y,u,v,t);return z6(y,u,v)}function B6(y,u,v,t){let b=y.slice(0,y.indexOf("[")),S=u.slice(v,v+I);if(y.endsWith("[]")){let s=parseInt(S,16)*2,h=parseInt(u.slice(s,s+I),16),N=[],D=s+I;for(let U=0;U<h;U++){let k=o(b,u,D,t);N.push(k.value),D+=k.consumed}return{value:N,consumed:I}}let X=y.match(/\[(\d+)\]$/);if(X){let s=parseInt(X[1]),h=[],N=0;for(let D=0;D<s;D++){let U=o(b,u,v+N,t);h.push(U.value),N+=U.consumed}return{value:h,consumed:N}}throw Error(`Invalid array type: ${y}`)}function r6(y,u,v){let t=[],b=v;for(let S of y){let X=o(S.type,u,b,S.components);t.push(X.value),b+=X.consumed}return{value:t,consumed:b-v}}function z6(y,u,v){let t=u.slice(v,v+I);if(y==="address")return{value:R6("0x"+t.slice(24)),consumed:I};if(y==="bool")return{value:parseInt(t,16)!==0,consumed:I};if(y.startsWith("uint"))return{value:BigInt("0x"+t),consumed:I};if(y.startsWith("int")){let b=BigInt("0x"+t),S=y==="int"?256:parseInt(y.slice(3)),X=1n<<BigInt(S-1);return{value:b>=X?b-(1n<<BigInt(S)):b,consumed:I}}if(y.startsWith("bytes")&&y!=="bytes"){let b=parseInt(y.match(/^bytes(\d+)$/)[1]);return{value:"0x"+t.slice(0,b*2),consumed:I}}if(y==="bytes"){let b=parseInt(t,16)*2,S=parseInt(u.slice(b,b+I),16)*2;return{value:"0x"+u.slice(b+I,b+I+S),consumed:I}}if(y==="string"){let b=parseInt(t,16)*2,S=parseInt(u.slice(b,b+I),16)*2,X=u.slice(b+I,b+I+S),s=new Uint8Array(X.match(/.{2}/g)?.map((h)=>parseInt(h,16))||[]);return{value:new TextDecoder().decode(s),consumed:I}}throw Error(`Unsupported type: ${y}`)}function _0(y){let{abi:u,functionName:v,args:t=[]}=y,b=u.find((P)=>P.type==="function"&&P.name===v);if(!b)throw Error(`Function "${v}" not found in ABI`);let S=a6(b),X=b.inputs||[];if(X.length===0)return S;if(t.length!==X.length)throw Error(`Expected ${X.length} arguments, got ${t.length}`);let s=[],h=[],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)s.push(""),h.push(l(x.type,t[P],V));else s.push(l(x.type,t[P],V))}if(h.length===0)return S+s.join("");let D=s.reduce((P,x,V)=>P+(N[V]?wy:x.length/2),0),U="",k=0;for(let P=0;P<X.length;P++)if(N[P])U+=Y(D),D+=h[k].length/2,k++;else U+=s[P];return S+U+h.join("")}function J6(y){let{abi:u,functionName:v,data:t}=y,b=u.find((N)=>N.type==="function"&&N.name===v);if(!b)throw Error(`Function "${v}" not found in ABI`);let S=b.outputs||[];if(S.length===0)return;let X=Xy(t);if(S.length===1)return o(S[0].type,X,0,S[0].components).value;let s=[],h=0;for(let N of S){let D=o(N.type,X,h,N.components);s.push(D.value),h+=D.consumed}return s}class Q{address;abi;rpcUrl;constructor(y){this.address=y.address,this.abi=y.abi,this.rpcUrl=y.rpcUrl}async read(y,u,v){let t=_0({abi:this.abi,functionName:y,args:u}),b={to:this.address,data:t,...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:[b,"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 _0({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 hy extends Q{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,t,b="0x"){return{to:this.address,data:this.encodeWrite("safeTransferFrom",[y,u,v,t,b]),value:0n}}operateFlowMatrix(y,u,v,t){return{to:this.address,data:this.encodeWrite("operateFlowMatrix",[y,u,v,t]),value:0n}}async isHuman(y){return this.read("isHuman",[y])}safeBatchTransferFrom(y,u,v,t,b="0x"){return{to:this.address,data:this.encodeWrite("safeBatchTransferFrom",[y,u,v,t,b]),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 Q{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 Q{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 d extends Q{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 W extends Yy{constructor(y,u){super("TransferError",y,{...u,source:u?.source||"TRANSFERS"})}static noPathFound(y,u,v){return new W(`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,t){let b=Number(y)/1000000000000000000,S=Number(u)/1000000000000000000;return new W(`Insufficient balance for transfer. Requested: ${b.toFixed(6)} CRC, Available: ${S.toFixed(6)} CRC.`,{code:"TRANSFER_INSUFFICIENT_BALANCE",source:"VALIDATION",context:{from:v,to:t,requested:y.toString(),available:u.toString(),requestedCrc:b,availableCrc:S}})}static wrappedTokensRequired(){return new W("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 W(`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 W(`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 W(`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 hy({address:y.v2HubAddress,rpcUrl:y.circlesRpcUrl}),this.liftERC20=new Ny({address:y.liftERC20Address,rpcUrl:y.circlesRpcUrl}),this.rpcClient=new iy(y.circlesRpcUrl),this.pathfinder=new Hy(this.rpcClient),this.balance=new Ly(this.rpcClient),this.group=new Fy(this.rpcClient)}async buildFlowMatrixTx(y,u,v,t,b=!1){let S=y.toLowerCase(),X=u.toLowerCase();if(!v.transfers||v.transfers.length===0)throw W.noPathFound(S,X);let s={...v};if(b&&t?.toTokens?.length===1){let H=t.toTokens[0].toLowerCase();if(v.maxFlow>0n)s.transfers.push({from:X,to:X,tokenOwner:H,value:v.maxFlow})}let h=await Ky(S,this.config.circlesRpcUrl,s),N=Vy(s,h),D=Object.keys(N).length>0;if(D&&!t?.useWrappedBalances)throw W.wrappedTokensRequired();let U=[],k=[];if(D){let H=await this._getTokenBalanceMap(S),T=this._createDemurragedUnwrapCalls(N),{unwrapCalls:Dy,wrapCalls:r}=this._createInflationaryUnwrapAndWrapCalls(N,h,H);U=[...T,...Dy],k=r,s=Wy(s,h)}let P=Iy(S,X,s.maxFlow,s.transfers),x=Ey(P,t?.txData),V=this.hubV2.operateFlowMatrix(P.flowVertices,P.flowEdges,x,P.packedCoordinates),M=!1;try{M=await this.hubV2.isApprovedForAll(S,S)}catch(H){console.warn("Failed to check approval status, including approval transaction:",H)}return[...M?[]:[this.hubV2.setApprovalForAll(S,!0)],...U,V,...k]}async constructAdvancedTransfer(y,u,v,t,b=!1){let S=y.toLowerCase(),X=u.toLowerCase(),s=BigInt(v);if(S===X&&t?.fromTokens?.length===1&&t?.toTokens?.length===1){let P=t.fromTokens[0],x=t.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!==Qy){let H=new $({address:P,rpcUrl:this.config.circlesRpcUrl}).unwrap(s);return[{to:H.to,data:H.data,value:H.value??0n}]}if(P.toLowerCase()===M.toLowerCase()&&M!==Qy){let C=new d({address:P,rpcUrl:this.config.circlesRpcUrl}),H=w.attoCirclesToAttoStaticCircles(s),T=C.unwrap(H);return[{to:T.to,data:T.data,value:T.value??0n}]}}let h=this._truncateToSixDecimals(s),N=await this._getDefaultTokenExcludeList(X,t?.excludeFromTokens),{...D}=t||{},U={...D,...N?{excludeFromTokens:N}:{}},k=await this.pathfinder.findPath({from:S,to:X,targetFlow:h,...U});if(!k.transfers||k.transfers.length===0)throw W.noPathFound(S,X);if(k.maxFlow<h)throw W.insufficientBalance(h,k.maxFlow,S,X);return this.buildFlowMatrixTx(S,X,k,t,b)}async constructReplenish(y,u,v,t){let b=y.toLowerCase(),S=u.toLowerCase(),X=(t||y).toLowerCase(),s=BigInt(v),N=(await this.balance.getTokenBalances(b)).filter((m)=>m.tokenOwner.toLowerCase()===S),D=0n,U=0n,k=0n,P=null,x=null;for(let m of N)if(m.isWrapped)if(m.tokenType.includes("Demurrage"))U=BigInt(m.attoCircles),P=m.tokenAddress;else k=BigInt(m.staticAttoCircles),x=m.tokenAddress;else D=BigInt(m.attoCircles);let V=D+U+w.attoStaticCirclesToAttoCircles(k),M=[];if(D>=s){if(console.log(`✓ Already have ${Number(D)/1000000000000000000} CRC unwrapped (target: ${Number(s)/1000000000000000000} CRC). No replenish needed.`),X!==b){let m=await this.hubV2.toTokenId(S),A=this.hubV2.safeTransferFrom(b,X,m,s);M.push({to:A.to,data:A.data,value:A.value??0n})}return M}let C=s-D;if(console.log(`Current unwrapped: ${Number(D)/1000000000000000000} CRC`),console.log(`Target amount: ${Number(s)/1000000000000000000} CRC`),console.log(`Need to acquire: ${Number(C)/1000000000000000000} CRC`),V>=s){let m=C;if(U>0n&&P&&m>0n){let A=m>U?U:m,f=new $({address:P,rpcUrl:this.config.circlesRpcUrl}).unwrap(A);M.push({to:f.to,data:f.data,value:f.value??0n}),m-=A}if(k>0n&&x&&m>0n){let A=w.attoCirclesToAttoStaticCircles(m),F=A>k?k:A,ky=new d({address:x,rpcUrl:this.config.circlesRpcUrl}).unwrap(F);M.push({to:ky.to,data:ky.data,value:ky.value??0n})}if(X!==b){let A=await this.hubV2.toTokenId(S),F=this.hubV2.safeTransferFrom(b,X,A,s);M.push({to:F.to,data:F.data,value:F.value??0n})}return M}let T=!await this.hubV2.isTrusted(b,S),Dy=BigInt(Math.floor(Date.now()/1000)+31536000),r=w.truncateToInt64(C),q0=C%w.FACTOR_1E12!==0n,z=w.blowUpToBigInt(q0?r+1n:r),L;try{L=await this.pathfinder.findPath({from:b,to:X,targetFlow:z,toTokens:[S],useWrappedBalances:!0,simulatedTrusts:T?[{truster:b,trustee:S}]:void 0})}catch(m){let A=Number(V)/1000000000000000000,F=Number(s)/1000000000000000000,f=Number(C)/1000000000000000000;throw new W(`Insufficient tokens to replenish. Target: ${F.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(C-(V-D))/1000000000000000000).toFixed(6)} CRC.`,{code:"REPLENISH_INSUFFICIENT_TOKENS",source:"VALIDATION",context:{from:b,tokenId:S,target:s.toString(),unwrapped:D.toString(),deficit:C.toString(),available:V.toString(),targetCrc:F,unwrappedCrc:Number(D)/1000000000000000000,deficitCrc:f,availableCrc:A}})}if(!L.transfers||L.transfers.length===0)throw W.noPathFound(b,X,`No path to acquire token ${S}`);if(L.maxFlow<z){let m=Number(L.maxFlow)/1000000000000000000,A=Number(z)/1000000000000000000;throw new W(`Pathfinder can only provide ${m.toFixed(6)} CRC of the ${A.toFixed(6)} CRC deficit needed for token ${S}.`,{code:"REPLENISH_INSUFFICIENT_PATH_FLOW",source:"PATHFINDING",context:{from:b,tokenId:S,deficit:z.toString(),pathFlow:L.maxFlow.toString(),deficitCrc:A,pathFlowCrc:m}})}if(T){let m=this.hubV2.trust(S,Dy);M.push({to:m.to,data:m.data,value:m.value??0n})}let Py=await Ky(b,this.config.circlesRpcUrl,L),jy=Vy(L,Py),B0=Object.keys(jy).length>0,py=[],Uy=[];if(B0){let m=await this._getTokenBalanceMap(b),A=this._createDemurragedUnwrapCalls(jy),{unwrapCalls:F,wrapCalls:f}=this._createInflationaryUnwrapAndWrapCalls(jy,Py,m);py=[...A,...F],Uy=f,L=Wy(L,Py)}let J=Iy(b,X,L.maxFlow,L.transfers),r0=Ey(J),my=this.hubV2.operateFlowMatrix(J.flowVertices,J.flowEdges,r0,J.packedCoordinates),z0={to:my.to,data:my.data,value:my.value??0n},_y=!1;try{_y=await this.hubV2.isApprovedForAll(b,b)}catch(m){console.warn("Failed to check approval status, including approval transaction:",m)}if(T){let m=this.hubV2.trust(S,0n);Uy.push({to:m.to,data:m.data,value:m.value??0n})}let J0=_y?[]:[{to:this.hubV2.setApprovalForAll(b,!0).to,data:this.hubV2.setApprovalForAll(b,!0).data,value:0n}];return M.push(...J0,...py,z0,...Uy),M}async _getTokenBalanceMap(y){let u=await this.balance.getTokenBalances(y),v=new Map;return u.forEach((t)=>{v.set(t.tokenAddress.toLowerCase(),t.staticAttoCircles)}),v}_createDemurragedUnwrapCalls(y){let u=[];for(let[v,[t,b]]of Object.entries(y)){if(b!=="CrcV2_ERC20WrapperDeployed_Demurraged")continue;let X=new $({address:v,rpcUrl:this.config.circlesRpcUrl}).unwrap(t);u.push({to:X.to,data:X.data,value:X.value??0n})}return u}_createInflationaryUnwrapAndWrapCalls(y,u,v){let t=[],b=[];for(let[S,[X,s]]of Object.entries(y)){if(s!=="CrcV2_ERC20WrapperDeployed_Inflationary")continue;let h=u.get(S.toLowerCase()),N=v.get(S.toLowerCase())||0n;if(N===0n)continue;let U=new d({address:S,rpcUrl:this.config.circlesRpcUrl}).unwrap(N);t.push({to:U.to,data:U.data,value:U.value??0n});let k=h?.tokenOwner,P=w.attoStaticCirclesToAttoCircles(N)-X;if(P>0n){let x=this.hubV2.wrap(k,P,B.Inflation);b.push({to:x.to,data:x.data,value:x.value??0n})}}return{unwrapCalls:t,wrapCalls:b}}_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}),t=new Set;if(v.length>0){let b=v[0];if(t.add(b.group.toLowerCase()),b.erc20WrapperDemurraged)t.add(b.erc20WrapperDemurraged.toLowerCase());if(b.erc20WrapperStatic)t.add(b.erc20WrapperStatic.toLowerCase())}if(u?.forEach((b)=>t.add(b.toLowerCase())),t.size===0)return;return Array.from(t)}}export{W as TransferError,o0 as TransferBuilder};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aboutcircles/sdk-transfers",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "description": "Transfer data construction for Circles SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",