Research-Stack/5-Applications/tools-scripts/utils/generate_policy_from_logic_model.py

62 lines
2.6 KiB
Python

#!/usr/bin/env python3
# ==============================================================================
# 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 argparse
import json
from datetime import datetime, timezone
from pathlib import Path
from typing import Any, Dict, List
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Generate executable simulator policy from logic model JSON.")
parser.add_argument("--model-json", required=True, help="Path to successful_bot_logic_model.json")
parser.add_argument("--out-policy", required=True, help="Output policy file path")
return parser.parse_args()
def main() -> int:
args = parse_args()
model_payload = json.loads(Path(args.model_json).read_text(encoding="utf-8"))
model = model_payload.get("model", {}) if isinstance(model_payload, dict) else {}
gates = model.get("gates", {}) if isinstance(model, dict) else {}
constraints = model.get("constraints", {}) if isinstance(model, dict) else {}
allowed_motifs = constraints.get("allowed_motifs", []) if isinstance(constraints, dict) else []
allowlist: List[Dict[str, Any]] = []
if isinstance(allowed_motifs, list):
for item in allowed_motifs:
if isinstance(item, dict):
chain = str(item.get("chain", "")).lower()
pair = str(item.get("pair", "")).upper()
if chain and pair:
allowlist.append({"chain": chain, "pair": pair})
policy: Dict[str, Any] = {
"policy_name": "learned_bot_policy_v1",
"generated_at_utc": datetime.now(timezone.utc).replace(microsecond=0).isoformat(),
"source_model": str(args.model_json),
"enforce_allowlist": True,
"allowlist_motifs": allowlist,
"gates": {
"max_gas_usd": float(gates.get("max_gas_usd", 0.0) or 0.0),
"max_slippage_bps": float(gates.get("max_slippage_bps", 0.0) or 0.0),
"min_net_pnl_usd": float(gates.get("min_net_pnl_usd", 0.0) or 0.0),
},
}
out_path = Path(args.out_policy)
out_path.parent.mkdir(parents=True, exist_ok=True)
out_path.write_text(json.dumps(policy, indent=2) + "\n", encoding="utf-8")
print(json.dumps({"wrote": str(out_path), "allowlist_motifs": len(allowlist)}, indent=2))
return 0
if __name__ == "__main__":
raise SystemExit(main())