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}