Skip to content

Commit

Permalink
Merge branch 'main' of https://github.com/paltalabs/defindex into fix…
Browse files Browse the repository at this point in the history
…/refactorUX
  • Loading branch information
MattPoblete committed Nov 20, 2024
2 parents 788794f + fe80341 commit 98ecc6f
Show file tree
Hide file tree
Showing 9 changed files with 107 additions and 17 deletions.
16 changes: 8 additions & 8 deletions apps/contracts/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion apps/contracts/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@ exclude = [
resolver = "2"

[workspace.package]
version = "1.0.0"
version = "0.1.0"
edition = "2021"
license = "GPL-3.0"
repository = "https://github.com/paltalabs/defindex"
homepage = "https://defindex.io"

[workspace.dependencies]
soroban-sdk = "21.7.6"
Expand Down
6 changes: 5 additions & 1 deletion apps/contracts/strategies/core/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
[package]
name = "defindex-strategy-core"
description = "A foundational library for developing and integrating strategies into the DeFindex ecosystem, providing reusable abstractions, events, and custom error handling."
version = { workspace = true }
authors = ["coderipper <[email protected]>"]
license = { workspace = true }
edition = { workspace = true }
publish = false
publish = true
repository = { workspace = true }
homepage = { workspace = true }
keywords = ["soroban", "defindex", "strategy", "core", "stellar"]
categories = ["cryptography::cryptocurrencies", "no-std", "development-tools"]

[dependencies]
soroban-sdk = { workspace = true }
Expand Down
77 changes: 77 additions & 0 deletions apps/contracts/strategies/core/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# DeFindex Strategy Core

The defindex-strategy-core package is a foundational library designed to facilitate the development of strategies for DeFindex. It provides reusable abstractions and utilities that streamline the creation, management, and integration of strategies into the DeFindex ecosystem.

### Features

- **Reusable Events**: Predefined events to log actions such as deposits, withdrawals, and harvests.
- **Custom Errors**: A unified error handling system to ensure consistent and informative feedback across strategies.
- **Core Abstractions**: Base traits and utilities to define and implement strategies with minimal boilerplate.

### Structure

This package includes the following modules:
1. **Error**: Provides custom error types to handle various edge cases and ensure smooth execution.
2. **Event**: Includes predefined events for logging and monitoring strategy activity.
3. **Core Traits**: Defines the DeFindexStrategyTrait, which serves as the contract for developing new strategies.

### Installation

Add the defindex-strategy-core package to your Cargo.toml dependencies:

```toml
[dependencies]
defindex-strategy-core = "0.1.0"
```

### Usage

Here is a simple example of how to use this package to build a custom strategy:

1. Import the Core Library
```rust
use defindex_strategy_core::{DeFindexStrategyTrait, StrategyError, event};
```

2. Implement the Strategy Trait

Define your custom strategy by implementing the DeFindexStrategyTrait:
```rust
#[contract]
struct MyCustomStrategy;

#[contractimpl]
impl DeFindexStrategyTrait for MyCustomStrategy {
fn initialize(e: Env, asset: Address, init_args: Vec<Val>) -> Result<(), StrategyError> {
// Initialization logic
Ok(())
}

fn deposit(e: Env, amount: i128, from: Address) -> Result<(), StrategyError> {
// Deposit logic
Ok(())
}

fn withdraw(e: Env, amount: i128, from: Address) -> Result<i128, StrategyError> {
// Withdrawal logic
Ok(amount)
}

fn balance(e: Env, from: Address) -> Result<i128, StrategyError> {
// Balance check logic
Ok(0)
}

fn harvest(e: Env, from: Address) -> Result<(), StrategyError> {
// Harvest logic
Ok(())
}
}
```

3. Emit Events

Use the event module to log actions:
```rust
event::emit_deposit(&e, String::from("MyCustomStrategy"), amount, from.clone());
```
2 changes: 1 addition & 1 deletion apps/contracts/vault/src/fee.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use crate::{

/// Fetches the current fee rate from the factory contract.
/// The fee rate is expressed in basis points (BPS).
fn fetch_defindex_fee(e: &Env) -> u32 {
pub fn fetch_defindex_fee(e: &Env) -> u32 {
let factory_address = get_factory(e);
// Interacts with the factory contract to get the fee rate.
e.invoke_contract(
Expand Down
2 changes: 2 additions & 0 deletions apps/contracts/vault/src/interface.rs
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,8 @@ pub trait VaultTrait {
// TODO: DELETE THIS, USED FOR TESTING
/// Temporary method for testing purposes.
fn get_asset_amounts_for_dftokens(e: Env, df_token: i128) -> Map<Address, i128>;

fn get_fees(e: Env) -> (u32, u32);
}

pub trait AdminInterfaceTrait {
Expand Down
12 changes: 9 additions & 3 deletions apps/contracts/vault/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ mod utils;

use access::{AccessControl, AccessControlTrait, RolesDataKey};
use aggregator::{internal_swap_exact_tokens_for_tokens, internal_swap_tokens_for_exact_tokens};
use fee::collect_fees;
use fee::{collect_fees, fetch_defindex_fee};
use funds::{fetch_current_idle_funds, fetch_current_invested_funds, fetch_total_managed_funds}; //, fetch_idle_funds_for_asset};
use interface::{AdminInterfaceTrait, VaultManagementTrait, VaultTrait};
use investment::{check_and_execute_investments};
Expand All @@ -33,8 +33,7 @@ use models::{
OptionalSwapDetailsExactOut,
};
use storage::{
get_assets, set_asset, set_defindex_protocol_fee_receiver, set_factory,
set_total_assets, set_vault_fee, extend_instance_ttl
extend_instance_ttl, get_assets, get_vault_fee, set_asset, set_defindex_protocol_fee_receiver, set_factory, set_total_assets, set_vault_fee
};
use strategies::{
get_asset_allocation_from_address, get_strategy_asset, get_strategy_client,
Expand Down Expand Up @@ -568,6 +567,13 @@ impl VaultTrait for DeFindexVault {
extend_instance_ttl(&e);
calculate_asset_amounts_for_dftokens(&e, df_tokens)
}

fn get_fees(e: Env) -> (u32, u32) {
extend_instance_ttl(&e);
let defindex_protocol_fee = fetch_defindex_fee(&e);
let vault_fee = get_vault_fee(&e);
(defindex_protocol_fee, vault_fee)
}
}

#[contractimpl]
Expand Down
4 changes: 2 additions & 2 deletions public/testnet.contracts.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"ids": {
"hodl_strategy": "CAEYFO6TY5MMPHSX6CMUKSDHPFVLJKV4TFPHE4ZXAEER2NEIB5GSVBVG",
"defindex_factory": "CBHW3ETUDAZ4FKKEEASONLALSZAYR6IMBA2THXKRPGRAVRG7UQLZFEKP"
"defindex_factory": "CARG5QZELODA44D3NB4LIEIJSEMWLJSKA6CNOT4FFGPRYUKC7JLDDZ6L"
},
"hashes": {
"hodl_strategy": "fcdb4a3c11525a1f32611951741bca5bc4196f58fd1633af37d5b35d30fdf5b0",
"defindex_vault": "861b1b2734e65edb70cc632889d00ce0f07946110e3f957a76714ce9674c73ce",
"defindex_vault": "468b456399610600ae2718188e16052aabb7488493f7260d16b21c8f7dbf1001",
"defindex_factory": "d6522e73d98e7826782e0b8df6c15410d1b1be95cca985b3e6f1c88a27a11a92"
}
}
2 changes: 1 addition & 1 deletion scf-tracker.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@

- **Result:**
- ✅ Code available on [GitHub](https://github.com/paltalabs/defindex/tree/main/apps/contracts/strategies)
- 🛠️ Adapter Struct published at crates.io
- Adapter Struct published at crates.io
- 🛠️ SEP proposal

---
Expand Down

0 comments on commit 98ecc6f

Please sign in to comment.