Notarised ODP Contract
This smart contract is instantiated by the Orchestrator post notary verification.
The purpose of this contract is to provide metadata to the owners of the PTs.
PTs are issued based on the underlying ODP that this contract represents.
If the ODP is for 10,000 Euros, there will be 10,000 x 1000 mPTs issued.
i.e. 1 mPT = 0.001 Euro.
States
status
Current status of the ODP
Type: Enum - Notarised, Issuance Requested, Issued, Matured, Redeemed, Default
This can only be updated by the ODP Admin.
State Transitions
stateDiagram-v2 [*] --> Notarised: `MsgNotarise` Notarised --> IssuanceRequested: Updated by SPV on price match IssuanceRequested --> Issued: Issuance Request accepted by DSD Issued --> Matured: `maturity_timestamp` is reached Issued --> Redeemed: `PT` holder(s) are paid Matured --> Redeemed: `PT` holder(s) are paid <br /> post maturity Matured --> \Default: Assurance reserve kicked in
odp_admin
The admin address for this ODP contract.
This address does not have to be the owner of the ODP itself.
This address can update the status of the ODP.
Type: Address
owner
Current owner of the underlying ODP
Type: Address
balances
A mapping of PT holders and the number of PTs they hold.
PT by default is in the unit of mPT (milli PT)
Type: Map - Address -> uint256
value
The value of the underlying ODP. In the case of e-Invoices, it is the recievable amount.
Type: coin{ "denom": "EUR", "amount": 10000 }
maturity_timestamp
The date when the ODP matures. In the case of e-Invoices, it is the due date of the invoice.
An ODP state will change by endblocker hook to Matured if the maturity_timestamp is reached.
This timestamp is feed in as epoche seconds as part of the input for notarisation.
Type: Expiration - a cosmwasm type with timestamp
notarised initiator
This is the address of the supplier who initiated this process. This is forwarded by the notary module.
Type: Address