# Distribute

The SEILOR token allocation contract includes a linear release of locks and warehouses, including Community Offering Liquidity, MM, Incentives, Mining Rewards, Team, and Partners & Advisors.

## Config

```rust
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct DistributeConfig {
    pub gov: Addr,
    pub total_amount: u128,
    pub distribute_token: Addr,
    pub rules_total_amount: u128,
    pub new_gov: Option<Addr>,
    pub distribute_ve_token: Addr,
    pub token_cap: Option<Uint128>,
}
```

<table><thead><tr><th width="226">Key</th><th width="163">Type</th><th>Description</th></tr></thead><tbody><tr><td>gov</td><td>Addr</td><td>The address of the governance contract</td></tr><tr><td>total_amount</td><td>u128</td><td>Total amount of SEILOR</td></tr><tr><td>distribute_token</td><td>Addr</td><td>Token address to be distributed</td></tr><tr><td>rules_total_amount</td><td>u128</td><td>Total amount of rules</td></tr><tr><td>new_gov</td><td>Addr</td><td>New Governance  address</td></tr><tr><td>distribute_ve_token</td><td>Addr</td><td>veToken address to be distributed</td></tr><tr><td>token_cap</td><td>Uint128</td><td>Token amount limit</td></tr></tbody></table>

## InitMsg

```rust
#[cw_serde]
pub struct InstantiateMsg {
    pub gov: Option<Addr>,
    pub total_amount: u128,
    pub distribute_token: Addr,
    pub rule_configs_map: HashMap<String, RuleConfigMsg>,
}

#[cw_serde]
pub struct RuleConfigMsg {
    pub rule_name: String,
    pub rule_owner: Addr,
    pub rule_total_amount: u128,
    pub start_release_amount: u128,
    pub lock_start_time: u64,
    pub lock_end_time: u64,
    pub start_linear_release_time: u64,
    pub unlock_linear_release_amount: u128,
    pub unlock_linear_release_time: u64,
}
```

```json
{
  "gov": "sei1...",
  "total_amount": "1000000000000",
  "distribute_token": "sei1...",
  "rule_configs_map": {
    "key": {
             "rule_name": "Test",
             "rule_owner": "sei1...",
             "rule_total_amount": "1000000000000",
             "start_release_amount": "0",
             "lock_start_time": "175052201",
             "lock_end_time": "185052201",
             "start_linear_release_time": "175052201",
             "unlock_linear_release_amount": "185052201",
             "unlock_linear_release_time": "185052201"
         }
  }
}
```

<table><thead><tr><th width="188">Key</th><th width="292">Type</th><th>Description</th></tr></thead><tbody><tr><td>gov*</td><td>Addr</td><td>Governance contract address</td></tr><tr><td>total_amount</td><td>u128</td><td>Total amount of SEILOR</td></tr><tr><td>distribute_token</td><td>Addr</td><td>Token address to be distributed</td></tr><tr><td>rule_configs_map</td><td>HashMap&#x3C;String, RuleConfigMsg></td><td>Rule configuration map</td></tr></tbody></table>

<table><thead><tr><th width="284">Key</th><th width="199">Type</th><th>Description</th></tr></thead><tbody><tr><td>rule_name</td><td>String</td><td>Rule name</td></tr><tr><td>rule_owner</td><td>Addr</td><td>Rule owner</td></tr><tr><td>rule_total_amount</td><td>u128</td><td>Rule total amount</td></tr><tr><td>start_release_amount</td><td>u128</td><td>Start release amount</td></tr><tr><td>lock_start_time</td><td>u64</td><td>Lock start time</td></tr><tr><td>lock_end_time</td><td>u64</td><td>Lock end time</td></tr><tr><td>start_linear_release_time</td><td>u64</td><td>Start linear release time</td></tr><tr><td>unlock_linear_release_amount</td><td>u128</td><td>Unlock linear release amount</td></tr><tr><td>unlock_linear_release_time</td><td>u64</td><td>Unlock linear release time</td></tr></tbody></table>

## ExecuteMsg

### Claim

Claim the vested SEILOR tokens.

```rust
#[cw_serde]
pub enum ExecuteMsg {
    Claim {
        rule_type: String,
        msg: Option<Binary>,
    },
}
```

```json
{
  "claim": {
    "rule_type": "String",
    "msg": "Binary"
  }
}
```

<table><thead><tr><th width="167">Key</th><th width="191">Type</th><th>Description</th></tr></thead><tbody><tr><td>rule_type</td><td>String</td><td>Rule type</td></tr><tr><td>msg*</td><td>Binary</td><td>Message</td></tr><tr><td></td><td></td><td></td></tr></tbody></table>

\* = optional

### UpdateConfig

Update the configuration of the contract.

```rust
#[cw_serde]
pub enum ExecuteMsg {
    UpdateConfig {
        gov: Option<Addr>,
        distribute_token: Option<Addr>,
    },
}
```

```json
{
  "update_config": {
    "gov": "Addr",
    "distribute_token": "Addr"
  }
}
```

<table><thead><tr><th width="195">Key</th><th width="175">Type</th><th>Description</th></tr></thead><tbody><tr><td>gov*</td><td>Addr</td><td>Governance contract address</td></tr><tr><td>distribute_token*</td><td>Addr</td><td>Token address to be distributed</td></tr><tr><td></td><td></td><td></td></tr></tbody></table>

\* = optional

### UpdateRuleConfig

Update the configuration of the rule.

```rust
#[cw_serde]
pub enum ExecuteMsg {
    UpdateRuleConfig {
        update_rule_msg: UpdateRuleConfigMsg,
    },
}

#[cw_serde]
pub struct UpdateRuleConfigMsg {
    pub rule_type: String,
    pub rule_name: Option<String>,
    pub rule_owner: Option<Addr>,
}
```

<pre class="language-json"><code class="lang-json">{
  "update_rule_config": {
    "update_rule_msg": {
         "rule_type": "String",
         "rule_name": "String",
         "rule_owner": "Addr"
<strong>      }
</strong><strong>   }
</strong>}
</code></pre>

<table><thead><tr><th width="196">Key</th><th width="202">Type</th><th>Description</th></tr></thead><tbody><tr><td>update_rule_msg</td><td>UpdateRuleConfigMsg</td><td></td></tr></tbody></table>

<table><thead><tr><th width="198">Key</th><th width="204"></th><th></th></tr></thead><tbody><tr><td>rule_type</td><td>String</td><td>Rule type</td></tr><tr><td>rule_name*</td><td>String</td><td>Rule name</td></tr><tr><td>rule_owner*</td><td>Addr</td><td>Rule owner</td></tr></tbody></table>

\* = optional

### AddRuleConfig

```rust
#[cw_serde]
pub enum ExecuteMsg {
    AddRuleConfig {
        rule_type: String,
        rule_msg: RuleConfigMsg,
    },
}

#[cw_serde]
pub struct RuleConfigMsg {
    pub rule_name: String,
    pub rule_owner: Addr,
    pub rule_total_amount: u128,
    pub start_release_amount: u128,
    pub lock_start_time: u64,
    pub lock_end_time: u64,
    pub start_linear_release_time: u64,
    pub unlock_linear_release_amount: u128,
    pub unlock_linear_release_time: u64,
}
```

<pre class="language-json"><code class="lang-json">{
  "add_rule_config": {
     "rule_type": "String",
     "rule_msg": {
        "rule_name": "String",
        "rule_owner": "Addr",
        "rule_total_amount": "u128",
        "start_release_amount": "u128",
        "lock_start_time": "u64",
        "lock_end_time": "u64",
        "start_linear_release_time": "u64",
        "unlock_linear_release_amount": "u128",
        "unlock_linear_release_time": "u64"
    }
  }
<strong>}
</strong></code></pre>

<table><thead><tr><th width="192">Key</th><th width="176">Type</th><th>Description</th></tr></thead><tbody><tr><td>rule_type</td><td>String</td><td>Rule type</td></tr><tr><td>rule_msg*</td><td>RuleConfigMsg</td><td>Rule config</td></tr><tr><td></td><td></td><td></td></tr></tbody></table>

<table><thead><tr><th width="279">Key</th><th width="181">Type</th><th>Description</th></tr></thead><tbody><tr><td>rule_name</td><td>String</td><td>Rule name</td></tr><tr><td>rule_owner</td><td>Addr</td><td>Rule owner</td></tr><tr><td>rule_total_amount</td><td>u128</td><td>Rule total amount</td></tr><tr><td>start_release_amount</td><td>u128</td><td>Start release amount</td></tr><tr><td>lock_start_time</td><td>u64</td><td>Lock start time</td></tr><tr><td>lock_end_time</td><td>u64</td><td>Lock end time</td></tr><tr><td>start_linear_release_time</td><td>u64</td><td>Start linear release time</td></tr><tr><td>unlock_linear_release_amount</td><td>u128</td><td>Unlock linear release amount</td></tr><tr><td>unlock_linear_release_time</td><td>u64</td><td>Unlock linear release time</td></tr></tbody></table>

## QueryMsg

### QueryClaimableInfo&#x20;

Query the claimable info.

```rust
#[cw_serde]
#[cw_serde]
#[derive(QueryResponses)]
pub enum QueryMsg {
    #[returns(QueryClaimableInfoResponse)]
    QueryClaimableInfo { rule_type: String },
}
```

```json
{
  "query_claimable_info": {
    "rule_type": "String"
  }
}
```

<table><thead><tr><th width="184">Key</th><th width="148">Type</th><th>Description</th></tr></thead><tbody><tr><td>rule_type</td><td>String</td><td>Rule type</td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr></tbody></table>

### QueryClaimableInfoResponse&#x20;

```rust
#[cw_serde]
pub struct QueryClaimableInfoResponse {
    pub can_claim_amount: u128,
    pub release_amount: u128,
    pub linear_release_amount: u128,
}
```

```json
{
  "can_claim_amount": "u128",
  "release_amount": "u128",
  "linear_release_amount": "u128"
}
```

<table><thead><tr><th width="233">Key</th><th width="107">Type</th><th>Description</th></tr></thead><tbody><tr><td>can_claim_amount</td><td>u128</td><td>Can claim amount</td></tr><tr><td>release_amount</td><td>u128</td><td>Release amount</td></tr><tr><td>linear_release_amount</td><td>u128</td><td>Linear release amount</td></tr></tbody></table>

### QueryRuleInfo&#x20;

Query the rule info.

```rust
#[cw_serde]
#[derive(QueryResponses)]
pub enum QueryMsg {
    #[returns(QueryRuleInfoResponse)]
    QueryRuleInfo { rule_type: String },
}
```

```json
{
  "query_rule_info": {
    "rule_type": "String"
  }
}
```

<table><thead><tr><th width="162">Key</th><th width="174">Type</th><th>Description</th></tr></thead><tbody><tr><td>rule_type</td><td>String</td><td>Rule type</td></tr><tr><td></td><td></td><td></td></tr></tbody></table>

### QueryRuleInfoResponse&#x20;

```rust
#[cw_serde]
pub struct QueryRuleInfoResponse {
    pub rule_config: RuleConfig,
    pub rule_config_state: RuleConfigState,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct RuleConfig {
    pub rule_name: String,
    pub rule_owner: Addr,
    pub rule_total_amount: u128,
    pub start_release_amount: u128,
    pub lock_start_time: u64,
    pub lock_end_time: u64,
    pub start_linear_release_time: u64,
    pub end_linear_release_time: u64,
    pub unlock_linear_release_amount: u128,
    pub unlock_linear_release_time: u64,
    pub linear_release_per_second: u128,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct RuleConfigState {
    pub is_start_release: bool,
    pub released_amount: u128,
    pub claimed_amount: u128,
    pub last_claim_linear_release_time: u64,
}

```

```json
{
  "rule_config": {
       "rule_name": "String",
       "rule_owner": "Addr",
       "rule_total_amount": "u128",
       "start_release_amount": "u128",
       "lock_start_time": "u64",
       "lock_end_time": "u64",
       "start_linear_release_time": "u64",
       "end_linear_release_time": "u64",
       "unlock_linear_release_amount": "u128",
       "unlock_linear_release_time": "u64",
       "linear_release_per_second": "u128"
   },
  "rule_config_state": {
       "is_start_release": "bool",
       "released_amount": "u128",
       "claimed_amount": "u128",
       "last_claim_linear_release_time": "u64"
    }
}
```

<table><thead><tr><th width="184">Key</th><th width="182">Type</th><th>Description</th></tr></thead><tbody><tr><td>rule_config</td><td>RuleConfig</td><td>Rule config</td></tr><tr><td>rule_config_type</td><td>RuleConfigType</td><td>Rule config type</td></tr><tr><td></td><td></td><td></td></tr></tbody></table>

<table><thead><tr><th width="271">Key</th><th width="112">Type</th><th>Description</th></tr></thead><tbody><tr><td>rule_name</td><td>String</td><td>Rule name</td></tr><tr><td>rule_owner</td><td>Addr</td><td>Rule owner</td></tr><tr><td>rule_total_amount</td><td>u128</td><td>Rule total amount</td></tr><tr><td>start_release_amount</td><td>u128</td><td>Start release amount</td></tr><tr><td>lock_start_time</td><td>u64</td><td>Lock start time</td></tr><tr><td>lock_end_time</td><td>u64</td><td>Lock end time</td></tr><tr><td>start_linear_release_time</td><td>u64</td><td>Start linear release time</td></tr><tr><td>end_linear_release_time</td><td>u64</td><td>End linear release time</td></tr><tr><td>unlock_linear_release_amount</td><td>u128</td><td>Unlock linear release amount</td></tr><tr><td>unlock_linear_release_time</td><td>u64</td><td>Unlock linear release time</td></tr><tr><td>linear_release_per_second</td><td>u128</td><td>Linear release per second</td></tr></tbody></table>

<table><thead><tr><th width="275">Key</th><th width="149">Type</th><th>Description</th></tr></thead><tbody><tr><td>is_start_release</td><td>bool</td><td>Is start release</td></tr><tr><td>released_amount</td><td>u128</td><td>Released amount</td></tr><tr><td>claimed_amount</td><td>u128</td><td>Claimed amount</td></tr><tr><td>last_claim_linear_release_time</td><td>u64</td><td>Last claim linear release time</td></tr></tbody></table>

### QueryConfig

Query the configuration of the distribute contract.

```rust
#[cw_serde]
#[derive(QueryResponses)]
pub enum QueryMsg {
    #[returns(QueryConfigResponse)]
    QueryConfig {},
}

#[cw_serde]
pub struct QueryConfigResponse {
    pub gov: Addr,
    pub total_amount: u128,
    pub distribute_token: Addr,
    pub distribute_ve_token: Addr,
    pub rules_total_amount: u128,
    pub token_cap: Option<Uint128>,
    pub new_gov: Option<Addr>,
}

```

```json
{
  "gov": "Addr",
  "total_amount": "u128",
  "distribute_token": "Addr",
  "rules_total_amount": "u128"
}
```

<table><thead><tr><th width="230">Key</th><th width="132">Type</th><th>Description</th></tr></thead><tbody><tr><td>gov</td><td>Addr</td><td>Governance contract address</td></tr><tr><td>total_amount</td><td>u128</td><td>Total amount of SEILOR</td></tr><tr><td>distribute_token</td><td>Addr</td><td>Token address to be distributed</td></tr><tr><td>distribute_ve_token</td><td>Addr</td><td>veToken address to be distributed</td></tr><tr><td>rules_total_amount</td><td>u128</td><td>Total amount of rules</td></tr><tr><td>token_cap*</td><td>Uint128</td><td>Token amount limit</td></tr><tr><td>new_gov*</td><td>Addr</td><td>New governance contract address</td></tr></tbody></table>

\* = optional


---

# Agent Instructions: 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:

```
GET https://docs.kryptonite.finance/developer/seilor-token/distribute.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
