From 24b7b8a45b56705964b9bee24b6c489202adba88 Mon Sep 17 00:00:00 2001 From: Maki Date: Wed, 22 Apr 2026 16:46:05 +0100 Subject: [PATCH] Delete benches directory --- benches/Cargo.toml | 16 -- benches/src/main.rs | 200 ------------------ benches/src/scrap-menu/app.controller.rs | 12 -- benches/src/scrap-menu/app.controller.spec.rs | 22 -- benches/src/scrap-menu/app.module.rs | 91 -------- benches/src/scrap-menu/app.service.rs | 8 - .../certificate-download.controller.rs | 44 ---- .../scrap-menu/certificate-download.module.rs | 9 - .../certificate-download.service.rs | 41 ---- benches/src/scrap-menu/main.rs | 16 -- 10 files changed, 459 deletions(-) delete mode 100644 benches/Cargo.toml delete mode 100644 benches/src/main.rs delete mode 100644 benches/src/scrap-menu/app.controller.rs delete mode 100644 benches/src/scrap-menu/app.controller.spec.rs delete mode 100644 benches/src/scrap-menu/app.module.rs delete mode 100644 benches/src/scrap-menu/app.service.rs delete mode 100644 benches/src/scrap-menu/certificate-download.controller.rs delete mode 100644 benches/src/scrap-menu/certificate-download.module.rs delete mode 100644 benches/src/scrap-menu/certificate-download.service.rs delete mode 100644 benches/src/scrap-menu/main.rs diff --git a/benches/Cargo.toml b/benches/Cargo.toml deleted file mode 100644 index 67a42ae..0000000 --- a/benches/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "forge-benches" -version = "0.1.0" -edition = "2021" - -[[bin]] -name = "bench" -path = "src/main.rs" - -[dependencies] -forge-vesting = { path = "../contracts/forge-vesting" } -forge-stream = { path = "../contracts/forge-stream" } -forge-multisig = { path = "../contracts/forge-multisig" } -forge-governor = { path = "../contracts/forge-governor" } -forge-oracle = { path = "../contracts/forge-oracle" } -soroban-sdk = { version = "21.7.6", features = ["testutils"] } diff --git a/benches/src/main.rs b/benches/src/main.rs deleted file mode 100644 index 87b0e1f..0000000 --- a/benches/src/main.rs +++ /dev/null @@ -1,200 +0,0 @@ -//! # StellarForge Contract Benchmarks -//! -//! Measures CPU instructions and memory bytes consumed by each contract's -//! core operations using Soroban's built-in budget tracking. -//! -//! Run with: `cargo run -p forge-benches` - -use soroban_sdk::{ - testutils::{Address as _, Ledger}, - Address, Env, String, Symbol, -}; - -// Re-export generated clients from each contract crate -use forge_governor::{GovernorConfig, GovernorContractClient}; -use forge_multisig::MultisigContractClient; -use forge_oracle::ForgeOracleClient; -use forge_stream::ForgeStreamClient; -use forge_vesting::ForgeVestingClient; - -fn print_budget(label: &str, env: &Env) { - let cpu = env.budget().cpu_instruction_cost(); - let mem = env.budget().memory_bytes_cost(); - println!(" {label:<35} cpu={cpu:>12} instructions mem={mem:>10} bytes"); -} - -fn bench_vesting(env: &Env) { - println!("\n[forge-vesting]"); - - let contract_id = env.register_contract(None, forge_vesting::ForgeVesting); - let client = ForgeVestingClient::new(env, &contract_id); - let token_admin = Address::generate(env); - let token = env - .register_stellar_asset_contract_v2(token_admin) - .address(); - let beneficiary = Address::generate(env); - let admin = Address::generate(env); - soroban_sdk::token::StellarAssetClient::new(env, &token).mint(&contract_id, &1_000_000); - - env.budget().reset_default(); - client.initialize(&token, &beneficiary, &admin, &1_000_000, &100, &1000); - print_budget("initialize()", env); - - env.ledger().with_mut(|l| l.timestamp = 500); - env.budget().reset_default(); - client.claim(); - print_budget("claim() at 50%", env); - - env.ledger().with_mut(|l| l.timestamp = 1000); - env.budget().reset_default(); - client.claim(); - print_budget("claim() at 100%", env); -} - -fn bench_stream(env: &Env) { - println!("\n[forge-stream]"); - - let contract_id = env.register_contract(None, forge_stream::ForgeStream); - let client = ForgeStreamClient::new(env, &contract_id); - let token_admin = Address::generate(env); - let token = env - .register_stellar_asset_contract_v2(token_admin) - .address(); - let sender = Address::generate(env); - let recipient = Address::generate(env); - soroban_sdk::token::StellarAssetClient::new(env, &token).mint(&sender, &1_000_000); - - env.budget().reset_default(); - let stream_id = client.create_stream(&sender, &token, &recipient, &100, &10000); - print_budget("create_stream()", env); - - env.ledger().with_mut(|l| l.timestamp += 5000); - env.budget().reset_default(); - client.withdraw(&stream_id); - print_budget("withdraw() at 50%", env); - - env.budget().reset_default(); - client.cancel_stream(&stream_id); - print_budget("cancel_stream()", env); -} - -fn bench_multisig(env: &Env) { - println!("\n[forge-multisig]"); - - let contract_id = env.register_contract(None, forge_multisig::MultisigContract); - let client = MultisigContractClient::new(env, &contract_id); - let token_admin = Address::generate(env); - let token = env - .register_stellar_asset_contract_v2(token_admin) - .address(); - let owner_a = Address::generate(env); - let owner_b = Address::generate(env); - let owner_c = Address::generate(env); - let recipient = Address::generate(env); - soroban_sdk::token::StellarAssetClient::new(env, &token).mint(&contract_id, &500_000); - - let owners = soroban_sdk::vec![env, owner_a.clone(), owner_b.clone(), owner_c.clone()]; - - env.budget().reset_default(); - client.initialize(&owners, &2, &0); - print_budget("initialize() 3-of-3, threshold=2", env); - - env.budget().reset_default(); - let proposal_id = client.propose(&owner_a, &recipient, &token, &100_000); - print_budget("propose()", env); - - env.budget().reset_default(); - client.approve(&owner_b, &proposal_id); - print_budget("approve() (reaches threshold)", env); - - env.budget().reset_default(); - client.execute(&owner_a, &proposal_id); - print_budget("execute()", env); -} - -fn bench_governor(env: &Env) { - println!("\n[forge-governor]"); - - let contract_id = env.register_contract(None, forge_governor::GovernorContract); - let client = GovernorContractClient::new(env, &contract_id); - let token_admin = Address::generate(env); - let vote_token = env - .register_stellar_asset_contract_v2(token_admin) - .address(); - let proposer = Address::generate(env); - let voter = Address::generate(env); - soroban_sdk::token::StellarAssetClient::new(env, &vote_token).mint(&voter, &1_000_000); - - let config = GovernorConfig { - vote_token: vote_token.clone(), - voting_period: 1000, - quorum: 500_000, - timelock_delay: 0, - }; - - env.budget().reset_default(); - client.initialize(&config); - print_budget("initialize()", env); - - env.budget().reset_default(); - let proposal_id = client.propose( - &proposer, - &String::from_str(env, "Upgrade fee"), - &String::from_str(env, "Raise protocol fee to 0.3%"), - ); - print_budget("propose()", env); - - env.budget().reset_default(); - client.vote(&voter, &proposal_id, &true, &1_000_000); - print_budget("vote()", env); - - env.ledger().with_mut(|l| l.timestamp += 1001); - env.budget().reset_default(); - client.finalize(&proposal_id); - print_budget("finalize()", env); -} - -fn bench_oracle(env: &Env) { - println!("\n[forge-oracle]"); - - let contract_id = env.register_contract(None, forge_oracle::ForgeOracle); - let client = ForgeOracleClient::new(env, &contract_id); - let admin = Address::generate(env); - - env.budget().reset_default(); - client.initialize(&admin, &3600); - print_budget("initialize()", env); - - let base = Symbol::new(env, "XLM"); - let quote = Symbol::new(env, "USDC"); - - env.budget().reset_default(); - client.submit_price(&base, "e, &10_000_000); - print_budget("submit_price()", env); - - env.budget().reset_default(); - client.get_price(&base, "e); - print_budget("get_price()", env); - - env.budget().reset_default(); - client.get_all_prices(); - print_budget("get_all_prices() (1 pair)", env); -} - -fn main() { - let env = Env::default(); - env.mock_all_auths(); - - println!("StellarForge Contract Benchmarks"); - println!("================================="); - println!("Metric: Soroban budget (CPU instructions + memory bytes)"); - println!("Note: Each measurement is reset before the call under test."); - - bench_vesting(&env); - bench_stream(&env); - bench_multisig(&env); - bench_governor(&env); - bench_oracle(&env); - - println!("\nDone."); -} diff --git a/benches/src/scrap-menu/app.controller.rs b/benches/src/scrap-menu/app.controller.rs deleted file mode 100644 index cce879e..0000000 --- a/benches/src/scrap-menu/app.controller.rs +++ /dev/null @@ -1,12 +0,0 @@ -import { Controller, Get } from '@nestjs/common'; -import { AppService } from './app.service'; - -@Controller() -export class AppController { - constructor(private readonly appService: AppService) {} - - @Get() - getHello(): string { - return this.appService.getHello(); - } -} diff --git a/benches/src/scrap-menu/app.controller.spec.rs b/benches/src/scrap-menu/app.controller.spec.rs deleted file mode 100644 index d22f389..0000000 --- a/benches/src/scrap-menu/app.controller.spec.rs +++ /dev/null @@ -1,22 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { AppController } from './app.controller'; -import { AppService } from './app.service'; - -describe('AppController', () => { - let appController: AppController; - - beforeEach(async () => { - const app: TestingModule = await Test.createTestingModule({ - controllers: [AppController], - providers: [AppService], - }).compile(); - - appController = app.get(AppController); - }); - - describe('root', () => { - it('should return "Hello World!"', () => { - expect(appController.getHello()).toBe('Hello World!'); - }); - }); -}); diff --git a/benches/src/scrap-menu/app.module.rs b/benches/src/scrap-menu/app.module.rs deleted file mode 100644 index 91d9117..0000000 --- a/benches/src/scrap-menu/app.module.rs +++ /dev/null @@ -1,91 +0,0 @@ -import { Module } from '@nestjs/common'; -import { AppController } from './app.controller'; -import { AppService } from './app.service'; -import { TutorAccountSettingsModule } from './tutor-account-settings/tutor-account-settings.module'; -import { StudentAccountSettingsModule } from './student-account-settings/student-account-settings.module'; -import { AdminModeratorAccountSettingsModule } from './admin-moderator-account-settings/admin-moderator-account-settings.module'; -import { AdminAuthModule } from './admin-auth/admin-auth.module'; -import { CoursePerformanceLeaderboardModule } from './course-performance-leaderboard/course-performance-leaderboard.module'; -import { CourseCategorizationFilteringModule } from './course-categorization-filtering/course-categorization-filtering.module'; -import { PrivateTutoringBookingsModule } from './private-tutoring-bookings/private-tutoring-bookings.module'; -import { GamificationPointsModule } from './gamification-points/gamification-points.module'; -import { CourseCertificationNftAchievementsModule } from './course-certification-nft-achievements/course-certification-nft-achievements.module'; -import { CourseRatingsFeedbackModule } from './course-ratings-feedback/course-ratings-feedback.module'; -import { TutorJwtAuthModule } from './tutor-jwt-auth/tutor-jwt-auth.module'; -import { StudentWishlistModule } from './student-wishlist/student-wishlist.module'; -import { FaqManagementModule } from './faq-management/faq-management.module'; -import { TermsConditionsManagementModule } from './terms-conditions-management/terms-conditions-management.module'; -import { PrivacyPolicyManagementModule } from './privacy-policy-management/privacy-policy-management.module'; -import { TutorReportsAnalyticsModule } from './tutor-reports-analytics/tutor-reports-analytics.module'; -import { StudentReportsAnalyticsModule } from './student-reports-analytics/student-reports-analytics.module'; -import { CourseReportsAnalyticsModule } from './course-reports-analytics/course-reports-analytics.module'; -import { CertificateSocialSharingModule } from './certificate-social-sharing/certificate-social-sharing.module'; -import { CertificateDownloadModule } from './certificate-download/certificate-download.module'; -import { AdminCertificateNameChangeReviewModule } from './admin-certificate-name-change-review/admin-certificate-name-change-review.module'; -import { StudentCertificateNameChangeRequestModule } from './student-certificate-name-change-request/student-certificate-name-change-request.module'; -import { AdminFinancialAidManagementModule } from './admin-financial-aid-management/admin-financial-aid-management.module'; -import { StudentFinancialAidApplicationModule } from './student-financial-aid-application/student-financial-aid-application.module'; -import { AboutManagementModule } from './about-management/about-management.module'; -import { ContactMessageModule } from './contact-message/contact-message.module'; -import { BadgesNftModule } from './badges-nft/badges-nft.module'; -import { NotificationSystemModule } from './notification-system/notification-system.module'; -import { OrganizationManagementModule } from './organization-management/organization-management.module'; -import { OrganizationMembersModule } from './organization-members/organization-members.module'; -import { PointsManagementModule } from './points-management/points-management.module'; -import { RemovalRequestModule } from './removal-request/removal-request.module'; -import { ReportAbuseModule } from './report-abuse/report-abuse.module'; -import { SessionManagementModule } from './session-management/session-management.module'; -import { SubscriptionPlanManagementModule } from './subscription-plan-management/subscription-plan-management.module'; -import { StudentAuthModule } from './student-auth/student-auth.module'; -import { StudentCartModule } from './student-cart/student-cart.module'; -import { GoogleAuthModule } from './google-auth/google-auth.module'; -import { StudentSavedCoursesModule } from './student-saved-courses/student-saved-courses.module'; -import { AdminCourseManagementModule } from './admin-course-management/admin-course-management.module'; - -@Module({ - imports: [ - TutorAccountSettingsModule, - StudentAccountSettingsModule, - AdminModeratorAccountSettingsModule, - AdminAuthModule, - CoursePerformanceLeaderboardModule, - CourseCategorizationFilteringModule, - PrivateTutoringBookingsModule, - GamificationPointsModule, - CourseCertificationNftAchievementsModule, - CourseRatingsFeedbackModule, - TutorJwtAuthModule, - StudentWishlistModule, - FaqManagementModule, - TermsConditionsManagementModule, - PrivacyPolicyManagementModule, - TutorReportsAnalyticsModule, - StudentReportsAnalyticsModule, - CourseReportsAnalyticsModule, - CertificateSocialSharingModule, - CertificateDownloadModule, - AdminCertificateNameChangeReviewModule, - StudentCertificateNameChangeRequestModule, - AdminFinancialAidManagementModule, - StudentFinancialAidApplicationModule, - AboutManagementModule, - ContactMessageModule, - BadgesNftModule, - NotificationSystemModule, - OrganizationManagementModule, - OrganizationMembersModule, - PointsManagementModule, - RemovalRequestModule, - ReportAbuseModule, - SessionManagementModule, - SubscriptionPlanManagementModule, - StudentAuthModule, - StudentCartModule, - GoogleAuthModule, - StudentSavedCoursesModule, - AdminCourseManagementModule, - ], - controllers: [AppController], - providers: [AppService], -}) -export class AppModule {} diff --git a/benches/src/scrap-menu/app.service.rs b/benches/src/scrap-menu/app.service.rs deleted file mode 100644 index 927d7cc..0000000 --- a/benches/src/scrap-menu/app.service.rs +++ /dev/null @@ -1,8 +0,0 @@ -import { Injectable } from '@nestjs/common'; - -@Injectable() -export class AppService { - getHello(): string { - return 'Hello World!'; - } -} diff --git a/benches/src/scrap-menu/certificate-download.controller.rs b/benches/src/scrap-menu/certificate-download.controller.rs deleted file mode 100644 index 9b534ef..0000000 --- a/benches/src/scrap-menu/certificate-download.controller.rs +++ /dev/null @@ -1,44 +0,0 @@ -import { Body, Controller, Delete, Get, Param, Patch, Post, UseGuards } from '@nestjs/common'; -import { CertificateDownloadService } from './certificate-download.service'; -import { CreateCertificateDownloadDto } from './dto/create-certificate-download.dto'; -import { UpdateCertificateDownloadDto } from './dto/update-certificate-download.dto'; -import { JwtAuthGuard } from '../common/guards/jwt-auth.guard'; -import { RolesGuard } from '../common/guards/roles.guard'; -import { Role } from '../common/enums/role.enum'; -import { Roles } from '../common/decorators/roles.decorator'; - -@Controller('certificates/download') -export class CertificateDownloadController { - constructor(private readonly service: CertificateDownloadService) {} - - @Get() - findAll() { - return this.service.findAll(); - } - - @Get(':id') - findOne(@Param('id') id: string) { - return this.service.findOne(id); - } - - @Post() - @UseGuards(JwtAuthGuard, RolesGuard) - @Roles(Role.ADMIN, Role.MODERATOR, Role.TUTOR) - create(@Body() payload: CreateCertificateDownloadDto) { - return this.service.create(payload); - } - - @Patch(':id') - @UseGuards(JwtAuthGuard, RolesGuard) - @Roles(Role.ADMIN, Role.MODERATOR, Role.TUTOR) - update(@Param('id') id: string, @Body() payload: UpdateCertificateDownloadDto) { - return this.service.update(id, payload); - } - - @Delete(':id') - @UseGuards(JwtAuthGuard, RolesGuard) - @Roles(Role.ADMIN, Role.MODERATOR) - remove(@Param('id') id: string) { - return this.service.remove(id); - } -} diff --git a/benches/src/scrap-menu/certificate-download.module.rs b/benches/src/scrap-menu/certificate-download.module.rs deleted file mode 100644 index 2dfd5f2..0000000 --- a/benches/src/scrap-menu/certificate-download.module.rs +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { CertificateDownloadController } from './certificate-download.controller'; -import { CertificateDownloadService } from './certificate-download.service'; - -@Module({ - controllers: [CertificateDownloadController], - providers: [CertificateDownloadService], -}) -export class CertificateDownloadModule {} diff --git a/benches/src/scrap-menu/certificate-download.service.rs b/benches/src/scrap-menu/certificate-download.service.rs deleted file mode 100644 index b3c687c..0000000 --- a/benches/src/scrap-menu/certificate-download.service.rs +++ /dev/null @@ -1,41 +0,0 @@ -import { Injectable, NotFoundException } from '@nestjs/common'; -import { CreateCertificateDownloadDto } from './dto/create-certificate-download.dto'; -import { UpdateCertificateDownloadDto } from './dto/update-certificate-download.dto'; - -@Injectable() -export class CertificateDownloadService { - private readonly items: Array<{ id: string } & CreateCertificateDownloadDto> = []; - - findAll() { - return this.items; - } - - findOne(id: string) { - const item = this.items.find((entry) => entry.id === id); - if (!item) { - throw new NotFoundException('CertificateDownload item not found'); - } - return item; - } - - create(payload: CreateCertificateDownloadDto) { - const created = { id: crypto.randomUUID(), ...payload }; - this.items.push(created); - return created; - } - - update(id: string, payload: UpdateCertificateDownloadDto) { - const item = this.findOne(id); - Object.assign(item, payload); - return item; - } - - remove(id: string) { - const index = this.items.findIndex((entry) => entry.id === id); - if (index === -1) { - throw new NotFoundException('CertificateDownload item not found'); - } - this.items.splice(index, 1); - return { id, deleted: true }; - } -} diff --git a/benches/src/scrap-menu/main.rs b/benches/src/scrap-menu/main.rs deleted file mode 100644 index cf17932..0000000 --- a/benches/src/scrap-menu/main.rs +++ /dev/null @@ -1,16 +0,0 @@ -import { ValidationPipe } from '@nestjs/common'; -import { NestFactory } from '@nestjs/core'; -import { AppModule } from './app.module'; - -async function bootstrap() { - const app = await NestFactory.create(AppModule); - app.useGlobalPipes( - new ValidationPipe({ - whitelist: true, - forbidNonWhitelisted: false, - transform: true, - }), - ); - await app.listen(process.env.PORT ?? 3000); -} -bootstrap();