---
# System prepended metadata

title: Mainnet Warehouse Pledge/Paydown Process

---

# Mainnet Warehouse Pledge/Paydown Process

## Warehous Process Overview
_See Pre-Conditions below._

### Pledge Process
1. Warehouse Provider and Originator both setup Provenance Keys 
1. Warehouse Provider sets up Omnibus Bank account & deposits $ (receives coin)
1. Originator shares BC data with PM by granting custody of their loan pool Makers.
2. Originator shares P8e data with PM by permissioning their public key through P8e
1. Originator creates a Facility agreement - 
    1. Initiate a new facility contract. Providing the originator + warehouse addresses and advance rate
5. Originator creates a loan pool which reflects a marker
6. Originator proposes the pool to the Facility - 
    1. Execute the first step of a pledge in the contract. Provide the assets to encumber and requested $ amount for advancement
        1. Contract establishes a new marker for the provided assets and has full custody
        2. Contract deposits denom of the new marker to the originator
8. Warehouse logs into PM and accepts the proposal - 
    1. Execute the acceptance step of the contract
        1. Contract escrows requested advance amount in stablecoin from the warehouse account
10. Originator confirms transaction. 
    1. Execute the match step of the contract. 
        1. Contract deposits escrowed stablecoin to the originator's account
13. Originator may redeem coin to fiat by requesting cash out (Omnibus Bank will wire funds to destination)

## Initial State
### Originator Account (Originator)
```
address: originator_address
  coins:
  - denom: pm.pool.op
    amount: "1"
  - denom: stablecoin
    amount: "10,000,000"
```

### Originator Pool (OP)
```
{
    "baseAccount": {
        "address": "pool_address",
        "accountNumber": "1678"
    },
    "accessControl": [
        {
            "address": "pm_address",
            "permissions": [
                "ACCESS_MINT",
                "ACCESS_BURN",
                "ACCESS_DEPOSIT",
                "ACCESS_WITHDRAW",
                "ACCESS_DELETE",
                "ACCESS_ADMIN",
                "ACCESS_TRANSFER"
            ]
        }
    ],
    "status": "MARKER_STATUS_ACTIVE",
    "denom": "pm.pool.op",
    "supply": "1",
    "markerType": "MARKER_TYPE_RESTRICTED",
    "allowGovernanceControl": true
}
```

### Warehouse Account (Warehouse)
```
address: warehouse_address
  coins:
  - denom: stablecoin
    amount: "50,000,000"
```

### Facility Smart Contract (FSM1)
```
address: facility_address
originator_address: originator_address
warehouse_address: warehouse_address
advance_rate: 80%
coins:
  - denom: pb.fm.1
    amount: "5"
```

### Facility Marker (FM)
```
{
    "baseAccount": {
        "address": "fm_address",
        "accountNumber": "1672"
    },
    "accessControl": [
        {
            "address": "facility_address",
            "permissions": [
                "ACCESS_MINT",
                "ACCESS_BURN",
                "ACCESS_DEPOSIT",
                "ACCESS_WITHDRAW",
                "ACCESS_DELETE",
                "ACCESS_ADMIN",
                "ACCESS_TRANSFER"
            ]
        }
    ],
    "status": "MARKER_STATUS_ACTIVE",
    "denom": "pb.fm.1",
    "supply": "5",
    "markerType": "MARKER_TYPE_RESTRICTED",
    "allowGovernanceControl": true
}
```

## Setup

```mermaid
stateDiagram-v2
    Originator --> MarkerContract: 1a. Create Pool OP
    MarkerContract --> Originator: 1c. OP
    state MarkerContract {
        [*] --> Marker: 1b. Mint
    }

    Originator --> FSM1: 2a. Instantiate Facility Contract (FSM1)
    
```

### Originator Account
```
address: originator_address
  coins:
  - denom: pm.pool.op
    amount: "1"
  - denom: stablecoin
    amount: "10,000,000"
  - denom: pb.fm.1
    amount: "1" <-- 20% of Facility
```

### Warehouse Account
```
address: warehouse_address
  coins:
  - denom: stablecoin
    amount: "50,000,000"
  - denom: pb.fm.1
    amount: "4" <-- 80% of Facility
```

## Pledge

```mermaid
stateDiagram-v2
    Originator --> FSM1: 1a. Propose Pledge Assets @ $90
    state FSM1 {
        [*] --> OP1: 1b. Create Marker containing proposed assets
        OP1 --> Originator_Account: 1c. Deposit ownership
        OP1 --> FM: 1b. Custody
    }
```

### Originator Account
```
address: originator_address
  coins:
  - denom: pm.pool.op
    amount: "1"
  - denom: pm.pool.op1
    amount: "1"
  - denom: pb.fm.1
    amount: "1"
  - denom: stablecoin
    amount: "10,000,000"
```

### Originator Pool OP1
```
{
    "baseAccount": {
        "address": "pool_address",
        "accountNumber": "1678"
    },
    "accessControl": [
        {
            "address": "facility_address", <-- Notice change of control
            "permissions": [
                "ACCESS_MINT",
                "ACCESS_BURN",
                "ACCESS_DEPOSIT",
                "ACCESS_WITHDRAW",
                "ACCESS_DELETE",
                "ACCESS_ADMIN",
                "ACCESS_TRANSFER"
            ]
        }
    ],
    "status": "MARKER_STATUS_ACTIVE",
    "denom": "pm.pool.op1",
    "supply": "1",
    "markerType": "MARKER_TYPE_RESTRICTED",
    "allowGovernanceControl": true
}
```

## Accept

```mermaid
stateDiagram-v2

    Warehouse --> FSM1: 2a. Accept and Send Stablecoin
    state FSM1 {
        Warehouse_Account --> FM: 2b. Escrow Coin
    }
```

### Facility Smart Contract
```
address: facility_address
originator_address: originator_address
warehouse_address: warehouse_address
advance_rate: 80%
  coins:
  - denom: pb.fm.1
    amount: "0"
  - denom: stablecoin
    amount: "9,000,000" <-- Escrow of advance
```
### Warehouse Account
```
address: warehouse_address
  coins:
  - denom: pb.fm.1
    amount: "4"
  - denom: stablecoin
    amount: "41,000,000" <-- Delta
```

## Confirm

```mermaid
stateDiagram-v2
    Originator --> FSM1: 3a. Confirm and Execute Match
    state FSM1 {
        FM --> Originator_Account: 3b. Deposit Coin
    }
```

## End State
### Originator Account
```
address: originator_address
  coins:
  - denom: pm.pool.op
    amount: "1"
  - denom: pm.pool.op1
    amount: "1"
  - denom: pb.fm.1
    amount: "1"
  - denom: stablecoin
    amount: "19,000,000"
```

### Warehouse Account
```
address: warehouse_address
  coins:
  - denom: stablecoin
    amount: "41,000,000"
  - denom: pb.fm.1
    amount: "4"
```

### Facility Smart Contract
```
address: facility_address
originator_address: originator_address
warehouse_address: warehouse_address
advance_rate: 80%
  coins:
  - denom: pb.fm.1
    amount: "0"
```

### Facility Marker (FM)
```
{
    "baseAccount": {
        "address": "fm_address",
        "accountNumber": "1672"
    },
    "accessControl": [
        {
            "address": "facility_address",
            "permissions": [
                "ACCESS_MINT",
                "ACCESS_BURN",
                "ACCESS_DEPOSIT",
                "ACCESS_WITHDRAW",
                "ACCESS_DELETE",
                "ACCESS_ADMIN",
                "ACCESS_TRANSFER"
            ]
        }
    ],
    "status": "MARKER_STATUS_ACTIVE",
    "denom": "pb.fm.1",
    "supply": "5",
    "markerType": "MARKER_TYPE_RESTRICTED",
    "allowGovernanceControl": true
}
```


# Warehous Process Overview
_See Pre-Conditions below._

### Paydown Process
1. Originator requests paydown of encumbered assets - 
    1. Execute the first step of a paydown in the contract. Provide the assets to unencumber and requested $ amount for unencumbrance [and amount of sale]
        1. Contract establishes a new marker for the provided assets and has full custody
        2. Contract removes assets to be paid off from original pledged marker
        3. Contract deposits denom of the new marker to the originator
        4. If paydown is more than sell request, contract escrows requested advance amount in stablecoin from the originator account
2. Warehouse accepts the paydown request - 
    1. Execute warehouse acceptance step of the contract
2. If applicable, Investor accepts exchange proposal
    1. Execute investor acceptance step of the contract
        1. Facility escrows coin of agreed sale from investor account
4. Originator confirms transaction. 
    1. Execute the match step of the contract. 
        1. Contract deposits escrowed paydown to warehouse's account
        2. Contract deposits remaining amount to originator's account
        3. Contract transfers coin of the new pool from originator to the investor's account
5. Originator/Sarehouse may redeem coin to fiat by requesting cash out (Omnibus Bank will wire funds to destination)
## Paydown

```mermaid
stateDiagram-v2
    Originator --> FSM1: 1a. Propose Paydown OP1 @ $100 and Send Stablecoin
    state FSM1 {
        Originator_Account --> FM: 2b. Escrow Coin
    }
```

### Facility Smart Contract
```
address: facility_address
originator_address: originator_address
warehouse_address: warehouse_address
advance_rate: 80%
  coins:
  - denom: pb.fm.1
    amount: "0"
  - denom: stablecoin
    amount: "10,000,000" <-- Escrow of Paydown
```
### Originator Account
```
address: originator_address
  coins:
  - denom: pm.pool.op
    amount: "1"
  - denom: pm.pool.op1
    amount: "1"
  - denom: stablecoin
    amount: "9,000,000" <-- Delta
```

## Accept

```mermaid
stateDiagram-v2
    Warehouse --> FSM1: 2a. Accept
```

## Confirm

```mermaid
stateDiagram-v2
    Originator --> FSM1: 3a. Confirm and Execute Match
    state FSM1 {
        FM --> Warehouse_Account: 3b. Deposit Coin
        FM --> PM_Account: 3c. Transfer Custody of OP1
    }
```

## End State
### Originator Account
```
address: originator_address
  coins:
  - denom: pm.pool.op1
    amount: "1"
  - denom: pb.fm.1
    amount: "1"
  - denom: stablecoin
    amount: "9,000,000"
```

### Originator Pool OP1
```
{
    "baseAccount": {
        "address": "pool_address",
        "accountNumber": "1678"
    },
    "accessControl": [
        {
            "address": "pm_address",
            "permissions": [
                "ACCESS_MINT",
                "ACCESS_BURN",
                "ACCESS_DEPOSIT",
                "ACCESS_WITHDRAW",
                "ACCESS_DELETE",
                "ACCESS_ADMIN",
                "ACCESS_TRANSFER"
            ]
        }
    ],
    "status": "MARKER_STATUS_ACTIVE",
    "denom": "pm.pool.op1",
    "supply": "1",
    "markerType": "MARKER_TYPE_RESTRICTED",
    "allowGovernanceControl": true
}
```

### Warehouse Account
```
address: warehouse_address
  coins:
  - denom: stablecoin
    amount: "51,000,000"
  - denom: pb.fm.1
    amount: "4"
```

### Facility Smart Contract
```
address: facility_address
originator_address: originator_address
warehouse_address: warehouse_address
advance_rate: 80%
  coins:
  - denom: pb.fm.1
    amount: "0"
```

## Paydown with Investor

```mermaid
stateDiagram-v2
    Originator --> FSM1: 1a. Propose Assets to paydown @ $100, sell @ $110, and Buyer info
    state FSM1 {
        OP1 --> OP2: 2b. Establish new marker of proposed assets
        OP1 --> OP1: 2c. Remove proposed assets
        Originator_Account --> FM: 2d. Escrow of paydown - sell
    }
```

### Facility Smart Contract
```
address: facility_address
originator_address: originator_address
warehouse_address: warehouse_address
advance_rate: 80%
  coins:
  - denom: pb.fm.1
    amount: "0"
```

### Originator Account
```
address: originator_address
  coins:
  - denom: pm.pool.op1
    amount: "1" 
  - denom: pm.pool.op2
    amount: "1" 
  - denom: stablecoin
    amount: "9,000,000"
```

### Investor Account
```
address: investor_address
  coins:
  - denom: stablecoin
    amount: "11,000,000"
```

## Accept

### Warehouse Accept
```mermaid
stateDiagram-v2
    Warehouse --> FSM1: 2a. Accept
```

### Investor Accept
```mermaid
stateDiagram-v2
    Investor --> FSM1: 2a. Accept and send required payment
    state FSM1 {
        Investor_Account --> FM: 2b. Escrow Coin
    }
```
#### Investor Account
```
address: investor_address
  coins:
  - denom: stablecoin
    amount: "0"
```

#### Facility Smart Contract
```
address: facility_address
originator_address: originator_address
warehouse_address: warehouse_address
advance_rate: 80%
  coins:
  - denom: pb.fm.1
    amount: "0"
  - denom: stablecoin
    amount: "11,000,000"
```

## Originator Confirm

```mermaid
stateDiagram-v2
    Originator --> FSM1: 3a. Confirm and Execute Match
    state FSM1 {
        FM --> Warehouse_Account: 3b. Deposit Paydown Coin
        FM --> Originator_Account: 3c. Deposit Coin of Buy - Paydown
        FM --> Bilateral_Contract: 3d. Transfer OP2 coin from Originator to Investor
        FM --> PM_Account: 3e. Transfer Custody of OP2
    }
```

## End State
### Originator Account
```
address: originator_address
  coins:
  - denom: pm.pool.op1
    amount: "1"
  - denom: pb.fm.1
    amount: "1"
  - denom: stablecoin
    amount: "10,000,000"
```

### Originator Pool
```
{
    "baseAccount": {
        "address": "pool2_address",
        "accountNumber": "1678"
    },
    "accessControl": [
        {
            "address": "pm_address",
            "permissions": [
                "ACCESS_MINT",
                "ACCESS_BURN",
                "ACCESS_DEPOSIT",
                "ACCESS_WITHDRAW",
                "ACCESS_DELETE",
                "ACCESS_ADMIN",
                "ACCESS_TRANSFER"
            ]
        }
    ],
    "status": "MARKER_STATUS_ACTIVE",
    "denom": "pm.pool.op1",
    "supply": "1",
    "markerType": "MARKER_TYPE_RESTRICTED",
    "allowGovernanceControl": true
}
```

### Warehouse Account
```
address: warehouse_address
  coins:
  - denom: stablecoin
    amount: "51,000,000"
  - denom: pb.fm.1
    amount: "4"
```

### Investor Account
```
address: warehouse_address
  coins:
  - denom: stablecoin
    amount: "0"
  - denom: pm.pool.op2
    amount: "1"
```

### Facility Smart Contract
```
address: facility_address
originator_address: originator_address
warehouse_address: warehouse_address
advance_rate: 80%
  coins:
  - denom: pb.fm.1
    amount: "0"
```

### Facility Marker (FM)
```
{
    "baseAccount": {
        "address": "fm_address",
        "accountNumber": "1672"
    },
    "accessControl": [
        {
            "address": "facility_address",
            "permissions": [
                "ACCESS_MINT",
                "ACCESS_BURN",
                "ACCESS_DEPOSIT",
                "ACCESS_WITHDRAW",
                "ACCESS_DELETE",
                "ACCESS_ADMIN",
                "ACCESS_TRANSFER"
            ]
        }
    ],
    "status": "MARKER_STATUS_ACTIVE",
    "denom": "pb.fm.1",
    "supply": "5",
    "markerType": "MARKER_TYPE_RESTRICTED",
    "allowGovernanceControl": true
}
```

## Pre-Conditions:

Loan-onboarding needs to establish a Marker (POOL) per loan type per originator. Each loan onbarded must be added to the appropriate Pool Marker. PM must be added as a custodian on the pool with rights to `mint, burn, and grant`. This action is how we will data share between originator and PM. (P8e data sharing through key permission will still be required as well.)

The Pool for the Warehouse Facility will be created by drawing assets out of the originator's initial pool. 


