> For the complete documentation index, see [llms.txt](https://docs.scrt.network/secret-network-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.scrt.network/secret-network-documentation/development/development-concepts/contract-migration/contract-migration-flow-from-v1.21/technical-details.md).

# Technical Details

### New Data Structures

#### ContractInfo Enhancement

```protobuf
message ContractInfo {
  // ... existing fields ...
  bool require_governance = 9;  // NEW FIELD
}
```

**Purpose**: Flag indicating whether governance approval is required for migrations. Behavior: One-way ratchet (can only change from false → true)

### New Message Types

**MigrateContractInfo**

```protobuf
message MigrateContractInfo {
  string address = 1;
  uint64 new_code_id = 2;
}
```

**Purpose**: Individual contract migration specification for batch operations.

**MsgMigrateContractProposal**

```protobuf
message MsgMigrateContractProposal {
  string authority = 1; // Governance module address
  string title = 2; // Proposal title
  string description = 3; // Proposal description
  repeated MigrateContractInfo contracts = 4; // Multiple contracts
}
```

**Purpose**: Governance message to authorize a specific contract migration.&#x20;

**Authority**: Only callable by governance module.

**MsgSetContractGovernance**

```protobuf
message MsgSetContractGovernance {
  string sender = 1; // Contract admin
  string contract_address = 2; // Target contract
}
```

**Purpose**: Admin message to enable governance requirement for a contract.

**Behavior**: Always sets require\_governance = true (simplified one-way operation).

### New Query Types

**QueryAuthorizedMigrationRequest/Response**

```protobuf
message QueryAuthorizedMigrationRequest {
  string contract_address = 1;
}
message QueryAuthorizedMigrationResponse {
  uint64 new_code_id = 1; // Authorized code ID (0 if none)
}
```

**Purpose**: Query pending governance authorizations for a contract.

<br>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.scrt.network/secret-network-documentation/development/development-concepts/contract-migration/contract-migration-flow-from-v1.21/technical-details.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
