DebtInstrumentFacet
Inherits: IDebtInstrument, ReentrancyGuard
Implements debt instrument functionality for tokenized debt assets
Registry-based approach where only creditor positions are tokenized
Functions
onlyAuthorizedIssuer
modifier onlyAuthorizedIssuer();
onlyDebtor
modifier onlyDebtor(uint256 debtId);
debtExists
modifier debtExists(uint256 debtId);
issueDebt
Issues a new debt instrument
function issueDebt(address creditor, address debtor, DebtTerms calldata terms, uint256 customId)
external
onlyAuthorizedIssuer
nonReentrant
returns (uint256 debtId, bytes32 assetLotId);
Parameters
creditor
address
The initial creditor (asset token holder)
debtor
address
The party owing the money
terms
DebtTerms
The terms of the debt
customId
uint256
Optional custom ID for the asset lot
Returns
debtId
uint256
The unique debt identifier
assetLotId
bytes32
The lot ID for the creditor's asset token
makePayment
Makes a payment on a debt
Payment allocation: interest first, then principal
function makePayment(uint256 debtId, uint256 amount) external payable debtExists(debtId) nonReentrant;
Parameters
debtId
uint256
The debt to pay
amount
uint256
The payment amount
getAmountDue
Gets the current amount due
function getAmountDue(uint256 debtId)
public
view
debtExists(debtId)
returns (uint256 principalDue, uint256 interestDue, bool isOverdue);
Parameters
debtId
uint256
The debt to check
Returns
principalDue
uint256
Amount of principal due
interestDue
uint256
Amount of interest due
isOverdue
bool
Whether payment is overdue
getSettlementAmount
Calculates total amount to settle debt today
function getSettlementAmount(uint256 debtId) external view debtExists(debtId) returns (uint256 totalAmount);
Parameters
debtId
uint256
The debt to check
Returns
totalAmount
uint256
Principal + all accrued interest
getPaymentSchedule
Gets payment schedule for a debt
function getPaymentSchedule(uint256 debtId)
external
view
debtExists(debtId)
returns (PaymentScheduleItem[] memory schedule);
Parameters
debtId
uint256
The debt to check
Returns
schedule
PaymentScheduleItem[]
Array of payment schedule items
markAsDefaulted
Marks a debt as defaulted
Only callable by authorized parties after grace period
function markAsDefaulted(uint256 debtId) external debtExists(debtId) onlyAuthorizedIssuer;
Parameters
debtId
uint256
The debt to mark as defaulted
restructureDebt
Restructures debt terms
Requires consent from both debtor and creditor
function restructureDebt(uint256 debtId, DebtTerms calldata newTerms) external debtExists(debtId) nonReentrant;
Parameters
debtId
uint256
The debt to restructure
newTerms
DebtTerms
The new terms
getDebtRecord
Gets debt record
function getDebtRecord(uint256 debtId) external view debtExists(debtId) returns (DebtRecord memory record);
Parameters
debtId
uint256
The debt ID
Returns
record
DebtRecord
The complete debt record
getDebtorObligations
Gets all debt IDs for a debtor
function getDebtorObligations(address debtor) external view returns (uint256[] memory debtIds);
Parameters
debtor
address
The debtor address
Returns
debtIds
uint256[]
Array of debt IDs
getDebtByAssetLot
Links a transferred asset lot to its debt record
function getDebtByAssetLot(bytes32 assetLotId) external view returns (uint256 debtId);
Parameters
assetLotId
bytes32
The asset lot being transferred
Returns
debtId
uint256
The associated debt ID
_createDebtAssetLot
Creates a debt asset lot for the creditor
function _createDebtAssetLot(
address creditor,
uint256 principal,
address paymentCurrency,
uint256 debtId,
uint256 customId
) internal returns (bytes32 lotId);
_getCreditorFromLot
Gets the current creditor from a lot
function _getCreditorFromLot(bytes32 lotId) internal view returns (address);
_updatePaymentSchedule
Updates payment schedule after a payment
function _updatePaymentSchedule(uint256 debtId, uint256 paymentAmount) internal;
onDebtAssetTransferred
Handles debt asset transfer notification
Called by TransferFacet when a debt asset lot is transferred
function onDebtAssetTransferred(bytes32 oldLotId, bytes32 newLotId, address from, address to) external;
setAuthorizedIssuer
Sets authorized issuer status
function setAuthorizedIssuer(address issuer, bool authorized) external;
Parameters
issuer
address
Address to authorize/unauthorize
authorized
bool
Whether the address should be authorized
consentToRestructure
Provides consent for debt restructuring
function consentToRestructure(uint256 debtId) external debtExists(debtId);
Parameters
debtId
uint256
The debt to consent for
Last updated
Was this helpful?