# Delegation program
Delegation module for https://arxiv.org/pdf/2311.02650.pdf
## Program
- [`Consts`](src/consts.rs) – Program constants.
- [`Entrypoint`](src/lib.rs) – The program entrypoint.
- [`Errors`](src/error.rs) – Custom program errors.
- [`Idl`](idl/delegator.json) – Interface for clients, explorers, and programs.
- [`Instruction`](src/instruction.rs) – Declared instructions and arguments.
- [`Loaders`](src/loaders.rs) – Validation logic for loading Solana accounts.
## Instructions
- [`Delegate`](src/processor/delegate.rs) - Delegate an account
- [`CommitState`](src/processor/update.rs) – Commit a new state
- [`Finalize`](src/processor/finalize.rs) – Finalize a new state
- [`Undelegate`](src/processor/undelegate.rs) – Undelegate an account
## State
- [`CommitState`](src/state/commit_record) – Commit state account state.
- [`Delegator`](src/state/delegator.rs) – Delegator account state.
## Tests
To run the test suite, use the Solana toolchain:
```
cargo test-sbf
```
For line coverage, use llvm-cov:
```
cargo llvm-cov --test test_commit_state
```
(llvm-cov currently does not work with instructions with CPIs e.g.: delegate, undelegate)
## Integration Tests
The integration tests are located in the `tests/integration` directory.
The tests consist of a Bolt/Anchor program that uses the delegation program to delegate, commit, and undelegate accounts.
This can be also used a reference for how to interact with the program.
To run the integration test, use Bolt or Anchor:
```
cd tests/integration && bolt test
```
or:
```
cd tests/integration && anchor test
```
## Build for Mainnet
```
RUSTFLAGS="--cfg mainnet" cargo build-sbf
```