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
setAndCheckPriceFacet
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:
-
Uniform Decimal Precision (All funding tokens have the same decimal precision—no mixed ERCs allowed):
- Either:
- Set the funding packet's
tokenAmount
values (seeFundingPackets 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
).
- Set the funding packet's
- Or:
- Set
tokenAmount
values already scaled by the decimal precision (e.g.,2 * 10^6
). - Set
price
in whole units (e.g.,price = 10
).
- Set
- Either:
-
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.
- The
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
), andprice
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 on10^6
, meaning10^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), andprice == 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
Name | Type | Description |
---|---|---|
postFractionPriceData | bytes | The ABI-encoded data containing the following: - price : The price (in terms of funding packets) required to purchase a single fraction. |
getPurchasePrice
getCurrentPrice
Retrieves the price of a single fraction within a specified campaign.
Parameters
Name | Type | Description |
---|---|---|
campaignId | uint256 | The unique identifier of the targeted campaign. |
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | uint256 The amount of funding packets required to purchase a single fraction in campaignId . |