Daemon 手册
通道 B:从 GitHub 安装 sharpside-daemon(Release / 源码 / 前台试跑)
公开仓库:laoshalab/sharpside-daemon(Apache-2.0)。本文安装流程与该仓 README 对齐。
角色
sharpside-daemon 在用户本机运行:用平台颁发的 DAEMON_API_KEY 从 copier 拉取指令 → 本地风控 → 本地 EOA 签名 → 回传成交。平台永不持有该用户 Venue 私钥。
| 来源 | 说明 |
|---|---|
| 公开仓 | https://github.com/laoshalab/sharpside-daemon |
monorepo apps/daemon / opensource/sharpside-daemon | 与平台同仓开发;公开树同步到 GitHub |
选型见 双通道选型。凭证页:Daemon Key。
安装前准备
| 场景 | 要求 |
|---|---|
| 二进制安装(推荐) | Linux x86_64 或 aarch64、systemd、curl、root |
| 源码构建 | Rust 1.91+、网络(crates.io) |
| 平台侧 | Sharpside 账号;在 Daemon Key 颁发 API key;知道 COPIER_URL |
COPIER_URL:经平台 gateway 时须为 https://<你的网关主机>/api/copier(请求路径是 {COPIER_URL}/me/...)。本机直连可用 http://127.0.0.1:8083。不要只填 gateway 根域名。
选 A 还是 B?
| 情况 | 用 |
|---|---|
| GitHub 已有 Release(当前最新 v0.1.1) | 方式 A(推荐,x86_64) |
| 尚无 Release / A 下载失败 / 要改代码 / aarch64 | 方式 B |
| 先试拉单与 dry-run | 方式 C |
A 与 B 装完后布局相同(/usr/local/bin/sharpside-daemon、/etc/sharpside/daemon.env、unit sharpside-daemon)。双轨契约见仓库 docs/DAEMON_DUAL_TRACK_INSTALL.md。
方式 A 架构范围
v0.1.1 Release 目前提供 x86_64 musl 资产;aarch64 交叉构建尚未通过,ARM 机器请用方式 B。
端到端顺序:
- Web 颁发 Daemon Key,记下 用户 UUID 与 API key
- 本机安装并配置 daemon(先建议
DAEMON_DRY_RUN=1) - 创建跟随时通道选 Daemon,在 我的跟随 恢复
方式 A:Release 二进制 + systemd(推荐)
若 GitHub 尚无 Release,install.sh 会失败并提示改用方式 B——请直接跳转,不要空转重试。
# 可选:指定仓库(默认已是 laoshalab/sharpside-daemon)
export SHARPSIDE_DAEMON_REPO=laoshalab/sharpside-daemon
curl -fsSL https://raw.githubusercontent.com/laoshalab/sharpside-daemon/main/assets/install.sh | sudo bash
# 固定版本:curl -fsSL …/install.sh | sudo bash -s -- 0.1.1
脚本会:检测架构(x86_64 / aarch64 linux-musl)→ 下载 Release tarball(可选 SHA256)→ 安装到 /usr/local/bin/sharpside-daemon → 创建用户 sharpside 与 /var/lib/sharpside → 写入模板 /etc/sharpside/daemon.env(若不存在)→ systemctl enable --now。
然后填配置并重启:
sudo nano /etc/sharpside/daemon.env
sudo systemctl restart sharpside-daemon
sudo systemctl status sharpside-daemon
journalctl -u sharpside-daemon -f
方式 B:源码构建 + systemd
git clone https://github.com/laoshalab/sharpside-daemon.git
cd sharpside-daemon
./scripts/check-public-tree.sh # 不得出现 kms / sqlx / 平台 db
cargo build -p sharpside-daemon --release
sudo install -m 0755 target/release/sharpside-daemon /usr/local/bin/
sudo install -d /etc/sharpside /var/lib/sharpside /var/log/sharpside
sudo install -m 0644 assets/sharpside-daemon.service /etc/systemd/system/
sudo tee /etc/sharpside/daemon.env >/dev/null <<'EOF'
DAEMON_USER_ID=
DAEMON_API_KEY=
POLYMARKET_PRIVATE_KEY=
COPIER_URL=https://your-gateway-host/api/copier
DAEMON_DRY_RUN=1
DAEMON_HEADLESS=1
RUST_LOG=info
EOF
sudo chmod 0600 /etc/sharpside/daemon.env
sudo useradd --system --home /var/lib/sharpside --shell /usr/sbin/nologin sharpside 2>/dev/null || true
sudo chown -R sharpside:sharpside /var/lib/sharpside /var/log/sharpside
sudo systemctl daemon-reload
sudo systemctl enable --now sharpside-daemon
方式 C:本机前台试跑(TUI / 调试)
适合先验证拉单与 dry-run,不必上 systemd。
git clone https://github.com/laoshalab/sharpside-daemon.git
cd sharpside-daemon
cargo build -p sharpside-daemon
export DAEMON_USER_ID='你的用户 UUID'
export DAEMON_API_KEY='web 颁发的 key'
export COPIER_URL='https://your-gateway-host/api/copier' # 或 http://127.0.0.1:8083
export DAEMON_DRY_RUN=1
export RUST_LOG=info
# 真签单时:
# export DAEMON_DRY_RUN=0
# export POLYMARKET_CLOB_POST=1
# export POLYMARKET_PRIVATE_KEY='0x...'
./target/debug/sharpside-daemon
有 TTY 时进入 TUI;无 TTY 或 DAEMON_HEADLESS=1 时走日志模式。
TUI: p/r 暂停/恢复 · f 过滤 · l ledger · Enter 详情 · k 密钥提示 · ? 帮助 · q 退出
必填配置
优先级:默认 ← ~/.config/sharpside/daemon.toml ← dotenv ← 环境变量(最高)。systemd 主要改 /etc/sharpside/daemon.env。
| 变量 | 必填 | 说明 |
|---|---|---|
DAEMON_USER_ID | 是 | 平台用户 UUID |
DAEMON_API_KEY | 是 | Web「Daemon Key」明文 |
COPIER_URL | 是 | gateway:…/api/copier;直连:http://127.0.0.1:8083 |
POLYMARKET_PRIVATE_KEY | 真交易时 | 0x… EOA;或 keys.enc / keyring |
DAEMON_DRY_RUN | 建议先 1 | 1=合成成交;0=真实签名 |
POLYMARKET_CLOB_POST | 可选 | 1=真实 POST /order |
DAEMON_POLL_SECS | 否 | 短轮询,默认 10 |
DAEMON_LONG_POLL | 否 | 1 长轮询;失败自动降级 |
DAEMON_HEARTBEAT_SECS | 否 | 默认 30;在线状态只看 heartbeat |
DAEMON_METRICS / DAEMON_METRICS_BIND | 否 | 默认 127.0.0.1:9090/metrics |
签名私钥来源:SHARPSIDE_KEYRING=1 → ~/.config/sharpside/keys.enc → POLYMARKET_PRIVATE_KEY。
热加载(不重载私钥文件):
sudo kill -USR1 "$(pidof sharpside-daemon)"
验收
systemctl is-active sharpside-daemon
curl -s http://127.0.0.1:9090/metrics | head
journalctl -u sharpside-daemon -n 100 --no-pager
期望:心跳 / 轮询成功;dry_run=1 有合成成交回传;错 key 时停轮询且日志含 401/403。
升级 / 卸载
# 升级:重跑 install.sh 或替换二进制后
sudo systemctl restart sharpside-daemon
sudo systemctl disable --now sharpside-daemon
sudo rm -f /usr/local/bin/sharpside-daemon /etc/systemd/system/sharpside-daemon.service
# 可选:sudo rm -rf /etc/sharpside /var/lib/sharpside
故障排查
| 现象 | 处理 |
|---|---|
| 401 / 403 | Web 重新颁发 key,更新 env 后 SIGUSR1 或 restart |
| Release 下载失败 | 用方式 B;或设 SHARPSIDE_DAEMON_REPO=laoshalab/sharpside-daemon |
| 长轮询失败 | 自动降级短轮询;或 DAEMON_LONG_POLL=0 |
| 一直 dry-run | DAEMON_DRY_RUN=0 并配置私钥 |
| 协议不兼容 | 升级公开仓 daemon,或等待平台协议升级 |
完整文档
公开仓 README 为安装权威入口。平台仓库另有 docs/RUNBOOK_DAEMON.md、docs/DAEMON_PROTOCOL.md。