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