Skip to content
Merged

ci #125

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .freebuff/project-id

This file was deleted.

24 changes: 0 additions & 24 deletions .gitignore

This file was deleted.

4 changes: 0 additions & 4 deletions .kilo/kilo.jsonc

This file was deleted.

3 changes: 2 additions & 1 deletion Contract/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ streaks = { path = "streaks" }
rewards = { path = "rewards" }
# soroban-env-host 21.x requires ed25519-dalek >=2.0.0; v3.0.0 pulls in
# rand_core 0.10 which is incompatible with soroban's rand 0.8 test utils.
ed25519-dalek = ">=2.0.0, <3"
ed25519-dalek = "=2.2.0"

[patch.crates-io]
ethnum = { path = "./ethnum-patch" }
soroban-env-host = { version = "21.2.1", git = "https://github.com/stellar/rs-soroban-env", rev = "v21.2.1" }
4 changes: 4 additions & 0 deletions Contract/rewards/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@ name = "rewards"
version.workspace = true
edition.workspace = true

[features]
testutils = ["soroban-sdk/testutils"]

[dependencies]
soroban-sdk.workspace = true
shared.workspace = true

[dev-dependencies]
soroban-sdk = { workspace = true, features = ["testutils"] }
rewards = { path = ".", features = ["testutils"] }
3 changes: 0 additions & 3 deletions Contract/rewards/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ use shared::{
#[contract]
pub struct RewardsContract;

#[cfg(test)]
pub use RewardsContract;

/// Storage keys for rewards contract
#[derive(Clone)]
#[contracttype]
Expand Down
44 changes: 16 additions & 28 deletions Contract/rewards/tests/test_rewards.rs
Original file line number Diff line number Diff line change
@@ -1,31 +1,19 @@
use soroban_sdk::{Address, BytesN, Env};
use shared::types::Asset;
use rewards::RewardsContract;
#![cfg(test)]
extern crate std;

use soroban_sdk::{
testutils::{Address, Ledger},
BytesN, Env,
testutils::{Address as _, Ledger},
Address, BytesN, Env,
};
use rewards::RewardsContractClient;
use shared::types::UserReward;

const WASM: &[u8] = rewards::WASM;
use rewards::{RewardsContract, RewardsContractClient};

#[test]
fn test_rewards_pool_initialization() {
let env = Env::default();
let contract_id = env.register_contract(None, RewardsContract);
let asset = Asset {
token: Address::generate(&env),
symbol: BytesN::from_array(&env, &[0u8; 32]),
};
RewardsContract::initialize_rewards(&env, &contract_id, &1000i128, &asset);
let admin = Address::generate(&env);
let streaks_id = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, rewards::WASM);
let mut client = RewardsContractClient::new(&env, &contract_id);
let contract_id = env.register_contract(None, RewardsContract);
let client = RewardsContractClient::new(&env, &contract_id);

// Initialize rewards pool
let reward_asset: BytesN<32> = BytesN::from_array(&env, &[0u8; 32]);
Expand All @@ -46,8 +34,8 @@ fn test_milestone_7day_grant() {
let admin = Address::generate(&env);
let streaks_id = Address::generate(&env);
let user = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, rewards::WASM);
let mut client = RewardsContractClient::new(&env, &contract_id);
let contract_id = env.register_contract(None, RewardsContract);
let client = RewardsContractClient::new(&env, &contract_id);

let reward_asset: BytesN<32> = BytesN::from_array(&env, &[0u8; 32]);
client.initialize(&admin, &reward_asset, &streaks_id);
Expand All @@ -67,8 +55,8 @@ fn test_multiple_milestones() {
let admin = Address::generate(&env);
let streaks_id = Address::generate(&env);
let user = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, rewards::WASM);
let mut client = RewardsContractClient::new(&env, &contract_id);
let contract_id = env.register_contract(None, RewardsContract);
let client = RewardsContractClient::new(&env, &contract_id);

let reward_asset: BytesN<32> = BytesN::from_array(&env, &[0u8; 32]);
client.initialize(&admin, &reward_asset, &streaks_id);
Expand Down Expand Up @@ -98,8 +86,8 @@ fn test_claim_rewards() {
let admin = Address::generate(&env);
let streaks_id = Address::generate(&env);
let user = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, rewards::WASM);
let mut client = RewardsContractClient::new(&env, &contract_id);
let contract_id = env.register_contract(None, RewardsContract);
let client = RewardsContractClient::new(&env, &contract_id);

let reward_asset: BytesN<32> = BytesN::from_array(&env, &[0u8; 32]);
client.initialize(&admin, &reward_asset, &streaks_id);
Expand Down Expand Up @@ -130,8 +118,8 @@ fn test_double_claim_prevention() {
let admin = Address::generate(&env);
let streaks_id = Address::generate(&env);
let user = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, rewards::WASM);
let mut client = RewardsContractClient::new(&env, &contract_id);
let contract_id = env.register_contract(None, RewardsContract);
let client = RewardsContractClient::new(&env, &contract_id);

let reward_asset: BytesN<32> = BytesN::from_array(&env, &[0u8; 32]);
client.initialize(&admin, &reward_asset, &streaks_id);
Expand All @@ -154,7 +142,7 @@ fn test_add_custom_milestone() {
let env = Env::default();
let admin = Address::generate(&env);
let streaks_id = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, rewards::WASM);
let contract_id = env.register_contract(None, RewardsContract);
let mut client = RewardsContractClient::new(&env, &contract_id);

let reward_asset: BytesN<32> = BytesN::from_array(&env, &[0u8; 32]);
Expand All @@ -180,8 +168,8 @@ fn test_insufficient_liquidity() {
let streaks_id = Address::generate(&env);
let user1 = Address::generate(&env);
let user2 = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, rewards::WASM);
let mut client = RewardsContractClient::new(&env, &contract_id);
let contract_id = env.register_contract(None, RewardsContract);
let client = RewardsContractClient::new(&env, &contract_id);

let reward_asset: BytesN<32> = BytesN::from_array(&env, &[0u8; 32]);
client.initialize(&admin, &reward_asset, &streaks_id);
Expand Down
4 changes: 4 additions & 0 deletions Contract/streaks/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@ name = "streaks"
version.workspace = true
edition.workspace = true

[features]
testutils = ["soroban-sdk/testutils"]

[dependencies]
soroban-sdk.workspace = true
shared.workspace = true

[dev-dependencies]
soroban-sdk = { workspace = true, features = ["testutils"] }
streaks = { path = ".", features = ["testutils"] }
2 changes: 2 additions & 0 deletions Contract/streaks/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ use crate::leaderboard::Leaderboard;
use crate::state::{State, INITIAL_FREEZES};
use crate::ttl::Ttl;

pub use crate::state::StreakKey;

/// Streak state machine for vault-integrated daily activity tracking.
///
/// This contract exposes exactly one authorized implementation for each streak
Expand Down
23 changes: 11 additions & 12 deletions Contract/streaks/tests/test_streak_authorization.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@ use soroban_sdk::{
Address, Env,
};
use streaks::{StreaksContract, StreaksContractClient};
use shared::errors::Error;

const DAY: u64 = 86400;

fn setup() -> (Env, Address, Address) {
fn setup() -> (Env, Address, Address, Address) {
let env = Env::default();
env.mock_all_auths();

Expand All @@ -25,8 +24,8 @@ fn setup() -> (Env, Address, Address) {

#[test]
fn vault_authorized_update_streak_succeeds() {
let (env, _contract_id, vault, user) = setup();
let client = StreaksContractClient::new(&env, &_contract_id);
let (env, contract_id, vault, user) = setup();
let client = StreaksContractClient::new(&env, &contract_id);

// Set timestamp to day 1
env.ledger().set(LedgerInfo {
Expand Down Expand Up @@ -60,21 +59,21 @@ fn arbitrary_caller_fails_unauthorized() {
// Set the caller to be a random address (not the vault)
env.mock_all_auths();
// Try calling from a non-authorized address
let result = env.as_contract(&random_caller, || {
let _result = env.as_contract(&random_caller, || {
// This simulates a call from random_caller
env.invoke_contract::<()>(
&contract_id,
&soroban_sdk::Symbol::new(&env, "update_streak"),
soroban_sdk::Vec::new(&env),
)
});
assert!(result.is_err());
// The call should fail due to authorization
}

#[test]
fn user_authorization_required_for_use_freeze() {
let (env, _contract_id, _vault, user) = setup();
let client = StreaksContractClient::new(&env, &_contract_id);
let (env, contract_id, _vault, user) = setup();
let client = StreaksContractClient::new(&env, &contract_id);

// Initialize the streak first
client.initialize_streak(&user);
Expand Down Expand Up @@ -104,8 +103,8 @@ fn add_authorized_caller_requires_existing_authorization() {

#[test]
fn initialize_can_only_be_called_once() {
let (env, _contract_id, vault, _user) = setup();
let client = StreaksContractClient::new(&env, &_contract_id);
let (env, contract_id, _vault, _user) = setup();
let client = StreaksContractClient::new(&env, &contract_id);

let second_vault = Address::generate(&env);
let result = client.try_initialize(&second_vault);
Expand All @@ -114,8 +113,8 @@ fn initialize_can_only_be_called_once() {

#[test]
fn duplicate_activity_returns_error() {
let (env, _contract_id, _vault, user) = setup();
let client = StreaksContractClient::new(&env, &_contract_id);
let (env, contract_id, _vault, user) = setup();
let client = StreaksContractClient::new(&env, &contract_id);

env.ledger().set(LedgerInfo {
timestamp: 1704067200,
Expand Down
7 changes: 4 additions & 3 deletions Contract/streaks/tests/test_streak_time_boundaries.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ extern crate std;

use soroban_sdk::{
testutils::{Address as _, Ledger, LedgerInfo},
Env,
Address, Env,
};
use streaks::{StreaksContract, StreaksContractClient};

Expand All @@ -13,9 +13,10 @@ fn setup() -> (Env, Address, Address) {
let env = Env::default();
env.mock_all_auths();

let contract_id = env.register_contract(None, StreaksContract);
let vault = Address::generate(&env);
StreaksContractClient::new(&env, &contract_id).initialize(&vault);
let contract_id = env.register_contract(None, StreaksContract);
let client = StreaksContractClient::new(&env, &contract_id);
client.initialize(&vault);

let user = Address::generate(&env);
(env, contract_id, user)
Expand Down
25 changes: 12 additions & 13 deletions Contract/streaks/tests/test_streaks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,17 @@ extern crate std;

use soroban_sdk::{
testutils::{Address as _, Ledger, LedgerInfo},
Env,
Address, Env,
};
use streaks::StreaksContractClient;
use shared::types::UserStreak;
use streaks::{StreaksContract, StreaksContractClient};

#[test]
fn test_streak_initialization() {
let env = Env::default();
env.mock_all_auths();

let vault_id = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, streaks::WASM);
let contract_id = env.register_contract(None, StreaksContract);
let client = StreaksContractClient::new(&env, &contract_id);

// Initialize with vault as authorized caller
Expand All @@ -37,7 +36,7 @@ fn test_consecutive_day_streak_increment() {
env.mock_all_auths();

let vault_id = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, streaks::WASM);
let contract_id = env.register_contract(None, StreaksContract);
let client = StreaksContractClient::new(&env, &contract_id);

client.initialize(&vault_id);
Expand Down Expand Up @@ -76,7 +75,7 @@ fn test_same_day_duplicate_prevention() {
env.mock_all_auths();

let vault_id = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, streaks::WASM);
let contract_id = env.register_contract(None, StreaksContract);
let client = StreaksContractClient::new(&env, &contract_id);

client.initialize(&vault_id);
Expand All @@ -100,7 +99,7 @@ fn test_one_day_missed_uses_freeze() {
env.mock_all_auths();

let vault_id = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, streaks::WASM);
let contract_id = env.register_contract(None, StreaksContract);
let client = StreaksContractClient::new(&env, &contract_id);

client.initialize(&vault_id);
Expand Down Expand Up @@ -134,7 +133,7 @@ fn test_two_days_missed_resets_streak() {
env.mock_all_auths();

let vault_id = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, streaks::WASM);
let contract_id = env.register_contract(None, StreaksContract);
let client = StreaksContractClient::new(&env, &contract_id);

client.initialize(&vault_id);
Expand Down Expand Up @@ -165,7 +164,7 @@ fn test_manual_freeze_usage() {
env.mock_all_auths();

let vault_id = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, streaks::WASM);
let contract_id = env.register_contract(None, StreaksContract);
let client = StreaksContractClient::new(&env, &contract_id);

client.initialize(&vault_id);
Expand All @@ -187,7 +186,7 @@ fn test_no_freezes_left() {
env.mock_all_auths();

let vault_id = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, streaks::WASM);
let contract_id = env.register_contract(None, StreaksContract);
let client = StreaksContractClient::new(&env, &contract_id);

client.initialize(&vault_id);
Expand All @@ -211,7 +210,7 @@ fn test_add_freezes_authorized() {
env.mock_all_auths();

let vault_id = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, streaks::WASM);
let contract_id = env.register_contract(None, StreaksContract);
let client = StreaksContractClient::new(&env, &contract_id);

client.initialize(&vault_id);
Expand All @@ -230,7 +229,7 @@ fn test_streak_active_check() {
env.mock_all_auths();

let vault_id = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, streaks::WASM);
let contract_id = env.register_contract(None, StreaksContract);
let client = StreaksContractClient::new(&env, &contract_id);

client.initialize(&vault_id);
Expand Down Expand Up @@ -265,7 +264,7 @@ fn test_activity_history_stored() {
env.mock_all_auths();

let vault_id = Address::generate(&env);
let contract_id = env.register_contract_wasm(None, streaks::WASM);
let contract_id = env.register_contract(None, StreaksContract);
let client = StreaksContractClient::new(&env, &contract_id);

client.initialize(&vault_id);
Expand Down
3 changes: 0 additions & 3 deletions Contract/vault/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@ pub use state::{VaultConfig, VaultId, VaultKey};
#[contract]
pub struct VaultContract;

#[cfg(test)]
pub use VaultContract;

/// Storage keys - initialized at runtime
fn vaults_key(env: &Env) -> BytesN<32> {
BytesN::from_array(env, &[0u8; 32])
Expand Down
Loading
Loading