diff --git a/apps/app/components/Icons/Base64/Azguard.ts b/apps/app/components/Icons/Base64/Azguard.ts
new file mode 100644
index 0000000..bcf8f40
--- /dev/null
+++ b/apps/app/components/Icons/Base64/Azguard.ts
@@ -0,0 +1 @@
+export const azguardBase64 = 'data:image/png;base64,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'
\ No newline at end of file
diff --git a/apps/app/components/TrainMenu/index.tsx b/apps/app/components/TrainMenu/index.tsx
index b56719c..ab42e4d 100644
--- a/apps/app/components/TrainMenu/index.tsx
+++ b/apps/app/components/TrainMenu/index.tsx
@@ -80,7 +80,7 @@ const Comp = () => {
>
{() => (
-
+
diff --git a/apps/app/components/Wallet/WalletsList.tsx b/apps/app/components/Wallet/WalletsList.tsx
index 9219b71..364b848 100644
--- a/apps/app/components/Wallet/WalletsList.tsx
+++ b/apps/app/components/Wallet/WalletsList.tsx
@@ -57,7 +57,7 @@ const WalletsList: FC = (props) => {
{
wallets.length > 0 &&
-
+
{
wallets.map((wallet, index) =>
Promise;
- confirmConnection: () => Promise;
- cancelConnection: () => void;
disconnect: () => Promise;
startDiscovery: () => void;
}
@@ -29,7 +27,6 @@ const EmojiVerificationOverlay: React.FC<{
onConfirm: () => void;
onCancel: () => void;
}> = ({ emojis, onConfirm, onCancel }) => {
- // Split emojis into a 3x3 grid (9 emojis)
const emojiChars = [...emojis];
const rows = [
emojiChars.slice(0, 3),
@@ -83,56 +80,83 @@ const EmojiVerificationOverlay: React.FC<{
export const AztecWalletProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
const [wallet, setWallet] = useState(null);
- const [connected, setConnected] = useState(false);
const [accountAddress, setAccountAddress] = useState(null);
const [discoveredProviders, setDiscoveredProviders] = useState([]);
+ const [azguardDetected, setAzguardDetected] = useState(false);
const [isDiscovering, setIsDiscovering] = useState(false);
const [pendingConnection, setPendingConnection] = useState(null);
const [verificationEmojis, setVerificationEmojis] = useState(null);
const activeProviderRef = useRef(null);
const discoveryRef = useRef<{ cancel: () => void } | null>(null);
+ const isDiscoveringRef = useRef(false);
const pendingResolveRef = useRef<((wallet: AztecWallet) => void) | null>(null);
const pendingRejectRef = useRef<((error: Error) => void) | null>(null);
const chainInfo = useAztecChainInfo();
+ const resetConnection = useCallback(() => {
+ setWallet(null);
+ setAccountAddress(null);
+ activeProviderRef.current = null;
+ }, []);
+
const startDiscovery = useCallback(async () => {
- if (typeof window === 'undefined' || isDiscovering) return;
+ if (typeof window === 'undefined' || isDiscoveringRef.current) return;
try {
+ isDiscoveringRef.current = true;
setIsDiscovering(true);
setDiscoveredProviders([]);
+ setAzguardDetected(false);
- const { WalletManager } = await import("@aztec/wallet-sdk/manager");
+ const sdkDiscoveryPromise = (async () => {
+ const { WalletManager } = await import("@aztec/wallet-sdk/manager");
- const manager = WalletManager.configure({
- extensions: { enabled: true },
- });
+ const manager = WalletManager.configure({
+ extensions: { enabled: true },
+ });
- const discovery = manager.getAvailableWallets({
- chainInfo: await chainInfo(),
- appId: AZTEC_APP_ID,
- timeout: 10000,
- onWalletDiscovered: (provider) => {
- setDiscoveredProviders(prev => {
- if (prev.some(p => p.id === provider.id)) return prev;
- return [...prev, provider];
- });
- },
- });
+ const discovery = manager.getAvailableWallets({
+ chainInfo: await chainInfo(),
+ appId: AZTEC_APP_ID,
+ timeout: 10000,
+ onWalletDiscovered: (provider) => {
+ setDiscoveredProviders(prev => {
+ if (prev.some(p => p.id === provider.id)) return prev;
+ return [...prev, provider];
+ });
+ },
+ });
- discoveryRef.current = discovery;
+ discoveryRef.current = discovery;
+ await discovery.done;
+ })();
+
+ const azguardDetectionPromise = (async () => {
+ // Poll for window.azguard since content scripts load asynchronously
+ const maxWait = 1000;
+ const interval = 100;
+ let elapsed = 0;
+ while (elapsed < maxWait) {
+ if ((window as any).azguard) {
+ setAzguardDetected(true);
+ return;
+ }
+ await new Promise(r => setTimeout(r, interval));
+ elapsed += interval;
+ }
+ })();
- await discovery.done;
+ await Promise.allSettled([sdkDiscoveryPromise, azguardDetectionPromise]);
} catch (error) {
console.error("Error during wallet discovery:", error);
} finally {
+ isDiscoveringRef.current = false;
setIsDiscovering(false);
}
- }, [chainInfo, isDiscovering]);
+ }, [chainInfo]);
- // Start discovery on mount (client-side only)
useEffect(() => {
if (typeof window === 'undefined') return;
startDiscovery();
@@ -143,6 +167,25 @@ export const AztecWalletProvider: React.FC<{ children: ReactNode }> = ({ childre
}, []); // eslint-disable-line react-hooks/exhaustive-deps
const connect = useCallback(async (providerId: string): Promise => {
+ // Azguard path: direct connection, no emoji verification
+ if (providerId === AZGUARD_PROVIDER_ID) {
+ const { AztecWallet: AzguardAztecWallet } = await import("@azguardwallet/aztec-wallet");
+ const azguardWallet = await AzguardAztecWallet.connect();
+
+ setWallet(azguardWallet);
+
+ const accounts = await azguardWallet.getAccounts();
+ const address = accounts[0]?.item?.toString() ?? accounts[0]?.toString();
+ if (address) {
+ setAccountAddress(address);
+ }
+
+ azguardWallet.onDisconnected.addHandler(() => resetConnection());
+
+ return azguardWallet;
+ }
+
+ // SDK path: emoji verification flow
const provider = discoveredProviders.find(p => p.id === providerId);
if (!provider) {
throw new Error(`Wallet provider "${providerId}" not found`);
@@ -161,7 +204,7 @@ export const AztecWalletProvider: React.FC<{ children: ReactNode }> = ({ childre
pendingResolveRef.current = resolve;
pendingRejectRef.current = reject;
});
- }, [discoveredProviders]);
+ }, [discoveredProviders, resetConnection]);
const confirmConnection = useCallback(async () => {
if (!pendingConnection) return;
@@ -169,30 +212,15 @@ export const AztecWalletProvider: React.FC<{ children: ReactNode }> = ({ childre
try {
const connectedWallet = await pendingConnection.confirm();
setWallet(connectedWallet);
- setConnected(true);
const accounts = await connectedWallet.getAccounts();
- const address = accounts[0]?.toString();
+ const address = accounts[0]?.item?.toString() ?? accounts[0]?.toString();
if (address) {
setAccountAddress(address);
}
- // Register disconnect handler
if (activeProviderRef.current) {
- activeProviderRef.current.onDisconnect(() => {
- setWallet(null);
- setConnected(false);
- setAccountAddress(null);
- activeProviderRef.current = null;
- if (typeof window !== 'undefined') {
- localStorage.removeItem("aztec_wallet_connected");
- }
- });
- }
-
- if (typeof window !== 'undefined') {
- localStorage.setItem("aztec_wallet_connected", "true");
- localStorage.setItem("aztec_wallet_provider_id", activeProviderRef.current?.id ?? "");
+ activeProviderRef.current.onDisconnect(() => resetConnection());
}
setPendingConnection(null);
@@ -209,7 +237,7 @@ export const AztecWalletProvider: React.FC<{ children: ReactNode }> = ({ childre
pendingResolveRef.current = null;
pendingRejectRef.current = null;
}
- }, [pendingConnection]);
+ }, [pendingConnection, resetConnection]);
const cancelConnection = useCallback(() => {
if (pendingConnection) {
@@ -226,33 +254,24 @@ export const AztecWalletProvider: React.FC<{ children: ReactNode }> = ({ childre
try {
if (activeProviderRef.current) {
await activeProviderRef.current.disconnect();
+ } else if (wallet && typeof wallet.disconnect === 'function') {
+ await wallet.disconnect();
}
} catch (error) {
console.error("Error disconnecting:", error);
} finally {
- setWallet(null);
- setConnected(false);
- setAccountAddress(null);
- activeProviderRef.current = null;
- if (typeof window !== 'undefined') {
- localStorage.removeItem("aztec_wallet_connected");
- localStorage.removeItem("aztec_wallet_provider_id");
- }
+ resetConnection();
}
- }, []);
+ }, [wallet, resetConnection]);
return (
diff --git a/apps/app/components/WalletProviders/index.tsx b/apps/app/components/WalletProviders/index.tsx
index b7e4fde..43d3f20 100644
--- a/apps/app/components/WalletProviders/index.tsx
+++ b/apps/app/components/WalletProviders/index.tsx
@@ -7,7 +7,7 @@ import StarknetProvider from "./StarknetProvider";
import { ImtblPassportProvider } from "./ImtblPassportProvider";
import { WalletModalProvider } from "../WalletModal";
import { WalletProvidersProvider } from "../../context/walletHookProviders";
-import { AztecWalletProvider } from "../../lib/wallets/aztec/AztecWalletProvider";
+import { AztecWalletProvider } from "./AztecWalletProvider";
import { EvmConnectorsProvider } from "@/context/evmConnectorsContext";
import { SecretDerivationProvider } from "@/context/secretDerivationContext";
diff --git a/apps/app/lib/wallets/aztec/configs.ts b/apps/app/lib/wallets/aztec/configs.ts
index 1d8b4c6..5aec11d 100644
--- a/apps/app/lib/wallets/aztec/configs.ts
+++ b/apps/app/lib/wallets/aztec/configs.ts
@@ -4,7 +4,7 @@ import { useSettingsState } from "../../../context/settings";
import KnownInternalNames from "../../knownIds";
// Default Aztec node URL
-const DEFAULT_AZTEC_NODE_URL = "https://devnet.aztec-labs.com";
+const DEFAULT_AZTEC_NODE_URL = "https://v4-devnet-2.aztec-labs.com";
// Application ID for wallet SDK discovery
export const AZTEC_APP_ID = "train-protocol";
diff --git a/apps/app/lib/wallets/aztec/useAtomicAztec.ts b/apps/app/lib/wallets/aztec/useAtomicAztec.ts
index d1fa1df..21fb1b5 100644
--- a/apps/app/lib/wallets/aztec/useAtomicAztec.ts
+++ b/apps/app/lib/wallets/aztec/useAtomicAztec.ts
@@ -5,9 +5,8 @@ import { LockDetails, LockStatus } from "../../../Models/phtlc/PHTLC"
import { hexToBytes, bytesToHex } from "./utils"
import formatAmount from "../../formatAmount"
import { TrainContract } from "./Train"
-import { useSecretDerivation } from "@/context/secretDerivationContext"
import { BaseAtomicFunctions } from "../utils/atomicTypes"
-import { secretToHashlock } from "@train-protocol/sdk"
+import { parseUnits } from "viem"
export interface UseAtomicAztecParams {
wallet: any
@@ -18,20 +17,12 @@ export interface UseAtomicAztecParams {
export default function useAtomicAztec(params: UseAtomicAztecParams): BaseAtomicFunctions {
const { wallet, accountAddress, aztecNodeUrl, sponsorAddress } = params
- const { deriveSecret } = useSecretDerivation()
const createHTLC = async (params: CreateHTLCParams) => {
+ const { nonce: timestamp, hashlock } = params;
if (!wallet) throw new Error("No wallet connected");
- const { secret, nonce: timestamp } = await deriveSecret({
- wallet: { metadata: { wallet }, providerName: 'aztec' } as any
- });
-
- const hashlock = secretToHashlock(secret);
-
- const parsedAmount = BigInt(
- Math.round(Math.pow(10, params.sourceAsset.decimals) * Number(params.amount))
- );
+ const parsedAmount = parseUnits(params.amount.toString(), params.sourceAsset.decimals);
const { userLockTransactionBuilder } = await import('./transactionBuilder')
diff --git a/apps/app/lib/wallets/aztec/useAztec.ts b/apps/app/lib/wallets/aztec/useAztec.ts
index b4f91d5..f4099ac 100644
--- a/apps/app/lib/wallets/aztec/useAztec.ts
+++ b/apps/app/lib/wallets/aztec/useAztec.ts
@@ -3,35 +3,34 @@ import { useSettingsState } from "../../../context/settings";
import { InternalConnector, Wallet, WalletProvider } from "../../../Models/WalletProvider";
import { resolveWalletConnectorIcon } from "../utils/resolveWalletIcon";
import { useMemo } from "react";
-import { useAztecNodeUrl, useAztecSponsorAddress } from "./configs";
-import { useAztecWalletContext } from "./AztecWalletProvider";
+import { useAztecWalletContext, AZGUARD_PROVIDER_ID } from "../../../components/WalletProviders/AztecWalletProvider";
+import { azguardBase64 } from "@/components/Icons/Base64/Azguard";
-export default function useAztec(): WalletProvider {
- const commonSupportedNetworks = [
- KnownInternalNames.Networks.AztecTestnet,
- ]
+const commonSupportedNetworks = [
+ KnownInternalNames.Networks.AztecTestnet,
+]
+export default function useAztec(): WalletProvider {
const { networks } = useSettingsState()
- const aztecNodeUrl = useAztecNodeUrl();
- const sponsorAddress = useAztecSponsorAddress();
-
const name = 'Aztec'
const id = 'aztec'
const {
wallet,
- connected,
accountAddress,
discoveredProviders,
+ azguardDetected,
connect,
disconnect,
} = useAztecWalletContext();
const aztecWallet = useMemo(() => {
- if (!wallet || !connected || !accountAddress) return undefined;
+ if (!wallet || !accountAddress) return undefined;
- const providerName = discoveredProviders.find(p => !p.isDisconnected())?.name ?? 'Aztec Wallet';
+ const providerName = azguardDetected && discoveredProviders.length === 0
+ ? 'Azguard'
+ : discoveredProviders.find(p => !p.isDisconnected())?.name ?? 'Aztec Wallet';
return {
id: providerName,
@@ -40,13 +39,13 @@ export default function useAztec(): WalletProvider {
address: accountAddress,
providerName: id,
isActive: true,
- icon: resolveWalletConnectorIcon({ connector: name, address: accountAddress }),
+ icon: resolveWalletConnectorIcon({ connector: name, address: accountAddress, iconUrl: providerName === 'Azguard' ? azguardBase64 : undefined }),
disconnect: () => disconnectWallets(),
withdrawalSupportedNetworks: commonSupportedNetworks,
asSourceSupportedNetworks: commonSupportedNetworks,
networkIcon: networks.find(n => commonSupportedNetworks.some(name => name === n.caip2Id))?.logoUrl
}
- }, [wallet, connected, accountAddress, networks, discoveredProviders])
+ }, [wallet, accountAddress, networks, discoveredProviders, azguardDetected])
const connectWallet = async (params?: { connector?: InternalConnector }) => {
try {
@@ -58,11 +57,13 @@ export default function useAztec(): WalletProvider {
const connectedWallet = await connect(providerId);
const accounts = await connectedWallet.getAccounts();
- const connectedAddress = accounts[0]?.toString();
+ const connectedAddress = accounts[0]?.item?.toString() ?? accounts[0]?.toString();
if (connectedAddress) {
+ const walletName = providerId === AZGUARD_PROVIDER_ID
+ ? 'Azguard'
+ : discoveredProviders.find(p => p.id === providerId)?.name ?? 'Aztec Wallet';
const activeProvider = discoveredProviders.find(p => p.id === providerId);
- const walletName = activeProvider?.name ?? 'Aztec Wallet';
const newWallet: Wallet = {
id: walletName,
@@ -91,19 +92,7 @@ export default function useAztec(): WalletProvider {
}
const availableWalletsForConnect: InternalConnector[] = useMemo(() => {
- if (discoveredProviders.length === 0) {
- // No wallets discovered — show a generic "install" prompt
- return [{
- id: 'aztec-no-wallet',
- name: 'Aztec Wallet',
- providerName: name,
- extensionNotFound: true,
- hasBrowserExtension: true,
- installUrl: "https://aztec.network/ecosystem",
- }]
- }
-
- return discoveredProviders.map(provider => ({
+ const sdkWallets: InternalConnector[] = discoveredProviders.map(provider => ({
id: provider.id,
name: provider.name,
icon: provider.icon,
@@ -111,7 +100,25 @@ export default function useAztec(): WalletProvider {
extensionNotFound: false,
hasBrowserExtension: true,
}));
- }, [discoveredProviders])
+
+ // Append Azguard if detected and not already in the SDK-discovered list
+ if (azguardDetected && !sdkWallets.some(w => w.id === AZGUARD_PROVIDER_ID)) {
+ sdkWallets.push({
+ id: AZGUARD_PROVIDER_ID,
+ name: 'Azguard',
+ icon: azguardBase64,
+ providerName: name,
+ extensionNotFound: false,
+ hasBrowserExtension: true,
+ });
+ }
+
+ if (sdkWallets.length === 0) {
+ return [];
+ }
+
+ return sdkWallets;
+ }, [discoveredProviders, azguardDetected])
const provider = {
connectWallet,
@@ -128,4 +135,4 @@ export default function useAztec(): WalletProvider {
}
return provider
-}
+}
\ No newline at end of file
diff --git a/apps/app/package.json b/apps/app/package.json
index 1a109d5..b67b924 100644
--- a/apps/app/package.json
+++ b/apps/app/package.json
@@ -12,6 +12,7 @@
"build:workers": "tsc -p tsconfig.worker.json"
},
"dependencies": {
+ "@azguardwallet/aztec-wallet": "4.0.0-devnet.2-patch.2",
"@aztec/accounts": "^4.0.0-devnet.2-patch.0",
"@aztec/aztec.js": "4.0.0-devnet.2-patch.0",
"@aztec/constants": "^4.0.0-devnet.2-patch.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 07a2bec..df6c8db 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -27,6 +27,9 @@ importers:
apps/app:
dependencies:
+ '@azguardwallet/aztec-wallet':
+ specifier: 4.0.0-devnet.2-patch.2
+ version: 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
'@aztec/accounts':
specifier: ^4.0.0-devnet.2-patch.0
version: 4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
@@ -586,6 +589,15 @@ packages:
resolution: {integrity: sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==}
engines: {node: '>=18.0.0'}
+ '@azguardwallet/aztec-wallet@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-heOBBTkkMP+mevYVCDkU0LeuZtwjrtZNrOgPaBPOmgpUcCausaeNXvX/d/GzJtB+ypJyOFNd6Wtg0Jh9rhcqRg==}
+
+ '@azguardwallet/client@0.8.0':
+ resolution: {integrity: sha512-uOZoLdSO1PpjWmnWEEBKra3lrKvu9dl0utLds70LwpCw+zjf41fv/THhNSF+wa/4r2doGrKBI5macyz2mGWd4Q==}
+
+ '@azguardwallet/types@0.8.0':
+ resolution: {integrity: sha512-owAHzqwZJIUyCcdVTj8KCuYQ8vBa7HpzBOJuK6ohuQPUadltvIa23Y1H150nztPyWZkUvdWVtIpM6tgQwIrmFA==}
+
'@aztec/accounts@4.0.0-spartan.20260218':
resolution: {integrity: sha512-vDqeBJKuupSQwGIClvDdgbLR0xgpHpIjZ7g2M1VGgG7UNtFcZWA7QOtbqdZUqzgMht8u7+ZWCpvuJAgMLoNk9w==}
engines: {node: '>=20.10'}
@@ -594,6 +606,10 @@ packages:
resolution: {integrity: sha512-46pHwZRix4XPfuvkul52wCFhEX+wHt/8VpZzquZ0dhTcZaP+YFD+TeSMCpwW/32xoYXdayWJrD+YbqZmx6IkOA==}
engines: {node: '>=20.10'}
+ '@aztec/aztec.js@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-wA97ZxtHMoRCSKjplELSqYq3opG9NUWeD7J0ZCJzjijAcHL/qF9xOQ3Zz7pBxB2pZHHCaMOitxPMLGxPU+9cCQ==}
+ engines: {node: '>=20.10'}
+
'@aztec/aztec.js@4.0.0-spartan.20260218':
resolution: {integrity: sha512-XMSKVPaXUMnna1ZuTADxgu7Z6GJd9/EMilvSDWEUgGMC/wCqydctGU3bommlKKXKvrq9MQE+fveQQwN8hDq2HA==}
engines: {node: '>=20.10'}
@@ -611,6 +627,10 @@ packages:
resolution: {integrity: sha512-2koYcKyPwVhkf15cSRpoizcVNSRUeNCD6RWYmtGm//N+vjVunchBKZbPme/TANJLSjo0Mq5k4yfuFrIsCh4OSQ==}
hasBin: true
+ '@aztec/bb.js@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-jVoayCuXNAvLc1kkZB4RurGiwzCA2PjqPornFJ7KSCWVxZiQz0YS8JpoF+DfIVJsutvEmdZ1mZOCU8w/wbeQeQ==}
+ hasBin: true
+
'@aztec/bb.js@4.0.0-spartan.20260218':
resolution: {integrity: sha512-e7zjp8KHWIEqecnPTlyEjE8NglGoWGmaRWc/M1/1Nop5eSwKvTCpx5kljBD2xeKHDyIaAuEgITFO35jpx8qtAg==}
hasBin: true
@@ -623,6 +643,10 @@ packages:
resolution: {integrity: sha512-uJQHMEn3wPvSpAh+BPJ3QIBu09byElwFTdisoAP8QVk1i3+SyvGsWTPmtmaPO+lt1XyC/0GKNMb2gd4prZFhlg==}
engines: {node: '>=20.10'}
+ '@aztec/blob-lib@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-pxFvLgh4U/ZYhuZZjKtK0OPs+9n7wL02UbdSr8fyxOqZLM/F/ViR2WGJndfRN0bUnxQNxropdVpjYHGz9Bqseg==}
+ engines: {node: '>=20.10'}
+
'@aztec/blob-lib@4.0.0-spartan.20260218':
resolution: {integrity: sha512-GFFyYyHnlRAyp2bCkaeHJ6xu+Zr7GmEeodaYXdHzWbEk6kKtEwkR6febnnOYBcOSAIiUXcKLdDqwFE25QaZODQ==}
engines: {node: '>=20.10'}
@@ -639,6 +663,10 @@ packages:
resolution: {integrity: sha512-044VJtMH/gE4km5YMMyYpVoz+mk6CjIBnUhtPYrmAkhqGB2LLrOWXdnRdtWdBah1l2httJdGPpPBzFf+tJxdJw==}
engines: {node: '>=20.10'}
+ '@aztec/constants@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-R1G3KTHM+EeP6GDxyeq3p30/vOm33Q+/nWalq/p1MI7zDXB+niUtEf0JvfTS5m/c7NzCWdKkwsjpM+TkVsA30g==}
+ engines: {node: '>=20.10'}
+
'@aztec/constants@4.0.0-spartan.20260218':
resolution: {integrity: sha512-EKJ2/QC5xJzaaPjqrKQD3oqBs5qdcdKNF7QAeX45JlGy5/Hoh1q5s5sMoJdj7nLWsyiEFhD4i3CxXWTfy715Qw==}
engines: {node: '>=20.10'}
@@ -651,6 +679,10 @@ packages:
resolution: {integrity: sha512-zB/mSR71DkcprdXBqXGrk6XTZF2XDW2A3taQVRp3otFkoVWOAoRFHbfqnpXwFza7864XdfeSPVYP9wwXqjnKVw==}
engines: {node: '>=20.10'}
+ '@aztec/entrypoints@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-cbDo/e58jE8dFgTC1R7+rDnpVCohmLeclnl/S/U6AygIOVZy8QDnPKex1KckDxmF9+u0Ra9wsUbolqAcaVZdxA==}
+ engines: {node: '>=20.10'}
+
'@aztec/entrypoints@4.0.0-spartan.20260218':
resolution: {integrity: sha512-fVgk8j6mOiqfWE5mbvZLIr2trDgtrL5+ACNKquiGGwAHrlI9PDSfWRx/t9VK8X0iJpPOVe9BMGHGAzD2sq3F8Q==}
engines: {node: '>=20.10'}
@@ -663,6 +695,10 @@ packages:
resolution: {integrity: sha512-xLCfN82uROCqHIaQoXlXopozvnvCoxU1Q4TdkuFpiXkcNF1/kQr4z9LDnDC/1T85DSf67K/IJfdFa5lNxSQAjg==}
engines: {node: '>=20.10'}
+ '@aztec/ethereum@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-orcV0IR8kIoIQrSeXMb9PXcH06nAX7zubvUlKu9Qvt16WEqp/wUApPc5euZLzIZLiCcHB0O0VTzt6FbAQwr64A==}
+ engines: {node: '>=20.10'}
+
'@aztec/ethereum@4.0.0-spartan.20260218':
resolution: {integrity: sha512-bg2wepv3SSIuzVXHrVSGJwlDaWEusxOXyU4jTZ50PGodZuA208d3g8tcKaQHsu1W7A3XFqkMZa065DsgLDAbUg==}
engines: {node: '>=20.10'}
@@ -675,6 +711,10 @@ packages:
resolution: {integrity: sha512-4qrM+zkiRcYkITgXivjDtUgU0zXv6v+qA3CUMpikjNvj4nAa28JAe5G18/QoGUS0bguouOCs4/+hxEq9+mVQbw==}
engines: {node: '>=20.10'}
+ '@aztec/foundation@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-fxM2hNLHF0HE64IxrHky1o8E5ug6uvu0BSyOdcZ+nYK+4w7wj7aVk/IrVvLAKxtwY1OPiQPk04DB76LALWaEHQ==}
+ engines: {node: '>=20.10'}
+
'@aztec/foundation@4.0.0-spartan.20260218':
resolution: {integrity: sha512-ZDv7UfSl32JZ7t7q2myJk7++dQQxvsOcvtmapsUpVBkc18lOc03suGOKPV8BWmVHQ7tUoqIVsTGpfCids4jLCg==}
engines: {node: '>=20.10'}
@@ -694,6 +734,9 @@ packages:
'@aztec/l1-artifacts@4.0.0-devnet.2-patch.0':
resolution: {integrity: sha512-/COU5YrSdIZKDh1deUK4tlVPU9EOoF4Bj6oKv50jKdloPCAjBL7VFXU34cms3PUmJBT7s124CmmGi3iWTOFQDg==}
+ '@aztec/l1-artifacts@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-b57dBQMRDYfGp5Amm8UhLktpOEKPiQyQ59M81UstJGlow59g3wayywMulFAYRUtm9BMeEsy8NMOl9npJxY5PaQ==}
+
'@aztec/l1-artifacts@4.0.0-spartan.20260218':
resolution: {integrity: sha512-qrtsfOP6gnAISRBeQPUk6KEGDPRwxTL+nhSC2uW8I+oAxS6+KRthpRsuYpv0Q41XW024V5BCPIFfp8hYLmMJFA==}
@@ -729,6 +772,9 @@ packages:
'@aztec/noir-noirc_abi@4.0.0-devnet.2-patch.0':
resolution: {integrity: sha512-DVBSwzgsd89oaF8pO6X/HngkYJK9ZXkbrCQdlMlZR1L/7SOMacoZGD35ZJQwrGYocQTR5Qj9LvtGezeFWqUiEg==}
+ '@aztec/noir-noirc_abi@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-Y+W3lGxgujuKQ4jus1TjRcNZW7UWGzAJW1HUbAA5jOjzGEO6dB89y8UYL0tZyoqj63xtgyiX/wp0OKXfRTq2Kw==}
+
'@aztec/noir-noirc_abi@4.0.0-spartan.20260218':
resolution: {integrity: sha512-BmsUeBg6g3HnpDWrQPqjAfjiCcYnEtpFNMUa88RUIiRAgcjAQF4w+lStFRm3iz74EjS1BFS/uj9YjNvdyMVOFQ==}
@@ -746,6 +792,9 @@ packages:
'@aztec/noir-types@4.0.0-devnet.2-patch.0':
resolution: {integrity: sha512-chCQlpDIP6gxUWpgSRpgRHWcAGmf9CRIhBkvdCWPKaSfr4plhLFG5pjDb7tYxaDzdgbuWwDQhjKLH8IVjOOGag==}
+ '@aztec/noir-types@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-oAAi9YCiKmTF2ww3JUoyWF+i6d1ML5rvmByEijGGhuFuuQp06BT8tgOKlRCmNHZ8n9lTeMDr/HFf2jPu/FMfuw==}
+
'@aztec/noir-types@4.0.0-spartan.20260218':
resolution: {integrity: sha512-rGgShQx1sD2Hc8lxEL0PfYF6bE59Gl+QEXgPMugNeiv0mD3UjoTl5Hosg5UIoIh1/OapELetF2FAgvGmRqQXzA==}
@@ -756,6 +805,10 @@ packages:
resolution: {integrity: sha512-7p9lWwidnysEi49jVSxD9RniCv1y1PtNJt1bcU4Dqd+j2gt3AY9EVMEgYI+yzhRrW0iqgXT9QtmfNAoY5ELjuA==}
engines: {node: '>=20.10'}
+ '@aztec/protocol-contracts@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-KGMo6N1Te9pZn76JE6aH0pM+lwBWIdQl/AhYfaq/h2aKDpbaLChvJKLPLuX3eWxlOCVMP9igdXJa7gQTCDDDfA==}
+ engines: {node: '>=20.10'}
+
'@aztec/protocol-contracts@4.0.0-spartan.20260218':
resolution: {integrity: sha512-0kxgsPSHnJTlQJqgJGalOuvbf4wddwW1qqOb5sw/4UeAaLuvOb1/r9CcsrnYs8VSKOEjHc39bkZmaq0ftmXfMA==}
engines: {node: '>=20.10'}
@@ -777,6 +830,10 @@ packages:
resolution: {integrity: sha512-WlHLQuaEgen2ILAodb4+aXimN4xntvOHCYsJhVECgIxQ+cGZCAcFBrkcbzzkAYZYd6lOoavteaDdrxFWJcQv/A==}
engines: {node: '>=20.10'}
+ '@aztec/stdlib@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-L0yjyed3WYxRD7FfDymZv1MjcEf4VDuM0Snl9gFY3pMqjRaIjQE628WPz2Q6xef9dDuzmufVkpQuyIQg36UPGg==}
+ engines: {node: '>=20.10'}
+
'@aztec/stdlib@4.0.0-spartan.20260218':
resolution: {integrity: sha512-0+6mwTG3DKdhrc52lQWeIISLFa4wf8nqfcvEGMpaxEJtYp0p9VO7luyL+Gfhw0BnX7jYyP528/twstYX0GauhQ==}
engines: {node: '>=20.10'}
@@ -793,6 +850,10 @@ packages:
resolution: {integrity: sha512-K3KZcAdgbaySMAOcCsAw9QexO0h9hlQhtY1Psjdp8tqjtMF5hPRcpGNeGn+NFkTzkp1QoPHzvJymUlv5HcYddg==}
engines: {node: '>=20.10'}
+ '@aztec/validator-ha-signer@4.0.0-devnet.2-patch.2':
+ resolution: {integrity: sha512-yEKmqMQUTZxbxBPWgTaI0HSSPXPcp3WKgm2Q59X4GeuKm+j8vHJxwYXumJzb7GoUCdp7mEBINgP+SKp6KBiD/A==}
+ engines: {node: '>=20.10'}
+
'@aztec/validator-ha-signer@4.0.0-spartan.20260218':
resolution: {integrity: sha512-IoMf1K1wf8gtHE5ZaH+kVfGp4Kccmo5XpJN0LKAJvGS3CgwL657ASTDwPTbORGADYBFESkV2gyhsUeb7jrrevQ==}
engines: {node: '>=20.10'}
@@ -1780,6 +1841,7 @@ packages:
'@magic-ext/oidc@4.2.0':
resolution: {integrity: sha512-e9v0IV38o6O98zKsNAeCMBmxKiHByeCv6/o3RuxWRmrZaxBkxZbB83133hHx02d6YmjJrwB+lpmACG+CtFtTHQ==}
+ deprecated: 'Deprecation Notice: The OIDC extension will be deprecated soon. Please migrate to API Wallet, which offers improved performance and faster response times. Learn more: https://docs.magic.link/api-wallets/introduction'
'@magic-sdk/commons@17.5.0':
resolution: {integrity: sha512-2KdLT6KTNnToOuTb92a/Ur/zGfV8/M89W+wqrcumcSmdOOyD65C80q2Gd70OF2+HZEOPEfBp8vBTfOGyRSb8fg==}
@@ -10849,6 +10911,30 @@ snapshots:
'@aws/lambda-invoke-store@0.2.3': {}
+ '@azguardwallet/aztec-wallet@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@azguardwallet/client': 0.8.0
+ '@azguardwallet/types': 0.8.0
+ '@aztec/aztec.js': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
+ '@aztec/entrypoints': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
+ '@aztec/foundation': 4.0.0-devnet.2-patch.2
+ '@aztec/stdlib': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - '@types/pg'
+ - aws-crt
+ - bufferutil
+ - debug
+ - encoding
+ - pg-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+
+ '@azguardwallet/client@0.8.0': {}
+
+ '@azguardwallet/types@0.8.0': {}
+
'@aztec/accounts@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
dependencies:
'@aztec/aztec.js': 4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
@@ -10892,6 +10978,30 @@ snapshots:
- typescript
- utf-8-validate
+ '@aztec/aztec.js@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@aztec/constants': 4.0.0-devnet.2-patch.2
+ '@aztec/entrypoints': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
+ '@aztec/ethereum': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
+ '@aztec/foundation': 4.0.0-devnet.2-patch.2
+ '@aztec/l1-artifacts': 4.0.0-devnet.2-patch.2
+ '@aztec/protocol-contracts': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
+ '@aztec/stdlib': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
+ axios: 1.13.5
+ tslib: 2.8.1
+ viem: '@aztec/viem@2.38.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)'
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - '@types/pg'
+ - aws-crt
+ - bufferutil
+ - debug
+ - encoding
+ - pg-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+
'@aztec/aztec.js@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
dependencies:
'@aztec/constants': 4.0.0-spartan.20260218
@@ -10977,6 +11087,15 @@ snapshots:
pako: 2.1.0
tslib: 2.8.1
+ '@aztec/bb.js@4.0.0-devnet.2-patch.2':
+ dependencies:
+ comlink: 4.4.2
+ commander: 12.1.0
+ idb-keyval: 6.2.2
+ msgpackr: 1.11.8
+ pako: 2.1.0
+ tslib: 2.8.1
+
'@aztec/bb.js@4.0.0-spartan.20260218':
dependencies:
comlink: 4.4.2
@@ -11004,6 +11123,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@aztec/blob-lib@4.0.0-devnet.2-patch.2':
+ dependencies:
+ '@aztec/constants': 4.0.0-devnet.2-patch.2
+ '@aztec/foundation': 4.0.0-devnet.2-patch.2
+ '@crate-crypto/node-eth-kzg': 0.10.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - supports-color
+
'@aztec/blob-lib@4.0.0-spartan.20260218':
dependencies:
'@aztec/constants': 4.0.0-spartan.20260218
@@ -11045,6 +11173,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@aztec/constants@4.0.0-devnet.2-patch.2':
+ dependencies:
+ '@aztec/foundation': 4.0.0-devnet.2-patch.2
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - supports-color
+
'@aztec/constants@4.0.0-spartan.20260218':
dependencies:
'@aztec/foundation': 4.0.0-spartan.20260218
@@ -11078,6 +11213,25 @@ snapshots:
- typescript
- utf-8-validate
+ '@aztec/entrypoints@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@aztec/constants': 4.0.0-devnet.2-patch.2
+ '@aztec/foundation': 4.0.0-devnet.2-patch.2
+ '@aztec/protocol-contracts': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
+ '@aztec/stdlib': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
+ tslib: 2.8.1
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - '@types/pg'
+ - aws-crt
+ - bufferutil
+ - debug
+ - encoding
+ - pg-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+
'@aztec/entrypoints@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
dependencies:
'@aztec/constants': 4.0.0-spartan.20260218
@@ -11136,6 +11290,26 @@ snapshots:
- typescript
- utf-8-validate
+ '@aztec/ethereum@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@aztec/blob-lib': 4.0.0-devnet.2-patch.2
+ '@aztec/constants': 4.0.0-devnet.2-patch.2
+ '@aztec/foundation': 4.0.0-devnet.2-patch.2
+ '@aztec/l1-artifacts': 4.0.0-devnet.2-patch.2
+ '@viem/anvil': 0.0.10(bufferutil@4.1.0)(utf-8-validate@5.0.10)
+ dotenv: 16.6.1
+ lodash.chunk: 4.2.0
+ lodash.pickby: 4.6.0
+ tslib: 2.8.1
+ viem: '@aztec/viem@2.38.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)'
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - typescript
+ - utf-8-validate
+
'@aztec/ethereum@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
dependencies:
'@aztec/blob-lib': 4.0.0-spartan.20260218
@@ -11203,6 +11377,33 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@aztec/foundation@4.0.0-devnet.2-patch.2':
+ dependencies:
+ '@aztec/bb.js': 4.0.0-devnet.2-patch.2
+ '@koa/cors': 5.0.0
+ '@noble/curves': 1.7.0
+ '@noble/hashes': 1.8.0
+ '@scure/bip39': 2.0.1
+ bn.js: 5.2.3
+ colorette: 2.0.20
+ detect-node: 2.1.0
+ hash.js: 1.1.7
+ koa: 2.16.4
+ koa-bodyparser: 4.4.1
+ koa-compress: 5.2.0
+ koa-router: 13.1.1
+ leveldown: 6.1.1
+ lodash.chunk: 4.2.0
+ lodash.clonedeepwith: 4.5.0
+ pako: 2.1.0
+ pino: 9.14.0
+ pino-pretty: 13.1.3
+ sha3: 2.1.4
+ undici: 5.29.0
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - supports-color
+
'@aztec/foundation@4.0.0-spartan.20260218':
dependencies:
'@aztec/bb.js': 4.0.0-spartan.20260218
@@ -11302,6 +11503,10 @@ snapshots:
dependencies:
tslib: 2.8.1
+ '@aztec/l1-artifacts@4.0.0-devnet.2-patch.2':
+ dependencies:
+ tslib: 2.8.1
+
'@aztec/l1-artifacts@4.0.0-spartan.20260218':
dependencies:
tslib: 2.8.1
@@ -11371,6 +11576,10 @@ snapshots:
dependencies:
'@aztec/noir-types': 4.0.0-devnet.2-patch.0
+ '@aztec/noir-noirc_abi@4.0.0-devnet.2-patch.2':
+ dependencies:
+ '@aztec/noir-types': 4.0.0-devnet.2-patch.2
+
'@aztec/noir-noirc_abi@4.0.0-spartan.20260218':
dependencies:
'@aztec/noir-types': 4.0.0-spartan.20260218
@@ -11427,6 +11636,8 @@ snapshots:
'@aztec/noir-types@4.0.0-devnet.2-patch.0': {}
+ '@aztec/noir-types@4.0.0-devnet.2-patch.2': {}
+
'@aztec/noir-types@4.0.0-spartan.20260218': {}
'@aztec/noir-types@4.0.2': {}
@@ -11450,6 +11661,25 @@ snapshots:
- typescript
- utf-8-validate
+ '@aztec/protocol-contracts@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@aztec/constants': 4.0.0-devnet.2-patch.2
+ '@aztec/foundation': 4.0.0-devnet.2-patch.2
+ '@aztec/stdlib': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
+ lodash.chunk: 4.2.0
+ lodash.omit: 4.5.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@types/pg'
+ - aws-crt
+ - bufferutil
+ - debug
+ - encoding
+ - pg-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+
'@aztec/protocol-contracts@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
dependencies:
'@aztec/constants': 4.0.0-spartan.20260218
@@ -11583,6 +11813,40 @@ snapshots:
- typescript
- utf-8-validate
+ '@aztec/stdlib@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@aws-sdk/client-s3': 3.998.0
+ '@aztec/bb.js': 4.0.0-devnet.2-patch.2
+ '@aztec/blob-lib': 4.0.0-devnet.2-patch.2
+ '@aztec/constants': 4.0.0-devnet.2-patch.2
+ '@aztec/ethereum': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
+ '@aztec/foundation': 4.0.0-devnet.2-patch.2
+ '@aztec/l1-artifacts': 4.0.0-devnet.2-patch.2
+ '@aztec/noir-noirc_abi': 4.0.0-devnet.2-patch.2
+ '@aztec/validator-ha-signer': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
+ '@google-cloud/storage': 7.19.0
+ axios: 1.13.5
+ json-stringify-deterministic: 1.0.12
+ lodash.chunk: 4.2.0
+ lodash.isequal: 4.5.0
+ lodash.omit: 4.5.0
+ lodash.times: 4.3.2
+ msgpackr: 1.11.8
+ pako: 2.1.0
+ tslib: 2.8.1
+ viem: '@aztec/viem@2.38.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)'
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - '@types/pg'
+ - aws-crt
+ - bufferutil
+ - debug
+ - encoding
+ - pg-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+
'@aztec/stdlib@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
dependencies:
'@aws-sdk/client-s3': 3.998.0
@@ -11700,6 +11964,23 @@ snapshots:
- typescript
- utf-8-validate
+ '@aztec/validator-ha-signer@4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@aztec/ethereum': 4.0.0-devnet.2-patch.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)
+ '@aztec/foundation': 4.0.0-devnet.2-patch.2
+ node-pg-migrate: 8.0.4(pg@8.19.0)
+ pg: 8.19.0
+ tslib: 2.8.1
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - '@types/pg'
+ - bufferutil
+ - debug
+ - pg-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+
'@aztec/validator-ha-signer@4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)':
dependencies:
'@aztec/ethereum': 4.0.0-spartan.20260218(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)