Reso / oracle /test_api.py
salch-cred
feat: Add interactive Python API backend and Cryptography Sandbox UI
0291e59
Raw
History Blame Contribute Delete
2.94 kB
import urllib.request
import json
import time
API_BASE = "http://127.0.0.1:8000"
def post_json(endpoint, data):
req = urllib.request.Request(
f"{API_BASE}{endpoint}",
data=json.dumps(data).encode("utf-8"),
headers={"Content-Type": "application/json"}
)
with urllib.request.urlopen(req) as res:
return json.loads(res.read().decode())
def get_json(endpoint):
with urllib.request.urlopen(f"{API_BASE}{endpoint}") as res:
return json.loads(res.read().decode())
def test_flow():
print("--- 1. Getting current rules ---")
rules = get_json("/api/rules")
print("Current rules:", json.dumps(rules, indent=2))
print("\n--- 2. Registering a new wallet (Test User) ---")
new_wallet = {
"address": "GTEST1234567890",
"kyc_tier": 1,
"is_sanctioned": False,
"name": "Test User"
}
reg_res = post_json("/api/wallets", new_wallet)
print("Registration response (Merkle root updated):", reg_res["sanctions_merkle_root"])
print("\n--- 3. Simulating a compliant transfer (500 USD) ---")
sim_res = post_json("/api/simulate-transfer", {
"sender": "GTEST1234567890",
"amount": 500.0
})
print("Compliant?", sim_res["compliant"])
print("Reason:", sim_res["reason"])
print("\n--- 4. Registering a sanctioned wallet (Blocked Entity) ---")
blocked_wallet = {
"address": "GBLOCKED987654",
"kyc_tier": 1,
"is_sanctioned": True,
"name": "Blocked Entity"
}
reg_res_2 = post_json("/api/wallets", blocked_wallet)
print("New Merkle root:", reg_res_2["sanctions_merkle_root"])
print("\n--- 5. Simulating a transfer from sanctioned wallet (should be blocked) ---")
sim_res_2 = post_json("/api/simulate-transfer", {
"sender": "GBLOCKED987654",
"amount": 100.0
})
print("Compliant?", sim_res_2["compliant"])
print("Rule checked:", sim_res_2["event"]["rule_checked"])
print("Reason:", sim_res_2["reason"])
print("\n--- 6. Updating rules to require KYC Tier 2 ---")
rules["min_kyc_tier"] = 2
updated_rules = post_json("/api/rules", rules)
print("Updated rules:", json.dumps(updated_rules, indent=2))
print("\n--- 7. Simulating transfer with Test User (Tier 1) again (should be blocked due to KYC) ---")
sim_res_3 = post_json("/api/simulate-transfer", {
"sender": "GTEST1234567890",
"amount": 500.0
})
print("Compliant?", sim_res_3["compliant"])
print("Rule checked:", sim_res_3["event"]["rule_checked"])
print("Reason:", sim_res_3["reason"])
print("\n--- 8. Fetching audit logs ---")
logs = get_json("/api/audit-logs")
print(f"Total audit logs fetched: {len(logs)}")
print("Latest log entry:")
print(json.dumps(logs[0], indent=2))
if __name__ == "__main__":
# Wait a second for server to initialize if needed
time.sleep(1)
test_flow()