package admin import ( "chain" "chain/runtime" ) const ( SetOperatorEvent = "SetOperator" UnsetOperatorEvent = "UnsetOperator" ) var ( operatorAddrs map[address]bool = make(map[address]bool) ) func init() { caller := runtime.OriginCaller() operatorAddrs[caller] = true } func SetOperator(cur realm, addr address) { caller := runtime.OriginCaller() if caller != admin { panic("admin access required to set operator") } if !addr.IsValid() { panic("invalid address") } operatorAddrs[addr] = true chain.Emit( SetOperatorEvent, "admin", caller.String(), "address", addr.String(), ) } func GetOperators() []address { result := []address{} for addr, active := range operatorAddrs { if active { result = append(result, addr) } } return result } func UnsetOperator(cur realm, addr address) { caller := runtime.OriginCaller() if caller != admin { panic("admin access required to unset operator") } if !addr.IsValid() { panic("invalid address") } if !operatorAddrs[addr] { panic("address is not an operator") } delete(operatorAddrs, addr) chain.Emit( UnsetOperatorEvent, "admin", caller.String(), "address", addr.String(), ) } func IsOperator(addr address) bool { return operatorAddrs[addr] }