@aboutcircles/sdk-transfers 0.1.27 → 0.1.29

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.
@@ -598,8 +598,8 @@ export class TransferBuilder {
598
598
  });
599
599
  const completeExcludeFromTokenList = new Set();
600
600
  // If recipient is a group mint handler, exclude the group's tokens
601
- if (groups.length > 0) {
602
- const groupInfo = groups[0];
601
+ if (groups.results.length > 0) {
602
+ const groupInfo = groups.results[0];
603
603
  completeExcludeFromTokenList.add(groupInfo.group.toLowerCase());
604
604
  if (groupInfo.erc20WrapperDemurraged) {
605
605
  completeExcludeFromTokenList.add(groupInfo.erc20WrapperDemurraged.toLowerCase());
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- var ay=[];for(let y=0;y<256;y++)ay[y]=y.toString(16).padStart(2,"0");function ky(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}),ky(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),F=BigInt(X),N=h<F,M=h>F;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 iy(y,t,u,s){let v=y.toLowerCase(),b=t.toLowerCase(),{sorted:S,idx:X}=tu(s,v,b),h=uu(s,b),F=s.map((k,V)=>{return{streamSinkId:h.has(V)?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 N=Array.from(h),M=[{sourceCoordinate:X[v],flowEdgeIds:N,data:new Uint8Array(0)}],P=[];s.forEach((k)=>{P.push(X[k.tokenOwner.toLowerCase()]),P.push(X[k.from.toLowerCase()]),P.push(X[k.to.toLowerCase()])});let U=yu(P),E=BigInt(u),A=F.filter((k)=>k.streamSinkId===1).reduce((k,V)=>k+BigInt(V.amount.toString()),BigInt(0));if(A!==E)throw Error(`Terminal sum ${A} does not equal expected ${E}`);return{flowVertices:S,flowEdges:F,streams:M,packedCoordinates:U,sourceCoordinate:X[v]}}function _y(y,t){let u=y.streams.map((s)=>({sourceCoordinate:s.sourceCoordinate,flowEdgeIds:s.flowEdgeIds,data:s.data instanceof Uint8Array?ky(s.data):s.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),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 ly(t)}catch{return t}}try{let s=$(t);if(s<Number.MAX_SAFE_INTEGER)return s;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,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 Ey{_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 Ey;return{property:y,emit:(t)=>y.emit(t)}}}class By 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 By{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((F)=>F(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=Ey.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),Oy=BigInt(32);function Xu(y,t=!1){if(t)return{h:Number(y&yy),l:Number(y>>Oy&yy)};return{h:Number(y>>Oy&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 Fu=(y,t,u)=>y<<u|t>>>32-u,Nu=(y,t,u)=>t<<u|y>>>32-u,Uu=(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 dy(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 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 Du(y,t){ty(y);let u=t.outputLen;if(y.length<u)throw Error("digestInto() expects output buffer of length at least "+u)}function Pu(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 _u(y){for(let t=0;t<y.length;t++)y[t]=iu(y[t]);return y}var ey=ku?(y)=>y:_u;function Eu(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function Zy(y){if(typeof y==="string")y=Eu(y);return ty(y),y}class jy{}function Iu(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 xu=BigInt(0),e=BigInt(1),Au=BigInt(2),Ku=BigInt(7),Vu=BigInt(256),Wu=BigInt(113),qy=[],ry=[],zy=[];for(let y=0,t=e,u=1,s=0;y<24;y++){[u,s]=[s,(2*u+3*s)%5],qy.push(2*(5*s+u)),ry.push((y+1)*(y+2)/2%64);let v=xu;for(let b=0;b<7;b++)if(t=(t<<e^(t>>Ku)*Wu)%Vu,t&Au)v^=e<<(e<<BigInt(b))-e;zy.push(v)}var Jy=hu(zy,!0),Cu=Jy[0],Hu=Jy[1],$y=(y,t,u)=>u>32?Uu(y,t,u):Fu(y,t,u),Ry=(y,t,u)=>u>32?mu(y,t,u):Nu(y,t,u);function gu(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,F=u[h],N=u[h+1],M=$y(F,N,1)^u[X],P=Ry(F,N,1)^u[X+1];for(let U=0;U<50;U+=10)y[S+U]^=M,y[S+U+1]^=P}let v=y[2],b=y[3];for(let S=0;S<24;S++){let X=ry[S],h=$y(v,b,X),F=Ry(v,b,X),N=qy[S];v=y[N],b=y[N+1],y[N]=h,y[N+1]=F}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]^=Cu[s],y[1]^=Hu[s]}oy(u)}class Iy extends jy{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,dy(u),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=Pu(this.state)}clone(){return this._cloneInto()}keccak(){ey(this.state32),gu(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,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){ny(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 dy(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(Du(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 Iy(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 Lu=(y,t,u)=>Iu(()=>new Iy(t,y,u)),fu=(()=>Lu(1,136,32))(),yt=[];for(let y=0;y<256;y++)yt[y]=y.toString(16).padStart(2,"0");function Qu(y){let t="0x";for(let u=0;u<y.length;u++)t+=yt[y[u]];return t}function Tu(y){let t=y.toLowerCase().replace("0x",""),u=Qu(fu(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 pu(y){return Tu(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 _(y){if(y===null||y===void 0)return y;if(cu(y))return pu(y);if(Array.isArray(y))return y.map((t)=>_(t));if(typeof y==="object"&&y!==null){let t={};for(let u in y)if(Object.prototype.hasOwnProperty.call(y,u))t[u]=_(y[u]);return t}return y}function wu(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 R(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]=R(s);else if(Array.isArray(s))t[u]=s.map((v)=>typeof v==="object"&&v!==null?R(v):v);else t[u]=s}return t}var s6=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]),s=R(u);return _(s)}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 _(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 _(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 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 _(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 w(this.client,{namespace:"V_Crc",table:"TrustRelations",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","version","trustee","truster","expiryTime"],filter:v,limit:t},(b)=>_(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),F=X!==t?S.truster:S.trustee;if(!v[F])v[F]=[];v[F].push(S)});let b=Object.entries(v).filter(([S])=>m(S)!==t).map(([S,X])=>{let h=Math.max(...X.map((N)=>N.timestamp)),F;if(X.length===2)F="mutuallyTrusts";else if(m(X[0]?.trustee)===t)F="trustedBy";else if(m(X[0]?.truster)===t)F="trusts";else throw Error("Unexpected trust list row. Couldn't determine trust relation.");return{subjectAvatar:t,relation:F,objectAvatar:S,timestamp:h}});return _(b)}async getTrustedBy(y){let t=m(y),u=(await this.getAggregatedTrustRelations(t)).filter((s)=>s.relation==="trustedBy");return _(u)}async getTrusts(y){let t=m(y),u=(await this.getAggregatedTrustRelations(t)).filter((s)=>s.relation==="trusts");return _(u)}async getMutualTrusts(y){let t=m(y),u=(await this.getAggregatedTrustRelations(t)).filter((s)=>s.relation==="mutuallyTrusts");return _(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,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 l.circlesToAttoCircles(u)}async getTokenBalances(y){let t=(await this.client.call("circles_getTokenBalances",[m(y)])).map((u)=>R(u));return _(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 _(u)}async getNetworkSnapshot(){let y=await this.client.call("circles_getNetworkSnapshot",[]);return _(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((F)=>F.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)=>R(s));return _(u)}getTokenHolders(y,t=100,u="DESC"){let s=m(y);return new w(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 _(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 F=(await this.client.call("circles_getTokenBalances",[h.avatar])).find((N)=>m(N.tokenAddress)===m(h.avatar));if(F&&F.circles>=96)X.push(h)}return _(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 _(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 _(X)}}}function Ou(y,t){let u=BigInt(y),s=l.attoCirclesToCircles(u),v=l.attoCirclesToAttoCrc(u,BigInt(t)),b=l.attoCirclesToCircles(v),S=l.attoCirclesToAttoStaticCircles(u,BigInt(t)),X=l.attoCirclesToCircles(S);return{attoCircles:u,circles:s,staticAttoCircles:S,staticCircles:X,attoCrc:v,crc:b}}class Ft{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 w(this.client,{namespace:"V_Crc",table:"TransferSummary",sortOrder:u,columns:[],filter:v,limit:t},(b)=>{let S=Ou(b.value,b.timestamp),X={...b,...S};return _(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 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:s}],limit:t},(v)=>_(v))}getGroupHolders(y,t=100){let u=m(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:(s)=>{let v={...s,totalBalance:BigInt(s.totalBalance),demurragedTotalBalance:BigInt(s.demurragedTotalBalance)};return _(v)}})}getGroupMembers(y,t=100,u="DESC"){let s=m(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:s}],limit:t},(v)=>_(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 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:v,limit:y},(b)=>_(b))}}class Ut{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 Ft(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 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,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 xy(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 Ut(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 Ky(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),B=(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 mt(t)}catch{return t}}try{let s=B(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?B(u.blockNumber):0,timestamp:u.timestamp?B(u.timestamp):void 0,transactionIndex:u.transactionIndex?B(u.transactionIndex):0,logIndex:u.logIndex?B(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]=eu(v,b)}return s}function Ru(y){return y.map($u)}class Vy{_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 Vy;return{property:y,emit:(t)=>y.emit(t)}}}class Et 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 C extends Et{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 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 C.connectionFailed(this.rpcUrl,Error(`HTTP ${s.status}: ${s.statusText}`));let v=await s.json();if(v.error)throw C.fromJsonRpcError(v.error);if(v.result===void 0)throw C.invalidResponse(y,v);return v.result}catch(s){if(s instanceof C)throw s;throw C.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((F)=>F(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 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(C.timeout(y,u)),delete this.pendingResponses[s]},u)})}async subscribe(y){let t=y?.toLowerCase();if(!this.websocketConnected)await this.connect();let u=Vy.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)=>{Ru(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 Bu(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,ju=(y,t,u)=>y<<u-32|t>>>64-u;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function qu(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function Dt(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function sy(y,...t){if(!qu(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 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 It(...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 xt(y){if(typeof y==="string")y=u0(y);return sy(y),y}class At{}function s0(y){let t=(s)=>y().update(xt(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),Kt=[],Vt=[],Wt=[];for(let y=0,t=a,u=1,s=0;y<24;y++){[u,s]=[s,(2*u+3*s)%5],Kt.push(2*(5*s+u)),Vt.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 Ct=Bu(Wt,!0),F0=Ct[0],N0=Ct[1],it=(y,t,u)=>u>32?Zu(y,t,u):Gu(y,t,u),_t=(y,t,u)=>u>32?ju(y,t,u):ou(y,t,u);function U0(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,F=u[h],N=u[h+1],M=it(F,N,1)^u[X],P=_t(F,N,1)^u[X+1];for(let U=0;U<50;U+=10)y[S+U]^=M,y[S+U+1]^=P}let v=y[2],b=y[3];for(let S=0;S<24;S++){let X=Vt[S],h=it(v,b,X),F=_t(v,b,X),N=Kt[S];v=y[N],b=y[N+1],y[N]=h,y[N+1]=F}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]^=F0[s],y[1]^=N0[s]}It(u)}class Cy 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,Dt(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),U0(this.state32,this.rounds),kt(this.state32),this.posOut=0,this.pos=0}update(y){Pt(this),y=xt(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){Pt(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 Dt(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,It(this.state)}_cloneInto(y){let{blockLen:t,suffix:u,outputLen:s,rounds:v,enableXOF:b}=this;return y||(y=new Cy(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 Cy(t,y,u)),M0=(()=>m0(1,136,32))(),Ht=[];for(let y=0;y<256;y++)Ht[y]=y.toString(16).padStart(2,"0");function D0(y){let t="0x";for(let u=0;u<y.length;u++)t+=Ht[y[u]];return t}function P0(y){let t=y.toLowerCase().replace("0x",""),u=D0(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 x(y){return y.toLowerCase()}function k0(y){return P0(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 _0(y){return{Source:x(y.from),Sink:x(y.to),TargetFlow:y.targetFlow.toString(),WithWrap:y.useWrappedBalances,FromTokens:y.fromTokens?.map(x),ToTokens:y.toTokens?.map(x),ExcludedFromTokens:y.excludeFromTokens?.map(x),ExcludedToTokens:y.excludeToTokens?.map(x),SimulatedBalances:y.simulatedBalances?.map((t)=>({Holder:x(t.holder),Token:x(t.token),Amount:t.amount.toString(),IsWrapped:t.isWrapped,IsStatic:t.isStatic})),SimulatedTrusts:y.simulatedTrusts?.map((t)=>({Truster:x(t.truster),Trustee:x(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),E0=BigInt("9999999999999999999999999999999999999");class Hy{client;constructor(y){this.client=y}async findPath(y){let t=_0(y),u=await this.client.call("circlesV2_findPath",[t]),s=vy(u);return Y(s)}async findMaxFlow(y){let t=await this.findPath({...y,targetFlow:E0});return BigInt(t.maxFlow)}}var I0=[{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=I0.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 gt{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 gy{client;constructor(y){this.client=y}async getTotalBalance(y,t=!0){let u=await this.client.call("circlesV2_getTotalBalance",[x(y),t]);return gt.circlesToAttoCircles(u)}async getTokenBalances(y){let t=(await this.client.call("circles_getTokenBalances",[x(y)])).map((u)=>vy(u));return Y(t)}}class Ly{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=x(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)=>Y(v))}getGroupHolders(y,t=100){let u=x(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 Y(v)}})}getGroupMembers(y,t=100,u="DESC"){let s=x(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)=>Y(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:x(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:x(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:x(t.mintHandlerEquals)});if(t.treasuryEquals)s.push({Type:"FilterPredicate",FilterType:"Equals",Column:"treasury",Value:x(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)=>Y(b))}}class p{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 fy="0x0000000000000000000000000000000000000000",h6=BigInt(96)*BigInt(1000000000000000000),F6=BigInt("9999999999999999999999999999999999999");var by=BigInt(4294967295),Lt=BigInt(32);function x0(y,t=!1){if(t)return{h:Number(y&by),l:Number(y>>Lt&by)};return{h:Number(y>>Lt&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}=x0(y[b],t);[s[b],v[b]]=[S,X]}return[s,v]}var K0=(y,t,u)=>y<<u|t>>>32-u,V0=(y,t,u)=>t<<u|y>>>32-u,W0=(y,t,u)=>t<<u-32|y>>>64-u,C0=(y,t,u)=>y<<u-32|t>>>64-u;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function H0(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function ft(y){if(!Number.isSafeInteger(y)||y<0)throw Error("positive integer expected, got "+y)}function Xy(y,...t){if(!H0(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 Qt(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 g0(y,t){Xy(y);let u=t.outputLen;if(y.length<u)throw Error("digestInto() expects output buffer of length at least "+u)}function L0(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 f0=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function Q0(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]=Q0(y[t]);return y}var Tt=f0?(y)=>y:T0;function p0(y){if(typeof y!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(y))}function Ot(y){if(typeof y==="string")y=p0(y);return Xy(y),y}class dt{}function c0(y){let t=(s)=>y().update(Ot(s)).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),O0=BigInt(256),d0=BigInt(113),nt=[],et=[],$t=[];for(let y=0,t=o,u=1,s=0;y<24;y++){[u,s]=[s,(2*u+3*s)%5],nt.push(2*(5*s+u)),et.push((y+1)*(y+2)/2%64);let v=w0;for(let b=0;b<7;b++)if(t=(t<<o^(t>>l0)*d0)%O0,t&Y0)v^=o<<(o<<BigInt(b))-o;$t.push(v)}var Rt=A0($t,!0),n0=Rt[0],e0=Rt[1],pt=(y,t,u)=>u>32?W0(y,t,u):K0(y,t,u),ct=(y,t,u)=>u>32?C0(y,t,u):V0(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,F=u[h],N=u[h+1],M=pt(F,N,1)^u[X],P=ct(F,N,1)^u[X+1];for(let U=0;U<50;U+=10)y[S+U]^=M,y[S+U+1]^=P}let v=y[2],b=y[3];for(let S=0;S<24;S++){let X=et[S],h=pt(v,b,X),F=ct(v,b,X),N=nt[S];v=y[N],b=y[N+1],y[N]=h,y[N+1]=F}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[s],y[1]^=e0[s]}lt(u)}class Ty extends dt{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,ft(u),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=L0(this.state)}clone(){return this._cloneInto()}keccak(){Tt(this.state32),$0(this.state32,this.rounds),Tt(this.state32),this.posOut=0,this.pos=0}update(y){Qt(this),y=Ot(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){Qt(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 ft(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(g0(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:s,rounds:v,enableXOF:b}=this;return y||(y=new Ty(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 R0=(y,t,u)=>c0(()=>new Ty(t,y,u)),at=(()=>R0(1,136,32))(),Bt=[];for(let y=0;y<256;y++)Bt[y]=y.toString(16).padStart(2,"0");function Gt(y){let t="0x";for(let u=0;u<y.length;u++)t+=Bt[y[u]];return t}var i=64,py=32,Sy=(y)=>y.startsWith("0x")?y.slice(2):y,c=(y)=>y.toString(16).padStart(i,"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 Qy(y,t){if(y==="tuple"&&t)return`(${t.map((s)=>Qy(s.type,s.components)).join(",")})`;let u=y.match(/^tuple(\[\d*\])$/);if(u&&t)return`${Qy("tuple",t)}${u[1]}`;return y}function B0(y){let t=(y.inputs||[]).map((u)=>Qy(u.type,u.components));return`${y.name}(${t.join(",")})`}function G0(y){let t=B0(y),u=at(new TextEncoder().encode(t));return Gt(u.slice(0,4))}function j(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 j(u)}if(y==="tuple")return wt(t);return!1}function wt(y){return y?.some((t)=>j(t.type,t.components))??!1}function O(y,t,u){if(y==="tuple"&&u)return Z0(u,t);if(y.includes("["))return o0(y,t,u);return j0(y,t)}function o0(y,t,u){let s=y.slice(0,y.indexOf("[")),v=y.endsWith("[]"),b=j(s,u),S;if(b){let X=t.map((F)=>O(s,F,u)),h=t.length*py;S=X.map((F)=>{let N=h;return h+=F.length/2,c(N)}).join("")+X.join("")}else S=t.map((X)=>O(s,X,u)).join("");return v?c(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||""],F=j(X.type,X.components);if(b.push(F),F)s.push(""),v.push(O(X.type,h,X.components));else s.push(O(X.type,h,X.components))}if(v.length>0){let S=s.reduce((F,N,M)=>F+(b[M]?py:N.length/2),0),X="",h=0;for(let F=0;F<y.length;F++)if(b[F])X+=c(S),S+=v[h].length/2,h++;else X+=s[F];return X+v.join("")}return s.join("")}function j0(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 s=y==="int"?256:parseInt(y.slice(3));u=(1n<<BigInt(s))+u}return c(u)}if(y.startsWith("bytes")&&y!=="bytes")return Sy(t).padEnd(i,"0");if(y==="bytes"){let u=Sy(t),s=c(u.length/2),v=u.padEnd(Math.ceil(u.length/i)*i,"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=c(u.length/2),v=u.padEnd(Math.ceil(u.length/i)*i,"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 q0(y,t,u,s);return z0(y,t,u)}function q0(y,t,u,s){let v=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),F=[],N=X+i;for(let M=0;M<h;M++){let P=Z(v,t,N,s);F.push(P.value),N+=P.consumed}return{value:F,consumed:i}}let S=y.match(/\[(\d+)\]$/);if(S){let X=parseInt(S[1]),h=[],F=0;for(let N=0;N<X;N++){let M=Z(v,t,u+F,s);h.push(M.value),F+=M.consumed}return{value:h,consumed:F}}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+i);if(y==="address")return{value:a0("0x"+s.slice(24)),consumed:i};if(y==="bool")return{value:parseInt(s,16)!==0,consumed:i};if(y.startsWith("uint"))return{value:BigInt("0x"+s),consumed:i};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:i}}if(y.startsWith("bytes")&&y!=="bytes"){let v=parseInt(y.match(/^bytes(\d+)$/)[1]);return{value:"0x"+s.slice(0,v*2),consumed:i}}if(y==="bytes"){let v=parseInt(s,16)*2,b=parseInt(t.slice(v,v+i),16)*2;return{value:"0x"+t.slice(v+i,v+i+b),consumed:i}}if(y==="string"){let v=parseInt(s,16)*2,b=parseInt(t.slice(v,v+i),16)*2,S=t.slice(v+i,v+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:s=[]}=y,v=t.find((U)=>U.type==="function"&&U.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=[],F=[];for(let U=0;U<S.length;U++){let E=S[U],A=E.components,k=j(E.type,A);if(F.push(k),k)X.push(""),h.push(O(E.type,s[U],A));else X.push(O(E.type,s[U],A))}if(h.length===0)return b+X.join("");let N=X.reduce((U,E,A)=>U+(F[A]?py:E.length/2),0),M="",P=0;for(let U=0;U<S.length;U++)if(F[U])M+=c(N),N+=h[P].length/2,P++;else M+=X[U];return b+M+h.join("")}function J0(y){let{abi:t,functionName:u,data:s}=y,v=t.find((F)=>F.type==="function"&&F.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 F of b){let N=Z(F.type,S,h,F.components);X.push(N.value),h+=N.consumed}return X}class f{address;abi;rpcUrl;constructor(y){this.address=y.address,this.abi=y.abi,this.rpcUrl=y.rpcUrl}async read(y,t,u){let s=Yt({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 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 f{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 Fy extends f{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 f{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 f{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 q;((y)=>{y[y.Demurrage=0]="Demurrage",y[y.Inflation=1]="Inflation"})(q||={});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 K extends cy{constructor(y,t){super("TransferError",y,{...t,source:t?.source||"TRANSFERS"})}static noPathFound(y,t,u){return new K(`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 K(`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 K("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 K(`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 K(`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 K(`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 Fy({address:y.liftERC20Address,rpcUrl:y.circlesRpcUrl}),this.rpcClient=new Wy(y.circlesRpcUrl),this.pathfinder=new Hy(this.rpcClient),this.balance=new gy(this.rpcClient),this.group=new Ly(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 K.noPathFound(b,S);let X={...u};if(v&&s?.toTokens?.length===1){let H=s.toTokens[0].toLowerCase();if(u.maxFlow>0n)X.transfers.push({from:S,to:S,tokenOwner:H,value:u.maxFlow})}let h=await xy(b,this.config.circlesRpcUrl,X),F=Ay(X,h),N=Object.keys(F).length>0;if(N&&!s?.useWrappedBalances)throw K.wrappedTokensRequired();let M=[],P=[];if(N){let H=await this._getTokenBalanceMap(b),Q=this._createDemurragedUnwrapCalls(F),{unwrapCalls:Ny,wrapCalls:r}=this._createInflationaryUnwrapAndWrapCalls(F,h,H);M=[...Q,...Ny],P=r,X=Ky(X,h)}let U=iy(b,S,X.maxFlow,X.transfers),E=_y(U,s?.txData),A=this.hubV2.operateFlowMatrix(U.flowVertices,U.flowEdges,E,U.packedCoordinates),k=!1;try{k=await this.hubV2.isApprovedForAll(b,b)}catch(H){console.warn("Failed to check approval status, including approval transaction:",H)}return[...k?[]:[this.hubV2.setApprovalForAll(b,!0)],...M,A,...P]}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 U=s.fromTokens[0],E=s.toTokens[0],[A,k]=await Promise.all([this.liftERC20.erc20Circles(q.Demurrage,E),this.liftERC20.erc20Circles(q.Inflation,E)]);if(U.toLowerCase()===A.toLowerCase()&&A!==fy){let H=new d({address:U,rpcUrl:this.config.circlesRpcUrl}).unwrap(X);return[{to:H.to,data:H.data,value:H.value??0n}]}if(U.toLowerCase()===k.toLowerCase()&&k!==fy){let V=new n({address:U,rpcUrl:this.config.circlesRpcUrl}),H=p.attoCirclesToAttoStaticCircles(X),Q=V.unwrap(H);return[{to:Q.to,data:Q.data,value:Q.value??0n}]}}let h=this._truncateToSixDecimals(X),F=await this._getDefaultTokenExcludeList(S,s?.excludeFromTokens),{...N}=s||{},M={...N,...F?{excludeFromTokens:F}:{}},P=await this.pathfinder.findPath({from:b,to:S,targetFlow:h,...M});if(!P.transfers||P.transfers.length===0)throw K.noPathFound(b,S);if(P.maxFlow<h)throw K.insufficientBalance(h,P.maxFlow,b,S);return this.buildFlowMatrixTx(b,S,P,s,v)}async constructReplenish(y,t,u,s){let v=y.toLowerCase(),b=t.toLowerCase(),S=(s||y).toLowerCase(),X=BigInt(u),F=(await this.balance.getTokenBalances(v)).filter((D)=>D.tokenOwner.toLowerCase()===b),N=0n,M=0n,P=0n,U=null,E=null;for(let D of F)if(D.isWrapped)if(D.tokenType.includes("Demurrage"))M=BigInt(D.attoCircles),U=D.tokenAddress;else P=BigInt(D.staticAttoCircles),E=D.tokenAddress;else N=BigInt(D.attoCircles);let A=N+M+p.attoStaticCirclesToAttoCircles(P),k=[];if(N>=X){if(console.log(`✓ Already have ${Number(N)/1000000000000000000} CRC unwrapped (target: ${Number(X)/1000000000000000000} CRC). No replenish needed.`),S!==v){let D=await this.hubV2.toTokenId(b),I=this.hubV2.safeTransferFrom(v,S,D,X);k.push({to:I.to,data:I.data,value:I.value??0n})}return k}let V=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(V)/1000000000000000000} CRC`),A>=X){let D=V;if(M>0n&&U&&D>0n){let I=D>M?M:D,T=new d({address:U,rpcUrl:this.config.circlesRpcUrl}).unwrap(I);k.push({to:T.to,data:T.data,value:T.value??0n}),D-=I}if(P>0n&&E&&D>0n){let I=p.attoCirclesToAttoStaticCircles(D),L=I>P?P:I,Py=new n({address:E,rpcUrl:this.config.circlesRpcUrl}).unwrap(L);k.push({to:Py.to,data:Py.data,value:Py.value??0n})}if(S!==v){let I=await this.hubV2.toTokenId(b),L=this.hubV2.safeTransferFrom(v,S,I,X);k.push({to:L.to,data:L.data,value:L.value??0n})}return k}let Q=!await this.hubV2.isTrusted(v,b),Ny=BigInt(Math.floor(Date.now()/1000)+31536000),r=p.truncateToInt64(V),jt=V%p.FACTOR_1E12!==0n,z=p.blowUpToBigInt(jt?r+1n:r),g;try{g=await this.pathfinder.findPath({from:v,to:S,targetFlow:z,toTokens:[b],useWrappedBalances:!0,simulatedTrusts:Q?[{truster:v,trustee:b}]:void 0})}catch(D){let I=Number(A)/1000000000000000000,L=Number(X)/1000000000000000000,T=Number(V)/1000000000000000000;throw new K(`Insufficient tokens to replenish. Target: ${L.toFixed(6)} CRC, Current unwrapped: ${Number(N)/1000000000000000000} CRC, Need: ${T.toFixed(6)} CRC, Available (including all paths): ${I.toFixed(6)} CRC. Cannot acquire the remaining ${(Number(V-(A-N))/1000000000000000000).toFixed(6)} CRC.`,{code:"REPLENISH_INSUFFICIENT_TOKENS",source:"VALIDATION",context:{from:v,tokenId:b,target:X.toString(),unwrapped:N.toString(),deficit:V.toString(),available:A.toString(),targetCrc:L,unwrappedCrc:Number(N)/1000000000000000000,deficitCrc:T,availableCrc:I}})}if(!g.transfers||g.transfers.length===0)throw K.noPathFound(v,S,`No path to acquire token ${b}`);if(g.maxFlow<z){let D=Number(g.maxFlow)/1000000000000000000,I=Number(z)/1000000000000000000;throw new K(`Pathfinder can only provide ${D.toFixed(6)} CRC of the ${I.toFixed(6)} CRC deficit needed for token ${b}.`,{code:"REPLENISH_INSUFFICIENT_PATH_FLOW",source:"PATHFINDING",context:{from:v,tokenId:b,deficit:z.toString(),pathFlow:g.maxFlow.toString(),deficitCrc:I,pathFlowCrc:D}})}if(Q){let D=this.hubV2.trust(b,Ny);k.push({to:D.to,data:D.data,value:D.value??0n})}let Uy=await xy(v,this.config.circlesRpcUrl,g),my=Ay(g,Uy),qt=Object.keys(my).length>0,wy=[],My=[];if(qt){let D=await this._getTokenBalanceMap(v),I=this._createDemurragedUnwrapCalls(my),{unwrapCalls:L,wrapCalls:T}=this._createInflationaryUnwrapAndWrapCalls(my,Uy,D);wy=[...I,...L],My=T,g=Ky(g,Uy)}let J=iy(v,S,g.maxFlow,g.transfers),rt=_y(J),Dy=this.hubV2.operateFlowMatrix(J.flowVertices,J.flowEdges,rt,J.packedCoordinates),zt={to:Dy.to,data:Dy.data,value:Dy.value??0n},Yy=!1;try{Yy=await this.hubV2.isApprovedForAll(v,v)}catch(D){console.warn("Failed to check approval status, including approval transaction:",D)}if(Q){let D=this.hubV2.trust(b,0n);My.push({to:D.to,data:D.data,value:D.value??0n})}let Jt=Yy?[]:[{to:this.hubV2.setApprovalForAll(v,!0).to,data:this.hubV2.setApprovalForAll(v,!0).data,value:0n}];return k.push(...Jt,...wy,zt,...My),k}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 d({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()),F=u.get(b.toLowerCase())||0n;if(F===0n)continue;let M=new n({address:b,rpcUrl:this.config.circlesRpcUrl}).unwrap(F);s.push({to:M.to,data:M.data,value:M.value??0n});let P=h?.tokenOwner,U=p.attoStaticCirclesToAttoCircles(F)-S;if(U>0n){let E=this.hubV2.wrap(P,U,q.Inflation);v.push({to:E.to,data:E.data,value:E.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{K as TransferError,Zt as TransferBuilder};
1
+ var $y=[];for(let y=0;y<256;y++)$y[y]=y.toString(16).padStart(2,"0");function Py(y){let t="0x";for(let u=0;u<y.length;u++)t+=$y[y[u]];return t}function qt(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}),Py(t)}function jt(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,N)=>{let h=BigInt(S),U=BigInt(N),K=h<U,D=h>U;return K?-1:D?1:0}),b={};return s.forEach((S,N)=>{b[S]=N}),{sorted:s,idx:b}}function rt(y,t){let u=new Set,v=[],s=null;if(y.forEach((b,S)=>{let N=b.from.toLowerCase(),h=b.to.toLowerCase();if(N===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 Dy(y,t,u,v){let s=y.toLowerCase(),b=t.toLowerCase(),{sorted:S,idx:N}=jt(v,s,b),h=rt(v,b),U=v.map((m,H)=>{return{streamSinkId:h.has(H)?1:0,amount:m.value}});if(h.size===0)throw Error(`No terminal edges detected. Flow must have at least one edge delivering to receiver ${b}`);let K=Array.from(h),D=[{sourceCoordinate:N[s],flowEdgeIds:K,data:new Uint8Array(0)}],_=[];v.forEach((m)=>{_.push(N[m.tokenOwner.toLowerCase()]),_.push(N[m.from.toLowerCase()]),_.push(N[m.to.toLowerCase()])});let F=qt(_),i=BigInt(u),I=U.filter((m)=>m.streamSinkId===1).reduce((m,H)=>m+BigInt(H.amount.toString()),BigInt(0));if(I!==i)throw Error(`Terminal sum ${I} does not equal expected ${i}`);return{flowVertices:S,flowEdges:U,streams:D,packedCoordinates:F,sourceCoordinate:N[s]}}function My(y,t){let u=y.streams.map((v)=>({sourceCoordinate:v.sourceCoordinate,flowEdgeIds:v.flowEdgeIds,data:v.data instanceof Uint8Array?Py(v.data):v.data}));if(t&&u.length>0)u[0].data=t instanceof Uint8Array?Py(t):t;return u}var ly=(y)=>BigInt(y),d=(y)=>parseInt(y,16),zt=(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 Jt(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 zt(t);try{return ly(t)}catch{return t}}try{let v=d(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 yu(y){let{event:t,values:u}=y,v={$event:t,blockNumber:u.blockNumber?d(u.blockNumber):0,timestamp:u.timestamp?d(u.timestamp):void 0,transactionIndex:u.transactionIndex?d(u.transactionIndex):0,logIndex:u.logIndex?d(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]=Jt(s,b)}return v}function tu(y){return y.map(yu)}class Ly{_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 Ly;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 A extends Ry{constructor(y,t){super("RpcError",y,{...t,source:t?.source??"RPC_REQUEST"})}static connectionFailed(y,t){return new A("Failed to connect to RPC endpoint",{code:"RPC_CONNECTION_FAILED",source:"RPC_CONNECTION",cause:t,context:{url:y}})}static timeout(y,t){return new A("RPC request timed out",{code:"RPC_TIMEOUT",source:"RPC_TIMEOUT",context:{method:y,timeout:t}})}static invalidResponse(y,t){return new A("Invalid RPC response",{code:"RPC_INVALID_RESPONSE",source:"RPC_RESPONSE",context:{method:y,response:t}})}static fromJsonRpcError(y){return new A(y.message,{code:y.code,source:"RPC_RESPONSE",context:{data:y.data}})}static websocketError(y,t){return new A(y,{code:"RPC_WEBSOCKET_ERROR",source:"RPC_WEBSOCKET",cause:t})}}class ay{rpcUrl;requestId=0;websocket=null;websocketConnected=!1;pendingResponses={};subscriptionListeners={};reconnectAttempt=0;initialBackoff=2000;maxBackoff=120000;constructor(y){this.rpcUrl=y}async call(y,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 A.connectionFailed(this.rpcUrl,Error(`HTTP ${v.status}: ${v.statusText}`));let s=await v.json();if(s.error)throw A.fromJsonRpcError(s.error);if(s.result===void 0)throw A.invalidResponse(y,s);return s.result}catch(v){if(v instanceof A)throw v;throw A.connectionFailed(this.rpcUrl,v)}}setRpcUrl(y){this.rpcUrl=y}getRpcUrl(){return this.rpcUrl}connect(){return new Promise((y,t)=>{let u=this.rpcUrl.replace("http","ws");if(u.endsWith("/"))u+="ws/subscribe";else u+="/ws/subscribe";this.websocket=new WebSocket(u),this.websocket.onopen=()=>{console.log("WebSocket connected"),this.websocketConnected=!0,this.reconnectAttempt=0,y()},this.websocket.onmessage=(v)=>{let s=JSON.parse(v.data),{id:b,method:S,params:N}=s;if(b!==void 0&&this.pendingResponses[b])this.pendingResponses[b].resolve(s),delete this.pendingResponses[b];if(S==="circles_subscription"&&N?.result)Object.values(this.subscriptionListeners).forEach((h)=>{h.forEach((U)=>U(N.result))})},this.websocket.onclose=()=>{console.warn("WebSocket closed");let v=this.websocketConnected;if(this.websocketConnected=!1,v)this.scheduleReconnect()},this.websocket.onerror=(v)=>{console.error("WebSocket error:",v),this.websocketConnected=!1,t(A.connectionFailed(this.rpcUrl,v instanceof Error?v:Error("WebSocket connection failed"))),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(A.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(A.timeout(y,u)),delete this.pendingResponses[v]},u)})}async subscribe(y){let t=y?.toLowerCase();if(!this.websocketConnected)await this.connect();let u=Ly.create(),v=t?{address:t}:{},s=(await this.sendMessage("circles_subscribe",v)).result;if(!this.subscriptionListeners[s])this.subscriptionListeners[s]=[];return this.subscriptionListeners[s].push((b)=>{tu(b).forEach((S)=>u.emit(S))}),u.property}}var r=BigInt(4294967295),Oy=BigInt(32);function uu(y,t=!1){if(t)return{h:Number(y&r),l:Number(y>>Oy&r)};return{h:Number(y>>Oy&r)|0,l:Number(y&r)|0}}function vu(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:N}=uu(y[b],t);[v[b],s[b]]=[S,N]}return[v,s]}var su=(y,t,u)=>y<<u|t>>>32-u,bu=(y,t,u)=>t<<u|y>>>32-u,Su=(y,t,u)=>t<<u-32|y>>>64-u,Nu=(y,t,u)=>y<<u-32|t>>>64-u;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function hu(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function Yy(y,t=""){if(!Number.isSafeInteger(y)||y<0){let u=t&&`"${t}" `;throw Error(`${u}expected integer >= 0, got ${y}`)}}function Fy(y,t,u=""){let v=hu(y),s=y?.length,b=t!==void 0;if(!v||b&&s!==t){let S=u&&`"${u}" `,N=b?` of length ${t}`:"",h=v?`length=${s}`:`type=${typeof y}`;throw Error(S+"expected Uint8Array"+N+", got "+h)}return y}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 Uu(y,t){Fy(y,void 0,"digestInto() output");let u=t.outputLen;if(y.length<u)throw Error('"digestInto() output" expected to be of length >='+u)}function Ku(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function By(...y){for(let t=0;t<y.length;t++)y[t].fill(0)}var Pu=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function Fu(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function Du(y){for(let t=0;t<y.length;t++)y[t]=Fu(y[t]);return y}var dy=Pu?(y)=>y:Du;function Mu(y,t={}){let u=(s,b)=>y(b).update(s).digest(),v=y(void 0);return u.outputLen=v.outputLen,u.blockLen=v.blockLen,u.create=(s)=>y(s),Object.assign(u,t),Object.freeze(u)}var Lu=BigInt(0),n=BigInt(1),_u=BigInt(2),mu=BigInt(7),ku=BigInt(256),iu=BigInt(113),oy=[],Zy=[],qy=[];for(let y=0,t=n,u=1,v=0;y<24;y++){[u,v]=[v,(2*u+3*v)%5],oy.push(2*(5*v+u)),Zy.push((y+1)*(y+2)/2%64);let s=Lu;for(let b=0;b<7;b++)if(t=(t<<n^(t>>mu)*iu)%ku,t&_u)s^=n<<(n<<BigInt(b))-n;qy.push(s)}var jy=vu(qy,!0),Eu=jy[0],Cu=jy[1],ey=(y,t,u)=>u>32?Su(y,t,u):su(y,t,u),Gy=(y,t,u)=>u>32?Nu(y,t,u):bu(y,t,u);function Iu(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 N=(S+8)%10,h=(S+2)%10,U=u[h],K=u[h+1],D=ey(U,K,1)^u[N],_=Gy(U,K,1)^u[N+1];for(let F=0;F<50;F+=10)y[S+F]^=D,y[S+F+1]^=_}let s=y[2],b=y[3];for(let S=0;S<24;S++){let N=Zy[S],h=ey(s,b,N),U=Gy(s,b,N),K=oy[S];s=y[K],b=y[K+1],y[K]=h,y[K+1]=U}for(let S=0;S<50;S+=10){for(let N=0;N<10;N++)u[N]=y[S+N];for(let N=0;N<10;N++)y[S+N]^=~u[(N+2)%10]&u[(N+4)%10]}y[0]^=Eu[v],y[1]^=Cu[v]}By(u)}class _y{state;pos=0;posOut=0;finished=!1;state32;destroyed=!1;blockLen;suffix;outputLen;enableXOF=!1;rounds;constructor(y,t,u,v=!1,s=24){if(this.blockLen=y,this.suffix=t,this.outputLen=u,this.enableXOF=v,this.rounds=s,Yy(u,"outputLen"),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=Ku(this.state)}clone(){return this._cloneInto()}keccak(){dy(this.state32),Iu(this.state32,this.rounds),dy(this.state32),this.posOut=0,this.pos=0}update(y){ny(this),Fy(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),Fy(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 Yy(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(Uu(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,By(this.state)}_cloneInto(y){let{blockLen:t,suffix:u,outputLen:v,rounds:s,enableXOF:b}=this;return y||=new _y(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 xu=(y,t,u,v={})=>Mu(()=>new _y(t,y,u),v),Hu=xu(1,136,32),ry=[];for(let y=0;y<256;y++)ry[y]=y.toString(16).padStart(2,"0");function Au(y){let t="0x";for(let u=0;u<y.length;u++)t+=ry[y[u]];return t}function Xu(y){let t=y.toLowerCase().replace("0x",""),u=Au(Hu(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 P(y){return y.toLowerCase()}function gu(y){return Xu(y)}function fu(y){if(typeof y!=="string")return!1;let t=y.replace("0x","");return t.length===40&&/^[0-9a-fA-F]{40}$/.test(t)}function L(y){if(y===null||y===void 0)return y;if(fu(y))return gu(y);if(Array.isArray(y))return y.map((t)=>L(t));if(typeof y==="object"&&y!==null){let t={};for(let u in y)if(Object.prototype.hasOwnProperty.call(y,u))t[u]=L(y[u]);return t}return y}function Tu(y){return{Source:P(y.from),Sink:P(y.to),TargetFlow:y.targetFlow.toString(),WithWrap:y.useWrappedBalances,FromTokens:y.fromTokens?.map(P),ToTokens:y.toTokens?.map(P),ExcludedFromTokens:y.excludeFromTokens?.map(P),ExcludedToTokens:y.excludeToTokens?.map(P),SimulatedBalances:y.simulatedBalances?.map((t)=>({Holder:P(t.holder),Token:P(t.token),Amount:t.amount.toString(),IsWrapped:t.isWrapped,IsStatic:t.isStatic})),SimulatedTrusts:y.simulatedTrusts?.map((t)=>({Truster:P(t.truster),Trustee:P(t.trustee)})),MaxTransfers:y.maxTransfers}}function e(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]=e(v);else if(Array.isArray(v))t[u]=v.map((s)=>typeof s==="object"&&s!==null?e(s):s);else t[u]=v}return t}var Z0=BigInt(96)*BigInt(1000000000000000000),pu=BigInt("9999999999999999999999999999999999999");class zy{client;constructor(y){this.client=y}async findPath(y){let t=Tu(y),u=await this.client.call("circlesV2_findPath",[t]),v=e(u);return L(v)}async findMaxFlow(y){let t=await this.findPath({...y,targetFlow:pu});return BigInt(t.maxFlow)}}class Jy{client;constructor(y){this.client=y}async query(y){let t=await this.client.call("circles_query",[y]),{columns:u,rows:v}=t,s=v.map((b)=>{let S={};return u.forEach((N,h)=>{S[N]=b[h]}),S});return L(s)}async tables(){return this.client.call("circles_tables",[])}async events(y=null,t=null,u=null,v=null,s=null,b=!1,S=100,N=null){let h=await this.client.call("circles_events_paginated",[y,t,u,v,s,b,S,N]);return{events:L(h.events),hasMore:h.hasMore,nextCursor:h.nextCursor}}}var cu=[{name:"blockNumber",sortOrder:"DESC"},{name:"transactionIndex",sortOrder:"DESC"},{name:"logIndex",sortOrder:"DESC"}];class z{params;client;rowTransformer;cursorColumns;orderColumns;get currentPage(){return this._currentPage}_currentPage;constructor(y,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=cu.map((t)=>({...t,sortOrder:this.params.sortOrder}));if(this.params.table==="TransferBatch")y.push({name:"batchIndex",sortOrder:this.params.sortOrder});return y}buildOrderBy(){if(this.orderColumns&&this.orderColumns.length>0)return this.orderColumns;return this.cursorColumns.map((y)=>({Column:y.name,SortOrder:y.sortOrder}))}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})}async queryNextPage(){let y={Namespace:this.params.namespace,Table:this.params.table,Columns:this.params.columns,Filter:this.params.filter||[],Order:this.buildOrderBy(),Limit:this.params.limit},t=this._currentPage?.nextCursor?[y,this._currentPage.nextCursor]:[y],u=await this.client.call("circles_paginated_query",t),v=this.rowsToObjects(u);return this._currentPage={limit:this.params.limit,size:v.length,sortOrder:this.params.sortOrder,hasMore:u.hasMore,nextCursor:u.nextCursor??void 0,results:v},v.length>0}reset(){this._currentPage=void 0}}class yt{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",[P(y),P(t)]);return L(u)}getTrustRelations(y,t=100,u="DESC"){let v=P(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 z(this.client,{namespace:"V_Crc",table:"TrustRelations",sortOrder:u,columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","version","trustee","truster","expiryTime"],filter:s,limit:t},(b)=>L(b))}async getAggregatedTrustRelations(y){let t=P(y),u=await this.client.call("circles_getAggregatedTrustRelations",[t]);return L(u)}async getTrustedBy(y){let t=P(y),u=(await this.getAggregatedTrustRelations(t)).filter((v)=>v.relation==="trustedBy");return L(u)}async getTrusts(y){let t=P(y),u=(await this.getAggregatedTrustRelations(t)).filter((v)=>v.relation==="trusts");return L(u)}async getMutualTrusts(y){let t=P(y),u=(await this.getAggregatedTrustRelations(t)).filter((v)=>v.relation==="mutuallyTrusts");return L(u)}async getTrustNetworkSummary(y,t=2){return this.client.call("circles_getTrustNetworkSummary",[P(y),t])}async getAggregatedTrustRelationsEnriched(y){return this.client.call("circles_getAggregatedTrustRelationsEnriched",[P(y)])}async getValidInviters(y,t){let u=[P(y)];if(t)u.push(t);return this.client.call("circles_getValidInviters",u)}}class tt{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),N=b*(this.PERIOD_SEC-s)+S*s;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/N}static v1ToDemurrage(y,t,u,v,s){let b=t*(s-v)+u*v;return y*3n*this.V1_ACCURACY*s/b}}class ut{client;constructor(y){this.client=y}async getTotalBalance(y,t=!0){let u=await this.client.call("circlesV2_getTotalBalance",[P(y),t]);return tt.circlesToAttoCircles(u)}async getTokenBalances(y){let t=(await this.client.call("circles_getTokenBalances",[P(y)])).map((u)=>e(u));return L(t)}}class vt{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)=>P(v)),u=await this.client.call("circles_getAvatarInfoBatch",[t]);return L(u)}async getNetworkSnapshot(){let y=await this.client.call("circles_getNetworkSnapshot",[]);return L(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",[P(y)])}async getProfileByAddressBatch(y){return this.client.call("circles_getProfileByAddressBatch",[y.map((t)=>t===null?null:P(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,v){return this.client.call("circles_searchProfileByAddressOrName",v?[y,t,u??null,v]:[y,t,u??null])}async getProfileView(y){return this.client.call("circles_getProfileView",[P(y)])}}class bt{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)=>P(v)),u=(await this.client.call("circles_getTokenInfoBatch",[t])).map((v)=>e(v));return L(u)}async getTokenHolders(y,t=100,u){let v=await this.client.call("circles_getTokenHolders",[P(y),t,u??null]);return{hasMore:v.hasMore,nextCursor:v.nextCursor,results:L(v.results)}}}class St{client;constructor(y){this.client=y}async getInvitationOrigin(y){let t=P(y),u=await this.client.call("circles_getInvitationOrigin",[t]);return u?L(u):null}async getInvitedBy(y){let t=await this.getInvitationOrigin(y);if(t?.inviter)return L(t.inviter);return}async getTrustInvitations(y,t){let u=P(y),v=await this.client.call("circles_getTrustInvitations",t?[u,t]:[u]);return L(v)}async getInvitations(y,t){let u=(await this.getValidInviters(y,t)).results.map((v)=>v.avatarInfo).filter((v)=>v!==void 0&&v!==null);return L(u)}async getValidInviters(y,t){let u=P(y),v=await this.client.call("circles_getValidInviters",t?[u,t]:[u]);return L(v)}async getInvitationsFrom(y,t=!1){let u=P(y),v=await this.client.call("circles_getInvitationsFrom",[u,t]);return L(v)}async getEscrowInvitations(y){let t=P(y),u=await this.client.call("circles_getEscrowInvitations",[t]);return L(u)}async getAtScaleInvitations(y){let t=P(y),u=await this.client.call("circles_getAtScaleInvitations",[t]);return L(u)}async getAllInvitations(y,t){let u=P(y),v=await this.client.call("circles_getAllInvitations",t?[u,t]:[u]);return L(v)}}class Nt{client;constructor(y){this.client=y}async getTransactionHistory(y,t=50,u){let v=await this.client.call("circles_getTransactionHistory",[P(y),t,u??null]);return{hasMore:v.hasMore,nextCursor:v.nextCursor,results:L(v.results)}}async getTransactionHistoryEnriched(y,t=0,u=null,v=20,s){let b=await this.client.call("circles_getTransactionHistoryEnriched",[P(y),t,u,v,s??null]);return{hasMore:b.hasMore,nextCursor:b.nextCursor,results:L(b.results)}}}class ht{client;constructor(y){this.client=y}async findGroups(y=50,t,u){let v=t?{nameStartsWith:t.nameStartsWith,symbolStartsWith:t.symbolStartsWith,ownerIn:t.ownerIn?.map((S)=>P(S))}:void 0,s=await this.client.call("circles_findGroups",[y,v??null,u??null]),b=L(s.results).map((S)=>{let N=S;if(!N.owner&&N.mint)return{...N,owner:N.mint};return N});return{hasMore:s.hasMore,nextCursor:s.nextCursor,results:b}}async getGroupMemberships(y,t=50,u){let v=await this.client.call("circles_getGroupMemberships",[P(y),t,u??null]);return{hasMore:v.hasMore,nextCursor:v.nextCursor,results:L(v.results)}}async getGroupMembers(y,t=100,u){let v=await this.client.call("circles_getGroupMembers",[P(y),t,u??null]);return{hasMore:v.hasMore,nextCursor:v.nextCursor,results:L(v.results)}}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:P(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:P(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:P(t.mintHandlerEquals)});if(t.treasuryEquals)v.push({Type:"FilterPredicate",FilterType:"Equals",Column:"treasury",Value:P(t.treasuryEquals)})}let s=v.length>1?[{Type:"Conjunction",ConjunctionType:"And",Predicates:v}]:v;return new z(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)=>L(b))}getGroupHolders(y,t=100){let u=P(y);return new z(this.client,{namespace:"V_Crc",table:"TokenBalances",sortOrder:"DESC",columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","token","account","balance","lastChangedAt"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"token",Value:u}],limit:t},(v)=>L(v))}}class Ut{client;constructor(y){this.client=y}async getProfileView(y){let t=P(y);return this.client.call("circles_getProfileView",[t])}async getTrustNetworkSummary(y,t=2){let u=P(y);return this.client.call("circles_getTrustNetworkSummary",[u,t])}async getAggregatedTrustRelations(y){let t=P(y);return this.client.call("circles_getAggregatedTrustRelations",[t])}async getValidInviters(y,t){let u=P(y),v=await this.client.call("circles_getValidInviters",t?[u,t]:[u]);return L(v)}async getTransactionHistoryEnriched(y,t=0,u=null,v=50,s){let b=P(y),S=await this.client.call("circles_getTransactionHistoryEnriched",[b,t,u,v,s??null]);return{hasMore:S.hasMore,nextCursor:S.nextCursor,results:L(S.results)}}async searchProfileByAddressOrName(y,t=20,u,v){return this.client.call("circles_searchProfileByAddressOrName",v?[y,t,u??null,v]:[y,t,u??null])}}class Kt{client;_pathfinder;_query;_trust;_balance;_avatar;_profile;_token;_invitation;_transaction;_group;_sdk;constructor(y="https://rpc.aboutcircles.com/"){this.client=new ay(y)}get pathfinder(){if(!this._pathfinder)this._pathfinder=new zy(this.client);return this._pathfinder}get query(){if(!this._query)this._query=new Jy(this.client);return this._query}get trust(){if(!this._trust)this._trust=new yt(this.client);return this._trust}get balance(){if(!this._balance)this._balance=new ut(this.client);return this._balance}get avatar(){if(!this._avatar)this._avatar=new vt(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 bt(this.client);return this._token}get invitation(){if(!this._invitation)this._invitation=new St(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 ht(this.client);return this._group}get sdk(){if(!this._sdk)this._sdk=new Ut(this.client);return this._sdk}setRpcUrl(y){this.client.setRpcUrl(y)}getRpcUrl(){return this.client.getRpcUrl()}}class Vu{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),N=b*(this.PERIOD_SEC-s)+S*s;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/N}static v1ToDemurrage(y,t,u,v,s){let b=t*(s-v)+u*v;return y*3n*this.V1_ACCURACY*s/b}}async function my(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 Kt(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 iy(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 Pt=(y)=>BigInt(y),$=(y)=>parseInt(y,16),Wu=(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 wu(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 Wu(t);try{return Pt(t)}catch{return t}}try{let v=$(t);if(v<Number.MAX_SAFE_INTEGER)return v;return Pt(t)}catch{return t}}if(t==="true")return!0;if(t==="false")return!1;return t}function Qu(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]=wu(s,b)}return v}function lu(y){return y.map(Qu)}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 kt 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 X extends kt{constructor(y,t){super("RpcError",y,{...t,source:t?.source??"RPC_REQUEST"})}static connectionFailed(y,t){return new X("Failed to connect to RPC endpoint",{code:"RPC_CONNECTION_FAILED",source:"RPC_CONNECTION",cause:t,context:{url:y}})}static timeout(y,t){return new X("RPC request timed out",{code:"RPC_TIMEOUT",source:"RPC_TIMEOUT",context:{method:y,timeout:t}})}static invalidResponse(y,t){return new X("Invalid RPC response",{code:"RPC_INVALID_RESPONSE",source:"RPC_RESPONSE",context:{method:y,response:t}})}static fromJsonRpcError(y){return new X(y.message,{code:y.code,source:"RPC_RESPONSE",context:{data:y.data}})}static websocketError(y,t){return new X(y,{code:"RPC_WEBSOCKET_ERROR",source:"RPC_WEBSOCKET",cause:t})}}class xy{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 X.connectionFailed(this.rpcUrl,Error(`HTTP ${v.status}: ${v.statusText}`));let s=await v.json();if(s.error)throw X.fromJsonRpcError(s.error);if(s.result===void 0)throw X.invalidResponse(y,s);return s.result}catch(v){if(v instanceof X)throw v;throw X.connectionFailed(this.rpcUrl,v)}}setRpcUrl(y){this.rpcUrl=y}getRpcUrl(){return this.rpcUrl}connect(){return new Promise((y,t)=>{let u=this.rpcUrl.replace("http","ws");if(u.endsWith("/"))u+="ws/subscribe";else u+="/ws/subscribe";this.websocket=new WebSocket(u),this.websocket.onopen=()=>{console.log("WebSocket connected"),this.websocketConnected=!0,this.reconnectAttempt=0,y()},this.websocket.onmessage=(v)=>{let s=JSON.parse(v.data),{id:b,method:S,params:N}=s;if(b!==void 0&&this.pendingResponses[b])this.pendingResponses[b].resolve(s),delete this.pendingResponses[b];if(S==="circles_subscription"&&N?.result)Object.values(this.subscriptionListeners).forEach((h)=>{h.forEach((U)=>U(N.result))})},this.websocket.onclose=()=>{console.warn("WebSocket closed");let v=this.websocketConnected;if(this.websocketConnected=!1,v)this.scheduleReconnect()},this.websocket.onerror=(v)=>{console.error("WebSocket error:",v),this.websocketConnected=!1,t(X.connectionFailed(this.rpcUrl,v instanceof Error?v:Error("WebSocket connection failed"))),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(X.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(X.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=t?{address:t}:{},s=(await this.sendMessage("circles_subscribe",v)).result;if(!this.subscriptionListeners[s])this.subscriptionListeners[s]=[];return this.subscriptionListeners[s].push((b)=>{lu(b).forEach((S)=>u.emit(S))}),u.property}}var J=BigInt(4294967295),Ft=BigInt(32);function Ou(y,t=!1){if(t)return{h:Number(y&J),l:Number(y>>Ft&J)};return{h:Number(y>>Ft&J)|0,l:Number(y&J)|0}}function Yu(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:N}=Ou(y[b],t);[v[b],s[b]]=[S,N]}return[v,s]}var nu=(y,t,u)=>y<<u|t>>>32-u,du=(y,t,u)=>t<<u|y>>>32-u,eu=(y,t,u)=>t<<u-32|y>>>64-u,Gu=(y,t,u)=>y<<u-32|t>>>64-u;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function $u(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function Dt(y,t=""){if(!Number.isSafeInteger(y)||y<0){let u=t&&`"${t}" `;throw Error(`${u}expected integer >= 0, got ${y}`)}}function Ey(y,t,u=""){let v=$u(y),s=y?.length,b=t!==void 0;if(!v||b&&s!==t){let S=u&&`"${u}" `,N=b?` of length ${t}`:"",h=v?`length=${s}`:`type=${typeof y}`;throw Error(S+"expected Uint8Array"+N+", got "+h)}return y}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){Ey(y,void 0,"digestInto() output");let u=t.outputLen;if(y.length<u)throw Error('"digestInto() output" expected to be of length >='+u)}function au(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function it(...y){for(let t=0;t<y.length;t++)y[t].fill(0)}var Bu=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function ou(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function Zu(y){for(let t=0;t<y.length;t++)y[t]=ou(y[t]);return y}var Lt=Bu?(y)=>y:Zu;function qu(y,t={}){let u=(s,b)=>y(b).update(s).digest(),v=y(void 0);return u.outputLen=v.outputLen,u.blockLen=v.blockLen,u.create=(s)=>y(s),Object.assign(u,t),Object.freeze(u)}var ju=BigInt(0),G=BigInt(1),ru=BigInt(2),zu=BigInt(7),Ju=BigInt(256),y0=BigInt(113),Et=[],Ct=[],It=[];for(let y=0,t=G,u=1,v=0;y<24;y++){[u,v]=[v,(2*u+3*v)%5],Et.push(2*(5*v+u)),Ct.push((y+1)*(y+2)/2%64);let s=ju;for(let b=0;b<7;b++)if(t=(t<<G^(t>>zu)*y0)%Ju,t&ru)s^=G<<(G<<BigInt(b))-G;It.push(s)}var xt=Yu(It,!0),t0=xt[0],u0=xt[1],_t=(y,t,u)=>u>32?eu(y,t,u):nu(y,t,u),mt=(y,t,u)=>u>32?Gu(y,t,u):du(y,t,u);function v0(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 N=(S+8)%10,h=(S+2)%10,U=u[h],K=u[h+1],D=_t(U,K,1)^u[N],_=mt(U,K,1)^u[N+1];for(let F=0;F<50;F+=10)y[S+F]^=D,y[S+F+1]^=_}let s=y[2],b=y[3];for(let S=0;S<24;S++){let N=Ct[S],h=_t(s,b,N),U=mt(s,b,N),K=Et[S];s=y[K],b=y[K+1],y[K]=h,y[K+1]=U}for(let S=0;S<50;S+=10){for(let N=0;N<10;N++)u[N]=y[S+N];for(let N=0;N<10;N++)y[S+N]^=~u[(N+2)%10]&u[(N+4)%10]}y[0]^=t0[v],y[1]^=u0[v]}it(u)}class Hy{state;pos=0;posOut=0;finished=!1;state32;destroyed=!1;blockLen;suffix;outputLen;enableXOF=!1;rounds;constructor(y,t,u,v=!1,s=24){if(this.blockLen=y,this.suffix=t,this.outputLen=u,this.enableXOF=v,this.rounds=s,Dt(u,"outputLen"),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=au(this.state)}clone(){return this._cloneInto()}keccak(){Lt(this.state32),v0(this.state32,this.rounds),Lt(this.state32),this.posOut=0,this.pos=0}update(y){Mt(this),Ey(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),Ey(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 Dt(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,it(this.state)}_cloneInto(y){let{blockLen:t,suffix:u,outputLen:v,rounds:s,enableXOF:b}=this;return 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 s0=(y,t,u,v={})=>qu(()=>new Hy(t,y,u),v),b0=s0(1,136,32),Ht=[];for(let y=0;y<256;y++)Ht[y]=y.toString(16).padStart(2,"0");function S0(y){let t="0x";for(let u=0;u<y.length;u++)t+=Ht[y[u]];return t}function N0(y){let t=y.toLowerCase().replace("0x",""),u=S0(b0(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 C(y){return y.toLowerCase()}function h0(y){return N0(y)}function U0(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(U0(y))return h0(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 K0(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 yy(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]=yy(v);else if(Array.isArray(v))t[u]=v.map((s)=>typeof s==="object"&&s!==null?yy(s):s);else t[u]=v}return t}var j0=BigInt(96)*BigInt(1000000000000000000),P0=BigInt("9999999999999999999999999999999999999");class Ay{client;constructor(y){this.client=y}async findPath(y){let t=K0(y),u=await this.client.call("circlesV2_findPath",[t]),v=yy(u);return W(v)}async findMaxFlow(y){let t=await this.findPath({...y,targetFlow:P0});return BigInt(t.maxFlow)}}var F0=[{name:"blockNumber",sortOrder:"DESC"},{name:"transactionIndex",sortOrder:"DESC"},{name:"logIndex",sortOrder:"DESC"}];class Cy{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=F0.map((t)=>({...t,sortOrder:this.params.sortOrder}));if(this.params.table==="TransferBatch")y.push({name:"batchIndex",sortOrder:this.params.sortOrder});return y}buildOrderBy(){if(this.orderColumns&&this.orderColumns.length>0)return this.orderColumns;return this.cursorColumns.map((y)=>({Column:y.name,SortOrder:y.sortOrder}))}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})}async queryNextPage(){let y={Namespace:this.params.namespace,Table:this.params.table,Columns:this.params.columns,Filter:this.params.filter||[],Order:this.buildOrderBy(),Limit:this.params.limit},t=this._currentPage?.nextCursor?[y,this._currentPage.nextCursor]:[y],u=await this.client.call("circles_paginated_query",t),v=this.rowsToObjects(u);return this._currentPage={limit:this.params.limit,size:v.length,sortOrder:this.params.sortOrder,hasMore:u.hasMore,nextCursor:u.nextCursor??void 0,results:v},v.length>0}reset(){this._currentPage=void 0}}class At{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),N=b*(this.PERIOD_SEC-s)+S*s;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/N}static v1ToDemurrage(y,t,u,v,s){let b=t*(s-v)+u*v;return y*3n*this.V1_ACCURACY*s/b}}class Xy{client;constructor(y){this.client=y}async getTotalBalance(y,t=!0){let u=await this.client.call("circlesV2_getTotalBalance",[C(y),t]);return At.circlesToAttoCircles(u)}async getTokenBalances(y){let t=(await this.client.call("circles_getTokenBalances",[C(y)])).map((u)=>yy(u));return W(t)}}class gy{client;constructor(y){this.client=y}async findGroups(y=50,t,u){let v=t?{nameStartsWith:t.nameStartsWith,symbolStartsWith:t.symbolStartsWith,ownerIn:t.ownerIn?.map((S)=>C(S))}:void 0,s=await this.client.call("circles_findGroups",[y,v??null,u??null]),b=W(s.results).map((S)=>{let N=S;if(!N.owner&&N.mint)return{...N,owner:N.mint};return N});return{hasMore:s.hasMore,nextCursor:s.nextCursor,results:b}}async getGroupMemberships(y,t=50,u){let v=await this.client.call("circles_getGroupMemberships",[C(y),t,u??null]);return{hasMore:v.hasMore,nextCursor:v.nextCursor,results:W(v.results)}}async getGroupMembers(y,t=100,u){let v=await this.client.call("circles_getGroupMembers",[C(y),t,u??null]);return{hasMore:v.hasMore,nextCursor:v.nextCursor,results:W(v.results)}}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:C(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:C(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:C(t.mintHandlerEquals)});if(t.treasuryEquals)v.push({Type:"FilterPredicate",FilterType:"Equals",Column:"treasury",Value:C(t.treasuryEquals)})}let s=v.length>1?[{Type:"Conjunction",ConjunctionType:"And",Predicates:v}]:v;return new Cy(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)=>W(b))}getGroupHolders(y,t=100){let u=C(y);return new Cy(this.client,{namespace:"V_Crc",table:"TokenBalances",sortOrder:"DESC",columns:["blockNumber","timestamp","transactionIndex","logIndex","transactionHash","token","account","balance","lastChangedAt"],filter:[{Type:"FilterPredicate",FilterType:"Equals",Column:"token",Value:u}],limit:t},(v)=>W(v))}}class w{static ONE_64=1n<<64n;static GAMMA_64=18443079296116538654n;static BETA_64=18450409579521241655n;static SECONDS_PER_DAY=86400n;static INFLATION_DAY_ZERO_UNIX=1602720000n;static ATTO_FACTOR=1000000000000000000n;static FACTOR_1E12=1000000000000n;static V1_ACCURACY=100000000n;static V1_INFLATION_PCT_NUM=107n;static V1_INFLATION_PCT_DEN=100n;static PERIOD_SEC=31556952n;static mul64(y,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),N=b*(this.PERIOD_SEC-s)+S*s;return y*3n*this.V1_ACCURACY*this.PERIOD_SEC/N}static v1ToDemurrage(y,t,u,v,s){let b=t*(s-v)+u*v;return y*3n*this.V1_ACCURACY*s/b}}var fy="0x0000000000000000000000000000000000000000",J0=BigInt(96)*BigInt(1000000000000000000),y6=BigInt("9999999999999999999999999999999999999");var ty=BigInt(4294967295),Xt=BigInt(32);function D0(y,t=!1){if(t)return{h:Number(y&ty),l:Number(y>>Xt&ty)};return{h:Number(y>>Xt&ty)|0,l:Number(y&ty)|0}}function M0(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:N}=D0(y[b],t);[v[b],s[b]]=[S,N]}return[v,s]}var L0=(y,t,u)=>y<<u|t>>>32-u,_0=(y,t,u)=>t<<u|y>>>32-u,m0=(y,t,u)=>t<<u-32|y>>>64-u,k0=(y,t,u)=>y<<u-32|t>>>64-u;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function i0(y){return y instanceof Uint8Array||ArrayBuffer.isView(y)&&y.constructor.name==="Uint8Array"}function gt(y,t=""){if(!Number.isSafeInteger(y)||y<0){let u=t&&`"${t}" `;throw Error(`${u}expected integer >= 0, got ${y}`)}}function Ty(y,t,u=""){let v=i0(y),s=y?.length,b=t!==void 0;if(!v||b&&s!==t){let S=u&&`"${u}" `,N=b?` of length ${t}`:"",h=v?`length=${s}`:`type=${typeof y}`;throw Error(S+"expected Uint8Array"+N+", got "+h)}return y}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 E0(y,t){Ty(y,void 0,"digestInto() output");let u=t.outputLen;if(y.length<u)throw Error('"digestInto() output" expected to be of length >='+u)}function C0(y){return new Uint32Array(y.buffer,y.byteOffset,Math.floor(y.byteLength/4))}function wt(...y){for(let t=0;t<y.length;t++)y[t].fill(0)}var I0=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function x0(y){return y<<24&4278190080|y<<8&16711680|y>>>8&65280|y>>>24&255}function H0(y){for(let t=0;t<y.length;t++)y[t]=x0(y[t]);return y}var Tt=I0?(y)=>y:H0;function A0(y,t={}){let u=(s,b)=>y(b).update(s).digest(),v=y(void 0);return u.outputLen=v.outputLen,u.blockLen=v.blockLen,u.create=(s)=>y(s),Object.assign(u,t),Object.freeze(u)}var X0=BigInt(0),R=BigInt(1),g0=BigInt(2),f0=BigInt(7),T0=BigInt(256),p0=BigInt(113),Qt=[],lt=[],Ot=[];for(let y=0,t=R,u=1,v=0;y<24;y++){[u,v]=[v,(2*u+3*v)%5],Qt.push(2*(5*v+u)),lt.push((y+1)*(y+2)/2%64);let s=X0;for(let b=0;b<7;b++)if(t=(t<<R^(t>>f0)*p0)%T0,t&g0)s^=R<<(R<<BigInt(b))-R;Ot.push(s)}var Yt=M0(Ot,!0),c0=Yt[0],V0=Yt[1],pt=(y,t,u)=>u>32?m0(y,t,u):L0(y,t,u),ct=(y,t,u)=>u>32?k0(y,t,u):_0(y,t,u);function W0(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 N=(S+8)%10,h=(S+2)%10,U=u[h],K=u[h+1],D=pt(U,K,1)^u[N],_=ct(U,K,1)^u[N+1];for(let F=0;F<50;F+=10)y[S+F]^=D,y[S+F+1]^=_}let s=y[2],b=y[3];for(let S=0;S<24;S++){let N=lt[S],h=pt(s,b,N),U=ct(s,b,N),K=Qt[S];s=y[K],b=y[K+1],y[K]=h,y[K+1]=U}for(let S=0;S<50;S+=10){for(let N=0;N<10;N++)u[N]=y[S+N];for(let N=0;N<10;N++)y[S+N]^=~u[(N+2)%10]&u[(N+4)%10]}y[0]^=c0[v],y[1]^=V0[v]}wt(u)}class cy{state;pos=0;posOut=0;finished=!1;state32;destroyed=!1;blockLen;suffix;outputLen;enableXOF=!1;rounds;constructor(y,t,u,v=!1,s=24){if(this.blockLen=y,this.suffix=t,this.outputLen=u,this.enableXOF=v,this.rounds=s,gt(u,"outputLen"),!(0<y&&y<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=C0(this.state)}clone(){return this._cloneInto()}keccak(){Tt(this.state32),W0(this.state32,this.rounds),Tt(this.state32),this.posOut=0,this.pos=0}update(y){ft(this),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){ft(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 gt(y),this.xofInto(new Uint8Array(y))}digestInto(y){if(E0(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,wt(this.state)}_cloneInto(y){let{blockLen:t,suffix:u,outputLen:v,rounds:s,enableXOF:b}=this;return y||=new cy(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 w0=(y,t,u,v={})=>A0(()=>new cy(t,y,u),v),nt=w0(1,136,32),dt=[];for(let y=0;y<256;y++)dt[y]=y.toString(16).padStart(2,"0");function et(y){let t="0x";for(let u=0;u<y.length;u++)t+=dt[y[u]];return t}var k=64,Vy=32,uy=(y)=>y.startsWith("0x")?y.slice(2):y,Q=(y)=>y.toString(16).padStart(k,"0");function Q0(y){let t=y.toLowerCase().replace("0x",""),u=et(nt(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 py(y,t){if(y==="tuple"&&t)return`(${t.map((v)=>py(v.type,v.components)).join(",")})`;let u=y.match(/^tuple(\[\d*\])$/);if(u&&t)return`${py("tuple",t)}${u[1]}`;return y}function l0(y){let t=(y.inputs||[]).map((u)=>py(u.type,u.components));return`${y.name}(${t.join(",")})`}function O0(y){let t=l0(y),u=nt(new TextEncoder().encode(t));return et(u.slice(0,4))}function B(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 Vt(t);return B(u)}if(y==="tuple")return Vt(t);return!1}function Vt(y){return y?.some((t)=>B(t.type,t.components))??!1}function l(y,t,u){if(y==="tuple"&&u)return n0(u,t);if(y.includes("["))return Y0(y,t,u);return d0(y,t)}function Y0(y,t,u){let v=y.slice(0,y.indexOf("[")),s=y.endsWith("[]"),b=B(v,u),S;if(b){let N=t.map((U)=>l(v,U,u)),h=t.length*Vy;S=N.map((U)=>{let K=h;return h+=U.length/2,Q(K)}).join("")+N.join("")}else S=t.map((N)=>l(v,N,u)).join("");return s?Q(t.length)+S:S}function n0(y,t){let u=Array.isArray(t),v=[],s=[],b=[];for(let S=0;S<y.length;S++){let N=y[S],h=u?t[S]:t[N.name||""],U=B(N.type,N.components);if(b.push(U),U)v.push(""),s.push(l(N.type,h,N.components));else v.push(l(N.type,h,N.components))}if(s.length>0){let S=v.reduce((U,K,D)=>U+(b[D]?Vy:K.length/2),0),N="",h=0;for(let U=0;U<y.length;U++)if(b[U])N+=Q(S),S+=s[h].length/2,h++;else N+=v[U];return N+s.join("")}return v.join("")}function d0(y,t){if(y==="address")return uy(t).toLowerCase().padStart(k,"0");if(y==="bool")return Q(t?1:0);if(y.startsWith("uint")){let u=typeof t==="bigint"?t:BigInt(t);return Q(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 Q(u)}if(y.startsWith("bytes")&&y!=="bytes")return uy(t).padEnd(k,"0");if(y==="bytes"){let u=uy(t),v=Q(u.length/2),s=u.padEnd(Math.ceil(u.length/k)*k,"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=Q(u.length/2),s=u.padEnd(Math.ceil(u.length/k)*k,"0");return v+s}throw Error(`Unsupported type: ${y}`)}function a(y,t,u=0,v){if(y==="tuple"&&v)return G0(v,t,u);if(y.includes("["))return e0(y,t,u,v);return $0(y,t,u)}function e0(y,t,u,v){let s=y.slice(0,y.indexOf("[")),b=t.slice(u,u+k);if(y.endsWith("[]")){let N=parseInt(b,16)*2,h=parseInt(t.slice(N,N+k),16),U=[],K=N+k;for(let D=0;D<h;D++){let _=a(s,t,K,v);U.push(_.value),K+=_.consumed}return{value:U,consumed:k}}let S=y.match(/\[(\d+)\]$/);if(S){let N=parseInt(S[1]),h=[],U=0;for(let K=0;K<N;K++){let D=a(s,t,u+U,v);h.push(D.value),U+=D.consumed}return{value:h,consumed:U}}throw Error(`Invalid array type: ${y}`)}function G0(y,t,u){let v=[],s=u;for(let b of y){let S=a(b.type,t,s,b.components);v.push(S.value),s+=S.consumed}return{value:v,consumed:s-u}}function $0(y,t,u){let v=t.slice(u,u+k);if(y==="address")return{value:Q0("0x"+v.slice(24)),consumed:k};if(y==="bool")return{value:parseInt(v,16)!==0,consumed:k};if(y.startsWith("uint"))return{value:BigInt("0x"+v),consumed:k};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:k}}if(y.startsWith("bytes")&&y!=="bytes"){let s=parseInt(y.match(/^bytes(\d+)$/)[1]);return{value:"0x"+v.slice(0,s*2),consumed:k}}if(y==="bytes"){let s=parseInt(v,16)*2,b=parseInt(t.slice(s,s+k),16)*2;return{value:"0x"+t.slice(s+k,s+k+b),consumed:k}}if(y==="string"){let s=parseInt(v,16)*2,b=parseInt(t.slice(s,s+k),16)*2,S=t.slice(s+k,s+k+b),N=new Uint8Array(S.match(/.{2}/g)?.map((h)=>parseInt(h,16))||[]);return{value:new TextDecoder().decode(N),consumed:k}}throw Error(`Unsupported type: ${y}`)}function Wt(y){let{abi:t,functionName:u,args:v=[]}=y,s=t.find((F)=>F.type==="function"&&F.name===u);if(!s)throw Error(`Function "${u}" not found in ABI`);let b=O0(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 N=[],h=[],U=[];for(let F=0;F<S.length;F++){let i=S[F],I=i.components,m=B(i.type,I);if(U.push(m),m)N.push(""),h.push(l(i.type,v[F],I));else N.push(l(i.type,v[F],I))}if(h.length===0)return b+N.join("");let K=N.reduce((F,i,I)=>F+(U[I]?Vy:i.length/2),0),D="",_=0;for(let F=0;F<S.length;F++)if(U[F])D+=Q(K),K+=h[_].length/2,_++;else D+=N[F];return b+D+h.join("")}function R0(y){let{abi:t,functionName:u,data:v}=y,s=t.find((U)=>U.type==="function"&&U.name===u);if(!s)throw Error(`Function "${u}" not found in ABI`);let b=s.outputs||[];if(b.length===0)return;let S=uy(v);if(b.length===1)return a(b[0].type,S,0,b[0].components).value;let N=[],h=0;for(let U of b){let K=a(U.type,S,h,U.components);N.push(K.value),h+=K.consumed}return N}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=Wt({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 R0({abi:this.abi,functionName:y,data:b.result})}encodeWrite(y,t){return Wt({abi:this.abi,functionName:y,args:t})}}var a0=[{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 vy extends p{constructor(y){super({address:y.address,abi:a0,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 B0=[{type:"function",name:"erc20Circles",inputs:[{name:"_circlesType",type:"uint8"},{name:"_avatar",type:"address"}],outputs:[{type:"address"}],stateMutability:"view"}];class sy extends p{constructor(y){super({address:y.address,abi:B0,rpcUrl:y.rpcUrl})}async erc20Circles(y,t){return this.read("erc20Circles",[y,t])}}var Gt=[{type:"function",name:"unwrap",inputs:[{name:"_amount",type:"uint256"}],outputs:[],stateMutability:"nonpayable"}];class O extends p{constructor(y){super({address:y.address,abi:Gt,rpcUrl:y.rpcUrl})}unwrap(y){return{to:this.address,data:this.encodeWrite("unwrap",[y]),value:0n}}}class Y extends p{constructor(y){super({address:y.address,abi:Gt,rpcUrl:y.rpcUrl})}unwrap(y){return{to:this.address,data:this.encodeWrite("unwrap",[y]),value:0n}}}var o;((y)=>{y[y.Demurrage=0]="Demurrage",y[y.Inflation=1]="Inflation"})(o||={});var o0;((y)=>{y.Standard="Standard",y.Custom="Custom"})(o0||={});class Wy 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 x extends Wy{constructor(y,t){super("TransferError",y,{...t,source:t?.source||"TRANSFERS"})}static noPathFound(y,t,u){return new x(`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 x(`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 x("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 x(`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 x(`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 x(`Transfer path is empty for route from ${y} to ${t}`,{code:"TRANSFER_EMPTY_PATH",source:"PATHFINDING",context:{from:y,to:t}})}}class $t{config;hubV2;liftERC20;rpcClient;pathfinder;balance;group;constructor(y){this.config=y,this.hubV2=new vy({address:y.v2HubAddress,rpcUrl:y.circlesRpcUrl}),this.liftERC20=new sy({address:y.liftERC20Address,rpcUrl:y.circlesRpcUrl}),this.rpcClient=new xy(y.circlesRpcUrl),this.pathfinder=new Ay(this.rpcClient),this.balance=new Xy(this.rpcClient),this.group=new gy(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 x.noPathFound(b,S);let N={...u};if(s&&v?.toTokens?.length===1){let g=v.toTokens[0].toLowerCase();if(u.maxFlow>0n)N.transfers.push({from:S,to:S,tokenOwner:g,value:u.maxFlow})}let h=await my(b,this.config.circlesRpcUrl,N),U=ky(N,h),K=Object.keys(U).length>0;if(K&&!v?.useWrappedBalances)throw x.wrappedTokensRequired();let D=[],_=[];if(K){let g=await this._getTokenBalanceMap(b),c=this._createDemurragedUnwrapCalls(U),{unwrapCalls:by,wrapCalls:Z}=this._createInflationaryUnwrapAndWrapCalls(U,h,g);D=[...c,...by],_=Z,N=iy(N,h)}let F=Dy(b,S,N.maxFlow,N.transfers),i=My(F,v?.txData),I=this.hubV2.operateFlowMatrix(F.flowVertices,F.flowEdges,i,F.packedCoordinates),m=!1;try{m=await this.hubV2.isApprovedForAll(b,b)}catch(g){console.warn("Failed to check approval status, including approval transaction:",g)}return[...m?[]:[this.hubV2.setApprovalForAll(b,!0)],...D,I,..._]}async constructAdvancedTransfer(y,t,u,v,s=!1){let b=y.toLowerCase(),S=t.toLowerCase(),N=BigInt(u);if(b===S&&v?.fromTokens?.length===1&&v?.toTokens?.length===1){let F=v.fromTokens[0],i=v.toTokens[0],[I,m]=await Promise.all([this.liftERC20.erc20Circles(o.Demurrage,i),this.liftERC20.erc20Circles(o.Inflation,i)]);if(F.toLowerCase()===I.toLowerCase()&&I!==fy){let g=new O({address:F,rpcUrl:this.config.circlesRpcUrl}).unwrap(N);return[{to:g.to,data:g.data,value:g.value??0n}]}if(F.toLowerCase()===m.toLowerCase()&&m!==fy){let H=new Y({address:F,rpcUrl:this.config.circlesRpcUrl}),g=w.attoCirclesToAttoStaticCircles(N),c=H.unwrap(g);return[{to:c.to,data:c.data,value:c.value??0n}]}}let h=this._truncateToSixDecimals(N),U=await this._getDefaultTokenExcludeList(S,v?.excludeFromTokens),{...K}=v||{},D={...K,...U?{excludeFromTokens:U}:{}},_=await this.pathfinder.findPath({from:b,to:S,targetFlow:h,...D});if(!_.transfers||_.transfers.length===0)throw x.noPathFound(b,S);if(_.maxFlow<h)throw x.insufficientBalance(h,_.maxFlow,b,S);return this.buildFlowMatrixTx(b,S,_,v,s)}async constructReplenish(y,t,u,v){let s=y.toLowerCase(),b=t.toLowerCase(),S=(v||y).toLowerCase(),N=BigInt(u),U=(await this.balance.getTokenBalances(s)).filter((M)=>M.tokenOwner.toLowerCase()===b),K=0n,D=0n,_=0n,F=null,i=null;for(let M of U)if(M.isWrapped)if(M.tokenType.includes("Demurrage"))D=BigInt(M.attoCircles),F=M.tokenAddress;else _=BigInt(M.staticAttoCircles),i=M.tokenAddress;else K=BigInt(M.attoCircles);let I=K+D+w.attoStaticCirclesToAttoCircles(_),m=[];if(K>=N){if(console.log(`✓ Already have ${Number(K)/1000000000000000000} CRC unwrapped (target: ${Number(N)/1000000000000000000} CRC). No replenish needed.`),S!==s){let M=await this.hubV2.toTokenId(b),E=this.hubV2.safeTransferFrom(s,S,M,N);m.push({to:E.to,data:E.data,value:E.value??0n})}return m}let H=N-K;if(console.log(`Current unwrapped: ${Number(K)/1000000000000000000} CRC`),console.log(`Target amount: ${Number(N)/1000000000000000000} CRC`),console.log(`Need to acquire: ${Number(H)/1000000000000000000} CRC`),I>=N){let M=H;if(D>0n&&F&&M>0n){let E=M>D?D:M,V=new O({address:F,rpcUrl:this.config.circlesRpcUrl}).unwrap(E);m.push({to:V.to,data:V.data,value:V.value??0n}),M-=E}if(_>0n&&i&&M>0n){let E=w.attoCirclesToAttoStaticCircles(M),T=E>_?_:E,Ky=new Y({address:i,rpcUrl:this.config.circlesRpcUrl}).unwrap(T);m.push({to:Ky.to,data:Ky.data,value:Ky.value??0n})}if(S!==s){let E=await this.hubV2.toTokenId(b),T=this.hubV2.safeTransferFrom(s,S,E,N);m.push({to:T.to,data:T.data,value:T.value??0n})}return m}let c=!await this.hubV2.isTrusted(s,b),by=BigInt(Math.floor(Date.now()/1000)+31536000),Z=w.truncateToInt64(H),Rt=H%w.FACTOR_1E12!==0n,q=w.blowUpToBigInt(Rt?Z+1n:Z),f;try{f=await this.pathfinder.findPath({from:s,to:S,targetFlow:q,toTokens:[b],useWrappedBalances:!0,simulatedTrusts:c?[{truster:s,trustee:b}]:void 0})}catch(M){let E=Number(I)/1000000000000000000,T=Number(N)/1000000000000000000,V=Number(H)/1000000000000000000;throw new x(`Insufficient tokens to replenish. Target: ${T.toFixed(6)} CRC, Current unwrapped: ${Number(K)/1000000000000000000} CRC, Need: ${V.toFixed(6)} CRC, Available (including all paths): ${E.toFixed(6)} CRC. Cannot acquire the remaining ${(Number(H-(I-K))/1000000000000000000).toFixed(6)} CRC.`,{code:"REPLENISH_INSUFFICIENT_TOKENS",source:"VALIDATION",context:{from:s,tokenId:b,target:N.toString(),unwrapped:K.toString(),deficit:H.toString(),available:I.toString(),targetCrc:T,unwrappedCrc:Number(K)/1000000000000000000,deficitCrc:V,availableCrc:E}})}if(!f.transfers||f.transfers.length===0)throw x.noPathFound(s,S,`No path to acquire token ${b}`);if(f.maxFlow<q){let M=Number(f.maxFlow)/1000000000000000000,E=Number(q)/1000000000000000000;throw new x(`Pathfinder can only provide ${M.toFixed(6)} CRC of the ${E.toFixed(6)} CRC deficit needed for token ${b}.`,{code:"REPLENISH_INSUFFICIENT_PATH_FLOW",source:"PATHFINDING",context:{from:s,tokenId:b,deficit:q.toString(),pathFlow:f.maxFlow.toString(),deficitCrc:E,pathFlowCrc:M}})}if(c){let M=this.hubV2.trust(b,by);m.push({to:M.to,data:M.data,value:M.value??0n})}let Sy=await my(s,this.config.circlesRpcUrl,f),Ny=ky(f,Sy),at=Object.keys(Ny).length>0,wy=[],hy=[];if(at){let M=await this._getTokenBalanceMap(s),E=this._createDemurragedUnwrapCalls(Ny),{unwrapCalls:T,wrapCalls:V}=this._createInflationaryUnwrapAndWrapCalls(Ny,Sy,M);wy=[...E,...T],hy=V,f=iy(f,Sy)}let j=Dy(s,S,f.maxFlow,f.transfers),Bt=My(j),Uy=this.hubV2.operateFlowMatrix(j.flowVertices,j.flowEdges,Bt,j.packedCoordinates),ot={to:Uy.to,data:Uy.data,value:Uy.value??0n},Qy=!1;try{Qy=await this.hubV2.isApprovedForAll(s,s)}catch(M){console.warn("Failed to check approval status, including approval transaction:",M)}if(c){let M=this.hubV2.trust(b,0n);hy.push({to:M.to,data:M.data,value:M.value??0n})}let Zt=Qy?[]:[{to:this.hubV2.setApprovalForAll(s,!0).to,data:this.hubV2.setApprovalForAll(s,!0).data,value:0n}];return m.push(...Zt,...wy,ot,...hy),m}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 O({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,N]]of Object.entries(y)){if(N!=="CrcV2_ERC20WrapperDeployed_Inflationary")continue;let h=t.get(b.toLowerCase()),U=u.get(b.toLowerCase())||0n;if(U===0n)continue;let D=new Y({address:b,rpcUrl:this.config.circlesRpcUrl}).unwrap(U);v.push({to:D.to,data:D.data,value:D.value??0n});let _=h?.tokenOwner,F=w.attoStaticCirclesToAttoCircles(U)-S;if(F>0n){let i=this.hubV2.wrap(_,F,o.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.results.length>0){let s=u.results[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{x as TransferError,$t as TransferBuilder};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aboutcircles/sdk-transfers",
3
- "version": "0.1.27",
3
+ "version": "0.1.29",
4
4
  "description": "Transfer data construction for Circles SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",