Skip to content

Commit 6e4d07b

Browse files
TEB1157claude
andcommitted
feat: add bridge_in, bridge_out, bridge_status methods
Sync and async variants for bridge deposit reporting, burn/release initiation, and operation status queries. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 06fe63f commit 6e4d07b

1 file changed

Lines changed: 116 additions & 0 deletions

File tree

zero_network/client.py

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,3 +205,119 @@ def faucet(self, address: str) -> Dict[str, Any]:
205205
async def afaucet(self, address: str) -> Dict[str, Any]:
206206
"""Request testnet funds from the faucet (async)."""
207207
return await self._async_post(f"{self.faucet_url}/faucet", {"address": address})
208+
209+
# ── POST /api/bridge/in ──────────────────────────────────────────
210+
211+
def bridge_in(
212+
self,
213+
source_chain: str,
214+
token: str,
215+
tx_hash: str,
216+
zero_recipient: str,
217+
) -> Dict[str, Any]:
218+
"""Report an L2 deposit to begin bridge-in (minting ZERO) (sync).
219+
220+
Args:
221+
source_chain: Source chain name ("base", "arbitrum").
222+
token: Token symbol ("USDC", "USDT").
223+
tx_hash: L2 deposit transaction hash.
224+
zero_recipient: Hex-encoded Zero public key (64 chars).
225+
226+
Returns:
227+
Dict with bridge_id, status, z_amount.
228+
"""
229+
payload = {
230+
"source_chain": source_chain,
231+
"token": token,
232+
"tx_hash": tx_hash,
233+
"zero_recipient": zero_recipient,
234+
}
235+
return self._sync_post(f"{self.rpc_url}/api/bridge/in", payload)
236+
237+
async def abridge_in(
238+
self,
239+
source_chain: str,
240+
token: str,
241+
tx_hash: str,
242+
zero_recipient: str,
243+
) -> Dict[str, Any]:
244+
"""Report an L2 deposit to begin bridge-in (minting ZERO) (async)."""
245+
payload = {
246+
"source_chain": source_chain,
247+
"token": token,
248+
"tx_hash": tx_hash,
249+
"zero_recipient": zero_recipient,
250+
}
251+
return await self._async_post(f"{self.rpc_url}/api/bridge/in", payload)
252+
253+
# ── POST /api/bridge/out ─────────────────────────────────────────
254+
255+
def bridge_out(
256+
self,
257+
dest_chain: str,
258+
token: str,
259+
dest_address: str,
260+
z_amount: int,
261+
from_pubkey: str,
262+
signature: str,
263+
) -> Dict[str, Any]:
264+
"""Initiate bridge-out (burn ZERO -> release tokens on L2) (sync).
265+
266+
Args:
267+
dest_chain: Destination chain ("base", "arbitrum").
268+
token: Token to receive ("USDC", "USDT").
269+
dest_address: L2 recipient address.
270+
z_amount: Amount in Z units to burn.
271+
from_pubkey: Hex-encoded sender's Zero public key.
272+
signature: Hex-encoded Ed25519 signature over burn request.
273+
274+
Returns:
275+
Dict with bridge_id, status.
276+
"""
277+
payload = {
278+
"dest_chain": dest_chain,
279+
"token": token,
280+
"dest_address": dest_address,
281+
"z_amount": z_amount,
282+
"from_pubkey": from_pubkey,
283+
"signature": signature,
284+
}
285+
return self._sync_post(f"{self.rpc_url}/api/bridge/out", payload)
286+
287+
async def abridge_out(
288+
self,
289+
dest_chain: str,
290+
token: str,
291+
dest_address: str,
292+
z_amount: int,
293+
from_pubkey: str,
294+
signature: str,
295+
) -> Dict[str, Any]:
296+
"""Initiate bridge-out (burn ZERO -> release tokens on L2) (async)."""
297+
payload = {
298+
"dest_chain": dest_chain,
299+
"token": token,
300+
"dest_address": dest_address,
301+
"z_amount": z_amount,
302+
"from_pubkey": from_pubkey,
303+
"signature": signature,
304+
}
305+
return await self._async_post(f"{self.rpc_url}/api/bridge/out", payload)
306+
307+
# ── GET /api/bridge/status/:bridge_id ────────────────────────────
308+
309+
def bridge_status(self, bridge_id: str) -> Dict[str, Any]:
310+
"""Get status of a bridge operation (sync).
311+
312+
Args:
313+
bridge_id: Bridge operation ID.
314+
315+
Returns:
316+
Dict with bridge_id, direction, status, source_chain, token,
317+
z_amount, attestations, required.
318+
"""
319+
return self._sync_get(f"/api/bridge/status/{bridge_id}")
320+
321+
async def abridge_status(self, bridge_id: str) -> Dict[str, Any]:
322+
"""Get status of a bridge operation (async)."""
323+
return await self._async_get(f"/api/bridge/status/{bridge_id}")

0 commit comments

Comments
 (0)