Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

courtburn.gno

1.28 Kb · 47 lines
 1package kourt
 2import (
 3	"chain"
 4	"chain/banker"
 5	"chain/runtime/unsafe"
 6)
 7const courtCreationBurnInit = int64(0)
 8var courtCreationBurn = courtCreationBurnInit
 9func CourtCreationBurn() int64 { return courtCreationBurn }
10func SetCourtCreationBurn(cur realm, amount int64) {
11	if !cur.IsCurrent() {
12		panic(errStaleRealm)
13	}
14	d := ensureGlobalDAO()
15	if cur.Previous().Address() != d.admin {
16		panic("kourtv2: only the global DAO admin prices court creation")
17	}
18	mustSanePrice(amount)
19	courtCreationBurn = amount
20}
21func ugnotAmt(n int64) string { return ccAmt(n) }
22func mustSanePrice(amount int64) {
23	if amount < 0 {
24		panic("kourtv2: a court-creation burn cannot be negative")
25	}
26}
27func takeCourtCreationBurn(cur realm) {
28	if !cur.IsCurrent() {
29		panic(errStaleRealm)
30	}
31	price := courtCreationBurn
32	if price <= 0 {
33		return
34	}
35	prev := cur.Previous()
36	if !prev.IsUserCall() {
37		panic("kourtv2: starting a court burns GNOT, so it must be a direct user call")
38	}
39	sent := unsafe.OriginSend().AmountOf(gnotDenom)
40	if sent < price {
41		panic("kourtv2: starting a court burns at least " + ugnotAmt(price) +
42			" GNOT, you sent " + ugnotAmt(sent))
43	}
44	b := banker.NewBanker(banker.BankerTypeRealmSend, cur)
45	b.SendCoins(cur.Address(), chain.PackageAddress(burnSinkPath),
46		chain.Coins{chain.NewCoin(gnotDenom, sent)})
47}