Catalog npm
Back to packageRELEASE DETAILS

0.2.1

npm

@0xainetoem/white-label

White-label SDK for 0xAI ecosystem — brand injection, CLI deployment, SDK integrations

0xaibrandingweb3white-label
Published25 Jul 2026
Direct dependencies7
Transitive dependenciesNot calculated

README

Current package documentation

@0xainetoem/white-label

白标品牌注入 SDK + CLI 部署工具 —— 8 个 0xAI 生态产品的统一白标解决方案。

npm install @0xainetoem/white-label
npx wl list

📖 详细使用手册:DOCS.md — 架构总览、CI/CD 集成、Nginx 配置、故障排查、产品白标分步指南


解决的问题

你的客户想要自己的品牌,但部署 8 个独立产品意味着 8 套品牌配置、Nginx 配置、域名、合约部署——每次重复劳动。

white-label 做什么:

场景传统做法用 white-label
客户换品牌修改 n 个文件、搜索替换改 branding.json 或 wl setup
部署到客户服务器SSH 手动复制、手动配 Nginxwl deploy <product>
部署合约到客户链forge 命令记不住参数wl deploy-contracts <product>
给 SDK 注入品牌每个产品各自实现SDK wrapper 自动注入
公链换品牌Geth 源码改 6 个文件make build BRANDING_FILE=branding.json

快速开始

1. 前端 React 项目接入(3 行)

// 入口文件:main.tsx
import { defineBrand, BrandProvider } from '@0xainetoem/white-label/react';

// 自动读取 src/branding.json
const brand = defineBrand();

createRoot(document.getElementById('root')!).render(
  <BrandProvider brand={brand}>
    <App />
  </BrandProvider>
);

2. 组件内使用品牌

import { useBrand, BrandLogo } from '@0xainetoem/white-label/react';

function Header() {
  const { brand } = useBrand(); // 自动注入的 BrandConfig
  return (
    <header style={{ backgroundColor: brand.colors.primary }}>
      <BrandLogo variant="dark" className="h-8" />
      <h1>{brand.name}</h1>
    </header>
  );
}

3. 非 React 环境(Node.js / 后端)

import { defineBrand, getBrand } from '@0xainetoem/white-label';

defineBrand({ brand: { name: 'MyChain', colors: { primary: '#ff6600' } } });
const brand = getBrand();
console.log(brand.name); // "MyChain"

CLI 命令

wl setup — 一键全流程(推荐)

# 进入产品目录后在运行
cd /home/ubuntu/bitbyte-v4

# 交互式生成品牌配置 + 部署合约 + 构建上传 + Nginx SSL 配置
wl setup bitbyte \
  --name "ACME DEX" \
  --color "#ff6600" \
  --server root@1.2.3.4 \
  --domain dex.acme.com \
  --chain polygon --rpc https://polygon-rpc.com --chain-id 137 \
  --key 0x_deployer_private_key

参数说明:

参数必需说明
project是bitbyte zenonft cryptchat ceres predx bridge oxachain
--name是客户品牌展示名
--color是主品牌色(十六进制如 #ff6600)
--server是SSH 目标服务器(root@1.2.3.4)
--domain是客户域名
--chain否链名(默认 oxachain)
--rpc否RPC URL(默认 OxaChain L1)
--chain-id否Chain ID(默认 19505)
--key否合约部署私钥(不提供则跳过合约部署)
--short-name否简称(默认取 name 前 4 位)
--logo-dark否深色 Logo URL
--mode仅 Ceresfull(完整白标)/ light(仅 DID 合约)

Ceres 特殊参数 --mode:

# 完整白标 — 部署全部合约 + 构建前端 + relay
wl setup ceres --name "Client" --mode full --server root@1.2.3.4

# 轻量白标 — 仅部署 DID + Registry 合约,复用 Ceres 品牌
wl setup ceres --name "DID Client" --mode light --rpc <url> --key <pk>

wl brand — 交互式生成 branding.json

cd /home/ubuntu/zenonft
wl brand
# → 交互式输入:品牌名、简称、主色、Logo URL、域名、邮箱
# → 生成 ./branding.json

wl deploy — 构建 + 上传

# 进入产品目录后在执行
wl deploy         # 自动检测项目

# 或指定产品
wl deploy bitbyte --server root@1.2.3.4 --domain dex.acme.com

# 构建流程(因产品而异):
#   bitbyte    → 4 个前端 (Max/Flash/Admin/Landing) → rsync
#   oxachain   → make geth + make docker → ./deploy-l1.sh
#   cryptchat  → client + server → rsync
#   predx      → frontend-wagmi → rsync
#   bridge     → frontend-bridge → rsync
#   zenonft    → frontend → rsync
#   ceres      → frontend-v2 → rsync

wl deploy-contracts — 部署智能合约

# cryptchat 无合约(共享基础设施),其他 7 个项目都需要
wl deploy-contracts zenonft --rpc https://rpc.chain.com --key 0x_private_key --verify

# Ceres 特殊模式
wl deploy-contracts ceres --rpc <url> --key <pk>          # light(默认)
wl deploy-contracts ceres --rpc <url> --key <pk> --full   # 完整部署

# oxachain 部署 L1 链
wl deploy-contracts oxachain

部署方式(因产品而异):

产品部署方式合约
oxachain./deploy-l1.shGeth genesis + signer + Docker
bitbyte./deploy-contracts.shFactory / Router
predxFoundry DeployPredX.s.solPredictionMarket
bridge./deploy-contracts.shBridge contracts
ceresFoundrylight: DID+Registry / full: 全部 5 合约
zenonft./deploy-contracts.shNFT Marketplace
cryptchat无需合约—

wl update — 更新部署

# 重新构建 + 重新上传(不覆盖 branding.json 和合约)
wl update bitbyte --server root@1.2.3.4

wl list — 查看可用产品和当前检测

wl list

# 输出:
#   可白标部署的产品:
#     bitbyte      — DEX (Flash + Max 双版本)
#     zenonft      — NFT 市场
#     ...
#
#   ✓ 当前项目: bitbyte
#     品牌: ACME
#     链: oxachain (Chain ID: 19505)

branding.json 完整格式

{
  "brand": {
    "name": "客户品牌名",
    "shortName": "ACME",
    "logo": {
      "dark": "https://cdn.客户.com/logo-dark.svg",
      "light": "https://cdn.客户.com/logo-light.svg",
      "favicon": "https://cdn.客户.com/favicon.ico"
    },
    "colors": {
      "primary": "#ff6600",
      "primaryHover": "#e55d00",
      "secondary": "#1a1a2e",
      "accent": "#00d4aa"
    },
    "domain": "客户.com",
    "contactEmail": "support@客户.com",
    "social": {
      "twitter": "https://x.com/客户",
      "discord": "https://discord.gg/客户",
      "telegram": "https://t.me/客户"
    }
  },
  "chain": {
    "network": "mainnet",
    "rpcUrl": "https://rpc.客户.com",
    "chainId": 8888,
    "explorerUrl": "https://explorer.客户.com",
    "nativeToken": "TICKER"
  },
  "features": {
    "modules": ["swap", "perpetual"],
    "enabledChains": ["ethereum", "bsc"]
  }
}

项目特有字段

OxaChain 额外字段:

{
  "consensus": {
    "type": "clique",
    "period": 30,
    "epoch": 30000,
    "blockRewardWei": "0",
    "signerCount": 7
  },
  "token": {
    "name": "MyChain Token",
    "symbol": "MCT",
    "decimals": 18,
    "initialAllocWei": "100000000000000000000000"
  },
  "deploy": {
    "imageName": "mychain/geth",
    "imageTag": "latest",
    "containerPrefix": "mychain",
    "networkName": "mychain",
    "binaryName": "mychain-geth",
    "buildTarget": "mychain"
  }
}

Ceres 额外字段:

{
  "mode": "full",
  "contracts": {
    "deployAll": true
  }
}

轻量模式:

{
  "mode": "light",
  "contracts": {
    "deployAll": false,
    "only": ["CeresDID", "CeresRegistry"]
  }
}

React API

BrandProvider

挂载后自动执行 3 个副作用:

副作用说明
CSS 变量注入--brand-primary --brand-primary-hover --brand-secondary --brand-accent 注入 :root
Favicon 替换自动设置 <link rel="icon">
Meta 标签替换<title> + OG:title + Twitter:title + description
import { BrandProvider } from '@0xainetoem/white-label/react';

<BrandProvider brand={brand}>
  <App />
</BrandProvider>

useBrand()

import { useBrand } from '@0xainetoem/white-label/react';

function Footer() {
  const { brand } = useBrand(); // BrandConfig
  return (
    <footer>
      <p>© {brand.name}</p>
      <p>联系: {brand.contactEmail}</p>
    </footer>
  );
}
import { BrandLogo } from '@0xainetoem/white-label/react';

// 深色背景用 light 变体
<BrandLogo variant="light" className="h-8" />
// 浅色背景用 dark(默认)
<BrandLogo variant="dark" />

非 React API

import { defineBrand, getBrand } from '@0xainetoem/white-label';
import { injectCSSVars, injectFavicon, injectMeta } from '@0xainetoem/white-label';

// 设置品牌(全局单例)
const brand = defineBrand({
  brand: { name: 'MyBrand', colors: { primary: '#ff6600' } }
});

// 读取品牌
const current = getBrand();

// 手动注入副作用(React 项目由 BrandProvider 自动处理)
injectCSSVars(current);   // CSS 变量 → :root
injectFavicon(current);   // Favicon → <link>
injectMeta(current);      // Meta → <head>

CSS 变量对照表

CSS 变量branding.json 字段默认值
--brand-primarybrand.colors.primary#3b82f6
--brand-primary-hoverbrand.colors.primaryHover#2563eb
--brand-secondarybrand.colors.secondary#1e293b
--brand-accentbrand.colors.accent#06b6d4

Tailwind 中使用:

/* tailwind.config.js 或 global.css */
@layer base {
  :root {
    --brand-primary: #3b82f6; /* 会被 BrandProvider 覆盖 */
  }
}
<div className="bg-[var(--brand-primary)] text-white">
  Branded Content
</div>

SDK 集成包装器

7 个产品 SDK 已集成品牌注入包装器:

导出路径函数注入 SDK方式
@0xainetoem/white-label/oxachaincreateOxaChainClient()oxachain-sdk原生 setBrand()
@0xainetoem/white-label/bitbytecreateBitByteSDK()@bitbytev4/sdk包装对象 getBrand()
@0xainetoem/white-label/predxcreatePredXClient()@0xpredx/sdk包装对象 getBrand()
@0xainetoem/white-label/cerescreateCeresConfig()@ceresv2/sdk配置对象(CeresProvider)
@0xainetoem/white-label/bridgecreateBridgeSDK()@0xaibridge/sdk包装对象 getBrand()
@0xainetoem/white-label/cryptchatcreateCryptChat()@cryptchat/sdk包装对象 getBrand()
@0xainetoem/white-label/zenonftcreateZenoNFT()@zenonft/sdk包装对象 getBrand()

示例:

import { defineBrand } from '@0xainetoem/white-label';
import { createOxaChainClient } from '@0xainetoem/white-label/oxachain';

defineBrand({ brand: { name: 'MyChain', colors: { primary: '#ff6600' } } });
const client = createOxaChainClient({ rpcUrl: 'http://localhost:18545' });
console.log(client.getBrand().name); // "MyChain"

注意:这些 SDK 是可选依赖(peerDependenciesMeta.optional=true),需项目中额外 npm install 对应 SDK 包。如果 SDK 尚未发布到 npm(如 @0xaibridge/sdk),SDK 包装器会优雅降级并提示安装。


OxaChain 公链白标(高级用法)

OxaChain 是特殊的白标产品——底层的 Geth 节点也需要品牌化改造。

# 生成品牌链配置
wl setup oxachain \
  --name "Acme Chain" --color "#ff6600" \
  --server root@1.2.3.4 --domain acme.io

# 或手动使用 Makefile
make build BRANDING_FILE=branding.json
# → 自动执行 6 项 Geth 源码改造:
#   1. 原生代币名/符号
#   2. Chain ID
#   3. 出块时间 (Clique)
#   4. 区块奖励(0 = 关闭)
#   5. 初始代币分配
#   6. 启动节点 signer 密钥

# 部署 L1 链
./deploy-l1.sh
# → 8 步自动化:signer 密钥 → genesis → Docker build → 启动 → 健康检查

自动生成的 Go 源码文件:

build/geth-patch/
├── branding.mk               # Makefile 参数
├── apply-patch.sh             # 应用到 geth-src
├── apply-block-reward.py      # 区块奖励注入
├── oxachain-l1.patch
└── src/
    ├── params/{brand}chain_config.go
    ├── core/{brand}chain_genesis.go
    └── cmd/utils/{brand}chain_flags.go

Ceres 双模式白标

模式场景部署内容
full客户全新品牌全部 5 合约(DID+Registry+InviteCore+FeeContract+GoldVault)+ 前端 + Relayer
light只需自有 DID仅 CeresDID + CeresRegistry 合约(前端和品牌复用 Ceres)
# 完整白标
wl setup ceres --name "Client" --mode full \
  --server root@1.2.3.4 --domain client.com \
  --rpc https://rpc --key 0x_key

# 轻量白标
wl setup ceres --name "DID Client" --mode light \
  --rpc https://rpc --key 0x_key

目录结构

white-label/
├── bin/wl.js                           # CLI 入口
├── src/
│   ├── index.ts                        # 主入口(export 核心 API)
│   ├── types.ts                        # BrandConfig 类型 + defineBrand/getBrand
│   ├── react/index.tsx                 # BrandProvider / useBrand / BrandLogo
│   ├── cli/
│   │   ├── index.ts                    # CLI 全部实现(~540 行)
│   │   └── types.ts                    # CLI 类型
│   ├── integrations/
│   │   ├── bitbyte.ts                  # @bitbytev4/sdk 包装器
│   │   ├── predx.ts                    # @0xpredx/sdk 包装器
│   │   ├── ceres.ts                    # @ceresv2/sdk 包装器
│   │   ├── bridge.ts                   # @0xaibridge/sdk 包装器
│   │   ├── oxachain.ts                 # oxachain-sdk 包装器
│   │   ├── cryptchat.ts                # @cryptchat/sdk 包装器
│   │   └── zenonft.ts                  # @zenonft/sdk 包装器
│   ├── utils/
│   │   ├── css-vars.ts                 # CSS 变量注入
│   │   ├── favicon.ts                  # Favicon 替换
│   │   └── meta.ts                     # Meta 标签替换
│   └── templates/
│       └── branding.json               # branding.json 模板
├── package.json                        # @0xainetoem/white-label
├── tsconfig.json                       # TypeScript 配置
└── README.md

类型

import type { BrandConfig } from '@0xainetoem/white-label';

interface BrandConfig {
  brand: {
    name: string;
    shortName: string;
    logo: {
      dark: string;    // 深色背景 Logo URL
      light: string;   // 浅色背景 Logo URL
      favicon: string; // Favicon URL
    };
    colors: {
      primary: string;       // 主品牌色
      primaryHover: string;  // Hover 状态色
      secondary: string;     // 辅助色
      accent: string;        // 强调色
    };
    domain: string;
    contactEmail: string;
    social: {
      twitter: string;
      discord: string;
      telegram: string;
    };
  };
  chain: {
    network: 'mainnet' | 'testnet';
    rpcUrl: string;
    chainId: number;
    explorerUrl: string;
    nativeToken: string;
  };
  features: {
    modules: string[];
    enabledChains: string[];
  };
}

发布到 npm

当前版本:v1.0.2(已发布)

npm run build                    # TypeScript 编译
npm publish                     # 发布 @0xainetoem/white-label

注意:publishConfig.access = "public"(scoped 包需要)。包体积约 27.5 kB(压缩)/ 108.5 kB(解压),共 63 个文件。


许可证

MIT — 0xAI Ecosystem

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 7

Native requirements
7 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
typescript
Environment
{
  "local_name": "typescript",
  "alias": false,
  "peer_metadata": null
}
^5.0.0development
@types/node
Environment
{
  "local_name": "@types/node",
  "alias": false,
  "peer_metadata": null
}
^20.0.0development
@types/react
Environment
{
  "local_name": "@types/react",
  "alias": false,
  "peer_metadata": null
}
^18.0.0development
@zenonft/sdk
Environment
{
  "local_name": "@zenonft/sdk",
  "alias": false,
  "peer_metadata": null
}
^1.0.1development
@cryptchat/sdk
Environment
{
  "local_name": "@cryptchat/sdk",
  "alias": false,
  "peer_metadata": null
}
^0.1.1development
react
Environment
{
  "local_name": "react",
  "alias": false,
  "peer_metadata": null
}
^18.0.0 || ^19.0.0peer
react-dom
Environment
{
  "local_name": "react-dom",
  "alias": false,
  "peer_metadata": null
}
^18.0.0 || ^19.0.0peer

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "ee48cf09fff886e48f3d63b2173af39e86c754e5",
  "tarball": "https://registry.npmjs.org/@0xainetoem/white-label/-/white-label-0.2.1.tgz",
  "fileCount": 43,
  "integrity": "sha512-xL2rbxXEhCBMzIn/zHzcYCu7072daSmLAG+earqFUxFCbRIOOPmbpGMGrTYlCgqWrI93DTdat9n/FhHRJfrI4g==",
  "signatures": [
    {
      "sig": "MEUCIBPHWL/nfkxxAsYdFJOZTLNI9BQwJgfFvAJQ/kVZglfXAiEAkbulDXDGuwgCtKXbMeg8q0n0Edq3xoXqbbjgVpooFs0=",
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
    }
  ],
  "unpackedSize": 43758
}

Repository

ACCESSIBLE
sftgroup/white-label

Shared repository data · GitHub

License detected in repository
Not collected
Last push
13 Aug 2026
Archived
No
Contributor identities
— · partial collection

Public sponsor counts have not been collected. These signals belong to the repository owner.

Downloads & popularity

0count
Gauge · observed snapshots23 Oct 2026
10.50
2026-10-23: 0 · observed 2026-10-23T15:04:00.1977282Z
23 Oct23 Oct

github · 1 observations shown. Missing days are unknown.

View observed values
Date / source periodValueObserved at
2026-10-2302026-10-23T15:04:00.1977282Z

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 22:40 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:ce78eecfdb5be528c8a94c88ded435534bba7a3fbce64ab7dd6f000ff76d889a

Other collected versions

1.0.212 Aug1.0.112 Aug1.0.031 Jul0.4.126 Jul0.4.025 Jul0.3.025 JulView all collected versions →