RealmPath
untyped stringRealmPath is this realm's own path, used to build Render links.
Value
"/r/g1ut6uspuh73e02yauxpmyt8g3wwddaq8utagvm3/bounty_panel"
Denom
untyped stringDenom is the only asset this realm accepts.
Value
"ugnot"
MaxFeeBps
int64MaxFeeBps is the hard protocol-fee cap: 1000 bps = 10%.
Value
1000
StatusOpen
untyped stringBounty status values.
Value
"open"
StatusAwarded
untyped stringBounty status values.
Value
"awarded"
StatusCancelled
untyped stringBounty status values.
Value
"cancelled"
StatusExpired
untyped stringBounty status values.
Value
"expired"
MaxTitleLen
untyped bigintInput bounds.
Value
(80 <untyped> bigint)
MaxDescLen
untyped bigintInput bounds.
Value
(2000 <untyped> bigint)
MaxURILen
untyped bigintInput bounds.
Value
(500 <untyped> bigint)
MaxPanelSize
int64Input bounds.
Value
16
MaxSubmissions
int64Input bounds.
Value
500
MinDurationBlocks
int64Input bounds.
Value
1
MaxDurationBlocks
int64Input bounds.
Value
10000000
ExpiryGraceBlocks
int64Input bounds.
Value
100
MaxRenderRows
untyped bigintInput bounds.
Value
(20 <untyped> bigint)
submission
typeValue
bounty_panel.submission
bounty
typeValue
bounty_panel.bounty
admin
.uverse.address// may set fee, fee recipient, successor admin
Value
<gnolang.StringValue>
feeRecipient
.uverse.address// may withdraw fees and sweep surplus
Value
<gnolang.StringValue>
feeBps
int64// fee snapshotted into NEW bounties
Value
250
self
.uverse.address// this realm's address, captured at deploy
Value
<gnolang.StringValue>
nextID
int64Value
3
openTotal
int64// == Σ amount over bounties with status Open
Value
0
bounties
*v0.Tree// padID(id) -> \*bounty
- OID
- 07af8e…4ca2:10
bounties details
ledger
*feeledger.Ledger- OID
- 07af8e…4ca2:13
ledger details
init.26
func()- OID
- 07af8e…4ca2:17
init.26 details
rejectStraySend
func()rejectStraySend aborts when coins are attached to a non-payable call. This realm does hold funds, so a stray send would not be lost outright — it would become sweepable surplus belonging to the fee recipient, silently converting a user's coins into protocol revenue. Aborting reverts the transfer to the sender instead. Guarded on IsUserCall, not IsUser, because a MsgRun ephemeral can consume the OriginSend envelope before forwarding control. SCOPE, precisely: the guard reads the ORIGINATING transaction's envelope, so it only inspects direct EOA calls. For a realm-routed call the -send envelope is delivered to the INTERMEDIARY realm's address, so there is nothing at this realm to reject and the guard deliberately fails open. That is not a hole: an intermediary that separately sends coins to this realm's address is making an ordinary transfer, which no guard in any entrypoint could intercept, and which lands as surplus recoverable through SweepDenom. Coins can only become ESCROW through CreateBounty.
- OID
- 07af8e…4ca2:19
rejectStraySend details
CreateBounty
func(title string, description string, panelCSV string, threshold int64, submitBlocks int64, resolveBlocks int64, maxFeeBps int64) int64CreateBounty escrows the attached GNOT as a new open bounty and returns its id. Only direct EOA calls with -send are accepted. panelCSV is a comma-separated list of resolver addresses; threshold is how many of them must name the same submission for it to win. Submissions are accepted for submitBlocks from now, after which the panel has resolveBlocks to decide. The current protocol fee is snapshotted into the bounty and must not exceed maxFeeBps, the ceiling the caller signed for; pass MaxFeeBps to accept any legal fee.
- OID
- 07af8e…4ca2:20
CreateBounty details
Submit
func(id int64, uri string)Submit records (or replaces) the caller's submission to an open bounty before its submission deadline. One submission per address per bounty — re-submitting replaces the caller's own reference only. The funder and every panel member are barred, so no resolver can vote for their own work.
- OID
- 07af8e…4ca2:21
Submit details
Vote
func(id int64, candidate .uverse.address)Vote casts (or changes) the calling resolver's vote for one of the bounty's submissions. Only panel members may vote, and only after the submission window has closed and before the resolution deadline. A resolver holds exactly one live vote, changeable until the threshold is reached. The vote that brings a submission to the threshold awards the bounty in the same transaction: the escrow leaves the open pool and is credited to the winner's claimable balance at the fee snapshotted at creation. Terminal.
- OID
- 07af8e…4ca2:22
Vote details
award
func(b *bounty_panel.bounty, winner .uverse.address, votes int64)award moves an Open bounty's escrow into the winner's claimable balance at the snapshotted fee and finalizes the status. The caller has already verified authorization, status and the threshold.
- OID
- 07af8e…4ca2:23
award details
CancelBounty
func(id int64)CancelBounty closes an open bounty and refunds its escrow to the funder, fee-free. Only the funder may cancel, and ONLY while no contributor has submitted: once work exists, the funder cannot unilaterally reclaim the escrow. Terminal.
- OID
- 07af8e…4ca2:24
CancelBounty details
ExpireBounty
func(id int64)ExpireBounty closes an open bounty whose resolution deadline passed more than ExpiryGraceBlocks ago, refunding the funder fee-free. ANYONE may call it — this is the permissionless valve that guarantees escrow can never be trapped by an inactive or deadlocked panel. Terminal.
- OID
- 07af8e…4ca2:25
ExpireBounty details
refundOpen
func(b *bounty_panel.bounty, terminal string)refundOpen moves an Open bounty's escrow into the funder's claimable balance fee-free and finalizes the status. Callers have already verified authorization and status.
- OID
- 07af8e…4ca2:26
refundOpen details
Claim
func(amount int64)Claim sends amount ugnot of the caller's claimable balance (winnings and refunds) back to the caller.
- OID
- 07af8e…4ca2:27
Claim details
ClaimAll
func()ClaimAll sends the caller's entire claimable balance back to the caller. Fails if there is nothing to claim.
- OID
- 07af8e…4ca2:28
ClaimAll details
WithdrawFees
func()WithdrawFees sends the accrued fee pot to the fee recipient. Only the fee recipient may call it.
- OID
- 07af8e…4ca2:29
WithdrawFees details
SweepDenom
func(denom string)SweepDenom sends the surplus of a single denomination to the fee recipient. For ugnot only the excess over Liabilities() moves; other denoms move wholly. Only the fee recipient may call it.
- OID
- 07af8e…4ca2:30
SweepDenom details
SetFeeBps
func(bps int64)SetFeeBps sets the protocol fee snapshotted into FUTURE bounties at creation. Existing bounties keep the fee they were created under. Admin only; bounded by \[0, MaxFeeBps].
- OID
- 07af8e…4ca2:31
SetFeeBps details
SetFeeRecipient
func(next .uverse.address)SetFeeRecipient re-points the fee/surplus role, including the pot accrued so far. Admin only; zero address rejected.
- OID
- 07af8e…4ca2:32
SetFeeRecipient details
TransferAdmin
func(next .uverse.address)TransferAdmin hands the admin role to next. Admin only; zero address rejected. One-step (documented trade-off, matching the siblings).
- OID
- 07af8e…4ca2:33
TransferAdmin details
BountyInfo
func(id int64) (funder .uverse.address, title string, amount int64, feeBps int64, submitDeadline int64, resolveDeadline int64, status string, winner .uverse.address, numSubmissions int64, panelSize int64, threshold int64)BountyInfo returns a bounty's scalar fields by value.
- OID
- 07af8e…4ca2:34
BountyInfo details
Description
func(id int64) stringDescription returns a bounty's raw description text.
- OID
- 07af8e…4ca2:35
Description details
SubmissionOf
func(id int64, addr .uverse.address) (uri string, height int64, votes int64, ok bool)SubmissionOf returns addr's content reference, submission height and current vote count for a bounty, with ok reporting whether a submission exists.
- OID
- 07af8e…4ca2:36
SubmissionOf details
IsPanelMember
func(id int64, addr .uverse.address) boolIsPanelMember reports whether addr may vote on a bounty.
- OID
- 07af8e…4ca2:37
IsPanelMember details
Panel
func(id int64) stringPanel returns a bounty's resolver addresses as a comma-separated list, in sorted order.
- OID
- 07af8e…4ca2:38
Panel details
VoteOf
func(id int64, resolver .uverse.address) (candidate string, ok bool)VoteOf returns the submission a resolver currently votes for, with ok reporting whether that resolver has voted at all.
- OID
- 07af8e…4ca2:39
VoteOf details
VotesCast
func(id int64) int64VotesCast returns how many resolvers currently hold a live vote.
- OID
- 07af8e…4ca2:40
VotesCast details
Admin
func() .uverse.address- OID
- 07af8e…4ca2:41
Admin details
FeeRecipient
func() .uverse.address- OID
- 07af8e…4ca2:42
FeeRecipient details
FeeBps
func() int64FeeBps returns the fee that will be snapshotted into newly created bounties (existing bounties keep their own snapshot).
- OID
- 07af8e…4ca2:43
FeeBps details
FeeOn
func(amount int64) (fee int64, credited int64)FeeOn previews the fee and net payout for a bounty of amount at the CURRENT FeeBps.
- OID
- 07af8e…4ca2:44
FeeOn details
NumBounties
func() int64NumBounties returns how many bounties have ever been created.
- OID
- 07af8e…4ca2:45
NumBounties details
OpenTotal
func() int64OpenTotal returns the escrow held by open bounties (the B term).
- OID
- 07af8e…4ca2:46
OpenTotal details
BalanceOf
func(addr .uverse.address) int64BalanceOf returns addr's claimable balance (winnings + refunds).
- OID
- 07af8e…4ca2:47
BalanceOf details
UsersTotal
func() int64UsersTotal returns the sum of all claimable balances (the U term).
- OID
- 07af8e…4ca2:48
UsersTotal details
FeesAccrued
func() int64FeesAccrued returns the fee pot (the F term).
- OID
- 07af8e…4ca2:49
FeesAccrued details
Liabilities
func() int64Liabilities returns everything this realm owes: openTotal + UsersTotal + FeesAccrued.
- OID
- 07af8e…4ca2:50
Liabilities details
Held
func() int64Held returns the ugnot actually held at the realm address (H).
- OID
- 07af8e…4ca2:51
Held details
Surplus
func() int64Surplus returns Held() - Liabilities() (the S term).
- OID
- 07af8e…4ca2:52
Surplus details
Address
func() .uverse.address- OID
- 07af8e…4ca2:53
Address details
Height
func() int64Height returns the current chain height (deadline arithmetic aid).
- OID
- 07af8e…4ca2:54
Height details
Render
func(path string) stringRender shows the board at "" and a bounty detail at "\<id>". Free text (titles are charset-restricted; descriptions and URIs are not) passes through the ecosystem sanitizer before hitting markdown.
- OID
- 07af8e…4ca2:55
Render details
renderBounty
func(path string) string- OID
- 07af8e…4ca2:56
renderBounty details
assertAdmin
func(caller .uverse.address)- OID
- 07af8e…4ca2:57
assertAdmin details
mustGetBounty
func(id int64) *bounty_panel.bounty- OID
- 07af8e…4ca2:58
mustGetBounty details
assertDuration
func(name string, blocks int64)- OID
- 07af8e…4ca2:59
assertDuration details
parsePanel
func(csv string) (*v0.Tree, int64)parsePanel turns a comma-separated resolver list into a membership tree. Every entry must be a valid, non-empty, non-duplicate bech32 address. Validity is checked here rather than trusted: a mistyped resolver address would silently shrink the effective panel and could make the threshold permanently unreachable, which is a fund-trapping shape even with the expiry valve in place.
- OID
- 07af8e…4ca2:60
parsePanel details
assertValidTitle
func(title string)assertValidTitle bounds length and restricts the charset so titles are list-safe in Render without escaping.
- OID
- 07af8e…4ca2:61
assertValidTitle details
padID
func(id int64) stringpadID renders an id as a fixed-width key so avl iteration order is numeric order.
- OID
- 07af8e…4ca2:62
padID details
itoa
func(n int64) string- OID
- 07af8e…4ca2:63
itoa details
checkedAdd
func(a int64, b int64) (int64, bool)- OID
- 07af8e…4ca2:64