Rajat Kumar
tokenId
represents a distinct partition with its own set of rights and privileges. This makes it suitable for various use cases, particularly semi-fungible asset management. The standard also includes features like token locking, forced transfers for recovery, address freezing, payouts, and dynamic compliance management using off-chain vouchers.transferableBalance
balanceOf(account, id) - lockedBalanceOf(account, id)
.lockedBalanceOf
account
and id
.restrictTransfer
id
.TransferRestricted
.removeRestriction
id
. MUST check if id
is previously restricted.TransferRestrictionRemoved
.safeTransferFrom
_to
is the zero address._id
is lower than the _value
sent.TransferSingle
event to reflect the balance change (see “Safe Transfer Rules” section of the standard).canTransfer
function to check if the transfer can proceedcanTransfer
to
and from
are not frozen address.id
of the transfer should not be restrictedamount
is a transferable balance.lockTokens
TokensLocked
.unlockToken
account
address and id
.block.time
TokenUnlocked
.forceTransfer
from
address is not Frozen.to
address is Frozen.TokensForceTransferred
.freeze
account address
to be frozen and additional data, and returns a boolean
value indicating whether the operation was successful.account
to transfer and payout.AddressFrozen
.unFreeze
account address
to be unfrozen and additional data, and returns a boolean
value indicating whether the operation was successful.account
AddressUnfrozen
.payout
to
address is frozen address.PayoutDelivered
.batchPayout
to
address is frozen address.PayoutDelivered
.setWrappedTokenAddress
token
address could be any security token standard i.e ERC-3643.wrapToken
wrapTokenFromPartition
id
with the corresponding partially fungible security token partitionId
.unwrapToken
tokenId
feature of ERC-1155 to represent distinct partitions within a token contract. Each tokenId
corresponds to a unique partition with its own set of rights, privileges, and compliance rules. This enables the creation of semi-fungible tokens representing fractional ownership, different share classes, or other granular units.canTransfer
function checks whether a transfer is allowed based on factors such as token restrictions, frozen addresses, transferable balances, and token locking.canTransfer
function can verify these vouchers to determine the eligibility of a transfer.safeTransferFrom
function on the proposed contract.canTransfer
function verifies the authenticity and validity of the voucher by checking the signature and ensuring that the voucher details match the transfer parameters.forceTransfer
function that allows authorized entities (e.g., the issuer or a designated recovery agent) to transfer tokens from one address to another. This function bypasses the usual transfer restrictions and can be used as a recovery mechanism.payout
function allows sending payouts to a single address, while batchPayout
enables sending payouts to multiple addresses in a single transaction. These functions streamline the process of distributing dividends, interest, or other payments to token holders.forceTransfer
function in this proposal enables this process.canTransfer
function facilitates compliance checks during token transfers, offering adaptability through diverse implementation methods such as on-chain storage, oracle utilization, or any off-chain methodologies. This versatility ensures seamless integration with existing compliance frameworks, particularly in enforcing regulatory standards like KYC/AML. Additionally, functionalities like freezeAddress
, restrictTransfer
, lockToken
and forceTransfer
empower entities to regulate token movements based on specified conditions or regulatory requirements. Complementing these, the unlockToken
function enhances transparency and accountability by facilitating the release of tokens post-compliance actions.wrapToken
and wrapTokenFromPartition
are essential for simplifying conversions within the token system. wrapToken
is specifically designed for wrapping ERC-20-like tokens to this protocol, on the other hand, wrapTokenFromPartition
is used when we want to convert tokens from non-fungible tokens or any multi-standard token into proposed protocol. It allows for more specialized conversions, ensuring tokens from different standards can work together smoothly.unwrapToken
function is used to reverse the process of wrapping tokens. When tokens are wrapped, they’re usually locked or held in a special way to ensure they’re used correctly. users can unlock or release these tokens, returning them to their original standard, essentially, frees up tokens that were previously locked, giving users more control over their assets in the ecosystem.payout
function enables direct payments to individual token holders for one-off or event-triggered distributions, facilitating targeted disbursements. Meanwhile, the batchPayout
function processes multiple payments in a single transaction, optimizing efficiency for larger-scale or regular payouts on the blockchainforceTransfer
, freezeAddress
, and lockTokens
. It is crucial to implement proper access control mechanisms, such as role-based permissions, to ensure that only authorized entities can execute these functions.safeTransferFrom
, lockTokens
, and forceTransfer
should validate input parameters to prevent unauthorized or unintended actions. This includes checking for valid addresses, sufficient balances, and appropriate permissions.payout
and batchPayout
functions should ensure that only authorized entities can initiate payouts and that the total payout amount does not exceed the available balance. Proper access control and input validation are essential to prevent unauthorized or fraudulent payouts.