# BitDCA

**NOTE:** **This documentation is under development, and its content may be subject to change. BitDCA is owner of Littlebit and BitDCA app refers to Littlebit app.**&#x20;

## About BitDCA

The BitDCA project, brings a mobile application Littlebit, which represents a new, innovative way of saving into Bitcoin that is easily accessible, attractive, and modern for newcomers and experts alike.

Given its uniqueness and accessibility, the Littlebit application has the potential to rapidly obtain a massive user base on the international market. This attractive solution opens a way to enormous profits in the rapidly expanding cryptocurrency market.

> *“Opening a new way to save in Bitcoin.”*

### Quick Overview

* Littlebit application allows users to save predetermined percentage of users’ payments in Bitcoin every time they pay with their current payment cards.
* For our system to be active, it is enough if users behave as usual, i.e. pay by their card at retailers. Each card payment can transform into a Bitcoin investment, based on the rules predefined by the user.
* In the future, the application will offer access to other attractive investment assets, such as more cryptocurrencies, gold, or the S\&P 500.

<figure><img src="/files/wKrTwZ11ctmDTcYNulR2" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/JWjeHTuCUoNA8TIdh7U7" alt=""><figcaption><p>BitDCA Application Review</p></figcaption></figure>


# Solution by BitDCA

Most people’s inconsistency in their long-term investing comes not from disagreement with the idea of regularly putting aside a portion of their assets into Bitcoin, but from the lack of a simple and convenient solution. We want to change that with Littlebit.

We believe that a fully automated investing process aligned with the investor’s behavior is a major game-changer in the retail market as it removes much of the manual effort and psychological barriers preventing regular and safe investments.

*“All you need to do is pay with your card as you normally would. We take care of the rest.*”

***

## The Littlebit application aims to:

* Be unique on the market
* Enable users to invest regularly with exceptional comfort and full automation.
* Be simple and attractive enough to allow everyone to understand and use it.
* Be available worldwide.
* Make user feel as if the savings cost nothing because they are spread over time in small amounts.

## Core Features:

* [x] Automatically invest the customer´s funds into Bitcoin immediately after receiving the card payment information.
* [x] Users have the option to withdraw their Bitcoin at any time into their wallets or exchanges.
* [x] Bitcoins are kept in a secured wallet with multi-signature protection.
* [x] Easy onboarding and regular user due diligence processes such as KYC and AML screening and apply a risk-based approach to mitigate AML, CTF, and fraud risks.
* [x] Automatically charge the calculated savings amount from the user’s payment card through regulated payments providers.
* [x] All sensitive operations are secured and audited.
* [x] Display financial insights and savings reports in the app.&#x20;


# How does Littlebit work?

Littlebit integrates Bitcoin savings into everyday payments, making accumulation simple and automated.

As visible on the example below, when a user pays €10 with their connected payment card, a small additional portion set by the user is automatically transacted to purchase Bitcoin. This seamless process turns routine spending into effortless investing.

### The easiest way to save in Bitcoin

{% stepper %}
{% step %}

### Connect your payment card to the Littlebit application.

Simply link your card with Littlebit app.
{% endstep %}

{% step %}

### Set a percentage you want to save from each payment.

Set a percentage to be added from each card payment to buy Bitcoin.
{% endstep %}

{% step %}

### Pay with your card at the store, e-shop, or elsewhere.

Enjoy the comfort of using your card as usual while effortlessly investing in your future.
{% endstep %}
{% endstepper %}

<figure><img src="/files/2i7KmP9EHxZYq7voJHOz" alt=""><figcaption><p>Spending 10€ at store with Littlebit</p></figcaption></figure>


# Example of using Littlebit

Based on the historical development of Bitcoin’s value, we can make the following example to demonstrate the benefits of using the BitDCA application. This example shows a user who spends $625 per month with his card at various merchants. Thanks to Littlebit, this user would have saved $2,994 over 8 years and the value of this investment would have reached $30,092. That is an appreciation of +905% in 8 years. ([*source*](https://dcacryptocalculator.com/bitcoin?start_date=2016-10-31\&finish_date=2024-10-31\&regular_investment=1.025\&currency_code=USD\&investment_interval=daily\&exchange_fee=10))

<figure><img src="/files/cOqZJqjbIXfAMTFeJHuV" alt=""><figcaption></figcaption></figure>

<table data-header-hidden><thead><tr><th width="423"></th><th></th></tr></thead><tbody><tr><td>Spending with the client's payment card</td><td>$ 625 per month</td></tr><tr><td>BitDCA savings set to</td><td>5 %</td></tr><tr><td>Period</td><td>8 years</td></tr><tr><td>Total savings</td><td>$ 2,994</td></tr><tr><td>Investment value</td><td>$ 30,092</td></tr><tr><td>Appreciation</td><td>$ 27,107 / +905 %</td></tr></tbody></table>

Note: The data above are valid on the December 1st 2024.


# Transparency and self custody

## Full Transparency

Our relationship with users is clearly defined. We hold their cryptocurrencies in a secure custody solution, where the assets are recorded in individual sub-accounts. Each user’s Bitcoins are always securely stored in their own sub-account, and a legal agreement governs the provision of custody services, ensuring that the client remains the sole owner of their Bitcoins at all times. Allowing users to start without their own wallets is crucial for attracting people who are unfamiliar with cryptocurrency.

## Self custody

We offer our users the ability to transfer their accumulated Bitcoins to their own wallets at any time, which enhances their personal security. This gives our users the flexibility to withdraw their cryptocurrencies from BitDCA app whenever they wish.

Withdrawals can be automated. Whenever the saved amount reaches $100, an automatic withdrawal can be triggered.&#x20;


# Application Design

## Welcome Screen

<figure><img src="/files/J6Oq46AVfoH3cRSzDEQU" alt=""><figcaption><p>Welcome Screen Littlebit app</p></figcaption></figure>

## Investment Settings

<figure><img src="/files/W63s0uRRoZHmk2kFjCFd" alt=""><figcaption><p>Investment Settings Littlebit app</p></figcaption></figure>

## Set your saving percentage

<figure><img src="/files/JWjeHTuCUoNA8TIdh7U7" alt=""><figcaption><p>Save your saving percentage</p></figcaption></figure>

## Withdrawal Bitcoin to your wallet

<figure><img src="/files/Nl6FrJbpv48F7QtdSHo6" alt=""><figcaption><p>Withdrawal Bitcoin to your wallet</p></figcaption></figure>


# Financial Stability

## Succesful fundraising and strong community

The shareholders' investment in the BitDCA has surpassed 2 million USD, demonstrating strong financial support and commitment of its founders.&#x20;

Additionally, more than 6 million USD has been raised during the presale of the BDCA token. As a result, the project already has a token holder base over 1.000 individuals. Over 90% of the sold tokens have been staked for several years.

## Financial Stability and Capital Adequacy

The operational security of BitDCA is fully supported by our strong financial backing. Currently, we have sufficient capital to operate for more than two years without any incoming revenue, while still financing our marketing efforts and referral program, all sustained by our existing cash flow reserves.


# Growth Projections

### Adoption & Growth strategy

The Littlebit application is built with long-term scale in mind. Its adoption strategy follows a deliberately phased rollout designed to reward early supporters, validate real economic activity, and unlock accelerated growth as regulatory and market conditions align.

The journey begins in the Czech Republic and expands outward, with each phase laying the groundwork for the next.

***

#### Phase 1 - Token holder first launch (Q4 2025, Czech Republic)

Littlebit’s initial public release took place in **Q4 2025** and was intentionally limited to the Czech Republic. Access was granted first and foremost to existing BDCA token holders as a clear form of recognition for those who supported the project from its earliest stages.

The application operated on an **invite-only model**, where BDCA token holders were the only participants able to onboard new users through personal referral links. This made the community itself the primary distribution channel at launch and ensured:

* high-quality early adopters,
* strong alignment between users and the BDCA ecosystem,
* and a controlled, resilient growth curve.

The app was available on both the Apple App Store and Google Play, while remaining accessible exclusively by invitation.

This phase was intentionally **not supported by large-scale marketing**. The objective was not headline growth, but proof of execution: infrastructure stability, user behavior validation, and the activation of real value flows.

Most importantly, this phase marked the start of **live revenue sharing**. BDCA token holders who staked their tokens began receiving bitcoin-based rewards sourced directly from real transaction fees generated within the Littlebit application.

***

#### Phase 2 - Public access & organic expansion (Q1 2026, Czech Republic)

At the start of **2026**, Littlebit transitioned from invite-only access to **public availability** within the Czech Republic. New users can now join freely, while the **referral reward mechanism remains active**, continuing to incentivize community-driven growth.

Both the referrer and the referred user receive bitcoin-based rewards, reinforcing a viral growth loop that naturally scales alongside usage.

This phase represents a critical inflection point:

* the product is live,
* revenue is being generated,
* and incentives are aligned across users, token holders, and the platform itself.

***

#### Phase 3 - Accelerated growth & market activation (Q1–Q2 2026)

With core functionality validated and early traction established, Littlebit enters a more **aggressive growth phase** in Q1–Q2 2026.

This stage introduces:

* expanded marketing and brand awareness initiatives,
* stronger content and influencer partnerships,
* and increased visibility across the Czech market.

The focus shifts toward **scaling user adoption, transaction volume, and recurring activity**, while maintaining the simplicity and trust that define the product experience.

***

#### Phase 4 - European expansion & regulatory-driven scale (2026)

Throughout **2026**, Littlebit prepares for expansion beyond the Czech Republic into additional European markets. This expansion is planned to align with ongoing progress toward **MiCA regulatory authorization**, which is currently in process.

Once completed, MiCA will serve as a key enabler for operating across a unified European market, unlocking access to hundreds of millions of potential users under a consistent regulatory framework.

This phase is expected to drive:

* rapid international user growth,
* a significant increase in transaction-driven revenue,
* and a growing reward pool distributed to BDCA token holders.

In parallel, Littlebit continues to evaluate additional global markets, positioning the platform for long-term expansion as a trusted and accessible bitcoin savings solution.

##


# Marketing Strategy

## Under the Radar

BitDCA has been silently developing in the pre-launch phase to maintain a strategic edge and protect the competitive advantage of its revolutionary product.

## GTM Marketing Strategy

A comprehensive marketing strategy was developed to ensure the successful launch of BitDCA application. The credibility and reach of our application are further enhanced by our collaboration with leading KOLs.

Our plans are also supported by preliminary agreements with key media outlets.

<figure><img src="/files/RzxE8l14nscT2W8lm7iU" alt=""><figcaption><p>Future BitDCA Ads Everywhere</p></figcaption></figure>

This strategy is managed and developed by marketing experts with more than 30 years of experience in international marketing in banking and fintech industries.

The marketing team is actively preparing a campaign set to launch at Q2 of 2025 in the Czech Republic, with Poland and the United Kingdom following later that year. This extensive campaign aims to reach over 37,000,000 potential users across these regions.

<figure><img src="/files/iTJ0brYrjPcDOT4GJYF5" alt=""><figcaption><p>BitDCA Initial Expansion in Europe</p></figcaption></figure>

## Beyond the European Continent

We are planning to expand our Littlebit mobile application to the Indian market as well. We have a business partner operating in India who manages millions of users. This strategic expansion includes the launch of a targeted marketing campaign. Thanks to a strong local presence and adaptation to the specifics of the Indian market, we expect to significantly grow our user base and strengthen BitDCA's global position.


# Meet us in person

BitDCA company is located in the center of Prague, Czech Republic.

Address:

Vaclavské square 47, Prague 1, 110 00

You  can connect with the BitDCA team in person at these premier events in Czech Republic:

#### BTCPrague 2025

Experience the [*largest Bitcoin conference*](https://btcprague.com/) in Europe on June 19th - 21st and explore the future of crypto with us.

#### CRYPTOBYTE Conference 2025

Discover emerging trends, cutting-edge solutions, and network with experts driving the next wave of digital finance with us at the [*Cryptobyte conference*](https://cryptobyte.cz).


# Team and Shareholders

## 30+ Team Members

The BitDCA application is being developed by an experienced team of managers, analysts, and developers who have a wealth of experience in fintech projects.

We have an internal team of product and technical specialists, mainly based in Prague, Czech Republic who design the product and the solution. The solution is implemented by one of the best Czech software companies with extensive experience in banking. [BitDCA's LinkedIn](https://www.linkedin.com/company/bitdca/)

You can learn more about each team member on our official website: <https://www.bitdca.com/>

## Investors and Shareholders

BitDCA is backed by a group of shareholders. Our investor base includes prominent figures from both Czech and international business circles, bringing a wealth of experience and strategic insight to our venture.

### Key Shareholders of BitDCA

**Aleš Minx**

Aleš Minx is one of the top managers in the Czech Republic. From July 2001 to May 2005 he was CEO of PPF a.s., Deputy Chairman of the Supervisory Board of PPF a.s. until March 2007, and he is currently Chairman of the Board of Directors of PPF Group N.V., which has total assets of EUR 43.4 billion.

**Miloslav Vyhnal**

Miloslav Vyhnal is a renowned private equity and M\&A expert with more than 25 years of experience. He worked in Karel Komárek’s KKCG group and RSBC group as a member of the Board of Directors and Chief Investment Officer. Here he was involved in key investment transactions. Miloslav Vyhnal is a prominent figure in the Czech investment sector.

**Vladislav Fedoš**

Vladislav Fedoš is a co-founder of ALPINE PRO, a brand specialising in the production and sale of outdoor clothing and accessories. ALPINE PRO was founded in 1998 and has been an award-winning supplier of sportswear to the Czech Olympic team since the 2010 Winter Olympics.

<figure><img src="/files/vtJ0tEEqqlZ2cTxiut8h" alt=""><figcaption><p>Major Shareholders of BitDCA</p></figcaption></figure>

The involvement of these high-profile investors underlines the credibility and potential of our project and brings us valuable expertise and networks. Their diverse backgrounds in technology, finance, and government provide us with a wealth of experience and strategic insight.


# Our Partners

BitDCA has established strategic partnerships with industry-leading organizations to ensure seamless operations, top-notch security, and global accessibility. These partners play a crucial role in supporting our ecosystem across key areas such as payment solutions, custody services, and exchange listings.

**Key Partnerships Include**

* **Aiia (Card Provider):** A Mastercard issuer facilitating secure and efficient card integration for BitDCA users.
* **Bitstamp for Cryptocurrency Custody (Secured by BitGo):** Ensures the safekeeping of digital assets with robust security protocols.
* **Cryptocurrency Exchange TBA:** The first CEX to list BDCA token, supporting its global adoption.
* **Regional Card Payment Providers:** Tailored payment solutions to ensure smooth transactions for users across different regions.


# BitDCA Road Map

We started to work on BitDCA in 2022 and we have traveled an incredible distance. The finish line is in front of us and we are ready to launch the Littlebit app.

## Most of the work is behind us!

* [x] Feasibility analysis and business plan creation.
* [x] Funding by shareholders and early investors.
* [x] Business analysis from a technical point of view and analytical description of individual parts of the application.
* [x] Partner research and their selection.
* [x] Transaction flows and third-party integration.
* [x] Definition of individual functions and acceptance criteria.
* [x] Development timeline, UX, UI, technology stack.
* [x] BDCA tokenomics and pre-sale smart contracts development and audits.
* [x] Breakdown of each step to the smallest detail and evidence of all tasks, setting up plan fulfillment control, assembling into individual sprints so that everything is linked to each other.
* [x] Delivery of the BitDCA app visual page.
* [x] Developed the application based on everything we did in the past.
* [x] Testing the complete application and preparing its launch.

## Execution & Growth Phase

* [x] Launch of the Littlebit application in the Czech Republic.
* [x] Invite-only access for BDCA token holders.
* [x] Referral-based onboarding for early users.
* [x] Activation of live transaction flows.
* [x] Start of revenue sharing from application fees.
* [x] Launch of BDCA revenue-sharing rewards for stakers.
* [ ] Public growth acceleration through marketing (Q1–Q2 2026).
* [ ] Expansion of user acquisition channels.
* [ ] Scaling transaction volume and recurring usage.
* [ ] MiCA regulatory authorization process (in progress).
* [ ] Preparation for European market expansion.
* [ ] Launch in additional European markets.
* [ ] International expansion roadmap

With the core product delivered and live operations underway, BitDCA has transitioned from development into execution. The focus now shifts toward scaling user adoption, expanding into new markets, and unlocking the full potential of the revenue-sharing model as regulatory and market conditions align.

### Please explore our comprehensive roadmap on <https://www.bitdca.com/>


# BDCA Token

BitDCA application is accompanied by its native BDCA token.

**Highlights about BDCA token**

1. BDCA token holders are rewarded with a share of the fees generated from every transaction made by users of the Littlebit app. For more details, refer to the [*Staking and NFTs*](/bdca-token/staking-and-rewards) chapter.
2. In the non-public presale, we have successfully raised over $6 million for BDCA tokens. Furthermore, 90% of these tokens have been staked for multiple years! For additional details, visit our website, audited by Certik.
3. The BDCA contract has been audited and includes no ADMIN role. This ensures that its usage cannot be stopped by any entity, and it is not possible to blacklist wallets or freeze its circulation.
4. A unique vesting mechanism is in place for team members. To claim their vested tokens, team members must contribute to increasing the token's value. Read more in the *BDCA Distribution and* *Vesting* section.


# BDCA Facts and Utility

BDCA token holders have the opportunity to be part of BitDCA's success and benefit from the growing adoption of Bitcoin infrastructure.

<table data-header-hidden><thead><tr><th width="307"></th><th></th></tr></thead><tbody><tr><td>Token symbol:</td><td>BDCA</td></tr><tr><td>Total supply</td><td>142,666,667 BDCA</td></tr><tr><td>Blockchain:</td><td>Binance Smart Chain - BEP-20 </td></tr><tr><td>Token Decimal:</td><td>18</td></tr><tr><td>Additional Token Minting:</td><td>No</td></tr><tr><td>Token Burning Functionality:</td><td>Yes</td></tr><tr><td>Ability to Adjust Transaction Tax<strong>:</strong></td><td>No</td></tr><tr><td>Blacklist Functionality:</td><td>No</td></tr><tr><td>Token utility in the initial phase:</td><td>Support for BitDCA project and loyalty program.</td></tr><tr><td>Token utility in the second phase:</td><td>Reward program for BDCA stakeholders.</td></tr><tr><td>Token utility in the third phase:</td><td>The BDCA token will be used on the BitDCA e-shop.</td></tr><tr><td>Smart Contract Address: </td><td>0x0c8382719ef242cae2247e4decb2891fbf699818</td></tr><tr><td>BitDCA Token Audit: </td><td>Yes, <a href="/pages/Zgn5dc1hxUP2NZuPoLyI">link here</a></td></tr></tbody></table>


# BDCA Distribution and Vesting

## BitDCA Token

There is a limited maximum supply of 142,666,667 BDCA tokens, all of which were *pre-minted  and distributed as outlined in this chapter.*

* The larger share of tokens has not been in circulation since the very beginning and is being released transparently through long-term vesting periods.
* The majority of tokens have been out of circulation since the beginning and are being released transparently through long-term vesting schedules.
* *Tokens and staking contracts have been audited and secured.*
* *Team tokens are subjected to community-focused vesting rules.*

## BDCA Token Distribution on March 1 2026

<table><thead><tr><th>Allocation</th><th>Tokens BDCA (approx)</th><th width="109">Share (approx)</th><th width="181">Unlock</th><th>Note</th><th></th></tr></thead><tbody><tr><td><strong>Total supply</strong></td><td><strong>142,666,667</strong></td><td><strong>100 %</strong></td><td><strong>N/A</strong></td><td><a href="https://bscscan.com/token/0x0c8382719ef242cae2247e4decb2891fbf699818"><em><strong>Contract</strong></em></a></td><td></td></tr><tr><td>Staking</td><td>67,000,000</td><td>47.00 %</td><td>Over 90% in 2029</td><td><a href="https://tokenomics.bitdca.com/">Details</a></td><td></td></tr><tr><td>Community</td><td>25,008,000</td><td>17.52 %</td><td><p>Cliff 3 M</p><p>Vesting 48 M</p></td><td><a href="https://bscscan.com/token/0x0c8382719ef242cae2247e4decb2891fbf699818?a=0x3615af945f4f3e96d7cf1b9b19b3187c033af6c4">Contract</a></td><td></td></tr><tr><td>Treasury</td><td>17,285,300</td><td>12.12 %</td><td>Vesting 48 M</td><td><a href="https://bscscan.com/token/0x0c8382719ef242cae2247e4decb2891fbf699818?a=0xe7ff5d82a930a6f6f9da5e7d76c52de1237592cf">Contract</a></td><td></td></tr><tr><td>Partnership</td><td>10,271,650</td><td>7.20 %</td><td><p>Cliff 3 M</p><p>Vesting 48 M</p></td><td><a href="/pages/fbiMXq3trFUEa3yiXNBc">Details</a></td><td></td></tr><tr><td>Liquidity reserve</td><td>7,268,000</td><td>5.10 %</td><td>100 %</td><td>for CEX listings and DEX LPs only</td><td></td></tr><tr><td>Team</td><td>8,005,770</td><td>5.65 %</td><td>Vested. Without staked tokens</td><td><a href="/pages/N4HdUtvNXSz3lLPbsUJ6">Details</a></td><td></td></tr><tr><td>Free floating supply</td><td>7,254,299</td><td>5.08%</td><td>N/A</td><td>Approx. value</td><td></td></tr></tbody></table>


# Presale Allocation

### **About presale tokens**

The presale tokens were purchased by early supporters of the BitDCA vision, forming a strong initial community of about 1,000 token holders.

These early supporters have staked over an impressive 90% of their tokens, as verified through immutable [*blockchain data*](https://bscscan.com/token/0x9624aAC5De2Dd24FF1CefE3B1151DfEca710e265). This staking activity plays a crucial role in maintaining the stability of the BDCA token price after its exchange listings and demonstrates the community’s strong trust and confidence in the BitDCA project.

## The presale was completely sold out on January 17, 2025, reaching an incredible target of $6,125,000!

You can check presale details onchain here: <https://bscscan.com/address/0xC907A9859C292537aA4dAd831214BA64224Ad4AF>

Note: There were few transactions made after the 17th of January. These transactions were made because some FIAT payments were sent to us before the official sold-out announcement of the presale, but due to the slow processing of FIAT payments, they were received only after the announcement, and we didn’t want to disappoint these supporters.

<figure><img src="/files/biH4drlgb5JHJs5CKAjz" alt=""><figcaption></figcaption></figure>

### Staking of Early Supporters

<table><thead><tr><th width="192">Staking Duration</th><th width="215">Distribution</th><th width="159">Staked BDCA</th></tr></thead><tbody><tr><td>2 years</td><td>2.4 %</td><td> 1.5M tokens</td></tr><tr><td>3 years</td><td>3.4 %</td><td> 2.1M tokens</td></tr><tr><td>4 years</td><td>4.1 %</td><td> 2.5M tokens</td></tr><tr><td>5 years</td><td>90.0 %</td><td> 55.6M tokens</td></tr></tbody></table>

**Note:** Data above are valid on the 1th of February 2025.  The proportions of individual stakes may vary over time depending on the amount of newly staked tokens in each category. [*Staking Contract Link*](https://bscscan.com/address/0x9e4892B99F2A6530cfBb2139768486daEfEe0d7E).&#x20;


# Community Allocation

### **About community allocation**

Community wallet is a dedicated treasury designed to empower and support our project’s ecosystem and its members. It serves as a financial foundation to fund initiatives that drive value for the community, such as rewards, grants, or innovative proposals. By allocating resources strategically, we ensure that the wallet benefits the project’s growth while fostering engagement and collaboration among our supporters.

### **Community Allocation Distribution**

The community allocation is subject to a 48-month vesting schedule, with linear releases every two weeks. The release began on: 00:00 1.6.2025

* The Community Token allocation represents over 15 % of the maximum supply of BDCA and is securely held in the Partnership vesting contract. For more details, refer to the vesting contract in the [*Audit*](/bitdca-smart-contracts/certik-token-and-business-audit) chapter.
* These tokens cannot be withdrawn arbitrarily. Their release is strictly tied to achieving specific  milestones which supports BitDCA growth and community, such as acquiring new users or driving staking volume.


# Team Allocation

### About Team **Allocation**

Team tokens are allocated to the primary creators of the BitDCA application and the BDCA ecosystem. These tokens enable the team to further expand the BitDCA vision and promote the adoption of BDCA. The team's tokens are distributed into several pools as follows:

<table><thead><tr><th width="191">Team's Pool Type</th><th width="159">Tokens</th><th width="234">Unlock</th><th>Note</th></tr></thead><tbody><tr><td>Vesting A</td><td>4,166,667</td><td>Cliff 3 M, vesting 48 M</td><td><a href="https://bscscan.com/address/0xC1b7d9bb1B09A2E67B3105E6a2CC79ba00bB31E7">Audited contract</a></td></tr><tr><td>Vesting B</td><td>CANCELED</td><td>Starts when the token price hits 1 USD, vesting 12M</td><td><a href="https://bscscan.com/address/0x52161e15F50F5293C7F6D65e4effb5b0c0a6F17A">Audited contract</a></td></tr><tr><td>Vesting C</td><td>3,050,000</td><td>Starts when the token price hits 2 USD, vesting 12M</td><td><a href="https://bscscan.com/address/0x8b8c7a21FD0373625DF68fa8d159CFC638457b99">Audited contract</a></td></tr><tr><td>Vesting D (staking)</td><td>4,500,000</td><td>Staked for 4 years</td><td><a href="https://bscscan.com/address/0x9e4892B99F2A6530cfBb2139768486daEfEe0d7E">Audited contract</a></td></tr><tr><td>Total</td><td>11,716,667</td><td></td><td>8.18 % of TGE supply</td></tr></tbody></table>

### **Team Tokens Vesting Mechanics**

The team tokens are governed by a unique, community-focused vesting system that sets a new standard in the Web3 space. The team must raise the BDCA token's value, to be eligible to claim their vested tokens.&#x20;

This innovative approach demonstrates the BitDCA team’s commitment to the success of the BDCA token and their absolute confidence in its long-term value.

**The start of the team’s token vesting is conditional on the BDCA token achieving specific price milestones. If these milestones are not met, the vesting process will not be triggered, and the tokens will remain permanently locked.**

### **Team's Vesting Pools**

* **Vesting A:** Follows a basic vesting schedule with a 3M cliff, after which tokens are released over 48 months. Cliff ended on 00:00 31.5.2025
* **Vesting B:** was CANCELED for team members.
* **Vesting C:** Activated when BDCA reaches a price of at least $2, representing approx. 13 times the launch price. Once the price target is reached, a 12 M vesting period begins.
* **Vesting D:** Locked in various staking options represented by NFTs.

The team’s allocation is released linearly every two weeks throughout the vesting period. When Vesting Pool C reaches its target price, the vesting schedule is triggered, initiating a 12-month vesting period.


# Partnership Allocation

### **About Partnership Allocation**

The Partnership allocation is designed to incentivize strategic collaborations by onboarding partners who contribute to user acquisition and overall project growth. Partners are rewarded according to the Partnership.

### **Partnership Allocation Distribution**

The Partnership allocation is subject to a 48-month vesting schedule, with linear releases every two weeks. The release begins after a 3 M cliff, ending on: 00:00 31.5.2025

* The Partnership Token allocation represents 9.17 % of the maximum supply of BDCA and is securely held in the Partnership vesting contract. For more details, refer to the vesting contract in the [*Audit*](/bitdca-smart-contracts/certik-token-and-business-audit) chapter.
* These tokens cannot be withdrawn arbitrarily. Their release is strictly tied to achieving specific partnership milestones, such as acquiring new KOLs, PR highlights, brand awarnes on large events.

These terms ensure that the Partnership allocation is effectively distributed based on real contributions to the ecosystem, fostering ongoing demand for BDCA and reinforcing its long-term sustainability.


# Treasury Allocation

**About Treasury Allocation**

The Treasury Tokens are allocated to support the long-term development and sustainability of the BitDCA ecosystem and community. They are intended to:

* Drive community growth through the BitDCA application's affiliate marketing program.
* Reward and incentivize activities within the existing BitDCA community.
* Provide liquidity for expanding BDCA listings on additional exchanges.

### **Treasury Allocation Distribution**

Treasury Allocation is subject to a 48-month vesting schedule, with linear releases every two weeks, ensuring steady vesting over time.&#x20;

* The Treasury token allocation represents over 12 % of the maximum supply of the BDCA and is securely held in the Treasury Vesting contract. For more details, refer to the vesting contract in the [*Audit*](/bitdca-smart-contracts/certik-token-and-business-audit) chapter.
* These tokens cannot be withdrawn arbitrarily. Their release is strictly governed by the vesting contract. Once released, the tokens can be used for their intended purposes in line with BitDCA's growth objectives.

Project growth-focused terms ensure that the Treasury allocation is distributed effectively based on real contributions to the ecosystem, driving ongoing demand for BDCA and reinforcing its long-term sustainability.


# Liquidity reserve

Liquidity Reserve tokens are dedicated exclusively to supporting market liquidity and ensuring smooth trading conditions. They are not intended for team use, rewards, or any other internal allocation.

The first centralized exchange listing took place on February 26, 2025, on MEXC.

We are aiming for another major CEX listing in Q2 or Q3 of 2026 - depending on the market.


# TGE Event

TGE of BDCA token was done on 2023-11-21.&#x20;

TGE tx ID: <https://bscscan.com/token/0x0c8382719ef242cae2247e4decb2891fbf699818?a=0x0000000000000000000000000000000000000000>

Succesful token presale was ongoing during 2024. About 90% of presale tokens are staked. More details in the Presale Allocation.


# Staking and Rewards

## Why Staking?

Staking represents a commitment to the vision of BitDCA - a belief that long-term dollar-cost averaging (DCA) into Bitcoin, made as simple as using a regular payment card, is a sound and effective strategy. BDCA staking offers a way to financially benefit from this concept.

When a BDCA token holder stakes their tokens, they will become eligible to earn a share of the fees generated by the Littlebit application. These fees will be paid out on a monthly basis and are not dependent on the company’s annual financial performance.

## **How Does It Work?**

Each time a user makes a payment with their linked payment card, a small transaction fee is deducted, which directly contributes to stakeholders through the staking mechanism.

<figure><img src="/files/RAF0W1iLNq6dafuqITPu" alt=""><figcaption><p>BitDCA Fees Sharing</p></figcaption></figure>


# Process of Staking

When BDCA tokens are staked in the staking contract, NFTs (BEP-721) are minted. Each stake is represented by a unique NFT, containing details about the BDCA staked amount and the staking duration.

BDCA token holders must stake their BDCA tokens on the [*staking website*](https://app.bitdca.com/).

Tokenholders can divide their holdings into multiple stakes, with a minimum of 100 BDCA tokens required per stake. Stakes smaller than 100 tokens are not currently allowed, though this condition may be subject to change in the future.

<figure><img src="/files/Co9SwYNpxc9dlvh4XvrO" alt=""><figcaption><p>BDCA staking process and liquidity</p></figcaption></figure>

Staking contract: <https://bscscan.com/address/0x9e4892B99F2A6530cfBb2139768486daEfEe0d7E>


# Staking Rewards

### Rewards in BTCB

A wallet holding the NFT automatically becomes eligible to receive rewards. These rewards are distributed on a monthly basis. Additionally, NFTs are transferable and can be sold to other wallets, enabling token holders to liquidate their staked assets by selling the NFTs.

Rewards will be paid in wrapped Bitcoin (BTCB) on the Binance Smart Chain (BEP-20).

Binance, a globally trusted leader in the crypto space and developer of Binance Smart Chain, ensures that BTCB is fully and transparently backed by real BTC in their custody. This provides unmatched security and confidence for stakeholders.

Staking allows token holders to lock BDCA for a period of 2, 3, 4, or 5 years. Each staking option offers different bonus rewards.&#x20;

<figure><img src="/files/Ge64T2fjG58sQRPd7cyr" alt=""><figcaption></figcaption></figure>


# Bonus Staking Rewards

### Bonus rewards in BDCA

If an NFT holder is eligible to receive $100 in rewards (paid in BTCB), he will also receive an additional 0-20% of this amount ($100) in BDCA as a second payment. For example, with a 5-year stake, the holder will receive $100 in BTCB and an additional $20 in BDCA.

Thanks to a sophisticated tokenomics system, these bonus rewards in BDCA are distributed in a non-inflationary way. **For each payout, tokens are bought from the market.** This method has a potential to increase BDCA value over time.

<table><thead><tr><th width="150"></th><th width="100"></th><th width="101"></th><th width="106"></th><th width="102"></th><th data-hidden></th></tr></thead><tbody><tr><td>Stake duration</td><td>2 years</td><td>3 years</td><td>4 years</td><td>5 years</td><td></td></tr><tr><td>Bonus rewards in BDCA</td><td>0 %</td><td>5 %</td><td>10 %</td><td>20 %</td><td></td></tr></tbody></table>

These rewards are credited directly to the stakeholder's wallet, making the BDCA tokens immediately liquid.

### Legacy bonus Staking Rewards

Some NFTs are eligible to earn higher bonus rewards in BDCA tokens. For more details, refer to the [*Legacy Staking Rewards*](/bdca-token/staking-and-rewards/legacy-bonus-staking-rewards) chapter.


# Legacy Bonus Staking Rewards

Our early supportes got Legacy NFTs, these NFTs are eligible for higher bonus rewards and are highly valuated on the secondary market.

<div data-full-width="false"><figure><img src="/files/RqiUTkzfXJILaSM3ehVS" alt=""><figcaption></figcaption></figure></div>

Bonus rewards for Legacy NFTs

<table><thead><tr><th width="202"></th><th></th><th width="137"></th><th width="142"></th><th width="132"></th><th data-hidden></th></tr></thead><tbody><tr><td>Duration</td><td>2 years</td><td>3 years</td><td>4 years</td><td>5 years</td><td></td></tr><tr><td><strong>Legacy</strong> Bonus rewards in BDCA</td><td>0 %</td><td>10 %</td><td>20 %</td><td>30 %</td><td></td></tr></tbody></table>

These rewards are credited directly to the stakeholder's wallet, making the BDCA tokens immediately liquid.

The last Legacy NFT was minted on 15/09/2024 with ID 1809.


# BDCA Tokenomics Simulation

## **BDCA Tokenomics Simulation**

The BDCA tokenomics framework has been designed within a comprehensive structure to effectively simulate and evaluate economic models.

<figure><img src="/files/ziCmelVaMZMfTD8B6YaO" alt=""><figcaption></figcaption></figure>

This expert approach enabled us to optimize the BDCA ecosystem, including token vesting schedules and distribution, ensuring long-term stability, fair token allocation, and sustainable growth. The detailed simulation reflects a balance between user incentives, staking mechanisms, and token circulation, while maintaining transparency and trust within the community.

By simulating hundreds of different scenarios and refining the tokenomics, we have developed a system that supports the project’s vision, aligns stakeholder interests, and fosters steady adoption over time.


# BDCA Price Stabilization

To support a stable and secure trading environment during the BDCA launch on CEX, we have partnered with a professional market maker. This collaboration ensures adequate liquidity and helps maintain the launch price, minimizing negative volatility and fostering investor confidence. It also aligns with best practices and regulatory requirements for fair and transparent trading.

This strategy is further reinforced by BitDCA’s carefully designed tokenomics. With approximately 90% of the tokens from the pre-sale phase staked for multiple years, the circulating supply is significantly reduced, contributing to the token's price stability.

By actively managing order books and liquidity, the market maker plays a key role in ensuring a smooth trading experience and safeguarding the interests of both early adopters and long-term stakeholders. This approach underscores BitDCA’s commitment to reliability and trust in the market.


# Portfolio and Rewards Tracking

## How to Stay Informed?

Users can stay updated on their NFTs and earned rewards through the Portfolio Overview Dashboard available on [staking.bitdca.com](https://staking.bitdca.com)


# BDCA Token on Exchanges

## BDCA Token on Exchanges

The BDCA token is already actively traded on both centralized and decentralized exchanges.

**Centralized Exchanges (CEXs):**

* [MEXC](https://www.mexc.com/exchange/BDCA_USDT?_from=search_spot_trade)
* [WEEX](https://www.weex.com/)

**Decentralized Exchange (DEX):**

* Third parties can provide liquidity pools on various DEXes

Further listings on major centralized exchanges are planned in the near future.


# Referral and Rewards

BitDCA introduces a community-driven referral program designed to reward both new and existing users for growing the BitDCA's user base. This initiative creates incentives for users to invite others while aligning with the broader goal of fostering long-term adoption and engagement.

### **Sprint 10,000**

As part of the initial referral program, users can earn **$20 in BTC** for every successful referral. The referred individual will also receive **$20 in BTC** credited to their BitDCA application. Rewards will be unlocked once the referred user saves at least **$20 in BTC** with the application.

#### **Exclusive Access**

Only users with staked BDCA tokens will have access to share the "Sprint 10,000" referral links.

### **Affiliate Program**

BitDCA is also developing an affiliate program to further incentivize growth and partnerships.  Providing additional ways for community members to benefit from their contributions to the ecosystem. Details of the program will be announced soon.


# Regulation Compliance

#### Regulatory Compliance

We have successfully secured all necessary authorizations and fulfilled the legislative requirements to operate within the European Union. This achievement reflects our commitment to providing a secure and legally compliant service for users across these regions.

Our legal teams have thoroughly outlined our client onboarding procedures, including full compliance with Know Your Customer (KYC) and Anti-Money Laundering (AML) standards, while ensuring our strict adherence to GDPR and data privacy regulations.

A major step forward is our ongoing progress toward the MiCA (Markets in Crypto-Assets) license. We have already officially submitted our MiCA license application — the result of extensive legal, operational, and technical preparations, and hundreds of pages of documentation. This was a major milestone in itself and demonstrates our long-term commitment to full regulatory alignment within the EU.


# BitDCA Smart Contracts

## Main BitDCA Contract Addresses

#### Token Contract:

{% embed url="<https://bscscan.com/token/0x0c8382719ef242cae2247e4decb2891fbf699818>" %}

#### Presale Contract:

{% embed url="<https://bscscan.com/address/0xC907A9859C292537aA4dAd831214BA64224Ad4AF>" %}

To see more details about the Presale contract, visit the [Presale Contract Details chapter](/bitdca-smart-contracts/presale-contract-details).

#### Staking Contract:

{% embed url="<https://bscscan.com/address/0x9e4892B99F2A6530cfBb2139768486daEfEe0d7E>" %}

To see more details about the Presale contract, visit the [Staking Contract Details chapter](/bitdca-smart-contracts/staking-contract-details).

#### NFT Contract:

{% embed url="<https://bscscan.com/address/0x9624aAC5De2Dd24FF1CefE3B1151DfEca710e265>" %}


# Certik token and business Audit

**BitDCA is audited by CERTIK and ranked among top 100 projects worldwide!**

[**https://skynet.certik.com/projects/bitdca#skynet**](https://skynet.certik.com/projects/bitdca#skynet)

<figure><img src="/files/AOJ4rYmYW7aSWVmnsbii" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/NxUQ0HrM9V2taxguq8q5" alt=""><figcaption></figcaption></figure>

Certik audited our contracts, to ensure you as much as possible about the security of BDCA token, we conducted additional audits by  GoPlus and TokenSniffer

## Contract Security

* Contract source code verified.
* No proxy.
* No mint function.
* No function found that retrieves ownership.
* Owner can‘t change balance.
* No hidden owner.
* This token can not self-destruct.
* No external call risk was found.
* This token is not a gas abuser.

## HONEYPOT RISK

* This does not appear to be a honeypot.
* Buy and sell tax: 0.00%.
* No codes were found to suspend trading.
* Holders can sell all of the tokens.
* The token can be bought.
* No trading cooldown function.
* No anti\_whale (Unlimited number of transactions).
* Anti-whale can not be modified.
* Tax cannot be modified.
* No blacklist.
* No whitelist.
* No tax changes were found for personal addresses.

<figure><img src="/files/p17D31IgVNO7tVax5Vw9" alt=""><figcaption><p>TokenSniffer and GoPlus Audit Results</p></figcaption></figure>


# Presale Contract Details

## Presale Contract

#### Table of Contents <a href="#table-of-contents" id="table-of-contents"></a>

1. [Introduction](https://blockczech.gitbook.io/bdca-smart-contracts-docs#introduction)
2. [Contract Overview](https://blockczech.gitbook.io/bdca-smart-contracts-docs#contract-overview)
3. [Presale Parameters](https://blockczech.gitbook.io/bdca-smart-contracts-docs#presale-parameters)
4. [Modifiers](https://blockczech.gitbook.io/bdca-smart-contracts-docs#modifiers)
5. [Events](https://blockczech.gitbook.io/bdca-smart-contracts-docs#events)
6. [Functions](https://blockczech.gitbook.io/bdca-smart-contracts-docs#functions)

#### Introduction <a href="#introduction" id="introduction"></a>

Presale contracts facilitate the sale of a new cryptocurrency (presale token) before it launches on a public exchange. This contract offers a specific functionality that combines a presale mechanism with an affiliate marketing system. Here's a brief overview of what the contract enables:

Users can purchase presale tokens using either BNB or another ERC20 token. The contract employs Oracles to obtain the latest token prices, ensuring dynamic presale token pricing based on defined tiers. An interesting aspect is the dynamic price tier which will be changed after some amount of presale tokens has been bought. The contract integrates an affiliate marketing system, where affiliates can earn bonuses based on their own sales and the sales generated by the affiliates they refer (their children) up to a certain level within the referral hierarchy. To qualify for bonuses, there are minimum purchase requirements in place for both affiliates and their referred affiliates (children). Founders, potentially those at the top of the affiliate hierarchy, have a distinct bonus calculation mechanism compared to regular affiliates.

#### Contract Overview <a href="#contract-overview" id="contract-overview"></a>

Presale Mechanics:

* The contract allows users to purchase presale tokens using either BNB (Binance Coin) or another ERC20 token (USDT). It leverages Oracles(Chainlink), external data providers, to fetch the latest BNB and paid-with token (ERC20 token used for purchase) prices. Based on these dynamic prices and pre-defined tiers(`PriceTier`), the contract calculates the presale token price for each purchase.

Affiliate Marketing System:

* The contract facilitates the creation of an affiliate marketing system, where affiliates can be added to a hierarchical structure. This structure allows affiliates to earn bonuses based not only on their own sales but also on the sales generated by the affiliates they refer (their children) up to a certain level within the hierarchy. To prevent abuse and ensure active participation, the contract enforces minimum purchase requirements. Both affiliates and their referred affiliates (children) must meet these minimum purchase requirements to qualify for any bonus payouts. Founders, potentially those at the top of the affiliate hierarchy, have a separate bonus calculation mechanism compared to regular affiliates.

#### Presale Parameters <a href="#presale-parameters" id="presale-parameters"></a>

**Oracle Interfaces**

* `bnbPriceFeed`: An interface to interact with the BNB price feed.
* `paidWithTokenPriceFeed`: An interface to interact with the token used for payment price feed.

**Numeric Constants**

* `DECIMALS`: The number of decimal places for token values.
* `DENOMINATOR`: The denominator used for calculations.
* `PERCENTAGE_DENOMINATOR`: The denominator for percentage calculations.
* `ORACLE_DENOMINATOR`: The denominator for oracle values.
* `USD_DENOMINATOR`: The denominator for USD calculations.

**Role Constants**

* `MANAGER_ROLE`: The keccak256 hash representing the manager role.

**Minimum Purchase Requirements**

* `minPurchaseAmount`: The minimum purchase amount in USD.
* `minChildPurchaseAmount`: The minimum purchase amount for child affiliates.

**Payment Ratio**

* `paidWithRatioInPersent`: The ratio of payment in percentage.
* `totalTokenSoldAmount`: The total number of presale tokens sold.
* `paidWithPresaleDecimalsDiff`: The difference in decimals between the paid token and the presale token.

**Paused State**

* `paused`: Indicates whether the presale is paused or active.

**Affiliate Levels**

* `maxLevel`: The maximum level of affiliates.
* `minChildsReachedDestinationValue`: The minimum number of child affiliates required to reach the destination value.

**Token Decimals**

* `tokenDecimals`: The number of decimals for the presale token.

**Paid With Token Receiver Address**

* `receiverOfEarnings`: The address to receive presale earnings.

**Token Contracts**

* `paidWithToken`: The contract address of the ERC20 token used for payment(e.g. USDT).
* `presaleToken`: The contract address of the presale token.

**Current Price Tier**

* `priceTier`: The current price tier of the presale.

**Fee Distribution Array**

* `feePercentageDistribution`: An array representing the percentage distribution of fees.

**Affiliate Mapping**

* `affiliateIdChildsReachedDestinationValue`: The number of child affiliates who have reached the destination value.
* `affiliateIdToAddress`: The address associated with each affiliate ID.
* `affiliateIdToParentAffiliateId`: The parent affiliate ID associated with each affiliate ID.
* `affiliateIdAffiliatedUSDAmount`: The USD amount affiliated with each affiliate ID.
* `affiliateIdSoldTokenAmount`: The number of presale tokens sold for each affiliate ID.
* `addressToAffiliateId`: The affiliate ID associated with each address.
* `isFounder`: Indicates whether an address is a founder.

**Hot Wallet**

* `hotwallet`: The address of the hot wallet for the presale.

**Fixed Funds**

* `fixedFundsAmount`: The fixed amount of funds (in BNB) reserved for fiat buyers.

#### Modifiers <a href="#modifiers" id="modifiers"></a>

**Not Paused Modifier**

* `notPaused`: Throws if the presale is paused.
  * Description: Ensures that the presale is not paused before executing the function.
  * Usage: Apply this modifier to functions that should only be called when the presale is not paused.
  * Example:

    Copy

    ```
    modifier notPaused() {
        require(!paused, "Presale is paused");
        _;
    }
    ```

**Is Paused Modifier**

* `isPaused`: Throws if the presale is not paused.
  * Description: Ensures that the presale is paused before executing the function.
  * Usage: Apply this modifier to functions that should only be called when the presale is paused.
  * Example:

    Copy

    ```
    modifier isPaused() {
        require(paused, "Presale is not paused");
        _;
    }
    ```

#### Events <a href="#events" id="events"></a>

**Price Setter Change Event**

* `PriceSetterChange`: Emits when the price setter address is changed.
  * Parameters:
    * `oldPriceSetter`: The address of the old price setter.
    * `newPriceSetter`: The address of the new price setter.

**Price Change Event**

* `PriceChange`: Emits when the presale token price changes.
  * Parameters:
    * `oldPrice`: The old price of the presale token.
    * `newPrice`: The new price of the presale token.

**Bought With BNB Event**

* `BoughtWithBNB`: Emits when presale tokens are bought with BNB.
  * Parameters:
    * `buyer`: The address of the buyer.
    * `affiliateId`: The ID of the affiliate.
    * `paid`: The amount paid in BNB.
    * `bought`: The amount of presale tokens bought.

**Bought With Token Event**

* `BoughtWithToken`: Emits when presale tokens are bought with another ERC20 token.
  * Parameters:
    * `buyer`: The address of the buyer.
    * `affiliateId`: The ID of the affiliate.
    * `paid`: The amount paid with the token.
    * `bought`: The amount of presale tokens bought.

**Price Updated Event**

* `PriceUpdated`: Emits when the price tier is updated.
  * Parameters:
    * `oldPriceTier`: The old price tier.
    * `newPriceTier`: The new price tier.

**Bought With BNB By Fiat Event**

* `BoughtWithBNBByFiat`: Emits when presale tokens are bought with BNB by fiat.
  * Parameters:
    * `caller`: The address of the caller.
    * `buyer`: The address of the buyer.
    * `affiliateId`: The ID of the affiliate.
    * `paid`: The amount paid in BNB.
    * `bought`: The amount of presale tokens bought.
    * `sendPresaleTokens`: Indicates whether presale tokens were sent to the buyer.

**Bought With Token By Fiat Event**

* `BoughtWithTokenByFiat`: Emits when presale tokens are bought with another ERC20 token by fiat.
  * Parameters:
    * `caller`: The address of the caller.
    * `buyer`: The address of the buyer.
    * `affiliateId`: The ID of the affiliate.
    * `paid`: The amount paid with the token.
    * `bought`: The amount of presale tokens bought.
    * `sendPresaleTokens`: Indicates whether presale tokens were sent to the buyer.

#### Functions <a href="#functions" id="functions"></a>

**initialize**

Initializes the presale contract with necessary parameters.

Copy

```
function initialize(
    address _presaleToken,
    address _paidWithToken,
    address _admin,
    address _bnbOracle,
    address _paidWithTokenOracle,
    uint256 _beforePrice,
    uint256 _fromTokenAmount,
    uint256 _afterPrice,
    uint256[] memory _feePercentageDistribution
) public initializer 
```

**Parameters**

* `address _presaleToken`: The address of the presale token.
* `address _paidWithToken`: The address of the token used for payment.
* `address _admin`: The address of the admin.
* `address _bnbOracle`: The address of the BNB oracle.
* `address _paidWithTokenOracle`: The address of the token oracle.
* `uint256 _beforePrice`: The price before the presale.
* `uint256 _fromTokenAmount`: The amount of tokens available for presale.
* `uint256 _afterPrice`: The price after the presale.
* `uint256[] memory _feePercentageDistribution`: An array of fee percentage distribution.

**Modifiers**

* `initializer`: Ensures that the function is only called during contract initialization.

**Returns**

None

***

**\_authorizeUpgrade**

Internal function for upgrading proxy contract to the `newImplementation` addrress.

Copy

```
function _authorizeUpgrade(address newImplementation) internal override onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `address newImplementation`: The address of the new implementation.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the default admin role.

**Returns**

None

***

**setHotWallet**

Sets the address of the hot wallet.

Copy

```
function setHotWallet(address _newHotWallet) external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `address _newHotWallet`: The address of the hot wallet.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

***

**setFixedFundsAmount**

Sets the fixed funds amount. Upon execution, the function updates the `fixedFundsAmount` variable with the specified `_amount`. This variable is subsequently utilized in transactions where tokens are purchased "byfiat" (`buyTokensWithTokenByFiat` and `buyTokensWithBNBByFiat`) ensuring that buyers receive the designated fixed funds along with their token allocations.

Copy

```
function setFixedFundsAmount(uint256 _amount) external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `uint256 _amount`: The fixed funds amount.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

***

**setPresaleToken**

Sets the presale ERC20 token address.

Copy

```
function setPresaleToken(address _presaleToken) external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `address _presaleToken`: The address of the presale token.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

***

**setMaxLevel**

Sets the maximum level.

Copy

```
function setMaxLevel(uint8 _maxLevel) external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `uint8 _maxLevel`: The maximum level.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

***

**setPaidWithToken**

Sets the ERC20 token used for payment.

Copy

```
function setPaidWithToken(address _paidWithToken) external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `address _paidWithToken`: The address of the token used for payment.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

***

**pause**

Pauses the presale contract.

Copy

```
function pause() external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

***

**unpause**

Unpauses the presale contract.

Copy

```
function unpause() external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

***

**setPaidWithRatioInPersent**

This function configures the allocation percentage for affiliate bonuses between the `paidWith` and `presale` tokens. When `paidWithRatioInPersent` is set to `0`, affiliate bonuses will be exclusively provided in `presale` tokens. Conversely, if `paidWithRatioInPersent` is set to `PERCENTAGE_DENOMINATOR` (`10^7`), affiliate bonuses will be exclusively provided in `paidWith` tokens.

Copy

```
function setPaidWithRatioInPersent(uint256 _paidWithRatioInPersent) external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `uint256 _paidWithRatioInPersent`: The paid with ratio persentage between `paidWith` and `presale` tokens used for affiliate rewards (bonuses).

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

***

**setMinimumPurchasesForTheBonus**

This function allows the administrator of the presale contract to set the minimum purchase amounts required to qualify for bonuses. By specifying `_minPurchaseAmount`, which represents the minimum purchase amount in USD (United States Dollars), and `_minChildPurchaseAmount`, indicating the minimum purchase amount for affiliates' children, the administrator can tailor the bonus criteria to align with the presale's objectives.

The flexibility provided by this function enables the presale contract to incentivize larger purchases while also ensuring that affiliates and their referred buyers meet specific minimum thresholds to qualify for bonuses. By adjusting these parameters, the presale contract can effectively manage bonus distributions and promote desirable purchasing behaviors among participants.

Access to this function is restricted to users with the `DEFAULT_ADMIN_ROLE`, ensuring that only authorized administrators can modify the minimum purchase requirements. This security measure safeguards the integrity of the presale process and maintains transparency in bonus eligibility criteria. Once the minimum purchase amounts are set, they are stored in the contract state variables `minPurchaseAmount` and `minChildPurchaseAmount` for reference during bonus calculations.

Copy

```
function setMinimumPurchasesForTheBonus(uint256 _minPurchaseAmount, uint256 _minChildPurchaseAmount) public onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `uint256 _minPurchaseAmount`: The minimum number of purchases required to qualify for affiliate bonuses.
* `uint256 _minChildPurchaseAmount`: The minimum number of purchases required to be purchased by child affiliates for qualify affiliate bonuses.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

***

**setMinimumChildsReachedDestinationValue**

This function enables the presale contract administrator to define the minimum number of children required to achieve a predetermined destination value. The `_minChildsReachedDestinationValue` parameter specifies the minimum count of children necessary to reach the specified destination value (`affiliateIdChildsReachedDestinationValue`).

This function is accessible only to users with the `DEFAULT_ADMIN_ROLE`, ensuring that only authorized administrators can configure the minimum child requirement.

Upon invocation, the contract's `minChildsReachedDestinationValue` variable is updated with the provided minimum child requirement.

Copy

```
function setMinimumChildsReachedDestinationValue(uint8 _minChildsReachedDestinationValue) public onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `uint8 _minChildsReachedDestinationValue`: The minimum number of child nodes reached to qualify for the affiliate bonus.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

***

**updateFeeDistributionArray**

This function updates the fee distribution array, which specifies the percentage distribution of fees from the purchased amount. Each affiliate level can have a unique percentage distribution, allowing for flexibility in fee allocation based on affiliate hierarchy.

Copy

```
function updateFeeDistributionArray(uint256[] memory _feePercentageDistribution) external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `uint256[] memory _feePercentageDistribution`: An array containing the updated fee percentage distribution.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

**Example**

BSCscan

"updateFeeDistributionArray" tab

| Fields                      | Value                                                          |
| --------------------------- | -------------------------------------------------------------- |
| \_feePercentageDistribution | \[1000000, 500000, 250000, 125000, 62500, 31250, 15625, 15625] |

`_feePercentageDistribution` - this field represents an array of `uint256` values, where each value represents the fee percentage (in basis points) allocated to the corresponding affiliate level. The fee percentages are based on a `PERCENTAGE_DENOMINATOR` constant, which is equal to `10^7`.

For example:

* 10% of the `PERCENTAGE_DENOMINATOR` (10,000,000) is `1,000,000`
* 5% of the `PERCENTAGE_DENOMINATOR` (10,000,000) is `500,000`

Code

Copy

```
await presale.updateFeeDistributionArray([1000000, 500000, 250000, 125000, 62500, 31250, 15625, 15625])
```

***

**updateFeeDistribution**

This function updates exactly one position in the fee distribution array (`updateFeeDistributionArray)`.

Copy

```
function updateFeeDistribution(uint256 _key, uint256 _value) external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `uint256 _key`: The key for which the fee distribution needs to be updated.
* `uint256 _value`: The new fee percentage for the given address.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

**Example**

BSCscan

"updateFeeDistribution" tab

| Fields  | Value  |
| ------- | ------ |
| \_key   | 0      |
| \_value | 500000 |

`_key`- This field represents the key (index) in the fee distribution array for which the fee distribution needs to be updated.

`_value` - This field represents the new fee percentage for the given key (index). The fee percentage should be provided in basis points relative to the `PERCENTAGE_DENOMINATOR`, which is `10^7`.

For example:

* 5% of the `PERCENTAGE_DENOMINATOR` (10,000,000) is `500,000`

Code

Copy

```
await presale.updateFeeDistribution(0, 500000);
```

***

**updatePriceTier**

The function enables users with the `DEFAULT_ADMIN_ROLE` role to update the price of the presale token. This includes setting the price before reaching a certain threshold of token sales and adjusting the price after surpassing that threshold.

Copy

```
function updatePriceTier(uint256 _beforePrice, uint256 _fromTokenAmount, uint256 _afterPrice) public onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `uint256 _beforePrice`: Represents the price of the presale token before the total number of tokens sold (`totalTokenSoldAmount`) equals or exceeds the specified `_fromTokenAmount`.
* `uint256 _fromTokenAmount`: Denotes the new target amount of presale tokens to be sold.
* `uint256 _afterPrice`: Indicates the price of the presale token after the total number of tokens sold (`totalTokenSoldAmount`) equals or exceeds the specified `_fromTokenAmount`.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

**Example**

BSCscan

"updatePriceTier" tab

| Fields            | Value                |
| ----------------- | -------------------- |
| \_beforePrice     | 10000000             |
| \_fromTokenAmount | 20000000000000000000 |
| \_afterPrice      | 20000000             |

`_beforePrice` - this field represents the price of the presale token before the total number of tokens sold (`totalTokenSoldAmount`) equals or exceeds the specified `_fromTokenAmount`.(`USD_DENOMINATOR` is equal to 10^6, so 10$ = 10 \* 10^6)

`_fromTokenAmount` - this field indicates the amount of presale tokens to be sold. Presale tokens use decimals of 10^18. Therefore, `_fromTokenAmount` is also indicated in 10^18 (if you would like to change the price after 20 tokens have been sold, you need to enter 20 \* 10^18 as an input).

`_afterPrice` - this field represents the price of the token after the total number of tokens sold. (`USD_DENOMINATOR` is equal to 10^6, so 20$ = 20 \* 10^6)

Code

Copy

```
// before price 10$, denominator 10^6
const beforePrice = ethers.utils.parseUnits("10", "mwei");
// after price 20$, denominator 10^6
const afterPrice = ethers.utils.parseUnits("20", "mwei");
const fromTokenAmount = 10;
await presale.updatePriceTier(beforePrice, fromTokenAmount, afterPrice);
```

***

**addAffiliate**

Adds a new affiliate to the contract.

Copy

```
function addAffiliate(uint256 _newAffiliateId, uint256 _parentAffiliateId, address _newAffiliateAddress) external onlyRole(MANAGER_ROLE)
```

**Parameters**

* `uint256 _newAffiliateId`: ID of the new affiliate.
* `uint256 _parentAffiliateId`: ID of the parent affiliate.
* `address _newAffiliateAddress`: Address of the new affiliate.

**Parameters**

* `onlyRole(MANAGER_ROLE)`: Restricts the function to be called only by users with the MANAGER\_ROLE role.

**Returns**

None

**Example**

BSCscan

"addAffiliate" tab

| Fields                | Value                                      |
| --------------------- | ------------------------------------------ |
| \_newAffiliateId      | 1                                          |
| \_parentAffiliateId   | 0                                          |
| \_newAffiliateAddress | 0x83190245eca819ff186Da8296aa218f23F059A4c |

`_newAffiliateId` - this field represents the unique identifier for the new affiliate. It should be a `uint256` integer

`_parentAffiliateId` - this field indicates the unique identifier of the parent affiliate under which the new affiliate will be added. It should be a `uint256` integer.

`_newAffiliateAddress` - this field specifies the address of the new affiliate.

Code

Copy

```
const newAffiliateId = 1;
const parentAffiliateId = 0;
const newAffiliateAddress = "0x00...abc"; // add valid address
await presale.addAffiliate(newAffiliateId, parentAffiliateId, newAffiliateAddress);
```

***

**updateAffiliate**

Updates the address of an existing affiliate.

Copy

```
function updateAffiliate(uint256 _affiliateId, address _newAffiliateAddress) external onlyRole(MANAGER_ROLE)
```

**Parameters**

* `uint256 _affiliateId`: ID of the existing affiliate.
* `address _newAffiliateAddress`: New address of the affiliate.

**Parameters**

* `onlyRole(MANAGER_ROLE)`: Restricts the function to be called only by users with the MANAGER\_ROLE role.

**Returns**

None

**Example**

BSCscan

"addAffiliate" tab

| Fields                | Value                                      |
| --------------------- | ------------------------------------------ |
| \_affiliateId         | 1                                          |
| \_newAffiliateAddress | 0x83190245eca819ff186Da8296aa218f23F059A4c |

`_affiliateId` - this field represents the unique identifier for an existing affiliate. It should be a `uint256` integer

`_newAffiliateAddress` - this field specifies the new address of the already exist affiliate.

Code

Copy

```
const affiliateId = 1;
const newAffiliateAddress = "0x00...bca"; // add valid address
await presale.updateAffiliate(affiliateId, newAffiliateAddress);
```

***

**updateBNBPriceFeed**

Updates the price feed(oracle feed) for BNB (Binance Coin).

Copy

```
function updateBNBPriceFeed(address _priceFeed) external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `address _priceFeed`: Address of the new BNB price feed contract.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by users with the DEFAULT\_ADMIN\_ROLE role.

**Returns**

None

***

**updatePaidWithTokenPriceFeed**

Updates the price feed(oracle) for the token used for payments.

Copy

```
function updatePaidWithTokenPriceFeed(address _priceFeed) external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

`address _priceFeed`: Address of the new token price feed contract(Oracle).

**Modifiers**

`onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by users with the DEFAULT\_ADMIN\_ROLE role.

**Returns**

None

***

**setReceiverOfEarnings**

Sets the address of the receiver of earnings. Used for transferring `paidWith`(both native and ERC20 tokens) to be withdrawed.

Copy

```
function setReceiverOfEarnings(address payable _receiverOfEarnings) external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `address _receiverOfEarnings`: Address of the receiver of earnings.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by users with the DEFAULT\_ADMIN\_ROLE role.

**Returns**

None

***

**setFounder**

Sets whether an affiliate is a founder or not. Founders hold a unique privilege where they receive any unallocated affiliate bonuses. In scenarios where the maximum level of affiliate is set to 8, and the number of affiliates before the founder is less than 8, the founder receives all leftover bonuses, ensuring that no bonuses remain unclaimed.

Copy

```
function setFounder(uint256 _affiliateId, bool _isFounder) external onlyRole(MANAGER_ROLE)
```

**Parameters**

* `uint256 _affiliateId`: ID of the affiliate.
* `bool _isFounder`: Boolean indicating whether the affiliate is a founder or not.

**Modifiers**

* `onlyRole(MANAGER_ROLE)`: Restricts the function to be called only by users with the MANAGER\_ROLE role.

**Returns**

None

***

**getPrice**

Gets the current price of the presale token.

Copy

```
function getPrice() public view returns (uint256)
```

**Returns**

* `uint256`: Current price of the presale token.

***

**buyTokensWithBNB**

This function enables users to purchase presale tokens using BNB. The amount of BNB sent by the user is converted to presale tokens based on the current exchange rate and the user's affiliate ID. After the token purchase, affiliate bonuses are distributed accordingly, and the transaction details are emitted through an event.

Copy

```
function buyTokensWithBNB(uint256 _affiliateId) public payable notPaused nonReentrant
```

**Parameters**

* `uint256 _affiliateId`: ID of the affiliate.

**Modifiers**

* `payable`: Indicates that this function can receive BNB.
* `notPaused`: Ensures that the presale contract is not paused.
* `nonReentrant`: Prevents reentrancy attacks.

**Returns**

None

**Example**

BSCscan

"buyTokensWithBNB" tab

| Fields           | Value |
| ---------------- | ----- |
| buyTokensWithBNB | 0.001 |
| \_affiliateId    | 1     |

`buyTokensWithBNB` - this field should contain the amount of BNB (native token of Binance Smart Chain) you wish to send for purchasing tokens. The value needs to be provided in ether, with comma separators if the value is a float.(If you want to send 0.001 BNB, you should input `0.001`).

`_affiliateId` - this field is used to specify the affiliate ID as a `uint256` integer.

Code

Copy

```
const affiliateId = 1;
const paidBNB = ethers.utils.parseEther("0.001"); // 0.001 eth
await presale.buyTokensWithBNB(affiliateId, {value: paidBNB});
```

***

**buyTokensWithToken**

With this function, users can buy presale tokens using another ERC20 token. The specified amount of ERC20 tokens is transferred from the user's wallet to the presale contract. The tokens are then converted to presale tokens, and the corresponding affiliate bonuses are distributed. Finally, the transaction details are emitted through an event.

Copy

```
function buyTokensWithToken(uint256 _paidWithTokenAmount, uint256 _affiliateId) external notPaused nonReentrant
```

**Parameters**

* `uint256 _paidWithTokenAmount`: The amount of a different token (e.g., BUSD) to be exchanged for presale tokens.
* `uint256 _affiliateId`: The ID of the affiliate who referred the buyer. This parameter is required for tracking affiliate bonuses.

**Modifiers**

* `notPaused`: This function can only be executed when the presale is not paused.
* `nonReentrant`: This function is protected against reentrancy attacks to prevent reentrant calls.

**Returns**

None

**Example**

BSCscan

"buyTokensWithToken" tab

| Fields                | Value                |
| --------------------- | -------------------- |
| \_paidWithTokenAmount | 50000000000000000000 |
| \_affiliateId         | 1                    |

`_paidWithTokenAmount` - this field represents the amount of USDT tokens being paid, expressed in the smallest unit (wei). For USDT, which has 18 decimals, 1 USDT is equivalent to 10^18 wei. (50 \* 10^18 = 50 USDT)

`_affiliateId` - this field is used to specify the affiliate ID as a `uint256` integer.

Code

Copy

```
// assume that USDT token has decimals 18, which means 1 USDT = 1 * 10^18.
const paidUSDT = ethers.utils.parseUnits("50", "ether"); // 50 USDT
const affiliateId = 1;
await presale.buyTokensWithToken(paidUSDT, affiliateId);
```

***

**buyTokensWithBNBByFiat**

Managers can utilize this function to manually purchase presale tokens on behalf of a buyer using BNB (Binance Coin) as a payment method, enabling a fiat-based acquisition process. This function is particularly beneficial for buyers who wish to participate in the presale but prefer using fiat for their purchase.

Upon invocation, the manager specifies essential parameters including the affiliate Id (`_affiliateId)`, buyer's address (`_buyer`), and whether the presale tokens should be directly sent to the buyer (`_sendPresaleTokens`). This function requires the manager role (MANAGER\_ROLE) for execution and is only operational when the presale contract is not paused to ensure seamless transactions.

Before processing the transaction, several conditions are verified. Firstly, the buyer's address must be linked to an existing affiliate Id within the presale contract, ensuring that only affiliated buyers can participate in this purchase mechanism. Additionally, the amount of BNB sent must exceed a predefined fixed amount(`fixedFundsAmount`) which will be provided to the buyer in order for buyer to further transact their tokens (presale / BDCA tokens). In addition, the BNB sent by the manager role corresponds to the affiliate bonuses earned, ensuring transparency and alignment with the affiliate program. By default, the total affiliate bonus is equal to 20% of the total amount sent by buyers. Therefore, the manager will send only 20% of the original buyer amount, along with an additional fixed amount to cover at least one transaction for the buyer.

Finally, an event is emitted to record the transaction details, providing a transparent record of the purchase process. This event contains pertinent information including the addresses of the manager and buyer, affiliate Id, the amount of BNB sent, the corresponding presale token amount, and whether the presale tokens were directly sent to the buyer.

Copy

```
function buyTokensWithBNBByFiat(uint256 _affiliateId, address _buyer, bool _sendPresaleTokens) public payable onlyRole(MANAGER_ROLE) notPaused nonReentrant
```

**Parameters**

* `uint256 _affiliateId`: The ID of the affiliate who referred the buyer. This parameter is required for tracking affiliate bonuses.
* `address _buyer`: The address of the buyer who will receive the presale tokens.
* `bool _sendPresaleTokens`: A boolean flag indicating whether the presale token(BDCA) should be send from contract(Presale) to the `_buyer` address.

**Modifiers**

* `onlyRole(MANAGER_ROLE)`: Restricts the function to be called only by users with the manager role.
* `notPaused`: This function can only be executed when the presale is not paused.
* `nonReentrant`: This function is protected against reentrancy attacks to prevent reentrant calls.

**Returns**

None

**Example**

BSCscan

"buyTokensWithBNBByFiat" tab

| Fields                 | Value                                      |
| ---------------------- | ------------------------------------------ |
| buyTokensWithBNBByFiat | 0.001                                      |
| \_affiliateId          | 1                                          |
| \_buyer                | 0x83190245eca819ff186Da8296aa218f23F059A4c |
| \_sendPresaleTokens    | false                                      |

`buyTokensWithBNBByFiat` - this field should contain the amount of BNB (native token of Binance Smart Chain) you wish to send for purchasing tokens. The value needs to be provided in ether, with comma separators if the value is a float(If you want to send 0.001 BNB, you should input `0.001`). By default, the total affiliate bonus is equal to 20% of the total amount sent by buyers. Therefore, the manager will send only 20% of the original buyer amount, along with an additional fixed amount `fixedFundsAmount` to cover at least one transaction for the buyer.

`_affiliateId` - this field is used to specify the affiliate ID as a `uint256` integer.

`_buyer` - this field is used to specify the address of the buyer who will receive the tokens.

`_sendPresaleTokens` - this boolean field indicates whether or not to send presale tokens(BDCA) to the `_buyer` address.

Code

Copy

```
const affiliateId = 1;
const buyerAddress = "0x00...abc"; // add valid address
const sendPresaleTokens = false; // will not send BDCA tokens to the buyer address
const paidBNB = ethers.utils.parseEther("0.001"); // 0.001 eth
await presale.buyTokensWithBNBByFiat(
    affiliateId,
    buyerAddress,
    sendPresaleTokens,
    {value: paidBNB}
);
```

***

**buyTokensWithTokenByFiat**

Managers can utilize this function to facilitate the purchase of presale tokens using another ERC20 token (by default `USDT`) as a payment method, enabling a fiat-based acquisition process. This function is particularly beneficial for buyers who wish to participate in the presale but prefer using fiat for their purchase.

Upon invocation, the manager specifies essential parameters including the amount of ERC20 token (`_paidWithTokenAmount`), the affiliate Id (`_affiliateId`), buyer's address (`_buyer`), and whether the presale tokens should be directly sent to the buyer (`_sendPresaleTokens`). This function requires the manager role (`MANAGER_ROLE`) for execution and is only operational when the presale contract is not paused to ensure seamless transactions.

Before processing the transaction, several conditions are verified. Firstly, the buyer's address must be linked to an existing affiliate Id within the presale contract, ensuring that only affiliated buyers can participate in this purchase mechanism. Additionally, the amount of BNB sent must be equal the predefined fixed amount (`fixedFundsAmount`), which will be provided to the buyer in order for the buyer to further transact their tokens (presale / BDCA tokens), and any excess amount will be refunded to the manager who invoked the function. In addition, any excess BNB sent by the manager role corresponds to the affiliate bonuses earned, ensuring transparency and alignment with the affiliate program. By default, the total affiliate bonus is equal to 20% of the total amount sent by buyers. Therefore, the manager will send only 20% of the original buyer amount in ERC20 tokens, along with an additional fixed amount to cover at least one transaction for the buyer.

Finally, an event is emitted to record the transaction details, providing a transparent record of the purchase process. This event contains pertinent information including the addresses of the manager and buyer, affiliate Id, the amount of ERC20 tokens sent, the corresponding presale token amount, and whether the presale tokens were directly sent to the buyer.

Copy

```
function buyTokensWithTokenByFiat(uint256 _paidWithTokenAmount, uint256 _affiliateId, address _buyer, bool _sendPresaleTokens) external
```

**Parameters**

* `uint256 _paidWithTokenAmount`: The amount of a different token (USDT) to be exchanged for presale tokens.
* `uint256 _affiliateId`: The ID of the affiliate who referred the buyer. This parameter is required for tracking affiliate bonuses.
* `address _buyer`: The address of the buyer who will receive the presale tokens.
* `bool _sendPresaleTokens`: A boolean flag indicating whether the presale token(BDCA) should be send from contract(Presale) to the `_buyer` address.

**Modifiers**

* `onlyRole(MANAGER_ROLE)`: Restricts the function to be called only by users with the manager role.
* `notPaused`: This function can only be executed when the presale is not paused.
* `nonReentrant`: This function is protected against reentrancy attacks to prevent reentrant calls.

**Returns**

None

**Example**

BSCscan

"buyTokensWithTokenByFiat" tab

| Fields                   | Value                                      |
| ------------------------ | ------------------------------------------ |
| buyTokensWithTokenByFiat | 0.001                                      |
| \_paidWithTokenAmount    | 50000000000000000000                       |
| \_affiliateId            | 1                                          |
| \_buyer                  | 0x83190245eca819ff186Da8296aa218f23F059A4c |
| \_sendPresaleTokens      | true                                       |

`buyTokensWithTokenByFiat` - this field should contain the fixed amount(`fixedFundsAmount`) of BNB (native token of Binance Smart Chain) to cover at least one transaction for the buyer.

`_paidWithTokenAmount` - this field represents the amount of USDT tokens being paid, expressed in the smallest unit (wei). For USDT, which has 18 decimals, 1 USDT is equivalent to 10^18 wei. (50 \* 10^18 = 50 USDT)

`_affiliateId` - this field is used to specify the affiliate ID as a `uint256` integer.

`_buyer` - this field is used to specify the address of the buyer who will receive the tokens.

`_sendPresaleTokens` - this boolean field indicates whether or not to send presale tokens(BDCA) to the `_buyer` address.

Code

Copy

```
// assume that USDT token has decimals 18, which means 1 USDT = 1 * 10^18.
const paidUSDT = ethers.utils.parseUnits("50", "ethers"); // 50 USDT
const affiliateId = 1;
const buyerAddress = "0x00...abc"; // add valid address
const sendPresaleTokens = true; // will send BDCA tokens to the buyer address
await presale.buyTokensWithTokenByFiat(
    paidUSDT,
    affiliateId,
    buyerAddress,
    sendPresaleTokens
);
```

***

**bnbToPresaleToken**

Calculates the amount of presale tokens that can be purchased with a specified amount of BNB.

Copy

```
function bnbToPresaleToken(uint256 _bnbAmount) external view returns(uint256)
```

**Parameters**

* `uint256 _bnbAmount`: The amount of BNB for which to calculate the equivalent amount of presale tokens.

**Returns**

* `uint256`: The calculated amount of presale tokens that can be purchased with the specified amount of BNB.

***

**paidWithTokenToPresaleToken**

This function allows users to a convert a specified amount of the ERC20 token paidWith to an equivalent amount of presale tokens. It calculates and returns the equivalent presale token amount based on the paidWith token's exchange rate.

Copy

```
function paidWithTokenToPresaleToken(uint256 _paidWithAmount) external view returns(uint256)
```

**Parameters**

* `uint256 _paidWithAmount`: The amount of the ERC20 token paidWith to convert to presale tokens.

**Returns**

* `uint256`: The equivalent amount of presale tokens based on the paidWith token amount.

***

**withdraw**

This function allows the designated receiverOfEarnings address to withdraw the remaining BNB and paidWith tokens from the contract. It transfers the BNB balance to the receiverOfEarnings address and the paidWith token balance if any.

Copy

```
function withdraw() external
```

**Returns**

None

***

**rescuePresaleTokens**

This function enables the contract owner (with the DEFAULT\_ADMIN\_ROLE) to rescue any remaining presale tokens in the contract if necessary. It transfers the remaining presale tokens to the contract owner's address.

Copy

```
function rescuePresaleTokens() external onlyRole(DEFAULT_ADMIN_ROLE) isPaused
```

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the contract owner with the DEFAULT\_ADMIN\_ROLE. isPaused: Ensures that the function can only be called when the contract is paused.

**Returns**

None

***

**\_releasePresaleTokens**

This internal function releases presale tokens to the specified affiliate based on the paid amount and affiliate ID provided. It calculates and returns the amount of presale tokens released to the affiliate.

Copy

```
function _releasePresaleTokens(uint256 _paidAmount, uint256 _affiliateId) internal returns(uint256)
```

**Parameters**

* `uint256 _paidAmount`: The amount paid by the user.
* `uint256 _affiliateId`: The ID of the affiliate receiving the presale tokens.

**Returns**

* `uint256`: The amount of presale tokens released to the affiliate.

***

**\_calculateTokensToReceive**

This internal function calculates the number of presale tokens a user will receive based on the specified amount and price.

Copy

```
function _calculateTokensToReceive(uint256 _amount, uint256 _price) private pure returns (uint256)
```

**Parameters**

* `uint256 _amount`: The amount of tokens or currency used for the purchase.
* `uint256 _price`: The price of the presale token.

**Returns**

* `uint256`: The number of presale tokens a user will receive based on the specified amount and price.

***

**\_provideAffiliationPercentages**

This internal function calculates and provides affiliate bonuses to the affiliates involved in the presale token purchase. It distributes the bonuses based on the specified fee percentage distribution and the ratio of payments made with BNB or another token.

Copy

```
function _provideAffiliationPercentages(uint256 _paidWithAmount, uint256 _presaleAmount, uint256 _affiliateId, bool _isBuyingInBNB) internal
```

**Parameters**

* `uint256 _paidWithAmount`: The amount paid with BNB or ERC20 token.
* `uint256 _presaleAmount`: The amount of presale tokens released.
* `uint256 _affiliateId`: The ID of the affiliate receiving the bonus.
* `bool _isBuyingInBNB`: Flag indicating whether the purchase is made with BNB.

**Returns**

None

***

**\_totalFeePercentageDistribution**

This internal function calculates the total fee percentage distribution used for the affiliate bonus calculations.

Copy

```
function _totalFeePercentageDistribution() internal view returns(uint256)
```

**Returns**

* `uint256`: The total fee percentage distribution.

***

**\_provideFundsForBuyer**

This internal function transfers the fixed funds amount to the buyer after a successful presale token purchase.

Copy

```
function _provideFundsForBuyer(address _buyer) internal
```

**Parameters**

* `address _buyer`: The address of the buyer.

**Returns**

None

***

**\_feeCalculator**

This internal function calculates the fee based on the specified amount, fee percentage, and ratio.

Copy

```
function _feeCalculator(uint256 _amount, uint256 _feePercentage, uint256 _ratio) internal pure returns(uint256)
```

**Parameters**

* `uint256 _amount`: The amount used for fee calculation.
* `uint256 _feePercentage`: The fee percentage.
* `uint256 _ratio`: The ratio used in fee calculation.

**Returns**

* `uint256`: The calculated fee.

***

**\_bnbToPayToken**

This internal function converts the BNB value to an equivalent amount of presale tokens based on the BNB price.

Copy

```
function _bnbToPayToken(uint256 _value) internal view returns (uint256)
```

**Parameters**

* `uint256 _value`: The BNB value to convert.

**Returns**

* `uint256`: The equivalent amount of presale tokens.

***

**\_paidWithTokenToPayToken**

This internal function converts the value of tokens used for payment to an equivalent amount of presale tokens based on the price of the token used for payment.

Copy

```
function _paidWithTokenToPayToken(uint256 _value) internal view returns (uint256)
```

**Parameters:**

`_value`: The value of the token used for payment.

**Returns**

* `uint256`: The equivalent amount of presale tokens.

***

**\_getBNBPrice**

This private function retrieves the latest BNB price from the BNB price feed.

Copy

```
function _getBNBPrice() private view returns (uint256)
```

**Returns**

* `uint256`: The latest BNB price.

***

**\_getPaidWithTokenPrice**

This private function retrieves the latest price of the token used for payment from the token price feed.

Copy

```
function _getPaidWithTokenPrice() private view returns (uint256)
```

**Returns**

* `uint256`: The latest price of the token used for payment.


# Staking Contract Details

## Staking contract details

### Staking Contract <a href="#pdf-page-f9thk9ayp2yq4ksldtiu-staking-contract" id="pdf-page-f9thk9ayp2yq4ksldtiu-staking-contract"></a>

**Table of Contents**

1. [Introduction](https://blockczech.gitbook.io/bdca-smart-contracts-docs/staking-contract#introduction)
2. [Contract Overview](https://blockczech.gitbook.io/bdca-smart-contracts-docs/staking-contract#contract-overview)
3. [Staking Parameters](https://blockczech.gitbook.io/bdca-smart-contracts-docs/staking-contract#staking-parameters)
4. [Modifiers](https://blockczech.gitbook.io/bdca-smart-contracts-docs/staking-contract#modifiers)
5. [Events](https://blockczech.gitbook.io/bdca-smart-contracts-docs/staking-contract#events)
6. [Functions](https://blockczech.gitbook.io/bdca-smart-contracts-docs/staking-contract#functions)

**Introduction**

The staking contract empowers users to lock their BDCA tokens for a specified period to earn rewards. This guide delves into the contract's functionalities, explaining how users can participate in staking, the benefits they can accrue, and the underlying mechanisms governing reward distribution.

**Contract Overview**

The staking contract is designed to incentivize long-term token holding and foster a robust community around the project. It offers users a secure and transparent platform to stake their BDCA tokens in exchange for attractive rewards. Here's a breakdown of the key features:

* **Tiered Staking**: The contract implements a tiered staking system. Users can choose from various staking tiers, each offering distinct lock durations and reward multipliers. Higher tiers typically come with longer lock durations but provide more significant rewards.
* **Lock Durations**: Each staking tier is associated with a predefined lock duration. Users cannot withdraw their staked tokens before the lock period expires, ensuring commitment and contributing to project stability. Reward Distribution: The contract facilitates the distribution of rewards to users who participate in staking. Rewards can be in the form of BDCA tokens or other cryptocurrencies like USDT. The mechanism for calculating and distributing these rewards will be further elaborated upon in subsequent sections.
* **Security**: The contract prioritizes security by implementing access control mechanisms. Only authorized roles can execute critical functions, safeguarding user funds and preventing unauthorized activities.
* **Transparency**: The contract operates with transparency in mind. All relevant data, such as total staked amount, individual stake details, and reward distribution history, are readily accessible, fostering trust within the user community.

**Staking Parameters**

**External Interfaces**

* `bdcaToken`: An interface to interact with the BDCA token contract.
* `usdtToken`: An interface to interact with the USDT token contract.
* `presale`: An interface to interact with the Presale contract.
* `stakingNft`: An interface to interact with the Staking NFT contract.

**Constants**

* `UPGRADER_ROLE`: The keccak256 hash representing the upgrader role.
* `DISTRIBUTOR_ROLE`: The keccak256 hash representing the distributor role.
* `TIER_DENOMINATOR`: The denominator used for tier calculations.

**Numeric Constants**

* `minStake`: The minimum stake amount allowed.
* `maxStake`: The maximum stake amount allowed.
* `totalStaked`: The total amount currently staked.

**NFT Information**

* `nftTier`: A mapping of NFT IDs to their corresponding tier levels.
* `nftLockedAmount`: A mapping of NFT IDs to their locked staking amounts.
* `nftLockExpire`: A mapping of NFT IDs to their lock expiration dates.

**Tier Information**

* `tierBonusPersentages`: A mapping of tier levels to their bonus percentages.
* `tierAffiliateBonusPersentages`: A mapping of tier levels to their affiliated bonus percentages.
* `tierLockDuration`: A mapping of tier levels to their lock durations.

**Modifiers**

**Not Paused Modifier**

* `notPaused`: Throws if the staking is paused.
  * Description: Ensures that the staking is not paused before executing the function.
  * Usage: Apply this modifier to functions that should only be called when the staking is not paused.

**Is Paused Modifier**

* `isPaused`: Throws if the staking is not paused.
  * Description: Ensures that the staking is paused before executing the function.
  * Usage: Apply this modifier to functions that should only be called when the staking is paused.

**Events**

**Staked**

* `Staked`: Emitted when a user stakes tokens.
  * Parameters:
    * `user`: The address of the user who staked tokens.
    * `amount`: The amount of tokens staked.
    * `lockDuration`: The duration for which the tokens are locked.
    * `tokenId`: The ID of the staking NFT token.

**Unstaked**

* `Unstaked`: Emitted when a user unstakes tokens.
  * Parameters:
    * `user`: The address of the user who unstaked tokens.
    * `amount`: The amount of tokens unstaked.
    * `tokenId`: The ID of the staking NFT token.

**RewardDistributed**

* `RewardDistributed`: Emitted when rewards are distributed to a user.
  * Parameters:
    * `receiver`: The address of the receiver of the rewards.
    * `nftId`: The ID of the staking NFT token.
    * `bdcaBonus`: The amount of BDCA tokens rewarded.
    * `usdtBonus`: The amount of USDT tokens rewarded.

**Functions**

**Initialize**

Initializes the Staking contract with the provided parameters.

Copy

```
function initialize(
    address _defaultAdmin,
    address _upgrader,
    address _distributor,
    IPresale _presale,
    IStakingNFT _stakingNft,
    IERC20Metadata _bdca,
    IERC20Metadata _usdt
) initializer public
```

**Parameters**

* `address _defaultAdmin`: The address of the default admin.
* `address _upgrader`: The address of the upgrader.
* `address _distributor`: The address of the distributor.
* `IPresale _presale`: The address of the Presale contract.
* `IStakingNFT _stakingNft`: The address of the Staking NFT contract.
* `IERC20Metadata _bdca`: The address of the BDCA token contract.
* `IERC20Metadata _usdt`: The address of the USDT token contract.

**Modifiers**

* `initializer`: Ensures that the initialization is only done once.

**Returns**

None

***

**\_authorizeUpgrade**

Internal function for upgrading proxy contract to the `newImplementation` addrress.

Copy

```
function _authorizeUpgrade(address newImplementation) internal override onlyRole(UPGRADER_ROLE)
```

**Parameters**

* `address newImplementation`: The address of the new implementation.

**Modifiers**

* `onlyRole(UPGRADER_ROLE)`: Restricts the function to be called only by the upgrader role.

**Returns**

None

***

**pause**

Pauses the presale contract.

Copy

```
function pause() external virtual notPaused onlyRole(DEFAULT_ADMIN_ROLE)
```

**Modifiers**

* `notPaused`: Ensures that the staking is not paused before executing the function.
* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.

**Returns**

None

***

**unpause**

Unpauses the presale contract.

Copy

```
function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) isPaused
```

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the admin role.
* `isPaused`: Ensures that the staking is paused before executing the function.

**Returns**

None

***

**setMaxStake**

Sets the maximum stake amount.

Copy

```
function setMaxStake(uint256 _maxStake) external virtual onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `uint256 _maxStake`: The maximum stake amount.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the default admin role.

**Returns**

None

***

**setMinStake**

Sets the minimum stake amount.

Copy

```
function setMinStake(uint256 _minStake) external virtual onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `uint256 _minStake`: The minimum stake amount.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the default admin role.

**Returns**

None

***

**updatePresaleAddress**

Updates the address of the Presale contract.

Copy

```
function updatePresaleAddress(IPresale _presale) external virtual onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `IPresale _presale`: The new address of the Presale contract.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the default admin role.

**Returns**

None

***

**updateStakingNftAddress**

Updates the address of the Staking NFT contract.

Copy

```
function updateStakingNftAddress(IStakingNFT _nft) external virtual onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `IStakingNFT _nft`: The new address of the Staking NFT contract.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the default admin role.

**Returns**

None

***

**updateBDCATokenAddress**

Updates the address of the BDCA token (ERC20) contract.

Copy

```
function updateBDCATokenAddress(IERC20Metadata _token) external virtual onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `IERC20Metadata _token`: The new address of the BDCA token contract.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the default admin role.

**Returns**

None

***

**updateUSDTTokenAddress**

Updates the address of the USDT token (ERC20) contract.

Copy

```
function updateUSDTTokenAddress(IERC20Metadata _token) external virtual onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `IERC20Metadata _token`: The new address of the USDT token contract.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the default admin role.

**Returns**

None

***

**updateTier**

Copy

```
function updateTier(uint8 _tier,uint256 _bonusPercentage, uint256 _bonusAffiliatePercentage, LockDuration calldata _lockDuration) external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `uint8 _tier`: The tier to update.
* `uint256 _bonusPercentage`: The bonus percentage for the tier.
* `uint256 _bonusAffiliatePercentage`: The affiliate bonus percentage for the tier.
* `LockDuration _lockDuration`: The lock duration for the tier.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the default admin role.

**Returns**

None

***

**updateRevenueLanchingStatus**

Updates the status of revenue launching.

Copy

```
function updateRevenueLanchingStatus(bool _isRevenuesLaunched) external onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `bool _isRevenuesLaunched`: The new status of revenue launching.

**Modifiers**

* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the default admin role.

**Returns**

None

***

**stake**

Stakes tokens into the Staking contract. Users can stake a specified amount of BDCA tokens for a defined staking tier. This function enforces minimum stake requirements, tier existence validation, and updates relevant variables to reflect the staking action.

Copy

```
function stake(uint256 _amount, uint8 _tier) external virtual notPaused nonReentrant
```

**Parameters**

* `uint256 _amount`: The amount to stake.
* `uint8 _tier`: The tier of the stake.

**Modifiers**

* `notPaused`: Ensures that staking is not paused before executing the function.
* `nonReentrant`: Ensures that the function cannot be called recursively.

**Returns**

None

***

**unstake**

Unstakes tokens from the Staking contract. Users can unstake tokens by providing the ID of the corresponding staking NFT. This function checks ownership, lock expiration, and calculates the amount to be unstaked.

Copy

```
function unstake(uint256 _tokenId) external virtual nonReentrant notPaused
```

**Parameters**

* `uint256 _tokenId`: The ID of the NFT representing the stake.

**Modifiers**

* `notPaused`: Ensures that staking is not paused before executing the function.
* `nonReentrant`: Ensures that the function cannot be called recursively.

**Returns**

None

***

**distributeRewards**

Distributes rewards to `StakingNFT` owners within a specified range of NFT IDs. This function is accessible only by the distributor role and requires revenue launching to be active. It calculates BDCA and USDT bonuses for each eligible NFT owner within the given range and distributes the rewards accordingly.

Copy

```
function distributeRewards(uint256 _fromNftId, uint256 _tillNftId) external virtual onlyRole(DISTRIBUTOR_ROLE)
```

**Parameters**

* `uint256 _fromNftId`: The starting ID of the NFT range to distribute rewards.
* `uint256 _tillNftId`: The ending ID of the NFT range to distribute rewards.

**Modifiers**

* `onlyRole(DISTRIBUTOR_ROLE)`: Restricts the function to be called only by the distributor role.

**Returns**

None

***

**rescueToken**

Transfers all remaining tokens to the admin. This function is accessible only when staking is paused and allows the default admin to retrieve any remaining tokens from the Staking contract.

Copy

```
function rescueToken(address _token) external virtual isPaused onlyRole(DEFAULT_ADMIN_ROLE)
```

**Parameters**

* `address _token`: The address of the token to be rescued.

**Modifiers**

* `isPaused`: Ensures that staking is paused before executing the function.
* `onlyRole(DEFAULT_ADMIN_ROLE)`: Restricts the function to be called only by the default admin role.

**Returns**

None

***

**calculateStakeBonus**

Calculates the total stake amount including the bonus for a given staking tier. If revenue launching is not active, the bonus is added to the stake amount based on the specified tier bonus percentage.

Copy

```
function calculateStakeBonus(uint256 _amount, uint8 _tier) public view virtual returns(uint256)
```

**Parameters**

* `uint256 _amount`: The amount to calculate the bonus for.
* `uint8 _tier`: The tier to calculate the bonus for.

**Returns**

* `uint256`: The calculated stake bonus.

***

**calculateBonuses**

Calculates the bonuses (BDCA and USDT) for a specific staking tier based on the total staked amount, the staked amount of the current NFT, and the USDT total share amount.

Copy

```
function calculateBonuses(uint256 _usdtTotalShareAmount, uint256 _totalStakedBalance, uint256 _stakedAmount, uint8 _tier) public view virtual returns(uint256 bdcaBonus, uint256 usdtBonus)
```

**Parameters**

* `uint256 _usdtTotalShareAmount`: The total USDT share amount.
* `uint256 _totalStakedBalance`: The total staked balance.
* `uint256 _stakedAmount`: The staked amount.
* `uint8 _tier`: The tier to calculate bonuses for.

**Returns**

* `(uint256 bdcaBonus, uint256 usdtBonus)`: The calculated BDCA and USDT bonuses.

***

**calculateUnstakeAmount**

Calculates the amount to be unstaked for a given staking NFT ID. This amount is equal to the initially staked amount plus any bonus accumulated.

Copy

```
function calculateUnstakeAmount(uint256 tokenId) public view virtual returns (uint256)
```

**Parameters**

* `uint256 tokenId`: The ID of the NFT representing the stake.

**Returns**

* `uint256`: The calculated unstake amount.

***

**\_mintNFT**

Mints a new NFT and assigns it to the specified address.

Copy

```
function _mintNFT(address _to) internal virtual returns (uint256)
```

**Parameters**

* `address _to`: The address to assign the minted NFT to.

**Returns**

* `uint256`: The ID of the minted NFT.

***

**\_burnNFT**

Burns an existing NFT.

Copy

```
function _burnNFT(uint256 _tokenId) internal virtual
```

**Parameters**

* `uint256 _tokenId`: The ID of the NFT to burn.

**Returns**

None

***

**\_eligibleNftId**

Checks if a given NFT ID is eligible for rewards distribution.

Copy

```
function _eligibleNftId(uint256 _nftId) internal view virtual returns(bool)
```

**Parameters**

* `uint256 _nftId`: The ID of the NFT to check.

**Returns**

* `bool`: True if the NFT is eligible, false otherwise.

\ <br>


# Official Links

### Website:

{% embed url="<https://www.bitdca.com>" %}

### Tokenomics Website:

{% embed url="<https://tokenomics.bitdca.com/>" %}

### Staking Website:

[staking.bitdca.com](https://staking.bitdca.com)

### Littlebitapp Website

[littlebitapp.com/en](https://littlebitapp.com/en)

### X / Twitter:

<https://x.com/bitdcaOFFICIAL>

### Telegram:

<https://t.me/bitdca>

### LinkedIn:

<https://www.linkedin.com/company/bitdca/>

### Linktree

<https://linktr.ee/bitdca>


# Disclaimer

The information and data contained in this Document may be changed or updated and may not be construed as an obligation, promise, public promise, promise of a reward, announcement of a prize, indemnity, or warranty made by DNZ Holding LTD., with its registered office at 27 Old Gloucester Street, London, United Kingdom, WC1N 3AX, Id. No.: 13059338, the persons involved in the business activities of DNZ Holding LTD. or any other person from the DNZ group or any other person specified in this Document (hereinafter collectively referred to as “DNZ”).<br>

The Document is neither an offer nor an invitation to submit bids to enter into a contract and does not contain any legal act made by DNZ. The Document cannot be construed as an offer for purchase of shares, cryptoassets, securities, tokens, or other assets.

\
The Document is not an investment recommendation. It does not contain any financial or similar advice. DNZ does not guarantee the correctness of the information set out in this Document and any incorrectness or inaccuracy thereof. The contents of the Document are indicative only.<br>

All the data contained in the Document are based on sources that DNZ considers reliable in good faith, especially on publicly available sources containing selected opinions in the relevant fields, which may naturally develop and change over time. It is therefore necessary to perceive all the predictions and conclusions as hypotheses provided solely for information purposes; they are in no way qualified or expert advice.<br>

Each investment includes risks following primarily, but not exclusively, from the volatility of the value of the cryptoasset and fluctuations in liquidity. The value of cryptoassets may rise and fall without limitation depending on market developments (which are unpredictable). Investing in cryptoassets is generally considered one of the riskiest ways of investing; investments in cryptoassets are not subject to any deposit insurance, and investors may lose all invested funds. In addition, cryptoasset transactions are generally irreversible, and the damage caused by fraudulent or erroneous transactions may be irreparable.

\
Cryptoasset regulations are at an early stage and the possession, transfer, or use of cryptoassets may become regulatorily restricted or even fully prohibited.

\
Taking the above into account, investors should be extraordinarily cautious when investing in cryptoassets and consider using the services of financial, legal, and tax advisors before making any investment decisions and make their own informed judgment in this way.<br>

With regard to DNZ’s liability in connection with the above, DNZ cannot be held liable for any harm, damage, loss of profit, or unjust enrichment resulting from any conduct motivated by the contents of this Document.


