A Continuous Token Model (CTM) is a mechanism where a token's price and supply are algorithmically linked via a bonding curve. Unlike traditional fundraising, a CTM allows for continuous, permissionless investment and divestment. The core smart contract holds a reserve of a base asset (like ETH or a stablecoin), and the token price increases as the reserve grows. This creates a direct, real-time revenue stream for token holders, as fees from protocol usage can be funneled into the reserve, increasing the value of all outstanding tokens proportionally.
Launching a Continuous Token Model for Streaming Revenue
Launching a Continuous Token Model for Streaming Revenue
A technical guide to deploying a continuous token model (CTM) that generates real-time streaming revenue for token holders, using smart contracts and bonding curves.
To launch a CTM, you must first define its economic parameters within the bonding curve smart contract. The most common formula is a linear bonding curve, where price increases linearly with supply: Token Price = Reserve Balance / (Token Supply * Reserve Ratio). The Reserve Ratio is a constant (e.g., 0.5) that determines the collateralization level. A lower ratio makes the token more volatile. You'll deploy this contract, initializing it with a starting token supply and a corresponding reserve deposit. All subsequent buys and sells interact directly with this contract, not a secondary market.
The revenue streaming mechanism is activated by directing protocol fees to the CTM's reserve. For example, if your dApp charges a 0.3% fee on transactions, that fee can be programmatically sent to the bonding curve contract. This increases the reserve balance, which, according to the bonding curve formula, increases the floor price for all tokens. Holders benefit because the intrinsic value of their tokens rises, and they can realize this value by selling tokens back to the curve contract. This creates a direct alignment between protocol usage and token value appreciation.
Here is a simplified code snippet for a linear bonding curve's core buy and getPrice functions, written in Solidity. This demonstrates the deterministic pricing mechanism.
solidityfunction getPrice(uint256 supply, uint256 reserve) public view returns (uint256) { return reserve / (supply * RESERVE_RATIO); } function buy(uint256 amount) public payable { uint256 price = getPrice(totalSupply, reserveBalance); uint256 cost = price * amount; require(msg.value >= cost, "Insufficient payment"); reserveBalance += cost; _mint(msg.sender, amount); // Refund excess payment if (msg.value > cost) { payable(msg.sender).transfer(msg.value - cost); } }
Key considerations for a successful launch include liquidity depth and fee integration. The initial reserve deposit must be sufficient to prevent extreme price slippage on early trades. Furthermore, the fee stream must be substantial and consistent enough to create meaningful value accrual; otherwise, the model fails to incentivize holding. Projects like Shell Protocol and Uniswap's v1 (which used a constant product formula) pioneered these concepts. It's also critical to implement a circuit breaker or fee switch mechanism to pause buys/sells or adjust fee routing in case of market manipulation or emergency.
In practice, launching a CTM is a commitment to transparent, on-chain economics. It shifts the focus from speculative token launches to sustainable value creation backed by real usage. Developers must carefully model the bonding curve parameters, ensure robust fee collection logic, and communicate the mechanics clearly to users. When executed well, it creates a powerful flywheel: more users generate more fees, which increases the token's reserve and price, rewarding early adopters and funding further development.
Prerequisites and Core Dependencies
Before launching a Continuous Token Model (CTM) for streaming revenue, you must establish the technical and conceptual foundation. This section covers the essential tools, smart contract standards, and economic models required.
A Continuous Token Model (CTM) is a bonding curve mechanism that creates a direct, automated market between a project's native token and a reserve asset (typically a stablecoin like USDC). The core dependency is a smart contract that implements the bonding curve's mathematical formula, such as the popular Linear or Exponential functions. For Ethereum-based projects, you'll need a development environment like Hardhat or Foundry, and a solid understanding of Solidity to write, test, and deploy the bonding curve contract. Key libraries include OpenZeppelin for secure contract patterns and a testing suite for simulating mint/burn transactions.
The economic model defines the relationship between token supply and price. You must decide on critical parameters: the reserve ratio (which determines price sensitivity), the initial virtual supply and reserve balance, and the fee structure (often a small percentage on buys/sells that accrues to a treasury). These parameters are immutable once deployed, so rigorous modeling with tools like Python or Excel is essential. You'll also need a clear mechanism for distributing the streaming revenue—whether it's automatically sent to a DAO treasury, used for buybacks, or distributed to stakers via a separate rewards contract.
For the token itself, you must implement the ERC-20 standard with additional mint/burn permissions granted exclusively to the bonding curve contract. This ensures the total supply can only change through the curve's mechanism. A critical security prerequisite is a comprehensive audit of both the token and the bonding curve logic from a reputable firm like Trail of Bits or OpenZeppelin. Furthermore, you'll need a front-end interface (built with a framework like React and a Web3 library such as wagmi or ethers.js) to allow users to interact with the curve, displaying real-time price, supply, and reserve data.
Finally, consider the operational dependencies. You will need a source of streaming revenue—this could be protocol fees, subscription income, or real-world asset cash flows. A Chainlink Oracle or similar service may be required to reliably feed this revenue data on-chain to trigger distributions. Planning for initial liquidity is also crucial; you must seed the bonding curve's reserve with enough capital (e.g., 50,000 USDC) to ensure a functional starting price and depth. All these components must be integrated and tested on a testnet (like Sepolia or Goerli) before a mainnet launch on Ethereum, Arbitrum, or another EVM-compatible chain.
Continuous Token Models: Bonding Curves and Revenue Streaming
A technical guide to implementing a bonding curve for a token that streams protocol revenue directly to holders.
A Continuous Token Model (CTM) combines a bonding curve with a revenue streaming mechanism. The bonding curve, implemented as a smart contract, algorithmically sets the token's price based on its circulating supply. When a user buys tokens, new supply is minted, and the price increases along the curve. When they sell, tokens are burned, and the price decreases. This creates a predictable, on-chain price discovery mechanism without relying on external liquidity pools. Popularized by projects like Bancor and Uniswap v1, bonding curves provide continuous liquidity for tokens that may not have sufficient market depth on traditional exchanges.
The revenue streaming component is what transforms a simple bonding curve into a productive asset. A portion of the protocol's generated fees—from transaction fees, service charges, or other revenue streams—is continuously directed to the bonding curve contract. This incoming revenue increases the contract's reserve balance, which in turn raises the floor price of the token for all holders. Unlike traditional dividend models that require manual claims, this creates a passive, real-time yield accrual for token holders. The key metric is the price per share, which rises as the reserve grows, benefiting anyone holding the token.
To launch this model, you must first define the bonding curve's mathematical formula. A common and gas-efficient choice is a linear bonding curve, where price increases linearly with supply: Token Price = Reserve Balance / Token Supply. For a more aggressive early price discovery, a polynomial curve (e.g., quadratic) can be used, where price increases at an accelerating rate. The curve's slope dictates the price sensitivity and the liquidity available at different supply levels. The smart contract must precisely implement this math for mint (buy) and burn (sell) functions, ensuring the reserve balance is always backed by the deposited collateral.
Here is a simplified Solidity code snippet for the core minting function of a linear bonding curve:
solidityfunction mint(uint256 tokenAmount) external payable { uint256 newSupply = totalSupply + tokenAmount; uint256 newReserve = k * newSupply; // For linear: k is constant, reserve = k * supply uint256 requiredEth = newReserve - reserveBalance; require(msg.value >= requiredEth, "Insufficient payment"); reserveBalance += requiredEth; totalSupply = newSupply; _mint(msg.sender, tokenAmount); // Refund excess ETH if (msg.value > requiredEth) { payable(msg.sender).transfer(msg.value - requiredEth); } }
This function calculates the required ETH based on the new token supply, updates the reserves, and mints tokens to the buyer.
Integrating revenue streaming requires a secure method to funnel protocol fees into the bonding curve's reserve. The safest pattern is to have the fee-generating contract call a function like streamRevenue() on the bonding curve contract, transferring the accrued fees (e.g., in ETH or a stablecoin). This function should simply increase the reserveBalance without minting new tokens. This action increases the backing per token for all existing holders. It is critical to ensure this function is permissioned, typically allowing calls only from the verified treasury or fee contract, to prevent malicious inflation of the reserve.
Key design considerations include managing volatility and manipulation. A shallow curve can lead to high price volatility with large buys/sells. Implementing a circuit breaker or a maximum mint/burn per transaction can mitigate this. Furthermore, you must decide on the exit liquidity mechanism. Will sellers receive assets from the reserve directly (a direct redemption), or will the model rely on a secondary AMM pool? Direct redemption is more capital efficient but requires the reserve to hold liquid assets. Finally, transparency is paramount: clearly displaying the live reserve balance, token supply, and current price builds the trust necessary for this model to succeed.
Essential Resources and References
These resources cover the core protocols, economic models, and implementation patterns required to launch a continuous token model for streaming revenue. Each card focuses on a concrete building block developers use in production systems.
Continuous Token Model and Bonding Curves
The Continuous Token Model (CTM), popularized by Simon de la Rouviere, describes tokens that are always mintable and burnable against a reserve using a bonding curve instead of fixed supply issuance.
Core mechanics:
- Token price is a function of supply
- Users mint by depositing reserve assets
- Users burn to reclaim reserve value
Common curve designs:
- Bancor Formula: Uses reserve ratio to control price sensitivity
- Polynomial curves: Increase price non-linearly with supply
- Hybrid curves: Combine floor price with growth premium
In streaming revenue systems:
- Incoming streams increase reserve balance continuously
- New tokens are minted over time or on demand
- Token value reflects cumulative revenue, not speculation alone
Developers should model:
- Reserve depletion risk
- Slippage during large burns
- Long-term sustainability under variable inflows
Token Streaming UX and Indexing Infrastructure
Continuous token systems require off-chain indexing and UX tooling to be usable. Raw per-second balance changes are not intuitive without aggregation.
Essential infrastructure components:
- Event Indexers: Track stream creation, updates, and closures
- Time-Weighted Balances: Compute claimable or effective ownership
- Flow Dashboards: Display net inflow, runway, and decay
Common stacks:
- The Graph for protocol-level indexing
- Custom subgraphs for stream and curve events
- Backend services to snapshot balances at checkpoints
UX patterns that work:
- Show balances "as of now" and "projected in 30 days"
- Warn users when stopping a stream reduces access or voting power
- Visualize token price movement driven by revenue, not trades
Most failures in continuous token launches come from poor observability rather than flawed economics.
Bonding Curve Formula Comparison
Comparison of common bonding curve formulas used for continuous token models, focusing on their mathematical properties and economic implications for streaming revenue.
| Property | Linear | Exponential | Logistic (S-Curve) |
|---|---|---|---|
Price Function | P = m * S + c | P = P0 * e^(k * S) | P = L / (1 + e^(-k*(S - S0))) |
Initial Price Sensitivity | Low | Very High | Moderate |
Late-Stage Price Pressure | High | Extreme | Low |
Reserve Calculation | R = (m/2)S^2 + cS | R = (P0/k)(e^(kS) - 1) | Complex Integral |
Suitable For | Predictable, steady growth | Speculative, viral launches | Stable, community-focused projects |
Impermanent Loss Risk | Medium | Very High | Low |
Implementation Complexity | Low | Medium | High |
Common Use Case | Basic utility tokens | Memecoins, NFTs | DAO membership tokens |
Step 1: Designing the Economic Parameters
The economic parameters define the core behavior of your streaming token. This step involves setting the mathematical rules that govern token minting, burning, and price discovery.
A Continuous Token Model (CTM) is a bonding curve contract that mints and burns tokens in response to deposits and withdrawals of a reserve asset, typically a stablecoin like USDC. The model's behavior is dictated by a price function and a supply function. The price function, P(S), defines the token's price at any given total supply S. The most common implementation is a linear function: P(S) = k * S, where k is the price constant. A higher k creates a steeper curve, meaning the price increases more rapidly as supply grows, which can incentivize early participation.
You must define the initial parameters that bootstrap the system. The initial price (P0) is the cost of the first token. The initial reserve is the amount of collateral deposited to mint the initial supply, which seeds the bonding curve's treasury. For example, setting P0 = 1.00 USDC and depositing 1000 USDC would mint an initial supply of 1000 tokens, establishing the starting point on the curve. The price constant k is then derived from these values, determining the slope.
The reserve ratio is a critical, derived metric representing the fraction of the token's market cap that is backed by the reserve. For a linear curve P(S)=k*S, the reserve R is the integral of the price function: R = (k * S^2) / 2. The market cap is P*S = k*S^2. Therefore, the reserve ratio is (k*S^2/2) / (k*S^2) = 0.5 or 50%. This invariant means that at any point, only 50% of the token's theoretical market cap is held in the reserve; the rest is "virtual" and represents the protocol's promised future streaming revenue.
These parameters directly impact user experience and protocol sustainability. A low k (shallow curve) results in less price volatility for buyers and sellers, making the token behave more like a stable asset, but it reduces the potential reward for early supporters. A high k (steep curve) creates stronger price appreciation for early buyers, increasing speculation, but also amplifies impermanent loss for sellers if the price retreats. The 50% reserve ratio provides a cushion; the protocol can sustain payouts and buybacks as long as the market cap doesn't fall below twice the reserve balance.
In Solidity, these parameters are stored as constants or immutable variables in the contract. Here's a simplified example of initialization:
solidityuint256 public constant PRICE_CONSTANT = 0.001 * 1e18; // k = 0.001 uint256 public immutable INITIAL_PRICE; // P0 uint256 public immutable INITIAL_SUPPLY; constructor(uint256 _initialReserveDeposit) { // Calculate initial supply based on deposit and price constant // For P(S) = k*S, R = (k * S^2)/2 // Therefore, S = sqrt(2 * R / k) INITIAL_SUPPLY = sqrt((2 * _initialReserveDeposit * 1e18) / PRICE_CONSTANT); INITIAL_PRICE = PRICE_CONSTANT * INITIAL_SUPPLY / 1e18; // ... mint INITIAL_SUPPLY to the deployer }
This code calculates the starting supply deterministically from the desired initial reserve deposit and the fixed price constant.
Finally, consider the streaming revenue mechanism. A portion of the protocol's real-world revenue (e.g., from SaaS subscriptions) is periodically converted to the reserve asset and deposited into the bonding curve contract. This deposit increases the reserve R without minting new tokens, which causes the price function P(S) to shift upward. According to the curve math, this increases the price for all existing tokens, distributing the value of the incoming revenue to all token holders proportionally. The frequency and magnitude of these deposits become a key part of the token's economic policy.
Step 2: Building the Bonding Curve Contract
This section details the smart contract implementation of a bonding curve that facilitates the continuous minting and burning of tokens in exchange for a streaming revenue stream.
A bonding curve is a mathematical function that defines a deterministic price relationship between a token's supply and its price. For a streaming revenue model, we typically use a linear bonding curve where the price increases linearly with the total supply. The core contract must manage two primary functions: buy (minting new tokens by depositing the streaming asset) and sell (burning tokens to withdraw a share of the accrued revenue). The price for a marginal unit of token is calculated as price = reserveRatio * totalSupply, where the reserveRatio is a constant defining the slope of the curve.
The contract's state must track the totalSupply of minted tokens and the reserveBalance of the deposited streaming asset (e.g., ETH, USDC). When a user calls buy(uint256 depositAmount), the contract calculates how many new tokens to mint based on the integral of the price curve from the current supply to the new supply. A simplified formula for a linear curve is tokensToMint = totalSupply * ( (1 + depositAmount / reserveBalance)^(1/reserveRatio) - 1 ). The contract then mints these tokens to the buyer and adds the depositAmount to the reserveBalance.
Conversely, the sell(uint256 tokenAmount) function allows a holder to burn their tokens and claim a proportional share of the streaming revenue reserve. The amount of the reserve asset to withdraw is calculated by determining the area under the bonding curve for the tokens being burned. The contract burns the tokens, transfers the calculated payoutAmount from the reserveBalance to the seller, and reduces the totalSupply. This mechanism ensures that early buyers who sell later can realize gains if the reserve has grown from subsequent purchases.
Critical security considerations include protecting the price calculation from manipulation, using a pull-over-push pattern for withdrawals to avoid reentrancy, and ensuring proper access control for minting and burning functions. The contract should also implement a virtual balance mechanism if the streaming revenue is accrued off-chain or from another contract, requiring periodic updates to the reserveBalance by a trusted oracle or an automated process linked to the revenue stream.
For developers, integrating with a frontend requires calculating accurate price quotes. You can provide a getBuyQuote(uint256 depositAmount) view function that returns the expected tokens to mint and a getSellQuote(uint256 tokenAmount) function for expected payout, both derived from the bonding curve formula. This allows users to simulate transactions before committing funds. Testing this contract thoroughly with tools like Foundry or Hardhat is essential, focusing on edge cases like very small/large purchases and the behavior as the reserve ratio approaches its limits.
Step 3: Implementing the Automated Revenue Router
This step details the core smart contract logic for routing streaming revenue from a Continuous Token Model (CTM) to a treasury and token holders.
The Automated Revenue Router is the smart contract that autonomously distributes protocol revenue. Its primary functions are to accept incoming payments, split them according to a predefined ratio, and route the funds. A typical split might allocate 70% to a treasury contract for operational expenses and 30% to a buyback-and-burn mechanism or direct distribution to stakers. This logic is enforced on-chain, removing the need for manual intervention and ensuring transparent, trustless execution of the token model's economic policy.
Implementation begins with defining the core state variables and initialization. The contract needs addresses for the treasury and distributor, the token address for buybacks, and the revenue split ratio. Using Solidity, you would set these as immutable or configurable variables in the constructor. Critical security checks, like ensuring the treasury address is not zero, must be included here. The router should also implement a receive() or fallback() function to accept native currency (e.g., ETH, MATIC) and a function for ERC-20 tokens, often requiring prior approval via transferFrom.
Here is a simplified code snippet for the routing logic in a processPayment function:
solidityfunction processPayment() external payable { require(msg.value > 0, "No value sent"); uint256 treasuryShare = (msg.value * treasurySplit) / 100; uint256 buybackShare = msg.value - treasuryShare; (bool successTreasury, ) = treasuryAddress.call{value: treasuryShare}(""); require(successTreasury, "Treasury transfer failed"); // For buyback: could swap for tokens and burn, or send to staking contract _executeBuyback(buybackShare); }
This function calculates the split based on a treasurySplit percentage, sends the treasury portion, and delegates the remainder to a buyback function.
For buyback execution, the router typically interacts with a Decentralized Exchange (DEX) like Uniswap V3. The _executeBuyback function would use a router to swap the native currency for the project's CTM token, then send the tokens to a burn address or a reward distributor. Using a DEX oracle like TWAP can help mitigate price impact from large buys. An alternative design is to send the buyback share directly to a staking contract that distributes the revenue as rewards, which simplifies the process but does not reduce token supply.
Finally, the router must be securely integrated with the broader system. It should have strict access controls, often being ownable or governed by a multisig/timelock for parameter updates (like split ratios). Consider implementing a pause function for emergencies. Thorough testing with forked mainnet simulations using tools like Foundry is essential to verify the contract handles edge cases, such as minimal payments or failed external calls, without locking funds. Once deployed, the router address becomes the primary payment recipient for the protocol's revenue streams.
Step 4: Testing Price-Supply Dynamics
This step validates the core economic behavior of your continuous token model by simulating buy and sell pressure to verify the bonding curve's response.
Before deploying to a live network, you must simulate the token's price-supply relationship. The bonding curve contract defines this relationship mathematically, but a simulation confirms it behaves as expected under various transaction volumes. Use a forked mainnet environment (like Foundry's forge test --fork-url) or a script to interact with your deployed contract on a testnet. The goal is to verify that the price increases predictably with each buy and decreases with each sell, according to the formula price = reserve / (supply * weight), where the weight is a constant like 0.5 for a linear curve.
Write a test script that executes a series of buy and sell transactions. For example, after minting an initial supply, simulate a user buying 100 tokens, then check the new spotPrice() and the contract's reserve balance. The reserve should increase by more than 100 * previousPrice due to the price slippage. Next, simulate selling 50 tokens back. The reserve should decrease by less than 50 * currentPrice. Key metrics to log are: the price before and after each trade, the change in total supply, and the change in the reserve. This data lets you plot the actual bonding curve.
Pay close attention to slippage and impact. A large buy order should cause significant positive slippage (higher average price per token), protecting the reserve. Test edge cases: a buy order that attempts to purchase the entire remaining supply (should be prohibitively expensive), or a sell that would drain the reserve (should fail). Also, verify that the continuousFund receives its designated fee (e.g., 5%) from each buy and sell, and that this fee accrues correctly for streaming distribution to token holders.
For developers, here's a basic Foundry test structure:
solidityfunction testPriceIncreasesOnBuy() public { uint initialPrice = bondCurve.spotPrice(); uint buyAmount = 100e18; uint cost = bondCurve.getBuyPrice(buyAmount); // Execute buy... uint newPrice = bondCurve.spotPrice(); assert(newPrice > initialPrice); }
This test checks the fundamental direction of price movement. You should expand this to test specific price calculations against your off-chain model using the getBuyPrice and getSellPrice view functions.
Finally, analyze the simulation output. Does the token model encourage the desired behavior? For a streaming revenue project, you want the bonding curve to provide continuous liquidity without extreme volatility from small trades, while ensuring the continuousFund grows sustainably. If the price moves too sharply, adjust the curve's weight or the initial reserve ratio. Successful testing gives you confidence that your token's economics are sound, its fees are working, and it's ready to accept real user transactions for streaming revenue distribution.
Frequently Asked Questions
Common technical questions and troubleshooting for developers implementing a streaming revenue model.
A continuous token model (CTM) is a mechanism where a token's price and supply are algorithmically adjusted in real-time based on a continuous stream of revenue or value inflow, typically from protocol fees or real-world assets. Unlike a traditional bonding curve, which defines a static price-supply relationship (e.g., price = k * supply^n), a CTM dynamically updates its pricing parameters based on an external, continuous metric.
Key Differences:
- Bonding Curve: Price is a function of the current token supply. Buying/selling moves along a pre-defined curve.
- Continuous Token Model: Price is a function of a streaming metric (e.g., cumulative protocol fees). The "curve" shifts or its parameters change as new revenue flows in.
For example, a CTM might set the token's reserve ratio to adjust automatically as the treasury grows from streaming fees, creating a price floor that rises over time.
Common Implementation Mistakes to Avoid
Launching a continuous token model for streaming revenue involves complex smart contract logic and economic design. Developers often encounter specific, recurring pitfalls that can compromise security, user experience, or the model's core functionality. This guide addresses the most frequent implementation errors and how to resolve them.
This is a classic error when using a bonding curve formula like price = reserve / supply without proper safeguards. A division by zero or underflow can occur if the token supply is zero or the reserve is too small.
Common fixes include:
- Initial seeding: Ensure the contract is initialized with a non-zero supply (e.g., 1 wei) and a corresponding reserve deposit before any minting is allowed.
- Safe math: Use OpenZeppelin's
SafeMathor Solidity 0.8.x's built-in overflow checks, but also implement a minimum reserve check before price calculation. - Example check:
solidityfunction getPrice() public view returns (uint256) { require(totalSupply() > 0, "No tokens minted"); require(reserveBalance > 0, "Reserve is empty"); return reserveBalance / totalSupply(); }
Failing to handle these edge cases will cause transactions to revert, blocking the primary buy/sell mechanism.
Conclusion and Next Steps
You have now configured a continuous token model for streaming revenue. This final section outlines key considerations for launch and suggests advanced integrations.
Before deploying your contract to mainnet, conduct a thorough security audit. While the provided ContinuousToken contract uses established patterns like the Bancor Formula, custom modifications to minting logic or fee structures introduce risk. Consider engaging a professional auditing firm or using services like Code4rena or Sherlock. For initial testing, deploy to a testnet like Sepolia and simulate user interactions to verify the bonding curve's behavior under expected load and price volatility.
Your launch strategy is critical. Determine initial parameters: the reserveRatio (e.g., 0.5 for high liquidity, 0.2 for higher volatility), the initialTokenSupply, and the initialReserveBalance in ETH or a stablecoin. Use a front-end interface, such as a simple React dApp interacting with your contract's buy and sell functions, to provide user access. Transparently communicate the tokenomics—how streaming revenue accrues to the reserve and impacts the price—to your community. Tools like Dune Analytics can be used to create a public dashboard tracking reserve growth and token metrics.
For ongoing development, consider integrating with existing DeFi primitives. Your token's reserve could be deposited into a lending protocol like Aave to generate additional yield, directly benefiting holders. You could also create a StreamingFeeModule that periodically (e.g., weekly) mints new tokens corresponding to accrued platform revenue, automating the value distribution. Explore making your token compliant with relevant standards like ERC-20 and potentially ERC-4626 for vault representations of the underlying reserve.
The continuous token model is a powerful primitive for aligning long-term incentives. Its success depends on sustainable revenue generation and transparent mechanics. Continue to monitor gas optimization for buy/sell functions, as high costs can deter micro-transactions. The final code and further resources for this guide are available in the Chainscore Labs GitHub repository. For deeper research, refer to the original Bancor Protocol Whitepaper which formalizes the bonding curve mathematics.