构建于 Terminal 3 的保密基准测算
经得起复核的 薪酬基准。
竞争对手不会把薪酬表发给彼此,法务也不会允许。Blindband 把密封的数据行送进飞地,只有通过四道安全港门槛的分位区间才会发布,并把结果的指纹写入公开账本。你不必相信运营方,你可以自己把那个数字重新算一遍。
- Backend Engineer L4US$9,344
- Backend Engineer L5US$14,627
- Backend Engineer L6US$18,752
- Product Designer L4US$7,981
- Data Scientist L5已扣下
- Engineering Manager M2已扣下
- 个已发布区间
- 4
- 个被扣下的单元
- 2
- 家参与企业
- 9
- 行密封数据
- 117
个已发布区间
个被扣下的单元
家参与企业
行密封数据
问题所在
每一份薪酬调研,都要你把薪酬表交给一个陌生人。
通常的做法是找供应商:各家企业寄出表格,供应商承诺保密,几个月后返回一份 PDF。企业看不到中间发生了什么,监管者同样看不到。而真正要紧的那条规则——基准不得成为竞争对手互相窥探当期薪酬的渠道——所依靠的只是一句保证。
运行方式
三个步骤,其中只有一步需要信任。
01
数据密封进入
每位成员把数据行提交给运行在可信执行环境中的合约。数据落入一个私有键值映射,只有合约自身的身份才能读取。不存在能打开它的运营控制台,因为根本没有把它返回出来的代码路径。
02
飞地决定什么可以被说出口
聚合在无人能旁观的地方运行。每个单元都要接受四道门槛的检验。通过的单元以分位区间发布;未通过的单元会被点名并给出原因,而它的数值永远不会被输出——既不给成员,也不给运营方。
03
结果被钉在公开处
已发布的一轮会被哈希,摘要被绑定进交易回执,同一摘要以 memo 形式写入 Solana。这让该轮结果获得独立的时间戳与只增不改的历史,事后无法被替换成更好看的版本。
该合约申请三项宿主能力:键值存储、日志与租户上下文。它不申请出站 HTTP,因此没有需要审查的外发面。
六十三秒看完全部
blindband/agent
$npm run deploy
Register the contract and scope the sealed maps to it.
规则集
第一轮四道门槛,之后每一轮五道。
它们不是可随手调节的旋钮,而是编译进合约、并写在已发布轮次里的常量,成员因此能看清自己读到的数字出自哪一套规则。
中立聚合方
01没有成员能看到别人的数据行
聚合在飞地内运行,密封映射的访问范围仅限合约身份。成员拿到的是区间,不是数据行。
历史数据
02生效日期至少满 91 天
更近期的数据会被剔除出本轮,并计入统计。当期薪酬正是竞争者不得交换的那个数字,陈旧薪酬才是可以的那个。
参与方下限
03每个单元至少 5 家企业、10 行数据
低于此线,区间描述的就是个人而非市场。该单元会被标记为扣下,其统计量随即丢弃。
差分防护
04任何差值都不可归因到单一企业
另外四道门槛只判定单轮,而联盟按季度运行。若一家企业加入或退出某个单元,该单元中位数的变化就完全来自它自己的数据行——把两轮相减便可读出。一个单元只有在其贡献方集合与此前每一次发布时都相同,或与它们每一次都相差至少两家企业时,才会再次发布——比对的是整段历史,因为观察者会留存他们见过的每一轮。本页这一轮是第一轮,身后无物可供差分。
集中度上限
05单一企业占比不得超过 25%
主要来自一家雇主的区间,不过是那家雇主的薪酬表披上了市场的外衣。超过上限,单元即被扣下。
Blindband 是工程实现,不是法律意见。门槛依据公开的安全港指引;是否适用于某个具体联盟,应由该联盟的法律顾问判断。
本轮结果 · 2026-q1
飞地发布了什么,又拒绝发布了什么。
以下内容全部来自 Terminal 3 沙箱上的一次真实合约执行,并锚定于 Solana devnet。本页没有任何示意性内容。
Backend Engineer · L4
9 企业数 · 25 行数 · 最大占比 16.0%
Backend Engineer · L5
9 企业数 · 32 行数 · 最大占比 15.6%
Backend Engineer · L6
7 企业数 · 22 行数 · 最大占比 18.2%
Product Designer · L4
6 企业数 · 19 行数 · 最大占比 21.1%
Data Scientist · L5
5 企业数 · 13 行数
单一企业占该单元数据行的四分之一以上。
Engineering Manager · M2
3 企业数 · 6 行数
参与该单元的独立企业不足五家。
这些单元是有数据的。飞地算出了结果,然后拒绝发布——而这恰恰是整套系统真正的价值所在。
验证
就在你自己的浏览器里核对。
三项检查中有两项完全不需要我们参与。你的浏览器会对刚下载的轮次文件做哈希,再与记录在 Solana 上的指纹比对。若运营方哪天给你的是另一份轮次,这两个数字就会分道扬镳。
01
重新计算摘要
对已发布轮次的原始字节做 SHA-256,由 Web Crypto API 在本地完成。
anchored on solana
e4f528ad321626b2daf9b667188937609cd160a21a739d542eabd44a2f40beef
02
读取链上锚点
同一个摘要,在所示 slot 以 memo 写入 Solana devnet。公开、有时间戳,且不由我们编辑。
slot
492821211
block time
2026-09-04 03:20:46 UTC
signature
5uczxVJUm4zjwDms6R5eDC9H1G3gypRUuDA1p2B1x14bXP8QCezrFxZLgfRzfGCJLG3HDJ7ubfsWpiZBG4AJE3Hf
03
证明回执确实计入
每一行被接受的数据都会返回一个 commitment。你可以查询它是否在本轮中,以及其单元是否进入了已发布区间。
64 位十六进制字符,即数据行被接受时返回的值。
本页的回执查询取自随站点一同发布的示例集合,因此可离线工作,也不消耗任何人的额度。权威答案来自飞地:仓库中的 npm run verify 会直接询问合约,并附带一个故意伪造的 commitment 作为对照。
问答
先说最难堪的那几个。
运营方难道不能照样读到提交内容?
不存在返回单行数据的函数。密封映射的访问列表只写了合约身份,而合约对外暴露的是提交、聚合、读取轮次与核对回执。要加一条读取路径,就得以新身份注册新的合约版本——那是看得见的动作,不是悄悄的。
凭什么保证轮次事后不被替换?
靠 Solana 上的摘要。用同一标识重新发布另一份轮次会得到不同的哈希,而原来的 memo 连同其原始出块时间仍在原处。替换并非变得不可能,而是变得显而易见。
为何因为一家企业占比过高,就丢掉整个单元?
因为主要来自一家雇主的区间,等于告诉其他成员那家雇主付多少钱。安全港条件存在的意义正是阻止这种交换,加一条脚注再发布并不能解决问题。
成员实际拿回什么?
每行被接受的数据对应一份回执,以及已发布的区间。回执能证明该行被计入,却不泄露其内容。响应中没有任何部分描述其他成员的数据。
它可以用于真实联盟了吗?
流水线是真的,门槛也确实生效,但它跑在沙箱租户上、使用测试额度,且当前轮次以租户身份而非受委派的代理密钥执行。这两点必须先补上,任何人的真实薪酬数据才谈得上接近它。
把两轮结果放在一起比对,会泄露某一轮扣下的东西吗?
会,为此有第五道门槛。前四道门槛只判定单轮,而联盟是按季度运行的:若一家企业加入或退出某个单元,该单元中位数的变化就完全来自那家企业的数据行,两轮相减即可读出。第五道门槛规定:只有在贡献方集合未变,或至少两家机构同时变动时,已发布过的单元才会再次发布,使任何差值都不归属于单一企业。可以在真实数据上亲自验证:`cargo run --example replay -- --differencing` 会先打印出前四道门槛本会泄露的那个数字,然后扣下该单元。它会与该单元此前每一次发布时的贡献方集合比对,而不只是上一轮:若某单元在 Q2 被扣下,又在 Q3 以比 Q1 少一家企业的构成重新发布,相邻两轮之间看不出任何问题,而 Q3 − Q1 依然点出了那家企业。仅剩一个较小的限制:扣下本身也在告诉别人有一家机构发生了变动——这比它所保护的数字轻得多。已发布的那一轮标注为 `blindband-safe-harbour/v1`,因为它是第一轮,身后无物可差分;下一轮将标注为 v2。