pallet-preimage 4.0.0-dev

PolymathNetwork Bounty
# SPL Token Lending CLI

A basic command line interface for initializing lending markets and reserves for SPL Token Lending.

See https://spl.solana.com/token-lending for more details

## Install the CLI
```shell
cargo install spl-token-lending-cli
```

## Deploy a lending program (optional)

This is optional! You can simply add your own market and reserves to the existing [on-chain programs](../README.md#on-chain-programs).

If you want to deploy your own program, follow [this guide](../README.md#deploy-a-lending-program-optional) and note the program ID.

## Create a lending market

A lending market is a collection of reserves that can be configured to borrow and lend with each other.

The lending market owner must sign to add reserves.

### Usage
```shell
spl-token-lending \
  --program      PUBKEY \
  --fee-payer    SIGNER \
  create-market \
  --market-owner PUBKEY
```
- `--program` is the lending program ID.
- `--fee-payer` will sign to pay transaction fees.
- `--market-owner` is the lending market owner pubkey.

Run `spl-token-lending create-market --help` for more details and options.

### Example
```shell
spl-token-lending \
  --program      6TvznH3B2e3p2mbhufNBpgSrLx6UkgvxtVQvopEZ2kuH \
  --fee-payer    owner.json \
  create-market \
  --market-owner JAgN4SZLNeCo9KTnr8EWt4FzEV1UDgHkcZwkVtWtfp6P

# Creating lending market 7uX9ywsk1X2j6wLoywMDVQLNWAqhDpVqZzL4qm4CuMMT
# Signature: 51mi4Ve42h4PQ1RXjfz141T6KCdqnB3UDyhEejviVHrX4SnQCMx86TZa9CWUT3efFYkkmfmseG5ZQr2TZTHJ8S95
```
Note the lending market pubkey (e.g. `7uX9ywsk1X2j6wLoywMDVQLNWAqhDpVqZzL4qm4CuMMT`). You'll use this to add reserves.

## Add a reserve to your market

A reserve is a liquidity pool that can be deposited into, borrowed from, and optionally used as collateral for borrows.

### Usage
```shell
spl-token-lending \
  --program      PUBKEY \
  --fee-payer    SIGNER \
  add-reserve \
  --market-owner SIGNER \
  --source-owner SIGNER \
  --market       PUBKEY \
  --source       PUBKEY \
  --amount       DECIMAL_AMOUNT \
  --pyth-product PUBKEY \
  --pyth-price   PUBKEY
```
- `--program` is the lending program ID.
- `--fee-payer` will sign to pay transaction fees.
- `--market-owner` will sign as the lending market owner.
- `--source-owner` will sign as the source liquidity owner.
- `--market` is the lending market pubkey.
- `--source` is the SPL Token account pubkey (owned by `--source-owner`).
- `--amount` is the amount of tokens to deposit.
- `--pyth-product` and `--pyth-price` are oracle
  accounts [provided by Pyth]https://pyth.network/developers/consumers/accounts.

Run `spl-token-lending add-reserve --help` for more details and options.

### Example
```shell
spl-token-lending \
  --program      6TvznH3B2e3p2mbhufNBpgSrLx6UkgvxtVQvopEZ2kuH \
  --fee-payer    owner.json \
  add-reserve \
  --market-owner owner.json \
  --source-owner owner.json \
  --market       7uX9ywsk1X2j6wLoywMDVQLNWAqhDpVqZzL4qm4CuMMT \
  --source       AJ2sgpgj6ZeQazPPiDyTYqN9vbj58QMaZQykB9Sr6XY \
  --amount       5.0  \
  --pyth-product 8yrQMUyJRnCJ72NWwMiPV9dNGw465Z8bKUvnUC8P5L6F \
  --pyth-price   BdgHsXrH1mXqhdosXavYxZgX6bGqTdj5mh2sxDhF8bJy

# Adding reserve 69BwFhpQBzZfcp9MCj9V8TLvdv9zGfQQPQbb8dUHsaEa
# Signature: 2yKHnmBSqBpbGdsxW75nnmZMys1bZMbHiczdZitMeQHYdpis4eVhuMWGE29hhgtHpNDjdPj5YVbqkWoAEBw1WaU
# Signature: 33x8gbn2RkiA5844eCZq151DuVrYTvUoF1bQ5xA3mqkibJZaJja2hj8RoyjKZpZqg2ckcSKMAeqWbMeWC6vAySQS
# Signature: 3dk79hSgzFhxPrmctYnS5dxRhojfKkDwwLxEda9bTXqVELHSL4ux8au4jwvL8xuraVhaZAmugCn4TA1YCfLM4sVL
```

Note the reserve pubkey (e.g. `69BwFhpQBzZfcp9MCj9V8TLvdv9zGfQQPQbb8dUHsaEa`). You'll use this to deposit liquidity, redeem collateral, borrow, repay, and liquidate.