This post proposes the integration of a new core function, named “fraction,” into the brc-20 protocol to improve the experience of token transfers for all users. Given that simplicity is the fundamental tenet of the brc-20 standard, the suggestion to introduce an additional core function was made with considerable deliberation and is not intended to become commonplace.
Purpose:
The fraction function is introduced to safeguard against unwanted transfer inscriptions that could disrupt tokens and disrupt a user’s operations.
Problem:
The current brc-20 protocol allows anyone to create transfer inscriptions to any address. Although this accessibility allows for the use of inscription tools, it also opens the door for potentially disruptive actors to fragment users’ balances and interfere with their activities.To date, there has been very little evidence of these “attacks” occurring.
Proposed Solution:
By incorporating the fraction function directly into the brc-20 protocol, specific validity conditions are enforced on transfers. This measure is intended to deter attackers by making it more difficult and costly to execute such annoyances.
Functionality:
The fraction function is intended to be a core part of the brc-20 protocol and is not well-suited for modular implementation. It will set the permissible range for transfer amounts and/or required minimum padding for creating a valid transfer inscription.
Implementation:
An example of the proposed implementation is as follows:
{
"p": "brc-20",
"op": "fraction",
"tick": "ordi",
"min": "10",
"max": "10000",
"pad": "100000"
}
A user can apply this inscription to the address holding the balance they want to limit. After inscribing, they would initiate it by transferring the inscription to their own address. TAs per the given example, this would mandate that all incoming transfer inscriptions (inscribe-transfer) must specify an “amt” within the range of 10 to 10,000, and the padding/postage must exceed 100,000 satoshis.
Validity Conditions:
The fraction function validity conditions and rules:
- If min omitted, min = 0.
- If max omitted, max = ticker.max.
- Pad is not required.
- min <= max.
- The validity of the minimum and maximum values is not contingent upon the currently available balance and should fall within the 0 to maximum range of the tick.
- If the available balance is lower than min, inscribe-transfer cannot be performed. This effectively locks the balance in its available form.
- padding > 0.
- If the tick has not been deployed, fraction function is invalid.
Usage:
The average user won’t need to use this function. It only impacts the initial stage of the transfer inscription process (inscribe-transfer) and does not influence the subsequent actual transfer of valid inscriptions. Consequently, users who apply the padding condition can remove extra satoshis from the transfer inscription UTXO during the final stage of the transfer. Furthermore, those deploying tokens can utilize the min/max settings for a distribution mechanism resembling an Ethereum-style airdrop experience (claimdrop). This update also aims to foster innovation by providing security for bridges and relay mechanisms.
Alternative Solutions:
Various alternative options were also considered, including requiring the attachment of signatures to transfer inscriptions, requiring the use of a UTXO from a specified address when generating transfer inscriptions, or tracking the satoshis spent from a balance holding wallet. However, these approaches led to complexity, effected user experience, and added new attack vectors. If you have another innovative approach, please share your thoughts in the discussion below.
As this represents the first significant amendment since the protocol’s launch, community feedback on its advantages and possible drawbacks is encouraged. The initial deadline is set for two weeks; however, it may be extended if consensus is not reached within this timeframe. The subsequent phase will address the front-running challenges prevalent in meta-protocols.