Skip to content

01 · 多商户与租户配置

0. 文档说明

内容
版本V1.0

这是地基中的地基。所有其他系统(02–17)都从这里读「这个子平台该是什么样」。


一、定位与职责

定义如何用一份引擎开出上百套独立子平台:

  • 租户(商户/子平台)的数据模型、层级与生命周期;
  • 一租户 = 一「本位币站」= 一国市场的建站模型:一站一国、一商户多站(包网引擎的核心卖点,无限开站服务多国);
  • 域名 → 租户的解析(前端启动的第 0 步:「我是谁」);
  • 一个子平台可被配置的全部维度(功能/本位币/权益/费率/主题/布局/文案/合规);
  • 配置的继承与覆盖规则、schema 校验、生效链路(bootstrap)、版本/灰度/回滚;
  • 前端如何拿到「有效配置」并据此渲染。

边界:本系统只管「配置的结构、存储、合并、下发」。具体某项配置怎么被使用,归各业务分册;后台的编辑界面与权限归 15 运营后台。本位币的记账与展示规则归 02 货币与钱包;本篇只管「本位币是哪种、属哪个站型、能收哪些通道币种」这几个建站维度。


二、核心概念与数据模型

2.1 层级

Platform 平台运营方(你)
  └── Tenant 租户 / 商户(一套独立子平台 = 一「本位币站」= 一国市场)  ← 独立配置 / 用户 / 账本 / 域名 / 本位币
        └── Site 站点(同租户下的渠道变体,可选)                     ← H5 / PWA / 特定落地页,多为布局差异

多数场景「租户 = 子平台」即够用;Site 层用于同一运营主体下的多渠道/多域名变体,继承租户配置再做少量覆盖(Site 不改本位币——本位币锁定在租户级)。

一站一国、一商户多站(定位):一个租户就是「一套本位币、一套账本、一国市场」的完整站点;站内全链路单币种(→ 02)。一个商户可开多个租户,分别服务不同国家/币种市场(如同时开一个 CNY 站与一个 USDT 站)——这是包网引擎的核心卖点:开新站近乎零开发,一站一国、无限开站。跨站层面平台是多币种(不同站不同本位币),平台看板/跨租户对账「按币种分列」(→ 17);单站内部为单币种口径。

2.2 Tenant(租户)核心字段

字段说明
tenantId租户唯一标识
code短码(用于路由/配置命名),如 globalsea01
name / brand展示名与品牌
status见 2.3 状态机
baseCurrency本位币:该站唯一记账与展示币种(→ 02)。取值即站型:CNY(CNY 站)/ USDT(USDT 站)。建站时锁定,运营中途变更属高危,须走平台审批工单(→ 15 §2.2 红区;变更需迁移账本口径,一期锁定不可变)
region主运营区域,取具体国家/地区代码(ISO 3166-1,如 CN/TH/VN),驱动合规覆盖、时区、语言;一站一国。特殊值 GLOBAL = 无属地限制的兜底区域(不绑单一国家),其合规默认集取平台最严基线(见 §三.8);推荐一站一国具体代码,GLOBAL 仅作无属地站的兜底
timezone / defaultLocale时区、默认语言
configRef指向该租户当前生效的配置版本(见 §六)
createdAt / owner建站时间、归属商户主体

2.3 租户生命周期(状态机)

            平台控制台「建站」                    验收通过,平台控制台「上线」
  ● ───────────────────────► SETUP(筹备) ───────────────────────► ACTIVE(运营)
                                │                                    │      ▲
                                │ 放弃建站                   违规/欠费│      │整改完成
                                ▼                                    ▼      │
                             CLOSED(关停/归档) ◄──────────────  SUSPENDED(暂停)
                                                 合约终止
状态用户端 App商户控制台说明
SETUP不可访问(或白名单预览)可配置建站配置与验收阶段
ACTIVE正常正常运营中
SUSPENDED停服页(仅保留提现只读入口)只读 + 财务处理违规/欠费暂停;默认冻结新增充值,保留用户提现通道;在途提现单强制了结(→ 下「资金处置」)
CLOSED不可访问不可访问合约终止归档;须先走「资产清退期」再关停;数据归档留存,不物理删除

状态流转仅平台控制台可操作,全部写审计(→ 15)。

资金处置(平台级铁律:用户资金优先):租户停服/关停时用户钱包仍有真实余额(available+bonus+locked),资金处置不得只依赖线下合约,系统层保障:

  • SUSPENDED:默认冻结新增充值、保留用户提现通道(或按合约明确为「仅提现只读」);进行中的提现单按 04 状态机强制了结(打款完成或原额回滚 WITHDRAW_ROLLBACK),不得卡死在中间态;彩金/返佣池冻结待清算。
  • CLOSED:进入 CLOSED 前必须走资产清退期——公示 → 允许用户提现 N 天 → 剩余未提余额按合约划转,全程写审计;清退未完成不得直接归档。
  • 平台对商户欠费的处置(→ §三.10 billing)不得直接冻结用户提现;商户侧财务降级与用户资金安全分离。

2.4 域名 → 租户解析(前端启动第 0 步)

  • 每租户绑定一个或多个域名(tenant_domains 表,标记主域),请求按 Host 解析出 tenantId 注入上下文(→ 00 §4.9)。
  • 解析顺序:Host 匹配 → 未命中则返回平台默认页(不落任何租户)。
  • 调试通道:非生产环境(或带调试密钥)允许 ?tenant=<code> 覆盖,用于本地与预览;生产环境忽略该参数。

2.5 配置对象 TenantConfig

配置是一棵按系统命名空间划分的树。每个业务系统认领一个顶层键,并各自维护该命名空间的 JSON Schema(见 §四.3):

jsonc
{
  "meta":     { "code": "global", "baseCurrency": "CNY", "region": "CN", "timezone": "UTC+8", "locale": "zh" },
              // code=品牌短码(非区域);region 取具体国家代码(此 CNY 站 = CN 市场)
  "features": { /* 全局功能开关,见 §三.1(纯布尔/枚举开关)*/ },
  "theme":    { /* → design/themes,见 §三.6 */ },
  "layout":   { /* → design/layouts,见 §三.6 */ },
  "copy":     { /* 文案覆盖键值,见 §三.7 */ },
  "wallet":   { /* → 02 货币与钱包(本位币 baseCurrency = 站型;站内单币种、单账户)*/ },
  "deposit":  { /* → 03 充值(通道币种 channelCurrency 可 ≠ 本位币,边界锁价)*/ },
  "withdraw": { /* → 04 提现(本位币按提现时点锁价折出到目标通道币种)*/ },
  "auth":     { /* → 05 账户与认证 */ },
  "level":    { /* → 06 等级 */ },
  "vipSalary":{ /* → 07 VIP 俸禄 */ },
  "rakeback": { /* → 08 实时返水 */ },
  "promo":    { /* → 09 优惠活动 */ },
  "task":     { /* → 10 任务打码 */ },
  "affiliate":{ /* → 11 返佣推广 */ },
  "games":    { /* → 12 游戏聚合(含场馆链路 route:原生 / CNY 映射;route 为**平台超管级配置项,商户不可见不可改**)*/ },
  "risk":     { /* → 14 风控(仅少量租户可见项,核心规则平台侧管理)*/ },
  "notify":   { /* → 16 消息通知 */ },
  "records":  { /* → 13 记录与账变(用户侧记录可见性)*/ },
  "console":  { /* → 15 运营后台(审批/安全/可见模块 visibleModules)。
                   visibleModules 合法枚举 = 后台二十一模块 id 全集(见 §三.9);
                   最终可见 = visibleModules(租户级功能面板开关)∩ RBAC view 权限(账号级,→ 15)*/ },
  "report":   { /* → 17 数据看板(可见域/导出)*/ },
  "billing":  { /* 平台向商户收取的包网费/结算计费模型(平台控制台设定,商户只读),见 §三.10 + §四.4 */ },
  "compliance": { /* 区域合规覆盖,见 §三.8 */ }
}

本篇定义树的骨架与合并规则;每个命名空间下的 schema 由认领系统的分册定义。


三、可配置维度(一个子平台能改什么)

3.1 功能开关 features

纯布尔/枚举开关,决定模块是否出现、走哪条形态(带参数的配置放各自命名空间,如本位币在 wallet.baseCurrency、场馆链路在 games.venues[].route):

jsonc
"features": {
  "vipSalary": true,            // 是否开 VIP 俸禄
  "rakeback": true,             // 是否开实时返水
  "affiliate": true,            // 是否开推广赚钱
  "staking": false,             // 是否开质押(USDT 站等加密站型)
  "kycRequired": "onWithdraw",  // never | onWithdraw | onRegister
  "promoSpecMode": false        // 优惠活动是否多态展示(原型 ?spec=1,验收用)
}

3.2 本位币与通道 wallet / deposit / withdraw02/03/04

  • 本位币 wallet.baseCurrency(站型):站的唯一记账与展示币种(CNY 站 / USDT 站);站内单币种、单账户、无第二币种符号;精度符号、余额口径均随本位币。
  • 充/提通道币种:充值通道(deposit)、提现通道(withdraw)可对外收付非本位币(通道币种 channelCurrency 与账户本位币解耦),下单/提现时点锁价折入/折出本位币入账,账本只记本位币真实值(→ 03/04)。站内不提供钱包互换/币币兑换(合规 + 敞口,→ 02 §三)。

3.3 权益门槛与费率 level / vipSalary / rakeback

等级表、升/保级门槛、各级俸禄额、返水比例矩阵 —— 全部数值化入配置,引擎只跑算法。子平台可各自定义 VIP 级数(如 8 级 / 50 级)、各级金额、返水率;金额一律以本站本位币单口径配置(单币种站下天然无歧义,金额直接单值配置)。

3.4 活动 promo → 09

启用哪些活动模板、每个活动的参数(奖金上限、打码倍数、有效期、本位币金额)、上下架、排序。

3.5 支付通道 deposit / withdraw → 03/04

开哪些充值/提现通道(法币:银行卡/云闪付/支付宝/微信/VIPPAY/GOPAY;加密:币种+网络)、限额、手续费、审核策略。通道币种可 ≠ 本位币(CNY 站收 USDT/ETH/BTC;USDT 站收 CNY 等),边界锁价折入/折出(→ 03/04)。

3.6 主题与布局 theme / layoutdocs/design/

  • theme:选用/覆盖设计系统的主题 token(色板、圆角、字重、品牌资源)。
  • layout:首页模块顺序、导航形态、卡片密度等布局变体。
  • 换皮换布局属纯展示,不触发引擎变更。

3.7 文案 copy

以文案键覆盖默认文案,支持多语言。子平台可改品牌话术、活动措辞、按钮文字,不改代码。

3.8 合规 compliance

region(具体国家代码,§2.2)覆盖:禁用币种/活动、强制 KYC 时机、投注/提现限额、免责声明、可见国家/地区。合规覆盖优先级最高且只收紧(见 §四)。

  • region=GLOBAL(无属地兜底):不绑单一国家,合规默认取平台最严基线(禁用高风险币种/活动、KYC 从严、限额取最低档),避免无属地站放开合规;推荐一站一国具体代码,GLOBAL 仅作过渡兜底。

3.9 后台可见模块 console.visibleModules(→ 15)

商户侧后台可见模块面板开关,合法枚举 = 运营后台二十一模块 id 全集(→ 15 §七):

overview · reports · users · kyc · promo · tasks · notices ·
dep-orders · channels · withdraw · ledger · records · games ·
level · rebate · affiliate · risk · audit · tenant · rbac
  • 两套显隐机制的关系:visibleModules租户级功能面板开关(该站是否上架某模块),RBAC 的 view 权限是账号级(该角色能否看某模块,→ 15 §2.2);最终可见 = 两者交集——面板未上架或角色无 view 任一不满足即不可见。
  • 枚举命名以二十一模块 id 为唯一口径(如 reports 而非 report),避免与 RBAC 模块 id 对不齐。

3.10 包网费 / 结算计费 billing(平台向商户收费模型)

平台方「靠什么向商户收费、按什么算、账期、逾期联动」的计费根基,租户级配置、建站时设定、仅平台控制台可调(商户控制台只读本站账单,→ 15 计费结算节);出账与账单状态机详见 §四.4 与 §十 billing_statements 表。

  • 计费方式 billing.mode(华人包网行业标准):包网佣金 = 平台盈利(GGR / 玩家输赢) × 包网费率,按盈利抽成——GGR 是优惠/返水/俸禄/任务这些玩家返利之上的毛盈利口径,故按 GGR 算天然「不掺优惠/返水/俸禄/任务」(简单透明、可对账);与 11 推广佣金(商户付代理)是两套完全不同的东西。
    • revShare —— 盈利分成(GGR × 率,行业标准 · 默认):包网佣金 = 当期 GGR × 费率,支持阶梯 tiers(按 GGR 档不同率),可叠加保底 minGuarantee;
    • fixed —— 固定周期费(纯月费);
    • hybrid —— 保底 + 盈利分成:应付 = max(minGuarantee, GGR × 费率)
  • 结算周期:自然月(租户时区)为周期;settlementDay 出账(默认次月 1 日生成账单),dueDays 内付清(默认 7 天);逾期 overdueGraceDays 后提醒,累计逾期 ≥ suspendOnOverdueDays(默认 15 天)触发租户 SUSPENDED(即 §2.3「欠费」暂停的数据支撑)。
  • 多币种结算(B2B 平台对商户):平台跨站多币种 → 账单按各站本位币出「分账单」(该站 GGR × 率);平台合并应付额用 settlementCurrency(平台指定,如 USDT)+ 当期参考汇率快照给合计。此汇率为 B2B 平台对商户结算参考口径,仅用于商户账单合并展示,不回流任何用户业务(区别于用户资金无汇率铁律,→ 02 §三)。
  • 账单状态机:DRAFT(系统生成)→ ISSUED(出账下发商户)→ PAID(已付) | OVERDUE(逾期);OVERDUE 超阈值 → 触发租户状态工单 / 自动 SUSPENDED(§2.3)。

四、继承与覆盖(合并规则)

4.1 合并链

有效配置 = 深合并以下各层,后者覆盖前者:

1. 平台默认模板 DefaultTemplate   (全平台基线,保证任何键都有兜底值)
2. 区域/行业预设 Preset(可选)    (如「东南亚法币预设」「全球加密预设」)
3. 租户覆盖 TenantOverride         (该子平台的差异项)
4. 站点覆盖 SiteOverride(可选)    (渠道/域名级微调)
5. 灰度 / A-B 覆盖(可选)          (面向部分用户或时段)
6. 合规强制层 ComplianceEnforced   (最高优先级,只收紧不放开)


           EffectiveConfig(引擎与前端实际读到的)

4.2 合并语义

  • 对象:深合并(逐键覆盖,缺失键沿用上层)。
  • 数组:一律整体替换,不做逐项合并——等级表、活动列表、通道列表要改就整组给出。
  • 合规层为收紧型:只能比下层更严(关币种、加严 KYC、降限额),不能放开被合规禁止的项。

4.3 Schema 校验

  • 每个命名空间一份 JSON Schema,由认领系统维护(02 管 wallet.*、09 管 promo.*…)。
  • 发布前强制校验:类型/枚举/范围不合法 → 拒绝发布;跨键一致性(如 wallet.baseCurrency ∈ 平台币种目录games.venues[].route=cnyMappedbaseCurrency=USDT 站可用——该项为平台超管级申报口径开关,商户不可见不可改,→ 12 §四)由认领系统提供校验函数。
  • 本位币变更闸:wallet.baseCurrency 相对当前生效版本发生变化的发布,一律拦为平台审批红区(→ 15 §2.2),商户侧不得直发;一期锁定为不可变

这套规则让「开一个新东南亚站」= 选东南亚预设 + 覆盖品牌/币种/活动几十个键,其余全部继承。

4.4 billing 命名空间(计费结算配置,平台控制台设定 · 商户只读)

jsonc
"billing": {
  "mode": "revShare",               // revShare(默认) | fixed | hybrid(见 §三.10)
  "revShare": {                     // mode=revShare/hybrid 时生效;GGR 盈利分成率(%),支持阶梯
    "tiers": [                      // 按当期 GGR 档取费率;缺 tiers 时用单一 ratePct
      { "gteGGR": "0",       "ratePct": 30 },
      { "gteGGR": "500000",  "ratePct": 25 },
      { "gteGGR": "2000000", "ratePct": 20 }
    ]
  },
  "minGuarantee": "20000",          // mode=hybrid/fixed 保底(本位币);hybrid: max(minGuarantee, GGR×率)
  "fixedFee": "20000",              // mode=fixed 固定周期费(本位币)
  "billingCycle": "monthly",        // 结算周期(V1 自然月)
  "settlementDay": 1,               // 出账日(默认次月 1 日生成账单)
  "dueDays": 7,                     // 账单到期天数(出账后 N 天内付清)
  "overdueGraceDays": 3,            // 逾期宽限:超期 N 天后开始提醒
  "suspendOnOverdueDays": 15,       // 累计逾期 ≥ N 天 → 触发租户 SUSPENDED(§2.3)
  "settlementCurrency": "USDT"      // 平台合并应付额的结算币种(跨站分账单合计用参考汇率快照)
}
  • 金额本位币:minGuarantee/fixedFee 及每站分账单的 ggr/amount_due 均以该站本位币计;仅平台合并合计行用 settlementCurrency + 当期参考汇率快照(§三.10,B2B 结算参考口径,不回流用户业务)。
  • 校验:mode ∈ 枚举;revShare.tiersgteGGR 升序、ratePct ∈ [0,100];settlementCurrency ∈ 平台币种目录;dueDays / overdueGraceDays / suspendOnOverdueDays 为正整数。
  • 权限:billing.* 仅平台控制台可写(建站设定/后续调整),商户控制台只读本站账单(→ 15 计费结算节);变更写审计。

五、配置生效链路(从后台到界面)

商户/平台控制台改配置 ─► schema+合规校验 ─► 生成新配置版本(DRAFT)─► 沙盒预览 ─► 发布(全量/灰度)

   用户请求 ─► ⓪ Host→tenant 解析 ─► ① GET /bootstrap(纯租户配置,可 CDN 缓存)◄──┘
                                      ② GET /me(登录后用户快照)


              展示层据配置渲染(开关定模块、theme/layout 定长相、copy 定文案)
              引擎据配置执行(币种、门槛、费率、活动参数)

5.1 GET /bootstrap —— 纯租户配置(全用户相同,可缓存)

jsonc
{
  "meta":     { "tenant": "global", "brand": "BetCorgi", "baseCurrency": "CNY", "region": "CN",
                "timezone": "UTC+8", "locale": "zh", "configVersion": "2026.07.15-01" },
              // tenant/brand=品牌标识(非区域);region=具体国家代码(此 CNY 站 = CN 市场,GLOBAL 仅无属地站兜底)
  "features": { "vipSalary": true, "rakeback": true, "affiliate": true,
                "staking": false, "kycRequired": "onWithdraw", "promoSpecMode": false },
  "theme":    { "preset": "dark-purple", "overrides": { "brandPrimary": "#8b5cff" } },
  "layout":   { "home": ["banner", "jackpot", "lobby"], "nav": "bottom-5" },
                // home.sections ⊆ 布局模块注册表(banner/jackpot/lobby/promoRail/vendors,→ design/layouts);
                // hot=lobby 首个 tab、vendors=分类内侧栏,不作顶层 section
  "copy":     { "home.banner.cta": "立即领取" /* …当前语言文案键值 */ },
  "wallet":   { "baseCurrency": "CNY",          // 本位币 = 站型(CNY 站);站内单币种、单账户
                "symbol": "¥", "position": "prefix", "decimals": 2 },
  /* baseCurrency 是站的唯一记账与展示币种,建站锁定、变更需平台审批(→ 15);等级/俸禄/统计一律本位币单口径(→ 06/07/17) */
  "level":    { "maxLevel": 50 /* 等级表公开部分,见 06 */ },
  "promo":    { "list": [ { "id": "first-deposit", "sort": 1 /* 展示所需公开字段,见 09 */ } ] },
  "deposit":  { "channels": ["bank", "unionpay", "alipay", "wechat", "vippay", "gopay", "usdt"] }
                /* 通道币种可 ≠ 本位币:CNY 站可收 USDT/ETH/BTC,下单锁价折入本位币(→ 03) */
}

只含公开配置,不含后台策略、风控阈值等敏感项。样例站型:global = CNY 站(本例)、sea01 = USDT 站、gold88 = CNY 站(SETUP)。

5.2 GET /me —— 用户快照(登录后)

jsonc
{
  "user":    { "id": "u1001", "nick": "Andy", "kyc": "NONE" },
  "wallet":  { "currency": "CNY", "available": "8720.20", "bonus": "168.68" },  // 单币种站:单钱包,币种恒 = baseCurrency
  "vip":     { "level": 18, "progress": 0.52 },
  "badges":  { "promo": 2, "task": 1, "salary": 1, "rakeback": 0 },  // 各奖励入口红点(= 可领状态计数,→ 07/08/09/10)
  "unread":  { "notice": 3 }   // 顶栏消息铃铛未读数(消息数,非可领红点;→ 16;与 badges 语义分离)
}

调试参数:?wallet=cny|usdt(站型参数,选本位币)、?state(登录态)、?spec(多态展示)仅作本地调试覆盖;生产上站型/开关来自 EffectiveConfig(§2.4)。


六、版本、灰度与回滚

  • 版本化:每次发布生成不可变配置版本 configVersion,tenant.configRef 指向当前版本。
  • 灰度:新版本可先面向 X% 用户 / 白名单 / 时段生效。确定性要求:同一用户必须稳定命中同一桶——bucket = hash(tenantId + userId + releaseId) % 100,不随刷新漂移。
  • 回滚:configRef 指回上一个稳定版本即时回滚,不需发版。
  • 审计:谁、何时、改了哪个租户的哪些键(diff),全部留痕(→ 15)。

七、★ 本系统自身的可配置项(元配置)

配置说明
默认模板 DefaultTemplate平台级基线,决定所有键的兜底值
预设库 Presets可复用的区域/行业配置包(东南亚法币、全球加密…)
可覆盖键白名单限定商户控制台能改哪些键(与 15 的 RBAC 联动:角色 × 键白名单)
灰度策略灰度维度(比例/白名单/时段)与放量步长

八、运营后台能力(→ 15 汇总)

能力
平台控制台建站向导(选预设→改差异→SETUP→验收→ACTIVE);默认模板与预设库维护;租户状态流转;任意租户配置的发布/灰度/回滚;跨租户审计检索;计费结算:设定各租户 billing 计费方式/账单出账·催缴·标记已付·逾期→SUSPENDED 联动(→ §三.10 / 15 计费结算节;账单表 billing_statements17 §八)
商户控制台可覆盖键白名单内编辑本站配置;沙盒预览(预览 token 渲染未发布版本);提交发布(按合约:直发或平台审批);查看本站版本历史与 diff;只读本站账单(billingbilling_statements 商户不可改)

九、展示契约

前端需要来源用途
租户身份⓪ Host 解析(调试 ?tenant=)决定加载哪套配置
features.* / wallet.baseCurrencybootstrap模块显隐、站型(本位币符号/精度)
theme / layoutbootstrap → design 系统换皮换布局
copy(当前语言)bootstrap全站文案
各系统公开配置bootstrap本位币符号、等级表、活动列表等渲染所需
余额/VIP/红点等用户态/me登录后个性化渲染
奖励入口红点 badges.*(promo/task/salary/rakeback)/me各奖励入口可领计数(→ 07/08/09/10)
消息铃铛未读数 unread.notice/me顶栏铃铛未读徽(消息数,非可领红点;→ 16)

原型映射:app.js?wallet(站型参数,选本位币 cny|usdt)、?state?spec 分别对应 wallet.baseCurrency、登录态(/me 是否有值)、features.promoSpecMode。前端统一从一个 CONFIG(bootstrap 形状)+ ME(me 形状)对象读取,URL 参数仅作调试覆盖注入;站内单币种恒按 baseCurrency 渲染,禁止「数字不变只换符号」的重刷(applyCur 只格式化本位币,不做符号替换,→ 02 展示铁律)


十、数据库设计(全表含 tenant_id,除平台级表)

关键字段约束/索引
tenantstenant_id PK, code, name, brand, status, base_currency(本位币/站型,建站锁定、变更走平台审批), region, timezone, default_locale, config_ref, owner, created_atUK(code)
tenant_domainsdomain, tenant_id, is_primary, statusUK(domain);IDX(tenant_id)
tenant_config_versionsid PK, tenant_id, version, config JSON, base_template_ver, preset_refs JSON, status(DRAFT/PUBLISHED/ROLLED_BACK), created_by, published_atUK(tenant_id,version)
tenant_config_auditid PK, tenant_id, from_version, to_version, diff JSON, actor_id, reason, created_atIDX(tenant_id,created_at)
config_presets(平台级)preset_id PK, name, scope(region/industry), config JSON, version
gray_releasesid PK, tenant_id, target_version, strategy(percent/whitelist/schedule), param JSON, statusIDX(tenant_id,status)

十一、扩展点与开放问题

  • 环境维度:dev/staging/prod 的配置晋升流(同一版本逐环境推进),待基建选型后补。
  • 预设市场:预设库沉淀为「开站模板市场」,运营选模板即开站。
  • 同一用户多租户:默认独立、不互通(→ 00 §4.9);若商户集团要求互通会员体系,另立跨租户会员方案。

十二、验收要点

  • [ ] 同一份引擎部署,仅换域名(或 ?tenant=)可渲染出两个本位币不同的子平台(CNY 站 / USDT 站),站内全程单币种、单账户;
  • [ ] 缺失键回落默认模板,不出现 undefined/崩溃;
  • [ ] 变更 wallet.baseCurrency 的发布被拦为平台审批红区,商户侧不能直发;
  • [ ] 合规层禁用项在租户层无法打开(发布校验拒绝);
  • [ ] 灰度中同一用户多次刷新命中同一版本;
  • [ ] 回滚后 bootstrap 的 configVersion 立即回退,客户端下个会话生效;
  • [ ] 商户控制台改白名单外的键 → 保存被拒并留审计;
  • [ ] console.visibleModules 取值超出二十一模块 id 全集 → 发布校验拒绝;某模块最终可见 = visibleModules ∩ RBAC view(任一不满足即不可见);
  • [ ] billing 仅平台控制台可写、商户侧只读本站账单;billing.mode 非枚举或 revShare.tiers 非升序 → 发布校验拒绝;
  • [ ] region 取非国家代码(非 ISO 3166-1 且非 GLOBAL)→ 发布校验拒绝;GLOBAL 站合规默认落最严基线。