PageSourceSearch

https://aztec-pnl-proof.vercel.app/_next/static/chunks/app/price/page-d7641431feac28c1.js

js aztec-pnl-proof.vercel.app collected 2026-10-03 06:09:51 UTC 24,937 bytes, 1 lines download raw bytes

1"u"<typeof window&&(globalThis.window=globalThis),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7928],{7514:(e,t,r)=>{"use strict";r.d(t,{d:()=>s});var n=r(7620),a=r(38590);function s(){let e=(0,n.useContext)(a.$);if(!e)throw Error("useToast must be used within ToastProvider");return e}},11675:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(54568);function a({token:e,size:t="md"}){return(0,n.jsx)("div",{className:`${"sm"===t?"w-5 h-5 text-[8px]":"w-6 h-6 text-[10px]"} rounded-full ${e.color} flex items-center justify-center font-medium`,children:e.symbol[0]})}},19449:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(54568),a=r(96030),s=r(75665);function l({children:e}){let{status:t}=(0,s.k)();return"connected"!==t?(0,n.jsx)("main",{className:"flex-grow flex items-center justify-center px-6",children:(0,n.jsxs)("div",{className:"text-center max-w-sm",children:[(0,n.jsx)("div",{className:"w-14 h-14 rounded-full bg-orange-100 flex items-center justify-center mx-auto mb-4",children:(0,n.jsx)(a.In,{icon:"lucide:lock-keyhole",width:28,className:"text-orange-500"})}),(0,n.jsx)("h2",{className:"text-lg font-semibold text-neutral-900 mb-2",children:"Connect your wallet"}),(0,n.jsx)("p",{className:"text-sm text-neutral-500",children:"Sign in with your wallet to access this page."})]})}):(0,n.jsx)(n.Fragment,{children:e})}},30902:(e,t,r)=>{"use strict";r.d(t,{MS:()=>s,xZ:()=>n});let n={USDC:{symbol:"USDC",color:"bg-indigo-100"},wETH:{symbol:"wETH",color:"bg-blue-100"},wZEC:{symbol:"wZEC",color:"bg-amber-100"},wAZTEC:{symbol:"wAZTEC",color:"bg-purple-100"}},a=[["wETH","USDC"],["wZEC","USDC"],["wAZTEC","USDC"]];function s(e){let t=new Set;for(let[r,n]of a)r===e&&t.add(n),n===e&&t.add(r);return Object.values(n).filter(e=>t.has(e.symbol))}},38590:(e,t,r)=>{"use strict";r.d(t,{$:()=>s,ToastProvider:()=>c});var n=r(54568),a=r(7620);let s=(0,a.createContext)(null),l=0;function c({children:e}){let[t,r]=(0,a.useState)([]),c=(0,a.useCallback)((e,t)=>{let n=l++;r(r=>[...r,{id:n,message:e,type:t}])},[]),o=(0,a.useCallback)(e=>{r(t=>t.filter(t=>t.id!==e))},[]);return(0,n.jsxs)(s.Provider,{value:{showToast:c},children:[e,(0,n.jsx)("div",{className:"fixed bottom-6 right-6 z-50 flex flex-col gap-3",children:t.map(e=>(0,n.jsx)(i,{toast:e,onDismiss:o},e.id))})]})}function i({toast:e,onDismiss:t}){let[r,s]=(0,a.useState)(!1);(0,a.useEffect)(()=>{requestAnimationFrame(()=>s(!0));let r=setTimeout(()=>{s(!1),setTimeout(()=>t(e.id),300)},4e3);return()=>clearTimeout(r)},[e.id,t]);let l="success"===e.type?"border-green-400 bg-green-50 text-green-800":"border-red-400 bg-red-50 text-red-800";return(0,n.jsx)("div",{className:`px-4 py-3 rounded-lg border shadow-lg text-sm font-medium transition-all duration-300 ${l} ${r?"translate-x-0 opacity-100":"translate-x-8 opacity-0"}`,children:e.message})}},55027:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(54568);function a({progress:e,complete:t}){return(0,n.jsx)("div",{className:"w-full bg-neutral-200 h-1.5 rounded-full overflow-hidden",children:(0,n.jsx)("div",{className:"bg-orange-500 h-full rounded-full relative overflow-hidden transition-all duration-300",style:{width:`${Math.min(100,Math.max(0,e))}%`},children:!t&&(0,n.jsx)("div",{className:"absolute inset-0 bg-white/30 w-full h-full animate-shimmer"})})})}},66930:(e,t,r)=>{"use strict";r.d(t,{$Z:()=>c,Nc:()=>l,Ns:()=>d,R2:()=>a,Tj:()=>s,V8:()=>o,Vm:()=>i,y3:()=>n});let n=32,a=3,s=8,l=0x4a5da1f2,c=0xef52534d,i=32,o=15,d=1e4},70218:(e,t,r)=>{Promise.resolve().then(r.bind(r,99861))},73677:(e,t,r)=>{"use strict";r.d(t,{R8:()=>l,Rm:()=>s,z3:()=>c});var n=r(63680);let a=void 0!==n&&!!n.env.DEBUG,s=a?console.log.bind(console):()=>{},l=a?console.warn.bind(console):()=>{},c=a?console.error.bind(console):()=>{}},75383:(e,t,r)=>{"use strict";r.d(t,{E8:()=>c,KG:()=>i,NX:()=>s,S6:()=>o,YL:()=>l,tC:()=>n,xS:()=>a});let n={USDC:"0x20a756258e69c579300e3267f1316ca5fbace71ba5768928aa9550eb3d4cf34c",wETH:"0x2ffbd5c387cc06ccf6e14043b92932566010680766db9725ff1be8c0e825a5c4",wZEC:"0x128f722ad9de7c9df207efd0d0c003625e5c5510d17906a33b88f6a722e2cf4d",wAZTEC:"0x17dde4c4334840f164214386e1ef489418b6c5b0463c7ea7ab271eb4d8be2833"},a=9,s={USDC:6,wETH:9,wZEC:9,wAZTEC:9},l={"wETH/USDC":"0x06b88eadc3c6c374652da35392c6829946f509e722a80f7d49012d7e40e9a39c","wZEC/USDC":"0x2c3f72942b0b3f81a33866600736ef339bea2c852a21a3cc74bf6cd40c7ed179","wAZTEC/USDC":"0x1fdade1dd6384de39c1c795af78bf7ea383cbafb76c5e17828723be7123b7ce6"},c={"ETH/USDC":"0x275326e22846a7837168cd2f6e3b48580d162d1b88e285b4c817d3455d87039f","ZEC/USDC":"0x122aa0bb0f5c0ba331630599ca45b4852af9e8ea4ba85f378f61c72e17aaf75c","AZTEC/USDC":"0x1fa850f373458a09d190347b2c2cf2aff80eafc1dbcd417238a00d84a3b9852b"},i="0x1a2b16e9ddcc859a7c34235fc1427febbcd5ca7945e605ed9493858e0dc32698",o=[{label:"wETH/USDC",token0:"wETH",token1:"USDC",address:"0x06b88eadc3c6c374652da35392c6829946f509e722a80f7d49012d7e40e9a39c"},{label:"wZEC/USDC",token0:"wZEC",token1:"USDC",address:"0x2c3f72942b0b3f81a33866600736ef339bea2c852a21a3cc74bf6cd40c7ed179"},{label:"wAZTEC/USDC",token0:"wAZTEC",token1:"USDC",address:"0x1fdade1dd6384de39c1c795af78bf7ea383cbafb76c5e17828723be7123b7ce6"}]},75665:(e,t,r)=>{"use strict";r.d(t,{k:()=>s});var n=r(7620),a=r(84765);function s(){let e=(0,n.useContext)(a.m);if(!e)throw Error("useAztecWallet must be used within AztecWalletProvider");return e}},77079:(e,t,r)=>{"use strict";async function n(){let e="0x09a4df73aa47f82531a038d1d51abfc85b27665c4b7ca751e2d4fa9f19caffb2";if(!e)throw Error("NEXT_PUBLIC_SPONSORED_FPC_ADDRESS is required. Run `yarn deploy` or `yarn fpc:deploy` first.");let{SponsoredFeePaymentMethod:t}=await Promise.all([r.e(5355),r.e(1484),r.e(6220),r.e(4703),r.e(4082),r.e(1106),r.e(9046),r.e(7132),r.e(6141),r.e(9188),r.e(5736),r.e(2969)]).then(r.bind(r,32969)),{AztecAddress:n}=await Promise.all([r.e(5355),r.e(1484),r.e(6220),r.e(4703),r.e(4082),r.e(1106),r.e(9046),r.e(7304),r.e(7132),r.e(278),r.e(6141),r.e(9667)]).then(r.bind(r,9667));return new t(n.fromString(e))}r.d(t,{$:()=>n})},79125:(e,t,r)=>{"use strict";r.d(t,{M:()=>a});var n=r(7620);function a(e){let t=(0,n.useRef)(null),a=(0,n.useRef)(!1),s=(0,n.useCallback)(async()=>
1{if(t.current)return t.current;if(!e)return null;if(a.current){for(;a.current;)await new Promise(e=>setTimeout(e,100));return t.current}a.current=!0;try{let n='{"address":"0x0793099e233ce26cf192057c73398f3d06d8b6a2f193f7ed027a8f9775623420","secretKey":"0x1688b9475bd8c6caebe07351b217cf4a723a9e96541f5a86e65120fefcc8e82a","signingKey":"0x02ccb20db844f15bffe176b65e7e605bdf1c665f0c79b033e1b053ee69cd120d","salt":"0x0000000000000000000000000000000000000000000000000000000000000000"}';if(n){let{Fr:a,Fq:s}=await Promise.all([r.e(5355),r.e(1484),r.e(6220),r.e(4703),r.e(4082),r.e(1106),r.e(6141),r.e(6408)]).then(r.bind(r,36408)),l=JSON.parse(n);t.current=await e.registerAccountFromCredentials(a.fromString(l.secretKey),a.fromString(l.salt),s.fromString(l.signingKey))}}catch(e){console.warn("Failed to register admin account:",e)}finally{a.current=!1}return t.current},[e]),l=(0,n.useCallback)(()=>{t.current=null,a.current=!1},[]);return{adminRef:t,ensureAdmin:s,resetAdmin:l}}},84765:(e,t,r)=>{"use strict";r.d(t,{AztecWalletProvider:()=>l,m:()=>s});var n=r(54568),a=r(7620);let s=(0,a.createContext)(null);function l({children:e}){let t=(0,a.useRef)(null),[l,c]=(0,a.useState)(null),[i,o]=(0,a.useState)([]),[d,u]=(0,a.useState)("disconnected"),[m,f]=(0,a.useState)(null),b=(0,a.useCallback)(async()=>{let{EmbeddedAuditableWallet:e}=await Promise.all([r.e(5355),r.e(1484),r.e(6220),r.e(4703),r.e(4082),r.e(1106),r.e(9046),r.e(7304),r.e(7132),r.e(278),r.e(6141),r.e(9188),r.e(5736),r.e(3531),r.e(8322),r.e(970),r.e(2969),r.e(8777),r.e(1046)]).then(r.bind(r,67303));return t.current||(t.current=await e.initialize("https://rpc.testnet.aztec-labs.com/")),t.current},[]),x=(0,a.useCallback)(async()=>{if("connecting"!==d){u("connecting"),f(null);try{let e=await b(),[t]=await Promise.all([e.connectAllAccounts(),e.registerDeployedContracts().catch(e=>console.warn("Contract registration failed:",e))]),{active:r,all:n}=t;o(n.map(e=>e.toString())),r?(c(r.toString()),u("connected")):u("no_account")}catch(e){f(e instanceof Error?e.message:"Failed to connect wallet"),u("error")}}},[d,b]),h=(0,a.useCallback)(async()=>{if("creating"!==d){u("creating"),f(null);try{let e=await b(),t=(await e.createAccountAndConnect()).toString();c(t),o(e=>[...e,t]),u("connected")}catch(e){f(e instanceof Error?e.message:"Failed to create account"),u("error")}}},[d,b]),g=(0,a.useCallback)(async e=>{if(!t.current)return;let{AztecAddress:n}=await Promise.all([r.e(5355),r.e(1484),r.e(6220),r.e(4703),r.e(4082),r.e(1106),r.e(9046),r.e(7304),r.e(7132),r.e(278),r.e(6141),r.e(9667)]).then(r.bind(r,9667));t.current.switchAccount(n.fromString(e)),c(e)},[]),p=(0,a.useCallback)(async e=>{if(!t.current)return;let{AztecAddress:n}=await Promise.all([r.e(5355),r.e(1484),r.e(6220),r.e(4703),r.e(4082),r.e(1106),r.e(9046),r.e(7304),r.e(7132),r.e(278),r.e(6141),r.e(9667)]).then(r.bind(r,9667));t.current.removeAccount(n.fromString(e)),o(t.current.getAccountAddresses().map(e=>e.toString()));let a=t.current.getConnectedAccount();a?c(a.toString()):(c(null),u("no_account"))},[]),w=(0,a.useCallback)(()=>{t.current?.disconnect(),t.current=null,c(null),o([]),u("disconnected"),f(null)},[]),y=(0,a.useCallback)(e=>t.current?.isDemoAccount(e)??!1,[]),v=(0,a.useCallback)(async()=>{let{EmbeddedAuditableWallet:e}=await Promise.all([r.e(5355),r.e(1484),r.e(6220),r.e(4703),r.e(4082),r.e(1106),r.e(9046),r.e(7304),r.e(7132),r.e(278),r.e(6141),r.e(9188),r.e(5736),r.e(3531),r.e(8322),r.e(970),r.e(2969),r.e(8777),r.e(1046)]).then(r.bind(r,67303));e.clearAllSavedAccounts(),t.current=null,c(null),o([]),u("disconnected"),f(null)},[]);return(0,n.jsx)(s.Provider,{value:{wallet:t.current,address:l,accounts:i,status:d,error:m,connect:x,createAccount:h,switchAccount:g,removeAccount:p,disconnect:w,clearAllSavedAccounts:v,isDemoAccount:y},children:e})}},99861:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>N});var n=r(54568),a=r(96030),s=r(7620),l=r(55027),c=r(75665),i=r(79125),o=r(75383),d=r(63531),u=r(73677);async function m(e){let{wallet:t,priceFeed:r,minter:n,pools:a,tokenPrices:s,setOracle:l=!0,onProgress:c,tokenLabels:i}=e,o=e.sendOpts??(e=>({from:e})),m=new Map;for(let e of s)m.set(e.token.address.toString(),e.price);let f=[],b=[];if(l)for(let e of s)f.push(r.methods.set_price(e.token.address.toField(),e.price));for(let e of a){let t=e.token0.address.toString(),r=e.token1.address.toString(),n=i?.get(t)??t.slice(0,10),a=i?.get(r)??r.slice(0,10),s=m.get(t),l=m.get(r);if(void 0===s||void 0===l)throw Error(`Missing price for pool tokens: ${t}, ${r}`);let c=BigInt(e.decimals0),o=BigInt(e.decimals1),d=c>o?c:o,x=e.reserve0*10n**(d-c),h=e.reserve1*10n**(d-o),g=x*s,p=h*l;if(g>p){let t=x*s/l/10n**(d-o)-e.reserve1;t>0n&&((0,u.Rm)(`  Rebalance pool(${n}../${a}..): mint ${t} of token1`),f.push(e.token1.methods.mint_to_public(e.contract.address,t)),b.push(()=>{e.reserve1+=t}))}else if(p>g){let t=h*l/s/10n**(d-c)-e.reserve0;t>0n&&((0,u.Rm)(`  Rebalance pool(${n}../${a}..): mint ${t} of token0`),f.push(e.token0.methods.mint_to_public(e.contract.address,t)),b.push(()=>{e.reserve0+=t}))}}let x=l?s.length:0,h=Math.ceil(f.length/4),g=h+1;c?.(0,g,"Preparing batches...");for(let e=0;e<f.length;e+=4){let r,a=e/4,s=Math.min(e+4,f.length),l=e<x,i=s>x;r=l&&i?`Batch ${a+1}/${h}: setting prices & rebalancing...`:l?`Batch ${a+1}/${h}: setting prices...`:`Batch ${a+1}/${h}: rebalancing pools...`,c?.(a+1,g,r);let u=f.slice(e,s);await new d.D2(t,u).send(o(n))}for(let e of b)e();c?.(g,g,"Done")}var f=r(7514),b=r(66930),x=r(77079),h=r(30902),g=r(11675);let p=Object.entries(h.xZ).filter(([e])=>o.tC[e]).map(([e,t])=>
1({symbol:e,token:t}));function w(e){return e>=1?e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4})}function y({rows:e,connected:t,executing:r,isDemo:s,onPriceChange:l,onRemove:c}){return(0,n.jsxs)("div",{className:"space-y-2",children:[0===e.length&&(0,n.jsx)("div",{className:"text-center py-6 text-sm text-neutral-400",children:"Add tokens to set their oracle prices"}),e.map(e=>{let i=p.find(t=>t.symbol===e.symbol),o=""!==e.currentPrice&&""!==e.newPrice&&e.newPrice!==e.currentPrice;return(0,n.jsxs)("div",{className:"flex items-center gap-3 rounded-xl bg-neutral-50 border border-neutral-100 px-4 py-3",children:[i&&(0,n.jsx)(g.A,{token:i.token,size:"sm"}),(0,n.jsx)("span",{className:"text-sm font-medium text-neutral-800 w-16",children:e.symbol}),(0,n.jsx)("span",{className:"text-xs text-neutral-400 flex-shrink-0",children:e.loading?(0,n.jsx)("span",{className:"inline-block w-3 h-3 border border-neutral-300 border-t-transparent rounded-full animate-spin align-middle"}):e.currentPrice?`$${w(parseFloat(e.currentPrice))}`:"--"}),(0,n.jsx)("input",{type:"text",inputMode:"decimal",placeholder:"0.00",value:e.newPrice,onChange:t=>l(e.symbol,t.target.value),disabled:!t||r||s,className:"flex-1 text-right text-sm font-mono bg-white border border-neutral-200 rounded-lg px-2 py-1.5 outline-none focus:border-orange-400 disabled:bg-neutral-100 disabled:text-neutral-400"}),o&&(0,n.jsx)("span",{className:"text-orange-500 text-sm font-bold flex-shrink-0",children:"*"}),!r&&(0,n.jsx)("button",{onClick:()=>c(e.symbol),className:"w-5 h-5 flex items-center justify-center rounded-full text-neutral-400 hover:text-neutral-600 hover:bg-neutral-200 transition-colors flex-shrink-0",children:(0,n.jsx)(a.In,{icon:"lucide:x",width:12})})]},e.symbol)})]})}function v({availableTokens:e,addedSymbols:t,onAdd:r}){let[l,c]=(0,s.useState)(!1),[i,o]=(0,s.useState)(""),d=(0,s.useRef)(null);(0,s.useEffect)(()=>{if(!l)return;let e=e=>{d.current&&!d.current.contains(e.target)&&(c(!1),o(""))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[l]);let u=e.filter(e=>!t.has(e.symbol)&&e.symbol.toLowerCase().includes(i.toLowerCase()));return t.size>=e.length?null:(0,n.jsxs)("div",{className:"relative mt-2",ref:d,children:[(0,n.jsxs)("button",{onClick:()=>c(e=>!e),className:"w-full py-2 rounded-xl border border-dashed border-neutral-300 text-sm text-neutral-500 hover:border-neutral-400 hover:text-neutral-700 transition-colors flex items-center justify-center gap-1.5",children:[(0,n.jsx)(a.In,{icon:"lucide:plus",width:14}),"Add Asset"]}),l&&(0,n.jsxs)("div",{className:"absolute left-0 right-0 mt-1 bg-white border border-neutral-200 rounded-xl shadow-lg z-10 overflow-hidden",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-neutral-100",children:[(0,n.jsx)(a.In,{icon:"lucide:search",width:14,className:"text-neutral-400"}),(0,n.jsx)("input",{type:"text",placeholder:"Search tokens...",value:i,onChange:e=>o(e.target.value),autoFocus:!0,className:"flex-1 text-sm outline-none bg-transparent placeholder:text-neutral-400"})]}),(0,n.jsx)("div",{className:"max-h-40 overflow-y-auto",children:0===u.length?(0,n.jsx)("div",{className:"px-3 py-2 text-xs text-neutral-400",children:"No matches"}):u.map(e=>(0,n.jsxs)("button",{onClick:()=>{r(e.symbol),c(!1),o("")},className:"w-full flex items-center gap-2.5 px-3 py-2 hover:bg-neutral-50 transition-colors",children:[(0,n.jsx)(g.A,{token:e.token,size:"sm"}),(0,n.jsx)("span",{className:"text-sm font-medium text-neutral-800",children:e.symbol})]},e.symbol))})]})]})}function C({changedTokens:e}){return 0===e.length?null:(0,n.jsxs)("div",{className:"mt-4 px-1",children:[(0,n.jsx)("span",{className:"text-xs text-neutral-500 font-medium",children:"Changes:"}),(0,n.jsx)("div",{className:"mt-1 space-y-0.5",children:e.map(e=>(0,n.jsxs)("div",{className:"text-xs text-neutral-600",children:[e.symbol,": $",w(parseFloat(e.currentPrice))," → $",w(parseFloat(e.newPrice))]},e.symbol))})]})}let S="privpnl-price-assets";function j(){let{wallet:e,address:t,status:d,isDemoAccount:u}=(0,c.k)(),{showToast:h}=(0,f.d)(),{adminRef:g,ensureAdmin:w}
1=(0,i.M)(e),j="connected"===d&&!!t&&u(t),[k,N]=(0,s.useState)(()=>{try{let e=localStorage.getItem(S);if(e)return JSON.parse(e).filter(e=>p.some(t=>t.symbol===e)).map(e=>({symbol:e,currentPrice:"",newPrice:"",loading:!1}))}catch{}return[]}),[P,E]=(0,s.useState)(!1),[A,D]=(0,s.useState)(!1),[T,$]=(0,s.useState)({step:0,total:0,label:""}),U=(0,s.useRef)(!1),_=(0,s.useRef)(k);_.current=k;let F="connected"===d,R=(0,s.useCallback)(async()=>{if(e&&t){N(e=>e.map(e=>({...e,loading:!0})));try{let{AztecAddress:n}=await r.e(4905).then(r.bind(r,9667)),{Contract:a}=await Promise.resolve().then(r.bind(r,63531)),{PriceFeedContractArtifact:s}=await Promise.all([r.e(4751),r.e(1828)]).then(r.bind(r,59447)),l="0x1a2b16e9ddcc859a7c34235fc1427febbcd5ca7945e605ed9493858e0dc32698";if(!l)throw Error("NEXT_PUBLIC_PRICE_FEED not set");let c=await a.at(n.fromString(l),s,e),i=n.fromString(t);for(let e of _.current.map(e=>e.symbol)){let t=o.tC[e];if(t)try{let r=n.fromString(t),{result:a}=await c.methods.get_price(r.toField()).simulate({from:i}),s="object"==typeof a&&null!==a&&void 0!==a.price?BigInt(a.price.toString()):BigInt(a.toString()),l=(Number(s)/b.Ns).toString();N(t=>t.map(t=>t.symbol===e?{...t,currentPrice:l,newPrice:""===t.newPrice||t.newPrice===t.currentPrice?l:t.newPrice,loading:!1}:t))}catch(t){console.warn(`Failed to fetch price for ${e}:`,t),N(t=>t.map(t=>t.symbol===e?{...t,loading:!1}:t))}}}catch(e){console.error("Failed to initialize PriceFeed contract:",e),N(e=>e.map(e=>({...e,loading:!1})))}}},[e,t]);(0,s.useEffect)(()=>{F&&e&&!U.current&&(U.current=!0,e.enqueue(()=>R()))},[F,e,R]),(0,s.useEffect)(()=>{F||(U.current=!1,N(e=>e.map(e=>({...e,currentPrice:"",newPrice:"",loading:!1}))))},[F]);let I=(0,s.useCallback)((e,t)=>{(""===t||/^\d*\.?\d*$/.test(t)&&!(t.startsWith("0")&&t.length>1&&"."!==t[1]))&&N(r=>r.map(r=>r.symbol===e?{...r,newPrice:t}:r))},[]),Z=(0,s.useCallback)(e=>{try{localStorage.setItem(S,JSON.stringify(e.map(e=>e.symbol)))}catch{}},[]),M=(0,s.useCallback)(t=>{N(e=>{if(e.some(e=>e.symbol===t))return e;let r=[...e,{symbol:t,currentPrice:"",newPrice:"",loading:!1}];return Z(r),r}),e&&F&&(U.current=!1,e.enqueue(()=>R()))},[e,F,R,Z]),L=(0,s.useCallback)(e=>{N(t=>{let r=t.filter(t=>t.symbol!==e);return Z(r),r})},[Z]),O=(0,s.useMemo)(()=>new Set(k.map(e=>e.symbol)),[k]),B=(0,s.useMemo)(()=>k.filter(e=>""!==e.currentPrice&&""!==e.newPrice&&e.newPrice!==e.currentPrice),[k]),z=(0,s.useMemo)(()=>o.S6.filter(e=>B.some(t=>t.symbol===e.token0||t.symbol===e.token1)),[B]),H=(0,s.useCallback)(async()=>{if(e&&t&&!P&&0!==B.length){E(!0);try{if($({step:0,total:1,label:"Registering admin..."}),!await w())throw Error("Admin account not available");let{AztecAddress:n}=await r.e(4905).then(r.bind(r,9667)),{Contract:a}=await Promise.resolve().then(r.bind(r,63531)),{PriceFeedContractArtifact:s}=await Promise.all([r.e(4751),r.e(1828)]).then(r.bind(r,59447)),{TokenContractArtifact:l}=await Promise.all([r.e(2908),r.e(6849)]).then(r.bind(r,9230)),c="0x1a2b16e9ddcc859a7c34235fc1427febbcd5ca7945e605ed9493858e0dc32698";if(!c)throw Error("NEXT_PUBLIC_PRICE_FEED not set");let i=await a.at(n.fromString(c),s,e),d=[],u=new Map;for(let e of k){let t=parseFloat(e.newPrice||e.currentPrice);isNaN(t)||u.set(e.symbol,t)}for(let[e,t]of(u.set("USDC",1),u)){let r=o.tC[e];if(!r)continue;let a=n.fromString(r);d.push({token:{address:a},price:BigInt(Math.round(t*b.Ns))})}let f=new Map;for(let[e,t]of Object.entries(o.tC))t&&f.set(t,e);let p=[];for(let r of z){if(!r.address)continue;let s=n.fromString(r.address),c=o.tC[r.token0],i=o.tC[r.token1];if(!c||!i)continue;let d=await a.at(n.fromString(c),l,e),u=await a.at(n.fromString(i),l,e),m=n.fromString(t),[{result:f},{result:b}]=await Promise.all([d.methods.balance_of_public(s).simulate({from:m}),u.methods.balance_of_public(s).simulate({from:m})]);p.push({contract:{address:s},token0:d,token1:u,reserve0:"bigint"==typeof f?f:BigInt(f.toString()),reserve1:"bigint"==typeof b?b:BigInt(b.toString()),decimals0:o.NX[r.token0]??o.xS,decimals1:o.NX[r.token1]??o.xS})}let y=await (0,x.$)();await m({wallet:e,priceFeed:i,minter:g.current,pools:p,tokenPrices:d,sendOpts:y?e=>({from:e,fee:{paymentMethod:y}}):e=>({from:e}),onProgress:(e,t,r)=>{$({step:e,total:t,label:r})},tokenLabels:f}),N(e=>e.map(e=>({...e,currentPrice:e.newPrice||e.currentPrice}))),h("Prices updated and pools rebalanced","success")}catch(e){console.error("Apply & Rebalance failed:",e),h(e instanceof Error?e.message:"Failed to apply changes","error")}finally{E(!1),$({step:0,total:0,label:""})}}},[e,t,P,B,z,k,w,h]),q=(0,s.useCallback)(()=>{e&&F&&(U.current=!1,e.enqueue(()=>R()))},[e,F,R]),X=(0,s.useCallback)(async()=>
1{if(!A&&!P){D(!0);try{let t=await fetch("/api/prices");if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`Failed to fetch live prices (${t.status})`)}let r=await t.json();N(e=>{let t=new Set(e.map(e=>e.symbol)),n=e.map(e=>{let t=r[e.symbol];return null!=t&&"USDC"!==e.symbol?{...e,newPrice:t.toString()}:e}),a=[];for(let e of Object.keys(r))!("USDC"===e||t.has(e))&&p.some(t=>t.symbol===e)&&a.push({symbol:e,currentPrice:"",newPrice:r[e].toString(),loading:!1});let s=[...n,...a];return Z(s),s}),e&&F&&(U.current=!1,e.enqueue(()=>R())),h("Live prices loaded from CoinGecko","success")}catch(e){console.error("Sync live prices failed:",e),h(e instanceof Error?e.message:"Failed to sync live prices","error")}finally{D(!1)}}},[A,P,e,F,R,Z,h]),K="Apply & Rebalance",W=!1;F?j?(K="Demo Account",W=!0):0===B.length?(K="No price changes",W=!0):P&&(K="Executing...",W=!0):(K="Connect Wallet",W=!0);let G=T.total>0?Math.round(T.step/T.total*100):0;return(0,n.jsxs)("div",{className:"w-full max-w-md bg-white rounded-2xl border border-neutral-200 shadow-sm p-6",children:[j&&(0,n.jsx)("div",{className:"mb-4 rounded-lg bg-amber-50 border border-amber-200 px-4 py-3 text-xs text-amber-700",children:"Changing demo account state is restricted — make a new account to create a PnL proof with live data!"}),(0,n.jsxs)("div",{className:"flex items-center justify-between mb-5",children:[(0,n.jsx)("h2",{className:"text-lg font-semibold text-neutral-900",children:"Set Oracle Prices"}),(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[F&&(0,n.jsxs)("button",{onClick:X,disabled:P||A,className:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium text-orange-600 hover:bg-orange-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[A?(0,n.jsx)("span",{className:"inline-block w-3 h-3 border-2 border-orange-400 border-t-transparent rounded-full animate-spin"}):(0,n.jsx)(a.In,{icon:"lucide:globe",width:14}),"Sync Live"]}),F&&(0,n.jsx)("button",{onClick:q,disabled:P,className:"w-8 h-8 flex items-center justify-center rounded-full hover:bg-neutral-100 text-neutral-500 transition-colors disabled:opacity-50",children:(0,n.jsx)(a.In,{icon:"lucide:refresh-cw",width:16})})]})]}),(0,n.jsx)(y,{rows:k,connected:F,executing:P,isDemo:j,onPriceChange:I,onRemove:L}
1),!P&&(0,n.jsx)(v,{availableTokens:p,addedSymbols:O,onAdd:M}),!P&&(0,n.jsx)(C,{changedTokens:B}),P&&T.total>0&&(0,n.jsxs)("div",{className:"mt-4 space-y-2",children:[(0,n.jsx)(l.A,{progress:G}),(0,n.jsxs)("div",{className:"flex items-center justify-between",children:[(0,n.jsx)("span",{className:"text-xs text-neutral-500",children:T.label}),(0,n.jsxs)("span",{className:"text-xs text-neutral-400 font-mono",children:[G,"%"]})]})]}),(0,n.jsxs)("button",{onClick:H,disabled:W,className:"mt-4 w-full py-3 rounded-xl font-medium text-sm transition-colors flex items-center justify-center gap-2 disabled:bg-neutral-100 disabled:text-neutral-400 disabled:cursor-not-allowed bg-orange-500 text-white hover:bg-orange-600 active:bg-orange-700",children:[P&&(0,n.jsx)("span",{className:"inline-block w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin"}),K]})]})}var k=r(19449);function N(){return(0,n.jsx)(k.A,{children:(0,n.jsxs)("main",{className:"flex-grow max-w-6xl mx-auto px-6 py-16 w-full flex flex-col items-center",children:[(0,n.jsx)("p",{className:"text-sm text-neutral-500 max-w-md text-center mb-6",children:"Adjust oracle prices to simulate market movements and see how they affect your PnL statement in this demo."}),(0,n.jsxs)("div",{className:"w-full max-w-md mb-4 rounded-xl bg-amber-50 border border-amber-200 px-4 py-3 flex gap-3",children:[(0,n.jsx)(a.In,{icon:"lucide:triangle-alert",width:16,className:"text-amber-500 flex-shrink-0 mt-0.5"}),(0,n.jsxs)("p",{className:"text-xs text-amber-700 leading-relaxed",children:["Oracle prices may be out of sync with real market prices due to previous demo activity. Use the"," ",(0,n.jsx)("span",{className:"font-semibold",children:"Sync Live"})," button to reset all token prices to current CoinGecko values and rebalance the pools."]})]}),(0,n.jsx)(j,{})]})})}}},e=>{e.O(0,[5355,1484,6220,4703,4082,1106,9046,7304,7132,278,6141,9188,5736,3531,6030,587,1968,7358],()=>e(e.s=70218)),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.