Compare commits
17 Commits
main_refac
...
main
Author | SHA1 | Date | |
---|---|---|---|
|
31f3834e6d | ||
|
52316319e6 | ||
|
138f67e02e | ||
|
5f850dd8f2 | ||
|
9c2a5b854f | ||
|
02a0977b5d | ||
|
d9a449304c | ||
|
abbf59207a | ||
|
7f8ca188ee | ||
|
11dbc834de | ||
|
f7af11b594 | ||
|
1807a85a53 | ||
|
4472828dfe | ||
|
999bae1910 | ||
|
1028ea8c43 | ||
|
c054ceb24d | ||
|
8d66810688 |
@@ -61,7 +61,7 @@ Project Mycelium is a Rust web app built on Actix Web.
|
||||
- Public catalogue: `/marketplace`, `/products`, `/products/{id}`, `/cart`, `/checkout`.
|
||||
- **Core Concepts**
|
||||
- Products (apps, services, compute). Orders and cart lifecycle.
|
||||
- Slices (compute resources) on the ThreeFold Grid, publicly listed at `/marketplace/compute`.
|
||||
- Slices (compute resources) on the Mycelium Grid, publicly listed at `/marketplace/compute`.
|
||||
- Credits wallet for balance, transactions, quick top-up, and auto top-up.
|
||||
- **Primary Flows**
|
||||
- Browse products: `/products`, details at `/products/{id}`; APIs under `/api/products*`.
|
||||
|
@@ -28,24 +28,21 @@ This document outlines the comprehensive redesign of the Project Mycelium market
|
||||
- [x] Update documentation and specs
|
||||
- [x] Verified zero remaining references
|
||||
|
||||
- [ ] **ThreeFold Credit (TFC) → Mycelium Credit (MC)**
|
||||
- [ ] Update currency display throughout UI
|
||||
- [ ] Update wallet and balance displays
|
||||
- [ ] Update transaction records
|
||||
- [ ] Update backend currency handling
|
||||
- [x] **ThreeFold Credit (TFC) → Mycelium Credit (MC)**
|
||||
- [x] Update currency display throughout UI
|
||||
- [x] Update wallet and balance displays
|
||||
- [x] Update transaction records
|
||||
- [x] Update backend currency handling
|
||||
|
||||
### 2. Currency System Overhaul
|
||||
- [ ] **Implement Mycelium Credit (MC)**
|
||||
- [ ] Update currency service to use MC as base
|
||||
- [ ] Set initial exchange rate: 1 MC = 1 USD
|
||||
- [ ] Update currency conversion logic
|
||||
- [ ] Update pricing calculations
|
||||
- [x] **Implement Mycelium Credit (MC)**
|
||||
- [x] Update currency service to use MC as base
|
||||
- [x] Set initial exchange rate: 1 MC = 1 USD
|
||||
- [x] Update currency conversion logic if needed
|
||||
- [x] Update pricing calculations if needed
|
||||
|
||||
- [ ] **Currency Display Preferences**
|
||||
- [ ] Add AED to supported currencies
|
||||
- [ ] Update settings page with currency selector
|
||||
- [ ] Implement currency preference persistence
|
||||
- [ ] Update currency display throughout UI
|
||||
- [x] **Currency Display Preferences**
|
||||
- [x] Add AED to supported currencies (see /dashboard/settings Currency Preferences)
|
||||
|
||||
### 3. Statistics & Grid Integration
|
||||
- [ ] **TF Grid Statistics**
|
||||
|
110
docs/dev/design/mc-base-currency-implementation.md
Normal file
110
docs/dev/design/mc-base-currency-implementation.md
Normal file
@@ -0,0 +1,110 @@
|
||||
# MC Base Currency Implementation Plan
|
||||
|
||||
## Overview
|
||||
Switch the Mycelium marketplace from USD to MC (Mycelium Credit) as the base currency while preserving identical UX for USD users through 1:1 exchange rate.
|
||||
|
||||
## Critical Requirements
|
||||
- **MC as Base**: All internal calculations use MC as reference currency
|
||||
- **USD UX Preservation**: Users selecting USD get identical experience to current system
|
||||
- **1:1 Exchange Rate**: 1 MC = 1 USD to maintain UX equivalence
|
||||
- **Backward Compatibility**: No breaking changes for existing functionality
|
||||
|
||||
## Implementation Phases
|
||||
|
||||
### Phase 1: Core Currency Service Overhaul
|
||||
- [ ] Update `CurrencyService::get_supported_currencies()` to make MC base currency
|
||||
- [ ] Change MC `is_base_currency: true` and `exchange_rate_to_base: dec!(1.0)`
|
||||
- [ ] Update USD `is_base_currency: false` and `exchange_rate_to_base: dec!(1.0)`
|
||||
- [ ] Recalculate all other currency rates relative to MC (not USD)
|
||||
- [ ] Update `CurrencyService::get_base_currency()` to return MC
|
||||
- [ ] Update `convert_amount()` method to use MC as base reference
|
||||
- [ ] Update `get_exchange_rate_to_base()` to use MC as base
|
||||
- [ ] Update `get_all_exchange_rates()` to use MC as base
|
||||
- [ ] Update `get_currency_stats()` base currency reporting
|
||||
|
||||
### Phase 2: System-Wide Defaults Update
|
||||
- [ ] Change `CurrencyService` default_display_currency from "USD" to "MC"
|
||||
- [ ] Update user preference defaults in `UserPersistentData` from "USD" to "MC"
|
||||
- [ ] Update model builders default currency from "USD" to "MC"
|
||||
- [ ] Update controller response defaults from "USD" to "MC"
|
||||
- [ ] Update template fallback values from "USD" to "MC"
|
||||
- [ ] Update navbar service defaults from "USD" to "MC"
|
||||
|
||||
### Phase 3: Service Layer Updates
|
||||
- [ ] Update `UserPersistence` default display_currency from "USD" to "MC"
|
||||
- [ ] Update `AutoTopUpService` USD references to use base currency
|
||||
- [ ] Update `InstantPurchaseService` USD references to use base currency
|
||||
- [ ] Update `OrderService` base currency references
|
||||
- [ ] Update `ProductService` base currency handling
|
||||
- [ ] Update `Wallet` service currency defaults
|
||||
- [ ] Update `PoolService` token references from "USD" to base currency
|
||||
- [ ] Update `ResourceProvider` base currency references
|
||||
|
||||
### Phase 4: Controller Updates
|
||||
- [ ] Update `CurrencyController` base currency responses
|
||||
- [ ] Update `DashboardController` currency defaults and responses
|
||||
- [ ] Update `WalletController` currency handling
|
||||
- [ ] Update `OrderController` currency processing
|
||||
- [ ] Update `MarketplaceController` currency defaults
|
||||
- [ ] Update `PoolController` currency references
|
||||
- [ ] Update all hardcoded "USD" strings in controller responses
|
||||
|
||||
### Phase 5: Model Updates
|
||||
- [ ] Update `MarketplaceCurrencyConfig` base_currency default
|
||||
- [ ] Update `Product` model base_currency defaults
|
||||
- [ ] Update `Order` model base currency references
|
||||
- [ ] Update `Transaction` model currency defaults
|
||||
- [ ] Update builder patterns to use MC as default
|
||||
- [ ] Update all model default values from "USD" to "MC"
|
||||
|
||||
### Phase 6: Template Updates
|
||||
- [ ] Update hardcoded currency defaults in HTML templates
|
||||
- [ ] Update JavaScript currency handling
|
||||
- [ ] Update template variables and fallbacks
|
||||
- [ ] Ensure dynamic currency selectors work with MC base
|
||||
|
||||
### Phase 7: Testing & Validation
|
||||
- [ ] Update unit tests to expect MC as base currency
|
||||
- [ ] Update integration tests for currency conversions
|
||||
- [ ] Test USD user experience preservation
|
||||
- [ ] Validate all currency conversion accuracy
|
||||
- [ ] Test edge cases and error handling
|
||||
- [ ] Performance test currency operations
|
||||
|
||||
### Phase 8: Documentation & Migration
|
||||
- [ ] Update code comments referencing USD as base
|
||||
- [ ] Update API documentation
|
||||
- [ ] Create migration guide for existing data
|
||||
- [ ] Update configuration examples
|
||||
- [ ] Document exchange rate change process
|
||||
|
||||
## UX Preservation Validation Checklist
|
||||
- [ ] USD users see identical prices to current system
|
||||
- [ ] Currency conversion works bidirectionally
|
||||
- [ ] All formatting remains consistent
|
||||
- [ ] User preferences persist correctly
|
||||
- [ ] Wallet balances display correctly
|
||||
- [ ] Transaction history shows correct values
|
||||
- [ ] Checkout process works identically
|
||||
|
||||
## Risk Mitigation
|
||||
- **Data Migration**: Ensure existing user data migrates correctly
|
||||
- **API Compatibility**: Maintain backward compatibility
|
||||
- **Performance**: Monitor currency conversion performance
|
||||
- **Error Handling**: Comprehensive error handling for edge cases
|
||||
- **Rollback Plan**: Ability to rollback if issues arise
|
||||
|
||||
## Success Criteria
|
||||
- [ ] MC is the internal base currency for all calculations
|
||||
- [ ] USD users experience no functional differences
|
||||
- [ ] All currency conversions work accurately
|
||||
- [ ] System performance remains acceptable
|
||||
- [ ] All tests pass
|
||||
- [ ] Documentation is updated
|
||||
- [ ] No breaking changes for existing integrations
|
||||
|
||||
## Future Considerations
|
||||
- Exchange rate flexibility for future changes (1 MC = 10 USD, etc.)
|
||||
- Additional currency support
|
||||
- Multi-currency wallet support
|
||||
- Advanced currency conversion features
|
@@ -1,115 +0,0 @@
|
||||
**TASK: Complete Currency Rebranding - ThreeFold Credit (TFC) → Mycelium Credit (MC)**
|
||||
|
||||
**Objective:** Systematically replace all instances of "ThreeFold Credit", "TFC", and related currency terminology with "Mycelium Credit" and "MC" throughout the Project Mycelium marketplace repository, implementing the new currency system with 1 MC = 1 USD base rate.
|
||||
|
||||
**Requirements:**
|
||||
1. **Analyze Current Usage:** Use grep to find ALL instances of "TFC", "ThreeFold Credit", "TF Credit", "tfp", "TFP", "credits_usd", currency symbols, and wallet references across the entire codebase.
|
||||
|
||||
2. **Categorize by File Type:** Backend (controllers, services, models), Frontend (views, JS), Tests, Docs/Specs, Configuration
|
||||
|
||||
3. **Develop Replacement Strategy:**
|
||||
- **Backend (Code & Logic):**
|
||||
- "TFC" → "MC"
|
||||
- "ThreeFold Credit" → "Mycelium Credit"
|
||||
- "TF Credit" → "Mycelium Credit"
|
||||
- "tfp" → "mc" (variable names)
|
||||
- "TFP" → "MC" (constants/enums)
|
||||
- `credits_usd` → `credits_mc` (if needed)
|
||||
- Currency calculation logic (maintain 1:1 USD rate)
|
||||
- **Frontend (Display text):**
|
||||
- "ThreeFold Credit" → "Mycelium Credit"
|
||||
- "TFC" → "MC"
|
||||
- Currency symbols and wallet displays
|
||||
- Balance and transaction displays
|
||||
- **Configuration & Settings:**
|
||||
- Default currency preferences
|
||||
- Exchange rate configurations
|
||||
- Currency service initialization
|
||||
|
||||
4. **Execute Systematically:** Start with backend currency service, then controllers, then frontend, then docs
|
||||
|
||||
5. **Verify Thoroughly:** Use multiple verification commands:
|
||||
- `grep -r "TFC" src/ --include="*.rs" --include="*.html" --include="*.js"`
|
||||
- `grep -r "ThreeFold Credit" src/ --include="*.rs" --include="*.html" --include="*.js"`
|
||||
- `grep -r "TF Credit" src/ --include="*.rs" --include="*.html" --include="*.js"`
|
||||
- `grep -r "tfp" src/ --include="*.rs" --include="*.html" --include="*.js"`
|
||||
- `grep -r "TFP" src/ --include="*.rs" --include="*.html" --include="*.js"`
|
||||
|
||||
**Key Areas to Focus:**
|
||||
- Currency service and exchange rate logic
|
||||
- Wallet components and balance displays
|
||||
- Transaction processing and records
|
||||
- Dashboard financial displays and charts
|
||||
- Marketplace pricing and payment flows
|
||||
- User settings and currency preferences
|
||||
- API responses with currency data
|
||||
- Database references and user data
|
||||
- Documentation and help text
|
||||
- Legal terms and agreements
|
||||
- Test files and mock data
|
||||
- Configuration files and settings
|
||||
|
||||
**Implementation Strategy:**
|
||||
1. **Currency Service Foundation** - Update core currency logic and rates
|
||||
2. **Backend Controllers** - Update API endpoints and data processing
|
||||
3. **Frontend Templates** - Update all user-facing currency displays
|
||||
4. **JavaScript Logic** - Update client-side currency handling
|
||||
5. **Documentation** - Update specs, docs, and legal terms
|
||||
6. **Configuration** - Update default settings and preferences
|
||||
7. **Testing** - Update test data and verify functionality
|
||||
|
||||
**Critical Considerations:**
|
||||
- **Maintain 1 MC = 1 USD rate** - Ensure pricing calculations remain accurate
|
||||
- **User data migration** - Handle existing user balances and transaction history
|
||||
- **API compatibility** - Ensure external integrations continue to work
|
||||
- **Currency preferences** - Implement proper MC/USD/AED display options
|
||||
- **Backward compatibility** - Plan for any legacy TFC references
|
||||
|
||||
**Expected File Updates:**
|
||||
- Currency service: `src/services/currency.rs` or similar
|
||||
- Controllers: `src/controllers/wallet.rs`, `src/controllers/dashboard.rs`
|
||||
- Models: `src/models/user.rs` (wallet/balance fields)
|
||||
- Frontend: All wallet, dashboard, and marketplace templates
|
||||
- JavaScript: Currency formatting and calculation logic
|
||||
- Tests: Update mock data and currency test cases
|
||||
- Docs: Update specs and user documentation
|
||||
- Legal: Update terms of service and agreements
|
||||
|
||||
**Success Criteria:**
|
||||
- Zero remaining "TFC"/"ThreeFold Credit" references in codebase
|
||||
- All currency displays show "MC"/"Mycelium Credit"
|
||||
- Currency calculations maintain accuracy (1 MC = 1 USD)
|
||||
- Wallet and balance displays updated consistently
|
||||
- User preferences support MC/USD/AED display options
|
||||
- All financial flows (purchase, balance, transactions) work correctly
|
||||
- Documentation and legal terms updated
|
||||
- Tests pass with new currency terminology
|
||||
- No breaking changes to existing user data or API contracts
|
||||
|
||||
**Verification Commands:**
|
||||
After implementation, run these verification commands to ensure complete migration:
|
||||
```bash
|
||||
grep -r "TFC" src/ --include="*.rs" --include="*.html" --include="*.js" # Should return 0 results
|
||||
grep -r "ThreeFold Credit" src/ --include="*.rs" --include="*.html" --include="*.js" # Should return 0 results
|
||||
grep -r "TF Credit" src/ --include="*.rs" --include="*.html" --include="*.js" # Should return 0 results
|
||||
grep -r "\btfp\b" src/ --include="*.rs" --include="*.html" --include="*.js" # Should return 0 results (word boundaries)
|
||||
grep -r "\bTFP\b" src/ --include="*.rs" --include="*.html" --include="*.js" # Should return 0 results (word boundaries)
|
||||
|
||||
# Verify successful replacements:
|
||||
grep -r "MC" src/ --include="*.rs" --include="*.html" --include="*.js" # Should show currency references
|
||||
grep -r "Mycelium Credit" src/ --include="*.rs" --include="*.html" --include="*.js" # Should show display text
|
||||
```
|
||||
|
||||
**Important Notes:**
|
||||
- **Systematic Approach:** Follow the same methodical process used for Application Solutions → Agentic Apps
|
||||
- **Currency Service Priority:** Start with the core currency service to establish the foundation
|
||||
- **User Experience Focus:** Ensure all user-facing displays are consistent and clear
|
||||
- **Financial Accuracy:** Double-check all calculations and exchange rate logic
|
||||
- **Data Integrity:** Preserve existing user financial data during transition
|
||||
- **Testing Critical:** Financial systems require thorough testing before deployment
|
||||
|
||||
**Expected Outcome:** Complete, consistent rebranding from "ThreeFold Credit (TFC)" to "Mycelium Credit (MC)" with proper currency system implementation, maintaining the same quality and thoroughness as previous rebrandings.
|
||||
|
||||
---
|
||||
|
||||
This currency rebranding represents a critical infrastructure change that affects the core financial operations of the marketplace. Systematic execution and thorough verification are essential to maintain system integrity and user trust.
|
@@ -1,21 +1,21 @@
|
||||
# ThreeFold Certification
|
||||
# Mycelium Certification
|
||||
|
||||
## Overview
|
||||
|
||||
ThreeFold Certification is a quality assurance program for farmers and solution providers who take a license with support from ThreeFold. This certification enables providers to offer enhanced reliability and guaranteed support to their customers.
|
||||
Mycelium Certification is a quality assurance program for farmers and solution providers who take a license with support from Mycelium. This certification enables providers to offer enhanced reliability and guaranteed support to their customers.
|
||||
|
||||
## Benefits of Certification
|
||||
|
||||
- **Guaranteed Support**: Certified farmers and solution providers receive priority support directly from ThreeFold.
|
||||
- **Guaranteed Support**: Certified farmers and solution providers receive priority support directly from Mycelium.
|
||||
- **Enhanced Reliability**: Certification ensures higher standards of service quality and uptime.
|
||||
- **Trust Signal**: Users can easily identify certified providers in the marketplace.
|
||||
- **SLA Endorsement**: Certified providers commit to specific Service Level Agreements endorsed by ThreeFold.
|
||||
- **Priority Resolution**: Issues affecting certified slices receive expedited attention from ThreeFold support teams.
|
||||
- **SLA Endorsement**: Certified providers commit to specific Service Level Agreements endorsed by Mycelium.
|
||||
- **Priority Resolution**: Issues affecting certified slices receive expedited attention from Mycelium support teams.
|
||||
|
||||
## How Certification Works
|
||||
|
||||
1. **Licensing**: Farmers or solution providers enter into a support license agreement with ThreeFold.
|
||||
2. **Verification**: ThreeFold verifies that the provider meets all technical and operational requirements.
|
||||
1. **Licensing**: Farmers or solution providers enter into a support license agreement with Mycelium.
|
||||
2. **Verification**: Mycelium verifies that the provider meets all technical and operational requirements.
|
||||
3. **Certification**: Upon approval, the provider receives certified status.
|
||||
4. **Flagging**: All slices offered by certified providers are automatically flagged as "certified" in the marketplace.
|
||||
|
||||
@@ -24,7 +24,7 @@ ThreeFold Certification is a quality assurance program for farmers and solution
|
||||
When browsing the TF Marketplace, users can filter for certified slices. The certification flag indicates:
|
||||
|
||||
- The slice is provided by a certified farmer or solution provider
|
||||
- ThreeFold guarantees support for this slice
|
||||
- Mycelium guarantees support for this slice
|
||||
- The slice meets higher reliability standards
|
||||
- Support requests will receive priority handling
|
||||
|
||||
@@ -32,7 +32,7 @@ When browsing the TF Marketplace, users can filter for certified slices. The cer
|
||||
|
||||
Farmers and solution providers interested in certification can:
|
||||
|
||||
1. Contact ThreeFold to inquire about licensing options
|
||||
1. Contact Mycelium to inquire about licensing options
|
||||
2. Review and sign the software and support license agreement
|
||||
3. Complete the certification process
|
||||
4. Begin offering certified slices in the marketplace
|
||||
@@ -48,7 +48,7 @@ To maintain certified status, providers must:
|
||||
|
||||
## For Users
|
||||
|
||||
When selecting slices in the marketplace, look for the certification flag to ensure you're getting resources with guaranteed ThreeFold support and enhanced reliability.
|
||||
When selecting slices in the marketplace, look for the certification flag to ensure you're getting resources with guaranteed Mycelium support and enhanced reliability.
|
||||
|
||||
## License agreement needed
|
||||
|
||||
|
@@ -1,10 +1,10 @@
|
||||
# ThreeFold Points (TFP) System
|
||||
# Mycelium Points (TFP) System
|
||||
|
||||
The TF Marketplace operates on a [TFP](./tfp.md) system where value is exchanged between suppliers (providers) and consumers through TFP. This creates a balanced marketplace where participants can both earn and spend TFP based on their contributions and needs.
|
||||
|
||||
## Core Principles
|
||||
|
||||
- [TFP = ThreeFold Tokens](./tfp.md) represent value exchanged within the marketplace
|
||||
- [TFP = Mycelium Tokens](./tfp.md) represent value exchanged within the marketplace
|
||||
- Suppliers provide services/products and earn TFP
|
||||
- Consumers use services/products and spend TFP
|
||||
- The same entity can be both supplier and consumer in different contexts
|
||||
|
@@ -5,23 +5,23 @@
|
||||
|
||||
This Service and Node Provider Agreement (hereinafter referred to as the "Agreement") is made and entered into as of the Effective Date (as defined below) by and between:
|
||||
|
||||
**ThreeFold NV**, a company incorporated in Dubai, UAE, with its principal place of business at DMCC Business Centre, Level No 1, Jewellery & Gemplex 3, Dubai, United Arab Emirates, Registration Number: DMCCXXXX (hereinafter referred to as "ThreeFold" or "Licensor"),
|
||||
**Mycelium NV**, a company incorporated in Dubai, UAE, with its principal place of business at DMCC Business Centre, Level No 1, Jewellery & Gemplex 3, Dubai, United Arab Emirates, Registration Number: DMCCXXXX (hereinafter referred to as "Mycelium" or "Licensor"),
|
||||
|
||||
AND
|
||||
|
||||
**[Provider Name]**, a [company/individual] with its principal place of business at/residing at [Provider Address] (hereinafter referred to as the "Provider" or "Licensee").
|
||||
|
||||
ThreeFold and the Provider are hereinafter collectively referred to as the "Parties" and individually as a "Party".
|
||||
Mycelium and the Provider are hereinafter collectively referred to as the "Parties" and individually as a "Party".
|
||||
|
||||
**WHEREAS:**
|
||||
|
||||
A. ThreeFold has developed and owns or licenses certain software and a decentralized cloud platform known as the TF Grid, which includes the TF Marketplace and utilizes ThreeFold Tokens (TFP) for value exchange.
|
||||
A. Mycelium has developed and owns or licenses certain software and a decentralized cloud platform known as the TF Grid, which includes the TF Marketplace and utilizes Mycelium Tokens (TFP) for value exchange.
|
||||
|
||||
B. ThreeFold offers a Certification program ("ThreeFold Certification") for providers who meet specified quality, reliability, and operational standards.
|
||||
B. Mycelium offers a Certification program ("Mycelium Certification") for providers who meet specified quality, reliability, and operational standards.
|
||||
|
||||
C. The Provider wishes to offer services (such as Certified 3Nodes and/or Slices) on the TF Grid and become a ThreeFold Certified Provider.
|
||||
C. The Provider wishes to offer services (such as Certified 3Nodes and/or Slices) on the TF Grid and become a Mycelium Certified Provider.
|
||||
|
||||
D. ThreeFold is willing to grant the Provider a license to use certain ThreeFold Software and provide support under the terms and conditions set forth in this Agreement, in exchange for a license fee.
|
||||
D. Mycelium is willing to grant the Provider a license to use certain Mycelium Software and provide support under the terms and conditions set forth in this Agreement, in exchange for a license fee.
|
||||
|
||||
**NOW, THEREFORE**, in consideration of the mutual covenants and promises contained herein, the Parties agree as follows:
|
||||
|
||||
@@ -38,74 +38,74 @@ This Agreement applies to the Provider's offering of "Certified Services" on the
|
||||
b. Provisioning of "Certified Slices" (compute resources) as defined in TF Grid documentation.
|
||||
c. Other services mutually agreed upon in writing and designated as Certified Services.
|
||||
|
||||
### 2.2. ThreeFold Software Covered by Support Guarantee
|
||||
### 2.2. Mycelium Software Covered by Support Guarantee
|
||||
|
||||
ThreeFold's support guarantee under this Agreement covers defects in "Covered ThreeFold Software." "Covered ThreeFold Software" is defined as:
|
||||
*All software deployed or made available by ThreeFold via the official TF Grid marketplace and utilized by the Provider in their provision of Certified Services.*
|
||||
This includes, but is not limited to, core components such as Zero-OS (ZOS) and Mycelium networking software, as well as any applications or solutions directly provided and managed by ThreeFold on the marketplace. An indicative list of Covered ThreeFold Software may be provided in Appendix A and updated by ThreeFold from time to time.
|
||||
Mycelium's support guarantee under this Agreement covers defects in "Covered Mycelium Software." "Covered Mycelium Software" is defined as:
|
||||
*All software deployed or made available by Mycelium via the official TF Grid marketplace and utilized by the Provider in their provision of Certified Services.*
|
||||
This includes, but is not limited to, core components such as Zero-OS (ZOS) and Mycelium networking software, as well as any applications or solutions directly provided and managed by Mycelium on the marketplace. An indicative list of Covered Mycelium Software may be provided in Appendix A and updated by Mycelium from time to time.
|
||||
|
||||
## 3. Certification Requirements
|
||||
|
||||
3.1. The Provider agrees to apply for, achieve, and maintain ThreeFold Certification status for all Certified Services offered under this Agreement.
|
||||
3.1. The Provider agrees to apply for, achieve, and maintain Mycelium Certification status for all Certified Services offered under this Agreement.
|
||||
|
||||
3.2. The process, standards, technical and operational requirements, verification procedures, and maintenance obligations for ThreeFold Certification are detailed in the official ThreeFold Certification Program documentation.
|
||||
3.2. The process, standards, technical and operational requirements, verification procedures, and maintenance obligations for Mycelium Certification are detailed in the official Mycelium Certification Program documentation.
|
||||
|
||||
3.3. Failure to achieve or maintain ThreeFold Certification may be grounds for termination of this Agreement by ThreeFold.
|
||||
3.3. Failure to achieve or maintain Mycelium Certification may be grounds for termination of this Agreement by Mycelium.
|
||||
|
||||
## 4. Provider Obligations
|
||||
|
||||
The Provider shall:
|
||||
4.1. Define, publish, and adhere to its own Service Level Agreements (SLAs) for its end-customers of Certified Services. These SLAs must be transparently communicated to end-customers using the Marketplace Portal.
|
||||
|
||||
4.2. Comply at all times with the then-current ThreeFold Certification standards, policies, and operational guidelines.
|
||||
4.2. Comply at all times with the then-current Mycelium Certification standards, policies, and operational guidelines.
|
||||
|
||||
4.3. Accurately and timely report to ThreeFold its Gross TFP Revenue (as defined in Section 7) derived from the compute and storage rental of its Certified Services, in accordance with the reporting procedures outlined herein.
|
||||
4.3. Accurately and timely report to Mycelium its Gross TFP Revenue (as defined in Section 7) derived from the compute and storage rental of its Certified Services, in accordance with the reporting procedures outlined herein.
|
||||
|
||||
4.4. Cooperate fully and in a timely manner with ThreeFold's support personnel and processes, including providing all necessary information, logs, and access (where appropriate and secure) required for ThreeFold to diagnose and resolve defects in Covered ThreeFold Software.
|
||||
4.4. Cooperate fully and in a timely manner with Mycelium's support personnel and processes, including providing all necessary information, logs, and access (where appropriate and secure) required for Mycelium to diagnose and resolve defects in Covered Mycelium Software.
|
||||
|
||||
4.5. Use the Covered ThreeFold Software only in accordance with this Agreement and any accompanying documentation.
|
||||
4.5. Use the Covered Mycelium Software only in accordance with this Agreement and any accompanying documentation.
|
||||
|
||||
4.6. Be responsible for all aspects of its service delivery to its end-customers, including customer support, billing, and contract management.
|
||||
|
||||
4.7. Comply with all applicable laws and regulations in its provision of Certified Services.
|
||||
|
||||
## 5. ThreeFold Obligations & Support Guarantee
|
||||
## 5. Mycelium Obligations & Support Guarantee
|
||||
|
||||
|
||||
ThreeFold shall:
|
||||
5.1. Grant the Provider a non-exclusive, non-transferable (except as provided herein), revocable (pursuant to the terms of this Agreement) license to use the Covered ThreeFold Software solely in connection with the Provider's offering of Certified Services during the term of this Agreement.
|
||||
Mycelium shall:
|
||||
5.1. Grant the Provider a non-exclusive, non-transferable (except as provided herein), revocable (pursuant to the terms of this Agreement) license to use the Covered Mycelium Software solely in connection with the Provider's offering of Certified Services during the term of this Agreement.
|
||||
|
||||
5.2. Provide defect support ("Support Services") for Covered ThreeFold Software to the Provider, as per the severity levels, response times, and resolution targets detailed in Section 6 of this Agreement.
|
||||
5.2. Provide defect support ("Support Services") for Covered Mycelium Software to the Provider, as per the severity levels, response times, and resolution targets detailed in Section 6 of this Agreement.
|
||||
|
||||
5.3. Maintain defined support channels (e.g., dedicated portal, email address) for Certified Providers to submit support requests. These channels will be communicated to the Provider upon certification.
|
||||
|
||||
5.4. Use commercially reasonable efforts to correct verified defects in the Covered ThreeFold Software.
|
||||
5.4. Use commercially reasonable efforts to correct verified defects in the Covered Mycelium Software.
|
||||
|
||||
## 6. Defect Support: Severity Levels, Response & Resolution Targets
|
||||
|
||||
### 6.1. Severity Level Definitions
|
||||
The Provider shall, when reporting an issue, reasonably self-assess the severity level. ThreeFold may re-classify the severity level based on its assessment of the impact.
|
||||
The Provider shall, when reporting an issue, reasonably self-assess the severity level. Mycelium may re-classify the severity level based on its assessment of the impact.
|
||||
|
||||
| Severity Level | Definition | Examples |
|
||||
|-------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **Severity 1 (Critical)** | A defect in Covered ThreeFold Software causing a complete loss of essential service or functionality for multiple end-users of the Provider's Certified Service, or a critical security vulnerability, with no workaround available. | *Certified 3Node(s) unbootable due to a ZOS bug; critical Mycelium network failure originating from Covered ThreeFold Software affecting multiple Certified Services; a severe, exploitable security flaw in Covered ThreeFold Software.* |
|
||||
| **Severity 2 (High)** | A defect in Covered ThreeFold Software causing a significant degradation of essential service or functionality, or loss of a major feature, for multiple end-users of the Provider's Certified Service, with no reasonable or only a difficult workaround available. | *Intermittent but frequent loss of network connectivity on Certified Slices due to a Mycelium software defect; a core feature of a ThreeFold-provided marketplace application (used as part of a Certified Service) malfunctioning consistently.* |
|
||||
| **Severity 3 (Medium)** | A defect in Covered ThreeFold Software causing a partial loss of non-critical functionality, minor performance degradation, or impacting a limited number of end-users of the Provider's Certified Service, where a reasonable workaround is available. | *A bug in a management interface of a ThreeFold tool used by the Provider; cosmetic issues in a TF-provided application that do not impede core functionality; minor, non-critical performance issues.* |
|
||||
| **Severity 4 (Low)** | A minor issue, documentation error, request for information, or a cosmetic defect in Covered ThreeFold Software with minimal or no impact on the Provider's or end-users' use of the Certified Service. | *Typographical error in documentation; inquiry about a feature's behavior.* |
|
||||
| **Severity 1 (Critical)** | A defect in Covered Mycelium Software causing a complete loss of essential service or functionality for multiple end-users of the Provider's Certified Service, or a critical security vulnerability, with no workaround available. | *Certified 3Node(s) unbootable due to a ZOS bug; critical Mycelium network failure originating from Covered Mycelium Software affecting multiple Certified Services; a severe, exploitable security flaw in Covered Mycelium Software.* |
|
||||
| **Severity 2 (High)** | A defect in Covered Mycelium Software causing a significant degradation of essential service or functionality, or loss of a major feature, for multiple end-users of the Provider's Certified Service, with no reasonable or only a difficult workaround available. | *Intermittent but frequent loss of network connectivity on Certified Slices due to a Mycelium software defect; a core feature of a Mycelium-provided marketplace application (used as part of a Certified Service) malfunctioning consistently.* |
|
||||
| **Severity 3 (Medium)** | A defect in Covered Mycelium Software causing a partial loss of non-critical functionality, minor performance degradation, or impacting a limited number of end-users of the Provider's Certified Service, where a reasonable workaround is available. | *A bug in a management interface of a Mycelium tool used by the Provider; cosmetic issues in a TF-provided application that do not impede core functionality; minor, non-critical performance issues.* |
|
||||
| **Severity 4 (Low)** | A minor issue, documentation error, request for information, or a cosmetic defect in Covered Mycelium Software with minimal or no impact on the Provider's or end-users' use of the Certified Service. | *Typographical error in documentation; inquiry about a feature's behavior.* |
|
||||
|
||||
### 6.2. Support Hours & Response/Resolution Targets
|
||||
The following targets are applicable to Support Services provided by ThreeFold to the Provider:
|
||||
The following targets are applicable to Support Services provided by Mycelium to the Provider:
|
||||
|
||||
| Severity Level | Support Request Availability | Target Initial Response Time | Target Resolution/Workaround Time | Notes |
|
||||
|-------------------------|-------------------------------------------|----------------------------------------------|---------------------------------------------------------------------------------------------------|----------------------------------------------------------|
|
||||
| **Severity 1 (Critical)** | 24x7x365 | **1 hour** (from validated S1 submission) | **4-8 hours** | ThreeFold will provide ongoing status updates every [e.g., 2 hours]. |
|
||||
| **Severity 1 (Critical)** | 24x7x365 | **1 hour** (from validated S1 submission) | **4-8 hours** | Mycelium will provide ongoing status updates every [e.g., 2 hours]. |
|
||||
| **Severity 2 (High)** | During Business Hours (as defined below) | **4 business hours** (from validated S2 submission) | **2 business days** | |
|
||||
| **Severity 3 (Medium)** | During Business Hours | **1 business day** (from validated S3 submission) | **5 business days** | |
|
||||
| **Severity 4 (Low)** | During Business Hours | **2 business days** | As resources permit, potentially addressed in a future software release or documentation update. | |
|
||||
|
||||
"**Business Hours**" for ThreeFold support shall mean [e.g., 9:00 AM to 5:00 PM CET/CEST, Monday through Friday, excluding ThreeFold recognized public holidays in Belgium].
|
||||
"**Initial Response Time**" is the time from ThreeFold's acknowledgment of receipt of a properly submitted support request to the time ThreeFold assigns resources to begin addressing the issue.
|
||||
"**Resolution/Workaround Time**" is the time from ThreeFold's acknowledgment to when ThreeFold provides a fix, a patch, a documented workaround, or determines that the issue is not a defect in Covered ThreeFold Software. Resolution may be a permanent fix or a temporary workaround that restores essential functionality.
|
||||
"**Business Hours**" for Mycelium support shall mean [e.g., 9:00 AM to 5:00 PM CET/CEST, Monday through Friday, excluding Mycelium recognized public holidays in Belgium].
|
||||
"**Initial Response Time**" is the time from Mycelium's acknowledgment of receipt of a properly submitted support request to the time Mycelium assigns resources to begin addressing the issue.
|
||||
"**Resolution/Workaround Time**" is the time from Mycelium's acknowledgment to when Mycelium provides a fix, a patch, a documented workaround, or determines that the issue is not a defect in Covered Mycelium Software. Resolution may be a permanent fix or a temporary workaround that restores essential functionality.
|
||||
|
||||
### 6.3. Escalation Procedures
|
||||
[To be defined: This section will outline the process for the Provider to escalate an issue if response/resolution targets are not met or if the severity of an issue changes. It will include contact points/methods for escalation.]
|
||||
@@ -114,20 +114,20 @@ The following targets are applicable to Support Services provided by ThreeFold t
|
||||
To receive Support Services, Provider must:
|
||||
a. Provide accurate and complete information regarding the issue.
|
||||
b. Make reasonable efforts to diagnose and replicate the issue.
|
||||
c. Cooperate with ThreeFold support personnel.
|
||||
d. Designate specific technical contacts authorized to interact with ThreeFold support.
|
||||
c. Cooperate with Mycelium support personnel.
|
||||
d. Designate specific technical contacts authorized to interact with Mycelium support.
|
||||
|
||||
## 7. License Fee & Payment
|
||||
|
||||
7.1. In consideration for the license to use Covered ThreeFold Software and the Support Services provided by ThreeFold, ThreeFold shall automatically deduct a recurring license fee ("License Fee") from the Provider's Gross TFP Revenue from Certified Compute and Storage (as defined below) on the TF Grid marketplace backend system.
|
||||
7.1. In consideration for the license to use Covered Mycelium Software and the Support Services provided by Mycelium, Mycelium shall automatically deduct a recurring license fee ("License Fee") from the Provider's Gross TFP Revenue from Certified Compute and Storage (as defined below) on the TF Grid marketplace backend system.
|
||||
|
||||
7.2. The License Fee shall be **ten percent (10%)** of the Provider's "Gross TFP Revenue from Certified Compute and Storage."
|
||||
|
||||
7.3. "**Gross TFP Revenue from Certified Compute and Storage**" is defined as all ThreeFold Tokens (TFP) earned and received by the Provider from its end-customers specifically for the rental of compute (e.g., vCPU, RAM) and storage (e.g., SSD, HDD capacity) resources offered as part of its Certified Services on Certified 3Nodes or Certified Slices, before deduction of any operational costs, transaction fees, or other expenses incurred by the Provider. Revenue from other services (e.g., managed services, consulting, bandwidth charges billed separately by the provider) is excluded from this calculation unless explicitly agreed in writing.
|
||||
7.3. "**Gross TFP Revenue from Certified Compute and Storage**" is defined as all Mycelium Tokens (TFP) earned and received by the Provider from its end-customers specifically for the rental of compute (e.g., vCPU, RAM) and storage (e.g., SSD, HDD capacity) resources offered as part of its Certified Services on Certified 3Nodes or Certified Slices, before deduction of any operational costs, transaction fees, or other expenses incurred by the Provider. Revenue from other services (e.g., managed services, consulting, bandwidth charges billed separately by the provider) is excluded from this calculation unless explicitly agreed in writing.
|
||||
|
||||
7.4. **Reporting**: Within [e.g., ten (10) calendar days] after the end of each calendar month, the Provider shall submit a report to ThreeFold detailing its Gross TFP Revenue from Certified Compute and Storage for the preceding month. The report format and submission method will be specified by ThreeFold. Provider agrees to maintain accurate records to support these reports and allow for auditing by ThreeFold or its designated agent upon reasonable notice.
|
||||
7.4. **Reporting**: Within [e.g., ten (10) calendar days] after the end of each calendar month, the Provider shall submit a report to Mycelium detailing its Gross TFP Revenue from Certified Compute and Storage for the preceding month. The report format and submission method will be specified by Mycelium. Provider agrees to maintain accurate records to support these reports and allow for auditing by Mycelium or its designated agent upon reasonable notice.
|
||||
|
||||
7.5. **Payment**: The License Fee for each month will be automatically deducted in TFP from the Provider's Gross TFP Revenue on the TF Grid marketplace backend system at the time the revenue is registered. No direct payment of the License Fee is required from the Provider to ThreeFold.
|
||||
7.5. **Payment**: The License Fee for each month will be automatically deducted in TFP from the Provider's Gross TFP Revenue on the TF Grid marketplace backend system at the time the revenue is registered. No direct payment of the License Fee is required from the Provider to Mycelium.
|
||||
|
||||
7.6. As the License Fee is automatically deducted, provisions for late payments are not applicable to the License Fee itself.
|
||||
|
||||
@@ -138,21 +138,21 @@ To receive Support Services, Provider must:
|
||||
b. Adhering to any revenue lock-in periods for TFP earned, as defined by TF Grid policies.
|
||||
c. Being subject to the TF Grid's "slashing" mechanisms (potential loss of staked or locked TFP) if the Provider fails to meet its self-defined and published SLAs to its end-customers, or fails to meet other TF Grid operational requirements (e.g., node uptime, resource availability as per `slices.md` and `tfp.md`).
|
||||
|
||||
8.2. This Agreement and the Support Services provided by ThreeFold are intended to assist the Provider in maintaining high-quality Certified Services and meeting its commitments. However, ThreeFold is not responsible for the Provider's failure to meet its independent obligations to its customers or the TF Grid ecosystem. The Provider remains solely responsible for penalties or slashing imposed by the TF Grid.
|
||||
8.2. This Agreement and the Support Services provided by Mycelium are intended to assist the Provider in maintaining high-quality Certified Services and meeting its commitments. However, Mycelium is not responsible for the Provider's failure to meet its independent obligations to its customers or the TF Grid ecosystem. The Provider remains solely responsible for penalties or slashing imposed by the TF Grid.
|
||||
|
||||
## 9. Intellectual Property
|
||||
|
||||
9.1. **ThreeFold IP**: ThreeFold retains all right, title, and interest in and to the Covered ThreeFold Software, the TF Grid, the TF Marketplace, TFP, Mycelium, Zero-OS, and all associated intellectual property rights, including patents, copyrights, trademarks, and trade secrets ("ThreeFold IP").
|
||||
9.1. **Mycelium IP**: Mycelium retains all right, title, and interest in and to the Covered Mycelium Software, the TF Grid, the TF Marketplace, TFP, Mycelium, Zero-OS, and all associated intellectual property rights, including patents, copyrights, trademarks, and trade secrets ("Mycelium IP").
|
||||
|
||||
9.2. **License Grant**: Subject to the terms of this Agreement, ThreeFold grants Provider a limited, non-exclusive, non-sublicensable, non-transferable, revocable license during the Term to use the ThreeFold IP solely as necessary to offer the Certified Services.
|
||||
9.2. **License Grant**: Subject to the terms of this Agreement, Mycelium grants Provider a limited, non-exclusive, non-sublicensable, non-transferable, revocable license during the Term to use the Mycelium IP solely as necessary to offer the Certified Services.
|
||||
|
||||
9.3. **Restrictions**: Provider shall not (and shall not permit any third party to): (a) decompile, reverse engineer, disassemble, or otherwise attempt to derive the source code of any Covered ThreeFold Software (except to the extent such restrictions are prohibited by applicable law); (b) modify, adapt, or create derivative works of any ThreeFold IP; (c) remove, alter, or obscure any proprietary notices on ThreeFold IP; (d) use ThreeFold IP for any purpose not expressly permitted herein.
|
||||
9.3. **Restrictions**: Provider shall not (and shall not permit any third party to): (a) decompile, reverse engineer, disassemble, or otherwise attempt to derive the source code of any Covered Mycelium Software (except to the extent such restrictions are prohibited by applicable law); (b) modify, adapt, or create derivative works of any Mycelium IP; (c) remove, alter, or obscure any proprietary notices on Mycelium IP; (d) use Mycelium IP for any purpose not expressly permitted herein.
|
||||
|
||||
9.4. **Provider IP**: Provider retains all right, title, and interest in and to its own intellectual property developed independently of this Agreement ("Provider IP").
|
||||
|
||||
## 10. Confidentiality
|
||||
|
||||
10.1. "Confidential Information" means any non-public information disclosed by one Party to the other, whether orally or in writing, that is designated as confidential or that reasonably should be understood to be confidential given the nature of the information and the circumstances of disclosure. ThreeFold's Confidential Information includes the Covered ThreeFold Software (in source code form, if accessed), and non-public technical or business information. Provider's Confidential Information includes its non-public customer data and business plans.
|
||||
10.1. "Confidential Information" means any non-public information disclosed by one Party to the other, whether orally or in writing, that is designated as confidential or that reasonably should be understood to be confidential given the nature of the information and the circumstances of disclosure. Mycelium's Confidential Information includes the Covered Mycelium Software (in source code form, if accessed), and non-public technical or business information. Provider's Confidential Information includes its non-public customer data and business plans.
|
||||
|
||||
10.2. Each Party agrees to: (a) use Confidential Information of the other Party solely for the purposes of this Agreement; (b) not disclose such Confidential Information to any third party without the other Party's prior written consent, except to employees, agents, or contractors who have a need to know and are bound by confidentiality obligations at least as restrictive as those herein; and (c) protect such Confidential Information from unauthorized use or disclosure using the same degree of care it uses for its own similar information, but not less than reasonable care.
|
||||
|
||||
@@ -168,11 +168,11 @@ To receive Support Services, Provider must:
|
||||
a. Materially breaches any provision of this Agreement and fails to cure such breach within [e.g., thirty (30) days] of receiving written notice thereof;
|
||||
b. Becomes insolvent, makes an assignment for the benefit of creditors, or if a receiver or trustee is appointed for it or its assets.
|
||||
|
||||
11.3. **Termination by ThreeFold**: ThreeFold may terminate this Agreement immediately upon written notice if the Provider fails to maintain its ThreeFold Certification status, or fails to pay License Fees when due and does not cure such non-payment within [e.g., ten (10) days] of notice.
|
||||
11.3. **Termination by Mycelium**: Mycelium may terminate this Agreement immediately upon written notice if the Provider fails to maintain its Mycelium Certification status, or fails to pay License Fees when due and does not cure such non-payment within [e.g., ten (10) days] of notice.
|
||||
|
||||
11.4. **Effect of Termination**: Upon termination or expiration of this Agreement:
|
||||
a. All licenses granted hereunder shall immediately terminate.
|
||||
b. Provider shall cease all use of Covered ThreeFold Software and ThreeFold IP.
|
||||
b. Provider shall cease all use of Covered Mycelium Software and Mycelium IP.
|
||||
c. Provider shall promptly pay any outstanding License Fees accrued up to the date of termination.
|
||||
d. Each Party shall return or destroy (at the other Party's option) all Confidential Information of the other Party in its possession.
|
||||
e. Sections 7 (for accrued fees), 9, 10, 12, 13, 14, and any other provisions that by their nature should survive, shall survive termination.
|
||||
@@ -199,7 +199,7 @@ To receive Support Services, Provider must:
|
||||
|
||||
14.1. **Notices**: All notices, requests, consents, claims, demands, waivers, and other communications hereunder shall be in writing and addressed to the Parties at the addresses set forth on the first page of this Agreement (or to such other address that may be designated by the receiving Party from time to time). Notices shall be deemed effectively given: (a) when received, if delivered by hand; (b) when received, if sent by a nationally recognized overnight courier (receipt requested); (c) on the date sent by email (with confirmation of transmission), if sent during normal business hours of the recipient, and on the next business day, if sent after normal business hours of the recipient.
|
||||
|
||||
14.2. **Assignment**: Neither Party may assign or transfer any of its rights or delegate any of its obligations hereunder, in whole or in part, by operation of law or otherwise, without the prior written consent of the other Party, which consent shall not be unreasonably withheld or delayed. Notwithstanding the foregoing, ThreeFold may assign this Agreement in its entirety, without consent of the Provider, in connection with a merger, acquisition, corporate reorganization, or sale of all or substantially all of its assets.
|
||||
14.2. **Assignment**: Neither Party may assign or transfer any of its rights or delegate any of its obligations hereunder, in whole or in part, by operation of law or otherwise, without the prior written consent of the other Party, which consent shall not be unreasonably withheld or delayed. Notwithstanding the foregoing, Mycelium may assign this Agreement in its entirety, without consent of the Provider, in connection with a merger, acquisition, corporate reorganization, or sale of all or substantially all of its assets.
|
||||
|
||||
14.3. **Force Majeure**: Neither Party shall be liable or responsible to the other Party, nor be deemed to have defaulted under or breached this Agreement, for any failure or delay in fulfilling or performing any term of this Agreement (except for any obligations to make payments), when and to the extent such failure or delay is caused by or results from acts beyond the impacted Party's reasonable control, including, without limitation: acts of God; flood, fire, earthquake, or explosion; war, invasion, hostilities, terrorist threats or acts, riot, or other civil unrest; actions, embargoes, or blockades in effect on or after the date of this Agreement; national or regional emergency; strikes, labor stoppages or slowdowns, or other industrial disturbances; or shortage of adequate power or telecommunications.
|
||||
|
||||
@@ -211,23 +211,23 @@ To receive Support Services, Provider must:
|
||||
|
||||
14.7. **Relationship of the Parties**: The relationship between the Parties is that of independent contractors. Nothing contained in this Agreement shall be construed as creating any agency, partnership, joint venture, or other form of joint enterprise, employment, or fiduciary relationship between the Parties.
|
||||
|
||||
## 15. Appendix A: Covered ThreeFold Software (Indicative List)
|
||||
## 15. Appendix A: Covered Mycelium Software (Indicative List)
|
||||
|
||||
* As defined in Section 2.2: "All software deployed or made available by ThreeFold via the official TF Grid marketplace and utilized by the Provider in their provision of Certified Services."
|
||||
* As defined in Section 2.2: "All software deployed or made available by Mycelium via the official TF Grid marketplace and utilized by the Provider in their provision of Certified Services."
|
||||
* Key examples include (but are not limited to):
|
||||
* Zero-OS (ZOS) - All versions officially supported by ThreeFold.
|
||||
* Mycelium Core Networking Components - All versions officially supported by ThreeFold.
|
||||
* Official TF Grid Marketplace Platform Software (components directly managed by ThreeFold).
|
||||
* Zero-OS (ZOS) - All versions officially supported by Mycelium.
|
||||
* Mycelium Core Networking Components - All versions officially supported by Mycelium.
|
||||
* Official TF Grid Marketplace Platform Software (components directly managed by Mycelium).
|
||||
* and other software as used in TF Grid
|
||||
* This list may be updated by ThreeFold upon reasonable notice to the Provider, typically coinciding with new software releases or deprecations.
|
||||
* This list may be updated by Mycelium upon reasonable notice to the Provider, typically coinciding with new software releases or deprecations.
|
||||
|
||||
## 16. Appendix B: Support Contact Information & Escalation Matrix
|
||||
|
||||
**ThreeFold Support Contact for Certified Providers:**
|
||||
**Mycelium Support Contact for Certified Providers:**
|
||||
|
||||
* Primary Support Portal/Email: [e.g., support.certified@threefold.io or TBD link to portal]
|
||||
|
||||
**ThreeFold Escalation Matrix:**
|
||||
**Mycelium Escalation Matrix:**
|
||||
|
||||
* **Level 1:** Standard Support Request via Portal/Email.
|
||||
* **Level 2:** If S1/S2 response/resolution targets are missed, or for critical concerns:
|
||||
@@ -238,12 +238,12 @@ To receive Support Services, Provider must:
|
||||
* Escalation Contact Name/Role: [e.g., VP of Engineering/Operations]
|
||||
* Escalation Email: [e.g., exec-escalation@threefold.io]
|
||||
|
||||
(This Appendix will be populated with specific, current contact details by ThreeFold upon execution of the Agreement.)
|
||||
(This Appendix will be populated with specific, current contact details by Mycelium upon execution of the Agreement.)
|
||||
|
||||
---
|
||||
**IN WITNESS WHEREOF**, the Parties hereto have executed this Service and Node Provider Agreement as of the Effective Date.
|
||||
|
||||
**ThreeFold NV**
|
||||
**Mycelium NV**
|
||||
|
||||
By: _________________________
|
||||
|
||||
|
@@ -10,9 +10,9 @@ Each slice has
|
||||
- min uptime (guaranteed by the provider, will lose TFP points if not achieved)
|
||||
- min bandiwdth (guaranteed by the provider)
|
||||
- passmark
|
||||
- reputation (as build up over time and measured by the ThreeFold system)
|
||||
- reputation (as build up over time and measured by the Mycelium system)
|
||||
- optional: public IP address (v6 or v4)
|
||||
- optional: certification flag (indicates the slice is provided by a [certified](./certified.md) farmer with ThreeFold support)
|
||||
- optional: certification flag (indicates the slice is provided by a [certified](./certified.md) farmer with Mycelium support)
|
||||
- pricing in [TFP](./tfp.md) per hour/day/month/year (farmer can change the price)
|
||||
|
||||
The farmer has lot of freedom to define these oaraneters
|
||||
|
10
specs/tfp.md
10
specs/tfp.md
@@ -1,13 +1,13 @@
|
||||
# TFP
|
||||
|
||||
- TFP = TFPoint
|
||||
- TFT = ThreeFold Token
|
||||
- TFT = Mycelium Token
|
||||
- PEAQ = the DePIN token from the Peaq Network System
|
||||
|
||||
## TFP Price and Value
|
||||
|
||||
- 1 TFP = 0.1 USD (fixed price)
|
||||
- TFP serves as a stable medium of exchange within the ThreeFold ecosystem
|
||||
- TFP serves as a stable medium of exchange within the Mycelium ecosystem
|
||||
|
||||
## Liquidity Pools
|
||||
|
||||
@@ -16,16 +16,16 @@ The following liquidity pools enable exchange between TFP and other currencies:
|
||||
### Fiat - TFP Pool
|
||||
- Users can purchase TFP with fiat currency (USD, EUR, etc.)
|
||||
- The exchange rate is fixed at 0.1 USD per TFP
|
||||
- Provides direct entry into the ThreeFold ecosystem for new users
|
||||
- Provides direct entry into the Mycelium ecosystem for new users
|
||||
|
||||
### TFP - TFT Pool
|
||||
- Allows exchange between TFP and ThreeFold Tokens (TFT)
|
||||
- Allows exchange between TFP and Mycelium Tokens (TFT)
|
||||
- Enables token holders to utilize the marketplace
|
||||
- Exchange rates will follow market dynamics
|
||||
|
||||
### TFP - PEAQ Pool
|
||||
- Facilitates exchange between TFP and PEAQ tokens
|
||||
- Connects the Peaq Network ecosystem with ThreeFold
|
||||
- Connects the Peaq Network ecosystem with Mycelium
|
||||
- Exchange rates will follow market dynamics
|
||||
|
||||
|
||||
|
@@ -7,7 +7,7 @@ fn main() {
|
||||
// Initialize logging
|
||||
env_logger::init();
|
||||
|
||||
println!("🧹 Project Mycelium Data Cleanup Utility");
|
||||
println!("🧹 Mycelium Marketplace Data Cleanup Utility");
|
||||
println!("==============================================");
|
||||
|
||||
// Manually clean up user1's duplicate nodes
|
||||
|
@@ -427,6 +427,28 @@ impl DashboardController {
|
||||
// Get resource provider nodes with updated slice calculations
|
||||
let resource_provider_nodes = resource_provider_service.get_resource_provider_nodes(&user_email);
|
||||
|
||||
// DEBUG: Log template data being prepared
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"dashboard:template_data_prep user={} nodes_loaded_count={}",
|
||||
user_email,
|
||||
resource_provider_nodes.len()
|
||||
);
|
||||
|
||||
// DEBUG: Log each node's slice data being sent to template
|
||||
for node in &resource_provider_nodes {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"dashboard:node_template_data user={} node_id={} grid_node_id={:?} total_base_slices={} allocated_base_slices={} available_combinations_count={}",
|
||||
user_email,
|
||||
node.id,
|
||||
node.grid_node_id,
|
||||
node.total_base_slices,
|
||||
node.allocated_base_slices,
|
||||
node.available_combinations.len()
|
||||
);
|
||||
}
|
||||
|
||||
// Calculate resource_provider statistics from nodes
|
||||
let total_nodes = resource_provider_nodes.len() as u32;
|
||||
let mut online_nodes = 0u32;
|
||||
@@ -734,7 +756,7 @@ impl DashboardController {
|
||||
if let Ok(Some(user_email)) = session.get::<String>("user_email") {
|
||||
ctx.insert("user_email", &user_email);
|
||||
if let Some(user_data) = crate::services::user_persistence::UserPersistence::load_user_data(&user_email) {
|
||||
ctx.insert("user_display_currency", &user_data.display_currency.unwrap_or_else(|| "USD".to_string()));
|
||||
ctx.insert("user_display_currency", &user_data.display_currency.unwrap_or_else(|| "MC".to_string()));
|
||||
ctx.insert("user_quick_topup_amounts", &user_data.quick_topup_amounts.unwrap_or_else(|| vec![
|
||||
rust_decimal_macros::dec!(10),
|
||||
rust_decimal_macros::dec!(25),
|
||||
@@ -743,7 +765,7 @@ impl DashboardController {
|
||||
]));
|
||||
} else {
|
||||
// Default values if no persistent data found
|
||||
ctx.insert("user_display_currency", &"USD".to_string());
|
||||
ctx.insert("user_display_currency", &"MC".to_string());
|
||||
ctx.insert("user_quick_topup_amounts", &vec![
|
||||
rust_decimal_macros::dec!(10),
|
||||
rust_decimal_macros::dec!(25),
|
||||
@@ -2524,6 +2546,17 @@ impl DashboardController {
|
||||
pricing_mode
|
||||
);
|
||||
|
||||
// DEBUG: Log which path will be taken
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_grid_nodes:path_decision req_id={} email={} slice_formats_count={} full_node_rental_enabled={} pricing_mode={}",
|
||||
req_id,
|
||||
user_email,
|
||||
slice_formats.len(),
|
||||
full_node_rental_enabled,
|
||||
pricing_mode
|
||||
);
|
||||
|
||||
let add_result = if !slice_formats.is_empty() || full_node_rental_enabled {
|
||||
// Create rental options if full node rental is enabled
|
||||
let rental_options = if full_node_rental_enabled {
|
||||
@@ -2561,6 +2594,13 @@ impl DashboardController {
|
||||
|
||||
// Choose the appropriate method based on pricing mode
|
||||
if pricing_mode == "individual" && individual_node_pricing.is_some() {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_grid_nodes:calling_individual_pricing req_id={} email={} node_count={}",
|
||||
req_id,
|
||||
user_email,
|
||||
node_ids.len()
|
||||
);
|
||||
resource_provider_service.add_multiple_grid_nodes_with_individual_pricing(
|
||||
&user_email,
|
||||
node_ids.clone(),
|
||||
@@ -2568,6 +2608,13 @@ impl DashboardController {
|
||||
individual_node_pricing.unwrap()
|
||||
).await
|
||||
} else {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_grid_nodes:calling_comprehensive_config req_id={} email={} node_count={}",
|
||||
req_id,
|
||||
user_email,
|
||||
node_ids.len()
|
||||
);
|
||||
resource_provider_service.add_multiple_grid_nodes_with_comprehensive_config(
|
||||
&user_email,
|
||||
node_ids.clone(),
|
||||
@@ -2576,6 +2623,13 @@ impl DashboardController {
|
||||
).await
|
||||
}
|
||||
} else {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_grid_nodes:calling_simple_add req_id={} email={} node_count={}",
|
||||
req_id,
|
||||
user_email,
|
||||
node_ids.len()
|
||||
);
|
||||
resource_provider_service.add_multiple_grid_nodes(&user_email, node_ids.clone()).await
|
||||
};
|
||||
|
||||
@@ -4471,7 +4525,7 @@ impl DashboardController {
|
||||
// Generate text agreement content
|
||||
let agreement_content = format!(
|
||||
"SERVICE PROVIDER AGREEMENT\n\n\
|
||||
ThreeFold Grid Service Provider Agreement\n\
|
||||
Mycelium Grid Service Provider Agreement\n\
|
||||
\n\
|
||||
Service Provider: {}\n\
|
||||
Agreement Date: January 15, 2025\n\
|
||||
@@ -4479,7 +4533,7 @@ impl DashboardController {
|
||||
Status: Active\n\
|
||||
\n\
|
||||
This agreement outlines the terms and conditions for providing services\n\
|
||||
on the ThreeFold Grid platform.\n\
|
||||
on the Mycelium Grid platform.\n\
|
||||
\n\
|
||||
Terms:\n\
|
||||
1. Service Quality Standards\n\
|
||||
@@ -6329,7 +6383,7 @@ impl DashboardController {
|
||||
}
|
||||
}
|
||||
|
||||
/// Sync resource_provider nodes with ThreeFold Grid
|
||||
/// Sync resource_provider nodes with Mycelium Grid
|
||||
pub async fn sync_with_grid(session: Session) -> Result<impl Responder> {
|
||||
// Check authentication
|
||||
if let Err(response) = Self::check_authentication(&session) {
|
||||
@@ -6339,7 +6393,7 @@ impl DashboardController {
|
||||
// Mock sync operation
|
||||
let sync_result = serde_json::json!({
|
||||
"success": true,
|
||||
"message": "Successfully synced with ThreeFold Grid",
|
||||
"message": "Successfully synced with Mycelium Grid",
|
||||
"nodes_updated": 3,
|
||||
"new_nodes_found": 1,
|
||||
"sync_timestamp": chrono::Utc::now().to_rfc3339()
|
||||
@@ -6803,7 +6857,7 @@ impl DashboardController {
|
||||
}
|
||||
}
|
||||
|
||||
/// API endpoint to sync with ThreeFold Grid
|
||||
/// API endpoint to sync with Mycelium Grid
|
||||
pub async fn sync_with_grid_api(session: Session) -> Result<impl Responder> {
|
||||
|
||||
let user_email = session.get::<String>("user_email")
|
||||
@@ -6834,13 +6888,13 @@ impl DashboardController {
|
||||
|
||||
Ok(ResponseBuilder::ok().json(serde_json::json!({
|
||||
"success": true,
|
||||
"message": format!("Successfully synced {} nodes with ThreeFold Grid", synced_nodes),
|
||||
"message": format!("Successfully synced {} nodes with Mycelium Grid", synced_nodes),
|
||||
"synced_nodes": synced_nodes
|
||||
})).build())
|
||||
}
|
||||
Err(e) => {
|
||||
Ok(ResponseBuilder::internal_error().json(serde_json::json!({
|
||||
"error": "Failed to sync with ThreeFold Grid",
|
||||
"error": "Failed to sync with Mycelium Grid",
|
||||
"details": e.to_string()
|
||||
})).build())
|
||||
}
|
||||
|
@@ -162,7 +162,7 @@ impl DocsController {
|
||||
render_template(&tmpl, "docs/services.html", &ctx)
|
||||
}
|
||||
|
||||
/// USD Credits documentation page
|
||||
/// Mycelium Credits documentation page
|
||||
pub async fn credits(tmpl: web::Data<Tera>, session: Session) -> Result<impl Responder> {
|
||||
let mut ctx = crate::models::builders::ContextBuilder::new()
|
||||
.active_page("docs")
|
||||
@@ -180,7 +180,7 @@ impl DocsController {
|
||||
}
|
||||
}
|
||||
|
||||
render_template(&tmpl, "docs/tfp.html", &ctx)
|
||||
render_template(&tmpl, "docs/credits.html", &ctx)
|
||||
}
|
||||
|
||||
/// Renders the slices documentation page
|
||||
|
@@ -180,9 +180,9 @@ impl WalletController {
|
||||
let (currency, effective_currency) = match currency_service.get_currency(&display_currency) {
|
||||
Some(c) => (c, display_currency.clone()),
|
||||
None => {
|
||||
let usd = currency_service.get_currency("USD").expect("USD currency must be available");
|
||||
display_currency = "USD".to_string();
|
||||
(usd, "USD".to_string())
|
||||
let mc = currency_service.get_currency("MC").expect("MC currency must be available");
|
||||
display_currency = "MC".to_string();
|
||||
(mc, "MC".to_string())
|
||||
}
|
||||
};
|
||||
|
||||
@@ -258,9 +258,9 @@ impl WalletController {
|
||||
let (currency, effective_currency) = match currency_service.get_currency(&display_currency) {
|
||||
Some(c) => (c, display_currency.clone()),
|
||||
None => {
|
||||
let usd = currency_service.get_currency("USD").expect("USD currency must be available");
|
||||
display_currency = "USD".to_string();
|
||||
(usd, "USD".to_string())
|
||||
let mc = currency_service.get_currency("MC").expect("MC currency must be available");
|
||||
display_currency = "MC".to_string();
|
||||
(mc, "MC".to_string())
|
||||
}
|
||||
};
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
//! Project Mycelium Library
|
||||
//! Mycelium Marketplace Library
|
||||
//!
|
||||
//! This library provides the core functionality for Project Mycelium,
|
||||
//! This library provides the core functionality for Mycelium Marketplace,
|
||||
//! including services, models, and controllers for managing a decentralized marketplace.
|
||||
|
||||
use actix_web::cookie::Key;
|
||||
|
@@ -886,7 +886,7 @@ impl CurrencyServiceBuilder {
|
||||
return Err("Base currency cannot be empty".to_string());
|
||||
}
|
||||
|
||||
let display_currency = self.display_currency.unwrap_or_else(|| "USD".to_string());
|
||||
let display_currency = self.display_currency.unwrap_or_else(|| "MC".to_string());
|
||||
|
||||
Ok(crate::services::currency::CurrencyService::new_with_display_config(
|
||||
cache_duration,
|
||||
@@ -1225,7 +1225,7 @@ impl SessionDataBuilder {
|
||||
name: self.name,
|
||||
country: self.country,
|
||||
timezone: self.timezone,
|
||||
display_currency: Some("USD".to_string()),
|
||||
display_currency: Some("MC".to_string()),
|
||||
quick_topup_amounts: Some(vec![dec!(10), dec!(25), dec!(50), dec!(100)]),
|
||||
..Default::default()
|
||||
}
|
||||
|
@@ -38,10 +38,10 @@ impl Default for MarketplaceConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
marketplace: MarketplaceInfo {
|
||||
name: "Project Mycelium".to_string(),
|
||||
name: "Mycelium Marketplace".to_string(),
|
||||
marketplace_type: "infrastructure".to_string(),
|
||||
base_currency: "USD".to_string(),
|
||||
default_display_currency: "USD".to_string(),
|
||||
base_currency: "MC".to_string(),
|
||||
default_display_currency: "MC".to_string(),
|
||||
supported_languages: vec!["en".to_string()],
|
||||
features: MarketplaceFeatures {
|
||||
reviews_enabled: false,
|
||||
|
@@ -18,11 +18,11 @@ impl CurrencyService {
|
||||
let mut service = Self {
|
||||
exchange_rates_cache: HashMap::default(),
|
||||
last_update: Utc::now(),
|
||||
default_display_currency: "USD".to_string(),
|
||||
default_display_currency: "MC".to_string(),
|
||||
};
|
||||
|
||||
// USD Credits is now the base currency - no conversion needed
|
||||
service.exchange_rates_cache.insert("USD".to_string(), dec!(1.0));
|
||||
// MC is now the base currency - no conversion needed
|
||||
service.exchange_rates_cache.insert("MC".to_string(), dec!(1.0));
|
||||
service.update_exchange_rates();
|
||||
service
|
||||
}
|
||||
@@ -36,7 +36,7 @@ impl CurrencyService {
|
||||
let mut service = Self {
|
||||
exchange_rates_cache: fallback_rates,
|
||||
last_update: Utc::now(),
|
||||
default_display_currency: "USD".to_string(),
|
||||
default_display_currency: "MC".to_string(),
|
||||
};
|
||||
|
||||
if auto_update {
|
||||
@@ -72,15 +72,27 @@ impl CurrencyService {
|
||||
|
||||
/// Get all supported currencies
|
||||
pub fn get_supported_currencies(&self) -> Vec<Currency> {
|
||||
// Return standard supported currencies without mock data
|
||||
// Return standard supported currencies with MC as base currency
|
||||
vec![
|
||||
Currency {
|
||||
code: "MC".to_string(),
|
||||
name: "Mycelium Credit".to_string(),
|
||||
symbol: "MC".to_string(),
|
||||
currency_type: crate::models::currency::CurrencyType::Custom("credits".to_string()),
|
||||
exchange_rate_to_base: dec!(1.0), // MC is the base currency
|
||||
is_base_currency: true,
|
||||
decimal_places: 2,
|
||||
is_active: true,
|
||||
provider_config: None,
|
||||
last_updated: chrono::Utc::now(),
|
||||
},
|
||||
Currency {
|
||||
code: "USD".to_string(),
|
||||
name: "US Dollar".to_string(),
|
||||
symbol: "$".to_string(),
|
||||
currency_type: crate::models::currency::CurrencyType::Fiat,
|
||||
exchange_rate_to_base: dec!(1.0),
|
||||
is_base_currency: true,
|
||||
exchange_rate_to_base: dec!(1.0), // 1 USD = 1 MC (parity for UX preservation)
|
||||
is_base_currency: false,
|
||||
decimal_places: 2,
|
||||
is_active: true,
|
||||
provider_config: None,
|
||||
@@ -91,19 +103,7 @@ impl CurrencyService {
|
||||
name: "Euro".to_string(),
|
||||
symbol: "€".to_string(),
|
||||
currency_type: crate::models::currency::CurrencyType::Fiat,
|
||||
exchange_rate_to_base: dec!(0.85),
|
||||
is_base_currency: false,
|
||||
decimal_places: 2,
|
||||
is_active: true,
|
||||
provider_config: None,
|
||||
last_updated: chrono::Utc::now(),
|
||||
},
|
||||
Currency {
|
||||
code: "MC".to_string(),
|
||||
name: "Mycelium Credit".to_string(),
|
||||
symbol: "MC".to_string(),
|
||||
currency_type: crate::models::currency::CurrencyType::Custom("credits".to_string()),
|
||||
exchange_rate_to_base: dec!(1.0), // 1 MC = 1 USD
|
||||
exchange_rate_to_base: dec!(0.85), // 1 EUR = 0.85 MC
|
||||
is_base_currency: false,
|
||||
decimal_places: 2,
|
||||
is_active: true,
|
||||
@@ -115,7 +115,7 @@ impl CurrencyService {
|
||||
name: "Canadian Dollar".to_string(),
|
||||
symbol: "C$".to_string(),
|
||||
currency_type: crate::models::currency::CurrencyType::Fiat,
|
||||
exchange_rate_to_base: dec!(1.35),
|
||||
exchange_rate_to_base: dec!(1.35), // 1 CAD = 1.35 MC
|
||||
is_base_currency: false,
|
||||
decimal_places: 2,
|
||||
is_active: true,
|
||||
@@ -124,16 +124,28 @@ impl CurrencyService {
|
||||
},
|
||||
Currency {
|
||||
code: "TFT".to_string(),
|
||||
name: "ThreeFold Token".to_string(),
|
||||
name: "Mycelium Token".to_string(),
|
||||
symbol: "TFT".to_string(),
|
||||
currency_type: crate::models::currency::CurrencyType::Token,
|
||||
exchange_rate_to_base: dec!(0.05),
|
||||
exchange_rate_to_base: dec!(0.05), // 1 TFT = 0.05 MC
|
||||
is_base_currency: false,
|
||||
decimal_places: 3,
|
||||
is_active: true,
|
||||
provider_config: None,
|
||||
last_updated: chrono::Utc::now(),
|
||||
},
|
||||
Currency {
|
||||
code: "AED".to_string(),
|
||||
name: "UAE Dirham".to_string(),
|
||||
symbol: "د.إ".to_string(),
|
||||
currency_type: crate::models::currency::CurrencyType::Fiat,
|
||||
exchange_rate_to_base: dec!(3.67), // 1 AED = 3.67 MC
|
||||
is_base_currency: false,
|
||||
decimal_places: 2,
|
||||
is_active: true,
|
||||
provider_config: None,
|
||||
last_updated: chrono::Utc::now(),
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
@@ -147,10 +159,10 @@ impl CurrencyService {
|
||||
/// Get base currency
|
||||
pub fn get_base_currency(&self) -> Currency {
|
||||
Currency {
|
||||
code: "USD".to_string(),
|
||||
name: "US Dollar".to_string(),
|
||||
symbol: "$".to_string(),
|
||||
currency_type: crate::models::currency::CurrencyType::Fiat,
|
||||
code: "MC".to_string(),
|
||||
name: "Mycelium Credit".to_string(),
|
||||
symbol: "MC".to_string(),
|
||||
currency_type: crate::models::currency::CurrencyType::Custom("credits".to_string()),
|
||||
exchange_rate_to_base: dec!(1.0),
|
||||
is_base_currency: true,
|
||||
decimal_places: 2,
|
||||
@@ -171,7 +183,7 @@ impl CurrencyService {
|
||||
return Ok(amount);
|
||||
}
|
||||
|
||||
let base_currency_code = "USD"; // Use USD as base currency
|
||||
let base_currency_code = "MC"; // Use MC as base currency
|
||||
|
||||
// Convert to base currency first if needed
|
||||
let base_amount = if from_currency == base_currency_code {
|
||||
@@ -192,7 +204,7 @@ impl CurrencyService {
|
||||
|
||||
/// Get exchange rate from base currency to target currency
|
||||
pub fn get_exchange_rate_to_base(&self, currency_code: &str) -> Result<Decimal, String> {
|
||||
let base_currency_code = "USD"; // Use USD as base currency
|
||||
let base_currency_code = "MC"; // Use MC as base currency
|
||||
|
||||
if currency_code == base_currency_code {
|
||||
return Ok(dec!(1.0));
|
||||
@@ -288,7 +300,7 @@ impl CurrencyService {
|
||||
if !self.default_display_currency.is_empty() {
|
||||
self.default_display_currency.clone()
|
||||
} else {
|
||||
"USD".to_string() // Default to USD when no preference is set
|
||||
"MC".to_string() // Default to MC when no preference is set
|
||||
}
|
||||
}
|
||||
|
||||
@@ -323,7 +335,7 @@ impl CurrencyService {
|
||||
/// Get all exchange rates relative to base currency
|
||||
pub fn get_all_exchange_rates(&self) -> HashMap<String, Decimal> {
|
||||
let mut rates = HashMap::default();
|
||||
let base_currency_code = "USD".to_string(); // Use USD as base currency
|
||||
let base_currency_code = "MC".to_string(); // Use MC as base currency
|
||||
|
||||
// Base currency always has rate 1.0
|
||||
rates.insert(base_currency_code.clone(), dec!(1.0));
|
||||
@@ -358,7 +370,7 @@ impl CurrencyService {
|
||||
serde_json::Value::Number(serde_json::Number::from(self.get_supported_currencies().len())));
|
||||
|
||||
stats.insert("base_currency".to_string(),
|
||||
serde_json::Value::String("USD".to_string()));
|
||||
serde_json::Value::String("MC".to_string()));
|
||||
|
||||
stats.insert("last_update".to_string(),
|
||||
serde_json::Value::String(self.last_update.to_rfc3339()));
|
||||
|
@@ -7,7 +7,7 @@ use crate::services::{
|
||||
/// Service factory for single source of truth service instantiation
|
||||
///
|
||||
/// This factory consolidates repeated service instantiations throughout
|
||||
/// the Project Mycelium codebase, focusing on persistent data access
|
||||
/// the Mycelium Marketplace codebase, focusing on persistent data access
|
||||
/// and eliminating mock data usage in favor of user_data/ directory.
|
||||
///
|
||||
/// Usage:
|
||||
|
@@ -1,4 +1,4 @@
|
||||
//! Grid service for ThreeFold Grid integration
|
||||
//! Grid service for Mycelium Grid integration
|
||||
//! Handles fetching node data from gridproxy API
|
||||
|
||||
use crate::models::user::{GridNodeData, NodeCapacity};
|
||||
@@ -44,7 +44,7 @@ pub struct GridProxyResources {
|
||||
pub hru: u64, // HDD storage in bytes
|
||||
}
|
||||
|
||||
/// Service for ThreeFold Grid operations
|
||||
/// Service for Mycelium Grid operations
|
||||
#[derive(Clone)]
|
||||
pub struct GridService {
|
||||
gridproxy_url: String,
|
||||
@@ -86,7 +86,7 @@ impl GridService {
|
||||
GridServiceBuilder::new()
|
||||
}
|
||||
|
||||
/// Fetch node data from ThreeFold Grid
|
||||
/// Fetch node data from Mycelium Grid
|
||||
pub async fn fetch_node_data(&self, node_id: u32) -> Result<GridNodeData, String> {
|
||||
// Try to fetch from real API first, fall back to mock data
|
||||
match self.fetch_real_node_data(node_id).await {
|
||||
|
@@ -325,7 +325,7 @@ impl InstantPurchaseService {
|
||||
let mut persistent_data = UserPersistence::load_user_data(&user_email)
|
||||
.unwrap_or_else(|| crate::services::user_persistence::UserPersistentData {
|
||||
user_email: user_email.clone(),
|
||||
display_currency: Some("USD".to_string()),
|
||||
display_currency: Some("MC".to_string()),
|
||||
quick_topup_amounts: Some(vec![dec!(10), dec!(25), dec!(50), dec!(100)]),
|
||||
..Default::default()
|
||||
});
|
||||
|
@@ -79,16 +79,16 @@ impl NavbarService {
|
||||
// Get user's preferred display currency
|
||||
let mut display_currency = self.currency_service.get_user_preferred_currency(session);
|
||||
|
||||
// Get currency info for formatting; fall back to USD if invalid
|
||||
// Get currency info for formatting; fall back to MC if invalid
|
||||
let (currency, effective_currency) = match self.currency_service.get_currency(&display_currency) {
|
||||
Some(c) => (c, display_currency.clone()),
|
||||
None => {
|
||||
let usd = self
|
||||
let mc = self
|
||||
.currency_service
|
||||
.get_currency("USD")
|
||||
.expect("USD currency must be available");
|
||||
display_currency = "USD".to_string();
|
||||
(usd, "USD".to_string())
|
||||
.get_currency("MC")
|
||||
.expect("MC currency must be available");
|
||||
display_currency = "MC".to_string();
|
||||
(mc, "MC".to_string())
|
||||
}
|
||||
};
|
||||
|
||||
@@ -150,8 +150,8 @@ impl NavbarService {
|
||||
user_email: String::new(),
|
||||
wallet_balance: Decimal::ZERO,
|
||||
wallet_balance_formatted: "Not logged in".to_string(),
|
||||
display_currency: "USD".to_string(),
|
||||
currency_symbol: "$".to_string(),
|
||||
display_currency: "MC".to_string(),
|
||||
currency_symbol: "⚡".to_string(),
|
||||
quick_actions: vec![
|
||||
QuickAction {
|
||||
id: "login".to_string(),
|
||||
|
@@ -98,15 +98,42 @@ impl ResourceProviderService {
|
||||
|
||||
/// Get all nodes for a resource_provider
|
||||
pub fn get_resource_provider_nodes(&self, user_email: &str) -> Vec<FarmNode> {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"get_resource_provider_nodes:start user={}",
|
||||
user_email
|
||||
);
|
||||
|
||||
if let Some(data) = UserPersistence::load_user_data(user_email) {
|
||||
// Debug: Log marketplace SLA data for all nodes
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"get_resource_provider_nodes:loaded_data user={} nodes_count={}",
|
||||
user_email,
|
||||
data.nodes.len()
|
||||
);
|
||||
|
||||
// DEBUG: Log slice data for each node to verify what's stored
|
||||
for node in &data.nodes {
|
||||
if let Some(ref sla) = node.marketplace_sla {
|
||||
} else {
|
||||
}
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"get_resource_provider_nodes:node_data user={} node_id={} grid_node_id={:?} total_base_slices={} allocated_base_slices={} available_combinations_count={} slice_last_calculated={:?}",
|
||||
user_email,
|
||||
node.id,
|
||||
node.grid_node_id,
|
||||
node.total_base_slices,
|
||||
node.allocated_base_slices,
|
||||
node.available_combinations.len(),
|
||||
node.slice_last_calculated
|
||||
);
|
||||
}
|
||||
|
||||
data.nodes
|
||||
} else {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"get_resource_provider_nodes:no_data user={} returning_empty",
|
||||
user_email
|
||||
);
|
||||
Vec::new()
|
||||
}
|
||||
}
|
||||
@@ -238,7 +265,7 @@ impl ResourceProviderService {
|
||||
Ok(node)
|
||||
}
|
||||
|
||||
/// Add a new node from ThreeFold Grid (automatic creation with real data)
|
||||
/// Add a new node from Mycelium Grid (automatic creation with real data)
|
||||
pub async fn add_node_from_grid(&self, user_email: &str, grid_node_id: u32) -> Result<FarmNode, String> {
|
||||
// Load existing data and check for duplicates more thoroughly
|
||||
let mut persistent_data = UserPersistence::load_user_data(user_email)
|
||||
@@ -1285,7 +1312,7 @@ impl ResourceProviderService {
|
||||
// GRID NODE MANAGEMENT
|
||||
// =============================================================================
|
||||
|
||||
/// Add a node from ThreeFold Grid by node ID
|
||||
/// Add a node from Mycelium Grid by node ID
|
||||
pub async fn add_grid_node(&self, user_email: &str, grid_node_id: u32, _slice_format: Option<String>, _slice_price: Option<Decimal>) -> Result<FarmNode, String> {
|
||||
// Check for duplicate grid node IDs first
|
||||
let existing_nodes = self.get_resource_provider_nodes(user_email);
|
||||
@@ -1295,31 +1322,89 @@ impl ResourceProviderService {
|
||||
|
||||
// Validate node exists on grid
|
||||
if !self.grid_service.validate_node_exists(grid_node_id).await? {
|
||||
return Err(format!("Node {} does not exist on ThreeFold Grid", grid_node_id));
|
||||
return Err(format!("Node {} does not exist on Mycelium Grid", grid_node_id));
|
||||
}
|
||||
|
||||
// Fetch node data from grid
|
||||
let grid_data = self.grid_service.fetch_node_data(grid_node_id).await?;
|
||||
|
||||
// Create FarmNode from grid data
|
||||
let node = FarmNodeBuilder::new()
|
||||
.id(format!("grid_node_{}", grid_node_id))
|
||||
.name(format!("Grid Node {}", grid_node_id))
|
||||
.location(format!("{}, {}",
|
||||
if grid_data.city.is_empty() { "Unknown City" } else { &grid_data.city },
|
||||
if grid_data.country.is_empty() { "Unknown Country" } else { &grid_data.country }
|
||||
))
|
||||
.status(NodeStatus::Online)
|
||||
.capacity(grid_data.total_resources.clone())
|
||||
.used_capacity(grid_data.used_resources.clone())
|
||||
.uptime_percentage(99.0) // Default uptime
|
||||
.earnings_today_usd(Decimal::ZERO)
|
||||
.health_score(100.0)
|
||||
.region(if grid_data.country.is_empty() { "Unknown".to_string() } else { grid_data.country.clone() })
|
||||
.node_type("MyceliumNode".to_string())
|
||||
.grid_node_id(grid_node_id)
|
||||
.grid_data(grid_data)
|
||||
.build()?;
|
||||
// FIX: Calculate slice data using the slice calculator
|
||||
let total_base_slices = self.slice_calculator.calculate_max_base_slices(&grid_data.total_resources);
|
||||
|
||||
// Generate unique node ID for SLA
|
||||
let node_id = format!("grid_node_{}", grid_node_id);
|
||||
let node_id_for_sla = node_id.clone();
|
||||
|
||||
// Create FarmNode from grid data with proper slice calculations
|
||||
let mut node = FarmNode {
|
||||
id: node_id,
|
||||
name: if grid_data.farm_name.is_empty() { format!("Grid Node {}", grid_node_id) } else { grid_data.farm_name.clone() },
|
||||
location: {
|
||||
let city = if grid_data.city.is_empty() { "Unknown" } else { &grid_data.city };
|
||||
let country = if grid_data.country.is_empty() { "Unknown" } else { &grid_data.country };
|
||||
if city == "Unknown" {
|
||||
country.to_string()
|
||||
} else {
|
||||
format!("{}, {}", city, country)
|
||||
}
|
||||
},
|
||||
status: NodeStatus::Online, // Assume online if we can fetch from grid
|
||||
capacity: grid_data.total_resources.clone(),
|
||||
used_capacity: grid_data.used_resources.clone(),
|
||||
uptime_percentage: 99.8, // Clean uptime value for grid nodes
|
||||
farming_start_date: Utc::now() - chrono::Duration::days(30), // Default farming start
|
||||
last_updated: grid_data.last_updated,
|
||||
last_seen: Some(Utc::now()),
|
||||
health_score: 98.5,
|
||||
utilization_7_day_avg: 65.0, // Default utilization
|
||||
slice_formats_supported: vec!["1x1".to_string(), "2x2".to_string(), "4x4".to_string()],
|
||||
rental_options: None,
|
||||
earnings_today_usd: Decimal::ZERO,
|
||||
region: if grid_data.country.is_empty() { "Unknown".to_string() } else { grid_data.country.clone() },
|
||||
node_type: "MyceliumNode".to_string(),
|
||||
slice_formats: None, // Not used in new slice system
|
||||
staking_options: None,
|
||||
availability_status: crate::models::user::NodeAvailabilityStatus::Available,
|
||||
grid_node_id: Some(grid_node_id.to_string()),
|
||||
grid_data: Some(serde_json::to_value(&grid_data).unwrap_or_default()),
|
||||
node_group_id: None,
|
||||
group_assignment_date: None,
|
||||
group_slice_format: None,
|
||||
group_slice_price: None,
|
||||
|
||||
// FIX: Marketplace SLA field with clean uptime value
|
||||
marketplace_sla: Some(MarketplaceSLA {
|
||||
id: format!("sla-{}", node_id_for_sla),
|
||||
name: "Standard Marketplace SLA".to_string(),
|
||||
uptime_guarantee: 99.8,
|
||||
response_time_hours: 24,
|
||||
resolution_time_hours: 48,
|
||||
penalty_rate: 0.01,
|
||||
uptime_guarantee_percentage: 99.8,
|
||||
bandwidth_guarantee_mbps: grid_data.total_resources.bandwidth_mbps as f32,
|
||||
base_slice_price: SlicePricing::default().base_price_per_hour,
|
||||
last_updated: Utc::now(),
|
||||
}),
|
||||
|
||||
// FIX: Automatic slice management fields
|
||||
total_base_slices: total_base_slices as i32,
|
||||
allocated_base_slices: 0,
|
||||
slice_allocations: Vec::new(),
|
||||
available_combinations: Vec::new(), // Will be calculated below
|
||||
slice_pricing: Some(serde_json::to_value(&SlicePricing::default()).unwrap_or_default()),
|
||||
slice_last_calculated: Some(Utc::now()),
|
||||
};
|
||||
|
||||
// FIX: Generate initial slice combinations
|
||||
let combinations = self.slice_calculator.generate_slice_combinations(
|
||||
node.total_base_slices as u32,
|
||||
node.allocated_base_slices as u32,
|
||||
&node,
|
||||
user_email
|
||||
);
|
||||
node.available_combinations = combinations.iter()
|
||||
.map(|c| serde_json::to_value(c).unwrap_or_default())
|
||||
.collect();
|
||||
|
||||
// Save to persistent storage
|
||||
let mut persistent_data = crate::models::builders::SessionDataBuilder::load_or_create(user_email);
|
||||
@@ -1332,10 +1417,25 @@ impl ResourceProviderService {
|
||||
|
||||
/// Add multiple grid nodes at once
|
||||
pub async fn add_multiple_grid_nodes(&self, user_email: &str, grid_node_ids: Vec<u32>) -> Result<Vec<FarmNode>, String> {
|
||||
// DEBUG: Log entry point
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_multiple_grid_nodes:start user={} node_ids={:?}",
|
||||
user_email,
|
||||
grid_node_ids
|
||||
);
|
||||
|
||||
// Batch approach: load once, add all nodes, save once
|
||||
let mut added_nodes: Vec<FarmNode> = Vec::new();
|
||||
let mut persistent_data = crate::models::builders::SessionDataBuilder::load_or_create(user_email);
|
||||
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_multiple_grid_nodes:loaded_existing user={} existing_node_count={}",
|
||||
user_email,
|
||||
persistent_data.nodes.len()
|
||||
);
|
||||
|
||||
for grid_node_id in grid_node_ids {
|
||||
let node_id = format!("grid_node_{}", grid_node_id);
|
||||
|
||||
@@ -1352,38 +1452,180 @@ impl ResourceProviderService {
|
||||
|
||||
// Validate and fetch grid data
|
||||
if !self.grid_service.validate_node_exists(grid_node_id).await.map_err(|e| e.to_string())? {
|
||||
return Err(format!("Node {} does not exist on ThreeFold Grid", grid_node_id));
|
||||
return Err(format!("Node {} does not exist on Mycelium Grid", grid_node_id));
|
||||
}
|
||||
let grid_data = self.grid_service.fetch_node_data(grid_node_id).await.map_err(|e| e.to_string())?;
|
||||
|
||||
// Build node
|
||||
let node = FarmNodeBuilder::new()
|
||||
.id(node_id)
|
||||
.name(format!("Grid Node {}", grid_node_id))
|
||||
.location(format!("{}, {}",
|
||||
if grid_data.city.is_empty() { "Unknown City" } else { &grid_data.city },
|
||||
if grid_data.country.is_empty() { "Unknown Country" } else { &grid_data.country }
|
||||
))
|
||||
.status(NodeStatus::Online)
|
||||
.capacity(grid_data.total_resources.clone())
|
||||
.used_capacity(grid_data.used_resources.clone())
|
||||
.uptime_percentage(99.0)
|
||||
.earnings_today_usd(Decimal::ZERO)
|
||||
.health_score(100.0)
|
||||
.region(if grid_data.country.is_empty() { "Unknown".to_string() } else { grid_data.country.clone() })
|
||||
.node_type("MyceliumNode".to_string())
|
||||
.grid_node_id(grid_node_id)
|
||||
.grid_data(grid_data)
|
||||
.build()
|
||||
.map_err(|e| e.to_string())?;
|
||||
// FIX: Calculate slice data using the slice calculator (same as add_node_from_grid)
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_multiple_grid_nodes:calculating_slices user={} grid_node_id={} resources={:?}",
|
||||
user_email,
|
||||
grid_node_id,
|
||||
grid_data.total_resources
|
||||
);
|
||||
|
||||
let total_base_slices = self.slice_calculator.calculate_max_base_slices(&grid_data.total_resources);
|
||||
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_multiple_grid_nodes:calculated_slices user={} grid_node_id={} total_base_slices={}",
|
||||
user_email,
|
||||
grid_node_id,
|
||||
total_base_slices
|
||||
);
|
||||
|
||||
// Generate unique node ID for SLA
|
||||
let node_id_for_sla = node_id.clone();
|
||||
|
||||
// Build node with proper slice calculations
|
||||
let mut node = FarmNode {
|
||||
id: node_id,
|
||||
name: if grid_data.farm_name.is_empty() { format!("Grid Node {}", grid_node_id) } else { grid_data.farm_name.clone() },
|
||||
location: {
|
||||
let city = if grid_data.city.is_empty() { "Unknown" } else { &grid_data.city };
|
||||
let country = if grid_data.country.is_empty() { "Unknown" } else { &grid_data.country };
|
||||
if city == "Unknown" {
|
||||
country.to_string()
|
||||
} else {
|
||||
format!("{}, {}", city, country)
|
||||
}
|
||||
},
|
||||
status: NodeStatus::Online, // Assume online if we can fetch from grid
|
||||
capacity: grid_data.total_resources.clone(),
|
||||
used_capacity: grid_data.used_resources.clone(),
|
||||
uptime_percentage: 99.8, // Clean uptime value for grid nodes
|
||||
farming_start_date: Utc::now() - chrono::Duration::days(30), // Default farming start
|
||||
last_updated: grid_data.last_updated,
|
||||
last_seen: Some(Utc::now()),
|
||||
health_score: 98.5,
|
||||
utilization_7_day_avg: 65.0, // Default utilization
|
||||
slice_formats_supported: vec!["1x1".to_string(), "2x2".to_string(), "4x4".to_string()],
|
||||
rental_options: None,
|
||||
earnings_today_usd: Decimal::ZERO,
|
||||
region: if grid_data.country.is_empty() { "Unknown".to_string() } else { grid_data.country.clone() },
|
||||
node_type: "MyceliumNode".to_string(),
|
||||
slice_formats: None, // Not used in new slice system
|
||||
staking_options: None,
|
||||
availability_status: crate::models::user::NodeAvailabilityStatus::Available,
|
||||
grid_node_id: Some(grid_node_id.to_string()),
|
||||
grid_data: Some(serde_json::to_value(&grid_data).unwrap_or_default()),
|
||||
node_group_id: None,
|
||||
group_assignment_date: None,
|
||||
group_slice_format: None,
|
||||
group_slice_price: None,
|
||||
|
||||
// FIX: Marketplace SLA field with clean uptime value
|
||||
marketplace_sla: Some(MarketplaceSLA {
|
||||
id: format!("sla-{}", node_id_for_sla),
|
||||
name: "Standard Marketplace SLA".to_string(),
|
||||
uptime_guarantee: 99.8,
|
||||
response_time_hours: 24,
|
||||
resolution_time_hours: 48,
|
||||
penalty_rate: 0.01,
|
||||
uptime_guarantee_percentage: 99.8,
|
||||
bandwidth_guarantee_mbps: grid_data.total_resources.bandwidth_mbps as f32,
|
||||
base_slice_price: SlicePricing::default().base_price_per_hour,
|
||||
last_updated: Utc::now(),
|
||||
}),
|
||||
|
||||
// FIX: Automatic slice management fields
|
||||
total_base_slices: total_base_slices as i32,
|
||||
allocated_base_slices: 0,
|
||||
slice_allocations: Vec::new(),
|
||||
available_combinations: Vec::new(), // Will be calculated below
|
||||
slice_pricing: Some(serde_json::to_value(&SlicePricing::default()).unwrap_or_default()),
|
||||
slice_last_calculated: Some(Utc::now()),
|
||||
};
|
||||
|
||||
// FIX: Generate initial slice combinations
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_multiple_grid_nodes:generating_combinations user={} grid_node_id={} total_base_slices={} allocated_base_slices={}",
|
||||
user_email,
|
||||
grid_node_id,
|
||||
node.total_base_slices,
|
||||
node.allocated_base_slices
|
||||
);
|
||||
|
||||
let combinations = self.slice_calculator.generate_slice_combinations(
|
||||
node.total_base_slices as u32,
|
||||
node.allocated_base_slices as u32,
|
||||
&node,
|
||||
user_email
|
||||
);
|
||||
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_multiple_grid_nodes:generated_combinations user={} grid_node_id={} combinations_count={}",
|
||||
user_email,
|
||||
grid_node_id,
|
||||
combinations.len()
|
||||
);
|
||||
|
||||
node.available_combinations = combinations.iter()
|
||||
.map(|c| serde_json::to_value(c).unwrap_or_default())
|
||||
.collect();
|
||||
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_multiple_grid_nodes:node_created user={} node_id={} grid_node_id={} total_slices={} available_combinations={}",
|
||||
user_email,
|
||||
node.id,
|
||||
grid_node_id,
|
||||
node.total_base_slices,
|
||||
node.available_combinations.len()
|
||||
);
|
||||
|
||||
persistent_data.nodes.push(node.clone());
|
||||
added_nodes.push(node);
|
||||
}
|
||||
|
||||
if !added_nodes.is_empty() {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_multiple_grid_nodes:saving_data user={} total_nodes_to_save={} added_nodes_count={}",
|
||||
user_email,
|
||||
persistent_data.nodes.len(),
|
||||
added_nodes.len()
|
||||
);
|
||||
|
||||
UserPersistence::save_user_data(&persistent_data).map_err(|e| e.to_string())?;
|
||||
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_multiple_grid_nodes:data_saved user={} added_nodes_count={}",
|
||||
user_email,
|
||||
added_nodes.len()
|
||||
);
|
||||
|
||||
// DEBUG: Log final node data to verify what was actually saved
|
||||
for node in &added_nodes {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_multiple_grid_nodes:final_node_data user={} node_id={} grid_node_id={:?} total_base_slices={} slice_last_calculated={:?}",
|
||||
user_email,
|
||||
node.id,
|
||||
node.grid_node_id,
|
||||
node.total_base_slices,
|
||||
node.slice_last_calculated
|
||||
);
|
||||
}
|
||||
} else {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_multiple_grid_nodes:no_nodes_added user={} (all were duplicates or failed)",
|
||||
user_email
|
||||
);
|
||||
}
|
||||
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"add_multiple_grid_nodes:complete user={} result_count={}",
|
||||
user_email,
|
||||
added_nodes.len()
|
||||
);
|
||||
|
||||
Ok(added_nodes)
|
||||
}
|
||||
|
||||
@@ -1472,6 +1714,50 @@ impl ResourceProviderService {
|
||||
// Apply slice formats if provided
|
||||
if !slice_formats.is_empty() { node.slice_formats = Some(slice_formats.clone()); }
|
||||
|
||||
// FIX: Calculate and set slice data
|
||||
let total_base_slices = self.slice_calculator.calculate_max_base_slices(&node.capacity);
|
||||
node.total_base_slices = total_base_slices as i32;
|
||||
node.allocated_base_slices = 0;
|
||||
node.slice_allocations = Vec::new();
|
||||
|
||||
// Generate slice combinations
|
||||
let combinations = self.slice_calculator.generate_slice_combinations(
|
||||
total_base_slices,
|
||||
0, // No allocated slices yet
|
||||
&node,
|
||||
user_email
|
||||
);
|
||||
node.available_combinations = combinations.iter()
|
||||
.map(|c| serde_json::to_value(c).unwrap_or_default())
|
||||
.collect();
|
||||
node.slice_last_calculated = Some(Utc::now());
|
||||
|
||||
// Set marketplace SLA if not already set
|
||||
if node.marketplace_sla.is_none() {
|
||||
node.marketplace_sla = Some(MarketplaceSLA {
|
||||
id: format!("sla-{}", node.id),
|
||||
name: "Standard Marketplace SLA".to_string(),
|
||||
uptime_guarantee: 99.8,
|
||||
response_time_hours: 24,
|
||||
resolution_time_hours: 48,
|
||||
penalty_rate: 0.01,
|
||||
uptime_guarantee_percentage: 99.8,
|
||||
bandwidth_guarantee_mbps: node.capacity.bandwidth_mbps as f32,
|
||||
base_slice_price: SlicePricing::default().base_price_per_hour,
|
||||
last_updated: Utc::now(),
|
||||
});
|
||||
}
|
||||
|
||||
// Set default slice pricing if not already set
|
||||
if node.slice_pricing.is_none() {
|
||||
let default_pricing = SlicePricing {
|
||||
base_price_per_hour: rust_decimal::Decimal::try_from(0.50).unwrap_or_default(),
|
||||
currency: "USD".to_string(),
|
||||
pricing_multiplier: rust_decimal::Decimal::from(1),
|
||||
};
|
||||
node.slice_pricing = Some(serde_json::to_value(&default_pricing).unwrap_or_default());
|
||||
}
|
||||
|
||||
persistent_data.nodes.push(node.clone());
|
||||
added_nodes.push(node);
|
||||
}
|
||||
@@ -1554,6 +1840,34 @@ impl ResourceProviderService {
|
||||
node.slice_formats = Some(slice_formats.clone());
|
||||
}
|
||||
|
||||
// SLICE CALCULATION FIX: Calculate and set slice data
|
||||
let total_base_slices = self.slice_calculator.calculate_max_base_slices(&node.capacity);
|
||||
node.total_base_slices = total_base_slices as i32;
|
||||
node.allocated_base_slices = 0;
|
||||
node.slice_allocations = Vec::new();
|
||||
|
||||
// Generate slice combinations
|
||||
let combinations = self.slice_calculator.generate_slice_combinations(
|
||||
total_base_slices,
|
||||
0, // No allocated slices yet
|
||||
&node,
|
||||
user_email
|
||||
);
|
||||
node.available_combinations = combinations.iter()
|
||||
.map(|c| serde_json::to_value(c).unwrap_or_default())
|
||||
.collect();
|
||||
node.slice_last_calculated = Some(Utc::now());
|
||||
|
||||
// Set default slice pricing if not already set
|
||||
if node.slice_pricing.is_none() {
|
||||
let default_pricing = crate::services::slice_calculator::SlicePricing {
|
||||
base_price_per_hour: rust_decimal::Decimal::try_from(0.50).unwrap_or_default(),
|
||||
currency: "USD".to_string(),
|
||||
pricing_multiplier: rust_decimal::Decimal::from(1),
|
||||
};
|
||||
node.slice_pricing = Some(serde_json::to_value(&default_pricing).unwrap_or_default());
|
||||
}
|
||||
|
||||
// Push to in-memory and batch list
|
||||
persistent_data.nodes.push(node.clone());
|
||||
added_nodes.push(node);
|
||||
@@ -1654,6 +1968,34 @@ impl ResourceProviderService {
|
||||
node.slice_formats = Some(slice_formats.clone());
|
||||
}
|
||||
|
||||
// SLICE CALCULATION FIX: Calculate and set slice data for individual pricing method
|
||||
let total_base_slices = self.slice_calculator.calculate_max_base_slices(&node.capacity);
|
||||
node.total_base_slices = total_base_slices as i32;
|
||||
node.allocated_base_slices = 0;
|
||||
node.slice_allocations = Vec::new();
|
||||
|
||||
// Generate slice combinations
|
||||
let combinations = self.slice_calculator.generate_slice_combinations(
|
||||
total_base_slices,
|
||||
0, // No allocated slices yet
|
||||
&node,
|
||||
user_email
|
||||
);
|
||||
node.available_combinations = combinations.iter()
|
||||
.map(|c| serde_json::to_value(c).unwrap_or_default())
|
||||
.collect();
|
||||
node.slice_last_calculated = Some(Utc::now());
|
||||
|
||||
// Set default slice pricing if not already set
|
||||
if node.slice_pricing.is_none() {
|
||||
let default_pricing = crate::services::slice_calculator::SlicePricing {
|
||||
base_price_per_hour: rust_decimal::Decimal::try_from(0.50).unwrap_or_default(),
|
||||
currency: "USD".to_string(),
|
||||
pricing_multiplier: rust_decimal::Decimal::from(1),
|
||||
};
|
||||
node.slice_pricing = Some(serde_json::to_value(&default_pricing).unwrap_or_default());
|
||||
}
|
||||
|
||||
persistent_data.nodes.push(node.clone());
|
||||
added_nodes.push(node);
|
||||
}
|
||||
@@ -1721,6 +2063,50 @@ impl ResourceProviderService {
|
||||
node.slice_formats = Some(slice_formats);
|
||||
}
|
||||
|
||||
// FIX: Calculate and set slice data
|
||||
let total_base_slices = self.slice_calculator.calculate_max_base_slices(&node.capacity);
|
||||
node.total_base_slices = total_base_slices as i32;
|
||||
node.allocated_base_slices = 0;
|
||||
node.slice_allocations = Vec::new();
|
||||
|
||||
// Generate slice combinations
|
||||
let combinations = self.slice_calculator.generate_slice_combinations(
|
||||
total_base_slices,
|
||||
0, // No allocated slices yet
|
||||
&node,
|
||||
user_email
|
||||
);
|
||||
node.available_combinations = combinations.iter()
|
||||
.map(|c| serde_json::to_value(c).unwrap_or_default())
|
||||
.collect();
|
||||
node.slice_last_calculated = Some(Utc::now());
|
||||
|
||||
// Set marketplace SLA if not already set
|
||||
if node.marketplace_sla.is_none() {
|
||||
node.marketplace_sla = Some(MarketplaceSLA {
|
||||
id: format!("sla-{}", node.id),
|
||||
name: "Standard Marketplace SLA".to_string(),
|
||||
uptime_guarantee: 99.8,
|
||||
response_time_hours: 24,
|
||||
resolution_time_hours: 48,
|
||||
penalty_rate: 0.01,
|
||||
uptime_guarantee_percentage: 99.8,
|
||||
bandwidth_guarantee_mbps: node.capacity.bandwidth_mbps as f32,
|
||||
base_slice_price: SlicePricing::default().base_price_per_hour,
|
||||
last_updated: Utc::now(),
|
||||
});
|
||||
}
|
||||
|
||||
// Set default slice pricing if not already set
|
||||
if node.slice_pricing.is_none() {
|
||||
let default_pricing = SlicePricing {
|
||||
base_price_per_hour: rust_decimal::Decimal::try_from(0.50).unwrap_or_default(),
|
||||
currency: "USD".to_string(),
|
||||
pricing_multiplier: rust_decimal::Decimal::from(1),
|
||||
};
|
||||
node.slice_pricing = Some(serde_json::to_value(&default_pricing).unwrap_or_default());
|
||||
}
|
||||
|
||||
// Add node to user's data
|
||||
let mut persistent_data = crate::models::builders::SessionDataBuilder::load_or_create(user_email);
|
||||
|
||||
@@ -1767,16 +2153,8 @@ impl ResourceProviderService {
|
||||
None
|
||||
};
|
||||
|
||||
// Create the node
|
||||
let node = FarmNode {
|
||||
id: format!("grid_node_{}", grid_node_id),
|
||||
name: format!("Grid Node {}", grid_node_id),
|
||||
location: format!("{}, {}",
|
||||
if grid_data.city.is_empty() { "Unknown" } else { &grid_data.city },
|
||||
if grid_data.country.is_empty() { "Unknown" } else { &grid_data.country }
|
||||
),
|
||||
status: crate::models::user::NodeStatus::Online,
|
||||
capacity: crate::models::user::NodeCapacity {
|
||||
// FIX: Calculate slice data using the slice calculator
|
||||
let node_capacity = crate::models::user::NodeCapacity {
|
||||
cpu_cores: grid_data.total_resources.cpu_cores,
|
||||
memory_gb: grid_data.total_resources.memory_gb,
|
||||
storage_gb: grid_data.total_resources.storage_gb,
|
||||
@@ -1784,24 +2162,44 @@ impl ResourceProviderService {
|
||||
ssd_storage_gb: grid_data.total_resources.ssd_storage_gb,
|
||||
hdd_storage_gb: grid_data.total_resources.hdd_storage_gb,
|
||||
ram_gb: grid_data.total_resources.ram_gb,
|
||||
};
|
||||
|
||||
let total_base_slices = self.slice_calculator.calculate_max_base_slices(&node_capacity);
|
||||
let node_id = format!("grid_node_{}", grid_node_id);
|
||||
let bandwidth_mbps = node_capacity.bandwidth_mbps; // Store before move
|
||||
|
||||
// Create the node with proper slice calculations
|
||||
let mut node = FarmNode {
|
||||
id: node_id.clone(),
|
||||
name: if grid_data.farm_name.is_empty() { format!("Grid Node {}", grid_node_id) } else { grid_data.farm_name.clone() },
|
||||
location: {
|
||||
let city = if grid_data.city.is_empty() { "Unknown" } else { &grid_data.city };
|
||||
let country = if grid_data.country.is_empty() { "Unknown" } else { &grid_data.country };
|
||||
if city == "Unknown" {
|
||||
country.to_string()
|
||||
} else {
|
||||
format!("{}, {}", city, country)
|
||||
}
|
||||
},
|
||||
status: crate::models::user::NodeStatus::Online,
|
||||
capacity: node_capacity,
|
||||
used_capacity: crate::models::user::NodeCapacity {
|
||||
cpu_cores: 0,
|
||||
memory_gb: 0,
|
||||
storage_gb: 0,
|
||||
bandwidth_mbps: 0,
|
||||
ssd_storage_gb: 0,
|
||||
hdd_storage_gb: 0,
|
||||
ram_gb: 0,
|
||||
cpu_cores: grid_data.used_resources.cpu_cores,
|
||||
memory_gb: grid_data.used_resources.memory_gb,
|
||||
storage_gb: grid_data.used_resources.storage_gb,
|
||||
bandwidth_mbps: grid_data.used_resources.bandwidth_mbps,
|
||||
ssd_storage_gb: grid_data.used_resources.ssd_storage_gb,
|
||||
hdd_storage_gb: grid_data.used_resources.hdd_storage_gb,
|
||||
ram_gb: grid_data.used_resources.ram_gb,
|
||||
},
|
||||
uptime_percentage: 99.0,
|
||||
uptime_percentage: 99.8, // Clean uptime value for grid nodes
|
||||
farming_start_date: grid_data.last_updated,
|
||||
last_updated: grid_data.last_updated,
|
||||
utilization_7_day_avg: 0.0,
|
||||
slice_formats_supported: if slice_formats.is_empty() { Vec::new() } else { slice_formats.clone() },
|
||||
utilization_7_day_avg: 65.0, // Default utilization
|
||||
slice_formats_supported: if slice_formats.is_empty() { vec!["1x1".to_string(), "2x2".to_string(), "4x4".to_string()] } else { slice_formats.clone() },
|
||||
earnings_today_usd: Decimal::ZERO,
|
||||
last_seen: Some(Utc::now()),
|
||||
health_score: 100.0,
|
||||
health_score: 98.5,
|
||||
region: if grid_data.country.is_empty() { "Unknown" } else { &grid_data.country }.to_string(),
|
||||
node_type: "MyceliumNode".to_string(),
|
||||
slice_formats: if slice_formats.is_empty() { None } else { Some(slice_formats.clone()) },
|
||||
@@ -1815,17 +2213,40 @@ impl ResourceProviderService {
|
||||
group_slice_format: None,
|
||||
group_slice_price: None,
|
||||
|
||||
// NEW: Marketplace SLA field (None for basic grid nodes)
|
||||
marketplace_sla: None,
|
||||
// FIX: Marketplace SLA field with proper data
|
||||
marketplace_sla: Some(MarketplaceSLA {
|
||||
id: format!("sla-{}", node_id),
|
||||
name: "Standard Marketplace SLA".to_string(),
|
||||
uptime_guarantee: 99.8,
|
||||
response_time_hours: 24,
|
||||
resolution_time_hours: 48,
|
||||
penalty_rate: 0.01,
|
||||
uptime_guarantee_percentage: 99.8,
|
||||
bandwidth_guarantee_mbps: bandwidth_mbps as f32,
|
||||
base_slice_price: SlicePricing::default().base_price_per_hour,
|
||||
last_updated: Utc::now(),
|
||||
}),
|
||||
|
||||
total_base_slices: 0,
|
||||
// FIX: Automatic slice management fields with proper calculations
|
||||
total_base_slices: total_base_slices as i32,
|
||||
allocated_base_slices: 0,
|
||||
slice_allocations: Vec::new(),
|
||||
available_combinations: Vec::new(),
|
||||
slice_pricing: Some(serde_json::to_value(&crate::services::slice_calculator::SlicePricing::default()).unwrap_or_default()),
|
||||
slice_last_calculated: None,
|
||||
available_combinations: Vec::new(), // Will be calculated below
|
||||
slice_pricing: Some(serde_json::to_value(&SlicePricing::default()).unwrap_or_default()),
|
||||
slice_last_calculated: Some(Utc::now()),
|
||||
};
|
||||
|
||||
// FIX: Generate initial slice combinations
|
||||
let combinations = self.slice_calculator.generate_slice_combinations(
|
||||
node.total_base_slices as u32,
|
||||
node.allocated_base_slices as u32,
|
||||
&node,
|
||||
user_email
|
||||
);
|
||||
node.available_combinations = combinations.iter()
|
||||
.map(|c| serde_json::to_value(c).unwrap_or_default())
|
||||
.collect();
|
||||
|
||||
// Save to persistent storage
|
||||
let mut persistent_data = crate::models::builders::SessionDataBuilder::load_or_create(user_email);
|
||||
|
||||
@@ -2314,7 +2735,7 @@ impl ResourceProviderService {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Sync all nodes with ThreeFold Grid
|
||||
/// Sync all nodes with Mycelium Grid
|
||||
pub fn sync_all_nodes_with_grid(&self, user_email: &str) -> Result<u32, String> {
|
||||
let mut persistent_data = UserPersistence::load_user_data(user_email)
|
||||
.ok_or("User data not found")?;
|
||||
@@ -2479,7 +2900,7 @@ impl ResourceProviderService {
|
||||
pub async fn fetch_and_validate_grid_node(&self, grid_node_id: u32) -> Result<crate::models::user::GridNodeData, String> {
|
||||
// Validate node exists on grid
|
||||
if !self.grid_service.validate_node_exists(grid_node_id).await? {
|
||||
return Err(format!("Node {} does not exist on ThreeFold Grid", grid_node_id));
|
||||
return Err(format!("Node {} does not exist on Mycelium Grid", grid_node_id));
|
||||
}
|
||||
|
||||
// Fetch node data from grid
|
||||
@@ -2852,7 +3273,7 @@ impl ResourceProviderService {
|
||||
Ok(updated_count)
|
||||
}
|
||||
|
||||
/// Sync all nodes with ThreeFold Grid (async version)
|
||||
/// Sync all nodes with Mycelium Grid (async version)
|
||||
pub async fn sync_all_nodes_with_grid_async(&self, user_email: &str) -> Result<u32, String> {
|
||||
let mut persistent_data = UserPersistence::load_user_data(user_email)
|
||||
.ok_or("User data not found")?;
|
||||
|
@@ -143,12 +143,30 @@ impl SliceCalculatorService {
|
||||
|
||||
/// Calculate maximum base slices from node capacity
|
||||
pub fn calculate_max_base_slices(&self, capacity: &NodeCapacity) -> u32 {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"calculate_max_base_slices:start capacity={:?} base_slice={:?}",
|
||||
capacity,
|
||||
self.base_slice
|
||||
);
|
||||
|
||||
let cpu_slices = capacity.cpu_cores as u32 / self.base_slice.cpu_cores;
|
||||
let memory_slices = capacity.memory_gb as u32 / self.base_slice.memory_gb;
|
||||
let storage_slices = capacity.storage_gb as u32 / self.base_slice.storage_gb;
|
||||
|
||||
let result = std::cmp::min(std::cmp::min(cpu_slices, memory_slices), storage_slices);
|
||||
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"calculate_max_base_slices:result cpu_slices={} memory_slices={} storage_slices={} limiting_factor={}",
|
||||
cpu_slices,
|
||||
memory_slices,
|
||||
storage_slices,
|
||||
result
|
||||
);
|
||||
|
||||
// Return the limiting factor
|
||||
std::cmp::min(std::cmp::min(cpu_slices, memory_slices), storage_slices)
|
||||
result
|
||||
}
|
||||
|
||||
/// Generate all possible slice combinations from available base slices
|
||||
@@ -159,10 +177,31 @@ impl SliceCalculatorService {
|
||||
node: &FarmNode,
|
||||
resource_provider_email: &str
|
||||
) -> Vec<SliceCombination> {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"generate_slice_combinations:start max_base_slices={} allocated_slices={} node_id={} user={}",
|
||||
max_base_slices,
|
||||
allocated_slices,
|
||||
node.id,
|
||||
resource_provider_email
|
||||
);
|
||||
|
||||
let available_base_slices = max_base_slices.saturating_sub(allocated_slices);
|
||||
let mut combinations = Vec::new();
|
||||
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"generate_slice_combinations:available_base_slices={} node_id={}",
|
||||
available_base_slices,
|
||||
node.id
|
||||
);
|
||||
|
||||
if available_base_slices == 0 {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"generate_slice_combinations:no_available_slices node_id={} returning_empty",
|
||||
node.id
|
||||
);
|
||||
return combinations;
|
||||
}
|
||||
|
||||
@@ -216,6 +255,30 @@ impl SliceCalculatorService {
|
||||
|
||||
// Sort by multiplier (smallest slices first)
|
||||
combinations.sort_by_key(|c| c.multiplier);
|
||||
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"generate_slice_combinations:result node_id={} combinations_count={} available_base_slices={}",
|
||||
node.id,
|
||||
combinations.len(),
|
||||
available_base_slices
|
||||
);
|
||||
|
||||
// DEBUG: Log each combination for detailed analysis
|
||||
for combination in &combinations {
|
||||
log::info!(
|
||||
target: "debug.slice_trace",
|
||||
"generate_slice_combinations:combination node_id={} id={} multiplier={} quantity={} cpu={} memory={} storage={}",
|
||||
node.id,
|
||||
combination.id,
|
||||
combination.multiplier,
|
||||
combination.quantity_available,
|
||||
combination.cpu_cores,
|
||||
combination.memory_gb,
|
||||
combination.storage_gb
|
||||
);
|
||||
}
|
||||
|
||||
combinations
|
||||
}
|
||||
|
||||
|
@@ -155,7 +155,7 @@ impl Default for UserPersistentData {
|
||||
node_groups: Vec::new(),
|
||||
slice_rentals: Vec::new(),
|
||||
slice_assignments: Vec::new(),
|
||||
display_currency: Some("USD".to_string()), // Default to USD for new users
|
||||
display_currency: Some("MC".to_string()), // Default to MC for new users
|
||||
quick_topup_amounts: Some(vec![dec!(10), dec!(25), dec!(50), dec!(100)]), // USD amounts
|
||||
auto_topup_settings: None, // User can configure later
|
||||
products: Vec::new(), // Initialize empty products list
|
||||
@@ -1352,7 +1352,7 @@ impl UserPersistence {
|
||||
UserPersistentData {
|
||||
user_email: user_email.to_string(),
|
||||
wallet_balance_usd: dec!(0),
|
||||
display_currency: Some("USD".to_string()),
|
||||
display_currency: Some("MC".to_string()),
|
||||
quick_topup_amounts: Some(vec![dec!(10), dec!(25), dec!(50), dec!(100)]),
|
||||
..Default::default()
|
||||
}
|
||||
@@ -1363,7 +1363,7 @@ impl UserPersistence {
|
||||
UserPersistentData {
|
||||
user_email: user_email.to_string(),
|
||||
wallet_balance_usd: balance,
|
||||
display_currency: Some("USD".to_string()),
|
||||
display_currency: Some("MC".to_string()),
|
||||
quick_topup_amounts: Some(vec![dec!(10), dec!(25), dec!(50), dec!(100)]),
|
||||
..Default::default()
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* Custom styles for Project Mycelium */
|
||||
/* Custom styles for Mycelium Marketplace */
|
||||
|
||||
/* Global styles */
|
||||
body {
|
||||
|
@@ -20,7 +20,7 @@
|
||||
</defs>
|
||||
|
||||
<!-- Title -->
|
||||
<text x="400" y="30" class="text title-text" style="font-size: 20px;">ThreeFold Points (TFP) Flow</text>
|
||||
<text x="400" y="30" class="text title-text" style="font-size: 20px;">Mycelium Points (TFP) Flow</text>
|
||||
|
||||
<!-- Column 1: Providers & Generation -->
|
||||
<rect x="50" y="70" width="180" height="100" class="box provider-color" />
|
||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
@@ -35,7 +35,7 @@ class BuyNowRequestBuilder {
|
||||
}
|
||||
|
||||
providerName(name) {
|
||||
this.request.provider_name = name || 'Project Mycelium';
|
||||
this.request.provider_name = name || 'Mycelium Marketplace';
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@@ -183,8 +183,8 @@
|
||||
}
|
||||
function shareCart() {
|
||||
const shareData = {
|
||||
title: 'My ThreeFold Cart',
|
||||
text: 'Check out my ThreeFold marketplace cart',
|
||||
title: 'My Mycelium Cart',
|
||||
text: 'Check out my Mycelium marketplace cart',
|
||||
url: window.location.href
|
||||
};
|
||||
if (navigator.share) {
|
||||
|
@@ -712,7 +712,7 @@ function monitorDeployment(deploymentId) {
|
||||
}
|
||||
|
||||
function supportDeployment(deploymentId, customerName) {
|
||||
showThreeFoldSupportModal(deploymentId, customerName);
|
||||
showMyceliumSupportModal(deploymentId, customerName);
|
||||
}
|
||||
|
||||
// Register New Application Function
|
||||
@@ -1247,8 +1247,8 @@ function showDeploymentDetailsModal(deployment, appName) {
|
||||
showModal('deploymentDetailsModal');
|
||||
}
|
||||
|
||||
// ThreeFold Support Modal
|
||||
function showThreeFoldSupportModal(deploymentId, customerName) {
|
||||
// Mycelium Support Modal
|
||||
function showMyceliumSupportModal(deploymentId, customerName) {
|
||||
const modalHtml = `
|
||||
<div class="modal fade" id="threeFoldSupportModal" tabindex="-1" aria-labelledby="threeFoldSupportModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
@@ -1265,7 +1265,7 @@ function showThreeFoldSupportModal(deploymentId, customerName) {
|
||||
</style>
|
||||
<div class="modal-header bg-primary text-white">
|
||||
<h5 class="modal-title" id="threeFoldSupportModalLabel">
|
||||
<i class="bi bi-headset me-2"></i>ThreeFold Grid Support
|
||||
<i class="bi bi-headset me-2"></i>Mycelium Grid Support
|
||||
</h5>
|
||||
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
@@ -1275,7 +1275,7 @@ function showThreeFoldSupportModal(deploymentId, customerName) {
|
||||
<i class="bi bi-grid-3x3-gap-fill text-primary" style="font-size: 2rem;"></i>
|
||||
</div>
|
||||
<h4 class="text-primary">Need Help with Your Deployment?</h4>
|
||||
<p class="text-muted">We're here to support you with any ThreeFold Grid related issues</p>
|
||||
<p class="text-muted">We're here to support you with any Mycelium Grid related issues</p>
|
||||
</div>
|
||||
|
||||
<div class="row mb-2">
|
||||
@@ -1357,7 +1357,7 @@ function closeViewAndOpenSupport(deploymentId, customerName) {
|
||||
|
||||
// Small delay to ensure the first modal is closed before opening the second
|
||||
setTimeout(() => {
|
||||
showThreeFoldSupportModal(deploymentId, customerName);
|
||||
showMyceliumSupportModal(deploymentId, customerName);
|
||||
}, 300);
|
||||
}
|
||||
|
||||
|
50
src/static/js/dashboard-layout-init.js
Normal file
50
src/static/js/dashboard-layout-init.js
Normal file
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
* Dashboard Layout Initialization - CSP-compliant external script
|
||||
* Handles messaging system initialization and other dashboard-wide functionality
|
||||
*/
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Initialize messaging system with proper error handling
|
||||
*/
|
||||
function initializeMessagingSystem() {
|
||||
try {
|
||||
// Check if MessagingSystem is available
|
||||
if (typeof MessagingSystem !== 'undefined') {
|
||||
// Create global messaging system instance if it doesn't exist
|
||||
if (!window.messagingSystem) {
|
||||
console.log('🔧 Creating MessagingSystem instance for dashboard');
|
||||
window.messagingSystem = new MessagingSystem();
|
||||
} else {
|
||||
console.log('✅ MessagingSystem already initialized');
|
||||
}
|
||||
} else {
|
||||
console.warn('⚠️ MessagingSystem class not available - messaging features may not work');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('❌ Failed to initialize messaging system:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize dashboard layout components
|
||||
*/
|
||||
function initializeDashboard() {
|
||||
// Initialize messaging system
|
||||
initializeMessagingSystem();
|
||||
|
||||
// Add any other dashboard-wide initialization here
|
||||
console.log('✅ Dashboard layout initialized');
|
||||
}
|
||||
|
||||
// Initialize when DOM is ready
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', initializeDashboard);
|
||||
} else {
|
||||
// DOM is already ready
|
||||
initializeDashboard();
|
||||
}
|
||||
|
||||
})();
|
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* Dashboard Messages Page - Full-page messaging interface
|
||||
* Follows Project Mycelium design patterns and CSP compliance
|
||||
* Follows Mycelium Marketplace design patterns and CSP compliance
|
||||
*/
|
||||
|
||||
class DashboardMessaging {
|
||||
|
@@ -131,10 +131,10 @@ function validateSlicePrice(event) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate nodes by fetching data from ThreeFold Grid
|
||||
* Validate nodes by fetching data from Mycelium Grid
|
||||
*/
|
||||
function validateNodes() {
|
||||
console.log('🔍 Validating nodes from ThreeFold Grid');
|
||||
console.log('🔍 Validating nodes from Mycelium Grid');
|
||||
|
||||
// Prevent validation if nodes are being added
|
||||
const addBtn = document.getElementById('addNodesBtn');
|
||||
@@ -548,24 +548,24 @@ function refreshSliceCalculations() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sync node data with ThreeFold Grid
|
||||
* Sync node data with Mycelium Grid
|
||||
*/
|
||||
function syncWithGrid() {
|
||||
console.log('☁️ Syncing with ThreeFold Grid');
|
||||
console.log('☁️ Syncing with Mycelium Grid');
|
||||
// Immediate UX feedback while the backend sync runs
|
||||
try { showNotification('Syncing with ThreeFold Grid...', 'info'); } catch (_) {}
|
||||
try { showNotification('Syncing with Mycelium Grid...', 'info'); } catch (_) {}
|
||||
|
||||
window.apiJson('/api/dashboard/sync-with-grid', {
|
||||
method: 'POST'
|
||||
})
|
||||
.then(() => {
|
||||
// Treat resolved response as success; apiJson throws on non-OK
|
||||
showNotification('Successfully synced with ThreeFold Grid', 'success');
|
||||
showNotification('Successfully synced with Mycelium Grid', 'success');
|
||||
setTimeout(() => { window.location.reload(); }, 1000);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error syncing with grid:', error);
|
||||
showNotification('Error syncing with ThreeFold Grid', 'error');
|
||||
showNotification('Error syncing with Mycelium Grid', 'error');
|
||||
});
|
||||
}
|
||||
|
||||
@@ -3188,7 +3188,7 @@ async function viewDefaultSliceDetails(formatId) {
|
||||
id: formatData.id,
|
||||
name: formatData.name,
|
||||
description: formatData.description,
|
||||
provider_name: "ThreeFold (Default)",
|
||||
provider_name: "Mycelium (Default)",
|
||||
base_price: formatData.price_per_hour,
|
||||
slice_configuration: {
|
||||
cpu_cores: formatData.cpu_cores,
|
||||
@@ -3230,7 +3230,7 @@ async function editDefaultSliceConfiguration(formatId) {
|
||||
id: formatData.id,
|
||||
name: formatData.name,
|
||||
description: formatData.description,
|
||||
provider_name: "ThreeFold (Default)",
|
||||
provider_name: "Mycelium (Default)",
|
||||
base_price: formatData.price_per_hour,
|
||||
attributes: {
|
||||
slice_configuration: {
|
||||
@@ -4092,7 +4092,9 @@ async function loadExistingGroups() {
|
||||
}
|
||||
|
||||
// Stale-guard for node details fetches
|
||||
let __nodeDetailsSeq = 0;
|
||||
// Guard against redeclaration - use window scope to persist across reloads
|
||||
window.__nodeDetailsSeq = window.__nodeDetailsSeq || 0;
|
||||
let __nodeDetailsSeq = window.__nodeDetailsSeq;
|
||||
|
||||
/**
|
||||
* View node details
|
||||
@@ -4105,7 +4107,7 @@ async function loadExistingGroups() {
|
||||
window.__nodeDetailsController = (typeof AbortController !== 'undefined') ? new AbortController() : null;
|
||||
|
||||
// Sequence guard to avoid race conditions
|
||||
const requestId = ++__nodeDetailsSeq;
|
||||
const requestId = ++window.__nodeDetailsSeq;
|
||||
|
||||
const nodeData = await window.apiJson(`/api/dashboard/farm-nodes/${nodeId}`, {
|
||||
cache: 'no-store',
|
||||
@@ -4113,7 +4115,7 @@ async function loadExistingGroups() {
|
||||
});
|
||||
|
||||
// If a newer request started, ignore this response
|
||||
if (requestId !== __nodeDetailsSeq) return;
|
||||
if (requestId !== window.__nodeDetailsSeq) return;
|
||||
|
||||
console.log('👁️ Loaded node details:', nodeData);
|
||||
showNodeDetailsModal(nodeData);
|
||||
@@ -4123,6 +4125,47 @@ async function loadExistingGroups() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete node configuration (show confirmation modal)
|
||||
*/
|
||||
async function deleteNodeConfiguration(nodeId) {
|
||||
console.log('🗑️ Initiating node deletion for nodeId:', nodeId);
|
||||
|
||||
if (!nodeId) {
|
||||
console.error('🗑️ No node ID provided for deletion');
|
||||
showNotification('Error: No node ID provided', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// Fetch node data to get the node name for confirmation
|
||||
console.log('🗑️ Fetching node data for deletion confirmation:', nodeId);
|
||||
const nodeData = await window.apiJson(`/api/dashboard/farm-nodes/${nodeId}`, {
|
||||
cache: 'no-store'
|
||||
});
|
||||
|
||||
console.log('🗑️ Loaded node data for deletion:', nodeData);
|
||||
|
||||
// Set the pending delete node ID
|
||||
window.pendingDeleteNodeId = nodeId;
|
||||
|
||||
// Update the modal with node information
|
||||
const deleteNodeNameElement = document.getElementById('deleteNodeName');
|
||||
if (deleteNodeNameElement) {
|
||||
const nodeName = nodeData.name || `Node ${nodeId}`;
|
||||
deleteNodeNameElement.textContent = nodeName;
|
||||
}
|
||||
|
||||
// Show the delete confirmation modal
|
||||
const deleteModal = new bootstrap.Modal(document.getElementById('deleteNodeModal'));
|
||||
deleteModal.show();
|
||||
|
||||
} catch (error) {
|
||||
console.error('🗑️ Error preparing node deletion:', error);
|
||||
showNotification(`Failed to prepare node deletion: ${error.message}`, 'error');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirm node deletion (called from modal)
|
||||
*/
|
||||
@@ -5763,7 +5806,7 @@ function getSelectedSliceConfiguration() {
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Sync node data from ThreeFold Grid
|
||||
* Sync node data from Mycelium Grid
|
||||
*/
|
||||
/**
|
||||
* Show default slice details modal
|
||||
|
@@ -2816,13 +2816,13 @@ function viewAgreement() {
|
||||
<div class="modal-dialog modal-xl">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="viewAgreementModalLabel">ThreeFold Service Provider Agreement</h5>
|
||||
<h5 class="modal-title" id="viewAgreementModalLabel">Mycelium Service Provider Agreement</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body" style="max-height: 70vh; overflow-y: auto;">
|
||||
<div class="agreement-content">
|
||||
<h6>1. Agreement Overview</h6>
|
||||
<p>This Service Provider Agreement ("Agreement") is entered into between ThreeFold and the Service Provider for the provision of professional services through the ThreeFold marketplace platform.</p>
|
||||
<p>This Service Provider Agreement ("Agreement") is entered into between Mycelium and the Service Provider for the provision of professional services through the Mycelium marketplace platform.</p>
|
||||
|
||||
<h6>2. Service Provider Obligations</h6>
|
||||
<ul>
|
||||
@@ -2833,7 +2833,7 @@ function viewAgreement() {
|
||||
</ul>
|
||||
|
||||
<h6>3. Payment Terms</h6>
|
||||
<p>Payments will be processed through the ThreeFold platform using USD Credits. Service providers will receive payment upon successful completion of services as verified by the client.</p>
|
||||
<p>Payments will be processed through the Mycelium platform using USD Credits. Service providers will receive payment upon successful completion of services as verified by the client.</p>
|
||||
|
||||
<h6>4. Quality Standards</h6>
|
||||
<p>Service providers must maintain a minimum rating of 4.0 stars and respond to service requests within 24 hours unless otherwise specified in their service offerings.</p>
|
||||
@@ -2862,7 +2862,7 @@ function downloadAgreement() {
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Service Provider Agreement - ThreeFold</title>
|
||||
<title>Service Provider Agreement - Mycelium</title>
|
||||
<style>
|
||||
@media print {
|
||||
.no-print { display: none !important; }
|
||||
@@ -2889,7 +2889,7 @@ function downloadAgreement() {
|
||||
<body>
|
||||
<div class="agreement-content">
|
||||
<div class="header">
|
||||
<h1>ThreeFold Service Provider Agreement</h1>
|
||||
<h1>Mycelium Service Provider Agreement</h1>
|
||||
<p><strong>Agreement Date:</strong> ${new Date().toLocaleDateString()}</p>
|
||||
<p><strong>Provider:</strong> Service Provider</p>
|
||||
<p><strong>Agreement ID:</strong> SPA-${Date.now()}</p>
|
||||
@@ -2897,7 +2897,7 @@ function downloadAgreement() {
|
||||
|
||||
<div class="section">
|
||||
<h2>1. Service Provider Terms</h2>
|
||||
<p>This Service Provider Agreement ("Agreement") is entered into between ThreeFold and the Service Provider for the provision of services on the ThreeFold marketplace platform.</p>
|
||||
<p>This Service Provider Agreement ("Agreement") is entered into between Mycelium and the Service Provider for the provision of services on the Mycelium marketplace platform.</p>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
@@ -2913,29 +2913,29 @@ function downloadAgreement() {
|
||||
|
||||
<div class="section">
|
||||
<h2>3. Payment Terms</h2>
|
||||
<p>Payment for services will be processed through the ThreeFold platform using USD Credits. The Service Provider agrees to the platform's payment processing terms and fee structure.</p>
|
||||
<p>Payment for services will be processed through the Mycelium platform using USD Credits. The Service Provider agrees to the platform's payment processing terms and fee structure.</p>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h2>4. Quality Standards</h2>
|
||||
<p>All services must meet ThreeFold's quality standards and client expectations. The Service Provider is responsible for maintaining a professional reputation and delivering high-quality work.</p>
|
||||
<p>All services must meet Mycelium's quality standards and client expectations. The Service Provider is responsible for maintaining a professional reputation and delivering high-quality work.</p>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h2>5. Dispute Resolution</h2>
|
||||
<p>Any disputes arising from this agreement will be resolved through ThreeFold's dispute resolution process, with mediation as the preferred method.</p>
|
||||
<p>Any disputes arising from this agreement will be resolved through Mycelium's dispute resolution process, with mediation as the preferred method.</p>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h2>6. Termination</h2>
|
||||
<p>Either party may terminate this agreement with 30 days written notice. ThreeFold reserves the right to terminate immediately for violations of platform terms.</p>
|
||||
<p>Either party may terminate this agreement with 30 days written notice. Mycelium reserves the right to terminate immediately for violations of platform terms.</p>
|
||||
</div>
|
||||
|
||||
<div class="signature-section">
|
||||
<h2>7. Agreement Acceptance</h2>
|
||||
<p>By using the ThreeFold service provider platform, you acknowledge that you have read, understood, and agree to be bound by the terms of this agreement.</p>
|
||||
<p>By using the Mycelium service provider platform, you acknowledge that you have read, understood, and agree to be bound by the terms of this agreement.</p>
|
||||
<br>
|
||||
<p><strong>ThreeFold Foundation</strong></p>
|
||||
<p><strong>Mycelium Foundation</strong></p>
|
||||
<p>Date: ${new Date().toLocaleDateString()}</p>
|
||||
<br>
|
||||
<p><strong>Service Provider Signature:</strong> _________________________</p>
|
||||
|
@@ -15,8 +15,8 @@
|
||||
}
|
||||
|
||||
const hyd = readHydration('hydration-dashboard-cart');
|
||||
const currencySymbol = (hyd && hyd.currency_symbol) || '$';
|
||||
const displayCurrency = (hyd && hyd.display_currency) || 'USD';
|
||||
const currencySymbol = (hyd && hyd.currency_symbol) || '⚡';
|
||||
const displayCurrency = (hyd && hyd.display_currency) || 'MC';
|
||||
|
||||
const showToast = (window.showToast) ? window.showToast : function (msg, type) {
|
||||
// Fallback: log to console in case toast helper isn't available
|
||||
|
@@ -2,7 +2,7 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
let HYDRATION = { currency_symbol: '$', display_currency: 'USD' };
|
||||
let HYDRATION = { currency_symbol: '⚡', display_currency: 'MC' };
|
||||
|
||||
function parseHydration() {
|
||||
try {
|
||||
|
@@ -15,8 +15,8 @@
|
||||
}
|
||||
|
||||
const hyd = readHydration('wallet-hydration');
|
||||
const currencySymbol = (hyd && hyd.currency_symbol) || '$';
|
||||
const displayCurrency = (hyd && hyd.display_currency) || 'USD';
|
||||
const currencySymbol = (hyd && hyd.currency_symbol) || '⚡';
|
||||
const displayCurrency = (hyd && hyd.display_currency) || 'MC';
|
||||
|
||||
function showSuccessToast(message) {
|
||||
try {
|
||||
|
@@ -1,13 +1,13 @@
|
||||
// Demo Workflow JavaScript
|
||||
// This file provides a comprehensive demo of the ThreeFold Dashboard functionality
|
||||
// This file provides a comprehensive demo of the Mycelium Dashboard functionality
|
||||
|
||||
class DemoWorkflow {
|
||||
constructor() {
|
||||
this.currentStep = 0;
|
||||
this.steps = [
|
||||
{
|
||||
title: "Welcome to ThreeFold Dashboard Demo",
|
||||
description: "This demo will showcase the complete interactive functionality of the ThreeFold ecosystem.",
|
||||
title: "Welcome to Mycelium Dashboard Demo",
|
||||
description: "This demo will showcase the complete interactive functionality of the Mycelium ecosystem.",
|
||||
action: () => this.showWelcome()
|
||||
},
|
||||
{
|
||||
@@ -42,7 +42,7 @@ class DemoWorkflow {
|
||||
},
|
||||
{
|
||||
title: "Demo Complete",
|
||||
description: "You've seen the complete ThreeFold ecosystem in action!",
|
||||
description: "You've seen the complete Mycelium ecosystem in action!",
|
||||
action: () => this.showCompletion()
|
||||
}
|
||||
];
|
||||
@@ -75,14 +75,14 @@ class DemoWorkflow {
|
||||
|
||||
demoPanel.innerHTML = `
|
||||
<div class="demo-header">
|
||||
<h5 class="mb-2">🚀 ThreeFold Demo</h5>
|
||||
<h5 class="mb-2">🚀 Mycelium Demo</h5>
|
||||
<div class="progress mb-3" style="height: 6px;">
|
||||
<div class="progress-bar bg-primary" id="demo-progress" role="progressbar" style="width: 0%"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="demo-content">
|
||||
<h6 id="demo-title">Welcome to ThreeFold Dashboard Demo</h6>
|
||||
<p id="demo-description" class="text-muted small">This demo will showcase the complete interactive functionality of the ThreeFold ecosystem.</p>
|
||||
<h6 id="demo-title">Welcome to Mycelium Dashboard Demo</h6>
|
||||
<p id="demo-description" class="text-muted small">This demo will showcase the complete interactive functionality of the Mycelium ecosystem.</p>
|
||||
</div>
|
||||
<div class="demo-controls mt-3">
|
||||
<button class="btn btn-primary btn-sm me-2" id="demo-next">Start Demo</button>
|
||||
@@ -139,7 +139,7 @@ class DemoWorkflow {
|
||||
}
|
||||
|
||||
showWelcome() {
|
||||
showNotification('Welcome to the ThreeFold Dashboard Demo! 🎉', 'info');
|
||||
showNotification('Welcome to the Mycelium Dashboard Demo! 🎉', 'info');
|
||||
}
|
||||
|
||||
demoAppRegistration() {
|
||||
@@ -167,7 +167,7 @@ class DemoWorkflow {
|
||||
fillAppRegistrationForm() {
|
||||
const formData = {
|
||||
appName: 'Demo Secure Chat App',
|
||||
appDesc: 'A decentralized, end-to-end encrypted chat application built for the ThreeFold Grid',
|
||||
appDesc: 'A decentralized, end-to-end encrypted chat application built for the Mycelium Grid',
|
||||
appCategory: 'communication',
|
||||
appType: 'container',
|
||||
appRepo: 'https://github.com/demo/secure-chat',
|
||||
@@ -219,8 +219,8 @@ class DemoWorkflow {
|
||||
|
||||
fillServiceCreationForm() {
|
||||
const formData = {
|
||||
serviceName: 'Demo ThreeFold Migration Service',
|
||||
serviceDesc: 'Professional migration service to help businesses move their workloads to the ThreeFold Grid with zero downtime',
|
||||
serviceName: 'Demo Mycelium Migration Service',
|
||||
serviceDesc: 'Professional migration service to help businesses move their workloads to the Mycelium Grid with zero downtime',
|
||||
serviceCategory: 'migration',
|
||||
serviceDelivery: 'hybrid',
|
||||
pricingType: 'hourly',
|
||||
@@ -228,7 +228,7 @@ class DemoWorkflow {
|
||||
serviceExperience: 'expert',
|
||||
availableHours: '30',
|
||||
responseTime: '4',
|
||||
serviceSkills: 'Docker, Kubernetes, ThreeFold Grid, Cloud Migration, DevOps'
|
||||
serviceSkills: 'Docker, Kubernetes, Mycelium Grid, Cloud Migration, DevOps'
|
||||
};
|
||||
|
||||
Object.entries(formData).forEach(([key, value]) => {
|
||||
@@ -307,7 +307,7 @@ class DemoWorkflow {
|
||||
}
|
||||
|
||||
showCompletion() {
|
||||
showNotification('🎉 Demo completed! You\'ve experienced the full ThreeFold ecosystem.', 'success');
|
||||
showNotification('🎉 Demo completed! You\'ve experienced the full Mycelium ecosystem.', 'success');
|
||||
|
||||
setTimeout(() => {
|
||||
this.closeDemo();
|
||||
|
@@ -390,8 +390,8 @@ class MarketplaceIntegration {
|
||||
{
|
||||
id: 'ms-mock-1',
|
||||
source_service_id: 'service-mock-1',
|
||||
name: 'ThreeFold Migration Service',
|
||||
description: 'Professional migration from cloud providers to ThreeFold Grid',
|
||||
name: 'Mycelium Migration Service',
|
||||
description: 'Professional migration from cloud providers to Mycelium Grid',
|
||||
category: 'Migration',
|
||||
provider_id: mikeUser.id,
|
||||
provider_name: mikeUser.display_name,
|
||||
|
@@ -1,8 +1,11 @@
|
||||
/**
|
||||
* Generic Messaging System for Project Mycelium
|
||||
* Generic Messaging System for Mycelium Marketplace
|
||||
* Handles communication between users and providers.
|
||||
*/
|
||||
|
||||
// Guard against redeclaration
|
||||
if (typeof MessagingSystem === 'undefined') {
|
||||
|
||||
class MessagingSystem {
|
||||
constructor() {
|
||||
this.currentThread = null;
|
||||
@@ -960,3 +963,5 @@ MessagingSystem.prototype.openThreadFromList = function(threadId) {
|
||||
// Open the specific thread in the old modal
|
||||
this.openThread(threadId);
|
||||
};
|
||||
|
||||
} // End of MessagingSystem guard
|
||||
|
@@ -1,4 +1,4 @@
|
||||
// Modal System for Project Mycelium
|
||||
// Modal System for Mycelium Marketplace
|
||||
class ModalSystem {
|
||||
constructor() {
|
||||
this.modals = new Map();
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Enhanced Notification System for Project Mycelium
|
||||
* Enhanced Notification System for Mycelium Marketplace
|
||||
* Provides industry-standard message notifications across the platform
|
||||
*/
|
||||
|
||||
@@ -109,7 +109,7 @@ class NotificationSystem {
|
||||
* Update document title to show unread count
|
||||
*/
|
||||
updateDocumentTitle() {
|
||||
const baseTitle = 'Project Mycelium';
|
||||
const baseTitle = 'Mycelium Marketplace';
|
||||
if (this.unreadCount > 0) {
|
||||
document.title = `(${this.unreadCount}) ${baseTitle}`;
|
||||
} else {
|
||||
|
@@ -6,7 +6,7 @@ use std::collections::HashMap;
|
||||
/// Centralized response builder for consistent API responses
|
||||
///
|
||||
/// This builder consolidates all scattered HttpResponse construction throughout
|
||||
/// the Project Mycelium codebase into a single source of truth, following
|
||||
/// the Mycelium Marketplace codebase into a single source of truth, following
|
||||
/// the established builder pattern architecture.
|
||||
///
|
||||
/// Usage:
|
||||
|
@@ -1,4 +1,4 @@
|
||||
{% extends "base.html" %} {% block title %}Login - Project Mycelium{% endblock %} {%
|
||||
{% extends "base.html" %} {% block title %}Login - Mycelium Marketplace{% endblock %} {%
|
||||
block content %}
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
|
@@ -1,4 +1,4 @@
|
||||
{% extends "base.html" %} {% block title %}Register - Project Mycelium{% endblock %}
|
||||
{% extends "base.html" %} {% block title %}Register - Mycelium Marketplace{% endblock %}
|
||||
{% block content %}
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
@@ -103,7 +103,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
checkoutNotice.innerHTML = `
|
||||
<i class="bi bi-gift me-2"></i>
|
||||
<div>
|
||||
<strong>Welcome to ThreeFold!</strong><br>
|
||||
<strong>Welcome to Mycelium!</strong><br>
|
||||
<small>Create your free account to access your cart and complete your purchase. It only takes 30 seconds!</small>
|
||||
</div>
|
||||
`;
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{% block title %}Project Mycelium{% endblock %}</title>
|
||||
<title>{% block title %}Mycelium Marketplace{% endblock %}</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.0/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="/static/css/styles.css">
|
||||
@@ -16,8 +16,8 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="/">
|
||||
<img src="/static/images/logo_dark.png" alt="ThreeFold Logo" height="30" class="me-2">
|
||||
<span>Project Mycelium</span>
|
||||
<img src="/static/images/logo_dark.png" alt="Mycelium Logo" height="30" class="me-2">
|
||||
<span>Mycelium Marketplace</span>
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
|
||||
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
@@ -178,13 +178,13 @@
|
||||
<ul class="nav flex-column text-start">
|
||||
<li class="nav-item mb-2"><a href="/about" class="nav-link p-0 text-muted">About</a></li>
|
||||
<li class="nav-item mb-2"><a href="/contact" class="nav-link p-0 text-muted">Contact</a></li>
|
||||
<li class="nav-item mb-2"><a href="https://threefold.io" target="_blank" class="nav-link p-0 text-muted">ThreeFold</a></li>
|
||||
<li class="nav-item mb-2"><a href="https://threefold.io" target="_blank" class="nav-link p-0 text-muted">Mycelium</a></li>
|
||||
<li class="nav-item mb-2"><a href="https://github.com/threefoldtech" target="_blank" class="nav-link p-0 text-muted">TF9</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-center pt-4 mt-4 border-top">
|
||||
<p class="text-muted"> 2025 Project Mycelium. All rights reserved.</p>
|
||||
<p class="text-muted"> 2025 Mycelium Marketplace. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Shopping Cart - Project Mycelium{% endblock %}
|
||||
{% block title %}Shopping Cart - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container my-5">
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Changelog - Project Mycelium{% endblock %}
|
||||
{% block title %}Changelog - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container my-5">
|
||||
@@ -9,7 +9,7 @@
|
||||
<div class="d-flex align-items-center mb-4">
|
||||
<i class="bi bi-clock-history me-3" style="font-size: 2rem; color: #0066cc;"></i>
|
||||
<div>
|
||||
<h1 class="mb-1">Project Mycelium Changelog</h1>
|
||||
<h1 class="mb-1">Mycelium Marketplace Changelog</h1>
|
||||
<p class="text-muted mb-0">Latest updates and improvements to the platform</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -185,7 +185,7 @@
|
||||
<div class="feature-group">
|
||||
<h4 class="h5 text-primary mb-3"><i class="bi bi-server me-2"></i>Infrastructure</h4>
|
||||
<ul class="list-unstyled">
|
||||
<li class="mb-2"><i class="bi bi-plus-circle text-success me-2"></i>ThreeFold Grid integration</li>
|
||||
<li class="mb-2"><i class="bi bi-plus-circle text-success me-2"></i>Mycelium Grid integration</li>
|
||||
<li class="mb-2"><i class="bi bi-plus-circle text-success me-2"></i>Basic dashboard functionality</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@@ -1,11 +1,11 @@
|
||||
{% extends "dashboard/layout.html" %}
|
||||
|
||||
{% block title %}ThreeFold Dashboard - Application Provider{% endblock %}
|
||||
{% block title %}Mycelium Dashboard - Application Provider{% endblock %}
|
||||
|
||||
{% block dashboard_content %}
|
||||
<div class="my-4">
|
||||
<h1>Application Provider Dashboard</h1>
|
||||
<p class="lead">Develop, deploy, and manage applications for the ThreeFold ecosystem</p>
|
||||
<p class="lead">Develop, deploy, and manage applications for the Mycelium ecosystem</p>
|
||||
|
||||
<!-- Status Summary -->
|
||||
<div class="row mt-4">
|
||||
@@ -149,7 +149,7 @@
|
||||
<div class="card h-100">
|
||||
<div class="card-body">
|
||||
<h5><i class="bi bi-book me-2 text-primary"></i> Documentation</h5>
|
||||
<p>Access guides, tutorials, and API references for developing ThreeFold applications</p>
|
||||
<p>Access guides, tutorials, and API references for developing Mycelium applications</p>
|
||||
<a href="https://manual.threefold.io" target="_blank" class="btn btn-sm btn-outline-primary">
|
||||
<i class="bi bi-box-arrow-up-right me-1"></i>Browse Documentation
|
||||
</a>
|
||||
@@ -160,7 +160,7 @@
|
||||
<div class="card h-100">
|
||||
<div class="card-body">
|
||||
<h5><i class="bi bi-people me-2 text-info"></i> Developer Community</h5>
|
||||
<p>Connect with other ThreeFold application developers, share insights, and get help</p>
|
||||
<p>Connect with other Mycelium application developers, share insights, and get help</p>
|
||||
<a href="https://t.me/threefoldtesting" target="_blank" class="btn btn-sm btn-outline-info">
|
||||
<i class="bi bi-box-arrow-up-right me-1"></i>Join Community
|
||||
</a>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "dashboard/layout.html" %}
|
||||
|
||||
{% block title %}Shopping Cart - ThreeFold Dashboard{% endblock %}
|
||||
{% block title %}Shopping Cart - Mycelium Dashboard{% endblock %}
|
||||
|
||||
{% block dashboard_content %}
|
||||
<div class="my-4">
|
||||
@@ -73,7 +73,7 @@
|
||||
<!-- Wallet Balance Check -->
|
||||
<div class="wallet-status mb-3">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span>Your {{ display_currency | default(value="USD") }} Credits:</span>
|
||||
<span>Your {{ display_currency | default(value="MC") }} Credits:</span>
|
||||
<span class="fw-bold" id="userBalance">{{ currency_symbol | default(value="$") }}0.00</span>
|
||||
</div>
|
||||
<div class="balance-indicator mt-2" id="balanceIndicator">
|
||||
@@ -197,7 +197,7 @@
|
||||
<script id="hydration-dashboard-cart" type="application/json">
|
||||
{
|
||||
"currency_symbol": {{ currency_symbol | default(value="$") | json_encode() }},
|
||||
"display_currency": {{ display_currency | default(value="USD") | json_encode() }}
|
||||
"display_currency": {{ display_currency | default(value="MC") | json_encode() }}
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "dashboard/layout.html" %}
|
||||
|
||||
{% block title %}ThreeFold Dashboard - Overview{% endblock %}
|
||||
{% block title %}Mycelium Dashboard - Overview{% endblock %}
|
||||
|
||||
{% block dashboard_content %}
|
||||
<div class="my-4">
|
||||
@@ -50,7 +50,7 @@
|
||||
<h5 class="card-title">Wallet Balance</h5>
|
||||
<div class="d-flex justify-content-between align-items-end">
|
||||
<h2 class="mb-0" id="dashboardWalletBalance">{{ currency_symbol | default(value="$") }}{% if user_metrics is defined and user_metrics.wallet_balance is defined %}{{ user_metrics.wallet_balance | format_decimal(precision=2) }}{% else %}0{% endif %}</h2>
|
||||
<small class="text-muted">Credits (<span id="dashboardCurrencyCode">{{ display_currency | default(value="USD") }}</span>)</small>
|
||||
<small class="text-muted">Credits (<span id="dashboardCurrencyCode">{{ display_currency | default(value="MC") }}</span>)</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -103,7 +103,7 @@
|
||||
<div class="row mt-4">
|
||||
<div class="col-12">
|
||||
<h3>Your Roles</h3>
|
||||
<p>Manage your ThreeFold experience through different perspectives:</p>
|
||||
<p>Manage your Mycelium experience through different perspectives:</p>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3 mb-4">
|
||||
<div class="dashboard-card">
|
||||
@@ -266,7 +266,7 @@
|
||||
<!-- JSON hydration for dashboard charts -->
|
||||
<script type="application/json" id="dashboard-chart-data">
|
||||
{
|
||||
"displayCurrency": "{% if display_currency is defined and display_currency %}{{ display_currency }}{% else %}USD{% endif %}",
|
||||
"displayCurrency": "{% if display_currency is defined and display_currency %}{{ display_currency }}{% else %}MC{% endif %}",
|
||||
"resourceUtilization": {
|
||||
{% if user_metrics is defined and user_metrics.resource_utilization is defined %}
|
||||
"cpu": {{ user_metrics.resource_utilization.cpu }},
|
||||
|
@@ -224,15 +224,5 @@
|
||||
{% block scripts %}
|
||||
<script src="/static/js/dashboard_layout.js"></script>
|
||||
<script src="/static/js/messaging-system.js"></script>
|
||||
<script>
|
||||
// Dynamic user detection for messaging system
|
||||
try {
|
||||
// Initialize messaging system with dynamic user detection
|
||||
if (window.MessagingSystem) {
|
||||
window.MessagingSystem.initializeWithDynamicUser();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Failed to initialize messaging system:', error);
|
||||
}
|
||||
</script>
|
||||
<script src="/static/js/dashboard-layout-init.js"></script>
|
||||
{% endblock %}
|
@@ -1,6 +1,6 @@
|
||||
{% extends "dashboard/layout.html" %}
|
||||
|
||||
{% block title %}Order History - ThreeFold Dashboard{% endblock %}
|
||||
{% block title %}Order History - Mycelium Dashboard{% endblock %}
|
||||
|
||||
{% block dashboard_content %}
|
||||
<div class="my-4">
|
||||
@@ -194,7 +194,7 @@
|
||||
<script type="application/json" id="orders-hydration">
|
||||
{
|
||||
"currency_symbol": {{ currency_symbol | default(value='$') | json_encode() }},
|
||||
"display_currency": {{ display_currency | default(value='USD') | json_encode() }}
|
||||
"display_currency": {{ display_currency | default(value='MC') | json_encode() }}
|
||||
}
|
||||
</script>
|
||||
<script src="/static/js/dashboard_orders.js"></script>
|
||||
|
@@ -1,11 +1,11 @@
|
||||
{% extends "dashboard/layout.html" %}
|
||||
|
||||
{% block title %}ThreeFold Dashboard - Credits Pools{% endblock %}
|
||||
{% block title %}Mycelium Dashboard - Credits Pools{% endblock %}
|
||||
|
||||
{% block dashboard_content %}
|
||||
<div class="my-4">
|
||||
<h1>Credits Pools</h1>
|
||||
<p class="lead">Exchange currencies and tokens through ThreeFold liquidity pools</p>
|
||||
<p class="lead">Exchange currencies and tokens through Mycelium liquidity pools</p>
|
||||
|
||||
|
||||
<!-- Liquidity Pools Section -->
|
||||
@@ -49,7 +49,7 @@
|
||||
<h5 class="mb-0">Credits - TFT Pool</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="card-text">Exchange between USD Credits and ThreeFold Tokens (TFT).</p>
|
||||
<p class="card-text">Exchange between USD Credits and Mycelium Tokens (TFT).</p>
|
||||
<div class="d-flex justify-content-between align-items-center mb-3">
|
||||
<span class="text-muted">Current rate:</span>
|
||||
<span class="fw-bold exchange-rate">1 USD ≈ 5 TFT</span>
|
||||
@@ -106,7 +106,7 @@
|
||||
<div class="col-12">
|
||||
<div class="dashboard-section">
|
||||
<h3>Credits Staking</h3>
|
||||
<p>Stake your Credits to earn discounts and increase your reputation in the ThreeFold ecosystem</p>
|
||||
<p>Stake your Credits to earn discounts and increase your reputation in the Mycelium ecosystem</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6 mb-4">
|
||||
@@ -263,7 +263,7 @@
|
||||
<select class="form-select" id="paymentCurrency">
|
||||
<option value="USD" selected>USD</option>
|
||||
<option value="EUR">EUR</option>
|
||||
<option value="GBP">GBP</option>
|
||||
<option value="AED">AED</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
@@ -321,7 +321,7 @@
|
||||
<select class="form-select" id="receiveCurrency">
|
||||
<option value="USD" selected>USD</option>
|
||||
<option value="EUR">EUR</option>
|
||||
<option value="GBP">GBP</option>
|
||||
<option value="AED">AED</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "dashboard/layout.html" %}
|
||||
|
||||
{% block title %}ThreeFold Dashboard - Resource Provider{% endblock %}
|
||||
{% block title %}Mycelium Dashboard - Resource Provider{% endblock %}
|
||||
|
||||
{% block dashboard_content %}
|
||||
<div class="my-4">
|
||||
@@ -303,9 +303,12 @@
|
||||
</td>
|
||||
<td>
|
||||
<div class="btn-group btn-group-sm">
|
||||
<button class="btn btn-outline-primary" data-action="node.view" data-node-id="{{ node.id }}">
|
||||
<button class="btn btn-outline-primary" onclick="viewNodeDetails('{{ node.id }}')" title="View Details">
|
||||
<i class="bi bi-eye"></i>
|
||||
</button>
|
||||
<button class="btn btn-outline-danger" onclick="deleteNodeConfiguration('{{ node.id }}')" title="Delete">
|
||||
<i class="bi bi-trash"></i>
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -315,7 +318,7 @@
|
||||
<td colspan="9" class="text-center text-muted py-4">
|
||||
<i class="bi bi-nodes display-4 d-block mb-3"></i>
|
||||
<h5>No Nodes Added Yet</h5>
|
||||
<p>Add your first node from the ThreeFold Grid to start offering slices on the marketplace.</p>
|
||||
<p>Add your first node from the Mycelium Grid to start offering slices on the marketplace.</p>
|
||||
<button class="btn btn-success" data-bs-toggle="modal" data-bs-target="#addNodeModal">
|
||||
<i class="bi bi-plus-circle me-2"></i> Add Your First Node
|
||||
</button>
|
||||
@@ -520,13 +523,13 @@
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="addNodeModalLabel">Add Nodes from ThreeFold Grid</h5>
|
||||
<h5 class="modal-title" id="addNodeModalLabel">Add Nodes from Mycelium Grid</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="alert alert-info">
|
||||
<i class="bi bi-info-circle me-2"></i>
|
||||
<strong>Mycelium Grid Integration:</strong> Enter the Grid Node IDs of your physical Mycelium Nodes. Node specifications and location will be automatically fetched from the ThreeFold Grid.
|
||||
<strong>Mycelium Grid Integration:</strong> Enter the Grid Node IDs of your physical Mycelium Nodes. Node specifications and location will be automatically fetched from the Mycelium Grid.
|
||||
</div>
|
||||
|
||||
<!-- Node Input Mode Selection -->
|
||||
@@ -543,14 +546,14 @@
|
||||
|
||||
<!-- Single Node Input -->
|
||||
<div id="singleNodeInput" class="mb-4">
|
||||
<label for="gridNodeId" class="form-label">ThreeFold Grid Node ID</label>
|
||||
<label for="gridNodeId" class="form-label">Mycelium Grid Node ID</label>
|
||||
<input type="number" class="form-control" id="gridNodeId" placeholder="e.g., 8, 42, 1337" min="1">
|
||||
<small class="text-muted">Enter the ID of your node on the ThreeFold Grid</small>
|
||||
<small class="text-muted">Enter the ID of your node on the Mycelium Grid</small>
|
||||
</div>
|
||||
|
||||
<!-- Multiple Nodes Input -->
|
||||
<div id="multipleNodeInput" class="mb-4" style="display: none;">
|
||||
<label for="gridNodeIds" class="form-label">ThreeFold Grid Node IDs</label>
|
||||
<label for="gridNodeIds" class="form-label">Mycelium Grid Node IDs</label>
|
||||
<textarea class="form-control" id="gridNodeIds" rows="3" placeholder="Enter node IDs separated by commas or new lines e.g., 8, 42, 1337 or one per line"></textarea>
|
||||
<small class="text-muted">Enter multiple node IDs separated by commas or new lines</small>
|
||||
</div>
|
||||
@@ -1137,7 +1140,7 @@
|
||||
</ul>
|
||||
<div class="alert alert-info">
|
||||
<i class="bi bi-info-circle me-2"></i>
|
||||
<strong>Note:</strong> For grid nodes, this only removes the node from your dashboard. The physical node remains on the ThreeFold Grid.
|
||||
<strong>Note:</strong> For grid nodes, this only removes the node from your dashboard. The physical node remains on the Mycelium Grid.
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "dashboard/layout.html" %}
|
||||
|
||||
{% block title %}ThreeFold Dashboard - Service Provider{% endblock %}
|
||||
{% block title %}Mycelium Dashboard - Service Provider{% endblock %}
|
||||
|
||||
{% block head %}
|
||||
{{ super() }}
|
||||
@@ -390,7 +390,7 @@
|
||||
<div class="card-body">
|
||||
<div class="alert alert-info">
|
||||
<i class="bi bi-info-circle me-2"></i>
|
||||
Your service provider agreement with ThreeFold is active and in good standing.
|
||||
Your service provider agreement with Mycelium is active and in good standing.
|
||||
</div>
|
||||
<p><strong>Agreement Type:</strong> Standard Service Provider</p>
|
||||
<p><strong>Start Date:</strong> January 15, 2025</p>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Service Invoice - ThreeFold Dashboard</title>
|
||||
<title>Service Invoice - Mycelium Dashboard</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.0/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<style>
|
||||
@@ -90,8 +90,8 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark no-print">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="/">
|
||||
<img src="/static/images/logo_dark.png" alt="ThreeFold Logo" class="me-2">
|
||||
<span>ThreeFold Dashboard</span>
|
||||
<img src="/static/images/logo_dark.png" alt="Mycelium Logo" class="me-2">
|
||||
<span>Mycelium Dashboard</span>
|
||||
</a>
|
||||
<div class="navbar-nav ms-auto">
|
||||
<a class="nav-link" href="/dashboard">
|
||||
@@ -219,7 +219,7 @@
|
||||
<h6 class="text-muted mb-3">PAYMENT TERMS:</h6>
|
||||
<p class="mb-2">Payment is due within 30 days of invoice date.</p>
|
||||
<p class="mb-2">Please reference invoice number <strong>INV-{{ request.id }}</strong> with payment.</p>
|
||||
<p class="mb-0"><em>Thank you for choosing ThreeFold Grid services!</em></p>
|
||||
<p class="mb-0"><em>Thank you for choosing Mycelium Grid services!</em></p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="text-md-end">
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Service Request Report - ThreeFold Dashboard</title>
|
||||
<title>Service Request Report - Mycelium Dashboard</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.0/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<style>
|
||||
@@ -113,8 +113,8 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark no-print">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="/">
|
||||
<img src="/static/images/logo_dark.png" alt="ThreeFold Logo" class="me-2">
|
||||
<span>ThreeFold Dashboard</span>
|
||||
<img src="/static/images/logo_dark.png" alt="Mycelium Logo" class="me-2">
|
||||
<span>Mycelium Dashboard</span>
|
||||
</a>
|
||||
<div class="navbar-nav ms-auto">
|
||||
<a class="nav-link" href="/dashboard">
|
||||
|
@@ -418,6 +418,7 @@
|
||||
<option value="MC" {% if user_display_currency == "MC" %}selected{% endif %}>MC - Mycelium Credit</option>
|
||||
<option value="EUR" {% if user_display_currency == "EUR" %}selected{% endif %}>EUR - Euro</option>
|
||||
<option value="CAD" {% if user_display_currency == "CAD" %}selected{% endif %}>CAD - Canadian Dollar</option>
|
||||
<option value="AED" {% if user_display_currency == "AED" %}selected{% endif %}>AED - UAE Dirham</option>
|
||||
</select>
|
||||
<small class="text-muted">Choose your preferred currency for displaying prices in the marketplace</small>
|
||||
</div>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "dashboard/layout.html" %}
|
||||
|
||||
{% block title %}ThreeFold Dashboard - User{% endblock %}
|
||||
{% block title %}Mycelium Dashboard - User{% endblock %}
|
||||
|
||||
{% block dashboard_content %}
|
||||
<div class="my-4">
|
||||
|
@@ -20,7 +20,7 @@
|
||||
{{ currency_symbol | default(value="$") }}0.00
|
||||
{% endif %}
|
||||
</h2>
|
||||
<small class="text-light">Credits ({{ display_currency | default(value="USD") }})</small>
|
||||
<small class="text-light">Credits ({{ display_currency | default(value="MC") }})</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -270,7 +270,7 @@
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<div class="alert alert-info">
|
||||
<strong>Rate:</strong> 1 Credit = {{ currency_symbol | default(value="$") }}1 {{ display_currency | default(value="USD") }}<br>
|
||||
<strong>Rate:</strong> 1 Credit = {{ currency_symbol | default(value="⚡") }}1 {{ display_currency | default(value="MC") }}<br>
|
||||
<strong>Total Cost:</strong> {{ currency_symbol | default(value="$") }}<span id="totalCost">0.00</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -435,7 +435,7 @@
|
||||
<script type="application/json" id="wallet-hydration">
|
||||
{
|
||||
"currency_symbol": {{ currency_symbol | default(value='$') | json_encode() }},
|
||||
"display_currency": {{ display_currency | default(value='USD') | json_encode() }}
|
||||
"display_currency": {{ display_currency | default(value='MC') | json_encode() }}
|
||||
}
|
||||
</script>
|
||||
<script src="/static/js/dashboard_wallet.js"></script>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}ThreeFold Dashboard - Welcome{% endblock %}
|
||||
{% block title %}Mycelium Dashboard - Welcome{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container py-5">
|
||||
@@ -9,17 +9,17 @@
|
||||
<div class="card shadow-lg border-0">
|
||||
<div class="card-body p-5">
|
||||
<div class="text-center mb-5">
|
||||
<h1 class="display-4 fw-bold text-primary">Welcome to ThreeFold Dashboard</h1>
|
||||
<p class="lead text-muted">Your central hub for managing your ThreeFold experience</p>
|
||||
<h1 class="display-4 fw-bold text-primary">Welcome to Mycelium Dashboard</h1>
|
||||
<p class="lead text-muted">Your central hub for managing your Mycelium experience</p>
|
||||
</div>
|
||||
|
||||
<div class="row mb-5 align-items-center">
|
||||
<div class="col-md-6 text-center">
|
||||
<img src="/static/images/logo_light.png" alt="ThreeFold Logo" class="img-fluid" style="max-width: 300px;">
|
||||
<img src="/static/images/logo_light.png" alt="Mycelium Logo" class="img-fluid" style="max-width: 300px;">
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h2>Access Your Dashboard</h2>
|
||||
<p class="mb-4">The ThreeFold Dashboard gives you all the tools to manage your resources, monitor your nodes, deploy applications, and more - all in one place.</p>
|
||||
<p class="mb-4">The Mycelium Dashboard gives you all the tools to manage your resources, monitor your nodes, deploy applications, and more - all in one place.</p>
|
||||
|
||||
<div class="d-grid gap-3">
|
||||
<a href="/login" class="btn btn-primary btn-lg">
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "docs/layout.html" %}
|
||||
|
||||
{% block title %}API Documentation - Project Mycelium{% endblock %}
|
||||
{% block title %}API Documentation - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block docs_content %}
|
||||
<style>
|
||||
@@ -28,12 +28,12 @@
|
||||
}
|
||||
</style>
|
||||
<div class="my-4">
|
||||
<h1>Project Mycelium API</h1>
|
||||
<p class="lead">Integrate directly with the Project Mycelium through our REST API.</p>
|
||||
<h1>Mycelium Marketplace API</h1>
|
||||
<p class="lead">Integrate directly with the Mycelium Marketplace through our REST API.</p>
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>API Overview</h2>
|
||||
<p>The Project Mycelium API provides programmatic access to marketplace resources and operations. This allows developers to build applications that interface with the marketplace ecosystem, deploy and manage resources, and perform transactions using USD Credits.</p>
|
||||
<p>The Mycelium Marketplace API provides programmatic access to marketplace resources and operations. This allows developers to build applications that interface with the marketplace ecosystem, deploy and manage resources, and perform transactions using USD Credits.</p>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<div class="d-flex">
|
||||
@@ -52,7 +52,7 @@
|
||||
<h2>Authentication</h2>
|
||||
<p>The API uses token-based authentication. To obtain an API token:</p>
|
||||
<ol>
|
||||
<li>Log in to your Project Mycelium account</li>
|
||||
<li>Log in to your Mycelium Marketplace account</li>
|
||||
<li>Navigate to Settings > API Access</li>
|
||||
<li>Generate a new API token with the required scopes</li>
|
||||
</ol>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "docs/layout.html" %}
|
||||
|
||||
{% block title %}Agentic Apps - Project Mycelium{% endblock %}
|
||||
{% block title %}Agentic Apps - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block docs_content %}
|
||||
<div class="my-4">
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Overview</h2>
|
||||
<p>ThreeFold Agentic Apps represent a new approach to application deployment that balances ease of use with digital sovereignty. These pre-configured, self-healing applications are designed to run on the ThreeFold Grid while allowing users to maintain complete control over their infrastructure and data.</p>
|
||||
<p>Mycelium Agentic Apps represent a new approach to application deployment that balances ease of use with digital sovereignty. These pre-configured, self-healing applications are designed to run on the Mycelium Grid while allowing users to maintain complete control over their infrastructure and data.</p>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<div class="d-flex">
|
||||
@@ -17,8 +17,8 @@
|
||||
<i class="bi bi-info-circle-fill fs-3"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="alert-heading">The ThreeFold Difference</h5>
|
||||
<p class="mb-0">Unlike traditional SaaS offerings that require surrendering control of your data to the provider, ThreeFold Agentic Apps run on compute resources that remain under your sovereign control, while the application provider manages only the application layer.</p>
|
||||
<h5 class="alert-heading">The Mycelium Difference</h5>
|
||||
<p class="mb-0">Unlike traditional SaaS offerings that require surrendering control of your data to the provider, Mycelium Agentic Apps run on compute resources that remain under your sovereign control, while the application provider manages only the application layer.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Application Categories</h2>
|
||||
<p>The Project Mycelium offers a diverse range of applications across multiple categories:</p>
|
||||
<p>The Mycelium Marketplace offers a diverse range of applications across multiple categories:</p>
|
||||
|
||||
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 g-4 mb-4">
|
||||
<div class="col">
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>How It Works</h2>
|
||||
<p>Agentic Apps on the Project Mycelium function through a unique partnership model between users and application providers:</p>
|
||||
<p>Agentic Apps on the Mycelium Marketplace function through a unique partnership model between users and application providers:</p>
|
||||
|
||||
<div class="row align-items-center mb-4">
|
||||
<div class="col-md-6">
|
||||
@@ -99,7 +99,7 @@
|
||||
<li class="list-group-item d-flex">
|
||||
<div>
|
||||
<strong>Resource Provision</strong>
|
||||
<p class="mb-0 text-muted">You allocate compute slices from your ThreeFold account to run the application.</p>
|
||||
<p class="mb-0 text-muted">You allocate compute slices from your Mycelium account to run the application.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="list-group-item d-flex">
|
||||
@@ -139,7 +139,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Self-Healing Architecture</h2>
|
||||
<p>All applications in the Project Mycelium feature self-healing capabilities to ensure reliability and minimal downtime:</p>
|
||||
<p>All applications in the Mycelium Marketplace feature self-healing capabilities to ensure reliability and minimal downtime:</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
@@ -193,7 +193,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Application Provider Certification</h2>
|
||||
<p>Solution providers in the Project Mycelium undergo a certification process to ensure quality and reliability:</p>
|
||||
<p>Solution providers in the Mycelium Marketplace undergo a certification process to ensure quality and reliability:</p>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-bordered">
|
||||
@@ -248,7 +248,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Deployment Process</h2>
|
||||
<p>Deploying an application from the Project Mycelium is a straightforward process:</p>
|
||||
<p>Deploying an application from the Mycelium Marketplace is a straightforward process:</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-3 col-md-6">
|
||||
|
@@ -1,15 +1,15 @@
|
||||
{% extends "docs/layout.html" %}
|
||||
|
||||
{% block title %}Certification - Project Mycelium{% endblock %}
|
||||
{% block title %}Certification - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block docs_content %}
|
||||
<div class="my-4">
|
||||
<h1>Certification</h1>
|
||||
<p class="lead">Understanding the quality assurance and trust framework in the ThreeFold ecosystem.</p>
|
||||
<p class="lead">Understanding the quality assurance and trust framework in the Mycelium ecosystem.</p>
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Overview</h2>
|
||||
<p>The ThreeFold Certification framework establishes trust and quality standards throughout the ecosystem. This multi-layered certification system applies to hardware, software, and service providers, ensuring reliability, security, and compatibility across the ThreeFold Grid and Marketplace.</p>
|
||||
<p>The Mycelium Certification framework establishes trust and quality standards throughout the ecosystem. This multi-layered certification system applies to hardware, software, and service providers, ensuring reliability, security, and compatibility across the Mycelium Grid and Marketplace.</p>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<div class="d-flex">
|
||||
@@ -18,7 +18,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="alert-heading">Key Concept</h5>
|
||||
<p class="mb-0">Certification in the ThreeFold ecosystem is designed to build trust in a decentralized network where participants may not know each other directly. Through transparent verification processes and clear standards, certification provides assurance of quality, security, and compatibility.</p>
|
||||
<p class="mb-0">Certification in the Mycelium ecosystem is designed to build trust in a decentralized network where participants may not know each other directly. Through transparent verification processes and clear standards, certification provides assurance of quality, security, and compatibility.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Certification Types</h2>
|
||||
<p>The ThreeFold ecosystem incorporates several types of certification tailored to different components:</p>
|
||||
<p>The Mycelium ecosystem incorporates several types of certification tailored to different components:</p>
|
||||
|
||||
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 g-4 mb-4">
|
||||
<div class="col">
|
||||
@@ -41,7 +41,7 @@
|
||||
<div class="card h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><i class="bi bi-window me-2 text-primary"></i>Application Certification</h5>
|
||||
<p class="card-text">Validation of software applications in the marketplace to confirm security, performance, and compatibility with ThreeFold infrastructure.</p>
|
||||
<p class="card-text">Validation of software applications in the marketplace to confirm security, performance, and compatibility with Mycelium infrastructure.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -49,7 +49,7 @@
|
||||
<div class="card h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><i class="bi bi-person-badge me-2 text-primary"></i>Provider Certification</h5>
|
||||
<p class="card-text">Verification of service providers' expertise, reliability, and adherence to ThreeFold standards and best practices.</p>
|
||||
<p class="card-text">Verification of service providers' expertise, reliability, and adherence to Mycelium standards and best practices.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -82,7 +82,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Certification Levels</h2>
|
||||
<p>The ThreeFold ecosystem uses tiered certification levels to indicate different standards of verification:</p>
|
||||
<p>The Mycelium ecosystem uses tiered certification levels to indicate different standards of verification:</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
@@ -216,7 +216,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Certification Standards</h2>
|
||||
<p>ThreeFold certification standards are designed to ensure consistent quality across the ecosystem:</p>
|
||||
<p>Mycelium certification standards are designed to ensure consistent quality across the ecosystem:</p>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-bordered">
|
||||
@@ -308,7 +308,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Benefits of Certification</h2>
|
||||
<p>Certification provides substantial advantages to all participants in the ThreeFold ecosystem:</p>
|
||||
<p>Certification provides substantial advantages to all participants in the Mycelium ecosystem:</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
@@ -376,7 +376,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Certification Authorities</h2>
|
||||
<p>The ThreeFold certification system involves multiple layers of validation:</p>
|
||||
<p>The Mycelium certification system involves multiple layers of validation:</p>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-md-6 col-lg-3">
|
||||
@@ -396,7 +396,7 @@
|
||||
<div class="mb-3">
|
||||
<i class="bi bi-shield-fill fs-1 text-success"></i>
|
||||
</div>
|
||||
<h5 class="card-title">ThreeFold Teams</h5>
|
||||
<h5 class="card-title">Mycelium Teams</h5>
|
||||
<p class="card-text">Core teams responsible for standard verification processes</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -432,7 +432,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="alert-heading">Decentralized Certification</h5>
|
||||
<p class="mb-0">The ThreeFold certification system is designed to be increasingly decentralized over time. The ultimate goal is to create a self-sustaining network of independent certifiers who maintain the quality standards of the ecosystem while preventing centralized control.</p>
|
||||
<p class="mb-0">The Mycelium certification system is designed to be increasingly decentralized over time. The ultimate goal is to create a self-sustaining network of independent certifiers who maintain the quality standards of the ecosystem while preventing centralized control.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -456,7 +456,7 @@
|
||||
<div class="card mb-3">
|
||||
<div class="card-body">
|
||||
<h5><i class="bi bi-qr-code me-2 text-secondary"></i>Verification Codes</h5>
|
||||
<p>Each certified entity receives a unique verification code that can be validated through the ThreeFold platform.</p>
|
||||
<p>Each certified entity receives a unique verification code that can be validated through the Mycelium platform.</p>
|
||||
<a href="#" class="btn btn-sm btn-outline-secondary">Verify Code</a>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -1,11 +1,11 @@
|
||||
{% extends "docs/layout.html" %}
|
||||
|
||||
{% block title %}Compute Resources - Project Mycelium{% endblock %}
|
||||
{% block title %}Compute Resources - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block docs_content %}
|
||||
<div class="my-4">
|
||||
<h1>Compute Resources (Slices)</h1>
|
||||
<p class="lead">Understanding the core compute resources available in the Project Mycelium.</p>
|
||||
<p class="lead">Understanding the core compute resources available in the Mycelium Marketplace.</p>
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Overview</h2>
|
||||
@@ -18,7 +18,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="alert-heading">Key Concept</h5>
|
||||
<p class="mb-0">Unlike traditional cloud computing models, ThreeFold's compute resources are fully sovereign, meaning you maintain complete control and ownership over your resources and the workloads deployed on them.</p>
|
||||
<p class="mb-0">Unlike traditional cloud computing models, Mycelium's compute resources are fully sovereign, meaning you maintain complete control and ownership over your resources and the workloads deployed on them.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -191,7 +191,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Resource Management</h2>
|
||||
<p>The Project Mycelium provides comprehensive tools for managing your compute resources:</p>
|
||||
<p>The Mycelium Marketplace provides comprehensive tools for managing your compute resources:</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-4 col-md-6">
|
||||
|
85
src/views/docs/credits.html
Normal file
85
src/views/docs/credits.html
Normal file
@@ -0,0 +1,85 @@
|
||||
{% extends "docs/layout.html" %}
|
||||
|
||||
{% block title %}Mycelium Credits - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block docs_content %}
|
||||
<div class="docs-content">
|
||||
<h1>Mycelium Credits</h1>
|
||||
<p class="lead">Mycelium Credits (MC) is the foundation of our marketplace's credit-based economy, providing a seamless and flexible currency system for all transactions.</p>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<h5>MC as Default Currency</h5>
|
||||
<p><strong>MC (Mycelium Credits)</strong> is the default base currency for all new users. 1 MC = 1 USD for familiar pricing - you see equivalent values in your preferred display currency.</p>
|
||||
</div>
|
||||
|
||||
<h2>What is Mycelium Credits?</h2>
|
||||
<p>Mycelium Credits represents the core of our marketplace's innovative credit economy:</p>
|
||||
<ul>
|
||||
<li><strong>Base Currency:</strong> All internal calculations and balances are maintained in MC</li>
|
||||
<li><strong>Flexible Display:</strong> View prices and balances in your preferred currency (MC, USD, EUR, CAD, AED)</li>
|
||||
<li><strong>1:1 Exchange Rate:</strong> For USD users, 1 MC = 1 USD - no conversion confusion</li>
|
||||
<li><strong>Credit Foundation:</strong> Built for future expansion of credit-based marketplace features</li>
|
||||
</ul>
|
||||
|
||||
<h2>Currency Flexibility</h2>
|
||||
<p>While MC is our base currency, we understand users have different preferences:</p>
|
||||
<ul>
|
||||
<li><strong>Display Preference:</strong> Choose how you want to see prices and balances</li>
|
||||
<li><strong>Real-time Conversion:</strong> Automatic conversion for non-MC currencies</li>
|
||||
<li><strong>Consistent Balance:</strong> Your credit balance remains the same regardless of display currency</li>
|
||||
<li><strong>Supported Currencies:</strong> MC, USD, EUR, CAD, AED</li>
|
||||
</ul>
|
||||
|
||||
<h2>How to Change Your Currency Preference</h2>
|
||||
<p>Changing your display currency is simple and can be done at any time:</p>
|
||||
<ol>
|
||||
<li>Navigate to your <a href="/dashboard/settings">Dashboard Settings</a></li>
|
||||
<li>Find the "Currency Preference" section</li>
|
||||
<li>Select your preferred display currency from the dropdown</li>
|
||||
<li>Save your changes - the update applies immediately</li>
|
||||
</ol>
|
||||
|
||||
<h2>Auto Top-up</h2>
|
||||
<p>Configure automatic credit purchasing for seamless marketplace experience:</p>
|
||||
<ol>
|
||||
<li>Go to your <a href="/dashboard/wallet">Wallet</a></li>
|
||||
<li>Enable Auto Top-up in the settings section</li>
|
||||
<li>Set your threshold (e.g., when credits fall below 10 MC)</li>
|
||||
<li>Set your top-up amount (e.g., purchase 25 MC when triggered)</li>
|
||||
<li>Choose your payment method</li>
|
||||
</ol>
|
||||
|
||||
<h2>Versatile Purchase Options</h2>
|
||||
<p>The marketplace offers two convenient ways to purchase products:</p>
|
||||
<ul>
|
||||
<li><strong>Buy Now:</strong> Instant one-click purchase with automatic balance management and auto top-up integration</li>
|
||||
<li><strong>Add to Cart:</strong> Traditional shopping cart experience for purchasing multiple items together</li>
|
||||
</ul>
|
||||
|
||||
<div class="alert alert-tip">
|
||||
<strong>Best of Both Worlds:</strong> Use "Buy Now" for quick single purchases, or "Add to Cart" when you want to compare multiple products or make bulk purchases.
|
||||
</div>
|
||||
|
||||
<h2>Technical Details</h2>
|
||||
<p>For developers and advanced users:</p>
|
||||
<ul>
|
||||
<li><strong>Base Currency:</strong> All marketplace operations use MC internally</li>
|
||||
<li><strong>Display Layer:</strong> Currency preference affects only the presentation layer</li>
|
||||
<li><strong>API Consistency:</strong> Internal APIs work with MC values</li>
|
||||
<li><strong>Exchange Rates:</strong> Real-time rates for non-MC display currencies</li>
|
||||
</ul>
|
||||
|
||||
<h2>Getting Started with MC</h2>
|
||||
<ol>
|
||||
<li>Create your Mycelium Marketplace account (defaults to MC)</li>
|
||||
<li>Add credits to your wallet (purchased in your preferred currency)</li>
|
||||
<li>Browse the marketplace (prices shown in your display currency)</li>
|
||||
<li>Click "Buy Now" for instant purchases</li>
|
||||
<li>Change currency preference anytime in <a href="/dashboard/settings">Settings</a></li>
|
||||
</ol>
|
||||
|
||||
<div class="alert alert-success">
|
||||
<strong>Seamless Transition:</strong> Existing USD users experience no functional changes. Your balance and purchasing power remain identical.
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
@@ -1,15 +1,15 @@
|
||||
{% extends "docs/layout.html" %}
|
||||
|
||||
{% block title %}Mycelium Gateways - Project Mycelium{% endblock %}
|
||||
{% block title %}Mycelium Gateways - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block docs_content %}
|
||||
<div class="my-4">
|
||||
<h1>Mycelium Gateways</h1>
|
||||
<p class="lead">Comprehensive guide to internet connectivity services in the ThreeFold ecosystem.</p>
|
||||
<p class="lead">Comprehensive guide to internet connectivity services in the Mycelium ecosystem.</p>
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Overview</h2>
|
||||
<p>Mycelium Gateways are distributed network access points that provide secure, peer-to-peer internet connectivity services within the ThreeFold ecosystem. These gateways facilitate routing, name resolution, and secure access to resources across the network.</p>
|
||||
<p>Mycelium Gateways are distributed network access points that provide secure, peer-to-peer internet connectivity services within the Mycelium ecosystem. These gateways facilitate routing, name resolution, and secure access to resources across the network.</p>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<div class="d-flex">
|
||||
@@ -31,7 +31,7 @@
|
||||
<div class="card h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><i class="bi bi-globe me-2 text-primary"></i>Internet Access</h5>
|
||||
<p class="card-text">Provide secure connection points between the ThreeFold Grid and the traditional internet.</p>
|
||||
<p class="card-text">Provide secure connection points between the Mycelium Grid and the traditional internet.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -1,15 +1,15 @@
|
||||
{% extends "docs/layout.html" %}
|
||||
|
||||
{% block title %}Getting Started - Project Mycelium{% endblock %}
|
||||
{% block title %}Getting Started - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block docs_content %}
|
||||
<div class="my-4">
|
||||
<h1>Getting Started with Project Mycelium</h1>
|
||||
<p class="lead">A step-by-step guide to begin your journey with the ThreeFold ecosystem.</p>
|
||||
<h1>Getting Started with Mycelium Marketplace</h1>
|
||||
<p class="lead">A step-by-step guide to begin your journey with the Mycelium ecosystem.</p>
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Welcome to Project Mycelium</h2>
|
||||
<p>This guide will help you get started with the Project Mycelium platform, covering everything from account creation to making your first transaction.</p>
|
||||
<h2>Welcome to Mycelium Marketplace</h2>
|
||||
<p>This guide will help you get started with the Mycelium Marketplace platform, covering everything from account creation to making your first transaction.</p>
|
||||
</div>
|
||||
|
||||
<div class="doc-section">
|
||||
@@ -17,7 +17,7 @@
|
||||
<div class="card mb-4">
|
||||
<div class="card-body">
|
||||
<h5 class="mb-3"><i class="bi bi-person-plus me-2 text-primary"></i>Registration Process</h5>
|
||||
<p>Creating an account on the Project Mycelium is simple and straightforward:</p>
|
||||
<p>Creating an account on the Mycelium Marketplace is simple and straightforward:</p>
|
||||
<ol>
|
||||
<li>Navigate to the <a href="/register">Registration Page</a></li>
|
||||
<li>Enter your email address and create a secure password</li>
|
||||
@@ -26,7 +26,7 @@
|
||||
</ol>
|
||||
<div class="alert alert-info">
|
||||
<i class="bi bi-info-circle me-2"></i>
|
||||
<strong>Note:</strong> If you already have a ThreeFold Connect identity, you can use it to sign in directly.
|
||||
<strong>Note:</strong> If you already have a Mycelium Connect identity, you can use it to sign in directly.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -1,11 +1,11 @@
|
||||
{% extends "docs/layout.html" %}
|
||||
|
||||
{% block title %}Documentation - Project Mycelium{% endblock %}
|
||||
{% block title %}Documentation - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block docs_content %}
|
||||
<div class="my-4">
|
||||
<h1>Project Mycelium Documentation</h1>
|
||||
<p class="lead">Welcome to the comprehensive guide to using the Project Mycelium platform.</p>
|
||||
<h1>Mycelium Marketplace Documentation</h1>
|
||||
<p class="lead">Welcome to the comprehensive guide to using the Mycelium Marketplace platform.</p>
|
||||
|
||||
<div class="alert alert-info mb-4">
|
||||
<div class="d-flex">
|
||||
@@ -14,7 +14,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="alert-heading">Documentation Overview</h5>
|
||||
<p>This documentation provides detailed information about the Project Mycelium, its components, and how to effectively use the platform.</p>
|
||||
<p>This documentation provides detailed information about the Mycelium Marketplace, its components, and how to effectively use the platform.</p>
|
||||
<p>Use the sidebar navigation to explore different sections of the documentation.</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Introduction</h2>
|
||||
<p>The Project Mycelium is an all-in-one platform facilitating the exchange of value through the USD credits system. It connects providers and users, enabling the discovery, acquisition, and management of various resources and services within a decentralized ecosystem.</p>
|
||||
<p>The Mycelium Marketplace is an all-in-one platform facilitating the exchange of value through the USD credits system. It connects providers and users, enabling the discovery, acquisition, and management of various resources and services within a decentralized ecosystem.</p>
|
||||
<p>Our vision is a world where internet infrastructure and services are distributed, secure, and maintain user sovereignty. The marketplace is our solution to bring this vision to life, providing a platform where anyone can access or provide digital resources in a fair and transparent way.</p>
|
||||
</div>
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Getting Started</h2>
|
||||
<p>Ready to dive in? Here's how to get started with the Project Mycelium:</p>
|
||||
<p>Ready to dive in? Here's how to get started with the Mycelium Marketplace:</p>
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="card mb-4">
|
||||
@@ -127,7 +127,7 @@
|
||||
<i class="bi bi-person-plus-fill fs-1 text-primary"></i>
|
||||
</div>
|
||||
<h5 class="card-title">1. Create an Account</h5>
|
||||
<p class="card-text">Sign up and verify your identity to join the ThreeFold ecosystem.</p>
|
||||
<p class="card-text">Sign up and verify your identity to join the Mycelium ecosystem.</p>
|
||||
<a href="/register" class="btn btn-outline-primary mt-2">Register Now</a>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -71,8 +71,8 @@
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if active_section == 'credits' %}active{% endif %}" href="/docs/credits">
|
||||
<i class="bi bi-currency-dollar me-1"></i>
|
||||
USD Credits
|
||||
<i class="bi bi-lightning-charge me-1"></i>
|
||||
Mycelium Credits
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
|
@@ -1,11 +1,11 @@
|
||||
{% extends "docs/layout.html" %}
|
||||
|
||||
{% block title %}Mycelium Nodes Documentation - Project Mycelium{% endblock %}
|
||||
{% block title %}Mycelium Nodes Documentation - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block docs_content %}
|
||||
<div class="my-4">
|
||||
<h1>Mycelium Nodes</h1>
|
||||
<p class="lead">Physical computing hardware that can be bought and sold within the Project Mycelium using USD Credits.</p>
|
||||
<p class="lead">Physical computing hardware that can be bought and sold within the Mycelium Marketplace using USD Credits.</p>
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Overview</h2>
|
||||
@@ -351,7 +351,7 @@
|
||||
<div class="card bg-light mt-5">
|
||||
<div class="card-body">
|
||||
<h2><i class="bi bi-question-circle me-2"></i>Ready to Buy or Sell Mycelium Nodes?</h2>
|
||||
<p class="lead">Visit the Project Mycelium Mycelium Nodes section to start exploring options.</p>
|
||||
<p class="lead">Visit the Mycelium Marketplace Mycelium Nodes section to start exploring options.</p>
|
||||
<div class="mt-3">
|
||||
<a href="/marketplace/mycelium_nodes" class="btn btn-primary me-2">Explore Mycelium Nodes Marketplace</a>
|
||||
<a href="/docs" class="btn btn-outline-secondary">Back to Documentation</a>
|
||||
|
@@ -1,15 +1,15 @@
|
||||
{% extends "docs/layout.html" %}
|
||||
|
||||
{% block title %}Human Energy Services - Project Mycelium{% endblock %}
|
||||
{% block title %}Human Energy Services - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block docs_content %}
|
||||
<div class="my-4">
|
||||
<h1>Human Energy Services</h1>
|
||||
<p class="lead">Professional technical services available through the Project Mycelium.</p>
|
||||
<p class="lead">Professional technical services available through the Mycelium Marketplace.</p>
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Overview</h2>
|
||||
<p>Human Energy Services represent the human expertise component of the ThreeFold ecosystem. These services connect professionals with specialized technical skills to users who need assistance with projects, deployments, and optimizations. Unlike traditional freelance marketplaces, Human Energy Services are fully integrated into the ThreeFold ecosystem, using USD Credits for payments and focusing on technical services relevant to the ThreeFold Grid.</p>
|
||||
<p>Human Energy Services represent the human expertise component of the Mycelium ecosystem. These services connect professionals with specialized technical skills to users who need assistance with projects, deployments, and optimizations. Unlike traditional freelance marketplaces, Human Energy Services are fully integrated into the Mycelium ecosystem, using USD Credits for payments and focusing on technical services relevant to the Mycelium Grid.</p>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<div class="d-flex">
|
||||
@@ -18,7 +18,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="alert-heading">Key Concept</h5>
|
||||
<p class="mb-0">Human Energy Services acknowledge that technological solutions sometimes require human expertise. By integrating these services directly into the marketplace, ThreeFold creates a complete ecosystem where both automated and human-delivered solutions are available with the same seamless experience.</p>
|
||||
<p class="mb-0">Human Energy Services acknowledge that technological solutions sometimes require human expertise. By integrating these services directly into the marketplace, Mycelium creates a complete ecosystem where both automated and human-delivered solutions are available with the same seamless experience.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -118,7 +118,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Provider Certification</h2>
|
||||
<p>Service providers in the ThreeFold ecosystem undergo a certification process to ensure quality and reliability:</p>
|
||||
<p>Service providers in the Mycelium ecosystem undergo a certification process to ensure quality and reliability:</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
@@ -166,7 +166,7 @@
|
||||
<li>Expert-level skills validation</li>
|
||||
<li>Proven track record</li>
|
||||
<li>Quality assurance guarantees</li>
|
||||
<li>ThreeFold certification exam</li>
|
||||
<li>Mycelium certification exam</li>
|
||||
</ul>
|
||||
<p class="text-muted small mt-3">Certified providers receive featured placement, higher rates, and access to enterprise projects.</p>
|
||||
</div>
|
||||
@@ -291,7 +291,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="alert-heading">Dispute Resolution</h5>
|
||||
<p class="mb-0">In case of disagreements about deliverable quality or scope, the Project Mycelium offers a structured dispute resolution process. This involves neutral third-party evaluation based on the agreed statement of work. Make sure to clearly document expectations before beginning any service engagement.</p>
|
||||
<p class="mb-0">In case of disagreements about deliverable quality or scope, the Mycelium Marketplace offers a structured dispute resolution process. This involves neutral third-party evaluation based on the agreed statement of work. Make sure to clearly document expectations before beginning any service engagement.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -365,7 +365,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Becoming a Service Provider</h2>
|
||||
<p>If you have valuable technical skills, you can join the ThreeFold ecosystem as a service provider:</p>
|
||||
<p>If you have valuable technical skills, you can join the Mycelium ecosystem as a service provider:</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
@@ -410,7 +410,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="alert-heading">Provider Resources</h5>
|
||||
<p class="mb-0">ThreeFold provides extensive resources to help service providers succeed, including training materials, best practices guides, contract templates, and client management tools. Explore the <a href="#" class="alert-link">Provider Resources</a> area to learn more.</p>
|
||||
<p class="mb-0">Mycelium provides extensive resources to help service providers succeed, including training materials, best practices guides, contract templates, and client management tools. Explore the <a href="#" class="alert-link">Provider Resources</a> area to learn more.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -1,11 +1,11 @@
|
||||
{% extends "docs/layout.html" %}
|
||||
|
||||
{% block title %}Slices - Project Mycelium{% endblock %}
|
||||
{% block title %}Slices - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block docs_content %}
|
||||
<div class="my-4">
|
||||
<h1>Slices</h1>
|
||||
<p class="lead">Understanding the fundamental unit of compute capacity in the ThreeFold ecosystem.</p>
|
||||
<p class="lead">Understanding the fundamental unit of compute capacity in the Mycelium ecosystem.</p>
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Overview</h2>
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Slice Resource Units</h2>
|
||||
<p>ThreeFold uses standardized units to measure and quantify the resources in each slice:</p>
|
||||
<p>Mycelium uses standardized units to measure and quantify the resources in each slice:</p>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-bordered">
|
||||
@@ -316,7 +316,7 @@
|
||||
|
||||
<div class="doc-section">
|
||||
<h2>Managing Slices</h2>
|
||||
<p>The Project Mycelium provides several tools for managing your slices:</p>
|
||||
<p>The Mycelium Marketplace provides several tools for managing your slices:</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
|
@@ -1,52 +0,0 @@
|
||||
{% extends "docs/layout.html" %}
|
||||
|
||||
{% block title %}USD Credits - Project Mycelium{% endblock %}
|
||||
|
||||
{% block docs_content %}
|
||||
<div class="docs-content">
|
||||
<h1>USD Credits</h1>
|
||||
<p class="lead">Project Mycelium uses a simple USD credits system for all transactions.</p>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<h5>Simple and Intuitive</h5>
|
||||
<p>1 Credit = $1 USD. No complex conversions or confusing terminology.</p>
|
||||
</div>
|
||||
|
||||
<h2>How Credits Work</h2>
|
||||
<ul>
|
||||
<li><strong>Direct USD Pricing:</strong> All products are priced in clear USD amounts</li>
|
||||
<li><strong>Easy Top-up:</strong> Add credits to your wallet with standard payment methods</li>
|
||||
<li><strong>Auto Top-up:</strong> Automatically purchase credits when your balance gets low</li>
|
||||
<li><strong>One-Click Purchasing:</strong> Buy products instantly with the "Buy Now" button</li>
|
||||
</ul>
|
||||
|
||||
<h2>Auto Top-up</h2>
|
||||
<p>Configure automatic credit purchasing for seamless marketplace experience:</p>
|
||||
<ol>
|
||||
<li>Go to your <a href="/dashboard/wallet">Wallet</a></li>
|
||||
<li>Enable Auto Top-up in the settings section</li>
|
||||
<li>Set your threshold (e.g., when credits fall below $10)</li>
|
||||
<li>Set your top-up amount (e.g., purchase $25 when triggered)</li>
|
||||
<li>Choose your payment method</li>
|
||||
</ol>
|
||||
|
||||
<h2>Versatile Purchase Options</h2>
|
||||
<p>The marketplace offers two convenient ways to purchase products:</p>
|
||||
<ul>
|
||||
<li><strong>Buy Now:</strong> Instant one-click purchase with automatic balance management and auto top-up integration</li>
|
||||
<li><strong>Add to Cart:</strong> Traditional shopping cart experience for purchasing multiple items together</li>
|
||||
</ul>
|
||||
|
||||
<div class="alert alert-tip">
|
||||
<strong>Best of Both Worlds:</strong> Use "Buy Now" for quick single purchases, or "Add to Cart" when you want to compare multiple products or make bulk purchases.
|
||||
</div>
|
||||
|
||||
<h2>Getting Started</h2>
|
||||
<ol>
|
||||
<li>Create your Project Mycelium account</li>
|
||||
<li>Add credits to your wallet</li>
|
||||
<li>Browse the marketplace</li>
|
||||
<li>Click "Buy Now" for instant purchases</li>
|
||||
</ol>
|
||||
</div>
|
||||
{% endblock %}
|
@@ -1,18 +1,18 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}About - Project Mycelium{% endblock %}
|
||||
{% block title %}About - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container my-5">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<h1>About Project Mycelium</h1>
|
||||
<p class="lead">A platform connecting the ThreeFold ecosystem and facilitating value exchange.</p>
|
||||
<h1>About Mycelium Marketplace</h1>
|
||||
<p class="lead">A platform connecting the Mycelium ecosystem and facilitating value exchange.</p>
|
||||
<hr>
|
||||
|
||||
<section class="mb-5">
|
||||
<h2>Our Vision</h2>
|
||||
<p>The Project Mycelium is an all-in-one platform facilitating the exchange of value through the Credits system. It connects providers and users, enabling the discovery, acquisition, and management of various resources and services within a decentralized ecosystem.</p>
|
||||
<p>The Mycelium Marketplace is an all-in-one platform facilitating the exchange of value through the Credits system. It connects providers and users, enabling the discovery, acquisition, and management of various resources and services within a decentralized ecosystem.</p>
|
||||
<p>We believe in a world where internet infrastructure and services are distributed, secure, and maintain user sovereignty. The marketplace is our solution to bring this vision to life, providing a platform where anyone can access or provide digital resources in a fair and transparent way.</p>
|
||||
</section>
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
<section class="mb-5">
|
||||
<h2>Join the Ecosystem</h2>
|
||||
<p>The Project Mycelium is more than just a platform—it's an ecosystem of innovators, builders, and users working together to create a better digital future. Whether you're looking to access resources for your next project or provide your expertise to others, we invite you to join us.</p>
|
||||
<p>The Mycelium Marketplace is more than just a platform—it's an ecosystem of innovators, builders, and users working together to create a better digital future. Whether you're looking to access resources for your next project or provide your expertise to others, we invite you to join us.</p>
|
||||
<div class="d-flex gap-3">
|
||||
<a href="/register" class="btn btn-primary">Get Started</a>
|
||||
<a href="/marketplace" class="btn btn-outline-secondary">Explore Marketplace</a>
|
||||
|
@@ -1,18 +1,18 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Contact - Project Mycelium{% endblock %}
|
||||
{% block title %}Contact - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container my-5">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<h1>Contact ThreeFold</h1>
|
||||
<p class="lead">Get in touch with the ThreeFold team and community.</p>
|
||||
<h1>Contact Mycelium</h1>
|
||||
<p class="lead">Get in touch with the Mycelium team and community.</p>
|
||||
<hr>
|
||||
|
||||
<section class="mb-5">
|
||||
<h2>Join the ThreeFold Ecosystem</h2>
|
||||
<p>ThreeFold is an open ecosystem that welcomes contributors, users, and partners from all backgrounds. Whether you're interested in using the platform, contributing to its development, or exploring partnership opportunities, we'd love to hear from you.</p>
|
||||
<h2>Join the Mycelium Ecosystem</h2>
|
||||
<p>Mycelium is an open ecosystem that welcomes contributors, users, and partners from all backgrounds. Whether you're interested in using the platform, contributing to its development, or exploring partnership opportunities, we'd love to hear from you.</p>
|
||||
</section>
|
||||
|
||||
<section class="mb-5">
|
||||
@@ -40,7 +40,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<h5>Community Forum</h5>
|
||||
<p>Join discussions, ask questions, and connect with the ThreeFold community:</p>
|
||||
<p>Join discussions, ask questions, and connect with the Mycelium community:</p>
|
||||
<p class="mb-0"><a href="https://forum.threefold.io" target="_blank" rel="noopener noreferrer">forum.threefold.io</a></p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -70,7 +70,7 @@
|
||||
<div class="card h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><i class="bi bi-code-square me-2"></i>Developers</h5>
|
||||
<p class="card-text">Contribute to the ThreeFold technology stack and help build the peer-to-peer internet infrastructure.</p>
|
||||
<p class="card-text">Contribute to the Mycelium technology stack and help build the peer-to-peer internet infrastructure.</p>
|
||||
<a href="https://github.com/threefoldtech" target="_blank" rel="noopener noreferrer" class="btn btn-outline-primary">GitHub</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -79,7 +79,7 @@
|
||||
<div class="card h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><i class="bi bi-hdd-rack me-2"></i>Resource Providers</h5>
|
||||
<p class="card-text">Contribute compute capacity to the ThreeFold Grid and earn through the platform's ecosystem.</p>
|
||||
<p class="card-text">Contribute compute capacity to the Mycelium Grid and earn through the platform's ecosystem.</p>
|
||||
<a href="/docs" class="btn btn-outline-primary">Learn More</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -123,7 +123,7 @@
|
||||
<div class="accordion-item">
|
||||
<h3 class="accordion-header" id="headingTwo">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
|
||||
How can I schedule a call with the ThreeFold team?
|
||||
How can I schedule a call with the Mycelium team?
|
||||
</button>
|
||||
</h3>
|
||||
<div id="collapseTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo" data-bs-parent="#contactFAQ">
|
||||
@@ -135,12 +135,12 @@
|
||||
<div class="accordion-item">
|
||||
<h3 class="accordion-header" id="headingThree">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
|
||||
Where can I find the latest news about ThreeFold?
|
||||
Where can I find the latest news about Mycelium?
|
||||
</button>
|
||||
</h3>
|
||||
<div id="collapseThree" class="accordion-collapse collapse" aria-labelledby="headingThree" data-bs-parent="#contactFAQ">
|
||||
<div class="accordion-body">
|
||||
Stay updated on ThreeFold developments through our <a href="https://forum.threefold.io" target="_blank" rel="noopener noreferrer">community forum</a>, <a href="https://t.me/threefold" target="_blank" rel="noopener noreferrer">Telegram channel</a>, and by following us on social media platforms.
|
||||
Stay updated on Mycelium developments through our <a href="https://forum.threefold.io" target="_blank" rel="noopener noreferrer">community forum</a>, <a href="https://t.me/threefold" target="_blank" rel="noopener noreferrer">Telegram channel</a>, and by following us on social media platforms.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Home - Project Mycelium{% endblock %}
|
||||
{% block title %}Home - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<!-- Hero Section -->
|
||||
@@ -8,8 +8,8 @@
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-lg-7">
|
||||
<h1>Project Mycelium</h1>
|
||||
<p class="lead mb-4">The all-in-one platform for decentralized compute resources, applications, and services within the ThreeFold ecosystem.</p>
|
||||
<h1>Mycelium Marketplace</h1>
|
||||
<p class="lead mb-4">The all-in-one platform for decentralized compute resources, applications, and services within the Mycelium ecosystem.</p>
|
||||
<div class="d-flex flex-wrap justify-content-center gap-3">
|
||||
<a href="/register" class="btn btn-primary cta-primary">Get Started</a>
|
||||
<a href="/login" class="btn btn-outline-secondary cta-secondary">Log In</a>
|
||||
@@ -17,7 +17,7 @@
|
||||
</div>
|
||||
<div class="col-lg-5">
|
||||
<div class="text-center">
|
||||
<img src="/static/images/logo_light.png" alt="ThreeFold Logo" class="img-fluid" style="max-height: 150px;">
|
||||
<img src="/static/images/logo_light.png" alt="Mycelium Logo" class="img-fluid" style="max-height: 150px;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -28,7 +28,7 @@
|
||||
<section class="marketplace-preview">
|
||||
<div class="container">
|
||||
<div class="text-center mb-5">
|
||||
<h2>Discover the Project Mycelium</h2>
|
||||
<h2>Discover the Mycelium Marketplace</h2>
|
||||
<p class="lead">Find and access resources, applications and services in a sovereign, secure way</p>
|
||||
</div>
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
<div class="card-body text-center">
|
||||
<i class="bi bi-cpu text-primary display-4 mb-3"></i>
|
||||
<h3>Compute Resources</h3>
|
||||
<p>Access compute capacity (slices) from the decentralized ThreeFold Grid.</p>
|
||||
<p>Access compute capacity (slices) from the decentralized Mycelium Grid.</p>
|
||||
<a href="/marketplace/compute" class="btn btn-sm btn-outline-primary">Explore</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -72,7 +72,7 @@
|
||||
<div class="container">
|
||||
<div class="text-center mb-5">
|
||||
<h2>Frequently Asked Questions</h2>
|
||||
<p class="lead">Common questions about the Project Mycelium</p>
|
||||
<p class="lead">Common questions about the Mycelium Marketplace</p>
|
||||
</div>
|
||||
|
||||
<div class="row justify-content-center">
|
||||
@@ -82,12 +82,12 @@
|
||||
<div class="accordion-item mb-3">
|
||||
<h2 class="accordion-header" id="faqHeading1">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faqCollapse1" aria-expanded="false" aria-controls="faqCollapse1">
|
||||
What is the Project Mycelium?
|
||||
What is the Mycelium Marketplace?
|
||||
</button>
|
||||
</h2>
|
||||
<div id="faqCollapse1" class="accordion-collapse collapse" aria-labelledby="faqHeading1" data-bs-parent="#faqAccordion">
|
||||
<div class="accordion-body">
|
||||
The Project Mycelium is a central platform facilitating the exchange of value through the Credits system. It connects providers and users, enabling the discovery, acquisition, and management of various resources and services within the ThreeFold ecosystem.
|
||||
The Mycelium Marketplace is a central platform facilitating the exchange of value through the Credits system. It connects providers and users, enabling the discovery, acquisition, and management of various resources and services within the Mycelium ecosystem.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -115,7 +115,7 @@
|
||||
</h2>
|
||||
<div id="faqCollapse3" class="accordion-collapse collapse" aria-labelledby="faqHeading3" data-bs-parent="#faqAccordion">
|
||||
<div class="accordion-body">
|
||||
<p>Unlike traditional SaaS offerings where you surrender control to the provider, ThreeFold's model maintains your sovereignty in two ways:</p>
|
||||
<p>Unlike traditional SaaS offerings where you surrender control to the provider, Mycelium's model maintains your sovereignty in two ways:</p>
|
||||
<ol class="mb-3">
|
||||
<li><strong>Direct Management:</strong> Manage your own compute slices directly for complete control</li>
|
||||
<li><strong>Sovereign Allocation:</strong> Allocate your sovereign compute slices to application providers who deploy and manage applications on your infrastructure</li>
|
||||
@@ -184,12 +184,12 @@
|
||||
<div class="accordion-item mb-3">
|
||||
<h2 class="accordion-header" id="faqHeading7">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faqCollapse7" aria-expanded="false" aria-controls="faqCollapse7">
|
||||
What are the core principles of ThreeFold?
|
||||
What are the core principles of Mycelium?
|
||||
</button>
|
||||
</h2>
|
||||
<div id="faqCollapse7" class="accordion-collapse collapse" aria-labelledby="faqHeading7" data-bs-parent="#faqAccordion">
|
||||
<div class="accordion-body">
|
||||
<p>ThreeFold is built on four core principles:</p>
|
||||
<p>Mycelium is built on four core principles:</p>
|
||||
<ol>
|
||||
<li><strong>Sovereignty:</strong> Users maintain control over their resources and data</li>
|
||||
<li><strong>Transparency:</strong> Clear pricing and reputation metrics for all marketplace participants</li>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Privacy Policy - Project Mycelium{% endblock %}
|
||||
{% block title %}Privacy Policy - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container my-5">
|
||||
@@ -10,7 +10,7 @@
|
||||
<p class="lead mb-4">Last updated: May 20, 2025</p>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<p class="mb-0">Project Mycelium is committed to protecting your privacy and ensuring the security of your personal information.</p>
|
||||
<p class="mb-0">Mycelium Marketplace is committed to protecting your privacy and ensuring the security of your personal information.</p>
|
||||
</div>
|
||||
|
||||
<h2>1. Information We Collect</h2>
|
||||
@@ -25,7 +25,7 @@
|
||||
</ul>
|
||||
|
||||
<h2>2. Use of Data</h2>
|
||||
<p>Project Mycelium uses the collected data for various purposes:</p>
|
||||
<p>Mycelium Marketplace uses the collected data for various purposes:</p>
|
||||
<ul>
|
||||
<li>To provide and maintain our service</li>
|
||||
<li>To notify you about changes to our service</li>
|
||||
@@ -45,7 +45,7 @@
|
||||
</ul>
|
||||
|
||||
<h2>4. Your Data Protection Rights</h2>
|
||||
<p>Project Mycelium aims to take reasonable steps to allow you to correct, amend, delete, or limit the use of your Personal Data. You have the following rights:</p>
|
||||
<p>Mycelium Marketplace aims to take reasonable steps to allow you to correct, amend, delete, or limit the use of your Personal Data. You have the following rights:</p>
|
||||
<ul>
|
||||
<li><strong>The right to access</strong>: You have the right to request copies of your personal data.</li>
|
||||
<li><strong>The right to rectification</strong>: You have the right to request that we correct any information you believe is inaccurate or complete information you believe is incomplete.</li>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Application Providers Terms and Conditions - Project Mycelium{% endblock %}
|
||||
{% block title %}Application Providers Terms and Conditions - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container my-5">
|
||||
@@ -20,14 +20,14 @@
|
||||
<p class="lead mb-4">Last updated: May 22, 2025</p>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<p class="mb-0">These terms specifically apply to Application Providers on the Project Mycelium who develop and deploy applications on the ThreeFold Grid.</p>
|
||||
<p class="mb-0">These terms specifically apply to Application Providers on the Mycelium Marketplace who develop and deploy applications on the Mycelium Grid.</p>
|
||||
</div>
|
||||
|
||||
<h2>1. Definition of an Application Provider</h2>
|
||||
<p>An "Application Provider" refers to any individual or entity that develops, deploys, and maintains software applications, platforms, or digital applications on the Project Mycelium. Application Providers create the applications and services that run on the ThreeFold Grid's infrastructure.</p>
|
||||
<p>An "Application Provider" refers to any individual or entity that develops, deploys, and maintains software applications, platforms, or digital applications on the Mycelium Marketplace. Application Providers create the applications and services that run on the Mycelium Grid's infrastructure.</p>
|
||||
|
||||
<h2>2. Application Provider Responsibilities</h2>
|
||||
<p>As an Application Provider on the Project Mycelium, you agree to:</p>
|
||||
<p>As an Application Provider on the Mycelium Marketplace, you agree to:</p>
|
||||
<ul>
|
||||
<li>Provide accurate descriptions of your applications and applications</li>
|
||||
<li>Maintain your deployed applications with regular updates and security patches</li>
|
||||
@@ -38,7 +38,7 @@
|
||||
</ul>
|
||||
|
||||
<h2>3. Reputation System and Staking</h2>
|
||||
<p>The Project Mycelium employs a reputation system that affects application provider visibility and benefits:</p>
|
||||
<p>The Mycelium Marketplace employs a reputation system that affects application provider visibility and benefits:</p>
|
||||
<ul>
|
||||
<li>Your reputation score is calculated based on user ratings, application performance, security metrics, and staked Credits</li>
|
||||
<li>Higher reputation scores may result in improved visibility in marketplace listings</li>
|
||||
@@ -50,7 +50,7 @@
|
||||
<p>Regarding the intellectual property of your applications:</p>
|
||||
<ul>
|
||||
<li>You retain all intellectual property rights to your applications and applications</li>
|
||||
<li>You grant ThreeFold a limited license to display, promote, and facilitate access to your applications on the marketplace</li>
|
||||
<li>You grant Mycelium a limited license to display, promote, and facilitate access to your applications on the marketplace</li>
|
||||
<li>You are responsible for ensuring your applications do not infringe on third-party intellectual property rights</li>
|
||||
<li>You may choose the appropriate licensing model for your applications (open source, proprietary, etc.)</li>
|
||||
</ul>
|
||||
@@ -71,18 +71,18 @@
|
||||
<ul>
|
||||
<li>All application descriptions must comply with the Marketplace Content Guidelines</li>
|
||||
<li>False or misleading claims about applications are prohibited</li>
|
||||
<li>ThreeFold reserves the right to remove or request modifications to listings that violate guidelines</li>
|
||||
<li>Mycelium reserves the right to remove or request modifications to listings that violate guidelines</li>
|
||||
<li>You may utilize marketplace promotional tools to increase the visibility of your applications</li>
|
||||
<li>You may offer free trials, freemium models, or paid applications according to your business model</li>
|
||||
</ul>
|
||||
|
||||
<h2>7. API Usage and Integration</h2>
|
||||
<p>When utilizing ThreeFold APIs and integration points:</p>
|
||||
<p>When utilizing Mycelium APIs and integration points:</p>
|
||||
<ul>
|
||||
<li>You must adhere to the API usage guidelines and rate limits</li>
|
||||
<li>You are responsible for updating your integrations when API changes are announced</li>
|
||||
<li>Marketplace API keys must be secured and never exposed publicly</li>
|
||||
<li>ThreeFold provides documentation and support for API integration</li>
|
||||
<li>Mycelium provides documentation and support for API integration</li>
|
||||
</ul>
|
||||
|
||||
<h2>8. Slashing Conditions</h2>
|
||||
@@ -115,7 +115,7 @@
|
||||
|
||||
<div class="alert alert-warning mt-5">
|
||||
<h5 class="alert-heading">Important Note</h5>
|
||||
<p class="mb-0">These Application Provider-specific terms are in addition to the <a href="/terms">General Terms and Conditions</a> that apply to all users of the Project Mycelium. Please ensure you have reviewed both documents.</p>
|
||||
<p class="mb-0">These Application Provider-specific terms are in addition to the <a href="/terms">General Terms and Conditions</a> that apply to all users of the Mycelium Marketplace. Please ensure you have reviewed both documents.</p>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-5 mb-3">
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Resource Providers Terms and Conditions - Project Mycelium{% endblock %}
|
||||
{% block title %}Resource Providers Terms and Conditions - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container my-5">
|
||||
@@ -20,14 +20,14 @@
|
||||
<p class="lead mb-4">Last updated: May 22, 2025</p>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<p class="mb-0">These terms specifically apply to Resource Providers (Resource Providers) on the Project Mycelium who contribute capacity to the Mycelium Grid.</p>
|
||||
<p class="mb-0">These terms specifically apply to Resource Providers (Resource Providers) on the Mycelium Marketplace who contribute capacity to the Mycelium Grid.</p>
|
||||
</div>
|
||||
|
||||
<h2>1. Definition of a Resource Provider</h2>
|
||||
<p>A "Resource Provider" refers to any individual or entity that connects hardware resources to the Mycelium Grid, including but not limited to compute nodes (Mycelium Nodes), storage capacity, network infrastructure, or other compatible devices that contribute to the Mycelium Grid's capacity.</p>
|
||||
|
||||
<h2>2. Resource Provider Responsibilities</h2>
|
||||
<p>As a Resource Provider on the Project Mycelium, you agree to:</p>
|
||||
<p>As a Resource Provider on the Mycelium Marketplace, you agree to:</p>
|
||||
<ul>
|
||||
<li>Maintain your connected hardware in good working condition with adequate internet connectivity</li>
|
||||
<li>Ensure your hardware meets the minimum technical requirements specified in the Farming documentation</li>
|
||||
@@ -37,7 +37,7 @@
|
||||
</ul>
|
||||
|
||||
<h2>3. Reputation System and Staking</h2>
|
||||
<p>The Project Mycelium employs a reputation system that affects resource provider visibility and rewards:</p>
|
||||
<p>The Mycelium Marketplace employs a reputation system that affects resource provider visibility and rewards:</p>
|
||||
<ul>
|
||||
<li>Your reputation score is calculated based on multiple factors including uptime, staked Credits, and performance metrics</li>
|
||||
<li>Staking Credits increases your reputation score and may qualify you for additional benefits</li>
|
||||
@@ -60,7 +60,7 @@
|
||||
<li>You retain ownership of all hardware connected to the Mycelium Grid</li>
|
||||
<li>You are responsible for the electricity, internet connectivity, and physical security of your hardware</li>
|
||||
<li>You have the right to disconnect your hardware at any time, subject to any active resource reservations</li>
|
||||
<li>ThreeFold does not guarantee that your capacity will be utilized by users</li>
|
||||
<li>Mycelium does not guarantee that your capacity will be utilized by users</li>
|
||||
</ul>
|
||||
|
||||
<h2>6. Slashing Conditions</h2>
|
||||
@@ -83,14 +83,14 @@
|
||||
<h2>8. Liability Limitation</h2>
|
||||
<p>As a Resource Provider, you acknowledge that:</p>
|
||||
<ul>
|
||||
<li>ThreeFold is not responsible for any damage to your hardware resulting from normal operation</li>
|
||||
<li>ThreeFold does not guarantee minimum income or utilization rates for your contributed capacity</li>
|
||||
<li>Mycelium is not responsible for any damage to your hardware resulting from normal operation</li>
|
||||
<li>Mycelium does not guarantee minimum income or utilization rates for your contributed capacity</li>
|
||||
<li>You are solely responsible for compliance with local laws regarding hosting services, taxation, and business operations</li>
|
||||
</ul>
|
||||
|
||||
<div class="alert alert-warning mt-5">
|
||||
<h5 class="alert-heading">Important Note</h5>
|
||||
<p class="mb-0">These Resource Provider-specific terms are in addition to the <a href="/terms">General Terms and Conditions</a> that apply to all users of the Project Mycelium. Please ensure you have reviewed both documents.</p>
|
||||
<p class="mb-0">These Resource Provider-specific terms are in addition to the <a href="/terms">General Terms and Conditions</a> that apply to all users of the Mycelium Marketplace. Please ensure you have reviewed both documents.</p>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-5 mb-3">
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Service Providers Terms and Conditions - Project Mycelium{% endblock %}
|
||||
{% block title %}Service Providers Terms and Conditions - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container my-5">
|
||||
@@ -20,14 +20,14 @@
|
||||
<p class="lead mb-4">Last updated: May 22, 2025</p>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<p class="mb-0">These terms specifically apply to Service Providers on the Project Mycelium who offer managed services utilizing the ThreeFold Grid's capacity.</p>
|
||||
<p class="mb-0">These terms specifically apply to Service Providers on the Mycelium Marketplace who offer managed services utilizing the Mycelium Grid's capacity.</p>
|
||||
</div>
|
||||
|
||||
<h2>1. Definition of a Service Provider</h2>
|
||||
<p>A "Service Provider" refers to any individual or entity that offers managed services, technical support, consulting, or other professional services on the Project Mycelium. Service Providers utilize the ThreeFold Grid's infrastructure to deliver their services to users.</p>
|
||||
<p>A "Service Provider" refers to any individual or entity that offers managed services, technical support, consulting, or other professional services on the Mycelium Marketplace. Service Providers utilize the Mycelium Grid's infrastructure to deliver their services to users.</p>
|
||||
|
||||
<h2>2. Service Provider Responsibilities</h2>
|
||||
<p>As a Service Provider on the Project Mycelium, you agree to:</p>
|
||||
<p>As a Service Provider on the Mycelium Marketplace, you agree to:</p>
|
||||
<ul>
|
||||
<li>Provide accurate descriptions of all services offered</li>
|
||||
<li>Deliver services according to the specifications and timeframes advertised</li>
|
||||
@@ -38,7 +38,7 @@
|
||||
</ul>
|
||||
|
||||
<h2>3. Reputation System and Staking</h2>
|
||||
<p>The Project Mycelium employs a reputation system that affects service provider visibility and benefits:</p>
|
||||
<p>The Mycelium Marketplace employs a reputation system that affects service provider visibility and benefits:</p>
|
||||
<ul>
|
||||
<li>Your reputation score is calculated based on user ratings, service delivery performance, and staked Credits</li>
|
||||
<li>Higher reputation scores may result in improved visibility in marketplace listings</li>
|
||||
@@ -62,7 +62,7 @@
|
||||
<li>You are responsible for creating and maintaining accurate service listings</li>
|
||||
<li>All service descriptions must comply with the Marketplace Content Guidelines</li>
|
||||
<li>False or misleading claims about services are prohibited</li>
|
||||
<li>ThreeFold reserves the right to remove or request modifications to listings that violate guidelines</li>
|
||||
<li>Mycelium reserves the right to remove or request modifications to listings that violate guidelines</li>
|
||||
<li>You may utilize marketplace promotional tools to increase the visibility of your services</li>
|
||||
</ul>
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
<p>In the event of disputes with users:</p>
|
||||
<ul>
|
||||
<li>You are encouraged to resolve disputes directly with users when possible</li>
|
||||
<li>The Project Mycelium provides a dispute resolution system for unresolved issues</li>
|
||||
<li>The Mycelium Marketplace provides a dispute resolution system for unresolved issues</li>
|
||||
<li>Disputes are reviewed by an independent panel based on evidence provided by both parties</li>
|
||||
<li>Consistent patterns of disputes may affect your reputation score</li>
|
||||
</ul>
|
||||
@@ -96,14 +96,14 @@
|
||||
<p>As a Service Provider, you acknowledge that:</p>
|
||||
<ul>
|
||||
<li>You are solely responsible for the services you provide to users</li>
|
||||
<li>ThreeFold is not a party to agreements between you and users</li>
|
||||
<li>ThreeFold does not guarantee minimum income or service utilization rates</li>
|
||||
<li>Mycelium is not a party to agreements between you and users</li>
|
||||
<li>Mycelium does not guarantee minimum income or service utilization rates</li>
|
||||
<li>You are solely responsible for compliance with local laws regarding professional services, taxation, and business operations</li>
|
||||
</ul>
|
||||
|
||||
<div class="alert alert-warning mt-5">
|
||||
<h5 class="alert-heading">Important Note</h5>
|
||||
<p class="mb-0">These Service Provider-specific terms are in addition to the <a href="/terms">General Terms and Conditions</a> that apply to all users of the Project Mycelium. Please ensure you have reviewed both documents.</p>
|
||||
<p class="mb-0">These Service Provider-specific terms are in addition to the <a href="/terms">General Terms and Conditions</a> that apply to all users of the Mycelium Marketplace. Please ensure you have reviewed both documents.</p>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-5 mb-3">
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Users Terms and Conditions - Project Mycelium{% endblock %}
|
||||
{% block title %}Users Terms and Conditions - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container my-5">
|
||||
@@ -20,11 +20,11 @@
|
||||
<p class="lead mb-4">Last updated: May 22, 2025</p>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<p class="mb-0">These terms specifically apply to Users of the Project Mycelium who utilize services, applications, and resources offered on the ThreeFold Grid.</p>
|
||||
<p class="mb-0">These terms specifically apply to Users of the Mycelium Marketplace who utilize services, applications, and resources offered on the Mycelium Grid.</p>
|
||||
</div>
|
||||
|
||||
<h2>1. Definition of a User</h2>
|
||||
<p>A "User" refers to any individual or entity that accesses and utilizes services, applications, resources, or solutions available on the Project Mycelium. Users utilize the ThreeFold Grid's offerings.</p>
|
||||
<p>A "User" refers to any individual or entity that accesses and utilizes services, applications, resources, or solutions available on the Mycelium Marketplace. Users utilize the Mycelium Grid's offerings.</p>
|
||||
|
||||
<h2>2. User Account and Registration</h2>
|
||||
<p>Regarding your user account:</p>
|
||||
@@ -32,8 +32,8 @@
|
||||
<li>You must provide accurate, complete, and up-to-date information during the registration process</li>
|
||||
<li>You are responsible for maintaining the confidentiality of your account credentials</li>
|
||||
<li>You are responsible for all activities that occur under your account</li>
|
||||
<li>You must immediately notify ThreeFold of any unauthorized use of your account</li>
|
||||
<li>ThreeFold reserves the right to suspend or terminate accounts that violate these terms</li>
|
||||
<li>You must immediately notify Mycelium of any unauthorized use of your account</li>
|
||||
<li>Mycelium reserves the right to suspend or terminate accounts that violate these terms</li>
|
||||
</ul>
|
||||
|
||||
<h2>3. Credits System and Payments</h2>
|
||||
@@ -48,7 +48,7 @@
|
||||
</ul>
|
||||
|
||||
<h2>4. Reputation System and Staking</h2>
|
||||
<p>The Project Mycelium employs a reputation system that benefits users:</p>
|
||||
<p>The Mycelium Marketplace employs a reputation system that benefits users:</p>
|
||||
<ul>
|
||||
<li>Your user reputation score may affect your access to premium services and discount rates</li>
|
||||
<li>Staking Credits increases your reputation score and qualifies you for discounts on services</li>
|
||||
@@ -64,40 +64,40 @@
|
||||
</ul>
|
||||
|
||||
<h2>5. Usage Limitations and Fair Use</h2>
|
||||
<p>When using Project Mycelium offerings:</p>
|
||||
<p>When using Mycelium Marketplace offerings:</p>
|
||||
<ul>
|
||||
<li>You agree to use resources and services for legitimate purposes only</li>
|
||||
<li>You will not attempt to circumvent any usage limitations or monitoring systems</li>
|
||||
<li>You will not engage in activities that may disrupt or harm the ThreeFold Grid or other users</li>
|
||||
<li>You will not engage in activities that may disrupt or harm the Mycelium Grid or other users</li>
|
||||
<li>Excessive or abusive usage patterns may result in usage restrictions</li>
|
||||
<li>ThreeFold reserves the right to implement fair use policies for specific services</li>
|
||||
<li>Mycelium reserves the right to implement fair use policies for specific services</li>
|
||||
</ul>
|
||||
|
||||
<h2>6. Data and Privacy</h2>
|
||||
<p>Regarding your data on the Project Mycelium:</p>
|
||||
<p>Regarding your data on the Mycelium Marketplace:</p>
|
||||
<ul>
|
||||
<li>You retain ownership of all data you store or process using ThreeFold services</li>
|
||||
<li>ThreeFold implements zero-knowledge architecture whenever possible, meaning we cannot access your data</li>
|
||||
<li>You retain ownership of all data you store or process using Mycelium services</li>
|
||||
<li>Mycelium implements zero-knowledge architecture whenever possible, meaning we cannot access your data</li>
|
||||
<li>You are responsible for complying with applicable data protection laws when processing personal data</li>
|
||||
<li>ThreeFold may collect certain usage metrics for billing and service improvement purposes</li>
|
||||
<li>Mycelium may collect certain usage metrics for billing and service improvement purposes</li>
|
||||
<li>For complete information on data handling, please review our <a href="/privacy">Privacy Policy</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>7. Service Level Expectations</h2>
|
||||
<p>Regarding service availability and quality:</p>
|
||||
<ul>
|
||||
<li>Project Mycelium is a decentralized platform where service levels may vary by provider</li>
|
||||
<li>Mycelium Marketplace is a decentralized platform where service levels may vary by provider</li>
|
||||
<li>Each service, application, or resource has its own specific service level agreement (SLA)</li>
|
||||
<li>ThreeFold promotes transparency in performance metrics to help you make informed choices</li>
|
||||
<li>Mycelium promotes transparency in performance metrics to help you make informed choices</li>
|
||||
<li>In case of service issues, you should first contact the specific provider of the service</li>
|
||||
<li>ThreeFold provides a dispute resolution system for unresolved issues with providers</li>
|
||||
<li>Mycelium provides a dispute resolution system for unresolved issues with providers</li>
|
||||
</ul>
|
||||
|
||||
<h2>8. Dispute Resolution</h2>
|
||||
<p>In the event of disputes with service providers:</p>
|
||||
<ul>
|
||||
<li>You are encouraged to resolve disputes directly with providers when possible</li>
|
||||
<li>The Project Mycelium provides a dispute resolution system for unresolved issues</li>
|
||||
<li>The Mycelium Marketplace provides a dispute resolution system for unresolved issues</li>
|
||||
<li>Disputes are reviewed by an independent panel based on evidence provided by both parties</li>
|
||||
<li>For eligible cases, a refund may be processed in Credits to your account</li>
|
||||
</ul>
|
||||
@@ -112,17 +112,17 @@
|
||||
</ul>
|
||||
|
||||
<h2>10. User Feedback and Community Participation</h2>
|
||||
<p>As a Project Mycelium user:</p>
|
||||
<p>As a Mycelium Marketplace user:</p>
|
||||
<ul>
|
||||
<li>You are encouraged to provide honest feedback on services and resources you utilize</li>
|
||||
<li>Your ratings and reviews help maintain quality standards in the ecosystem</li>
|
||||
<li>You may participate in the ThreeFold community forums and governance processes</li>
|
||||
<li>You may participate in the Mycelium community forums and governance processes</li>
|
||||
<li>Constructive feedback helps improve the marketplace for all participants</li>
|
||||
</ul>
|
||||
|
||||
<div class="alert alert-warning mt-5">
|
||||
<h5 class="alert-heading">Important Note</h5>
|
||||
<p class="mb-0">These User-specific terms are in addition to the <a href="/terms">General Terms and Conditions</a> that apply to all users of the Project Mycelium. Please ensure you have reviewed both documents.</p>
|
||||
<p class="mb-0">These User-specific terms are in addition to the <a href="/terms">General Terms and Conditions</a> that apply to all users of the Mycelium Marketplace. Please ensure you have reviewed both documents.</p>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-5 mb-3">
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Terms and Conditions - Project Mycelium{% endblock %}
|
||||
{% block title %}Terms and Conditions - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container my-5">
|
||||
@@ -19,7 +19,7 @@
|
||||
<div class="card-body text-center">
|
||||
<i class="bi bi-hdd-rack fs-1 mb-3 text-primary"></i>
|
||||
<h5 class="card-title">Resource Providers</h5>
|
||||
<p class="card-text">Resource Providers contributing capacity to the ThreeFold Grid</p>
|
||||
<p class="card-text">Resource Providers contributing capacity to the Mycelium Grid</p>
|
||||
<a href="/terms/resource providers" class="btn btn-outline-primary mt-3">View Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -29,7 +29,7 @@
|
||||
<div class="card-body text-center">
|
||||
<i class="bi bi-gear-wide-connected fs-1 mb-3 text-success"></i>
|
||||
<h5 class="card-title">Service Providers</h5>
|
||||
<p class="card-text">Entities offering managed services on the ThreeFold Grid</p>
|
||||
<p class="card-text">Entities offering managed services on the Mycelium Grid</p>
|
||||
<a href="/terms/service-providers" class="btn btn-outline-success mt-3">View Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -49,7 +49,7 @@
|
||||
<div class="card-body text-center">
|
||||
<i class="bi bi-person-check fs-1 mb-3 text-warning"></i>
|
||||
<h5 class="card-title">Users</h5>
|
||||
<p class="card-text">End users utilizing services and solutions on the ThreeFold Grid</p>
|
||||
<p class="card-text">End users utilizing services and solutions on the Mycelium Grid</p>
|
||||
<a href="/terms/users" class="btn btn-outline-warning mt-3">View Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -57,14 +57,14 @@
|
||||
</div>
|
||||
|
||||
<div class="alert alert-secondary mb-4">
|
||||
<p class="mb-0">Below are the general Terms and Conditions that apply to all users of the Project Mycelium:</p>
|
||||
<p class="mb-0">Below are the general Terms and Conditions that apply to all users of the Mycelium Marketplace:</p>
|
||||
</div>
|
||||
|
||||
<h2>1. Acceptance of Terms</h2>
|
||||
<p>By accessing or using the Project Mycelium, you agree to be bound by these Terms of Service and all applicable laws and regulations. If you do not agree with any of these terms, you are prohibited from using or accessing the Project Mycelium.</p>
|
||||
<p>By accessing or using the Mycelium Marketplace, you agree to be bound by these Terms of Service and all applicable laws and regulations. If you do not agree with any of these terms, you are prohibited from using or accessing the Mycelium Marketplace.</p>
|
||||
|
||||
<h2>2. Description of Service</h2>
|
||||
<p>The Project Mycelium is a platform that facilitates the exchange of value through the USD Credits system. It connects providers and users, enabling the discovery, acquisition, and management of various resources and services including but not limited to:</p>
|
||||
<p>The Mycelium Marketplace is a platform that facilitates the exchange of value through the USD Credits system. It connects providers and users, enabling the discovery, acquisition, and management of various resources and services including but not limited to:</p>
|
||||
<ul>
|
||||
<li>Compute Resources (Slices)</li>
|
||||
<li>Mycelium Nodes</li>
|
||||
@@ -84,19 +84,19 @@
|
||||
</ul>
|
||||
|
||||
<h2>4. Marketplace Transactions</h2>
|
||||
<p>All transactions conducted through the Project Mycelium are subject to the following conditions:</p>
|
||||
<p>All transactions conducted through the Mycelium Marketplace are subject to the following conditions:</p>
|
||||
<ul>
|
||||
<li>Transactions are conducted using the USD Credits system.</li>
|
||||
<li>You acknowledge that the prices of resources and services may fluctuate based on market conditions.</li>
|
||||
<li>ThreeFold is not a party to any transaction between users and does not guarantee the quality, safety, or legality of any resources or services offered.</li>
|
||||
<li>Mycelium is not a party to any transaction between users and does not guarantee the quality, safety, or legality of any resources or services offered.</li>
|
||||
<li>You are solely responsible for your transactions and interactions with other users.</li>
|
||||
</ul>
|
||||
|
||||
<h2>5. Intellectual Property</h2>
|
||||
<p>The Project Mycelium and its original content, features, and functionality are and will remain the exclusive property of ThreeFold and its licensors. The service is protected by copyright, trademark, and other laws of both the United States and foreign countries.</p>
|
||||
<p>The Mycelium Marketplace and its original content, features, and functionality are and will remain the exclusive property of Mycelium and its licensors. The service is protected by copyright, trademark, and other laws of both the United States and foreign countries.</p>
|
||||
|
||||
<h2>6. User Conduct</h2>
|
||||
<p>You agree not to use the Project Mycelium for any purpose that is unlawful or prohibited by these Terms. You may not:</p>
|
||||
<p>You agree not to use the Mycelium Marketplace for any purpose that is unlawful or prohibited by these Terms. You may not:</p>
|
||||
<ul>
|
||||
<li>Use the service in any way that could disable, overburden, damage, or impair the service</li>
|
||||
<li>Use any robot, spider, or other automatic device, process, or means to access the service for any purpose</li>
|
||||
@@ -106,7 +106,7 @@
|
||||
</ul>
|
||||
|
||||
<h2>7. Limitation of Liability</h2>
|
||||
<p>In no event shall ThreeFold, its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from:</p>
|
||||
<p>In no event shall Mycelium, its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from:</p>
|
||||
<ul>
|
||||
<li>Your access to or use of or inability to access or use the service</li>
|
||||
<li>Any conduct or content of any third party on the service</li>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "marketplace/layout.html" %}
|
||||
|
||||
{% block title %}Project Mycelium - Agentic Apps{% endblock %}
|
||||
{% block title %}Mycelium Marketplace - Agentic Apps{% endblock %}
|
||||
|
||||
{% block marketplace_content %}
|
||||
<div class="my-4">
|
||||
@@ -15,7 +15,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="alert-heading">How Agentic Apps Work</h5>
|
||||
<p>ThreeFold Agentic Apps use a unique model: You provide the compute resources (Slices), while application providers manage the applications. This ensures you maintain sovereignty over your infrastructure while benefiting from professional management.</p>
|
||||
<p>Mycelium Agentic Apps use a unique model: You provide the compute resources (Slices), while application providers manage the applications. This ensures you maintain sovereignty over your infrastructure while benefiting from professional management.</p>
|
||||
<hr>
|
||||
<p class="mb-0">When you deploy an application, you'll be guided through the process of allocating the necessary resources if you don't already have them.</p>
|
||||
</div>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
{% extends "marketplace/layout.html" %}
|
||||
{% block title %}Shopping Cart - Project Mycelium{% endblock %}
|
||||
{% block title %}Shopping Cart - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
<style>
|
||||
@@ -39,7 +39,7 @@
|
||||
<div class="card-body py-5">
|
||||
<i class="bi bi-cart-x display-1 text-muted mb-4"></i>
|
||||
<h3 class="text-muted mb-3">Your cart is empty</h3>
|
||||
<p class="text-muted mb-4">Looks like you haven't added any items to your cart yet. Browse our marketplace to find the perfect ThreeFold resources for your needs.</p>
|
||||
<p class="text-muted mb-4">Looks like you haven't added any items to your cart yet. Browse our marketplace to find the perfect Mycelium resources for your needs.</p>
|
||||
<a href="/marketplace" class="btn btn-primary btn-lg">
|
||||
<i class="bi bi-shop me-2"></i>Browse Marketplace
|
||||
</a>
|
||||
@@ -378,7 +378,7 @@
|
||||
<div class="card h-100 border-success">
|
||||
<div class="card-body text-center">
|
||||
<i class="bi bi-person-plus-fill text-success mb-2" style="font-size: 2rem;"></i>
|
||||
<h6>New to ThreeFold?</h6>
|
||||
<h6>New to Mycelium?</h6>
|
||||
<p class="text-muted small mb-3">Create a free account to manage your orders and access exclusive features.</p>
|
||||
<button type="button" class="btn btn-success w-100" id="guestRegisterBtn">
|
||||
<i class="bi bi-person-plus me-2"></i>Create Account
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Shopping Cart - Project Mycelium{% endblock %}
|
||||
{% block title %}Shopping Cart - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block head %}
|
||||
<!-- Add Bootstrap Icons -->
|
||||
@@ -96,7 +96,7 @@
|
||||
<div class="card-body py-5">
|
||||
<i class="bi bi-cart-x empty-cart-icon mb-4"></i>
|
||||
<h3 class="text-muted mb-3">Your cart is empty</h3>
|
||||
<p class="text-muted mb-4">Looks like you haven't added any items to your cart yet. Browse our marketplace to find the perfect ThreeFold resources for your needs.</p>
|
||||
<p class="text-muted mb-4">Looks like you haven't added any items to your cart yet. Browse our marketplace to find the perfect Mycelium resources for your needs.</p>
|
||||
<a href="/marketplace" class="btn btn-primary btn-lg">
|
||||
<i class="bi bi-shop me-2"></i>Browse Marketplace
|
||||
</a>
|
||||
@@ -465,7 +465,7 @@
|
||||
<div class="card h-100 border-success">
|
||||
<div class="card-body text-center">
|
||||
<i class="bi bi-person-plus-fill text-success mb-2" style="font-size: 2rem;"></i>
|
||||
<h6>New to ThreeFold?</h6>
|
||||
<h6>New to Mycelium?</h6>
|
||||
<p class="text-muted small mb-3">Create a free account to manage your orders and access exclusive features.</p>
|
||||
<button type="button" class="btn btn-success w-100" id="guestRegisterBtn">
|
||||
<i class="bi bi-person-plus me-2"></i>Create Account
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "marketplace/layout.html" %}
|
||||
|
||||
{% block title %}Shopping Cart - Project Mycelium{% endblock %}
|
||||
{% block title %}Shopping Cart - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block marketplace_content %}
|
||||
<div class="container-fluid py-4">
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Shopping Cart - Project Mycelium</title>
|
||||
<title>Shopping Cart - Mycelium Marketplace</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.0/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<style>
|
||||
@@ -126,8 +126,8 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="/">
|
||||
<img src="/static/images/logo_dark.png" alt="ThreeFold Logo" class="me-2">
|
||||
<span>Project Mycelium</span>
|
||||
<img src="/static/images/logo_dark.png" alt="Mycelium Logo" class="me-2">
|
||||
<span>Mycelium Marketplace</span>
|
||||
</a>
|
||||
<div class="navbar-nav ms-auto">
|
||||
<a class="nav-link" href="/marketplace">
|
||||
@@ -174,7 +174,7 @@
|
||||
<i class="bi bi-cart-x empty-cart-icon mb-4"></i>
|
||||
<h3 class="text-muted mb-3">Your cart is empty</h3>
|
||||
<p class="text-muted mb-4">
|
||||
Discover amazing ThreeFold resources and services. From compute power to storage solutions,
|
||||
Discover amazing Mycelium resources and services. From compute power to storage solutions,
|
||||
find everything you need to build on the decentralized internet.
|
||||
</p>
|
||||
<a href="/marketplace" class="btn btn-primary btn-lg">
|
||||
@@ -538,7 +538,7 @@
|
||||
<div class="card h-100 border-success">
|
||||
<div class="card-body text-center">
|
||||
<i class="bi bi-person-plus-fill text-success mb-2" style="font-size: 2rem;"></i>
|
||||
<h6>New to ThreeFold?</h6>
|
||||
<h6>New to Mycelium?</h6>
|
||||
<p class="text-muted small mb-3">Create a free account to manage your orders and access exclusive features.</p>
|
||||
<button type="button" class="btn btn-success w-100" id="guestRegisterBtn">
|
||||
<i class="bi bi-person-plus me-2"></i>Create Account
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Checkout - Project Mycelium</title>
|
||||
<title>Checkout - Mycelium Marketplace</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.0/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<style>
|
||||
@@ -126,8 +126,8 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="/">
|
||||
<img src="/static/images/logo_dark.png" alt="ThreeFold Logo" class="me-2">
|
||||
<span>Project Mycelium</span>
|
||||
<img src="/static/images/logo_dark.png" alt="Mycelium Logo" class="me-2">
|
||||
<span>Mycelium Marketplace</span>
|
||||
</a>
|
||||
<div class="navbar-nav ms-auto">
|
||||
<a class="nav-link" href="/marketplace">
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "marketplace/layout.html" %}
|
||||
|
||||
{% block title %}Project Mycelium - Compute Resources{% endblock %}
|
||||
{% block title %}Mycelium Marketplace - Compute Resources{% endblock %}
|
||||
|
||||
{% block marketplace_content %}
|
||||
<div class="my-4">
|
||||
|
@@ -1,10 +1,10 @@
|
||||
{% extends "marketplace/layout.html" %}
|
||||
|
||||
{% block title %}Project Mycelium - Overview{% endblock %}
|
||||
{% block title %}Mycelium Marketplace - Overview{% endblock %}
|
||||
|
||||
{% block marketplace_content %}
|
||||
<div class="my-4">
|
||||
<h1>Project Mycelium Overview</h1>
|
||||
<h1>Mycelium Marketplace Overview</h1>
|
||||
<p class="lead">Explore the decentralized ecosystem of resources, applications, and services.</p>
|
||||
|
||||
<!-- Overview Stats -->
|
||||
@@ -23,14 +23,14 @@
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Mycelium Nodes</h5>
|
||||
<p class="card-text">120+ certified nodes</p>
|
||||
<a href="/marketplace/mycelium_nodes" class="text-white">Browse Mycelium Nodes →</a>
|
||||
<a href="/marketplace/mycelium_nodes" class="text-white">Browse Nodes →</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="card text-white bg-info mb-3">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Gateways</h5>
|
||||
<h5 class="card-title">Mycelium Gateways</h5>
|
||||
<p class="card-text">45+ active gateways</p>
|
||||
<a href="/marketplace/gateways" class="text-white">Browse Gateways →</a>
|
||||
</div>
|
||||
@@ -39,9 +39,9 @@
|
||||
<div class="col-md-3">
|
||||
<div class="card text-white bg-warning mb-3">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Applications</h5>
|
||||
<h5 class="card-title">Agentic Apps</h5>
|
||||
<p class="card-text">80+ self-healing apps</p>
|
||||
<a href="/marketplace/applications" class="text-white">Browse Applications →</a>
|
||||
<a href="/marketplace/applications" class="text-white">Browse Apps →</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "marketplace/layout.html" %}
|
||||
|
||||
{% block title %}Project Mycelium - Mycelium Gateways{% endblock %}
|
||||
{% block title %}Mycelium Marketplace - Mycelium Gateways{% endblock %}
|
||||
|
||||
{% block marketplace_content %}
|
||||
<div class="my-4">
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "marketplace/layout.html" %}
|
||||
|
||||
{% block title %}Project Mycelium - Mycelium Nodes Hardware{% endblock %}
|
||||
{% block title %}Mycelium Marketplace - Mycelium Nodes Hardware{% endblock %}
|
||||
|
||||
{% block marketplace_content %}
|
||||
<div class="my-4">
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Order Confirmation - Project Mycelium</title>
|
||||
<title>Order Confirmation - Mycelium Marketplace</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.0/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<style>
|
||||
@@ -125,8 +125,8 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="/">
|
||||
<img src="/static/images/logo_dark.png" alt="ThreeFold Logo" class="me-2">
|
||||
<span>Project Mycelium</span>
|
||||
<img src="/static/images/logo_dark.png" alt="Mycelium Logo" class="me-2">
|
||||
<span>Mycelium Marketplace</span>
|
||||
</a>
|
||||
<div class="navbar-nav ms-auto">
|
||||
<a class="nav-link" href="/marketplace">
|
||||
@@ -149,7 +149,7 @@
|
||||
<i class="bi bi-check-circle success-icon mb-3"></i>
|
||||
<h1 class="h2 mb-3">Order Confirmed!</h1>
|
||||
<p class="lead mb-4">
|
||||
Thank you for your order. Your ThreeFold resources are being prepared for deployment.
|
||||
Thank you for your order. Your Mycelium resources are being prepared for deployment.
|
||||
</p>
|
||||
{% if order %}
|
||||
<div class="row">
|
||||
@@ -267,7 +267,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<div class="fw-bold">Deployment</div>
|
||||
<small class="text-muted">Resources will be deployed to the ThreeFold Grid within 24 hours.</small>
|
||||
<small class="text-muted">Resources will be deployed to the Mycelium Grid within 24 hours.</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Order Details - Project Mycelium</title>
|
||||
<title>Order Details - Mycelium Marketplace</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.0/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<style>
|
||||
@@ -88,8 +88,8 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="/">
|
||||
<img src="/static/images/logo_dark.png" alt="ThreeFold Logo" class="me-2">
|
||||
<span>Project Mycelium</span>
|
||||
<img src="/static/images/logo_dark.png" alt="Mycelium Logo" class="me-2">
|
||||
<span>Mycelium Marketplace</span>
|
||||
</a>
|
||||
<div class="navbar-nav ms-auto">
|
||||
<a class="nav-link" href="/marketplace">
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Order Invoice - Project Mycelium</title>
|
||||
<title>Order Invoice - Mycelium Marketplace</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.0/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<style>
|
||||
@@ -37,8 +37,8 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark no-print">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="/">
|
||||
<img src="/static/images/logo_dark.png" alt="ThreeFold Logo" class="me-2">
|
||||
<span>Project Mycelium</span>
|
||||
<img src="/static/images/logo_dark.png" alt="Mycelium Logo" class="me-2">
|
||||
<span>Mycelium Marketplace</span>
|
||||
</a>
|
||||
<div class="navbar-nav ms-auto">
|
||||
<a class="nav-link" href="/marketplace">
|
||||
@@ -87,7 +87,7 @@
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-6">
|
||||
<h6 class="text-muted mb-2">SOLD BY:</h6>
|
||||
<div class="fw-bold">Project Mycelium</div>
|
||||
<div class="fw-bold">Mycelium Marketplace</div>
|
||||
<div>support@threefold.io</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>My Orders - Project Mycelium</title>
|
||||
<title>My Orders - Mycelium Marketplace</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.0/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<style>
|
||||
@@ -109,8 +109,8 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="/">
|
||||
<img src="/static/images/logo_dark.png" alt="ThreeFold Logo" class="me-2">
|
||||
<span>Project Mycelium</span>
|
||||
<img src="/static/images/logo_dark.png" alt="Mycelium Logo" class="me-2">
|
||||
<span>Mycelium Marketplace</span>
|
||||
</a>
|
||||
<div class="navbar-nav ms-auto">
|
||||
<a class="nav-link" href="/marketplace">
|
||||
@@ -249,7 +249,7 @@
|
||||
<i class="bi bi-bag-x display-1 text-muted mb-4"></i>
|
||||
<h3 class="text-muted mb-3">No orders yet</h3>
|
||||
<p class="text-muted mb-4">
|
||||
You haven't placed any orders yet. Explore our marketplace to find amazing ThreeFold resources and services.
|
||||
You haven't placed any orders yet. Explore our marketplace to find amazing Mycelium resources and services.
|
||||
</p>
|
||||
<a href="/marketplace" class="btn btn-primary btn-lg">
|
||||
<i class="bi bi-shop me-2"></i>Browse Marketplace
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "marketplace/layout.html" %}
|
||||
|
||||
{% block title %}{{ product.product.name }} - Project Mycelium{% endblock %}
|
||||
{% block title %}{{ product.product.name }} - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block marketplace_content %}
|
||||
<div class="my-4">
|
||||
@@ -203,7 +203,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<p class="small text-muted mb-0">
|
||||
Trusted provider in the ThreeFold ecosystem with verified infrastructure.
|
||||
Trusted provider in the Mycelium ecosystem with verified infrastructure.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "marketplace/layout.html" %}
|
||||
|
||||
{% block title %}{{ product.product.name }} - Project Mycelium{% endblock %}
|
||||
{% block title %}{{ product.product.name }} - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block marketplace_content %}
|
||||
<div class="my-4">
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{% extends "marketplace/layout.html" %}
|
||||
|
||||
{% block title %}{{ product.product.name }} - Project Mycelium{% endblock %}
|
||||
{% block title %}{{ product.product.name }} - Mycelium Marketplace{% endblock %}
|
||||
|
||||
{% block marketplace_content %}
|
||||
<div class="my-4">
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user