@@ -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