IDebtInstrument
Interface for debt instruments (bonds, loans, notes) in the tokenization system
Implements a registry-based approach where only creditor assets are tokenized
Functions
issueDebt
Issues a new debt instrument
function issueDebt(address creditor, address debtor, DebtTerms calldata terms, uint256 customId)
external
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;
Parameters
debtId
uint256
The debt to pay
amount
uint256
The payment amount
getAmountDue
Gets the current amount due
function getAmountDue(uint256 debtId)
external
view
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 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 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;
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;
Parameters
debtId
uint256
The debt to restructure
newTerms
DebtTerms
The new terms
getDebtRecord
Gets debt record
function getDebtRecord(uint256 debtId) external view 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
Events
DebtIssued
event DebtIssued(
uint256 indexed debtId,
address indexed debtor,
address indexed creditor,
uint256 principal,
uint256 interestRate,
uint256 maturityDate
);
PaymentMade
event PaymentMade(
uint256 indexed debtId,
address indexed debtor,
uint256 principalPaid,
uint256 interestPaid,
uint256 remainingPrincipal
);
DebtTransferred
event DebtTransferred(
uint256 indexed debtId, address indexed oldCreditor, address indexed newCreditor, bytes32 assetLotId
);
DebtDefaulted
event DebtDefaulted(uint256 indexed debtId, address indexed debtor, uint256 amountInDefault);
DebtRestructured
event DebtRestructured(uint256 indexed debtId, address indexed debtor, DebtTerms newTerms);
DebtSettled
event DebtSettled(uint256 indexed debtId, address indexed debtor, uint256 finalPayment);
Structs
DebtTerms
struct DebtTerms {
uint256 principal;
uint256 interestRate;
uint256 issuanceDate;
uint256 maturityDate;
PaymentFrequency paymentFrequency;
address paymentCurrency;
bool isAmortizing;
uint256 gracePeriodDays;
}
DebtRecord
struct DebtRecord {
uint256 debtId;
address debtor;
DebtTerms terms;
uint256 outstandingPrincipal;
uint256 accruedInterest;
uint256 lastPaymentDate;
uint256 nextPaymentDue;
DebtStatus status;
bytes32 assetLotId;
}
PaymentScheduleItem
struct PaymentScheduleItem {
uint256 dueDate;
uint256 principalDue;
uint256 interestDue;
bool isPaid;
uint256 paidDate;
uint256 paidAmount;
}
Enums
DebtStatus
enum DebtStatus {
ACTIVE,
PAID,
DEFAULTED,
RESTRUCTURED
}
PaymentFrequency
enum PaymentFrequency {
NONE,
MONTHLY,
QUARTERLY,
SEMIANNUAL,
ANNUAL
}
Last updated
Was this helpful?