@aboutcircles/sdk-transfers 0.1.24 → 0.1.25

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 Ry=[];for(let y=0;y<256;y++)Ry[y]=y.toString(16).padStart(2,"0");function ky(y){let t="0x";for(let u=0;u<y.length;u++)t+=Ry[y[u]];return t}function yu(y){let t=new Uint8Array(y.length*2);return y.forEach((u,v)=>{let s=u>>8,b=u&255,S=2*v;t[S]=s,t[S+1]=b}),ky(t)}function tu(y,t,u){let v=new Set([t.toLowerCase(),u.toLowerCase()]);y.forEach((S)=>{v.add(S.from.toLowerCase()),v.add(S.to.toLowerCase()),v.add(S.tokenOwner.toLowerCase())});let s=[...v].sort((S,X)=>{let h=BigInt(S),N=BigInt(X),D=h<N,j=h>N;return D?-1:j?1:0}),b={};return s.forEach((S,X)=>{b[S]=X}),{sorted:s,idx:b}}function uu(y,t){let u=new Set,v=[],s=null;if(y.forEach((b,S)=>{let X=b.from.toLowerCase(),h=b.to.toLowerCase();if(X===t&&h===t)s=S;else if(h===t)v.push(S)}),s!==null)u.add(s);else v.forEach((b)=>u.add(b));return u}function iy(y,t,u,v){let s=y.toLowerCase(),b=t.toLowerCase(),{sorted:S,idx:X}=tu(v,s,b),h=uu(v,b),N=v.map((k,W)=>{return{streamSinkId:h.has(W)?1:0,amount:k.value}});if(h.size===0)throw Error(`No terminal edges detected. Flow must have at least one edge delivering to receiver ${b}`);let D=Array.from(h),j=[{sourceCoordinate:X[s],flowEdgeIds:D,data:new Uint8Array(0)}],M=[];v.forEach((k)=>{M.push(X[k.tokenOwner.toLowerCase()]),M.push(X[k.from.toLowerCase()]),M.push(X[k.to.toLowerCase()])});let P=yu(M),I=BigInt(u),K=N.filter((k)=>k.streamSinkId===1).reduce((k,W)=>k+BigInt(W.amount.toString()),BigInt(0));if(K!==I)throw Error(`Terminal sum ${K} does not equal expected ${I}`);return{flowVertices:S,flowEdges:N,streams:j,packedCoordinates:P,sourceCoordinate:X[s]}}function Ey(y,t){let u=y.streams.map((v)=>({sourceCoordinate:v.sourceCoordinate,flowEdgeIds:v.flowEdgeIds,data:v.data instanceof Uint8Array?ky(v.data):v.data}));if(t&&u.length>0)u[0].data=t instanceof Uint8Array?ky(t):t;return u}var ly=(y)=>BigInt(y),$=(y)=>parseInt(y,16),vu=(y)=>{if(y.startsWith("0x"))y=y.slice(2);if(y.length%2!==0)throw Error("Invalid hex string");let t=new Uint8Array(y.length/2);for(let u=0;u<y.length;u+=2)t[u/2]=parseInt(y.substr(u,2),16);return t};function su(y,t){if(typeof t==="string"&&t.startsWith("0x")){let u=t.slice(2);if(u.length===40)return t;if(u.length===64){if(y.toLowerCase().includes("digest")||y.toLowerCase().includes("data")||y.toLowerCase().includes("bytes"))return vu(t);try{return ly(t)}catch{return t}}try{let v=$(t);if(v<Number.MAX_SAFE_INTEGER)return v;return ly(t)}catch{return t}}if(t==="true")return!0;if(t==="false")return!1;return t}function bu(y){let{event:t,values:u}=y,v={$event:t,blockNumber:u.blockNumber?$(u.blockNumber):0,timestamp:u.timestamp?$(u.timestamp):void 0,transactionIndex:u.transactionIndex?$(u.transactionIndex):0,logIndex:u.logIndex?$(u.logIndex):0,transactionHash:u.transactionHash};for(let[s,b]of Object.entries(u)){if(["blockNumber","timestamp","transactionIndex","logIndex","transactionHash"].includes(s))continue;v[s]=su(s,b)}return v}function Su(y){return y.map(bu)}class Iy{_subscribers=[];subscribe(y){return this._subscribers.push(y),()=>{let t=this._subscribers.indexOf(y);if(t>-1)this._subscribers.splice(t,1)}}constructor(){this._subscribers=[]}emit(y){this._subscribers.forEach((t)=>t(y))}static create(){let y=new Iy;return{property:y,emit:(t)=>y.emit(t)}}}class ay extends Error{name;code;source;cause;context;constructor(y,t,u){super(t);if(this.name=y,this.code=u?.code,this.source=u?.source??"UNKNOWN",this.cause=u?.cause,this.context=u?.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 C extends ay{constructor(y,t){super("RpcError",y,{...t,source:t?.source??"RPC_REQUEST"})}static connectionFailed(y,t){return new C("Failed to connect to RPC endpoint",{code:"RPC_CONNECTION_FAILED",source:"RPC_CONNECTION",cause:t,context:{url:y}})}static timeout(y,t){return new C("RPC request timed out",{code:"RPC_TIMEOUT",source:"RPC_TIMEOUT",context:{method:y,timeout:t}})}static invalidResponse(y,t){return new C("Invalid RPC response",{code:"RPC_INVALID_RESPONSE",source:"RPC_RESPONSE",context:{method:y,response:t}})}static fromJsonRpcError(y){return new C(y.message,{code:y.code,source:"RPC_RESPONSE",context:{data:y.data}})}static websocketError(y,t){return new C(y,{code:"RPC_WEBSOCKET_ERROR",source:"RPC_WEBSOCKET",cause:t})}}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,t){this.requestId++;let u={jsonrpc:"2.0",id:this.requestId,method:y,params:t};try{let v=await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});if(!v.ok)throw C.connectionFailed(this.rpcUrl,Error(`HTTP ${v.status}: ${v.statusText}`));let s=await v.json();if(s.error)throw C.fromJsonRpcError(s.error);if(s.result===void 0)throw C.invalidResponse(y,s);return s.result}catch(v){if(v instanceof C)throw v;throw C.connectionFailed(this.rpcUrl,v)}}setRpcUrl(y){this.rpcUrl=y}getRpcUrl(){return this.rpcUrl}connect(){return new Promise((y)=>{let t=this.rpcUrl.replace("http","ws");if(t.endsWith("/"))t+="ws";else t+="/ws";this.websocket=new WebSocket(t),this.websocket.onopen=()=>{console.log("WebSocket connected"),this.websocketConnected=!0,this.reconnectAttempt=0,y()},this.websocket.onmessage=(u)=>{let v=JSON.parse(u.data),{id:s,method:b,params:S}=v;if(s!==void 0&&this.pendingResponses[s])this.pendingResponses[s].resolve(v),delete this.pendingResponses[s];if(b==="eth_subscription"&&S){let{subscription:X,result:h}=S;if(this.subscriptionListeners[X])this.subscriptionListeners[X].forEach((N)=>N(h))}},this.websocket.onclose=()=>{console.warn("WebSocket closed"),this.websocketConnected=!1},this.websocket.onerror=(u)=>{console.error("WebSocket error:",u),this.websocketConnected=!1,this.scheduleReconnect()}})}scheduleReconnect(){let y=Math.min(this.initialBackoff*Math.pow(2,this.reconnectAttempt),this.maxBackoff),t=y*(Math.random()*0.5),u=y+t;console.log(`Reconnecting in ${Math.round(u)}ms (attempt #${this.reconnectAttempt+1})`),this.reconnectAttempt++,setTimeout(()=>{this.reconnect()},u)}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,t,u=5000){if(!this.websocket||this.websocket.readyState!==WebSocket.OPEN)return Promise.reject(C.connectionFailed(this.rpcUrl));let v=this.requestId++,s={jsonrpc:"2.0",method:y,params:t,id:v};return new Promise((b,S)=>{this.pendingResponses[v]={resolve:b,reject:S},this.websocket.send(JSON.stringify(s)),setTimeout(()=>{if(this.pendingResponses[v])this.pendingResponses[v].reject(C.timeout(y,u)),delete this.pendingResponses[v]},u)})}async subscribe(y){let t=y?.toLowerCase();if(!this.websocketConnected)await this.connect();let u=Iy.create(),v=JSON.stringify(t?{address:t}:{}),s=(await this.sendMessage("eth_subscribe",["circles",v])).result;if(!this.subscriptionListeners[s])this.subscriptionListeners[s]=[];return this.subscriptionListeners[s].push((b)=>{Su(b).forEach((S)=>u.emit(S))}),u.property}}var yy=BigInt(4294967295),_y=BigInt(32);function Xu(y,t=!1){if(t)return{h:Number(y&yy),l:Number(y>>_y&yy)};return{h:Number(y>>_y&yy)|0,l:Number(y&yy)|0}}function hu(y,t=!1){let u=y.length,v=new Uint32Array(u),s=new Uint32Array(u);for(let b=0;b<u;b++){let{h:S,l:X}=Xu(y[b],t);[v[b],s[b]]=[S,X]}return[v,s]}var Nu=(y,t,u)=>y<<u|t>>>32-u,Du=(y,t,u)=>t<<u|y>>>32-u,Pu=(y,t,u)=>t<<u-32|y>>>64-u,Uu=(y,t,u)=>y<<u-32|t>>>64-u;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function ju(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function dy(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function ty(y,...t){if(!ju(y))throw Error("Uint8Array expected");if(t.length>0&&!t.includes(y.length))throw Error("Uint8Array expected of length "+t+", got length="+y.length)}function ny(y,t=!0){if(y.destroyed)throw Error("Hash instance has been destroyed");if(t&&y.finished)throw Error("Hash#digest() has already been called")}function mu(y,t){ty(y);let u=t.outputLen;if(y.length<u)throw Error("digestInto() expects output buffer of length at least "+u)}function Mu(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function oy(...y){for(let t=0;t<y.length;t++)y[t].fill(0)}var ku=(()=>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 t=0;t<y.length;t++)y[t]=iu(y[t]);return y}var ey=ku?(y)=>y:Eu;function Iu(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function Zy(y){if(typeof y==="string")y=Iu(y);return ty(y),y}class qy{}function xu(y){let t=(v)=>y().update(Zy(v)).digest(),u=y();return t.outputLen=u.outputLen,t.blockLen=u.blockLen,t.create=()=>y(),t}var Au=BigInt(0),e=BigInt(1),Ku=BigInt(2),Vu=BigInt(7),Wu=BigInt(256),Cu=BigInt(113),By=[],ry=[],zy=[];for(let y=0,t=e,u=1,v=0;y<24;y++){[u,v]=[v,(2*u+3*v)%5],By.push(2*(5*v+u)),ry.push((y+1)*(y+2)/2%64);let s=Au;for(let b=0;b<7;b++)if(t=(t<<e^(t>>Vu)*Cu)%Wu,t&Ku)s^=e<<(e<<BigInt(b))-e;zy.push(s)}var Jy=hu(zy,!0),Hu=Jy[0],gu=Jy[1],$y=(y,t,u)=>u>32?Pu(y,t,u):Nu(y,t,u),Oy=(y,t,u)=>u>32?Uu(y,t,u):Du(y,t,u);function Lu(y,t=24){let u=new Uint32Array(10);for(let v=24-t;v<24;v++){for(let S=0;S<10;S++)u[S]=y[S]^y[S+10]^y[S+20]^y[S+30]^y[S+40];for(let S=0;S<10;S+=2){let X=(S+8)%10,h=(S+2)%10,N=u[h],D=u[h+1],j=$y(N,D,1)^u[X],M=Oy(N,D,1)^u[X+1];for(let P=0;P<50;P+=10)y[S+P]^=j,y[S+P+1]^=M}let s=y[2],b=y[3];for(let S=0;S<24;S++){let X=ry[S],h=$y(s,b,X),N=Oy(s,b,X),D=By[S];s=y[D],b=y[D+1],y[D]=h,y[D+1]=N}for(let S=0;S<50;S+=10){for(let X=0;X<10;X++)u[X]=y[S+X];for(let X=0;X<10;X++)y[S+X]^=~u[(X+2)%10]&u[(X+4)%10]}y[0]^=Hu[v],y[1]^=gu[v]}oy(u)}class xy extends qy{constructor(y,t,u,v=!1,s=24){super();if(this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=y,this.suffix=t,this.outputLen=u,this.enableXOF=v,this.rounds=s,dy(u),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=Mu(this.state)}clone(){return this._cloneInto()}keccak(){ey(this.state32),Lu(this.state32,this.rounds),ey(this.state32),this.posOut=0,this.pos=0}update(y){ny(this),y=Zy(y),ty(y);let{blockLen:t,state:u}=this,v=y.length;for(let s=0;s<v;){let b=Math.min(t-this.pos,v-s);for(let S=0;S<b;S++)u[this.pos++]^=y[s++];if(this.pos===t)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:t,pos:u,blockLen:v}=this;if(y[u]^=t,(t&128)!==0&&u===v-1)this.keccak();y[v-1]^=128,this.keccak()}writeInto(y){ny(this,!1),ty(y),this.finish();let t=this.state,{blockLen:u}=this;for(let v=0,s=y.length;v<s;){if(this.posOut>=u)this.keccak();let b=Math.min(u-this.posOut,s-v);y.set(t.subarray(this.posOut,this.posOut+b),v),this.posOut+=b,v+=b}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return dy(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,oy(this.state)}_cloneInto(y){let{blockLen:t,suffix:u,outputLen:v,rounds:s,enableXOF:b}=this;return y||(y=new xy(t,u,v,b,s)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=s,y.suffix=u,y.outputLen=v,y.enableXOF=b,y.destroyed=this.destroyed,y}}var fu=(y,t,u)=>xu(()=>new xy(t,y,u)),pu=(()=>fu(1,136,32))(),yt=[];for(let y=0;y<256;y++)yt[y]=y.toString(16).padStart(2,"0");function Fu(y){let t="0x";for(let u=0;u<y.length;u++)t+=yt[y[u]];return t}function Qu(y){let t=y.toLowerCase().replace("0x",""),u=Fu(pu(new TextEncoder().encode(t))).slice(2),v="0x";for(let s=0;s<t.length;s++)v+=parseInt(u[s],16)>=8?t[s].toUpperCase():t[s];return v}function U(y){return y.toLowerCase()}function Tu(y){return Qu(y)}function cu(y){if(typeof y!=="string")return!1;let t=y.replace("0x","");return t.length===40&&/^[0-9a-fA-F]{40}$/.test(t)}function E(y){if(y===null||y===void 0)return y;if(cu(y))return Tu(y);if(Array.isArray(y))return y.map((t)=>E(t));if(typeof y==="object"&&y!==null){let t={};for(let u in y)if(Object.prototype.hasOwnProperty.call(y,u))t[u]=E(y[u]);return t}return y}function wu(y){return{Source:U(y.from),Sink:U(y.to),TargetFlow:y.targetFlow.toString(),WithWrap:y.useWrappedBalances,FromTokens:y.fromTokens?.map(U),ToTokens:y.toTokens?.map(U),ExcludedFromTokens:y.excludeFromTokens?.map(U),ExcludedToTokens:y.excludeToTokens?.map(U),SimulatedBalances:y.simulatedBalances?.map((t)=>({Holder:U(t.holder),Token:U(t.token),Amount:t.amount.toString(),IsWrapped:t.isWrapped,IsStatic:t.isStatic})),SimulatedTrusts:y.simulatedTrusts?.map((t)=>({Truster:U(t.truster),Trustee:U(t.trustee)})),MaxTransfers:y.maxTransfers}}function O(y){let t={};for(let u in y){let v=y[u];if(v===null||v===void 0)t[u]=v;else if(typeof v==="string"&&/^\d+$/.test(v))t[u]=BigInt(v);else if(typeof v==="object"&&!Array.isArray(v))t[u]=O(v);else if(Array.isArray(v))t[u]=v.map((s)=>typeof s==="object"&&s!==null?O(s):s);else t[u]=v}return t}var v6=BigInt(96)*BigInt(1000000000000000000),Yu=BigInt("9999999999999999999999999999999999999");class tt{client;constructor(y){this.client=y}async findPath(y){let t=wu(y),u=await this.client.call("circlesV2_findPath",[t]),v=O(u);return E(v)}async findMaxFlow(y){let t=await this.findPath({...y,targetFlow:Yu});return BigInt(t.maxFlow)}}class ut{client;constructor(y){this.client=y}async query(y){let t=await this.client.call("circles_query",[y]);return E(t)}async tables(){return this.client.call("circles_tables",[])}async events(y,t,u=null,v=null,s=!1){let b=await this.client.call("circles_events",[y,t,u,v,s]);return E(b)}}var lu=[{name:"blockNumber",sortOrder:"DESC"},{name:"transactionIndex",sortOrder:"DESC"},{name:"logIndex",sortOrder:"DESC"}];class w{params;client;rowTransformer;cursorColumns;orderColumns;get currentPage(){return this._currentPage}_currentPage;constructor(y,t,u){this.client=y,this.params=t,this.rowTransformer=u||t.rowTransformer,this.orderColumns=t.orderColumns,this.cursorColumns=t.cursorColumns||this.buildEventCursorColumns()}buildEventCursorColumns(){let y=lu.map((t)=>({...t,sortOrder:this.params.sortOrder}));if(this.params.table==="TransferBatch")y.push({name:"batchIndex",sortOrder:this.params.sortOrder});return y}transformCursorValue(y,t){if(t)return t(y);if(typeof y==="bigint")return y.toString();return y}createEqualityPredicate(y,t){return{Type:"FilterPredicate",FilterType:"Equals",Column:y.name,Value:this.transformCursorValue(t,y.toValue)}}createComparisonPredicate(y,t){return{Type:"FilterPredicate",FilterType:y.sortOrder==="ASC"?"GreaterThan":"LessThan",Column:y.name,Value:this.transformCursorValue(t,y.toValue)}}buildCursorFilter(y){if(!y)return[];let t=[];for(let u=0;u<this.cursorColumns.length;u++){let v=this.cursorColumns[u],s=y[v.name];if(s===void 0)continue;if(u===0)t.push(this.createComparisonPredicate(v,s));else{let b=[];for(let S=0;S<u;S++){let X=this.cursorColumns[S],h=y[X.name];if(h!==void 0)b.push(this.createEqualityPredicate(X,h))}b.push(this.createComparisonPredicate(v,s)),t.push({Type:"Conjunction",ConjunctionType:"And",Predicates:b})}}if(t.length===0)return[];return[{Type:"Conjunction",ConjunctionType:"Or",Predicates:t}]}buildOrderBy(){if(this.orderColumns&&this.orderColumns.length>0)return this.orderColumns;return this.cursorColumns.map((y)=>({Column:y.name,SortOrder:y.sortOrder}))}combineFilters(y,t){if(!y?.length&&!t?.length)return[];if(!y?.length)return t||[];if(!t?.length)return y;return[{Type:"Conjunction",ConjunctionType:"And",Predicates:[...y,...t]}]}rowsToObjects(y){let{columns:t,rows:u}=y;return u.map((v)=>{let s={};return t.forEach((b,S)=>{s[b]=v[S]}),this.rowTransformer?this.rowTransformer(s):s})}rowToCursor(y){let t={};for(let u of this.cursorColumns)t[u.name]=y[u.name];return t}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),t=this.combineFilters(this.params.filter,y),u={Namespace:this.params.namespace,Table:this.params.table,Columns:this.params.columns,Filter:t,Order:this.buildOrderBy(),Limit:this.params.limit},v=await this.client.call("circles_query",[u]),s=this.rowsToObjects(v),b=this.getCursors(s);return this._currentPage={limit:this.params.limit,size:s.length,firstCursor:b.first,lastCursor:b.last,sortOrder:this.params.sortOrder,hasMore:s.length===this.params.limit,results:s},s.length>0}reset(){this._currentPage=void 0}}class vt{client;constructor(y){this.client=y}transformQueryResponse(y){let{columns:t,rows:u}=y;return u.map((v)=>{let s={};return t.forEach((b,S)=>{s[b]=v[S]}),s})}async getCommonTrust(y,t){let u=await this.client.call("circles_getCommonTrust",[U(y),U(t)]);return E(u)}getTrustRelations(y,t=100,u="DESC"){let v=U(y),s=[{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:v},{Type:"FilterPredicate",FilterType:"Equals",Column:"truster",Value:v}]}]}];return new w(this.client,{namespace:"V_Crc",table:"TrustRelations",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","version","trustee","truster","expiryTime"],filter:s,limit:t},(b)=>E(b))}async getAggregatedTrustRelations(y){let t=U(y),u=this.getTrustRelations(t,1000),v=[];while(await u.queryNextPage())if(v.push(...u.currentPage.results),!u.currentPage.hasMore)break;let s={};v.forEach((S)=>{let X=U(S.truster),h=U(S.trustee),N=X!==t?S.truster:S.trustee;if(!s[N])s[N]=[];s[N].push(S)});let b=Object.entries(s).filter(([S])=>U(S)!==t).map(([S,X])=>{let h=Math.max(...X.map((D)=>D.timestamp)),N;if(X.length===2)N="mutuallyTrusts";else if(U(X[0]?.trustee)===t)N="trustedBy";else if(U(X[0]?.truster)===t)N="trusts";else throw Error("Unexpected trust list row. Couldn't determine trust relation.");return{subjectAvatar:t,relation:N,objectAvatar:S,timestamp:h}});return E(b)}async getTrustedBy(y){let t=U(y),u=(await this.getAggregatedTrustRelations(t)).filter((v)=>v.relation==="trustedBy");return E(u)}async getTrusts(y){let t=U(y),u=(await this.getAggregatedTrustRelations(t)).filter((v)=>v.relation==="trusts");return E(u)}async getMutualTrusts(y){let t=U(y),u=(await this.getAggregatedTrustRelations(t)).filter((v)=>v.relation==="mutuallyTrusts");return E(u)}}class l{static ONE_64=1n<<64n;static GAMMA_64=18443079296116538654n;static BETA_64=18450409579521241655n;static SECONDS_PER_DAY=86400n;static INFLATION_DAY_ZERO_UNIX=1602720000n;static ATTO_FACTOR=1000000000000000000n;static FACTOR_1E12=1000000000000n;static V1_ACCURACY=100000000n;static V1_INFLATION_PCT_NUM=107n;static V1_INFLATION_PCT_DEN=100n;static PERIOD_SEC=31556952n;static mul64(y,t){return y*t>>64n}static mulU(y,t){return y*t>>64n}static pow64(y,t){let u=y,v=t,s=this.ONE_64;while(v>0n){if((v&1n)===1n)s=this.mul64(s,u);u=this.mul64(u,u),v>>=1n}return s}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,t){return y*t/this.ONE_36}static pow36(y,t){let u=this.ONE_36,v=y,s=t;while(s>0n){if((s&1n)===1n)u=this.mul36(u,v);v=this.mul36(v,v),s>>=1n}return u}static attoCirclesToCircles(y){if(y===0n)return 0;let t=y/this.ATTO_FACTOR,u=y%this.ATTO_FACTOR,v=BigInt(Number.MAX_SAFE_INTEGER);if(t>v||t<-v)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(t)+Number(u)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,t){return this.mulU(this.pow64(this.GAMMA_64,t),y)}static demurrageToInflationary(y,t){return this.mulU(this.pow64(this.BETA_64,t),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(t))}static attoStaticCirclesToAttoCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(t))}static inflationaryToDemurrageExact(y,t){let u=this.pow36(this.GAMMA_36,t);return y*u/this.ONE_36}static demurrageToInflationaryExact(y,t){let u=this.pow36(this.BETA_36,t);return y*u/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.demurrageToInflationaryExact(y,u)}static attoStaticCirclesToAttoCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.inflationaryToDemurrageExact(y,u)}static truncateToInt64(y){let t=y/this.FACTOR_1E12,u=9223372036854775807n;return t>u?u:t}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,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,v=u/this.PERIOD_SEC,s=u%this.PERIOD_SEC,b=this.v1InflateFactor(v),S=this.v1InflateFactor(v+1n);return this.v1ToDemurrage(y,b,S,s,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,v=u/this.PERIOD_SEC,s=u%this.PERIOD_SEC,b=this.v1InflateFactor(v),S=this.v1InflateFactor(v+1n),X=b*(this.PERIOD_SEC-s)+S*s;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/X}static v1ToDemurrage(y,t,u,v,s){let b=t*(s-v)+u*v;return y*3n*this.V1_ACCURACY*s/b}}class st{client;constructor(y){this.client=y}async getTotalBalance(y,t=!0){let u=await this.client.call("circlesV2_getTotalBalance",[U(y),t]);return l.circlesToAttoCircles(u)}async getTokenBalances(y){let t=(await this.client.call("circles_getTokenBalances",[U(y)])).map((u)=>O(u));return E(t)}}class bt{client;constructor(y){this.client=y}async getAvatarInfo(y){let t=await this.getAvatarInfoBatch([y]);return t.length>0?t[0]:void 0}async getAvatarInfoBatch(y){if(y.length===0)return[];let t=y.map((v)=>U(v)),u=await this.client.call("circles_getAvatarInfoBatch",[t]);return E(u)}async getNetworkSnapshot(){let y=await this.client.call("circles_getNetworkSnapshot",[]);return E(y)}}class St{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",[U(y)])}async getProfileByAddressBatch(y){return this.client.call("circles_getProfileByAddressBatch",[y.map((t)=>t===null?null:U(t))])}async searchProfiles(y,t=10,u=0,v){return this.client.call("circles_searchProfiles",[y.toLowerCase(),t,u,v])}async searchByAddressOrName(y,t=10,u=0,v){let s=[],b=/^0x[a-fA-F0-9]{40}$/.test(y);if(b)try{let S=await this.getProfileByAddress(y);if(S){let X={...S,address:y};if(!v||!X.avatarType||v.includes(X.avatarType))s.push(X)}}catch(S){console.warn("Failed to get profile by address:",S)}try{let S=await this.searchProfiles(y,t,u,v);if(b&&s.length>0){let X=y.toLowerCase(),h=S.filter((N)=>N.address?.toLowerCase()!==X);s.push(...h)}else s.push(...S)}catch(S){console.warn("Failed to search profiles by text:",S)}return s.slice(0,t)}}class Xt{client;constructor(y){this.client=y}async getTokenInfo(y){let t=await this.getTokenInfoBatch([y]);return t.length>0?t[0]:void 0}async getTokenInfoBatch(y){if(y.length===0)return[];let t=y.map((v)=>U(v)),u=(await this.client.call("circles_getTokenInfoBatch",[t])).map((v)=>O(v));return E(u)}getTokenHolders(y,t=100,u="DESC"){let v=U(y);return new w(this.client,{namespace:"V_CrcV2",table:"BalancesByAccountAndToken",columns:["account","tokenAddress","demurragedTotalBalance"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"tokenAddress",Value:v}],cursorColumns:[{name:"demurragedTotalBalance",sortOrder:u},{name:"account",sortOrder:"ASC"}],orderColumns:[{Column:"demurragedTotalBalance",SortOrder:u},{Column:"account",SortOrder:"ASC"}],limit:t,sortOrder:u},(s)=>({account:s.account,tokenAddress:s.tokenAddress,demurragedTotalBalance:s.demurragedTotalBalance}))}}class ht{client;constructor(y){this.client=y}transformQueryResponse(y){let{columns:t,rows:u}=y;return u.map((v)=>{let s={};return t.forEach((b,S)=>{s[b]=v[S]}),s})}async getInvitedBy(y){let t=U(y),u=await this.client.call("circles_query",[{Namespace:"CrcV2",Table:"RegisterHuman",Columns:["inviter"],Filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"avatar",Value:t}],Order:[{Column:"blockNumber",SortOrder:"DESC"}],Limit:1}]);if(u.length>0)return E(u[0].inviter);return}async getInvitations(y){let t=U(y),u=96,v=await this.client.call("circles_getAvatarInfoBatch",[[t]]);if((v.length>0?v[0]:void 0)?.version===2)return[];let s=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:t}]}],Order:[]}]),b=this.transformQueryResponse(s).map((h)=>h.truster);if(b.length===0)return[];let S=await this.client.call("circles_getAvatarInfoBatch",[b]),X=[];for(let h of S){if(!h?.isHuman)continue;let N=(await this.client.call("circles_getTokenBalances",[h.avatar])).find((D)=>U(D.tokenAddress)===U(h.avatar));if(N&&N.circles>=96)X.push(h)}return E(X)}async getInvitationsFrom(y,t=!1){let u=U(y);if(t){let v=await this.client.call("circles_query",[{Namespace:"CrcV2",Table:"RegisterHuman",Columns:["avatar"],Filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"inviter",Value:u}],Order:[{Column:"blockNumber",SortOrder:"DESC"}]}]),s=this.transformQueryResponse(v).map((b)=>b.avatar);return E(s)}else{let v=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:u}]}],Order:[]}]),s=this.transformQueryResponse(v).map((h)=>h.trustee);if(s.length===0)return[];let b=await this.client.call("circles_getAvatarInfoBatch",[s]),S=new Set(b.filter((h)=>h!==null).map((h)=>U(h.avatar))),X=s.filter((h)=>!S.has(U(h)));return E(X)}}}function _u(y,t){let u=BigInt(y),v=l.attoCirclesToCircles(u),s=l.attoCirclesToAttoCrc(u,BigInt(t)),b=l.attoCirclesToCircles(s),S=l.attoCirclesToAttoStaticCircles(u,BigInt(t)),X=l.attoCirclesToCircles(S);return{attoCircles:u,circles:v,staticAttoCircles:S,staticCircles:X,attoCrc:s,crc:b}}class Nt{client;constructor(y){this.client=y}getTransactionHistory(y,t=50,u="DESC"){let v=U(y),s=[{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:v},{Type:"FilterPredicate",FilterType:"Equals",Column:"to",Value:v}]}]}];return new w(this.client,{namespace:"V_Crc",table:"TransferSummary",sortOrder:u,columns:[],filter:s,limit:t},(b)=>{let S=_u(b.value,b.timestamp),X={...b,...S};return E(X)})}}class Dt{client;constructor(y){this.client=y}async findGroups(y=50,t){let u=this.getGroups(y,t,"DESC"),v=[];while(await u.queryNextPage()){if(v.push(...u.currentPage.results),v.length>=y)break;if(!u.currentPage.hasMore)break}return v.slice(0,y)}getGroupMemberships(y,t=50,u="DESC"){let v=U(y);return new w(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"member",Value:v}],limit:t},(s)=>E(s))}getGroupHolders(y,t=100){let u=U(y);return new w(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:u}],limit:t,rowTransformer:(v)=>{let s={...v,totalBalance:BigInt(v.totalBalance),demurragedTotalBalance:BigInt(v.demurragedTotalBalance)};return E(s)}})}getGroupMembers(y,t=100,u="DESC"){let v=U(y);return new w(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:v}],limit:t},(s)=>E(s))}getGroups(y=50,t,u="DESC"){let v=[];if(t){if(t.nameStartsWith)v.push({Type:"FilterPredicate",FilterType:"Like",Column:"name",Value:t.nameStartsWith+"%"});if(t.symbolStartsWith)v.push({Type:"FilterPredicate",FilterType:"Like",Column:"symbol",Value:t.symbolStartsWith+"%"});if(t.groupAddressIn&&t.groupAddressIn.length>0){let b=t.groupAddressIn.map((S)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:U(S)}));if(b.length===1)v.push(b[0]);else v.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:b})}if(t.groupTypeIn&&t.groupTypeIn.length>0){let b=t.groupTypeIn.map((S)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"type",Value:S}));if(b.length===1)v.push(b[0]);else v.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:b})}if(t.ownerIn&&t.ownerIn.length>0){let b=t.ownerIn.map((S)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"owner",Value:U(S)}));if(b.length===1)v.push(b[0]);else v.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:b})}if(t.mintHandlerEquals)v.push({Type:"FilterPredicate",FilterType:"Equals",Column:"mintHandler",Value:U(t.mintHandlerEquals)});if(t.treasuryEquals)v.push({Type:"FilterPredicate",FilterType:"Equals",Column:"treasury",Value:U(t.treasuryEquals)})}let s=v.length>1?[{Type:"Conjunction",ConjunctionType:"And",Predicates:v}]:v;return new w(this.client,{namespace:"V_CrcV2",table:"Groups",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","type","owner","mintPolicy","mintHandler","treasury","service","feeCollection","memberCount","name","symbol","cidV0Digest","erc20WrapperDemurraged","erc20WrapperStatic"],filter:s,limit:y},(b)=>E(b))}}class Pt{client;_pathfinder;_query;_trust;_balance;_avatar;_profile;_token;_invitation;_transaction;_group;constructor(y="https://rpc.circlesubi.network/"){this.client=new Gy(y)}get pathfinder(){if(!this._pathfinder)this._pathfinder=new tt(this.client);return this._pathfinder}get query(){if(!this._query)this._query=new ut(this.client);return this._query}get trust(){if(!this._trust)this._trust=new vt(this.client);return this._trust}get balance(){if(!this._balance)this._balance=new st(this.client);return this._balance}get avatar(){if(!this._avatar)this._avatar=new bt(this.client);return this._avatar}get profile(){if(!this._profile)this._profile=new St(this.client);return this._profile}get token(){if(!this._token)this._token=new Xt(this.client);return this._token}get invitation(){if(!this._invitation)this._invitation=new ht(this.client);return this._invitation}get transaction(){if(!this._transaction)this._transaction=new Nt(this.client);return this._transaction}get group(){if(!this._group)this._group=new Dt(this.client);return this._group}setRpcUrl(y){this.client.setRpcUrl(y)}getRpcUrl(){return this.client.getRpcUrl()}}class du{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,t){return y*t>>64n}static mulU(y,t){return y*t>>64n}static pow64(y,t){let u=y,v=t,s=this.ONE_64;while(v>0n){if((v&1n)===1n)s=this.mul64(s,u);u=this.mul64(u,u),v>>=1n}return s}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,t){return y*t/this.ONE_36}static pow36(y,t){let u=this.ONE_36,v=y,s=t;while(s>0n){if((s&1n)===1n)u=this.mul36(u,v);v=this.mul36(v,v),s>>=1n}return u}static attoCirclesToCircles(y){if(y===0n)return 0;let t=y/this.ATTO_FACTOR,u=y%this.ATTO_FACTOR,v=BigInt(Number.MAX_SAFE_INTEGER);if(t>v||t<-v)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(t)+Number(u)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,t){return this.mulU(this.pow64(this.GAMMA_64,t),y)}static demurrageToInflationary(y,t){return this.mulU(this.pow64(this.BETA_64,t),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(t))}static attoStaticCirclesToAttoCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(t))}static inflationaryToDemurrageExact(y,t){let u=this.pow36(this.GAMMA_36,t);return y*u/this.ONE_36}static demurrageToInflationaryExact(y,t){let u=this.pow36(this.BETA_36,t);return y*u/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.demurrageToInflationaryExact(y,u)}static attoStaticCirclesToAttoCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.inflationaryToDemurrageExact(y,u)}static truncateToInt64(y){let t=y/this.FACTOR_1E12,u=9223372036854775807n;return t>u?u:t}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,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,v=u/this.PERIOD_SEC,s=u%this.PERIOD_SEC,b=this.v1InflateFactor(v),S=this.v1InflateFactor(v+1n);return this.v1ToDemurrage(y,b,S,s,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,v=u/this.PERIOD_SEC,s=u%this.PERIOD_SEC,b=this.v1InflateFactor(v),S=this.v1InflateFactor(v+1n),X=b*(this.PERIOD_SEC-s)+S*s;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/X}static v1ToDemurrage(y,t,u,v,s){let b=t*(s-v)+u*v;return y*3n*this.V1_ACCURACY*s/b}}async function Ay(y,t,u){let v=new Map,s=new Set;return u.transfers.forEach((b)=>{if(y.toLowerCase()===b.from.toLowerCase())s.add(b.tokenOwner.toLowerCase())}),(await new Pt(t).token.getTokenInfoBatch(Array.from(s))).forEach((b)=>{if(b.isWrapped&&!b.isInflationary)b.tokenType="CrcV2_ERC20WrapperDeployed_Demurraged";v.set(b.tokenAddress.toLowerCase(),b)}),v}function Ky(y,t){let u={};return y.transfers.forEach((v)=>{let s=t.get(v.tokenOwner.toLowerCase());if(s&&s.tokenType.startsWith("CrcV2_ERC20WrapperDeployed")){if(!u[v.tokenOwner])u[v.tokenOwner]=[BigInt(0),s.tokenType];u[v.tokenOwner][0]+=BigInt(v.value)}}),u}function Vy(y,t){let u=y.transfers.map((v)=>{let s=t.get(v.tokenOwner.toLowerCase());if(s&&s.tokenType.startsWith("CrcV2_ERC20WrapperDeployed"))return{...v,tokenOwner:s.tokenOwner};return v});return{...y,transfers:u}}var Ut=(y)=>BigInt(y),a=(y)=>parseInt(y,16),nu=(y)=>{if(y.startsWith("0x"))y=y.slice(2);if(y.length%2!==0)throw Error("Invalid hex string");let t=new Uint8Array(y.length/2);for(let u=0;u<y.length;u+=2)t[u/2]=parseInt(y.substr(u,2),16);return t};function eu(y,t){if(typeof t==="string"&&t.startsWith("0x")){let u=t.slice(2);if(u.length===40)return t;if(u.length===64){if(y.toLowerCase().includes("digest")||y.toLowerCase().includes("data")||y.toLowerCase().includes("bytes"))return nu(t);try{return Ut(t)}catch{return t}}try{let v=a(t);if(v<Number.MAX_SAFE_INTEGER)return v;return Ut(t)}catch{return t}}if(t==="true")return!0;if(t==="false")return!1;return t}function $u(y){let{event:t,values:u}=y,v={$event:t,blockNumber:u.blockNumber?a(u.blockNumber):0,timestamp:u.timestamp?a(u.timestamp):void 0,transactionIndex:u.transactionIndex?a(u.transactionIndex):0,logIndex:u.logIndex?a(u.logIndex):0,transactionHash:u.transactionHash};for(let[s,b]of Object.entries(u)){if(["blockNumber","timestamp","transactionIndex","logIndex","transactionHash"].includes(s))continue;v[s]=eu(s,b)}return v}function Ou(y){return y.map($u)}class Wy{_subscribers=[];subscribe(y){return this._subscribers.push(y),()=>{let t=this._subscribers.indexOf(y);if(t>-1)this._subscribers.splice(t,1)}}constructor(){this._subscribers=[]}emit(y){this._subscribers.forEach((t)=>t(y))}static create(){let y=new Wy;return{property:y,emit:(t)=>y.emit(t)}}}class It extends Error{name;code;source;cause;context;constructor(y,t,u){super(t);if(this.name=y,this.code=u?.code,this.source=u?.source??"UNKNOWN",this.cause=u?.cause,this.context=u?.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 It{constructor(y,t){super("RpcError",y,{...t,source:t?.source??"RPC_REQUEST"})}static connectionFailed(y,t){return new H("Failed to connect to RPC endpoint",{code:"RPC_CONNECTION_FAILED",source:"RPC_CONNECTION",cause:t,context:{url:y}})}static timeout(y,t){return new H("RPC request timed out",{code:"RPC_TIMEOUT",source:"RPC_TIMEOUT",context:{method:y,timeout:t}})}static invalidResponse(y,t){return new H("Invalid RPC response",{code:"RPC_INVALID_RESPONSE",source:"RPC_RESPONSE",context:{method:y,response:t}})}static fromJsonRpcError(y){return new H(y.message,{code:y.code,source:"RPC_RESPONSE",context:{data:y.data}})}static websocketError(y,t){return new H(y,{code:"RPC_WEBSOCKET_ERROR",source:"RPC_WEBSOCKET",cause:t})}}class Cy{rpcUrl;requestId=0;websocket=null;websocketConnected=!1;pendingResponses={};subscriptionListeners={};reconnectAttempt=0;initialBackoff=2000;maxBackoff=120000;constructor(y){this.rpcUrl=y}async call(y,t){this.requestId++;let u={jsonrpc:"2.0",id:this.requestId,method:y,params:t};try{let v=await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});if(!v.ok)throw H.connectionFailed(this.rpcUrl,Error(`HTTP ${v.status}: ${v.statusText}`));let s=await v.json();if(s.error)throw H.fromJsonRpcError(s.error);if(s.result===void 0)throw H.invalidResponse(y,s);return s.result}catch(v){if(v instanceof H)throw v;throw H.connectionFailed(this.rpcUrl,v)}}setRpcUrl(y){this.rpcUrl=y}getRpcUrl(){return this.rpcUrl}connect(){return new Promise((y)=>{let t=this.rpcUrl.replace("http","ws");if(t.endsWith("/"))t+="ws";else t+="/ws";this.websocket=new WebSocket(t),this.websocket.onopen=()=>{console.log("WebSocket connected"),this.websocketConnected=!0,this.reconnectAttempt=0,y()},this.websocket.onmessage=(u)=>{let v=JSON.parse(u.data),{id:s,method:b,params:S}=v;if(s!==void 0&&this.pendingResponses[s])this.pendingResponses[s].resolve(v),delete this.pendingResponses[s];if(b==="eth_subscription"&&S){let{subscription:X,result:h}=S;if(this.subscriptionListeners[X])this.subscriptionListeners[X].forEach((N)=>N(h))}},this.websocket.onclose=()=>{console.warn("WebSocket closed"),this.websocketConnected=!1},this.websocket.onerror=(u)=>{console.error("WebSocket error:",u),this.websocketConnected=!1,this.scheduleReconnect()}})}scheduleReconnect(){let y=Math.min(this.initialBackoff*Math.pow(2,this.reconnectAttempt),this.maxBackoff),t=y*(Math.random()*0.5),u=y+t;console.log(`Reconnecting in ${Math.round(u)}ms (attempt #${this.reconnectAttempt+1})`),this.reconnectAttempt++,setTimeout(()=>{this.reconnect()},u)}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,t,u=5000){if(!this.websocket||this.websocket.readyState!==WebSocket.OPEN)return Promise.reject(H.connectionFailed(this.rpcUrl));let v=this.requestId++,s={jsonrpc:"2.0",method:y,params:t,id:v};return new Promise((b,S)=>{this.pendingResponses[v]={resolve:b,reject:S},this.websocket.send(JSON.stringify(s)),setTimeout(()=>{if(this.pendingResponses[v])this.pendingResponses[v].reject(H.timeout(y,u)),delete this.pendingResponses[v]},u)})}async subscribe(y){let t=y?.toLowerCase();if(!this.websocketConnected)await this.connect();let u=Wy.create(),v=JSON.stringify(t?{address:t}:{}),s=(await this.sendMessage("eth_subscribe",["circles",v])).result;if(!this.subscriptionListeners[s])this.subscriptionListeners[s]=[];return this.subscriptionListeners[s].push((b)=>{Ou(b).forEach((S)=>u.emit(S))}),u.property}}var uy=BigInt(4294967295),jt=BigInt(32);function Ru(y,t=!1){if(t)return{h:Number(y&uy),l:Number(y>>jt&uy)};return{h:Number(y>>jt&uy)|0,l:Number(y&uy)|0}}function au(y,t=!1){let u=y.length,v=new Uint32Array(u),s=new Uint32Array(u);for(let b=0;b<u;b++){let{h:S,l:X}=Ru(y[b],t);[v[b],s[b]]=[S,X]}return[v,s]}var Gu=(y,t,u)=>y<<u|t>>>32-u,ou=(y,t,u)=>t<<u|y>>>32-u,Zu=(y,t,u)=>t<<u-32|y>>>64-u,qu=(y,t,u)=>y<<u-32|t>>>64-u;/*! 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 mt(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function vy(y,...t){if(!Bu(y))throw Error("Uint8Array expected");if(t.length>0&&!t.includes(y.length))throw Error("Uint8Array expected of length "+t+", got length="+y.length)}function Mt(y,t=!0){if(y.destroyed)throw Error("Hash instance has been destroyed");if(t&&y.finished)throw Error("Hash#digest() has already been called")}function ru(y,t){vy(y);let u=t.outputLen;if(y.length<u)throw Error("digestInto() expects output buffer of length at least "+u)}function zu(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function xt(...y){for(let t=0;t<y.length;t++)y[t].fill(0)}var Ju=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function y0(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function t0(y){for(let t=0;t<y.length;t++)y[t]=y0(y[t]);return y}var kt=Ju?(y)=>y:t0;function u0(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function At(y){if(typeof y==="string")y=u0(y);return vy(y),y}class Kt{}function v0(y){let t=(v)=>y().update(At(v)).digest(),u=y();return t.outputLen=u.outputLen,t.blockLen=u.blockLen,t.create=()=>y(),t}var s0=BigInt(0),R=BigInt(1),b0=BigInt(2),S0=BigInt(7),X0=BigInt(256),h0=BigInt(113),Vt=[],Wt=[],Ct=[];for(let y=0,t=R,u=1,v=0;y<24;y++){[u,v]=[v,(2*u+3*v)%5],Vt.push(2*(5*v+u)),Wt.push((y+1)*(y+2)/2%64);let s=s0;for(let b=0;b<7;b++)if(t=(t<<R^(t>>S0)*h0)%X0,t&b0)s^=R<<(R<<BigInt(b))-R;Ct.push(s)}var Ht=au(Ct,!0),N0=Ht[0],D0=Ht[1],it=(y,t,u)=>u>32?Zu(y,t,u):Gu(y,t,u),Et=(y,t,u)=>u>32?qu(y,t,u):ou(y,t,u);function P0(y,t=24){let u=new Uint32Array(10);for(let v=24-t;v<24;v++){for(let S=0;S<10;S++)u[S]=y[S]^y[S+10]^y[S+20]^y[S+30]^y[S+40];for(let S=0;S<10;S+=2){let X=(S+8)%10,h=(S+2)%10,N=u[h],D=u[h+1],j=it(N,D,1)^u[X],M=Et(N,D,1)^u[X+1];for(let P=0;P<50;P+=10)y[S+P]^=j,y[S+P+1]^=M}let s=y[2],b=y[3];for(let S=0;S<24;S++){let X=Wt[S],h=it(s,b,X),N=Et(s,b,X),D=Vt[S];s=y[D],b=y[D+1],y[D]=h,y[D+1]=N}for(let S=0;S<50;S+=10){for(let X=0;X<10;X++)u[X]=y[S+X];for(let X=0;X<10;X++)y[S+X]^=~u[(X+2)%10]&u[(X+4)%10]}y[0]^=N0[v],y[1]^=D0[v]}xt(u)}class Hy extends Kt{constructor(y,t,u,v=!1,s=24){super();if(this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=y,this.suffix=t,this.outputLen=u,this.enableXOF=v,this.rounds=s,mt(u),!(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(){kt(this.state32),P0(this.state32,this.rounds),kt(this.state32),this.posOut=0,this.pos=0}update(y){Mt(this),y=At(y),vy(y);let{blockLen:t,state:u}=this,v=y.length;for(let s=0;s<v;){let b=Math.min(t-this.pos,v-s);for(let S=0;S<b;S++)u[this.pos++]^=y[s++];if(this.pos===t)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:t,pos:u,blockLen:v}=this;if(y[u]^=t,(t&128)!==0&&u===v-1)this.keccak();y[v-1]^=128,this.keccak()}writeInto(y){Mt(this,!1),vy(y),this.finish();let t=this.state,{blockLen:u}=this;for(let v=0,s=y.length;v<s;){if(this.posOut>=u)this.keccak();let b=Math.min(u-this.posOut,s-v);y.set(t.subarray(this.posOut,this.posOut+b),v),this.posOut+=b,v+=b}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return mt(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,xt(this.state)}_cloneInto(y){let{blockLen:t,suffix:u,outputLen:v,rounds:s,enableXOF:b}=this;return y||(y=new Hy(t,u,v,b,s)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=s,y.suffix=u,y.outputLen=v,y.enableXOF=b,y.destroyed=this.destroyed,y}}var U0=(y,t,u)=>v0(()=>new Hy(t,y,u)),j0=(()=>U0(1,136,32))(),gt=[];for(let y=0;y<256;y++)gt[y]=y.toString(16).padStart(2,"0");function m0(y){let t="0x";for(let u=0;u<y.length;u++)t+=gt[y[u]];return t}function M0(y){let t=y.toLowerCase().replace("0x",""),u=m0(j0(new TextEncoder().encode(t))).slice(2),v="0x";for(let s=0;s<t.length;s++)v+=parseInt(u[s],16)>=8?t[s].toUpperCase():t[s];return v}function A(y){return y.toLowerCase()}function k0(y){return M0(y)}function i0(y){if(typeof y!=="string")return!1;let t=y.replace("0x","");return t.length===40&&/^[0-9a-fA-F]{40}$/.test(t)}function Y(y){if(y===null||y===void 0)return y;if(i0(y))return k0(y);if(Array.isArray(y))return y.map((t)=>Y(t));if(typeof y==="object"&&y!==null){let t={};for(let u in y)if(Object.prototype.hasOwnProperty.call(y,u))t[u]=Y(y[u]);return t}return y}function E0(y){return{Source:A(y.from),Sink:A(y.to),TargetFlow:y.targetFlow.toString(),WithWrap:y.useWrappedBalances,FromTokens:y.fromTokens?.map(A),ToTokens:y.toTokens?.map(A),ExcludedFromTokens:y.excludeFromTokens?.map(A),ExcludedToTokens:y.excludeToTokens?.map(A),SimulatedBalances:y.simulatedBalances?.map((t)=>({Holder:A(t.holder),Token:A(t.token),Amount:t.amount.toString(),IsWrapped:t.isWrapped,IsStatic:t.isStatic})),SimulatedTrusts:y.simulatedTrusts?.map((t)=>({Truster:A(t.truster),Trustee:A(t.trustee)})),MaxTransfers:y.maxTransfers}}function sy(y){let t={};for(let u in y){let v=y[u];if(v===null||v===void 0)t[u]=v;else if(typeof v==="string"&&/^\d+$/.test(v))t[u]=BigInt(v);else if(typeof v==="object"&&!Array.isArray(v))t[u]=sy(v);else if(Array.isArray(v))t[u]=v.map((s)=>typeof s==="object"&&s!==null?sy(s):s);else t[u]=v}return t}var b6=BigInt(96)*BigInt(1000000000000000000),I0=BigInt("9999999999999999999999999999999999999");class gy{client;constructor(y){this.client=y}async findPath(y){let t=E0(y),u=await this.client.call("circlesV2_findPath",[t]),v=sy(u);return Y(v)}async findMaxFlow(y){let t=await this.findPath({...y,targetFlow:I0});return BigInt(t.maxFlow)}}var x0=[{name:"blockNumber",sortOrder:"DESC"},{name:"transactionIndex",sortOrder:"DESC"},{name:"logIndex",sortOrder:"DESC"}];class G{params;client;rowTransformer;cursorColumns;orderColumns;get currentPage(){return this._currentPage}_currentPage;constructor(y,t,u){this.client=y,this.params=t,this.rowTransformer=u||t.rowTransformer,this.orderColumns=t.orderColumns,this.cursorColumns=t.cursorColumns||this.buildEventCursorColumns()}buildEventCursorColumns(){let y=x0.map((t)=>({...t,sortOrder:this.params.sortOrder}));if(this.params.table==="TransferBatch")y.push({name:"batchIndex",sortOrder:this.params.sortOrder});return y}transformCursorValue(y,t){if(t)return t(y);if(typeof y==="bigint")return y.toString();return y}createEqualityPredicate(y,t){return{Type:"FilterPredicate",FilterType:"Equals",Column:y.name,Value:this.transformCursorValue(t,y.toValue)}}createComparisonPredicate(y,t){return{Type:"FilterPredicate",FilterType:y.sortOrder==="ASC"?"GreaterThan":"LessThan",Column:y.name,Value:this.transformCursorValue(t,y.toValue)}}buildCursorFilter(y){if(!y)return[];let t=[];for(let u=0;u<this.cursorColumns.length;u++){let v=this.cursorColumns[u],s=y[v.name];if(s===void 0)continue;if(u===0)t.push(this.createComparisonPredicate(v,s));else{let b=[];for(let S=0;S<u;S++){let X=this.cursorColumns[S],h=y[X.name];if(h!==void 0)b.push(this.createEqualityPredicate(X,h))}b.push(this.createComparisonPredicate(v,s)),t.push({Type:"Conjunction",ConjunctionType:"And",Predicates:b})}}if(t.length===0)return[];return[{Type:"Conjunction",ConjunctionType:"Or",Predicates:t}]}buildOrderBy(){if(this.orderColumns&&this.orderColumns.length>0)return this.orderColumns;return this.cursorColumns.map((y)=>({Column:y.name,SortOrder:y.sortOrder}))}combineFilters(y,t){if(!y?.length&&!t?.length)return[];if(!y?.length)return t||[];if(!t?.length)return y;return[{Type:"Conjunction",ConjunctionType:"And",Predicates:[...y,...t]}]}rowsToObjects(y){let{columns:t,rows:u}=y;return u.map((v)=>{let s={};return t.forEach((b,S)=>{s[b]=v[S]}),this.rowTransformer?this.rowTransformer(s):s})}rowToCursor(y){let t={};for(let u of this.cursorColumns)t[u.name]=y[u.name];return t}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),t=this.combineFilters(this.params.filter,y),u={Namespace:this.params.namespace,Table:this.params.table,Columns:this.params.columns,Filter:t,Order:this.buildOrderBy(),Limit:this.params.limit},v=await this.client.call("circles_query",[u]),s=this.rowsToObjects(v),b=this.getCursors(s);return this._currentPage={limit:this.params.limit,size:s.length,firstCursor:b.first,lastCursor:b.last,sortOrder:this.params.sortOrder,hasMore:s.length===this.params.limit,results:s},s.length>0}reset(){this._currentPage=void 0}}class Lt{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,t){return y*t>>64n}static mulU(y,t){return y*t>>64n}static pow64(y,t){let u=y,v=t,s=this.ONE_64;while(v>0n){if((v&1n)===1n)s=this.mul64(s,u);u=this.mul64(u,u),v>>=1n}return s}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,t){return y*t/this.ONE_36}static pow36(y,t){let u=this.ONE_36,v=y,s=t;while(s>0n){if((s&1n)===1n)u=this.mul36(u,v);v=this.mul36(v,v),s>>=1n}return u}static attoCirclesToCircles(y){if(y===0n)return 0;let t=y/this.ATTO_FACTOR,u=y%this.ATTO_FACTOR,v=BigInt(Number.MAX_SAFE_INTEGER);if(t>v||t<-v)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(t)+Number(u)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,t){return this.mulU(this.pow64(this.GAMMA_64,t),y)}static demurrageToInflationary(y,t){return this.mulU(this.pow64(this.BETA_64,t),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(t))}static attoStaticCirclesToAttoCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(t))}static inflationaryToDemurrageExact(y,t){let u=this.pow36(this.GAMMA_36,t);return y*u/this.ONE_36}static demurrageToInflationaryExact(y,t){let u=this.pow36(this.BETA_36,t);return y*u/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.demurrageToInflationaryExact(y,u)}static attoStaticCirclesToAttoCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.inflationaryToDemurrageExact(y,u)}static truncateToInt64(y){let t=y/this.FACTOR_1E12,u=9223372036854775807n;return t>u?u:t}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,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,v=u/this.PERIOD_SEC,s=u%this.PERIOD_SEC,b=this.v1InflateFactor(v),S=this.v1InflateFactor(v+1n);return this.v1ToDemurrage(y,b,S,s,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,v=u/this.PERIOD_SEC,s=u%this.PERIOD_SEC,b=this.v1InflateFactor(v),S=this.v1InflateFactor(v+1n),X=b*(this.PERIOD_SEC-s)+S*s;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/X}static v1ToDemurrage(y,t,u,v,s){let b=t*(s-v)+u*v;return y*3n*this.V1_ACCURACY*s/b}}class Ly{client;constructor(y){this.client=y}async getTotalBalance(y,t=!0){let u=await this.client.call("circlesV2_getTotalBalance",[A(y),t]);return Lt.circlesToAttoCircles(u)}async getTokenBalances(y){let t=(await this.client.call("circles_getTokenBalances",[A(y)])).map((u)=>sy(u));return Y(t)}}class fy{client;constructor(y){this.client=y}async findGroups(y=50,t){let u=this.getGroups(y,t,"DESC"),v=[];while(await u.queryNextPage()){if(v.push(...u.currentPage.results),v.length>=y)break;if(!u.currentPage.hasMore)break}return v.slice(0,y)}getGroupMemberships(y,t=50,u="DESC"){let v=A(y);return new G(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"member",Value:v}],limit:t},(s)=>Y(s))}getGroupHolders(y,t=100){let u=A(y);return new G(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:u}],limit:t,rowTransformer:(v)=>{let s={...v,totalBalance:BigInt(v.totalBalance),demurragedTotalBalance:BigInt(v.demurragedTotalBalance)};return Y(s)}})}getGroupMembers(y,t=100,u="DESC"){let v=A(y);return new G(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:v}],limit:t},(s)=>Y(s))}getGroups(y=50,t,u="DESC"){let v=[];if(t){if(t.nameStartsWith)v.push({Type:"FilterPredicate",FilterType:"Like",Column:"name",Value:t.nameStartsWith+"%"});if(t.symbolStartsWith)v.push({Type:"FilterPredicate",FilterType:"Like",Column:"symbol",Value:t.symbolStartsWith+"%"});if(t.groupAddressIn&&t.groupAddressIn.length>0){let b=t.groupAddressIn.map((S)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:A(S)}));if(b.length===1)v.push(b[0]);else v.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:b})}if(t.groupTypeIn&&t.groupTypeIn.length>0){let b=t.groupTypeIn.map((S)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"type",Value:S}));if(b.length===1)v.push(b[0]);else v.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:b})}if(t.ownerIn&&t.ownerIn.length>0){let b=t.ownerIn.map((S)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"owner",Value:A(S)}));if(b.length===1)v.push(b[0]);else v.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:b})}if(t.mintHandlerEquals)v.push({Type:"FilterPredicate",FilterType:"Equals",Column:"mintHandler",Value:A(t.mintHandlerEquals)});if(t.treasuryEquals)v.push({Type:"FilterPredicate",FilterType:"Equals",Column:"treasury",Value:A(t.treasuryEquals)})}let s=v.length>1?[{Type:"Conjunction",ConjunctionType:"And",Predicates:v}]:v;return new G(this.client,{namespace:"V_CrcV2",table:"Groups",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","type","owner","mintPolicy","mintHandler","treasury","service","feeCollection","memberCount","name","symbol","cidV0Digest","erc20WrapperDemurraged","erc20WrapperStatic"],filter:s,limit:y},(b)=>Y(b))}}class T{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,t){return y*t>>64n}static mulU(y,t){return y*t>>64n}static pow64(y,t){let u=y,v=t,s=this.ONE_64;while(v>0n){if((v&1n)===1n)s=this.mul64(s,u);u=this.mul64(u,u),v>>=1n}return s}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,t){return y*t/this.ONE_36}static pow36(y,t){let u=this.ONE_36,v=y,s=t;while(s>0n){if((s&1n)===1n)u=this.mul36(u,v);v=this.mul36(v,v),s>>=1n}return u}static attoCirclesToCircles(y){if(y===0n)return 0;let t=y/this.ATTO_FACTOR,u=y%this.ATTO_FACTOR,v=BigInt(Number.MAX_SAFE_INTEGER);if(t>v||t<-v)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(t)+Number(u)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,t){return this.mulU(this.pow64(this.GAMMA_64,t),y)}static demurrageToInflationary(y,t){return this.mulU(this.pow64(this.BETA_64,t),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(t))}static attoStaticCirclesToAttoCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(t))}static inflationaryToDemurrageExact(y,t){let u=this.pow36(this.GAMMA_36,t);return y*u/this.ONE_36}static demurrageToInflationaryExact(y,t){let u=this.pow36(this.BETA_36,t);return y*u/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.demurrageToInflationaryExact(y,u)}static attoStaticCirclesToAttoCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.inflationaryToDemurrageExact(y,u)}static truncateToInt64(y){let t=y/this.FACTOR_1E12,u=9223372036854775807n;return t>u?u:t}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,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,v=u/this.PERIOD_SEC,s=u%this.PERIOD_SEC,b=this.v1InflateFactor(v),S=this.v1InflateFactor(v+1n);return this.v1ToDemurrage(y,b,S,s,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,v=u/this.PERIOD_SEC,s=u%this.PERIOD_SEC,b=this.v1InflateFactor(v),S=this.v1InflateFactor(v+1n),X=b*(this.PERIOD_SEC-s)+S*s;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/X}static v1ToDemurrage(y,t,u,v,s){let b=t*(s-v)+u*v;return y*3n*this.V1_ACCURACY*s/b}}var py="0x0000000000000000000000000000000000000000",h6=BigInt(96)*BigInt(1000000000000000000),N6=BigInt("9999999999999999999999999999999999999");var by=BigInt(4294967295),ft=BigInt(32);function A0(y,t=!1){if(t)return{h:Number(y&by),l:Number(y>>ft&by)};return{h:Number(y>>ft&by)|0,l:Number(y&by)|0}}function K0(y,t=!1){let u=y.length,v=new Uint32Array(u),s=new Uint32Array(u);for(let b=0;b<u;b++){let{h:S,l:X}=A0(y[b],t);[v[b],s[b]]=[S,X]}return[v,s]}var V0=(y,t,u)=>y<<u|t>>>32-u,W0=(y,t,u)=>t<<u|y>>>32-u,C0=(y,t,u)=>t<<u-32|y>>>64-u,H0=(y,t,u)=>y<<u-32|t>>>64-u;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function g0(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function pt(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function Xy(y,...t){if(!g0(y))throw Error("Uint8Array expected");if(t.length>0&&!t.includes(y.length))throw Error("Uint8Array expected of length "+t+", got length="+y.length)}function Ft(y,t=!0){if(y.destroyed)throw Error("Hash instance has been destroyed");if(t&&y.finished)throw Error("Hash#digest() has already been called")}function L0(y,t){Xy(y);let u=t.outputLen;if(y.length<u)throw Error("digestInto() expects output buffer of length at least "+u)}function f0(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function lt(...y){for(let t=0;t<y.length;t++)y[t].fill(0)}var p0=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function F0(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function Q0(y){for(let t=0;t<y.length;t++)y[t]=F0(y[t]);return y}var Qt=p0?(y)=>y:Q0;function T0(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function _t(y){if(typeof y==="string")y=T0(y);return Xy(y),y}class dt{}function c0(y){let t=(v)=>y().update(_t(v)).digest(),u=y();return t.outputLen=u.outputLen,t.blockLen=u.blockLen,t.create=()=>y(),t}var w0=BigInt(0),o=BigInt(1),Y0=BigInt(2),l0=BigInt(7),_0=BigInt(256),d0=BigInt(113),nt=[],et=[],$t=[];for(let y=0,t=o,u=1,v=0;y<24;y++){[u,v]=[v,(2*u+3*v)%5],nt.push(2*(5*v+u)),et.push((y+1)*(y+2)/2%64);let s=w0;for(let b=0;b<7;b++)if(t=(t<<o^(t>>l0)*d0)%_0,t&Y0)s^=o<<(o<<BigInt(b))-o;$t.push(s)}var Ot=K0($t,!0),n0=Ot[0],e0=Ot[1],Tt=(y,t,u)=>u>32?C0(y,t,u):V0(y,t,u),ct=(y,t,u)=>u>32?H0(y,t,u):W0(y,t,u);function $0(y,t=24){let u=new Uint32Array(10);for(let v=24-t;v<24;v++){for(let S=0;S<10;S++)u[S]=y[S]^y[S+10]^y[S+20]^y[S+30]^y[S+40];for(let S=0;S<10;S+=2){let X=(S+8)%10,h=(S+2)%10,N=u[h],D=u[h+1],j=Tt(N,D,1)^u[X],M=ct(N,D,1)^u[X+1];for(let P=0;P<50;P+=10)y[S+P]^=j,y[S+P+1]^=M}let s=y[2],b=y[3];for(let S=0;S<24;S++){let X=et[S],h=Tt(s,b,X),N=ct(s,b,X),D=nt[S];s=y[D],b=y[D+1],y[D]=h,y[D+1]=N}for(let S=0;S<50;S+=10){for(let X=0;X<10;X++)u[X]=y[S+X];for(let X=0;X<10;X++)y[S+X]^=~u[(X+2)%10]&u[(X+4)%10]}y[0]^=n0[v],y[1]^=e0[v]}lt(u)}class Qy extends dt{constructor(y,t,u,v=!1,s=24){super();if(this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=y,this.suffix=t,this.outputLen=u,this.enableXOF=v,this.rounds=s,pt(u),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=f0(this.state)}clone(){return this._cloneInto()}keccak(){Qt(this.state32),$0(this.state32,this.rounds),Qt(this.state32),this.posOut=0,this.pos=0}update(y){Ft(this),y=_t(y),Xy(y);let{blockLen:t,state:u}=this,v=y.length;for(let s=0;s<v;){let b=Math.min(t-this.pos,v-s);for(let S=0;S<b;S++)u[this.pos++]^=y[s++];if(this.pos===t)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:t,pos:u,blockLen:v}=this;if(y[u]^=t,(t&128)!==0&&u===v-1)this.keccak();y[v-1]^=128,this.keccak()}writeInto(y){Ft(this,!1),Xy(y),this.finish();let t=this.state,{blockLen:u}=this;for(let v=0,s=y.length;v<s;){if(this.posOut>=u)this.keccak();let b=Math.min(u-this.posOut,s-v);y.set(t.subarray(this.posOut,this.posOut+b),v),this.posOut+=b,v+=b}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return pt(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(L0(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,lt(this.state)}_cloneInto(y){let{blockLen:t,suffix:u,outputLen:v,rounds:s,enableXOF:b}=this;return y||(y=new Qy(t,u,v,b,s)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=s,y.suffix=u,y.outputLen=v,y.enableXOF=b,y.destroyed=this.destroyed,y}}var O0=(y,t,u)=>c0(()=>new Qy(t,y,u)),Rt=(()=>O0(1,136,32))(),at=[];for(let y=0;y<256;y++)at[y]=y.toString(16).padStart(2,"0");function Gt(y){let t="0x";for(let u=0;u<y.length;u++)t+=at[y[u]];return t}var i=64,Ty=32,Sy=(y)=>y.startsWith("0x")?y.slice(2):y,c=(y)=>y.toString(16).padStart(i,"0");function R0(y){let t=y.toLowerCase().replace("0x",""),u=Gt(Rt(new TextEncoder().encode(t))).slice(2),v="0x";for(let s=0;s<t.length;s++)v+=parseInt(u[s],16)>=8?t[s].toUpperCase():t[s];return v}function Fy(y,t){if(y==="tuple"&&t)return`(${t.map((v)=>Fy(v.type,v.components)).join(",")})`;let u=y.match(/^tuple(\[\d*\])$/);if(u&&t)return`${Fy("tuple",t)}${u[1]}`;return y}function a0(y){let t=(y.inputs||[]).map((u)=>Fy(u.type,u.components));return`${y.name}(${t.join(",")})`}function G0(y){let t=a0(y),u=Rt(new TextEncoder().encode(t));return Gt(u.slice(0,4))}function q(y,t){if(y==="string"||y==="bytes")return!0;if(y.includes("[")){let u=y.slice(0,y.indexOf("["));if(y.endsWith("[]"))return!0;if(u==="tuple")return wt(t);return q(u)}if(y==="tuple")return wt(t);return!1}function wt(y){return y?.some((t)=>q(t.type,t.components))??!1}function _(y,t,u){if(y==="tuple"&&u)return Z0(u,t);if(y.includes("["))return o0(y,t,u);return q0(y,t)}function o0(y,t,u){let v=y.slice(0,y.indexOf("[")),s=y.endsWith("[]"),b=q(v,u),S;if(b){let X=t.map((N)=>_(v,N,u)),h=t.length*Ty;S=X.map((N)=>{let D=h;return h+=N.length/2,c(D)}).join("")+X.join("")}else S=t.map((X)=>_(v,X,u)).join("");return s?c(t.length)+S:S}function Z0(y,t){let u=Array.isArray(t),v=[],s=[],b=[];for(let S=0;S<y.length;S++){let X=y[S],h=u?t[S]:t[X.name||""],N=q(X.type,X.components);if(b.push(N),N)v.push(""),s.push(_(X.type,h,X.components));else v.push(_(X.type,h,X.components))}if(s.length>0){let S=v.reduce((N,D,j)=>N+(b[j]?Ty:D.length/2),0),X="",h=0;for(let N=0;N<y.length;N++)if(b[N])X+=c(S),S+=s[h].length/2,h++;else X+=v[N];return X+s.join("")}return v.join("")}function q0(y,t){if(y==="address")return Sy(t).toLowerCase().padStart(i,"0");if(y==="bool")return c(t?1:0);if(y.startsWith("uint")){let u=typeof t==="bigint"?t:BigInt(t);return c(u)}if(y.startsWith("int")){let u=typeof t==="bigint"?t:BigInt(t);if(u<0n){let v=y==="int"?256:parseInt(y.slice(3));u=(1n<<BigInt(v))+u}return c(u)}if(y.startsWith("bytes")&&y!=="bytes")return Sy(t).padEnd(i,"0");if(y==="bytes"){let u=Sy(t),v=c(u.length/2),s=u.padEnd(Math.ceil(u.length/i)*i,"0");return v+s}if(y==="string"){let u=Array.from(new TextEncoder().encode(t)).map((b)=>b.toString(16).padStart(2,"0")).join(""),v=c(u.length/2),s=u.padEnd(Math.ceil(u.length/i)*i,"0");return v+s}throw Error(`Unsupported type: ${y}`)}function Z(y,t,u=0,v){if(y==="tuple"&&v)return r0(v,t,u);if(y.includes("["))return B0(y,t,u,v);return z0(y,t,u)}function B0(y,t,u,v){let s=y.slice(0,y.indexOf("[")),b=t.slice(u,u+i);if(y.endsWith("[]")){let X=parseInt(b,16)*2,h=parseInt(t.slice(X,X+i),16),N=[],D=X+i;for(let j=0;j<h;j++){let M=Z(s,t,D,v);N.push(M.value),D+=M.consumed}return{value:N,consumed:i}}let S=y.match(/\[(\d+)\]$/);if(S){let X=parseInt(S[1]),h=[],N=0;for(let D=0;D<X;D++){let j=Z(s,t,u+N,v);h.push(j.value),N+=j.consumed}return{value:h,consumed:N}}throw Error(`Invalid array type: ${y}`)}function r0(y,t,u){let v=[],s=u;for(let b of y){let S=Z(b.type,t,s,b.components);v.push(S.value),s+=S.consumed}return{value:v,consumed:s-u}}function z0(y,t,u){let v=t.slice(u,u+i);if(y==="address")return{value:R0("0x"+v.slice(24)),consumed:i};if(y==="bool")return{value:parseInt(v,16)!==0,consumed:i};if(y.startsWith("uint"))return{value:BigInt("0x"+v),consumed:i};if(y.startsWith("int")){let s=BigInt("0x"+v),b=y==="int"?256:parseInt(y.slice(3)),S=1n<<BigInt(b-1);return{value:s>=S?s-(1n<<BigInt(b)):s,consumed:i}}if(y.startsWith("bytes")&&y!=="bytes"){let s=parseInt(y.match(/^bytes(\d+)$/)[1]);return{value:"0x"+v.slice(0,s*2),consumed:i}}if(y==="bytes"){let s=parseInt(v,16)*2,b=parseInt(t.slice(s,s+i),16)*2;return{value:"0x"+t.slice(s+i,s+i+b),consumed:i}}if(y==="string"){let s=parseInt(v,16)*2,b=parseInt(t.slice(s,s+i),16)*2,S=t.slice(s+i,s+i+b),X=new Uint8Array(S.match(/.{2}/g)?.map((h)=>parseInt(h,16))||[]);return{value:new TextDecoder().decode(X),consumed:i}}throw Error(`Unsupported type: ${y}`)}function Yt(y){let{abi:t,functionName:u,args:v=[]}=y,s=t.find((P)=>P.type==="function"&&P.name===u);if(!s)throw Error(`Function "${u}" not found in ABI`);let b=G0(s),S=s.inputs||[];if(S.length===0)return b;if(v.length!==S.length)throw Error(`Expected ${S.length} arguments, got ${v.length}`);let X=[],h=[],N=[];for(let P=0;P<S.length;P++){let I=S[P],K=I.components,k=q(I.type,K);if(N.push(k),k)X.push(""),h.push(_(I.type,v[P],K));else X.push(_(I.type,v[P],K))}if(h.length===0)return b+X.join("");let D=X.reduce((P,I,K)=>P+(N[K]?Ty:I.length/2),0),j="",M=0;for(let P=0;P<S.length;P++)if(N[P])j+=c(D),D+=h[M].length/2,M++;else j+=X[P];return b+j+h.join("")}function J0(y){let{abi:t,functionName:u,data:v}=y,s=t.find((N)=>N.type==="function"&&N.name===u);if(!s)throw Error(`Function "${u}" not found in ABI`);let b=s.outputs||[];if(b.length===0)return;let S=Sy(v);if(b.length===1)return Z(b[0].type,S,0,b[0].components).value;let X=[],h=0;for(let N of b){let D=Z(N.type,S,h,N.components);X.push(D.value),h+=D.consumed}return X}class p{address;abi;rpcUrl;constructor(y){this.address=y.address,this.abi=y.abi,this.rpcUrl=y.rpcUrl}async read(y,t,u){let v=Yt({abi:this.abi,functionName:y,args:t}),s={to:this.address,data:v,...u?.from&&{from:u.from}},b=await(await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"eth_call",params:[s,"latest"]})})).json();if(b.error)throw Error(`RPC Error: ${b.error.message}`);if(!b.result)throw Error("No result returned from RPC call");return J0({abi:this.abi,functionName:y,data:b.result})}encodeWrite(y,t){return Yt({abi:this.abi,functionName:y,args:t})}}var y6=[{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 p{constructor(y){super({address:y.address,abi:y6,rpcUrl:y.rpcUrl})}async isTrusted(y,t){return this.read("isTrusted",[y,t])}async isApprovedForAll(y,t){return this.read("isApprovedForAll",[y,t])}async toTokenId(y){return this.read("toTokenId",[y])}trust(y,t){return{to:this.address,data:this.encodeWrite("trust",[y,t]),value:0n}}setApprovalForAll(y,t){return{to:this.address,data:this.encodeWrite("setApprovalForAll",[y,t]),value:0n}}wrap(y,t,u){return{to:this.address,data:this.encodeWrite("wrap",[y,t,u]),value:0n}}safeTransferFrom(y,t,u,v,s="0x"){return{to:this.address,data:this.encodeWrite("safeTransferFrom",[y,t,u,v,s]),value:0n}}operateFlowMatrix(y,t,u,v){return{to:this.address,data:this.encodeWrite("operateFlowMatrix",[y,t,u,v]),value:0n}}async isHuman(y){return this.read("isHuman",[y])}safeBatchTransferFrom(y,t,u,v,s="0x"){return{to:this.address,data:this.encodeWrite("safeBatchTransferFrom",[y,t,u,v,s]),value:0n}}}var t6=[{type:"function",name:"erc20Circles",inputs:[{name:"_circlesType",type:"uint8"},{name:"_avatar",type:"address"}],outputs:[{type:"address"}],stateMutability:"view"}];class Ny extends p{constructor(y){super({address:y.address,abi:t6,rpcUrl:y.rpcUrl})}async erc20Circles(y,t){return this.read("erc20Circles",[y,t])}}var ot=[{type:"function",name:"unwrap",inputs:[{name:"_amount",type:"uint256"}],outputs:[],stateMutability:"nonpayable"}];class d extends p{constructor(y){super({address:y.address,abi:ot,rpcUrl:y.rpcUrl})}unwrap(y){return{to:this.address,data:this.encodeWrite("unwrap",[y]),value:0n}}}class n extends p{constructor(y){super({address:y.address,abi:ot,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 u6;((y)=>{y.Standard="Standard",y.Custom="Custom"})(u6||={});class cy extends Error{name;code;source;cause;context;constructor(y,t,u){super(t);if(this.name=y,this.code=u?.code,this.source=u?.source??"UNKNOWN",this.cause=u?.cause,this.context=u?.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 V extends cy{constructor(y,t){super("TransferError",y,{...t,source:t?.source||"TRANSFERS"})}static noPathFound(y,t,u){return new V(`No valid transfer path found from ${y} to ${t}. ${u||"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:t,reason:u}})}static insufficientBalance(y,t,u,v){let s=Number(y)/1000000000000000000,b=Number(t)/1000000000000000000;return new V(`Insufficient balance for transfer. Requested: ${s.toFixed(6)} CRC, Available: ${b.toFixed(6)} CRC.`,{code:"TRANSFER_INSUFFICIENT_BALANCE",source:"VALIDATION",context:{from:u,to:v,requested:y.toString(),available:t.toString(),requestedCrc:s,availableCrc:b}})}static wrappedTokensRequired(){return new V("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 V(`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,t){return new V(`Flow matrix terminal sum (${y}) does not equal expected amount (${t})`,{code:"TRANSFER_FLOW_MATRIX_MISMATCH",source:"FLOW_MATRIX",context:{terminalSum:y.toString(),expected:t.toString()}})}static emptyPath(y,t){return new V(`Transfer path is empty for route from ${y} to ${t}`,{code:"TRANSFER_EMPTY_PATH",source:"PATHFINDING",context:{from:y,to:t}})}}class Zt{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 Cy(y.circlesRpcUrl),this.pathfinder=new gy(this.rpcClient),this.balance=new Ly(this.rpcClient),this.group=new fy(this.rpcClient)}async buildFlowMatrixTx(y,t,u,v,s=!1){let b=y.toLowerCase(),S=t.toLowerCase();if(!u.transfers||u.transfers.length===0)throw V.noPathFound(b,S);let X={...u};if(s&&v?.toTokens?.length===1){let g=v.toTokens[0].toLowerCase();if(u.maxFlow>0n)X.transfers.push({from:S,to:S,tokenOwner:g,value:u.maxFlow})}let h=await Ay(b,this.config.circlesRpcUrl,X),N=Ky(X,h),D=Object.keys(N).length>0;if(D&&!v?.useWrappedBalances)throw V.wrappedTokensRequired();let j=[],M=[];if(D){let g=await this._getTokenBalanceMap(b),F=this._createDemurragedUnwrapCalls(N),{unwrapCalls:Dy,wrapCalls:r}=this._createInflationaryUnwrapAndWrapCalls(N,h,g);j=[...F,...Dy],M=r,X=Vy(X,h)}let P=iy(b,S,X.maxFlow,X.transfers),I=Ey(P,v?.txData),K=this.hubV2.operateFlowMatrix(P.flowVertices,P.flowEdges,I,P.packedCoordinates),k=!1;try{k=await this.hubV2.isApprovedForAll(b,b)}catch(g){console.warn("Failed to check approval status, including approval transaction:",g)}return[...k?[]:[this.hubV2.setApprovalForAll(b,!0)],...j,K,...M]}async constructAdvancedTransfer(y,t,u,v,s=!1){let b=y.toLowerCase(),S=t.toLowerCase(),X=BigInt(u);if(b===S&&v?.fromTokens?.length===1&&v?.toTokens?.length===1){let P=v.fromTokens[0],I=v.toTokens[0],[K,k]=await Promise.all([this.liftERC20.erc20Circles(B.Demurrage,I),this.liftERC20.erc20Circles(B.Inflation,I)]);if(P.toLowerCase()===K.toLowerCase()&&K!==py){let g=new d({address:P,rpcUrl:this.config.circlesRpcUrl}).unwrap(X);return[{to:g.to,data:g.data,value:g.value??0n}]}if(P.toLowerCase()===k.toLowerCase()&&k!==py){let W=new n({address:P,rpcUrl:this.config.circlesRpcUrl}),g=T.attoCirclesToAttoStaticCircles(X),F=W.unwrap(g);return[{to:F.to,data:F.data,value:F.value??0n}]}}let h=this._truncateToSixDecimals(X),N=await this._getDefaultTokenExcludeList(S,v?.excludeFromTokens),{...D}=v||{},j={...D,...N?{excludeFromTokens:N}:{}},M=await this.pathfinder.findPath({from:b,to:S,targetFlow:h,...j});if(!M.transfers||M.transfers.length===0)throw V.noPathFound(b,S);if(M.maxFlow<h)throw V.insufficientBalance(h,M.maxFlow,b,S);return this.buildFlowMatrixTx(b,S,M,v,s)}async constructReplenish(y,t,u,v){let s=y.toLowerCase(),b=t.toLowerCase(),S=(v||y).toLowerCase(),X=BigInt(u),N=(await this.balance.getTokenBalances(s)).filter((m)=>m.tokenOwner.toLowerCase()===b),D=0n,j=0n,M=0n,P=null,I=null;for(let m of N)if(m.isWrapped)if(m.tokenType.includes("Demurrage"))j=BigInt(m.attoCircles),P=m.tokenAddress;else M=BigInt(m.staticAttoCircles),I=m.tokenAddress;else D=BigInt(m.attoCircles);let K=D+j+T.attoStaticCirclesToAttoCircles(M),k=[];if(D>=X){if(console.log(`✓ Already have ${Number(D)/1000000000000000000} CRC unwrapped (target: ${Number(X)/1000000000000000000} CRC). No replenish needed.`),S!==s){let m=await this.hubV2.toTokenId(b),x=this.hubV2.safeTransferFrom(s,S,m,X);k.push({to:x.to,data:x.data,value:x.value??0n})}return k}let W=X-D;if(console.log(`Current unwrapped: ${Number(D)/1000000000000000000} CRC`),console.log(`Target amount: ${Number(X)/1000000000000000000} CRC`),console.log(`Need to acquire: ${Number(W)/1000000000000000000} CRC`),K>=X){let m=W;if(j>0n&&P&&m>0n){let x=m>j?j:m,Q=new d({address:P,rpcUrl:this.config.circlesRpcUrl}).unwrap(x);k.push({to:Q.to,data:Q.data,value:Q.value??0n}),m-=x}if(M>0n&&I&&m>0n){let x=T.attoCirclesToAttoStaticCircles(m),f=x>M?M:x,My=new n({address:I,rpcUrl:this.config.circlesRpcUrl}).unwrap(f);k.push({to:My.to,data:My.data,value:My.value??0n})}if(S!==s){let x=await this.hubV2.toTokenId(b),f=this.hubV2.safeTransferFrom(s,S,x,X);k.push({to:f.to,data:f.data,value:f.value??0n})}return k}let F=!await this.hubV2.isTrusted(s,b),Dy=BigInt(Math.floor(Date.now()/1000)+31536000),r=T.truncateToInt64(W),qt=W%T.FACTOR_1E12!==0n,z=T.blowUpToBigInt(qt?r+1n:r),L;try{L=await this.pathfinder.findPath({from:s,to:S,targetFlow:z,toTokens:[b],useWrappedBalances:!0,simulatedTrusts:F?[{truster:s,trustee:b}]:void 0})}catch(m){let x=Number(K)/1000000000000000000,f=Number(X)/1000000000000000000,Q=Number(W)/1000000000000000000;throw new V(`Insufficient tokens to replenish. Target: ${f.toFixed(6)} CRC, Current unwrapped: ${Number(D)/1000000000000000000} CRC, Need: ${Q.toFixed(6)} CRC, Available (including all paths): ${x.toFixed(6)} CRC. Cannot acquire the remaining ${(Number(W-(K-D))/1000000000000000000).toFixed(6)} CRC.`,{code:"REPLENISH_INSUFFICIENT_TOKENS",source:"VALIDATION",context:{from:s,tokenId:b,target:X.toString(),unwrapped:D.toString(),deficit:W.toString(),available:K.toString(),targetCrc:f,unwrappedCrc:Number(D)/1000000000000000000,deficitCrc:Q,availableCrc:x}})}if(!L.transfers||L.transfers.length===0)throw V.noPathFound(s,S,`No path to acquire token ${b}`);if(L.maxFlow<z){let m=Number(L.maxFlow)/1000000000000000000,x=Number(z)/1000000000000000000;throw new V(`Pathfinder can only provide ${m.toFixed(6)} CRC of the ${x.toFixed(6)} CRC deficit needed for token ${b}.`,{code:"REPLENISH_INSUFFICIENT_PATH_FLOW",source:"PATHFINDING",context:{from:s,tokenId:b,deficit:z.toString(),pathFlow:L.maxFlow.toString(),deficitCrc:x,pathFlowCrc:m}})}if(F){let m=this.hubV2.trust(b,Dy);k.push({to:m.to,data:m.data,value:m.value??0n})}let Py=await Ay(s,this.config.circlesRpcUrl,L),Uy=Ky(L,Py),Bt=Object.keys(Uy).length>0,wy=[],jy=[];if(Bt){let m=await this._getTokenBalanceMap(s),x=this._createDemurragedUnwrapCalls(Uy),{unwrapCalls:f,wrapCalls:Q}=this._createInflationaryUnwrapAndWrapCalls(Uy,Py,m);wy=[...x,...f],jy=Q,L=Vy(L,Py)}let J=iy(s,S,L.maxFlow,L.transfers),rt=Ey(J),my=this.hubV2.operateFlowMatrix(J.flowVertices,J.flowEdges,rt,J.packedCoordinates),zt={to:my.to,data:my.data,value:my.value??0n},Yy=!1;try{Yy=await this.hubV2.isApprovedForAll(s,s)}catch(m){console.warn("Failed to check approval status, including approval transaction:",m)}if(F){let m=this.hubV2.trust(b,0n);jy.push({to:m.to,data:m.data,value:m.value??0n})}let Jt=Yy?[]:[{to:this.hubV2.setApprovalForAll(s,!0).to,data:this.hubV2.setApprovalForAll(s,!0).data,value:0n}];return k.push(...Jt,...wy,zt,...jy),k}async _getTokenBalanceMap(y){let t=await this.balance.getTokenBalances(y),u=new Map;return t.forEach((v)=>{u.set(v.tokenAddress.toLowerCase(),v.staticAttoCircles)}),u}_createDemurragedUnwrapCalls(y){let t=[];for(let[u,[v,s]]of Object.entries(y)){if(s!=="CrcV2_ERC20WrapperDeployed_Demurraged")continue;let S=new d({address:u,rpcUrl:this.config.circlesRpcUrl}).unwrap(v);t.push({to:S.to,data:S.data,value:S.value??0n})}return t}_createInflationaryUnwrapAndWrapCalls(y,t,u){let v=[],s=[];for(let[b,[S,X]]of Object.entries(y)){if(X!=="CrcV2_ERC20WrapperDeployed_Inflationary")continue;let h=t.get(b.toLowerCase()),N=u.get(b.toLowerCase())||0n;if(N===0n)continue;let j=new n({address:b,rpcUrl:this.config.circlesRpcUrl}).unwrap(N);v.push({to:j.to,data:j.data,value:j.value??0n});let M=h?.tokenOwner,P=T.attoStaticCirclesToAttoCircles(N)-S;if(P>0n){let I=this.hubV2.wrap(M,P,B.Inflation);s.push({to:I.to,data:I.data,value:I.value??0n})}}return{unwrapCalls:v,wrapCalls:s}}_truncateToSixDecimals(y){let t=BigInt(1e6),u=BigInt(10)**BigInt(18);return y/(u/t)*(u/t)}async _getDefaultTokenExcludeList(y,t){let u=await this.group.findGroups(1,{mintHandlerEquals:y}),v=new Set;if(u.length>0){let s=u[0];if(v.add(s.group.toLowerCase()),s.erc20WrapperDemurraged)v.add(s.erc20WrapperDemurraged.toLowerCase());if(s.erc20WrapperStatic)v.add(s.erc20WrapperStatic.toLowerCase())}if(t?.forEach((s)=>v.add(s.toLowerCase())),v.size===0)return;return Array.from(v)}}export{V as TransferError,Zt as TransferBuilder};
1
+ var ay=[];for(let y=0;y<256;y++)ay[y]=y.toString(16).padStart(2,"0");function jy(y){let t="0x";for(let u=0;u<y.length;u++)t+=ay[y[u]];return t}function yu(y){let t=new Uint8Array(y.length*2);return y.forEach((u,s)=>{let v=u>>8,b=u&255,S=2*s;t[S]=v,t[S+1]=b}),jy(t)}function tu(y,t,u){let s=new Set([t.toLowerCase(),u.toLowerCase()]);y.forEach((S)=>{s.add(S.from.toLowerCase()),s.add(S.to.toLowerCase()),s.add(S.tokenOwner.toLowerCase())});let v=[...s].sort((S,X)=>{let h=BigInt(S),D=BigInt(X),N=h<D,M=h>D;return N?-1:M?1:0}),b={};return v.forEach((S,X)=>{b[S]=X}),{sorted:v,idx:b}}function uu(y,t){let u=new Set,s=[],v=null;if(y.forEach((b,S)=>{let X=b.from.toLowerCase(),h=b.to.toLowerCase();if(X===t&&h===t)v=S;else if(h===t)s.push(S)}),v!==null)u.add(v);else s.forEach((b)=>u.add(b));return u}function ky(y,t,u,s){let v=y.toLowerCase(),b=t.toLowerCase(),{sorted:S,idx:X}=tu(s,v,b),h=uu(s,b),D=s.map((j,K)=>{return{streamSinkId:h.has(K)?1:0,amount:j.value}});if(h.size===0)throw Error(`No terminal edges detected. Flow must have at least one edge delivering to receiver ${b}`);let N=Array.from(h),M=[{sourceCoordinate:X[v],flowEdgeIds:N,data:new Uint8Array(0)}],U=[];s.forEach((j)=>{U.push(X[j.tokenOwner.toLowerCase()]),U.push(X[j.from.toLowerCase()]),U.push(X[j.to.toLowerCase()])});let i=yu(U),I=BigInt(u),A=D.filter((j)=>j.streamSinkId===1).reduce((j,K)=>j+BigInt(K.amount.toString()),BigInt(0));if(A!==I)throw Error(`Terminal sum ${A} does not equal expected ${I}`);return{flowVertices:S,flowEdges:D,streams:M,packedCoordinates:i,sourceCoordinate:X[v]}}function Ey(y,t){let u=y.streams.map((s)=>({sourceCoordinate:s.sourceCoordinate,flowEdgeIds:s.flowEdgeIds,data:s.data instanceof Uint8Array?jy(s.data):s.data}));if(t&&u.length>0)u[0].data=t instanceof Uint8Array?jy(t):t;return u}var Yy=(y)=>BigInt(y),$=(y)=>parseInt(y,16),su=(y)=>{if(y.startsWith("0x"))y=y.slice(2);if(y.length%2!==0)throw Error("Invalid hex string");let t=new Uint8Array(y.length/2);for(let u=0;u<y.length;u+=2)t[u/2]=parseInt(y.substr(u,2),16);return t};function vu(y,t){if(typeof t==="string"&&t.startsWith("0x")){let u=t.slice(2);if(u.length===40)return t;if(u.length===64){if(y.toLowerCase().includes("digest")||y.toLowerCase().includes("data")||y.toLowerCase().includes("bytes"))return su(t);try{return Yy(t)}catch{return t}}try{let s=$(t);if(s<Number.MAX_SAFE_INTEGER)return s;return Yy(t)}catch{return t}}if(t==="true")return!0;if(t==="false")return!1;return t}function bu(y){let{event:t,values:u}=y,s={$event:t,blockNumber:u.blockNumber?$(u.blockNumber):0,timestamp:u.timestamp?$(u.timestamp):void 0,transactionIndex:u.transactionIndex?$(u.transactionIndex):0,logIndex:u.logIndex?$(u.logIndex):0,transactionHash:u.transactionHash};for(let[v,b]of Object.entries(u)){if(["blockNumber","timestamp","transactionIndex","logIndex","transactionHash"].includes(v))continue;s[v]=vu(v,b)}return s}function Su(y){return y.map(bu)}class Iy{_subscribers=[];subscribe(y){return this._subscribers.push(y),()=>{let t=this._subscribers.indexOf(y);if(t>-1)this._subscribers.splice(t,1)}}constructor(){this._subscribers=[]}emit(y){this._subscribers.forEach((t)=>t(y))}static create(){let y=new Iy;return{property:y,emit:(t)=>y.emit(t)}}}class Ry extends Error{name;code;source;cause;context;constructor(y,t,u){super(t);if(this.name=y,this.code=u?.code,this.source=u?.source??"UNKNOWN",this.cause=u?.cause,this.context=u?.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 W extends Ry{constructor(y,t){super("RpcError",y,{...t,source:t?.source??"RPC_REQUEST"})}static connectionFailed(y,t){return new W("Failed to connect to RPC endpoint",{code:"RPC_CONNECTION_FAILED",source:"RPC_CONNECTION",cause:t,context:{url:y}})}static timeout(y,t){return new W("RPC request timed out",{code:"RPC_TIMEOUT",source:"RPC_TIMEOUT",context:{method:y,timeout:t}})}static invalidResponse(y,t){return new W("Invalid RPC response",{code:"RPC_INVALID_RESPONSE",source:"RPC_RESPONSE",context:{method:y,response:t}})}static fromJsonRpcError(y){return new W(y.message,{code:y.code,source:"RPC_RESPONSE",context:{data:y.data}})}static websocketError(y,t){return new W(y,{code:"RPC_WEBSOCKET_ERROR",source:"RPC_WEBSOCKET",cause:t})}}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,t){this.requestId++;let u={jsonrpc:"2.0",id:this.requestId,method:y,params:t};try{let s=await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});if(!s.ok)throw W.connectionFailed(this.rpcUrl,Error(`HTTP ${s.status}: ${s.statusText}`));let v=await s.json();if(v.error)throw W.fromJsonRpcError(v.error);if(v.result===void 0)throw W.invalidResponse(y,v);return v.result}catch(s){if(s instanceof W)throw s;throw W.connectionFailed(this.rpcUrl,s)}}setRpcUrl(y){this.rpcUrl=y}getRpcUrl(){return this.rpcUrl}connect(){return new Promise((y)=>{let t=this.rpcUrl.replace("http","ws");if(t.endsWith("/"))t+="ws";else t+="/ws";this.websocket=new WebSocket(t),this.websocket.onopen=()=>{console.log("WebSocket connected"),this.websocketConnected=!0,this.reconnectAttempt=0,y()},this.websocket.onmessage=(u)=>{let s=JSON.parse(u.data),{id:v,method:b,params:S}=s;if(v!==void 0&&this.pendingResponses[v])this.pendingResponses[v].resolve(s),delete this.pendingResponses[v];if(b==="eth_subscription"&&S){let{subscription:X,result:h}=S;if(this.subscriptionListeners[X])this.subscriptionListeners[X].forEach((D)=>D(h))}},this.websocket.onclose=()=>{console.warn("WebSocket closed"),this.websocketConnected=!1},this.websocket.onerror=(u)=>{console.error("WebSocket error:",u),this.websocketConnected=!1,this.scheduleReconnect()}})}scheduleReconnect(){let y=Math.min(this.initialBackoff*Math.pow(2,this.reconnectAttempt),this.maxBackoff),t=y*(Math.random()*0.5),u=y+t;console.log(`Reconnecting in ${Math.round(u)}ms (attempt #${this.reconnectAttempt+1})`),this.reconnectAttempt++,setTimeout(()=>{this.reconnect()},u)}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,t,u=5000){if(!this.websocket||this.websocket.readyState!==WebSocket.OPEN)return Promise.reject(W.connectionFailed(this.rpcUrl));let s=this.requestId++,v={jsonrpc:"2.0",method:y,params:t,id:s};return new Promise((b,S)=>{this.pendingResponses[s]={resolve:b,reject:S},this.websocket.send(JSON.stringify(v)),setTimeout(()=>{if(this.pendingResponses[s])this.pendingResponses[s].reject(W.timeout(y,u)),delete this.pendingResponses[s]},u)})}async subscribe(y){let t=y?.toLowerCase();if(!this.websocketConnected)await this.connect();let u=Iy.create(),s=JSON.stringify(t?{address:t}:{}),v=(await this.sendMessage("eth_subscribe",["circles",s])).result;if(!this.subscriptionListeners[v])this.subscriptionListeners[v]=[];return this.subscriptionListeners[v].push((b)=>{Su(b).forEach((S)=>u.emit(S))}),u.property}}var yy=BigInt(4294967295),_y=BigInt(32);function Xu(y,t=!1){if(t)return{h:Number(y&yy),l:Number(y>>_y&yy)};return{h:Number(y>>_y&yy)|0,l:Number(y&yy)|0}}function hu(y,t=!1){let u=y.length,s=new Uint32Array(u),v=new Uint32Array(u);for(let b=0;b<u;b++){let{h:S,l:X}=Xu(y[b],t);[s[b],v[b]]=[S,X]}return[s,v]}var Du=(y,t,u)=>y<<u|t>>>32-u,Nu=(y,t,u)=>t<<u|y>>>32-u,iu=(y,t,u)=>t<<u-32|y>>>64-u,mu=(y,t,u)=>y<<u-32|t>>>64-u;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function Mu(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function ny(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function ty(y,...t){if(!Mu(y))throw Error("Uint8Array expected");if(t.length>0&&!t.includes(y.length))throw Error("Uint8Array expected of length "+t+", got length="+y.length)}function ey(y,t=!0){if(y.destroyed)throw Error("Hash instance has been destroyed");if(t&&y.finished)throw Error("Hash#digest() has already been called")}function Pu(y,t){ty(y);let u=t.outputLen;if(y.length<u)throw Error("digestInto() expects output buffer of length at least "+u)}function Uu(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function oy(...y){for(let t=0;t<y.length;t++)y[t].fill(0)}var ju=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function ku(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function Eu(y){for(let t=0;t<y.length;t++)y[t]=ku(y[t]);return y}var dy=ju?(y)=>y:Eu;function Iu(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function Zy(y){if(typeof y==="string")y=Iu(y);return ty(y),y}class qy{}function xu(y){let t=(s)=>y().update(Zy(s)).digest(),u=y();return t.outputLen=u.outputLen,t.blockLen=u.blockLen,t.create=()=>y(),t}var Cu=BigInt(0),d=BigInt(1),Au=BigInt(2),Vu=BigInt(7),Ku=BigInt(256),Wu=BigInt(113),By=[],ry=[],zy=[];for(let y=0,t=d,u=1,s=0;y<24;y++){[u,s]=[s,(2*u+3*s)%5],By.push(2*(5*s+u)),ry.push((y+1)*(y+2)/2%64);let v=Cu;for(let b=0;b<7;b++)if(t=(t<<d^(t>>Vu)*Wu)%Ku,t&Au)v^=d<<(d<<BigInt(b))-d;zy.push(v)}var Jy=hu(zy,!0),Hu=Jy[0],gu=Jy[1],$y=(y,t,u)=>u>32?iu(y,t,u):Du(y,t,u),Oy=(y,t,u)=>u>32?mu(y,t,u):Nu(y,t,u);function Lu(y,t=24){let u=new Uint32Array(10);for(let s=24-t;s<24;s++){for(let S=0;S<10;S++)u[S]=y[S]^y[S+10]^y[S+20]^y[S+30]^y[S+40];for(let S=0;S<10;S+=2){let X=(S+8)%10,h=(S+2)%10,D=u[h],N=u[h+1],M=$y(D,N,1)^u[X],U=Oy(D,N,1)^u[X+1];for(let i=0;i<50;i+=10)y[S+i]^=M,y[S+i+1]^=U}let v=y[2],b=y[3];for(let S=0;S<24;S++){let X=ry[S],h=$y(v,b,X),D=Oy(v,b,X),N=By[S];v=y[N],b=y[N+1],y[N]=h,y[N+1]=D}for(let S=0;S<50;S+=10){for(let X=0;X<10;X++)u[X]=y[S+X];for(let X=0;X<10;X++)y[S+X]^=~u[(X+2)%10]&u[(X+4)%10]}y[0]^=Hu[s],y[1]^=gu[s]}oy(u)}class xy extends qy{constructor(y,t,u,s=!1,v=24){super();if(this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=y,this.suffix=t,this.outputLen=u,this.enableXOF=s,this.rounds=v,ny(u),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=Uu(this.state)}clone(){return this._cloneInto()}keccak(){dy(this.state32),Lu(this.state32,this.rounds),dy(this.state32),this.posOut=0,this.pos=0}update(y){ey(this),y=Zy(y),ty(y);let{blockLen:t,state:u}=this,s=y.length;for(let v=0;v<s;){let b=Math.min(t-this.pos,s-v);for(let S=0;S<b;S++)u[this.pos++]^=y[v++];if(this.pos===t)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:t,pos:u,blockLen:s}=this;if(y[u]^=t,(t&128)!==0&&u===s-1)this.keccak();y[s-1]^=128,this.keccak()}writeInto(y){ey(this,!1),ty(y),this.finish();let t=this.state,{blockLen:u}=this;for(let s=0,v=y.length;s<v;){if(this.posOut>=u)this.keccak();let b=Math.min(u-this.posOut,v-s);y.set(t.subarray(this.posOut,this.posOut+b),s),this.posOut+=b,s+=b}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return ny(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(Pu(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,oy(this.state)}_cloneInto(y){let{blockLen:t,suffix:u,outputLen:s,rounds:v,enableXOF:b}=this;return y||(y=new xy(t,u,s,b,v)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=v,y.suffix=u,y.outputLen=s,y.enableXOF=b,y.destroyed=this.destroyed,y}}var fu=(y,t,u)=>xu(()=>new xy(t,y,u)),cu=(()=>fu(1,136,32))(),yt=[];for(let y=0;y<256;y++)yt[y]=y.toString(16).padStart(2,"0");function pu(y){let t="0x";for(let u=0;u<y.length;u++)t+=yt[y[u]];return t}function Fu(y){let t=y.toLowerCase().replace("0x",""),u=pu(cu(new TextEncoder().encode(t))).slice(2),s="0x";for(let v=0;v<t.length;v++)s+=parseInt(u[v],16)>=8?t[v].toUpperCase():t[v];return s}function m(y){return y.toLowerCase()}function Qu(y){return Fu(y)}function Tu(y){if(typeof y!=="string")return!1;let t=y.replace("0x","");return t.length===40&&/^[0-9a-fA-F]{40}$/.test(t)}function E(y){if(y===null||y===void 0)return y;if(Tu(y))return Qu(y);if(Array.isArray(y))return y.map((t)=>E(t));if(typeof y==="object"&&y!==null){let t={};for(let u in y)if(Object.prototype.hasOwnProperty.call(y,u))t[u]=E(y[u]);return t}return y}function lu(y){return{Source:m(y.from),Sink:m(y.to),TargetFlow:y.targetFlow.toString(),WithWrap:y.useWrappedBalances,FromTokens:y.fromTokens?.map(m),ToTokens:y.toTokens?.map(m),ExcludedFromTokens:y.excludeFromTokens?.map(m),ExcludedToTokens:y.excludeToTokens?.map(m),SimulatedBalances:y.simulatedBalances?.map((t)=>({Holder:m(t.holder),Token:m(t.token),Amount:t.amount.toString(),IsWrapped:t.isWrapped,IsStatic:t.isStatic})),SimulatedTrusts:y.simulatedTrusts?.map((t)=>({Truster:m(t.truster),Trustee:m(t.trustee)})),MaxTransfers:y.maxTransfers}}function O(y){let t={};for(let u in y){let s=y[u];if(s===null||s===void 0)t[u]=s;else if(typeof s==="string"&&/^\d+$/.test(s))t[u]=BigInt(s);else if(typeof s==="object"&&!Array.isArray(s))t[u]=O(s);else if(Array.isArray(s))t[u]=s.map((v)=>typeof v==="object"&&v!==null?O(v):v);else t[u]=s}return t}var s6=BigInt(96)*BigInt(1000000000000000000),wu=BigInt("9999999999999999999999999999999999999");class tt{client;constructor(y){this.client=y}async findPath(y){let t=lu(y),u=await this.client.call("circlesV2_findPath",[t]),s=O(u);return E(s)}async findMaxFlow(y){let t=await this.findPath({...y,targetFlow:wu});return BigInt(t.maxFlow)}}class ut{client;constructor(y){this.client=y}async query(y){let t=await this.client.call("circles_query",[y]);return E(t)}async tables(){return this.client.call("circles_tables",[])}async events(y,t,u=null,s=null,v=!1){let b=await this.client.call("circles_events",[y,t,u,s,v]);return E(b)}}var Yu=[{name:"blockNumber",sortOrder:"DESC"},{name:"transactionIndex",sortOrder:"DESC"},{name:"logIndex",sortOrder:"DESC"}];class l{params;client;rowTransformer;cursorColumns;orderColumns;get currentPage(){return this._currentPage}_currentPage;constructor(y,t,u){this.client=y,this.params=t,this.rowTransformer=u||t.rowTransformer,this.orderColumns=t.orderColumns,this.cursorColumns=t.cursorColumns||this.buildEventCursorColumns()}buildEventCursorColumns(){let y=Yu.map((t)=>({...t,sortOrder:this.params.sortOrder}));if(this.params.table==="TransferBatch")y.push({name:"batchIndex",sortOrder:this.params.sortOrder});return y}transformCursorValue(y,t){if(t)return t(y);if(typeof y==="bigint")return y.toString();return y}createEqualityPredicate(y,t){return{Type:"FilterPredicate",FilterType:"Equals",Column:y.name,Value:this.transformCursorValue(t,y.toValue)}}createComparisonPredicate(y,t){return{Type:"FilterPredicate",FilterType:y.sortOrder==="ASC"?"GreaterThan":"LessThan",Column:y.name,Value:this.transformCursorValue(t,y.toValue)}}buildCursorFilter(y){if(!y)return[];let t=[];for(let u=0;u<this.cursorColumns.length;u++){let s=this.cursorColumns[u],v=y[s.name];if(v===void 0)continue;if(u===0)t.push(this.createComparisonPredicate(s,v));else{let b=[];for(let S=0;S<u;S++){let X=this.cursorColumns[S],h=y[X.name];if(h!==void 0)b.push(this.createEqualityPredicate(X,h))}b.push(this.createComparisonPredicate(s,v)),t.push({Type:"Conjunction",ConjunctionType:"And",Predicates:b})}}if(t.length===0)return[];return[{Type:"Conjunction",ConjunctionType:"Or",Predicates:t}]}buildOrderBy(){if(this.orderColumns&&this.orderColumns.length>0)return this.orderColumns;return this.cursorColumns.map((y)=>({Column:y.name,SortOrder:y.sortOrder}))}combineFilters(y,t){if(!y?.length&&!t?.length)return[];if(!y?.length)return t||[];if(!t?.length)return y;return[{Type:"Conjunction",ConjunctionType:"And",Predicates:[...y,...t]}]}rowsToObjects(y){let{columns:t,rows:u}=y;return u.map((s)=>{let v={};return t.forEach((b,S)=>{v[b]=s[S]}),this.rowTransformer?this.rowTransformer(v):v})}rowToCursor(y){let t={};for(let u of this.cursorColumns)t[u.name]=y[u.name];return t}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),t=this.combineFilters(this.params.filter,y),u={Namespace:this.params.namespace,Table:this.params.table,Columns:this.params.columns,Filter:t,Order:this.buildOrderBy(),Limit:this.params.limit},s=await this.client.call("circles_query",[u]),v=this.rowsToObjects(s),b=this.getCursors(v);return this._currentPage={limit:this.params.limit,size:v.length,firstCursor:b.first,lastCursor:b.last,sortOrder:this.params.sortOrder,hasMore:v.length===this.params.limit,results:v},v.length>0}reset(){this._currentPage=void 0}}class st{client;constructor(y){this.client=y}transformQueryResponse(y){let{columns:t,rows:u}=y;return u.map((s)=>{let v={};return t.forEach((b,S)=>{v[b]=s[S]}),v})}async getCommonTrust(y,t){let u=await this.client.call("circles_getCommonTrust",[m(y),m(t)]);return E(u)}getTrustRelations(y,t=100,u="DESC"){let s=m(y),v=[{Type:"Conjunction",ConjunctionType:"And",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"version",Value:2},{Type:"Conjunction",ConjunctionType:"Or",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"trustee",Value:s},{Type:"FilterPredicate",FilterType:"Equals",Column:"truster",Value:s}]}]}];return new l(this.client,{namespace:"V_Crc",table:"TrustRelations",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","version","trustee","truster","expiryTime"],filter:v,limit:t},(b)=>E(b))}async getAggregatedTrustRelations(y){let t=m(y),u=this.getTrustRelations(t,1000),s=[];while(await u.queryNextPage())if(s.push(...u.currentPage.results),!u.currentPage.hasMore)break;let v={};s.forEach((S)=>{let X=m(S.truster),h=m(S.trustee),D=X!==t?S.truster:S.trustee;if(!v[D])v[D]=[];v[D].push(S)});let b=Object.entries(v).filter(([S])=>m(S)!==t).map(([S,X])=>{let h=Math.max(...X.map((N)=>N.timestamp)),D;if(X.length===2)D="mutuallyTrusts";else if(m(X[0]?.trustee)===t)D="trustedBy";else if(m(X[0]?.truster)===t)D="trusts";else throw Error("Unexpected trust list row. Couldn't determine trust relation.");return{subjectAvatar:t,relation:D,objectAvatar:S,timestamp:h}});return E(b)}async getTrustedBy(y){let t=m(y),u=(await this.getAggregatedTrustRelations(t)).filter((s)=>s.relation==="trustedBy");return E(u)}async getTrusts(y){let t=m(y),u=(await this.getAggregatedTrustRelations(t)).filter((s)=>s.relation==="trusts");return E(u)}async getMutualTrusts(y){let t=m(y),u=(await this.getAggregatedTrustRelations(t)).filter((s)=>s.relation==="mutuallyTrusts");return E(u)}}class Y{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,t){return y*t>>64n}static mulU(y,t){return y*t>>64n}static pow64(y,t){let u=y,s=t,v=this.ONE_64;while(s>0n){if((s&1n)===1n)v=this.mul64(v,u);u=this.mul64(u,u),s>>=1n}return v}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,t){return y*t/this.ONE_36}static pow36(y,t){let u=this.ONE_36,s=y,v=t;while(v>0n){if((v&1n)===1n)u=this.mul36(u,s);s=this.mul36(s,s),v>>=1n}return u}static attoCirclesToCircles(y){if(y===0n)return 0;let t=y/this.ATTO_FACTOR,u=y%this.ATTO_FACTOR,s=BigInt(Number.MAX_SAFE_INTEGER);if(t>s||t<-s)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(t)+Number(u)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,t){return this.mulU(this.pow64(this.GAMMA_64,t),y)}static demurrageToInflationary(y,t){return this.mulU(this.pow64(this.BETA_64,t),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(t))}static attoStaticCirclesToAttoCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(t))}static inflationaryToDemurrageExact(y,t){let u=this.pow36(this.GAMMA_36,t);return y*u/this.ONE_36}static demurrageToInflationaryExact(y,t){let u=this.pow36(this.BETA_36,t);return y*u/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.demurrageToInflationaryExact(y,u)}static attoStaticCirclesToAttoCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.inflationaryToDemurrageExact(y,u)}static truncateToInt64(y){let t=y/this.FACTOR_1E12,u=9223372036854775807n;return t>u?u:t}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,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,s=u/this.PERIOD_SEC,v=u%this.PERIOD_SEC,b=this.v1InflateFactor(s),S=this.v1InflateFactor(s+1n);return this.v1ToDemurrage(y,b,S,v,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,s=u/this.PERIOD_SEC,v=u%this.PERIOD_SEC,b=this.v1InflateFactor(s),S=this.v1InflateFactor(s+1n),X=b*(this.PERIOD_SEC-v)+S*v;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/X}static v1ToDemurrage(y,t,u,s,v){let b=t*(v-s)+u*s;return y*3n*this.V1_ACCURACY*v/b}}class vt{client;constructor(y){this.client=y}async getTotalBalance(y,t=!0){let u=await this.client.call("circlesV2_getTotalBalance",[m(y),t]);return Y.circlesToAttoCircles(u)}async getTokenBalances(y){let t=(await this.client.call("circles_getTokenBalances",[m(y)])).map((u)=>O(u));return E(t)}}class bt{client;constructor(y){this.client=y}async getAvatarInfo(y){let t=await this.getAvatarInfoBatch([y]);return t.length>0?t[0]:void 0}async getAvatarInfoBatch(y){if(y.length===0)return[];let t=y.map((s)=>m(s)),u=await this.client.call("circles_getAvatarInfoBatch",[t]);return E(u)}async getNetworkSnapshot(){let y=await this.client.call("circles_getNetworkSnapshot",[]);return E(y)}}class St{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",[m(y)])}async getProfileByAddressBatch(y){return this.client.call("circles_getProfileByAddressBatch",[y.map((t)=>t===null?null:m(t))])}async searchProfiles(y,t=10,u=0,s){return this.client.call("circles_searchProfiles",[y.toLowerCase(),t,u,s])}async searchByAddressOrName(y,t=10,u=0,s){let v=[],b=/^0x[a-fA-F0-9]{40}$/.test(y);if(b)try{let S=await this.getProfileByAddress(y);if(S){let X={...S,address:y};if(!s||!X.avatarType||s.includes(X.avatarType))v.push(X)}}catch(S){console.warn("Failed to get profile by address:",S)}try{let S=await this.searchProfiles(y,t,u,s);if(b&&v.length>0){let X=y.toLowerCase(),h=S.filter((D)=>D.address?.toLowerCase()!==X);v.push(...h)}else v.push(...S)}catch(S){console.warn("Failed to search profiles by text:",S)}return v.slice(0,t)}}class Xt{client;constructor(y){this.client=y}async getTokenInfo(y){let t=await this.getTokenInfoBatch([y]);return t.length>0?t[0]:void 0}async getTokenInfoBatch(y){if(y.length===0)return[];let t=y.map((s)=>m(s)),u=(await this.client.call("circles_getTokenInfoBatch",[t])).map((s)=>O(s));return E(u)}getTokenHolders(y,t=100,u="DESC"){let s=m(y);return new l(this.client,{namespace:"V_CrcV2",table:"BalancesByAccountAndToken",columns:["account","tokenAddress","demurragedTotalBalance"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"tokenAddress",Value:s}],cursorColumns:[{name:"demurragedTotalBalance",sortOrder:u},{name:"account",sortOrder:"ASC"}],orderColumns:[{Column:"demurragedTotalBalance",SortOrder:u},{Column:"account",SortOrder:"ASC"}],limit:t,sortOrder:u},(v)=>({account:v.account,tokenAddress:v.tokenAddress,demurragedTotalBalance:v.demurragedTotalBalance}))}}class ht{client;constructor(y){this.client=y}transformQueryResponse(y){let{columns:t,rows:u}=y;return u.map((s)=>{let v={};return t.forEach((b,S)=>{v[b]=s[S]}),v})}async getInvitedBy(y){let t=m(y),u=await this.client.call("circles_query",[{Namespace:"CrcV2",Table:"RegisterHuman",Columns:["inviter"],Filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"avatar",Value:t}],Order:[{Column:"blockNumber",SortOrder:"DESC"}],Limit:1}]);if(u.length>0)return E(u[0].inviter);return}async getInvitations(y){let t=m(y),u=96,s=await this.client.call("circles_getAvatarInfoBatch",[[t]]);if((s.length>0?s[0]:void 0)?.version===2)return[];let v=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:t}]}],Order:[]}]),b=this.transformQueryResponse(v).map((h)=>h.truster);if(b.length===0)return[];let S=await this.client.call("circles_getAvatarInfoBatch",[b]),X=[];for(let h of S){if(!h?.isHuman)continue;let D=(await this.client.call("circles_getTokenBalances",[h.avatar])).find((N)=>m(N.tokenAddress)===m(h.avatar));if(D&&D.circles>=96)X.push(h)}return E(X)}async getInvitationsFrom(y,t=!1){let u=m(y);if(t){let s=await this.client.call("circles_query",[{Namespace:"CrcV2",Table:"RegisterHuman",Columns:["avatar"],Filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"inviter",Value:u}],Order:[{Column:"blockNumber",SortOrder:"DESC"}]}]),v=this.transformQueryResponse(s).map((b)=>b.avatar);return E(v)}else{let s=await this.client.call("circles_query",[{Namespace:"V_Crc",Table:"TrustRelations",Columns:["trustee","truster"],Filter:[{Type:"Conjunction",ConjunctionType:"And",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"version",Value:2},{Type:"FilterPredicate",FilterType:"Equals",Column:"truster",Value:u}]}],Order:[]}]),v=this.transformQueryResponse(s).map((h)=>h.trustee);if(v.length===0)return[];let b=await this.client.call("circles_getAvatarInfoBatch",[v]),S=new Set(b.filter((h)=>h!==null).map((h)=>m(h.avatar))),X=v.filter((h)=>!S.has(m(h)));return E(X)}}}function _u(y,t){let u=BigInt(y),s=Y.attoCirclesToCircles(u),v=Y.attoCirclesToAttoCrc(u,BigInt(t)),b=Y.attoCirclesToCircles(v),S=Y.attoCirclesToAttoStaticCircles(u,BigInt(t)),X=Y.attoCirclesToCircles(S);return{attoCircles:u,circles:s,staticAttoCircles:S,staticCircles:X,attoCrc:v,crc:b}}class Dt{client;constructor(y){this.client=y}getTransactionHistory(y,t=50,u="DESC"){let s=m(y),v=[{Type:"Conjunction",ConjunctionType:"And",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"version",Value:2},{Type:"Conjunction",ConjunctionType:"Or",Predicates:[{Type:"FilterPredicate",FilterType:"Equals",Column:"from",Value:s},{Type:"FilterPredicate",FilterType:"Equals",Column:"to",Value:s}]}]}];return new l(this.client,{namespace:"V_Crc",table:"TransferSummary",sortOrder:u,columns:[],filter:v,limit:t},(b)=>{let S=_u(b.value,b.timestamp),X={...b,...S};return E(X)})}}class Nt{client;constructor(y){this.client=y}async findGroups(y=50,t){let u=this.getGroups(y,t,"DESC"),s=[];while(await u.queryNextPage()){if(s.push(...u.currentPage.results),s.length>=y)break;if(!u.currentPage.hasMore)break}return s.slice(0,y)}getGroupMemberships(y,t=50,u="DESC"){let s=m(y);return new l(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"member",Value:s}],limit:t},(v)=>E(v))}getGroupHolders(y,t=100){let u=m(y);return new l(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:u}],limit:t,rowTransformer:(s)=>{let v={...s,totalBalance:BigInt(s.totalBalance),demurragedTotalBalance:BigInt(s.demurragedTotalBalance)};return E(v)}})}getGroupMembers(y,t=100,u="DESC"){let s=m(y);return new l(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:s}],limit:t},(v)=>E(v))}getGroups(y=50,t,u="DESC"){let s=[];if(t){if(t.nameStartsWith)s.push({Type:"FilterPredicate",FilterType:"Like",Column:"name",Value:t.nameStartsWith+"%"});if(t.symbolStartsWith)s.push({Type:"FilterPredicate",FilterType:"Like",Column:"symbol",Value:t.symbolStartsWith+"%"});if(t.groupAddressIn&&t.groupAddressIn.length>0){let b=t.groupAddressIn.map((S)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:m(S)}));if(b.length===1)s.push(b[0]);else s.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:b})}if(t.groupTypeIn&&t.groupTypeIn.length>0){let b=t.groupTypeIn.map((S)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"type",Value:S}));if(b.length===1)s.push(b[0]);else s.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:b})}if(t.ownerIn&&t.ownerIn.length>0){let b=t.ownerIn.map((S)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"owner",Value:m(S)}));if(b.length===1)s.push(b[0]);else s.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:b})}if(t.mintHandlerEquals)s.push({Type:"FilterPredicate",FilterType:"Equals",Column:"mintHandler",Value:m(t.mintHandlerEquals)});if(t.treasuryEquals)s.push({Type:"FilterPredicate",FilterType:"Equals",Column:"treasury",Value:m(t.treasuryEquals)})}let v=s.length>1?[{Type:"Conjunction",ConjunctionType:"And",Predicates:s}]:s;return new l(this.client,{namespace:"V_CrcV2",table:"Groups",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","type","owner","mintPolicy","mintHandler","treasury","service","feeCollection","memberCount","name","symbol","cidV0Digest","erc20WrapperDemurraged","erc20WrapperStatic"],filter:v,limit:y},(b)=>E(b))}}class it{client;_pathfinder;_query;_trust;_balance;_avatar;_profile;_token;_invitation;_transaction;_group;constructor(y="https://rpc.circlesubi.network/"){this.client=new Gy(y)}get pathfinder(){if(!this._pathfinder)this._pathfinder=new tt(this.client);return this._pathfinder}get query(){if(!this._query)this._query=new ut(this.client);return this._query}get trust(){if(!this._trust)this._trust=new st(this.client);return this._trust}get balance(){if(!this._balance)this._balance=new vt(this.client);return this._balance}get avatar(){if(!this._avatar)this._avatar=new bt(this.client);return this._avatar}get profile(){if(!this._profile)this._profile=new St(this.client);return this._profile}get token(){if(!this._token)this._token=new Xt(this.client);return this._token}get invitation(){if(!this._invitation)this._invitation=new ht(this.client);return this._invitation}get transaction(){if(!this._transaction)this._transaction=new Dt(this.client);return this._transaction}get group(){if(!this._group)this._group=new Nt(this.client);return this._group}setRpcUrl(y){this.client.setRpcUrl(y)}getRpcUrl(){return this.client.getRpcUrl()}}class nu{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,t){return y*t>>64n}static mulU(y,t){return y*t>>64n}static pow64(y,t){let u=y,s=t,v=this.ONE_64;while(s>0n){if((s&1n)===1n)v=this.mul64(v,u);u=this.mul64(u,u),s>>=1n}return v}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,t){return y*t/this.ONE_36}static pow36(y,t){let u=this.ONE_36,s=y,v=t;while(v>0n){if((v&1n)===1n)u=this.mul36(u,s);s=this.mul36(s,s),v>>=1n}return u}static attoCirclesToCircles(y){if(y===0n)return 0;let t=y/this.ATTO_FACTOR,u=y%this.ATTO_FACTOR,s=BigInt(Number.MAX_SAFE_INTEGER);if(t>s||t<-s)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(t)+Number(u)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,t){return this.mulU(this.pow64(this.GAMMA_64,t),y)}static demurrageToInflationary(y,t){return this.mulU(this.pow64(this.BETA_64,t),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(t))}static attoStaticCirclesToAttoCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(t))}static inflationaryToDemurrageExact(y,t){let u=this.pow36(this.GAMMA_36,t);return y*u/this.ONE_36}static demurrageToInflationaryExact(y,t){let u=this.pow36(this.BETA_36,t);return y*u/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.demurrageToInflationaryExact(y,u)}static attoStaticCirclesToAttoCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.inflationaryToDemurrageExact(y,u)}static truncateToInt64(y){let t=y/this.FACTOR_1E12,u=9223372036854775807n;return t>u?u:t}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,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,s=u/this.PERIOD_SEC,v=u%this.PERIOD_SEC,b=this.v1InflateFactor(s),S=this.v1InflateFactor(s+1n);return this.v1ToDemurrage(y,b,S,v,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,s=u/this.PERIOD_SEC,v=u%this.PERIOD_SEC,b=this.v1InflateFactor(s),S=this.v1InflateFactor(s+1n),X=b*(this.PERIOD_SEC-v)+S*v;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/X}static v1ToDemurrage(y,t,u,s,v){let b=t*(v-s)+u*s;return y*3n*this.V1_ACCURACY*v/b}}async function Cy(y,t,u){let s=new Map,v=new Set;return u.transfers.forEach((b)=>{if(y.toLowerCase()===b.from.toLowerCase())v.add(b.tokenOwner.toLowerCase())}),(await new it(t).token.getTokenInfoBatch(Array.from(v))).forEach((b)=>{if(b.isWrapped&&!b.isInflationary)b.tokenType="CrcV2_ERC20WrapperDeployed_Demurraged";s.set(b.tokenAddress.toLowerCase(),b)}),s}function Ay(y,t){let u={};return y.transfers.forEach((s)=>{let v=t.get(s.tokenOwner.toLowerCase());if(v&&v.tokenType.startsWith("CrcV2_ERC20WrapperDeployed")){if(!u[s.tokenOwner])u[s.tokenOwner]=[BigInt(0),v.tokenType];u[s.tokenOwner][0]+=BigInt(s.value)}}),u}function Vy(y,t){let u=y.transfers.map((s)=>{let v=t.get(s.tokenOwner.toLowerCase());if(v&&v.tokenType.startsWith("CrcV2_ERC20WrapperDeployed"))return{...s,tokenOwner:v.tokenOwner};return s});return{...y,transfers:u}}var mt=(y)=>BigInt(y),R=(y)=>parseInt(y,16),eu=(y)=>{if(y.startsWith("0x"))y=y.slice(2);if(y.length%2!==0)throw Error("Invalid hex string");let t=new Uint8Array(y.length/2);for(let u=0;u<y.length;u+=2)t[u/2]=parseInt(y.substr(u,2),16);return t};function du(y,t){if(typeof t==="string"&&t.startsWith("0x")){let u=t.slice(2);if(u.length===40)return t;if(u.length===64){if(y.toLowerCase().includes("digest")||y.toLowerCase().includes("data")||y.toLowerCase().includes("bytes"))return eu(t);try{return mt(t)}catch{return t}}try{let s=R(t);if(s<Number.MAX_SAFE_INTEGER)return s;return mt(t)}catch{return t}}if(t==="true")return!0;if(t==="false")return!1;return t}function $u(y){let{event:t,values:u}=y,s={$event:t,blockNumber:u.blockNumber?R(u.blockNumber):0,timestamp:u.timestamp?R(u.timestamp):void 0,transactionIndex:u.transactionIndex?R(u.transactionIndex):0,logIndex:u.logIndex?R(u.logIndex):0,transactionHash:u.transactionHash};for(let[v,b]of Object.entries(u)){if(["blockNumber","timestamp","transactionIndex","logIndex","transactionHash"].includes(v))continue;s[v]=du(v,b)}return s}function Ou(y){return y.map($u)}class Ky{_subscribers=[];subscribe(y){return this._subscribers.push(y),()=>{let t=this._subscribers.indexOf(y);if(t>-1)this._subscribers.splice(t,1)}}constructor(){this._subscribers=[]}emit(y){this._subscribers.forEach((t)=>t(y))}static create(){let y=new Ky;return{property:y,emit:(t)=>y.emit(t)}}}class It extends Error{name;code;source;cause;context;constructor(y,t,u){super(t);if(this.name=y,this.code=u?.code,this.source=u?.source??"UNKNOWN",this.cause=u?.cause,this.context=u?.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 It{constructor(y,t){super("RpcError",y,{...t,source:t?.source??"RPC_REQUEST"})}static connectionFailed(y,t){return new H("Failed to connect to RPC endpoint",{code:"RPC_CONNECTION_FAILED",source:"RPC_CONNECTION",cause:t,context:{url:y}})}static timeout(y,t){return new H("RPC request timed out",{code:"RPC_TIMEOUT",source:"RPC_TIMEOUT",context:{method:y,timeout:t}})}static invalidResponse(y,t){return new H("Invalid RPC response",{code:"RPC_INVALID_RESPONSE",source:"RPC_RESPONSE",context:{method:y,response:t}})}static fromJsonRpcError(y){return new H(y.message,{code:y.code,source:"RPC_RESPONSE",context:{data:y.data}})}static websocketError(y,t){return new H(y,{code:"RPC_WEBSOCKET_ERROR",source:"RPC_WEBSOCKET",cause:t})}}class Wy{rpcUrl;requestId=0;websocket=null;websocketConnected=!1;pendingResponses={};subscriptionListeners={};reconnectAttempt=0;initialBackoff=2000;maxBackoff=120000;constructor(y){this.rpcUrl=y}async call(y,t){this.requestId++;let u={jsonrpc:"2.0",id:this.requestId,method:y,params:t};try{let s=await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});if(!s.ok)throw H.connectionFailed(this.rpcUrl,Error(`HTTP ${s.status}: ${s.statusText}`));let v=await s.json();if(v.error)throw H.fromJsonRpcError(v.error);if(v.result===void 0)throw H.invalidResponse(y,v);return v.result}catch(s){if(s instanceof H)throw s;throw H.connectionFailed(this.rpcUrl,s)}}setRpcUrl(y){this.rpcUrl=y}getRpcUrl(){return this.rpcUrl}connect(){return new Promise((y)=>{let t=this.rpcUrl.replace("http","ws");if(t.endsWith("/"))t+="ws";else t+="/ws";this.websocket=new WebSocket(t),this.websocket.onopen=()=>{console.log("WebSocket connected"),this.websocketConnected=!0,this.reconnectAttempt=0,y()},this.websocket.onmessage=(u)=>{let s=JSON.parse(u.data),{id:v,method:b,params:S}=s;if(v!==void 0&&this.pendingResponses[v])this.pendingResponses[v].resolve(s),delete this.pendingResponses[v];if(b==="eth_subscription"&&S){let{subscription:X,result:h}=S;if(this.subscriptionListeners[X])this.subscriptionListeners[X].forEach((D)=>D(h))}},this.websocket.onclose=()=>{console.warn("WebSocket closed"),this.websocketConnected=!1},this.websocket.onerror=(u)=>{console.error("WebSocket error:",u),this.websocketConnected=!1,this.scheduleReconnect()}})}scheduleReconnect(){let y=Math.min(this.initialBackoff*Math.pow(2,this.reconnectAttempt),this.maxBackoff),t=y*(Math.random()*0.5),u=y+t;console.log(`Reconnecting in ${Math.round(u)}ms (attempt #${this.reconnectAttempt+1})`),this.reconnectAttempt++,setTimeout(()=>{this.reconnect()},u)}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,t,u=5000){if(!this.websocket||this.websocket.readyState!==WebSocket.OPEN)return Promise.reject(H.connectionFailed(this.rpcUrl));let s=this.requestId++,v={jsonrpc:"2.0",method:y,params:t,id:s};return new Promise((b,S)=>{this.pendingResponses[s]={resolve:b,reject:S},this.websocket.send(JSON.stringify(v)),setTimeout(()=>{if(this.pendingResponses[s])this.pendingResponses[s].reject(H.timeout(y,u)),delete this.pendingResponses[s]},u)})}async subscribe(y){let t=y?.toLowerCase();if(!this.websocketConnected)await this.connect();let u=Ky.create(),s=JSON.stringify(t?{address:t}:{}),v=(await this.sendMessage("eth_subscribe",["circles",s])).result;if(!this.subscriptionListeners[v])this.subscriptionListeners[v]=[];return this.subscriptionListeners[v].push((b)=>{Ou(b).forEach((S)=>u.emit(S))}),u.property}}var uy=BigInt(4294967295),Mt=BigInt(32);function au(y,t=!1){if(t)return{h:Number(y&uy),l:Number(y>>Mt&uy)};return{h:Number(y>>Mt&uy)|0,l:Number(y&uy)|0}}function Ru(y,t=!1){let u=y.length,s=new Uint32Array(u),v=new Uint32Array(u);for(let b=0;b<u;b++){let{h:S,l:X}=au(y[b],t);[s[b],v[b]]=[S,X]}return[s,v]}var Gu=(y,t,u)=>y<<u|t>>>32-u,ou=(y,t,u)=>t<<u|y>>>32-u,Zu=(y,t,u)=>t<<u-32|y>>>64-u,qu=(y,t,u)=>y<<u-32|t>>>64-u;/*! 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 Pt(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function sy(y,...t){if(!Bu(y))throw Error("Uint8Array expected");if(t.length>0&&!t.includes(y.length))throw Error("Uint8Array expected of length "+t+", got length="+y.length)}function Ut(y,t=!0){if(y.destroyed)throw Error("Hash instance has been destroyed");if(t&&y.finished)throw Error("Hash#digest() has already been called")}function ru(y,t){sy(y);let u=t.outputLen;if(y.length<u)throw Error("digestInto() expects output buffer of length at least "+u)}function zu(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function xt(...y){for(let t=0;t<y.length;t++)y[t].fill(0)}var Ju=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function y0(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function t0(y){for(let t=0;t<y.length;t++)y[t]=y0(y[t]);return y}var jt=Ju?(y)=>y:t0;function u0(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function Ct(y){if(typeof y==="string")y=u0(y);return sy(y),y}class At{}function s0(y){let t=(s)=>y().update(Ct(s)).digest(),u=y();return t.outputLen=u.outputLen,t.blockLen=u.blockLen,t.create=()=>y(),t}var v0=BigInt(0),a=BigInt(1),b0=BigInt(2),S0=BigInt(7),X0=BigInt(256),h0=BigInt(113),Vt=[],Kt=[],Wt=[];for(let y=0,t=a,u=1,s=0;y<24;y++){[u,s]=[s,(2*u+3*s)%5],Vt.push(2*(5*s+u)),Kt.push((y+1)*(y+2)/2%64);let v=v0;for(let b=0;b<7;b++)if(t=(t<<a^(t>>S0)*h0)%X0,t&b0)v^=a<<(a<<BigInt(b))-a;Wt.push(v)}var Ht=Ru(Wt,!0),D0=Ht[0],N0=Ht[1],kt=(y,t,u)=>u>32?Zu(y,t,u):Gu(y,t,u),Et=(y,t,u)=>u>32?qu(y,t,u):ou(y,t,u);function i0(y,t=24){let u=new Uint32Array(10);for(let s=24-t;s<24;s++){for(let S=0;S<10;S++)u[S]=y[S]^y[S+10]^y[S+20]^y[S+30]^y[S+40];for(let S=0;S<10;S+=2){let X=(S+8)%10,h=(S+2)%10,D=u[h],N=u[h+1],M=kt(D,N,1)^u[X],U=Et(D,N,1)^u[X+1];for(let i=0;i<50;i+=10)y[S+i]^=M,y[S+i+1]^=U}let v=y[2],b=y[3];for(let S=0;S<24;S++){let X=Kt[S],h=kt(v,b,X),D=Et(v,b,X),N=Vt[S];v=y[N],b=y[N+1],y[N]=h,y[N+1]=D}for(let S=0;S<50;S+=10){for(let X=0;X<10;X++)u[X]=y[S+X];for(let X=0;X<10;X++)y[S+X]^=~u[(X+2)%10]&u[(X+4)%10]}y[0]^=D0[s],y[1]^=N0[s]}xt(u)}class Hy extends At{constructor(y,t,u,s=!1,v=24){super();if(this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=y,this.suffix=t,this.outputLen=u,this.enableXOF=s,this.rounds=v,Pt(u),!(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(){jt(this.state32),i0(this.state32,this.rounds),jt(this.state32),this.posOut=0,this.pos=0}update(y){Ut(this),y=Ct(y),sy(y);let{blockLen:t,state:u}=this,s=y.length;for(let v=0;v<s;){let b=Math.min(t-this.pos,s-v);for(let S=0;S<b;S++)u[this.pos++]^=y[v++];if(this.pos===t)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:t,pos:u,blockLen:s}=this;if(y[u]^=t,(t&128)!==0&&u===s-1)this.keccak();y[s-1]^=128,this.keccak()}writeInto(y){Ut(this,!1),sy(y),this.finish();let t=this.state,{blockLen:u}=this;for(let s=0,v=y.length;s<v;){if(this.posOut>=u)this.keccak();let b=Math.min(u-this.posOut,v-s);y.set(t.subarray(this.posOut,this.posOut+b),s),this.posOut+=b,s+=b}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return Pt(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,xt(this.state)}_cloneInto(y){let{blockLen:t,suffix:u,outputLen:s,rounds:v,enableXOF:b}=this;return y||(y=new Hy(t,u,s,b,v)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=v,y.suffix=u,y.outputLen=s,y.enableXOF=b,y.destroyed=this.destroyed,y}}var m0=(y,t,u)=>s0(()=>new Hy(t,y,u)),M0=(()=>m0(1,136,32))(),gt=[];for(let y=0;y<256;y++)gt[y]=y.toString(16).padStart(2,"0");function P0(y){let t="0x";for(let u=0;u<y.length;u++)t+=gt[y[u]];return t}function U0(y){let t=y.toLowerCase().replace("0x",""),u=P0(M0(new TextEncoder().encode(t))).slice(2),s="0x";for(let v=0;v<t.length;v++)s+=parseInt(u[v],16)>=8?t[v].toUpperCase():t[v];return s}function C(y){return y.toLowerCase()}function j0(y){return U0(y)}function k0(y){if(typeof y!=="string")return!1;let t=y.replace("0x","");return t.length===40&&/^[0-9a-fA-F]{40}$/.test(t)}function w(y){if(y===null||y===void 0)return y;if(k0(y))return j0(y);if(Array.isArray(y))return y.map((t)=>w(t));if(typeof y==="object"&&y!==null){let t={};for(let u in y)if(Object.prototype.hasOwnProperty.call(y,u))t[u]=w(y[u]);return t}return y}function E0(y){return{Source:C(y.from),Sink:C(y.to),TargetFlow:y.targetFlow.toString(),WithWrap:y.useWrappedBalances,FromTokens:y.fromTokens?.map(C),ToTokens:y.toTokens?.map(C),ExcludedFromTokens:y.excludeFromTokens?.map(C),ExcludedToTokens:y.excludeToTokens?.map(C),SimulatedBalances:y.simulatedBalances?.map((t)=>({Holder:C(t.holder),Token:C(t.token),Amount:t.amount.toString(),IsWrapped:t.isWrapped,IsStatic:t.isStatic})),SimulatedTrusts:y.simulatedTrusts?.map((t)=>({Truster:C(t.truster),Trustee:C(t.trustee)})),MaxTransfers:y.maxTransfers}}function vy(y){let t={};for(let u in y){let s=y[u];if(s===null||s===void 0)t[u]=s;else if(typeof s==="string"&&/^\d+$/.test(s))t[u]=BigInt(s);else if(typeof s==="object"&&!Array.isArray(s))t[u]=vy(s);else if(Array.isArray(s))t[u]=s.map((v)=>typeof v==="object"&&v!==null?vy(v):v);else t[u]=s}return t}var b6=BigInt(96)*BigInt(1000000000000000000),I0=BigInt("9999999999999999999999999999999999999");class gy{client;constructor(y){this.client=y}async findPath(y){let t=E0(y),u=await this.client.call("circlesV2_findPath",[t]),s=vy(u);return w(s)}async findMaxFlow(y){let t=await this.findPath({...y,targetFlow:I0});return BigInt(t.maxFlow)}}var x0=[{name:"blockNumber",sortOrder:"DESC"},{name:"transactionIndex",sortOrder:"DESC"},{name:"logIndex",sortOrder:"DESC"}];class G{params;client;rowTransformer;cursorColumns;orderColumns;get currentPage(){return this._currentPage}_currentPage;constructor(y,t,u){this.client=y,this.params=t,this.rowTransformer=u||t.rowTransformer,this.orderColumns=t.orderColumns,this.cursorColumns=t.cursorColumns||this.buildEventCursorColumns()}buildEventCursorColumns(){let y=x0.map((t)=>({...t,sortOrder:this.params.sortOrder}));if(this.params.table==="TransferBatch")y.push({name:"batchIndex",sortOrder:this.params.sortOrder});return y}transformCursorValue(y,t){if(t)return t(y);if(typeof y==="bigint")return y.toString();return y}createEqualityPredicate(y,t){return{Type:"FilterPredicate",FilterType:"Equals",Column:y.name,Value:this.transformCursorValue(t,y.toValue)}}createComparisonPredicate(y,t){return{Type:"FilterPredicate",FilterType:y.sortOrder==="ASC"?"GreaterThan":"LessThan",Column:y.name,Value:this.transformCursorValue(t,y.toValue)}}buildCursorFilter(y){if(!y)return[];let t=[];for(let u=0;u<this.cursorColumns.length;u++){let s=this.cursorColumns[u],v=y[s.name];if(v===void 0)continue;if(u===0)t.push(this.createComparisonPredicate(s,v));else{let b=[];for(let S=0;S<u;S++){let X=this.cursorColumns[S],h=y[X.name];if(h!==void 0)b.push(this.createEqualityPredicate(X,h))}b.push(this.createComparisonPredicate(s,v)),t.push({Type:"Conjunction",ConjunctionType:"And",Predicates:b})}}if(t.length===0)return[];return[{Type:"Conjunction",ConjunctionType:"Or",Predicates:t}]}buildOrderBy(){if(this.orderColumns&&this.orderColumns.length>0)return this.orderColumns;return this.cursorColumns.map((y)=>({Column:y.name,SortOrder:y.sortOrder}))}combineFilters(y,t){if(!y?.length&&!t?.length)return[];if(!y?.length)return t||[];if(!t?.length)return y;return[{Type:"Conjunction",ConjunctionType:"And",Predicates:[...y,...t]}]}rowsToObjects(y){let{columns:t,rows:u}=y;return u.map((s)=>{let v={};return t.forEach((b,S)=>{v[b]=s[S]}),this.rowTransformer?this.rowTransformer(v):v})}rowToCursor(y){let t={};for(let u of this.cursorColumns)t[u.name]=y[u.name];return t}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),t=this.combineFilters(this.params.filter,y),u={Namespace:this.params.namespace,Table:this.params.table,Columns:this.params.columns,Filter:t,Order:this.buildOrderBy(),Limit:this.params.limit},s=await this.client.call("circles_query",[u]),v=this.rowsToObjects(s),b=this.getCursors(v);return this._currentPage={limit:this.params.limit,size:v.length,firstCursor:b.first,lastCursor:b.last,sortOrder:this.params.sortOrder,hasMore:v.length===this.params.limit,results:v},v.length>0}reset(){this._currentPage=void 0}}class Lt{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,t){return y*t>>64n}static mulU(y,t){return y*t>>64n}static pow64(y,t){let u=y,s=t,v=this.ONE_64;while(s>0n){if((s&1n)===1n)v=this.mul64(v,u);u=this.mul64(u,u),s>>=1n}return v}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,t){return y*t/this.ONE_36}static pow36(y,t){let u=this.ONE_36,s=y,v=t;while(v>0n){if((v&1n)===1n)u=this.mul36(u,s);s=this.mul36(s,s),v>>=1n}return u}static attoCirclesToCircles(y){if(y===0n)return 0;let t=y/this.ATTO_FACTOR,u=y%this.ATTO_FACTOR,s=BigInt(Number.MAX_SAFE_INTEGER);if(t>s||t<-s)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(t)+Number(u)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,t){return this.mulU(this.pow64(this.GAMMA_64,t),y)}static demurrageToInflationary(y,t){return this.mulU(this.pow64(this.BETA_64,t),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(t))}static attoStaticCirclesToAttoCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(t))}static inflationaryToDemurrageExact(y,t){let u=this.pow36(this.GAMMA_36,t);return y*u/this.ONE_36}static demurrageToInflationaryExact(y,t){let u=this.pow36(this.BETA_36,t);return y*u/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.demurrageToInflationaryExact(y,u)}static attoStaticCirclesToAttoCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.inflationaryToDemurrageExact(y,u)}static truncateToInt64(y){let t=y/this.FACTOR_1E12,u=9223372036854775807n;return t>u?u:t}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,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,s=u/this.PERIOD_SEC,v=u%this.PERIOD_SEC,b=this.v1InflateFactor(s),S=this.v1InflateFactor(s+1n);return this.v1ToDemurrage(y,b,S,v,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,s=u/this.PERIOD_SEC,v=u%this.PERIOD_SEC,b=this.v1InflateFactor(s),S=this.v1InflateFactor(s+1n),X=b*(this.PERIOD_SEC-v)+S*v;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/X}static v1ToDemurrage(y,t,u,s,v){let b=t*(v-s)+u*s;return y*3n*this.V1_ACCURACY*v/b}}class Ly{client;constructor(y){this.client=y}async getTotalBalance(y,t=!0){let u=await this.client.call("circlesV2_getTotalBalance",[C(y),t]);return Lt.circlesToAttoCircles(u)}async getTokenBalances(y){let t=(await this.client.call("circles_getTokenBalances",[C(y)])).map((u)=>vy(u));return w(t)}}class fy{client;constructor(y){this.client=y}async findGroups(y=50,t){let u=this.getGroups(y,t,"DESC"),s=[];while(await u.queryNextPage()){if(s.push(...u.currentPage.results),s.length>=y)break;if(!u.currentPage.hasMore)break}return s.slice(0,y)}getGroupMemberships(y,t=50,u="DESC"){let s=C(y);return new G(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"member",Value:s}],limit:t},(v)=>w(v))}getGroupHolders(y,t=100){let u=C(y);return new G(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:u}],limit:t,rowTransformer:(s)=>{let v={...s,totalBalance:BigInt(s.totalBalance),demurragedTotalBalance:BigInt(s.demurragedTotalBalance)};return w(v)}})}getGroupMembers(y,t=100,u="DESC"){let s=C(y);return new G(this.client,{namespace:"V_CrcV2",table:"GroupMemberships",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","member","expiryTime"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:s}],limit:t},(v)=>w(v))}getGroups(y=50,t,u="DESC"){let s=[];if(t){if(t.nameStartsWith)s.push({Type:"FilterPredicate",FilterType:"Like",Column:"name",Value:t.nameStartsWith+"%"});if(t.symbolStartsWith)s.push({Type:"FilterPredicate",FilterType:"Like",Column:"symbol",Value:t.symbolStartsWith+"%"});if(t.groupAddressIn&&t.groupAddressIn.length>0){let b=t.groupAddressIn.map((S)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"group",Value:C(S)}));if(b.length===1)s.push(b[0]);else s.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:b})}if(t.groupTypeIn&&t.groupTypeIn.length>0){let b=t.groupTypeIn.map((S)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"type",Value:S}));if(b.length===1)s.push(b[0]);else s.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:b})}if(t.ownerIn&&t.ownerIn.length>0){let b=t.ownerIn.map((S)=>({Type:"FilterPredicate",FilterType:"Equals",Column:"owner",Value:C(S)}));if(b.length===1)s.push(b[0]);else s.push({Type:"Conjunction",ConjunctionType:"Or",Predicates:b})}if(t.mintHandlerEquals)s.push({Type:"FilterPredicate",FilterType:"Equals",Column:"mintHandler",Value:C(t.mintHandlerEquals)});if(t.treasuryEquals)s.push({Type:"FilterPredicate",FilterType:"Equals",Column:"treasury",Value:C(t.treasuryEquals)})}let v=s.length>1?[{Type:"Conjunction",ConjunctionType:"And",Predicates:s}]:s;return new G(this.client,{namespace:"V_CrcV2",table:"Groups",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","group","type","owner","mintPolicy","mintHandler","treasury","service","feeCollection","memberCount","name","symbol","cidV0Digest","erc20WrapperDemurraged","erc20WrapperStatic"],filter:v,limit:y},(b)=>w(b))}}class Q{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,t){return y*t>>64n}static mulU(y,t){return y*t>>64n}static pow64(y,t){let u=y,s=t,v=this.ONE_64;while(s>0n){if((s&1n)===1n)v=this.mul64(v,u);u=this.mul64(u,u),s>>=1n}return v}static ONE_36=1000000000000000000000000000000000000000n;static GAMMA_36=999801332008598957430613406568191166n;static BETA_36=1000198707468214629156271489013303962n;static mul36(y,t){return y*t/this.ONE_36}static pow36(y,t){let u=this.ONE_36,s=y,v=t;while(v>0n){if((v&1n)===1n)u=this.mul36(u,s);s=this.mul36(s,s),v>>=1n}return u}static attoCirclesToCircles(y){if(y===0n)return 0;let t=y/this.ATTO_FACTOR,u=y%this.ATTO_FACTOR,s=BigInt(Number.MAX_SAFE_INTEGER);if(t>s||t<-s)throw RangeError("Atto value’s integer component exceeds JS double precision.");return Number(t)+Number(u)/Number(this.ATTO_FACTOR)}static circlesToAttoCircles(y){return BigInt(Math.trunc(y*Number(this.ATTO_FACTOR)))}static inflationaryToDemurrage(y,t){return this.mulU(this.pow64(this.GAMMA_64,t),y)}static demurrageToInflationary(y,t){return this.mulU(this.pow64(this.BETA_64,t),y)}static dayFromTimestamp(y){return(y-this.INFLATION_DAY_ZERO_UNIX)/this.SECONDS_PER_DAY}static attoCirclesToAttoStaticCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.demurrageToInflationary(y,this.dayFromTimestamp(t))}static attoStaticCirclesToAttoCircles(y,t=BigInt(Math.floor(Date.now()/1000))){return this.inflationaryToDemurrage(y,this.dayFromTimestamp(t))}static inflationaryToDemurrageExact(y,t){let u=this.pow36(this.GAMMA_36,t);return y*u/this.ONE_36}static demurrageToInflationaryExact(y,t){let u=this.pow36(this.BETA_36,t);return y*u/this.ONE_36}static attoCirclesToAttoStaticCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.demurrageToInflationaryExact(y,u)}static attoStaticCirclesToAttoCirclesExact(y,t=BigInt(Math.floor(Date.now()/1000))){let u=this.dayFromTimestamp(t);return this.inflationaryToDemurrageExact(y,u)}static truncateToInt64(y){let t=y/this.FACTOR_1E12,u=9223372036854775807n;return t>u?u:t}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,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,s=u/this.PERIOD_SEC,v=u%this.PERIOD_SEC,b=this.v1InflateFactor(s),S=this.v1InflateFactor(s+1n);return this.v1ToDemurrage(y,b,S,v,this.PERIOD_SEC)}static attoCirclesToAttoCrc(y,t){let u=t-this.INFLATION_DAY_ZERO_UNIX,s=u/this.PERIOD_SEC,v=u%this.PERIOD_SEC,b=this.v1InflateFactor(s),S=this.v1InflateFactor(s+1n),X=b*(this.PERIOD_SEC-v)+S*v;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/X}static v1ToDemurrage(y,t,u,s,v){let b=t*(v-s)+u*s;return y*3n*this.V1_ACCURACY*v/b}}var cy="0x0000000000000000000000000000000000000000",h6=BigInt(96)*BigInt(1000000000000000000),D6=BigInt("9999999999999999999999999999999999999");var by=BigInt(4294967295),ft=BigInt(32);function C0(y,t=!1){if(t)return{h:Number(y&by),l:Number(y>>ft&by)};return{h:Number(y>>ft&by)|0,l:Number(y&by)|0}}function A0(y,t=!1){let u=y.length,s=new Uint32Array(u),v=new Uint32Array(u);for(let b=0;b<u;b++){let{h:S,l:X}=C0(y[b],t);[s[b],v[b]]=[S,X]}return[s,v]}var V0=(y,t,u)=>y<<u|t>>>32-u,K0=(y,t,u)=>t<<u|y>>>32-u,W0=(y,t,u)=>t<<u-32|y>>>64-u,H0=(y,t,u)=>y<<u-32|t>>>64-u;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function g0(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function ct(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function Xy(y,...t){if(!g0(y))throw Error("Uint8Array expected");if(t.length>0&&!t.includes(y.length))throw Error("Uint8Array expected of length "+t+", got length="+y.length)}function pt(y,t=!0){if(y.destroyed)throw Error("Hash instance has been destroyed");if(t&&y.finished)throw Error("Hash#digest() has already been called")}function L0(y,t){Xy(y);let u=t.outputLen;if(y.length<u)throw Error("digestInto() expects output buffer of length at least "+u)}function f0(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function Yt(...y){for(let t=0;t<y.length;t++)y[t].fill(0)}var c0=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function p0(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function F0(y){for(let t=0;t<y.length;t++)y[t]=p0(y[t]);return y}var Ft=c0?(y)=>y:F0;function Q0(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function _t(y){if(typeof y==="string")y=Q0(y);return Xy(y),y}class nt{}function T0(y){let t=(s)=>y().update(_t(s)).digest(),u=y();return t.outputLen=u.outputLen,t.blockLen=u.blockLen,t.create=()=>y(),t}var l0=BigInt(0),o=BigInt(1),w0=BigInt(2),Y0=BigInt(7),_0=BigInt(256),n0=BigInt(113),et=[],dt=[],$t=[];for(let y=0,t=o,u=1,s=0;y<24;y++){[u,s]=[s,(2*u+3*s)%5],et.push(2*(5*s+u)),dt.push((y+1)*(y+2)/2%64);let v=l0;for(let b=0;b<7;b++)if(t=(t<<o^(t>>Y0)*n0)%_0,t&w0)v^=o<<(o<<BigInt(b))-o;$t.push(v)}var Ot=A0($t,!0),e0=Ot[0],d0=Ot[1],Qt=(y,t,u)=>u>32?W0(y,t,u):V0(y,t,u),Tt=(y,t,u)=>u>32?H0(y,t,u):K0(y,t,u);function $0(y,t=24){let u=new Uint32Array(10);for(let s=24-t;s<24;s++){for(let S=0;S<10;S++)u[S]=y[S]^y[S+10]^y[S+20]^y[S+30]^y[S+40];for(let S=0;S<10;S+=2){let X=(S+8)%10,h=(S+2)%10,D=u[h],N=u[h+1],M=Qt(D,N,1)^u[X],U=Tt(D,N,1)^u[X+1];for(let i=0;i<50;i+=10)y[S+i]^=M,y[S+i+1]^=U}let v=y[2],b=y[3];for(let S=0;S<24;S++){let X=dt[S],h=Qt(v,b,X),D=Tt(v,b,X),N=et[S];v=y[N],b=y[N+1],y[N]=h,y[N+1]=D}for(let S=0;S<50;S+=10){for(let X=0;X<10;X++)u[X]=y[S+X];for(let X=0;X<10;X++)y[S+X]^=~u[(X+2)%10]&u[(X+4)%10]}y[0]^=e0[s],y[1]^=d0[s]}Yt(u)}class Fy extends nt{constructor(y,t,u,s=!1,v=24){super();if(this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=y,this.suffix=t,this.outputLen=u,this.enableXOF=s,this.rounds=v,ct(u),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=f0(this.state)}clone(){return this._cloneInto()}keccak(){Ft(this.state32),$0(this.state32,this.rounds),Ft(this.state32),this.posOut=0,this.pos=0}update(y){pt(this),y=_t(y),Xy(y);let{blockLen:t,state:u}=this,s=y.length;for(let v=0;v<s;){let b=Math.min(t-this.pos,s-v);for(let S=0;S<b;S++)u[this.pos++]^=y[v++];if(this.pos===t)this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:y,suffix:t,pos:u,blockLen:s}=this;if(y[u]^=t,(t&128)!==0&&u===s-1)this.keccak();y[s-1]^=128,this.keccak()}writeInto(y){pt(this,!1),Xy(y),this.finish();let t=this.state,{blockLen:u}=this;for(let s=0,v=y.length;s<v;){if(this.posOut>=u)this.keccak();let b=Math.min(u-this.posOut,v-s);y.set(t.subarray(this.posOut,this.posOut+b),s),this.posOut+=b,s+=b}return y}xofInto(y){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(y)}xof(y){return ct(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(L0(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,Yt(this.state)}_cloneInto(y){let{blockLen:t,suffix:u,outputLen:s,rounds:v,enableXOF:b}=this;return y||(y=new Fy(t,u,s,b,v)),y.state32.set(this.state32),y.pos=this.pos,y.posOut=this.posOut,y.finished=this.finished,y.rounds=v,y.suffix=u,y.outputLen=s,y.enableXOF=b,y.destroyed=this.destroyed,y}}var O0=(y,t,u)=>T0(()=>new Fy(t,y,u)),at=(()=>O0(1,136,32))(),Rt=[];for(let y=0;y<256;y++)Rt[y]=y.toString(16).padStart(2,"0");function Gt(y){let t="0x";for(let u=0;u<y.length;u++)t+=Rt[y[u]];return t}var k=64,Qy=32,Sy=(y)=>y.startsWith("0x")?y.slice(2):y,T=(y)=>y.toString(16).padStart(k,"0");function a0(y){let t=y.toLowerCase().replace("0x",""),u=Gt(at(new TextEncoder().encode(t))).slice(2),s="0x";for(let v=0;v<t.length;v++)s+=parseInt(u[v],16)>=8?t[v].toUpperCase():t[v];return s}function py(y,t){if(y==="tuple"&&t)return`(${t.map((s)=>py(s.type,s.components)).join(",")})`;let u=y.match(/^tuple(\[\d*\])$/);if(u&&t)return`${py("tuple",t)}${u[1]}`;return y}function R0(y){let t=(y.inputs||[]).map((u)=>py(u.type,u.components));return`${y.name}(${t.join(",")})`}function G0(y){let t=R0(y),u=at(new TextEncoder().encode(t));return Gt(u.slice(0,4))}function q(y,t){if(y==="string"||y==="bytes")return!0;if(y.includes("[")){let u=y.slice(0,y.indexOf("["));if(y.endsWith("[]"))return!0;if(u==="tuple")return lt(t);return q(u)}if(y==="tuple")return lt(t);return!1}function lt(y){return y?.some((t)=>q(t.type,t.components))??!1}function _(y,t,u){if(y==="tuple"&&u)return Z0(u,t);if(y.includes("["))return o0(y,t,u);return q0(y,t)}function o0(y,t,u){let s=y.slice(0,y.indexOf("[")),v=y.endsWith("[]"),b=q(s,u),S;if(b){let X=t.map((D)=>_(s,D,u)),h=t.length*Qy;S=X.map((D)=>{let N=h;return h+=D.length/2,T(N)}).join("")+X.join("")}else S=t.map((X)=>_(s,X,u)).join("");return v?T(t.length)+S:S}function Z0(y,t){let u=Array.isArray(t),s=[],v=[],b=[];for(let S=0;S<y.length;S++){let X=y[S],h=u?t[S]:t[X.name||""],D=q(X.type,X.components);if(b.push(D),D)s.push(""),v.push(_(X.type,h,X.components));else s.push(_(X.type,h,X.components))}if(v.length>0){let S=s.reduce((D,N,M)=>D+(b[M]?Qy:N.length/2),0),X="",h=0;for(let D=0;D<y.length;D++)if(b[D])X+=T(S),S+=v[h].length/2,h++;else X+=s[D];return X+v.join("")}return s.join("")}function q0(y,t){if(y==="address")return Sy(t).toLowerCase().padStart(k,"0");if(y==="bool")return T(t?1:0);if(y.startsWith("uint")){let u=typeof t==="bigint"?t:BigInt(t);return T(u)}if(y.startsWith("int")){let u=typeof t==="bigint"?t:BigInt(t);if(u<0n){let s=y==="int"?256:parseInt(y.slice(3));u=(1n<<BigInt(s))+u}return T(u)}if(y.startsWith("bytes")&&y!=="bytes")return Sy(t).padEnd(k,"0");if(y==="bytes"){let u=Sy(t),s=T(u.length/2),v=u.padEnd(Math.ceil(u.length/k)*k,"0");return s+v}if(y==="string"){let u=Array.from(new TextEncoder().encode(t)).map((b)=>b.toString(16).padStart(2,"0")).join(""),s=T(u.length/2),v=u.padEnd(Math.ceil(u.length/k)*k,"0");return s+v}throw Error(`Unsupported type: ${y}`)}function Z(y,t,u=0,s){if(y==="tuple"&&s)return r0(s,t,u);if(y.includes("["))return B0(y,t,u,s);return z0(y,t,u)}function B0(y,t,u,s){let v=y.slice(0,y.indexOf("[")),b=t.slice(u,u+k);if(y.endsWith("[]")){let X=parseInt(b,16)*2,h=parseInt(t.slice(X,X+k),16),D=[],N=X+k;for(let M=0;M<h;M++){let U=Z(v,t,N,s);D.push(U.value),N+=U.consumed}return{value:D,consumed:k}}let S=y.match(/\[(\d+)\]$/);if(S){let X=parseInt(S[1]),h=[],D=0;for(let N=0;N<X;N++){let M=Z(v,t,u+D,s);h.push(M.value),D+=M.consumed}return{value:h,consumed:D}}throw Error(`Invalid array type: ${y}`)}function r0(y,t,u){let s=[],v=u;for(let b of y){let S=Z(b.type,t,v,b.components);s.push(S.value),v+=S.consumed}return{value:s,consumed:v-u}}function z0(y,t,u){let s=t.slice(u,u+k);if(y==="address")return{value:a0("0x"+s.slice(24)),consumed:k};if(y==="bool")return{value:parseInt(s,16)!==0,consumed:k};if(y.startsWith("uint"))return{value:BigInt("0x"+s),consumed:k};if(y.startsWith("int")){let v=BigInt("0x"+s),b=y==="int"?256:parseInt(y.slice(3)),S=1n<<BigInt(b-1);return{value:v>=S?v-(1n<<BigInt(b)):v,consumed:k}}if(y.startsWith("bytes")&&y!=="bytes"){let v=parseInt(y.match(/^bytes(\d+)$/)[1]);return{value:"0x"+s.slice(0,v*2),consumed:k}}if(y==="bytes"){let v=parseInt(s,16)*2,b=parseInt(t.slice(v,v+k),16)*2;return{value:"0x"+t.slice(v+k,v+k+b),consumed:k}}if(y==="string"){let v=parseInt(s,16)*2,b=parseInt(t.slice(v,v+k),16)*2,S=t.slice(v+k,v+k+b),X=new Uint8Array(S.match(/.{2}/g)?.map((h)=>parseInt(h,16))||[]);return{value:new TextDecoder().decode(X),consumed:k}}throw Error(`Unsupported type: ${y}`)}function wt(y){let{abi:t,functionName:u,args:s=[]}=y,v=t.find((i)=>i.type==="function"&&i.name===u);if(!v)throw Error(`Function "${u}" not found in ABI`);let b=G0(v),S=v.inputs||[];if(S.length===0)return b;if(s.length!==S.length)throw Error(`Expected ${S.length} arguments, got ${s.length}`);let X=[],h=[],D=[];for(let i=0;i<S.length;i++){let I=S[i],A=I.components,j=q(I.type,A);if(D.push(j),j)X.push(""),h.push(_(I.type,s[i],A));else X.push(_(I.type,s[i],A))}if(h.length===0)return b+X.join("");let N=X.reduce((i,I,A)=>i+(D[A]?Qy:I.length/2),0),M="",U=0;for(let i=0;i<S.length;i++)if(D[i])M+=T(N),N+=h[U].length/2,U++;else M+=X[i];return b+M+h.join("")}function J0(y){let{abi:t,functionName:u,data:s}=y,v=t.find((D)=>D.type==="function"&&D.name===u);if(!v)throw Error(`Function "${u}" not found in ABI`);let b=v.outputs||[];if(b.length===0)return;let S=Sy(s);if(b.length===1)return Z(b[0].type,S,0,b[0].components).value;let X=[],h=0;for(let D of b){let N=Z(D.type,S,h,D.components);X.push(N.value),h+=N.consumed}return X}class c{address;abi;rpcUrl;constructor(y){this.address=y.address,this.abi=y.abi,this.rpcUrl=y.rpcUrl}async read(y,t,u){let s=wt({abi:this.abi,functionName:y,args:t}),v={to:this.address,data:s,...u?.from&&{from:u.from}},b=await(await fetch(this.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"eth_call",params:[v,"latest"]})})).json();if(b.error)throw Error(`RPC Error: ${b.error.message}`);if(!b.result)throw Error("No result returned from RPC call");return J0({abi:this.abi,functionName:y,data:b.result})}encodeWrite(y,t){return wt({abi:this.abi,functionName:y,args:t})}}var y6=[{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 c{constructor(y){super({address:y.address,abi:y6,rpcUrl:y.rpcUrl})}async isTrusted(y,t){return this.read("isTrusted",[y,t])}async isApprovedForAll(y,t){return this.read("isApprovedForAll",[y,t])}async toTokenId(y){return this.read("toTokenId",[y])}trust(y,t){return{to:this.address,data:this.encodeWrite("trust",[y,t]),value:0n}}setApprovalForAll(y,t){return{to:this.address,data:this.encodeWrite("setApprovalForAll",[y,t]),value:0n}}wrap(y,t,u){return{to:this.address,data:this.encodeWrite("wrap",[y,t,u]),value:0n}}safeTransferFrom(y,t,u,s,v="0x"){return{to:this.address,data:this.encodeWrite("safeTransferFrom",[y,t,u,s,v]),value:0n}}operateFlowMatrix(y,t,u,s){return{to:this.address,data:this.encodeWrite("operateFlowMatrix",[y,t,u,s]),value:0n}}async isHuman(y){return this.read("isHuman",[y])}safeBatchTransferFrom(y,t,u,s,v="0x"){return{to:this.address,data:this.encodeWrite("safeBatchTransferFrom",[y,t,u,s,v]),value:0n}}}var t6=[{type:"function",name:"erc20Circles",inputs:[{name:"_circlesType",type:"uint8"},{name:"_avatar",type:"address"}],outputs:[{type:"address"}],stateMutability:"view"}];class Dy extends c{constructor(y){super({address:y.address,abi:t6,rpcUrl:y.rpcUrl})}async erc20Circles(y,t){return this.read("erc20Circles",[y,t])}}var ot=[{type:"function",name:"unwrap",inputs:[{name:"_amount",type:"uint256"}],outputs:[],stateMutability:"nonpayable"}];class n extends c{constructor(y){super({address:y.address,abi:ot,rpcUrl:y.rpcUrl})}unwrap(y){return{to:this.address,data:this.encodeWrite("unwrap",[y]),value:0n}}}class e extends c{constructor(y){super({address:y.address,abi:ot,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 u6;((y)=>{y.Standard="Standard",y.Custom="Custom"})(u6||={});class Ty extends Error{name;code;source;cause;context;constructor(y,t,u){super(t);if(this.name=y,this.code=u?.code,this.source=u?.source??"UNKNOWN",this.cause=u?.cause,this.context=u?.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 V extends Ty{constructor(y,t){super("TransferError",y,{...t,source:t?.source||"TRANSFERS"})}static noPathFound(y,t,u){return new V(`No valid transfer path found from ${y} to ${t}. ${u||"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:t,reason:u}})}static insufficientBalance(y,t,u,s){let v=Number(y)/1000000000000000000,b=Number(t)/1000000000000000000;return new V(`Insufficient balance for transfer. Requested: ${v.toFixed(6)} CRC, Available: ${b.toFixed(6)} CRC.`,{code:"TRANSFER_INSUFFICIENT_BALANCE",source:"VALIDATION",context:{from:u,to:s,requested:y.toString(),available:t.toString(),requestedCrc:v,availableCrc:b}})}static wrappedTokensRequired(){return new V("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 V(`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,t){return new V(`Flow matrix terminal sum (${y}) does not equal expected amount (${t})`,{code:"TRANSFER_FLOW_MATRIX_MISMATCH",source:"FLOW_MATRIX",context:{terminalSum:y.toString(),expected:t.toString()}})}static emptyPath(y,t){return new V(`Transfer path is empty for route from ${y} to ${t}`,{code:"TRANSFER_EMPTY_PATH",source:"PATHFINDING",context:{from:y,to:t}})}}class Zt{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 Dy({address:y.liftERC20Address,rpcUrl:y.circlesRpcUrl}),this.rpcClient=new Wy(y.circlesRpcUrl),this.pathfinder=new gy(this.rpcClient),this.balance=new Ly(this.rpcClient),this.group=new fy(this.rpcClient)}async buildFlowMatrixTx(y,t,u,s,v=!1){let b=y.toLowerCase(),S=t.toLowerCase();if(!u.transfers||u.transfers.length===0)throw V.noPathFound(b,S);let X={...u};if(v&&s?.toTokens?.length===1){let g=s.toTokens[0].toLowerCase();if(u.maxFlow>0n)X.transfers.push({from:S,to:S,tokenOwner:g,value:u.maxFlow})}let h=await Cy(b,this.config.circlesRpcUrl,X),D=Ay(X,h),N=Object.keys(D).length>0;if(N&&!s?.useWrappedBalances)throw V.wrappedTokensRequired();let M=[],U=[];if(N){let g=await this._getTokenBalanceMap(b),p=this._createDemurragedUnwrapCalls(D),{unwrapCalls:Ny,wrapCalls:r}=this._createInflationaryUnwrapAndWrapCalls(D,h,g);M=[...p,...Ny],U=r,X=Vy(X,h)}let i=ky(b,S,X.maxFlow,X.transfers),I=Ey(i,s?.txData),A=this.hubV2.operateFlowMatrix(i.flowVertices,i.flowEdges,I,i.packedCoordinates),j=!1;try{j=await this.hubV2.isApprovedForAll(b,b)}catch(g){console.warn("Failed to check approval status, including approval transaction:",g)}return[...j?[]:[this.hubV2.setApprovalForAll(b,!0)],...M,A,...U]}async constructAdvancedTransfer(y,t,u,s,v=!1){let b=y.toLowerCase(),S=t.toLowerCase(),X=BigInt(u);if(b===S&&s?.fromTokens?.length===1&&s?.toTokens?.length===1){let i=s.fromTokens[0],I=s.toTokens[0],[A,j]=await Promise.all([this.liftERC20.erc20Circles(B.Demurrage,I),this.liftERC20.erc20Circles(B.Inflation,I)]);if(i.toLowerCase()===A.toLowerCase()&&A!==cy){let g=new n({address:i,rpcUrl:this.config.circlesRpcUrl}).unwrap(X);return[{to:g.to,data:g.data,value:g.value??0n}]}if(i.toLowerCase()===j.toLowerCase()&&j!==cy){let K=new e({address:i,rpcUrl:this.config.circlesRpcUrl}),g=Q.attoCirclesToAttoStaticCircles(X),p=K.unwrap(g);return[{to:p.to,data:p.data,value:p.value??0n}]}}let h=this._truncateToSixDecimals(X),D=await this._getDefaultTokenExcludeList(S,s?.excludeFromTokens),{...N}=s||{},M={...N,...D?{excludeFromTokens:D}:{}},U=await this.pathfinder.findPath({from:b,to:S,targetFlow:h,...M});if(!U.transfers||U.transfers.length===0)throw V.noPathFound(b,S);if(U.maxFlow<h)throw V.insufficientBalance(h,U.maxFlow,b,S);return this.buildFlowMatrixTx(b,S,U,s,v)}async constructReplenish(y,t,u,s){let v=y.toLowerCase(),b=t.toLowerCase(),S=(s||y).toLowerCase(),X=BigInt(u),D=(await this.balance.getTokenBalances(v)).filter((P)=>P.tokenOwner.toLowerCase()===b),N=0n,M=0n,U=0n,i=null,I=null;for(let P of D)if(P.isWrapped)if(P.tokenType.includes("Demurrage"))M=BigInt(P.attoCircles),i=P.tokenAddress;else U=BigInt(P.staticAttoCircles),I=P.tokenAddress;else N=BigInt(P.attoCircles);let A=N+M+Q.attoStaticCirclesToAttoCircles(U),j=[];if(N>=X){if(console.log(`✓ Already have ${Number(N)/1000000000000000000} CRC unwrapped (target: ${Number(X)/1000000000000000000} CRC). No replenish needed.`),S!==v){let P=await this.hubV2.toTokenId(b),x=this.hubV2.safeTransferFrom(v,S,P,X);j.push({to:x.to,data:x.data,value:x.value??0n})}return j}let K=X-N;if(console.log(`Current unwrapped: ${Number(N)/1000000000000000000} CRC`),console.log(`Target amount: ${Number(X)/1000000000000000000} CRC`),console.log(`Need to acquire: ${Number(K)/1000000000000000000} CRC`),A>=X){let P=K;if(M>0n&&i&&P>0n){let x=P>M?M:P,F=new n({address:i,rpcUrl:this.config.circlesRpcUrl}).unwrap(x);j.push({to:F.to,data:F.data,value:F.value??0n}),P-=x}if(U>0n&&I&&P>0n){let x=Q.attoCirclesToAttoStaticCircles(P),f=x>U?U:x,Uy=new e({address:I,rpcUrl:this.config.circlesRpcUrl}).unwrap(f);j.push({to:Uy.to,data:Uy.data,value:Uy.value??0n})}if(S!==v){let x=await this.hubV2.toTokenId(b),f=this.hubV2.safeTransferFrom(v,S,x,X);j.push({to:f.to,data:f.data,value:f.value??0n})}return j}let p=!await this.hubV2.isTrusted(v,b),Ny=BigInt(Math.floor(Date.now()/1000)+31536000),r=Q.truncateToInt64(K),qt=K%Q.FACTOR_1E12!==0n,z=Q.blowUpToBigInt(qt?r+1n:r),L;try{L=await this.pathfinder.findPath({from:v,to:S,targetFlow:z,toTokens:[b],useWrappedBalances:!0,simulatedTrusts:p?[{truster:v,trustee:b}]:void 0})}catch(P){let x=Number(A)/1000000000000000000,f=Number(X)/1000000000000000000,F=Number(K)/1000000000000000000;throw new V(`Insufficient tokens to replenish. Target: ${f.toFixed(6)} CRC, Current unwrapped: ${Number(N)/1000000000000000000} CRC, Need: ${F.toFixed(6)} CRC, Available (including all paths): ${x.toFixed(6)} CRC. Cannot acquire the remaining ${(Number(K-(A-N))/1000000000000000000).toFixed(6)} CRC.`,{code:"REPLENISH_INSUFFICIENT_TOKENS",source:"VALIDATION",context:{from:v,tokenId:b,target:X.toString(),unwrapped:N.toString(),deficit:K.toString(),available:A.toString(),targetCrc:f,unwrappedCrc:Number(N)/1000000000000000000,deficitCrc:F,availableCrc:x}})}if(!L.transfers||L.transfers.length===0)throw V.noPathFound(v,S,`No path to acquire token ${b}`);if(L.maxFlow<z){let P=Number(L.maxFlow)/1000000000000000000,x=Number(z)/1000000000000000000;throw new V(`Pathfinder can only provide ${P.toFixed(6)} CRC of the ${x.toFixed(6)} CRC deficit needed for token ${b}.`,{code:"REPLENISH_INSUFFICIENT_PATH_FLOW",source:"PATHFINDING",context:{from:v,tokenId:b,deficit:z.toString(),pathFlow:L.maxFlow.toString(),deficitCrc:x,pathFlowCrc:P}})}if(p){let P=this.hubV2.trust(b,Ny);j.push({to:P.to,data:P.data,value:P.value??0n})}let iy=await Cy(v,this.config.circlesRpcUrl,L),my=Ay(L,iy),Bt=Object.keys(my).length>0,ly=[],My=[];if(Bt){let P=await this._getTokenBalanceMap(v),x=this._createDemurragedUnwrapCalls(my),{unwrapCalls:f,wrapCalls:F}=this._createInflationaryUnwrapAndWrapCalls(my,iy,P);ly=[...x,...f],My=F,L=Vy(L,iy)}let J=ky(v,S,L.maxFlow,L.transfers),rt=Ey(J),Py=this.hubV2.operateFlowMatrix(J.flowVertices,J.flowEdges,rt,J.packedCoordinates),zt={to:Py.to,data:Py.data,value:Py.value??0n},wy=!1;try{wy=await this.hubV2.isApprovedForAll(v,v)}catch(P){console.warn("Failed to check approval status, including approval transaction:",P)}if(p){let P=this.hubV2.trust(b,0n);My.push({to:P.to,data:P.data,value:P.value??0n})}let Jt=wy?[]:[{to:this.hubV2.setApprovalForAll(v,!0).to,data:this.hubV2.setApprovalForAll(v,!0).data,value:0n}];return j.push(...Jt,...ly,zt,...My),j}async _getTokenBalanceMap(y){let t=await this.balance.getTokenBalances(y),u=new Map;return t.forEach((s)=>{u.set(s.tokenAddress.toLowerCase(),s.staticAttoCircles)}),u}_createDemurragedUnwrapCalls(y){let t=[];for(let[u,[s,v]]of Object.entries(y)){if(v!=="CrcV2_ERC20WrapperDeployed_Demurraged")continue;let S=new n({address:u,rpcUrl:this.config.circlesRpcUrl}).unwrap(s);t.push({to:S.to,data:S.data,value:S.value??0n})}return t}_createInflationaryUnwrapAndWrapCalls(y,t,u){let s=[],v=[];for(let[b,[S,X]]of Object.entries(y)){if(X!=="CrcV2_ERC20WrapperDeployed_Inflationary")continue;let h=t.get(b.toLowerCase()),D=u.get(b.toLowerCase())||0n;if(D===0n)continue;let M=new e({address:b,rpcUrl:this.config.circlesRpcUrl}).unwrap(D);s.push({to:M.to,data:M.data,value:M.value??0n});let U=h?.tokenOwner,i=Q.attoStaticCirclesToAttoCircles(D)-S;if(i>0n){let I=this.hubV2.wrap(U,i,B.Inflation);v.push({to:I.to,data:I.data,value:I.value??0n})}}return{unwrapCalls:s,wrapCalls:v}}_truncateToSixDecimals(y){let t=BigInt(1e6),u=BigInt(10)**BigInt(18);return y/(u/t)*(u/t)}async _getDefaultTokenExcludeList(y,t){let u=await this.group.findGroups(1,{mintHandlerEquals:y}),s=new Set;if(u.length>0){let v=u[0];if(s.add(v.group.toLowerCase()),v.erc20WrapperDemurraged)s.add(v.erc20WrapperDemurraged.toLowerCase());if(v.erc20WrapperStatic)s.add(v.erc20WrapperStatic.toLowerCase())}if(t?.forEach((v)=>s.add(v.toLowerCase())),s.size===0)return;return Array.from(s)}}export{V as TransferError,Zt as TransferBuilder};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aboutcircles/sdk-transfers",
3
- "version": "0.1.24",
3
+ "version": "0.1.25",
4
4
  "description": "Transfer data construction for Circles SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",