Proof of Reserve · Merkle Tree 公开审计

储备金证明

每月由管理员触发一次完整快照:所有用户余额经 SHA-256 构成 Merkle 树,根哈希公开发布。 各币种储备覆盖率 = 平台冷热钱包余额 / 用户总持仓,任何用户登录后可下载自己的 Merkle proof,在本地用 sha256 命令行独立复算根哈希。

最新 Merkle Root 尚未生成 等待管理员触发首次快照
覆盖用户数 -- 最新快照
总资产估值 -- USDT
上次审计 -- 下次:每月 1 日

第三方审计机构

Armanino & Mazars (占位)
由独立审计机构按月对 Merkle Root 与链上余额签发审计报告。本演示环境使用占位 logo。
ChainCheck (占位)
实时核对各币种冷热钱包链上余额是否 ≥ 用户总持仓。

各币种储备覆盖率

覆盖率 = 平台储备 / 用户总持仓 (需 ≥ 100%)

尚无快照数据

历史快照

点击「下载 JSON」获取完整快照(含全部叶子哈希),可离线独立复算 Merkle Root

快照 ID 时间 Merkle Root 用户数 总资产 (USDT) 操作
尚无快照 — 请管理员前往 admin-finance.html PoR 标签触发生成

用户自验证

登录后,前往「账户中心」点击 「验证我的资产证明」 按钮,即可获得包含自己 leaf 的完整 Merkle proof JSON。

前往账户中心验证 查看实时储备 (原 PoR 实时)

命令行第三方复算

下载自己的 proof JSON 后,用 Node.js 即可在不依赖任何 FAcoin 代码的前提下,独立复算 Merkle Root 并与本页公开值比对。

# 1. 安装 node ≥ 18,然后保存以下脚本为 verify.js
node verify.js ./my-proof.json

# --- verify.js ---
const { createHash } = require('crypto');
const p = JSON.parse(require('fs').readFileSync(process.argv[2], 'utf8'));
const sha = (h) => createHash('sha256').update(Buffer.from(h, 'hex')).digest('hex');
const shaCat = (a, b) => createHash('sha256').update(Buffer.concat([Buffer.from(a, 'hex'), Buffer.from(b, 'hex')])).digest('hex');

let acc = p.leafHash;
for (const step of p.proofPath) {
  acc = step.direction === 'L' ? shaCat(step.sibling, acc) : shaCat(acc, step.sibling);
}
console.log('computed', acc);
console.log('expected', p.merkleRoot);
console.log(acc === p.merkleRoot ? '✓ PoR VERIFIED' : '✗ MISMATCH');

想进一步校验 leafHash 本身:sha256(uidHash + ":" + nonce + ":" + balancesJson), 其中 uidHash = sha256(email_lowercase + ":" + nonce)。 以上字段均包含在 proof JSON 中。