# 技术方案

### frxETH

frxETH 与 Frax 和 FPI 稳定币共享大量代码，并实现了 ERC-2612 标准，允许通过传递给 `permit()` 函数的 ERC-712 签名进行支出批准。

### sfrxETH

sfrxETH 是符合 ERC-4626 标准的保险库。要获取 sfrxETH，首先需要将 sfrxETH 合约批准为 frxETH 的支出者，然后调用 `mint()`（铸造特定数量的 sfrxETH）或 `deposit()`（存入特定数量的 frxETH）。批准和铸造步骤可以通过 `depositWithSignature()` 或 `mintWithSignature()` 组合，从而无需进行两次单独的交易。

随着验证者产生质押收益，等量的 frxETH 会被铸造并发送到 sfrxETH 合约。这意味着，一旦奖励同步后，用户可以通过赎回 sfrxETH 获取比最初铸造时更多的 frxETH。

为防止恶意用户盗取验证者的收益分配到保险库，奖励分配会在时间周期内平滑分配。每当调用 sfrxETH 合约上的 `syncRewards()` 时，合约内部余额之外的任何额外 frxETH 都会排队，线性分配到剩余的周期窗口。

sfrxETH 也符合 ERC-2612 标准，允许使用签名授权。

有关验证者的实时信息和监控，请参阅 [Frax Facts](https://facts.frax.finance/frxeth/validators)。

### frxETHMinter

frxETHMinter 会在接收到 ETH 时通过 `submit()` 或 `receive()` 函数铸造 frxETH。每当提交的金额使 minter 余额超过 32 ETH 时，合约会从堆栈中取出一个验证者的存款凭证，并将 32 ETH 的存款连同凭证一起发送到 ETH 2.0 的存款合约，自动启动一个新的验证者节点。

为确保验证者随时准备接受存款，新的凭证会根据需要被添加到堆栈中。如果合约在任何时候耗尽了验证者，frxETH 将继续照常铸造（除非暂停），但不会启动新的验证者，直到更多的验证者凭证被添加到堆栈中。

堆栈中的所有验证者共享同一个提款凭证，即所有验证者共用同一个提款地址。该地址在启动时被设置为 Frax 金库合约，以确保在上线后可以安全地处理提款。

此外，在添加验证者时，必须提供生成存款数据时的 `DepositDataRoot`，以确保在 ETH 存入时，防止因参数错误导致的验证者被错误接受。

协议可能设置在提交 ETH 时预留部分资金的比例。这些资金在收集 32 ETH 存款用于启动验证者时不被计算在内，而是用于在 DeFi 市场进行做市操作，以确保 frxETH 的流动性市场。

### Frax in-House Validators

每个验证者的公开地址和实时统计数据可以在以下链接监控：\
<https://facts.frax.finance/frxeth/validators>

第三方和社区对所有 frxETH 验证者的跟踪信息可以在以下链接找到：\
<https://www.rated.network/o/Frax?network=mainnet&timeWindow=1d>
