pool.zcd.lol · 非托管 · 无运营方私钥 · 全部状态链上可验证 · 仅 CLI 操作
合约地址:0x052a29446468cfc75299c5161e4047c232c904319c9b57cd39343a5a66a23892
下载:runtime 镜像(调用必带 --code) · ABI · zcd-escrow 助手(Python3,含 keccak 与 cell 验证)
市场主页:/market(含浏览器内验证器)
| 机制 | 说明 |
|---|---|
| 哈希锁 | 卖方生成 32 字节随机秘密 s,只把 sha256(s) 写进合约;知道 s 才能取款 |
| 超时退款 | 退款高度到达后,任何人可触发退款,资金退回卖方(锁定期 24–48 小时,最长约 30 天) |
| 先验证后付款 | 买方在付外部资产之前,可逐 cell 验证:金额、收款人、哈希、窗口——锁不住假,但看得见真 |
| 限额(金丝雀) | 单笔 20 ZCD · 每卖方并发 60 ZCD · 全局 200 ZCD(守卫按证书前状态检查,极限可过冲一笔:全局 ≤220 / 每卖方 ≤80)。外部审计完成前不上调 |
block.number ≥ refundHeight 的 epoch 边界(比名义高度最多晚一个整 epoch);本站 cron 会在边界后立刻触发退款,买方死线就是 refundHeight 本身——别拖到最后一刻才取款。窗口过后 claim 与退款并存,按证书折叠顺序裁决,守卫保证绝无双重支付;取款证书的 calldata 里带秘密本身,属哈希锁的正常公开。zcd CLI 签名、通过你配置的 RPC 节点提交;若使用本站 RPC,提交通道依赖运营方(仅传输层——资金与私钥不经过任何人)。S=$(openssl rand -hex 32) H=$(printf %s "$S" | xxd -r -p | sha256sum | cut -d' ' -f1) SALT=$(openssl rand -hex 32)秘密
S 只发给买方在收到外部付款之后;在此之前只给 H。# 买方 name(买方自己跑,把输出发给卖方): zcd-nome <买方32字节地址,不带0x> # 卖方锁定(数额单位 drops,1 ZCD = 100000000): E=$(curl -s https://pool.zcd.lol/rpc/status | python3 -c 'import sys,json;h=json.load(sys.stdin)["height"];print(h//2880*2880)') # 退款高度 = $E + 2881 以上(24-48h);推荐 $E + 5761(48-72h) zcd wallet call --accept-poison-risk -headroom 20000 \ --key 卖方.key --rpc http://127.0.0.1:9424 --rpc-token-file token \ --to 0x052a29446468cfc75299c5161e4047c232c904319c9b57cd39343a5a66a23892 \ --data open.calldata.hex --code HashlockEscrow.runtime.hex \ --value 100000000calldata 由
zcd-escrow.py 生成(prepare + open),或按 ABI 手工编码:open(bytes32 salt, address claimant, bytes32 hashlock, uint64 refundHeight),selector 02c1d749。然后把共享单(zcd-escrow share 输出,不含秘密)发给买方。python3 zcd-escrow.py verify deal-shared.json # 七项全 OK 才付外部资产: # id 重推导 / claimant cell / refund_height / opener / hashlock / 金额 cell==共享金额 / 合约余额≥金额只认链上 cell,不认聊天截图。(不用助手时:上面存储布局表给出全部 slot 公式,id 与 slot 推导需要 keccak256——助手内置纯 python 实现,直接复用最省事。)
S 交给买方;买方随即链上取款(任何持 S 者皆可提交,资金总是进合约里登记的 claimant)。卖方交出前应自校验 sha256(S)==H:
# calldata 由 zcd-escrow.py claim 生成,或手工:selector 17e5c115 + pad32(id)+pad32(金额)+pad32(S) # 取款(买方提交): zcd wallet call --accept-poison-risk -headroom 20000 \ --key 买方.key --rpc ... --to 0x052a...23892 \ --data claim.calldata.hex --code HashlockEscrow.runtime.hex # 退款(超时后任何人可触发,selector 695eda19;资金回卖方): zcd wallet call --accept-poison-risk -headroom 20000 --key 任何.key ...
prepare --amount=DROPS --claimant-addr=0x02.. # 生成秘密/salt/共享单(服务端/卖方) open <id> # 提交锁定 share <id> # 打印无秘密共享单(发买方) verify deal-shared.json # 买方链上复核(六项) claim <id> --by=bridge|anchor # 取款(按角色钱包) refund <id> # 超时退款 info <id> / list # 查看 cell / 列表
slot 0 _locked 全局锁定额(delta cell)
slot 1 _terms id → {claimant,refundHeight | opener}; key = keccak256(pad32(id).pad32(1)) (+1 为 opener cell)
slot 2 _amount id → 金额; key = keccak256(pad32(id).pad32(2))
slot 3 _hashlock id → sha256(s); key = keccak256(pad32(id).pad32(3))
slot 4 _outstanding 每卖方并发额; key = keccak256(pad32(opener20).pad32(4))
读取: GET https://pool.zcd.lol/rpc/storage?addr=<合约>&key=0x<64位slot>(公共只读,另有 /rpc/status /rpc/balance /rpc/code)
# name = blake3("zcd/machinename/v1" + 32字节地址) 的低 20 字节
# python3 -m pip install blake3 之后:
python3 -c "import blake3,sys;print(blake3.blake3(b'zcd/machinename/v1'+bytes.fromhex(sys.argv[1])).digest()[-20:].hex())" 你的32字节地址(不带0x)
已对照链上 cell 验证;0x01/0x02/0x05 前缀地址族的 name 即其低 20 字节。
curl -s "https://pool.zcd.lol/rpc/code?addr=0x052a2944…23892" | jq .code_hash
# 本地(对下载的 runtime.hex 先去换行、按 hex 解码为字节):
python3 -c "import blake3;print('0x'+blake3.blake3(b'zcd/code/v1'+bytes.fromhex(open('HashlockEscrow.runtime.hex').read().strip())).hexdigest())"
# 两者相等 = 链上运行的正是本页发布的字节码(实测 0xb870a5b4da92f6d1988e72077f0e7b7b32eab800c2e3fa09cb3815e6218dffe2)
| 标记 | 含义 |
|---|---|
claimant / open / hashlock | open 参数非法 / 该 id 已有单(写一次锁) / 哈希锁为零或为 sha256(0…0) |
cap / window / far | 金额超单笔上限 / 窗口太短(须越过下一边界) / 窗口超 30 epoch |
id / secret | deal 不存在 / 预图像哈希不匹配 |
early | 退款未到高度(epoch 边界未过) |
pay | 收款方拒收(未绑定 name 或合约拒付)——见上方硬边界③ |
| (整证书 skip + skip fee) | 守卫在 fold 失败:超额取款/退款,或并发开单撞上限 |
| 工件 | 校验 (sha256) |
|---|---|
| HashlockEscrow.sol | fd3de779a81aa8c631525204c095acc136fb524c23835cbbc6bcf60f3be43929 |
| runtime 镜像(hex) | 256f996191caaee758011586ccbc2017156349166d60ae4e47b523d5fee06744 |
| ZycordDelta.sol(官方库接口) | 取自 zycord-node v0.7.1 源码树 contracts/ |
编译溯源: solc 0.8.30 (commit.73712a01, static linux, 二进制 sha256 f3e987dc6ecebd4bd350c48edcbc320b46cf9e3109bd3fc3d88f1acaf4c428f7 — 官方仓库 build/solc/SOLC 钉版), flags --optimize --optimize-runs=200 --metadata-hash=none(--bin 出创建镜像, --bin-runtime 出运行镜像)。审计范围建议:资金守恒(三组 delta cell 不变式)、写一次锁、epoch 窗口语义、sha256 预编译依赖、不可支付 claimant 的链下核对项。欢迎独立审计报告:Discord #pools 或本站页面 issue 渠道。
open 高度 93719(1.0 ZCD,六项 cell 验证)→ 四项负测试(错秘密/假 id/早退款/重复 open 全部按设计 revert)→ claim 高度 93724(bridge 到账分毫不差,合约余额与全局锁定归零);0.1 ZCD 超时退款测试挂起中。外部审计前维持金丝雀限额。
运营方披露:本站运营方为矿池运营者,持续挖出全网约 16–20% 的区块;本合约无任何运营方密钥可动用资金。本页不构成报价或投资建议。