Fraction ProtocolgenericFacetspriceFacetsstablePriceFacet

StablePriceFacet

Manages the configuration of fraction pricing in terms of funding packets (a.k.a input packets) within fractionalization campaigns. It defines the number of funding packets required to obtain a single fraction per campaign.

_This PriceFacet implementation is intended for campaigns where the price of fractions remains stable throughout the campaign lifecycle. Each campaign is configured separately.

IMPORTANT:

  • Extra care should be taken when setting the price of a fraction in a campaign (see setAndCheckPriceFacet()) as it is closely tied to the configuration of the campaign's funding packet (see FundingPackets facets)._

initPriceFacet

function initPriceFacet(bytes initPriceData) external

setAndCheckPriceFacet

function setAndCheckPriceFacet(bytes postFractionPriceData) external

Sets the price of a fraction, in terms of funding packets, for a campaign.

_Defines the price as the number of funding packets required to purchase a single fraction in an associated campaign.

Emits a {CampaignPriceConfigured} event.

IMPORTANT:

There are two ways to configure price and funding packets at the API level, depending on the decimal precision of tokens in the campaign's funding packet:

  1. Uniform Decimal Precision (All funding tokens have the same decimal precision—no mixed ERCs allowed):

    • Either:
      • Set the funding packet's tokenAmount values (see FundingPackets Facets) in whole units (e.g., 2 wei).
      • Set price scaled by the token’s decimal precision (e.g., for 6 decimals, price = 10 * 10^6).
    • Or:
      • Set tokenAmount values already scaled by the decimal precision (e.g., 2 * 10^6).
      • Set price in whole units (e.g., price = 10).
  2. Mixed Decimal Precision (Funding tokens have different decimal precision-mixed ERCs allowed):

    • The tokenAmount values in the funding packet must always be scaled to the respective decimal precision.
    • The price must be set in whole units.

Discount & Interest Mechanisms:

  • If discount & interest mechanisms are configured, the tokenAmount(s) of funding packet must be defined in whole units (e.g., 2 wei), and price must always be scaled according to the funding token decimal precision (e.g., for 6 decimals, price = 10 * 10^6). This requirement should be enforced at the API level and within front-end applications.

  • To prevent truncation, price should be scaled by at least 1e6, considering that percentages are 1e6 scaled.

  • This ensures that percentage-based discount & interest mechanisms (e.g., BurnFungibleForDiscount) can correctly compute discounted and interest-adjusted prices without truncation. Percentages are based on 10^6, meaning 10^6 == 100%.


Example:

  • If the campaign's funding packet has been configured (see FundingPackets Facets) as 2 wei of $TOKEN (suppose $TOKEN has 18 decimals), and price == 1 * 10^18, then to purchase a single fraction, investors will need to provide 10^18 funding packets which corresponds to 2 $TOKEN per fraction (2 wei * 10^18 == 2 * 10^18)._

Parameters

NameTypeDescription
postFractionPriceDatabytesThe ABI-encoded data containing the following: - price: The price (in terms of funding packets) required to purchase a single fraction.

getPurchasePrice

function getPurchasePrice(uint256 campaignId, uint256, bytes) external view returns (uint256)

getCurrentPrice

function getCurrentPrice(uint256 campaignId) external view returns (uint256)

Retrieves the price of a single fraction within a specified campaign.

Parameters

NameTypeDescription
campaignIduint256The unique identifier of the targeted campaign.

Return Values

NameTypeDescription
[0]uint256uint256 The amount of funding packets required to purchase a single fraction in campaignId.

On this page