AIP-20 passed: execution plan & numbers | AIP-20 已通过:执行计划与数据

AIP-20 passed. 63.6% voted For and 36.4% Against, with 95 wallets taking part. That’s the highest turnout of any vote since governance restarted in 2025 - massive thank you for eveyrone who took part.

A lot of you voted against - The main reasons were risk to the treasury, wanting the ETH returned to holders, and not trusting how decisions get made. The best answer we can give is to do exactly what was voted on, out in the open, and let you check every step.

So here’s how it’ll work:

We do what AIP-20 says and nothing more.
The numbers below are fixed at the close, and they’re published before anyone signs.
Every Safe transaction gets posted here for review before it’s signed.
Staking rewards stay locked until holders vote on an updated mission.
Weekly reports start a week after the liquidity goes in. I’d like someone who voted against to check them. If that’s you, reply here.

Everything below uses the actual close.

The numbers (block 26,164,402, the last block before the close)

Safe ETH: 198.8329
Stake, 30%: 59.649856 ETH, to Lido as wstETH
Treasury JUSTICE going into the liquidity position: 97,872,288
7-day volume-weighted average price, from 240 swaps in the pool: 0.036277 ETH per million JUSTICE. 115% of that is 0.041718.
4 times the treasury’s ETH per JUSTICE (198.83 ETH / 16,898,813,912 JUSTICE): 0.047064 ETH per million JUSTICE
Hard maximum buy price, the lower of the two: 0.041718 ETH per million JUSTICE, so at least 23.97 million JUSTICE per ETH
The 10 ETH covers all the ETH used: about 3.7 ETH to match the treasury’s own JUSTICE, about 3.1 ETH to buy JUSTICE over 14 days, and about 3.1 ETH to match what we buy. The exact split depends on the price on the day, so the final figures will be in the first report.

The buy order needs a temporary change to the Safe’s fallback handler. AIP-20 authorises that, and it gets set back as soon as buying ends.

What happens next

Staking: executed by 20:23 UTC on Tuesday 13 October, inside the 72 hours AIP-15 requires. The transaction will be posted here first.
Then the liquidity position, then the buy order, which runs for at least 14 days.
After six weekly reports, a separate vote can look at a second 10 ETH.

Cheers,
Gabriel

AIP-20 已通过。赞成 63.6%,反对 36.4%,共有 95 个钱包参与投票。这是 2025 年治理重启以来投票总量最高的一次,非常感谢每一位参与投票的人。

很多人投了反对票,主要理由是:担心国库资金的风险,希望把 ETH 返还给持币人,以及不信任这里的决策方式。我们能给出的最好回应,就是严格按照投票结果执行,全程公开,让大家核查每一步。

具体做法如下:

  • 只执行 AIP-20 的内容,不做任何额外操作。
  • 下列数据以投票结束时为准,并在任何人签名之前公布。
  • 每一笔 Safe 交易在签名前都会先发到这里,供大家审核。
  • 在持币人就更新后的使命投票之前,质押收益保持锁定。
  • 流动性建立一周后开始发布周报。我希望由一位投反对票的成员来核对这些报告。愿意的请在此回复。

以下所有数据均以实际投票结束时间为准。

数据(区块 26,164,402,即投票结束前的最后一个区块)

  • Safe 中的 ETH:198.8329
  • 质押 30%:59.649856 ETH,通过 Lido 质押为 wstETH
  • 投入流动性仓位的国库 JUSTICE:97,872,288
  • 7 天成交量加权平均价格(池中 240 笔交易):每百万 JUSTICE 0.036277 ETH。其 115% 为 0.041718。
  • 国库每枚 JUSTICE 对应 ETH 的 4 倍(198.83 ETH ÷ 16,898,813,912 JUSTICE):每百万 JUSTICE 0.047064 ETH
  • 买入硬性最高价格(取两者中较低者):每百万 JUSTICE 0.041718 ETH,即每 1 ETH 至少买入 2,397 万枚 JUSTICE

10 ETH 涵盖所有使用的 ETH:约 3.7 ETH 用于匹配国库自有的 JUSTICE,约 3.1 ETH 用于在 14 天内买入 JUSTICE,约 3.1 ETH 用于匹配买入的 JUSTICE。具体比例取决于当天价格,最终数据将在第一份周报中公布。

买入订单需要临时更改 Safe 的 fallback handler(回退处理合约)。AIP-20 已授权这一操作,买入结束后会立即恢复原设置。

下一步

  • 质押:在 UTC 10 月 13 日(周二)20:23 之前执行,符合 AIP-15 规定的 72 小时要求。交易会先发到这里。
  • 随后建立流动性仓位,再启动买入订单,持续至少 14 天。
  • 六份周报之后,可另行投票讨论是否追加第二批 10 ETH。

祝好,
Gabriel

Congratulations to everyone who took part, whichever way you voted. 95 wallets and the highest turnout since governance restarted is a result in itself. Thank you, Gabriel, for setting out every number before anything is signed. Looking forward to seeing it carried out.

───

祝贺每一位参与投票的人,无论投的是赞成还是反对。95 个钱包参与、2025 年治理重启以来最高的投票量,这本身就是一个成果。感谢 Gabriel 在任何签名之前就把每一个数字公开出来。期待看到它顺利执行。

Staking transaction for review.

Safe link: I’ll update once its created.

  • To: 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0 (Lido Wrapped stETH)
  • Value: 59.649856457302133979 ETH (30% of the 198.832854857673779932 ETH in the Safe at block 26,164,402)
  • Data: empty
  • Operation: Call
  • Nonce: 51
  • Safe transaction hash: 0x8aea24029316244804b3391efa794ee77d0c83e943bc73812d8f29ad9c3e8af1

Sending ETH straight to the wstETH contract stakes it with Lido and sends wstETH back to the Safe in one step. The Safe should receive about 47.87 wstETH.

Signers will confirm on Tuesday unless someone finds a problem. If you check it, post what you find here.

Cheers,
Gabriel

Safe 链接:

接收地址:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0(Lido Wrapped stETH)

  • 金额:59.649856457302133979 ETH(区块 26,164,402 时 Safe 中 198.832854857673779932 ETH 的 30%)
  • 数据:空
  • 操作类型:Call
  • Nonce:51
  • Safe 交易哈希:0x8aea24029316244804b3391efa794ee77d0c83e943bc73812d8f29ad9c3e8af1

将 ETH 直接发送到 wstETH 合约,会一步完成 Lido 质押,并把 wstETH 返还给 Safe。Safe 预计将收到约 47.87 wstETH。

如无人发现问题,多签人将于周二确认。如果你核查了这笔交易,请在此回复结果。

祝好,
Gabriel

Checked: the Safe transaction hash matches these parameters, both computed independently and from the Safe’s own getTransactionHash, and nonce 51 is the Safe’s next nonce.

已核对:交易哈希与上述参数一致(独立计算,并由 Safe 合约自身的 getTransactionHash 验证),nonce 51 正是 Safe 的下一个 nonce。

The easiest and safest way to stake the Eth using Lido is just to use the Lido app within Safe.

I can start it if everyone agrees,

First step is to stake it, we will receive the stETH

Second step is to wrap it to wstETH.

Ok, I have initiated a transaction within the Lido app within safe to stake some of the Eth.

This will only give us stETH, so after this completes we will need to wrap it to wstETH.

Damn it, you took 580 ETH, not enough to take out 10 ETH. The person who initiated the proposal to deceive the community was you. The person who voted in the end was you who monopolized the market, stole money from the community, and thought everyone would forget. Then you made some small moves and sent you to jail

该死,你拿走了 580 枚 ETH,却连拿出 10 枚 ETH 都不肯。是你发起提案欺骗社区,最后也是你一手操控投票、垄断市场、侵吞社区资金,还以为所有人都会淡忘。后续你那些小动作,迟早会把自己送进监狱。

这是个伟大的进步!感觉所有社区人的努力,请问阿桑奇先生已经解救出来,也自由了!我们社区捐款救人的使命也完成了,几时德国基金能归还剩下的eth呢!我们社区目前也急需这些eth 来建设!请问如何才能向德国基金讨回

Congratulations on the successful completion of the vote! Although there were disagreements, it better reflects the democratic nature of the community. Everyone should abide by the community’s voted resolution; this is the principle and fairness of DAO. I hope the multi-signature implementers can reach a consensus as soon as possible and implement the voted resolution. Thank you to everyone who contributed to this vote. This is the most actively participated vote in the past five years. Although I voted for For, I still hope that next proposals will offer more options for the community to choose from. For example, after the 10 ETH liquidity trial, the second investment could offer multiple options, such as 10, 20, 30, or 40. This would better reflect the community’s will! I once again wish our community can reach a consensus and push this stalled project forward; this is unprecedented progress!

Furthermore, our community has also seen that bz’s proposal contains many suggestions that are very useful to our DAO, such as the new mission of the DAO, the token incentive mechanism, the idea of ​​auctioning the clock NFT, and the deflationary mechanism of buying back and burning liquidity rewards. These are all good directions for discussion. We hope that the multi-signature implementers can summarize proposals that are more beneficial to the development of the community in the next proposal.

Update: we’re using Zylo’s version of the staking transaction, so the details have changed. It now goes in two steps.

Step 1, queued now (Safe link in Zylo’s post above):

  • To: 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84 (Lido stETH)
  • Call: submit, with referral 0x5afE11DBF44AB2D88162f687e01F8DD7a8A3EEEe (the Safe app’s referral tag. It moves no funds.)
  • Value: 59.649856 ETH
  • Nonce: 51
  • Safe transaction hash: 0x2c2e0a860ec6e2c64dca1895a77a5fdc58954afb1b72e7c2175b6728f1ae75b7

Step 2, straight after: wrap the stETH into wstETH (nonce 52). I’ll post it here for review before it’s signed.

The end result is the same as the original post: the stake is held as wstETH. The earlier hash in post 3 is replaced by this one. @innocent, if you’re able to check this one too, thank you.

Cheers,
Gabriel

更新:质押交易改用 Zylo 提交的版本,因此细节有所变化,分两步完成。

第一步(已提交,Safe 链接见上方 Zylo 的帖子):

  • 接收地址:0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84(Lido stETH)
  • 调用:submit,推荐地址 0x5afE11DBF44AB2D88162f687e01F8DD7a8A3EEEe(Safe 应用的推荐标记,不涉及任何资金转移)
  • 金额:59.649856 ETH
  • Nonce:51
  • Safe 交易哈希:0x2c2e0a860ec6e2c64dca1895a77a5fdc58954afb1b72e7c2175b6728f1ae75b7

第二步(紧接着进行):将 stETH 包装为 wstETH(nonce 52),签名前会先发到这里供大家审核。

最终结果与原帖相同:质押资产以 wstETH 形式持有。本帖的哈希取代第 3 楼中的旧哈希。@innocent 如方便,也请帮忙核对这一笔,谢谢。

祝好,
Gabriel

Checked this one too.

The hash matches, both computed and from the Safe’s own getTransactionHash. It’s submit() on Lido stETH, and the referral address only gets logged, no funds move to it.

Simulated from the Safe, it gives 59.649855999999999999 stETH, 1 wei under the ETH sent, which is Lido’s usual rounding.

For step 2, approve and wrap the stETH balance the Safe actually holds, not 59.649856, or the wrap will revert.

这一笔也核对过了。

哈希一致(独立计算,并由 Safe 合约自身的 getTransactionHash 验证)。

调用的是 Lido stETH 的 submit(),推荐地址只会被记录在日志中,不会有任何资金转给它。

以 Safe 身份模拟,将得到 59.649855999999999999 stETH,比投入少 1 wei,这是 Lido 正常的取整。

第二步授权和包装时,请按 Safe 实际持有的 stETH 余额填写,而不是 59.649856,否则包装会失败。

Before the liquidity goes in, here’s the baseline the weekly reports will be measured against, as AIP-20 §3.3 requires. I’m posting it now so nobody can say it was chosen after the results. DM here and I can send you the scripts used.

Everything comes from the JUSTICE/WETH 1% pool, up to 00:00 UTC on 5 October (block 26,122,440). The treasury made no trades in either window, so nothing was excluded.

One thing to know first: the pool changed completely on 17 September. The price rose about 4.6 times in a day, and the liquidity more than tripled. Before that the pool was close to empty. So the 90-day figures mostly describe the old pool. I’ll report against both, as the AIP says, but the fair comparison is the 30-day figures and the pool on 5 October.

That jump followed Julian’s post that he was back, on 17 September. Trading has been cooling since: weekly volume went from about 100 ETH to 25 and then 11.5 ETH over the following three weeks. So volume and trader numbers may keep falling during the trial for reasons that have nothing to do with it. The with-and-without comparison below is the better guide to what our position does.

The pool at 00:00 UTC on 5 October

  • Price: 0.0304 ETH per million JUSTICE
  • Cost to buy with 0.5 / 1 / 2 ETH: 4.8% / 8.5% / 16.0%
  • Cost to sell for 0.5 / 1 / 2 ETH: 4.7% / 8.5% / 17.8%

30 days before 5 October (medians)

  • Daily volume: 1.39 ETH
  • Trading addresses per week: 101
  • Cost to buy with 0.5 / 1 / 2 ETH: 4.8% / 8.5% / 15.9%
  • Cost to sell for 0.5 / 1 / 2 ETH: 4.8% / 8.7% / 15.1%. A 2 ETH sell wasn’t possible at all on 10 of the 30 days.

90 days before 5 October (medians)

  • Daily volume: 0.018 ETH, with 26 days of no trades at all
  • Trading addresses per week: 10.5
  • Cost to buy with 0.5 / 1 / 2 ETH: 30% / 56% / 99%
  • Cost to sell for 0.5 / 1 ETH: 30% / 60%. A 2 ETH sell was only possible on 20 of the 90 days.

All costs include the 1% pool fee and are quoted at 00:00 UTC each day.

How the weekly reports will work

  • Each price-impact figure is shown twice: with the treasury’s position and with it removed. Other people’s liquidity in this pool moves a lot, so that gap is the honest measure of what our position does. Tested on a copy of today’s pool, our position cuts the cost of a 1 ETH buy from about 6.9% to 5.8%.
  • The price goes next to every figure, because a higher price on its own makes a fixed-size ETH trade cheaper.
  • Trading addresses are the addresses that sent each transaction. That includes bots, and trades through CoW count the solver rather than the buyer. It’s imperfect, but it’ll be counted the same way every week.
  • The treasury’s own trades are left out, including the TWAP fills through CoW. Trading in the same blocks as our fills goes on a separate line, since some of it will be bots reacting to our buys.

The daily figures, the method and the scripts are attached, so anyone can rerun them. If you find a mistake, post it here.

Cheers,
Gabriel

在流动性注入之前,先公布每周报告将要对比的基准数据,这是 AIP-20 第 3.3 节的要求。现在公布,是为了让大家不会觉得基准是看到结果后才挑选的。

所有数据都来自 JUSTICE/WETH 1% 资金池,截至 10 月 5 日 UTC 00:00(区块 26,122,440)。两个时间段内国库都没有任何交易,因此没有需要排除的数据。

先说明一点:9 月 17 日资金池发生了根本变化。价格一天内上涨约 4.6 倍,流动性增加了两倍多。在此之前,池子几乎是空的。所以 90 天的数据主要反映的是旧的资金池。按照提案要求,两组数据我都会对比,但更公平的比较对象是 30 天的数据和 10 月 5 日的资金池状态。

这次上涨发生在 Julian 9 月 17 日发帖宣布回归之后。此后交易一直在降温:随后三周的每周交易量从约 100 ETH 降到 25 ETH,再降到 11.5 ETH。所以试点期间交易量和交易地址数可能继续下降,但原因与试点无关。要判断我们的仓位起了什么作用,下文"包含与移除仓位"的对比更可靠。

10 月 5 日 UTC 00:00 的资金池

  • 价格:每百万 JUSTICE 0.0304 ETH
  • 用 0.5 / 1 / 2 ETH 买入的成本:4.8% / 8.5% / 16.0%
  • 卖出换取 0.5 / 1 / 2 ETH 的成本:4.7% / 8.5% / 17.8%

10 月 5 日之前 30 天(中位数)

  • 每日交易量:1.39 ETH
  • 每周交易地址数:101
  • 用 0.5 / 1 / 2 ETH 买入的成本:4.8% / 8.5% / 15.9%
  • 卖出换取 0.5 / 1 / 2 ETH 的成本:4.8% / 8.7% / 15.1%。30 天中有 10 天根本无法卖出换取 2 ETH。

10 月 5 日之前 90 天(中位数)

  • 每日交易量:0.018 ETH,其中 26 天完全没有交易
  • 每周交易地址数:10.5
  • 用 0.5 / 1 / 2 ETH 买入的成本:30% / 56% / 99%
  • 卖出换取 0.5 / 1 ETH 的成本:30% / 60%。90 天中只有 20 天能够卖出换取 2 ETH。

所有成本均包含 1% 的资金池手续费,按每天 UTC 00:00 的报价计算。

每周报告的做法

  • 每个价格影响数据都给出两个数值:包含国库仓位的,以及移除国库仓位后的。这个池子里其他人的流动性变化很大,所以两者之差才能如实反映我们的仓位起了多大作用。在今天资金池的副本上测试,我们的仓位能把买入 1 ETH 的成本从约 6.9% 降到 5.8%。
  • 每个数据旁边都会注明价格,因为仅仅价格上涨,就会让固定 ETH 金额的交易成本变低。
  • 交易地址按发送每笔交易的地址计算。其中包括机器人;通过 CoW 成交的交易,计入的是求解者(solver)而不是买家。这个方法并不完美,但每周都按同样的方式计算。
  • 国库自身的交易(包括通过 CoW 成交的 TWAP 买单)不计入。与我们的成交处于同一区块的交易单独列出,因为其中一部分会是针对我们买入行为的机器人交易。

每日数据、计算方法和脚本都已附上,任何人都可以重新运行核对。如果发现错误,请在这里回复。

祝好,
Gabriel

Spot-checked the 5 October pool at block 26,122,440: the price comes out at 0.0304 ETH per million JUSTICE, and the cost of a 0.5 / 1 / 2 ETH buy at 4.8% / 8.5% / 16.0%, measured as the average price paid over the pool price. Both match.

Fixing the baseline before the liquidity goes in, and showing every figure with and without the treasury’s position, is exactly what makes the weekly reports worth trusting.

───

抽查了 10 月 5 日区块 26,122,440 的资金池:价格为每百万 JUSTICE 0.0304 ETH,买入 0.5 / 1 / 2 ETH 的成本为 4.8% / 8.5% / 16.0%(按成交均价相对池子价格的溢价计算),两项均一致。

在流动性注入之前就固定基准,并且每个数据都同时给出包含与移除国库仓位的结果,这正是让每周报告值得信赖的地方。

Staking tx via lido was been verified:

initialed from @zylo_justice:

0x5350cF20A0B94899702f2ED984ceC4D52398c206

first signed by @gabrielshipton:

@gabrielshipton 0x2B794208FbB6ed6017e8FE129611dC0e2F68edBa

and I comfirmed: 0xC4a1F1B0cFCe9DC22436d1C86eAE51d9Ff9fe8a5

Tx record:

https://etherscan.io/address/0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84

Staking is done. Thanks bZ for executing it (post 16). And thank You Zylo for uploading it all.

Step 1, stake: 59.649856 ETH staked with Lido, executed at nonce 51.

https://etherscan.io/tx/0xda9d0d0ca2866d6c0e943e327efa3d9bed836abf067a894f2475032e6915a5ca

Step 2, wrap: all of the stETH wrapped into wstETH, executed at nonce 52. The Safe now holds 47.8697 wstETH, which is the end state AIP-20 describes.

https://etherscan.io/tx/0x822df8e1f7294c8f73ee07914c1170d0d72712eca99b2cf67d601808b29dfc30

Next is liquidity stage 1 (AIP-20 §3.2): the treasury’s own JUSTICE plus matching ETH, as a full-range position in the existing 1% pool. It’s queued at nonce 53 for review before anyone else signs. THANK YOU ZOLY!

What it does, in one batch:

  • Approves 97,872,288.44 JUSTICE (all the treasury holds) to the Uniswap v3 position manager, 0xC36442b4a4522E871399CD717aBDD847Ab11FE88
  • Adds a full-range position to the JUSTICE/WETH 1% pool, 0xfe7aff6f4f1b0d9f65767e96573e6df8b1ff5920. The Safe holds the position NFT directly.
  • Sends up to 4.150 ETH. At today’s price about 4.03 ETH is used, and the rest is refunded to the Safe in the same transaction.
  • Resets the JUSTICE approval to zero.

Safeguards:

  • Minimum amounts are 97% of each side. If the price moves more than about 3% down or 6% up before it executes, the transaction fails and nothing moves. I’ll rebuild it at the new price.
  • It expires at 04:00 UTC on Thursday 15 October.
  • The final signer will execute through a private RPC, so it can’t be traded around.

Details to check:

  • To: 0xA83c336B20401Af773B6219BA5027174338D1836 (Safe’s MultiSendCallOnly v1.5.0; delegatecall is expected for a batch)
  • Value: 0
  • Nonce: 53
  • Safe transaction hash: 0x76aacc7f2872c4e4f18a3b577db86e7932bdcdf70f803cb7b97df59ddc5e40b2
  • Simulation: Tenderly Dashboard

The TWAP buy comes after this, at nonce 54, and I’ll post it here for review the same way. One thing to know in advance: the price is now close to the cap fixed when the vote closed, so parts may not fill. Under AIP-20, unfilled parts expire and the ETH stays in the Safe.

@innocent, if you have time to check this one too, thank you.

Cheers,
Gabriel

质押已完成。感谢 bZ 执行交易(16 楼)。

第一步,质押:59.649856 ETH 已质押到 Lido,于 nonce 51 执行。

https://etherscan.io/tx/0xda9d0d0ca2866d6c0e943e327efa3d9bed836abf067a894f2475032e6915a5ca

第二步,包装:全部 stETH 已包装为 wstETH,于 nonce 52 执行。Safe 现持有 47.8697 wstETH,与 AIP-20 规定的最终状态一致。

https://etherscan.io/tx/0x822df8e1f7294c8f73ee07914c1170d0d72712eca99b2cf67d601808b29dfc30

下一步是第一阶段流动性(AIP-20 第 3.2 节):国库自有的 JUSTICE 加上相应的 ETH,在现有的 1% 资金池中建立全区间仓位。交易已在 nonce 53 提交,在其他人签名前先供大家审核。

这笔批量交易包括:

  • 将 97,872,288.44 JUSTICE(国库全部持有量)授权给 Uniswap v3 仓位管理合约 0xC36442b4a4522E871399CD717aBDD847Ab11FE88
  • 在 JUSTICE/WETH 1% 资金池 0xfe7aff6f4f1b0d9f65767e96573e6df8b1ff5920 中添加全区间仓位,仓位 NFT 由 Safe 直接持有
  • 最多发送 4.150 ETH。按今天的价格约使用 4.03 ETH,剩余部分在同一笔交易中退回 Safe
  • 将 JUSTICE 授权额度重置为零

保护措施:

  • 两边的最低数量均为 97%。如果执行前价格下跌超过约 3% 或上涨超过约 6%,交易会失败,资金不会有任何变动,我会按新价格重新构建
  • 交易于 10 月 15 日(星期四)UTC 04:00 过期
  • 最后一位签名人将通过私有 RPC 执行,避免被抢跑交易

核对信息:

  • 接收地址:0xA83c336B20401Af773B6219BA5027174338D1836(Safe 官方 MultiSendCallOnly v1.5.0;批量交易使用 delegatecall 属于正常情况)
  • 金额:0
  • Nonce:53
  • Safe 交易哈希:0x76aacc7f2872c4e4f18a3b577db86e7932bdcdf70f803cb7b97df59ddc5e40b2
  • 模拟结果: Tenderly Dashboard

之后是 TWAP 买单(nonce 54),我会同样先发到这里供大家审核。提前说明一点:目前价格已接近投票结束时确定的上限,部分订单可能无法成交。按照 AIP-20,未成交的部分会自动过期,ETH 留在 Safe 中。

@innocent 如方便,也请帮忙核对这一笔,谢谢。

祝好,
Gabriel

Checked nonce 53 independently against chain state. It matches your description.

  • Safe transaction hash: I recomputed it from the transaction data, and Safe.getTransactionHash on-chain returns the same 0x76aacc7f…40b2. The Safe’s current nonce is 53.
  • To: 0xA83c…1836 is the canonical MultiSendCallOnly v1.5.0 in safe-deployments. Delegatecall, value 0.
  • Call 1 approves 97,872,288.437910952636299594 JUSTICE to the Uniswap v3 position manager 0xC364…FE88. That is exactly the Safe’s JUSTICE balance.
  • Call 2 is multicall(mint, refundETH) with 4.150255 ETH:
    • token0 JUSTICE, token1 WETH, fee 1%, ticks −887200 / +887200 (full range for tick spacing 200)
    • recipient is the Safe
    • deadline 15 Oct 04:00:25 UTC
    • at the current price, 4.0294 ETH is used. The minimums are 97% of each side, so it executes if the price stays within about −3% / +6%.
    • refundETH is in the same multicall, so the unused ETH comes back in the same transaction.
  • Call 3 resets the JUSTICE approval to 0.
  • A simulation of the full batch from the Safe’s own context (simulateAndRevert) succeeds.

The end state of nonce 52 also checks out. The Safe holds 47.869665 wstETH, and 1 wei of stETH is left over from Lido’s rounding.

───
中文

我已对照链上状态独立核对了 nonce 53,与你的描述一致。

  • Safe 交易哈希:我根据交易数据重新计算了一遍,链上 Safe.getTransactionHash 返回的也是同一个 0x76aacc7f…40b2。Safe 当前的 nonce 是 53。
  • 接收地址:0xA83c…1836 是 safe-deployments 中官方的 MultiSendCallOnly v1.5.0。调用方式为 delegatecall,金额为 0。
  • 第 1 笔:授权 97,872,288.437910952636299594 JUSTICE 给 Uniswap v3 仓位管理合约 0xC364…FE88,正好等于 Safe 的 JUSTICE 余额。
  • 第 2 笔:multicall(mint, refundETH),附带 4.150255 ETH。
    • token0 为 JUSTICE,token1 为 WETH,费率 1%,tick 为 −887200 / +887200(tick 间距 200 下的全区间)。
    • 仓位接收方是 Safe。
    • 截止时间为 10 月 15 日 04:00:25 UTC。
    • 按当前价格,实际使用 4.0294 ETH。两边的最低数量都是 97%,因此价格变动在约 −3% 到 +6% 之内都能执行。
    • refundETH 在同一个 multicall 里,未用完的 ETH 会在同一笔交易中退回。
  • 第 3 笔:把 JUSTICE 授权额度重置为 0。
  • 以 Safe 自身的上下文(simulateAndRevert)模拟整笔批量交易,结果成功。

nonce 52 的最终状态也核对无误:Safe 持有 47.869665 wstETH,另有 1 wei stETH 是 Lido 的取整余数。

Thanks innocent for checking nonce 53 (post 18).

Liquidity stage 1 is in, executed at nonce 53: all 97,872,288 treasury JUSTICE plus 4.029 ETH as a full-range position in the 1% pool. The Safe holds it as position #1382472.

https://etherscan.io/tx/0x9db1bc983818e85f3afce6a86e0df5b842c03ea0f9a0901797525186657f1307

The last Safe step for now is the TWAP buy (AIP-20 §3.2) at nonce 54. It has the three signatures and will be executed shortly.

What it does, in one batch:

  • Sets the Safe’s fallback handler to Safe’s ExtensibleFallbackHandler (0x2f55e8b20D0B9FEFA187AA7d00B6Cbe563605bF5), the one-off setting AIP-20 authorises. It will be restored to the current handler when buying ends.
  • Registers CoW’s order contract, ComposableCoW (0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74)
  • Wraps 2.968 ETH into WETH and approves exactly that amount to CoW, nothing more
  • Creates the order: 28 daily parts of 0.106 ETH. Each part must receive at least 2,540,866 JUSTICE, which is the AIP-20 cap of 0.04172 ETH per million JUSTICE. AIP-20 says at least 14 days. Smaller parts move the price less and get more chances to fill.

The budget: 10 ETH, minus the 4.029 ETH in the position, leaves about 5.97 ETH. Half buys JUSTICE, and half is kept to match it when buying ends.

The price is now about 0.0377 ETH per million JUSTICE, below the cap, so parts should fill. If the price rises above the cap, those parts expire and the ETH stays in the Safe.

  • To: 0xA83c336B20401Af773B6219BA5027174338D1836 (MultiSendCallOnly v1.5.0), value 0, nonce 54
  • Safe transaction hash: 0x9478adda3e579b53f335aca3054b6dd8b4902a64ad8b4ef979a28081f23f5220

Weekly reports start about a week from now, measured against the baseline in post 14.

Cheers,
Gabriel

感谢 innocent 核对 nonce 53(18 楼)。

第一阶段流动性已注入(nonce 53):国库全部 97,872,288 JUSTICE 加 4.029 ETH,在 1% 资金池中建立全区间仓位,Safe 持有仓位 #1382472。

https://etherscan.io/tx/0x9db1bc983818e85f3afce6a86e0df5b842c03ea0f9a0901797525186657f1307

目前最后一笔 Safe 交易是 TWAP 买单(AIP-20 第 3.2 节,nonce 54),三个签名已齐,即将执行。

这笔批量交易包括:

  • 将 Safe 的回退处理合约设为 Safe 官方的 ExtensibleFallbackHandler(0x2f55e8b20D0B9FEFA187AA7d00B6Cbe563605bF5),这是 AIP-20 授权的一次性设置,买入结束后会恢复为现在的处理合约
  • 注册 CoW 的订单合约 ComposableCoW(0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74)
  • 将 2.968 ETH 包装为 WETH,并只向 CoW 授权这一数额
  • 创建订单:28 天,每天一份 0.106 ETH。每份至少要换到 2,540,866 JUSTICE,即 AIP-20 规定的上限:每百万 JUSTICE 0.04172 ETH。AIP-20 规定至少 14 天;每份更小,对价格的影响更小,成交机会也更多

预算:10 ETH 减去仓位中的 4.029 ETH,约剩 5.97 ETH。一半用于买入 JUSTICE,另一半留待买入结束后配对注入。

目前价格约为每百万 JUSTICE 0.0377 ETH,低于上限,订单应能成交。如果价格涨到上限以上,相应的部分会过期,ETH 留在 Safe 中。

  • 接收地址:0xA83c336B20401Af773B6219BA5027174338D1836(MultiSendCallOnly v1.5.0),金额 0,nonce 54
  • Safe 交易哈希:0x9478adda3e579b53f335aca3054b6dd8b4902a64ad8b4ef979a28081f23f5220

每周报告将在大约一周后开始,以 14 楼的基准数据为对照。

祝好,
Gabriel

Checked nonce 54 independently. It matches post 19.

  • The Safe transaction hash 0x9478adda…5220 matches the transaction data.
  • Every contract it touches is CoW’s or Safe’s official deployment. The domain it registers is the one GPv2Settlement returns on-chain.
  • The approval is exactly 2.968 WETH, to CoW’s own vault relayer.
  • The order: 28 parts of 0.106 ETH, one every 24 hours. Each part needs at least 2,540,865.85 JUSTICE, so the price cap is 0.0417181 ETH per million, which matches the cap I calculated at the close of the vote. Purchases go to the Safe.

For the record, the handler being replaced is CompatibilityFallbackHandler 0x3EfCBb83A4A7AfcB4F68D501E2c2203a38be77f4. Under AIP-20, the Safe goes back to this one when buying ends.

───
中文

我独立核对了 nonce 54,与 19 楼的描述一致。

  • Safe 交易哈希 0x9478adda…5220 与交易数据一致。
  • 涉及的合约全部是 CoW 和 Safe 的官方部署。注册的结算域与 GPv2Settlement 链上返回的一致。
  • 授权额度正好是 2.968 WETH,授权对象是 CoW 自己的 vault relayer。
  • 订单:分 28 份,每份 0.106 ETH,每 24 小时一份。每份至少换到 2,540,865.85 JUSTICE,即价格上限每百万 0.0417181 ETH,与我在投票结束时计算的上限一致。买到的 JUSTICE 进入 Safe。

记录在此:被替换的 handler 是 CompatibilityFallbackHandler 0x3EfCBb83A4A7AfcB4F68D501E2c2203a38be77f4。按 AIP-20,买入结束时 Safe 要恢复为这个地址。