> For the complete documentation index, see [llms.txt](https://docs.kryptonite.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kryptonite.finance/developer/seilor-token/distribute.md).

# 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
