@aboutcircles/sdk-transfers 0.1.29 → 0.1.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +3 -3
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
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};
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={};activeSubscriptions=[];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"),await this.resubscribeActive()}catch(y){console.error("Reconnection attempt failed:",y),this.scheduleReconnect()}}async resubscribeActive(){if(this.activeSubscriptions.length===0)return;let y=[...this.activeSubscriptions];this.activeSubscriptions=[];for(let t of y)try{let u=t.address?{address:t.address}:{},v=(await this.sendMessage("circles_subscribe",u)).result,s=this.subscriptionListeners[t.id];if(s)this.subscriptionListeners[v]=s,delete this.subscriptionListeners[t.id];this.activeSubscriptions.push({id:v,address:t.address})}catch(u){console.error("Failed to re-issue circles_subscribe after reconnect:",u),this.activeSubscriptions.push(t)}}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))}),this.activeSubscriptions.push({id:s,address:t}),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 Qu(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 Wu(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]=Qu(s,b)}return v}function lu(y){return y.map(Wu)}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={};activeSubscriptions=[];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"),await this.resubscribeActive()}catch(y){console.error("Reconnection attempt failed:",y),this.scheduleReconnect()}}async resubscribeActive(){if(this.activeSubscriptions.length===0)return;let y=[...this.activeSubscriptions];this.activeSubscriptions=[];for(let t of y)try{let u=t.address?{address:t.address}:{},v=(await this.sendMessage("circles_subscribe",u)).result,s=this.subscriptionListeners[t.id];if(s)this.subscriptionListeners[v]=s,delete this.subscriptionListeners[t.id];this.activeSubscriptions.push({id:v,address:t.address})}catch(u){console.error("Failed to re-issue circles_subscribe after reconnect:",u),this.activeSubscriptions.push(t)}}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))}),this.activeSubscriptions.push({id:s,address:t}),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 Q{static ONE_64=1n<<64n;static GAMMA_64=18443079296116538654n;static BETA_64=18450409579521241655n;static SECONDS_PER_DAY=86400n;static INFLATION_DAY_ZERO_UNIX=1602720000n;static ATTO_FACTOR=1000000000000000000n;static FACTOR_1E12=1000000000000n;static V1_ACCURACY=100000000n;static V1_INFLATION_PCT_NUM=107n;static V1_INFLATION_PCT_DEN=100n;static PERIOD_SEC=31556952n;static mul64(y,t){return y*t>>64n}static mulU(y,t){return y*t>>64n}static pow64(y,t){let u=y,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 Qt(...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),Wt=[],lt=[],Ot=[];for(let y=0,t=R,u=1,v=0;y<24;y++){[u,v]=[v,(2*u+3*v)%5],Wt.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=Wt[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]}Qt(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,Qt(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 Q0=(y,t,u,v={})=>A0(()=>new cy(t,y,u),v),nt=Q0(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,W=(y)=>y.toString(16).padStart(k,"0");function W0(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,W(K)}).join("")+N.join("")}else S=t.map((N)=>l(v,N,u)).join("");return s?W(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+=W(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 W(t?1:0);if(y.startsWith("uint")){let u=typeof t==="bigint"?t:BigInt(t);return W(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 W(u)}if(y.startsWith("bytes")&&y!=="bytes")return uy(t).padEnd(k,"0");if(y==="bytes"){let u=uy(t),v=W(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=W(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:W0("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+=W(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=Q.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+Q.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=Q.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=Q.truncateToInt64(H),Rt=H%Q.FACTOR_1E12!==0n,q=Q.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,Qy=[],hy=[];if(at){let M=await this._getTokenBalanceMap(s),E=this._createDemurragedUnwrapCalls(Ny),{unwrapCalls:T,wrapCalls:V}=this._createInflationaryUnwrapAndWrapCalls(Ny,Sy,M);Qy=[...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},Wy=!1;try{Wy=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=Wy?[]:[{to:this.hubV2.setApprovalForAll(s,!0).to,data:this.hubV2.setApprovalForAll(s,!0).data,value:0n}];return m.push(...Zt,...Qy,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=Q.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.29",
3
+ "version": "0.1.30",
4
4
  "description": "Transfer data construction for Circles SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",