# ============================================================================== # COPYRIGHT NO ONE EVERYWHERE LLC (WYOMING HOLDING COMPANY) # PROJECT: SOVEREIGN STACK # This artifact is entirely proprietary and cryptographically proven. # Open-Source usage requires explicit permission from Brandon Scott Schneider. # ============================================================================== import asyncio import os import json from coinbase_client_helper import CoinbaseClient from z_bridge_protocol import ZBridgeProtocol from dotenv import load_dotenv async def execute_shielding(test_mode=True): from coinbase.rest import RESTClient load_dotenv() key_name = os.getenv("COINBASE_API_KEY_NAME") key_secret = os.getenv("COINBASE_API_KEY_PRIVATE_KEY", "").replace("\\n", "\n") client = RESTClient(api_key=key_name, api_secret=key_secret) bridge = ZBridgeProtocol() address = bridge.state["config"]["shielded_pool_z_address"] if address == "__PENDING_USER_Z_ADDRESS__": print("[!] Error: No Z-Address configured in bridge state.") return # Validation: Ensure it's not a placeholder and looks like a real Z-address (UA starts with u1) if not address.startswith("u1"): print(f"[!] Error: Address {address} does not appear to be a valid Zcash Unified Address.") return # 1. Get ZEC Account UUID try: accounts = client.get_accounts() # Find the ZEC account zec_account = next((a for a in accounts.accounts if a.currency == 'ZEC'), None) if not zec_account: print("[!] Error: ZEC account not found on Coinbase.") return account_uuid = zec_account.uuid print(f"[*] Found ZEC Account: {account_uuid}") except Exception as e: print(f"[!] Error fetching accounts: {e}") return # 2. Fetch price for test calculation try: product = client.get_product("ZEC-USD") price = float(product.price) except Exception as e: print(f"[!] Could not fetch price: {e}") return if test_mode: amount = round(0.05 / price, 6) print(f"[*] TEST MODE: Sending $0.05 worth of ZEC ({amount:.6f} ZEC)") else: amount = bridge.state["totals"]["accumulated_zec"] print(f"[*] INITIATING SHIELDING: {amount:.6f} ZEC -> {address}") # 3. Execute Send Money (v2 Transaction via SDK) try: # Note: The SDK might use 'send_money' or we may need a raw post to /v2/ # Testing if 'send_money' exists based on docs if hasattr(client, 'send_money'): resp = client.send_money( account_id=account_uuid, to=address, amount=str(amount), currency="ZEC", idem=f"Z-SHIELD-{int(time.time())}" ) else: # Manual post to v2 if SDK method is missing payload = { "type": "send", "to": address, "amount": str(amount), "currency": "ZEC", "idem": f"Z-SHIELD-{int(time.time())}" } # The client.post method handles v3 prefix, so we need to bypass or use full URL # but the SDK might have a way to target v2. # Given the errors, I will try a raw post if send_money fails. raise AttributeError("send_money not found") print(f"[+] Withdrawal initiated. Response: {resp}") bridge.prepare_shielding(amount) print("[+] Bridge state updated to SHIELDING_PENDING.") except Exception as e: print(f"[!] Withdrawal failed: {e}") # Trying raw post to v2 as fallback try: print("[*] Attempting raw v2 transaction fallback...") # We need to manually construct the JWT for v2 if the SDK doesn't support it easily # but for this demo, we'll log the final failure. bridge.log_event("SHIELDING_FAILED", amount, "Exchange_Wallet", address) except Exception: pass if __name__ == "__main__": asyncio.run(execute_shielding())