package memba_nft_market_v2
// Admin operations — multisig-gated controls.
//
// assertAdmin() is the single authorization gate; caller = unsafe.PreviousRealm().Address().
// AdminDelist is pause-exempt (moderation can always remove content).
// SetFeeRecipient changes where platform fees flow (default = AdminAddress).
import (
"chain"
"chain/runtime/unsafe"
"gno.land/p/samcrew/grc721"
)
func assertAdmin() {
if unsafe.PreviousRealm().Address() != address(AdminAddress) {
panic("admin only")
}
}
// Pause halts new trade operations (ListNFT, BuyNFT, MakeOffer, AcceptOffer).
// Value-exit paths (DelistNFT, CancelOffer, ClaimExpiredOffer) remain available.
func Pause(cur realm) {
assertAdmin()
paused = true
chain.Emit("MarketPaused", "by", unsafe.PreviousRealm().Address().String())
}
// Unpause resumes normal operations.
func Unpause(cur realm) {
assertAdmin()
paused = false
chain.Emit("MarketUnpaused", "by", unsafe.PreviousRealm().Address().String())
}
// AdminDelist force-removes any listing. Pause-exempt (moderation).
func AdminDelist(cur realm, collectionID string, tid grc721.TokenID) {
assertAdmin()
key := listingKey(collectionID, string(tid))
if _, exists := listings.Get(key); !exists {
panic("not listed: " + key)
}
listings.Remove(key)
removeFromOrder(key)
chain.Emit("AdminDelisted",
"collection", collectionID,
"tokenId", string(tid),
"admin", unsafe.PreviousRealm().Address().String(),
)
}
// SetFeeRecipient updates the address that receives platform fees.
func SetFeeRecipient(cur realm, addr address) {
assertAdmin()
feeRecipient = addr
chain.Emit("FeeRecipientChanged", "newRecipient", addr.String())
}