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

market_adapter.gno

2.64 Kb · 66 lines
 1// Fixed-target adapter. No callback, arbitrary call, or recovered panic path.
 2package memba_dao
 3
 4import (
 5    "gno.land/p/samcrew/memba_weighted_host"
 6    "gno.land/r/samcrew/memba_market_config"
 7)
 8
 9func marketState(a memba_weighted_host.MarketAction) memba_weighted_host.MarketState {
10    bps := int64(0)
11    if a.Kind() == memba_weighted_host.MarketSetFee {
12        bps = int64(memba_market_config.GetFeeBPS(string(a.Lane())))
13    }
14    return memba_weighted_host.MarketState{Admin: memba_market_config.GetAdmin(), PendingAdmin: memba_market_config.GetPendingAdmin(), Treasury: memba_market_config.GetTreasury(), BPS: bps}
15}
16
17func ProposeMarketAccept(cur realm) uint64 {
18    a := memba_weighted_host.MarketAccept()
19    return host.ProposeMarket(a, marketState(a), cur)
20}
21func ProposeMarketFee(cur realm, lane string, bps int64) uint64 {
22    a := memba_weighted_host.MarketFee(memba_weighted_host.MarketLane(lane), bps)
23    return host.ProposeMarket(a, marketState(a), cur)
24}
25func ProposeMarketTreasury(cur realm) uint64 {
26    a := marketPolicy.SetTreasury()
27    return host.ProposeMarket(a, marketState(a), cur)
28}
29func ProposeMarketReturn(cur realm) uint64 {
30    a := marketPolicy.ReturnAdmin()
31    return host.ProposeMarket(a, marketState(a), cur)
32}
33func ProposeMarketAbortReturn(cur realm) uint64 {
34    a := marketPolicy.AbortReturn()
35    return host.ProposeMarket(a, marketState(a), cur)
36}
37
38func executeMarket(cur realm, id uint64) {
39    proposed := host.Proposal(id).MarketAction
40    before := marketState(proposed)
41    a := host.ConsumeMarket(id, before, cur)
42    expected := before
43    switch a.Kind() {
44    case memba_weighted_host.MarketAcceptAdmin:
45        expected.Admin = marketPolicy.DAO()
46        expected.PendingAdmin = ""
47        memba_market_config.AcceptAdmin(cross(cur))
48    case memba_weighted_host.MarketSetFee:
49        expected.BPS = a.BPS()
50        memba_market_config.SetFeeBPS(cross(cur), string(a.Lane()), a.BPS())
51    case memba_weighted_host.MarketSetTreasury:
52        expected.Treasury = a.Recipient()
53        memba_market_config.SetTreasury(cross(cur), a.Recipient())
54    case memba_weighted_host.MarketReturnAdmin:
55        expected.PendingAdmin = a.Recipient()
56        memba_market_config.TransferAdmin(cross(cur), a.Recipient())
57    case memba_weighted_host.MarketAbortReturn:
58        expected.PendingAdmin = ""
59        memba_market_config.CancelAdminTransfer(cross(cur))
60    default:
61        panic("unsupported market action")
62    }
63    // Stage-return deliberately retains DAO admin until the successor accepts
64    // separately. A mismatch aborts the entire transaction, including Consume.
65    if marketState(a) != expected { panic("market postcondition mismatch") }
66}