diff --git a/crates/aldabra-mcp/src/tools.rs b/crates/aldabra-mcp/src/tools.rs index 26d4efc..a7b4bcb 100644 --- a/crates/aldabra-mcp/src/tools.rs +++ b/crates/aldabra-mcp/src/tools.rs @@ -1310,7 +1310,7 @@ impl WalletService { #[tool( name = "dao_register", - description = "Register a DAO config (Sulkta, Bob's, etc) at $ALDABRA_DATA/daos/.json. First-registered DAO becomes active automatically. Args: name (lowercase letters/digits/underscore/dash), governor_addr, stakes_addr, treasury_addr (all bech32), gov_token_policy (56 hex chars), gov_token_name_hex (hex of asset name), initial_spend (txhash#index, the Agora bootstrap tx ref), max_cosigners (u32), treasury_ref_config (56 hex chars). Optional: description, network (mainnet/preprod/preview, default mainnet)." + description = "Register a DAO config (Sulkta, Bob's, etc) at $ALDABRA_DATA/daos/.json. First-registered DAO becomes active automatically. Required: name (lowercase letters/digits/underscore/dash), governor_addr, stakes_addr, treasury_addr (all bech32), gov_token_policy (56 hex chars), gov_token_name_hex (hex of asset name), initial_spend (txhash#index, the Agora bootstrap tx ref), max_cosigners (u32), treasury_ref_config (56 hex chars). Optional: description, network (mainnet/preprod/preview, default mainnet), and Phase-4 prerequisites — proposal_addr, stake_st_policy, proposal_st_policy (56 hex), plus reference UTxO refs (`txhash#index`) for governor_validator / stake_validator / proposal_validator / stake_st_policy / proposal_st_policy. The optional Phase-4 fields can be populated now or later via dao_discover_scripts (when shipped)." )] async fn dao_register( &self, @@ -1326,6 +1326,14 @@ impl WalletService { max_cosigners, treasury_ref_config, network, + proposal_addr, + stake_st_policy, + proposal_st_policy, + governor_validator_ref, + stake_validator_ref, + proposal_validator_ref, + stake_st_policy_ref, + proposal_st_policy_ref, }: DaoRegisterArgs, ) -> Result { let cfg = DaoConfig { @@ -1344,12 +1352,17 @@ impl WalletService { Some("preview") => DaoNetwork::Preview, _ => DaoNetwork::Mainnet, }, - // Optional discovery fields — populated by `dao_discover_scripts` - // after registration. - proposal_addr: None, - stake_st_policy: None, - proposal_st_policy: None, - script_refs: ScriptRefs::default(), + proposal_addr, + stake_st_policy, + proposal_st_policy, + script_refs: ScriptRefs { + governor_validator: governor_validator_ref, + stake_validator: stake_validator_ref, + proposal_validator: proposal_validator_ref, + treasury_validator: None, + stake_st_policy: stake_st_policy_ref, + proposal_st_policy: proposal_st_policy_ref, + }, }; self.inner .dao_store @@ -1680,6 +1693,38 @@ pub struct DaoRegisterArgs { /// "mainnet" | "preprod" | "preview". Default mainnet. #[serde(default)] pub network: Option, + + // ─── Phase 4 prerequisites — all optional ───────────────────────────── + // + // Populate these to unlock dao_proposal_create_unsigned and the + // upcoming vote/cosign/advance tools. Each can be discovered via + // chain queries (the audit pattern at memory/audit-sulkta-agora-*.md); + // a future dao_discover_scripts MCP tool will fill them automatically. + + /// Proposal validator address (bech32). Where new proposal UTxOs land. + #[serde(default)] + pub proposal_addr: Option, + /// 56 hex chars — StakeST minting policy id. + #[serde(default)] + pub stake_st_policy: Option, + /// 56 hex chars — ProposalST minting policy id. + #[serde(default)] + pub proposal_st_policy: Option, + /// `txhash#index` reference UTxO carrying the governor validator script. + #[serde(default)] + pub governor_validator_ref: Option, + /// `txhash#index` reference UTxO carrying the stake validator script. + #[serde(default)] + pub stake_validator_ref: Option, + /// `txhash#index` reference UTxO carrying the proposal validator script. + #[serde(default)] + pub proposal_validator_ref: Option, + /// `txhash#index` reference UTxO carrying the StakeST minting policy script. + #[serde(default)] + pub stake_st_policy_ref: Option, + /// `txhash#index` reference UTxO carrying the ProposalST minting policy script. + #[serde(default)] + pub proposal_st_policy_ref: Option, } #[derive(Debug, Deserialize, schemars::JsonSchema)]