Denom
untyped stringDenom is the asset the invoices this realm prices are denominated in, and the unit a penalty is expressed in. This realm never holds it.
Value
"ugnot"
InvoicesPath
untyped stringInvoicesPath pins the realm this one reads, by value, so a reader of a published assessment can see which invoices it priced.
Value
"/r/g1ut6uspuh73e02yauxpmyt8g3wwddaq8utagvm3/invoices"
RenderLimit
untyped bigintRenderLimit bounds every rendered list — an unbounded Render was YELLOW in three prior audits.
Value
(20 <untyped> bigint)
MaxAssessmentsPerIssuer
untyped bigintMaxAssessmentsPerIssuer bounds one creditor's stored assessment records, so one address cannot grow this realm's state without bound. It counts STORED records, the invoices-realm discipline.
Value
(256 <untyped> bigint)
assessment
typeValue
latefees.assessment
self
.uverse.address// this realm's address, captured at deploy
Value
<gnolang.StringValue>
nextSeq
int64Value
1
schedules
*v0.Tree// issuer.String() -> tiers.Schedule (by value)
- OID
- 0e4779…521d:6
schedules details
bySeq
*v0.Tree// padID(seq) -> \*assessment
- OID
- 0e4779…521d:9
bySeq details
issuerNum
*v0.Tree// issuer.String() -> \*int64, stored assessments
- OID
- 0e4779…521d:12
issuerNum details
init.10
func()- OID
- 0e4779…521d:14
init.10 details
SetSchedule
func(edges string, rates string) intSetSchedule declares or replaces the caller's late-fee schedule: a graduated accrual over OVERDUE BLOCKS, built from comma-separated int64 lists where len(rates) == len(edges)+1 and each rate is a ugnot accrual per RateScale blocks (0..10000). Edges are block counts — e.g. "216000,648000" is roughly ten and thirty days at ~4s blocks. A single rate with no edges is a flat accrual. Replacing a schedule does not touch already-frozen assessments, which snapshot the schedule that priced them.
- OID
- 0e4779…521d:16
SetSchedule details
Assess
func(invoiceID int64) int64Assess freezes a late-fee penalty on one of the caller's own overdue invoices and returns its sequence number. The caller must be the invoice's issuer (the creditor), must have declared a schedule, and the invoice must be overdue right now. The invoice's facts and the current schedule are snapshotted, so the assessment is a stable claim even as the invoice keeps accruing or is later paid.
- OID
- 0e4779…521d:17
Assess details
PenaltyNow
func(issuer .uverse.address, invoiceID int64) int64PenaltyNow is the penalty an issuer's invoice has accrued as of the current height, under the issuer's CURRENT schedule. It is 0 when the invoice is not overdue — including once it is paid or voided, because [r/invoices](/r/invoices) does not expose when a payment landed, so accrual is only computable while the invoice is still open and late. A frozen [Assess](#Assess) is how a claim survives the invoice being paid. Panics only if the issuer has no schedule or the invoice does not exist.
- OID
- 0e4779…521d:18
PenaltyNow details
QuotePenalty
func(issuer .uverse.address, overdueBlocks int64) int64QuotePenalty prices a hypothetical overdue duration against an issuer's current schedule, without reading any invoice — the preview a creditor uses to tune a schedule. Panics if the issuer has no schedule or overdueBlocks is negative.
- OID
- 0e4779…521d:19
QuotePenalty details
HasSchedule
func(issuer .uverse.address) boolHasSchedule reports whether an issuer has declared a late-fee schedule.
- OID
- 0e4779…521d:20
HasSchedule details
ScheduleOf
func(issuer .uverse.address) (edges []int64, rates []int64)ScheduleOf returns an issuer's current schedule as its edge and rate slices, or two empty slices if none is declared.
- OID
- 0e4779…521d:21
ScheduleOf details
AssessmentInfo
func(seq int64) (issuer .uverse.address, payer .uverse.address, invoiceID int64, outstanding int64, overdueBy int64, penalty int64, assessedAt int64)- OID
- 0e4779…521d:22
AssessmentInfo details
AssessmentSchedule
func(seq int64) (edges []int64, rates []int64)AssessmentSchedule returns the schedule snapshot an assessment was priced under — the edges and rates frozen with it, which may differ from the issuer's current schedule.
- OID
- 0e4779…521d:23
AssessmentSchedule details
HasAssessment
func(seq int64) boolHasAssessment reports whether a sequence number names a frozen assessment.
- OID
- 0e4779…521d:24
HasAssessment details
AssessmentsOf
func(issuer .uverse.address) int64AssessmentsOf is the number of assessments an issuer has frozen.
- OID
- 0e4779…521d:25
AssessmentsOf details
NumAssessments
func() int64- OID
- 0e4779…521d:26
NumAssessments details
Invoices
func() string- OID
- 0e4779…521d:27
Invoices details
Address
func() .uverse.address- OID
- 0e4779…521d:28
Address details
Height
func() int64- OID
- 0e4779…521d:29
Height details
charge
func(s tiers.Schedule, overdueBy int64) int64charge prices an overdue duration against a schedule, surfacing tiers' own error as a panic rather than a silent zero. A zero or negative base prices to zero (tiers refuses a negative amount, so it is guarded here).
- OID
- 0e4779…521d:30
charge details
mustAssessment
func(seq int64) *latefees.assessment- OID
- 0e4779…521d:31
mustAssessment details
assertNoSend
func()assertNoSend refuses coins on every crossing entrypoint. This realm holds nothing, so every one of its writes is non-payable. Reads the ORIGIN envelope, so a transaction attaching coins anywhere is refused.
- OID
- 0e4779…521d:32
assertNoSend details
counter
func(tree *v0.Tree, a .uverse.address) *int64- OID
- 0e4779…521d:33
counter details
parseInt64List
func(s string, max int, what string) []int64parseInt64List parses a comma-separated int64 list, bounding the element count BEFORE materialising values so a long string dies on count, not memory (the r/receivables bounding argument). "" is the empty list.
- OID
- 0e4779…521d:34
parseInt64List details
trimSpaces
func(s string) string- OID
- 0e4779…521d:35
trimSpaces details
padID
func(id int64) string- OID
- 0e4779…521d:36
padID details
itoa
func(n int64) string- OID
- 0e4779…521d:37
itoa details
Render
func(path string) stringRender shows the catalog at "", an assessment at "seq/\<n>", and an issuer's schedule at "issuer/\<addr>". Every user-supplied value rendered between table pipes is escaped with sanitize.TableCell; addresses carry no markdown metacharacter but are passed through InlineText for the same reason the sibling realms do.
- OID
- 0e4779…521d:38
Render details
renderHome
func() string- OID
- 0e4779…521d:39
renderHome details
renderAssessment
func(seqStr string) string- OID
- 0e4779…521d:40
renderAssessment details
renderIssuer
func(addr string) string- OID
- 0e4779…521d:41
renderIssuer details
renderSchedule
func(edges []int64, rates []int64) string- OID
- 0e4779…521d:42
renderSchedule details
hasPrefix
func(s string, p string) bool- OID
- 0e4779…521d:43