MimbleWimble 模型
Epic是一条MimbleWimble链。Epic交易不包含地址、脚本或可读金额。它是一组盲化承诺(commitment)加上一个紧凑签名,用于证明输入(input)与输出(output)平衡。由于每个输出承诺一个只有其所有者知道的盲化因子(blinding factor),发送方无法单独构建完整交易。
链上存储的内容
透明链为每笔支付记录发送方、接收方和金额。Epic不记录上述任何信息。
输出(output)是一个Pedersen 承诺(commitment),是形如v·H + r·G的曲线点,其中v为金额,r为盲化因子(blinding factor)。任何人都可以在不获知任何v的情况下验证一组承诺是否平衡。每个输出附带一个范围证明(range proof),用于证明金额非负,从而防止通货膨胀。
承诺算术. 第1步,共6步。必须匹配的两侧
内核(kernel)携带超额签名(excess signature),并根据其功能变体携带手续费和锁定高度。共有三种变体:Plain携带手续费,HeightLocked携带手续费和锁定高度,Coinbase两者均不携带(core/src/core/transaction.rs:39)。Plain内核序列化为106字节,由1个功能字节、8字节手续费、33字节超额承诺和64字节签名组成,HeightLocked额外增加8字节用于锁定高度(core/src/core/transaction.rs:113)。内核是链上的永久部分,因此链的增长取决于用户数量,而非历史交易总数。
已花费的输出通过cut-through机制移除。一旦某个输出被创建并花费,该对输出相互抵消,验证当前状态时两者均不再需要。cut-through的时间范围为10,080个区块,即以60秒为目标出块时间的一周。
实际结果是没有可查询的交易历史。无法向链询问某一方收到了什么。你自己的记录是唯一能说明谁向你付款的依据。在此前提下如何处理充值入账,请参阅交易所集成。
无地址机制
Epic有看起来像地址的标识符。形如esYQ…@epicbox.epiccash.com的epicbox地址是真实可用的,但它不是其他链上所说的那种地址。
它们是钱包之间消息的路由标识符。它们告知你的钱包将部分构建的交易发送到何处,以便对方完成其部分。链对它们一无所知。没有任何输出会被"支付到"某个epicbox地址。
**余额不是地址的属性。**在任何层面都不存在此类查询。余额是你的钱包使用自己的密钥扫描输出集后进行的私有计算。
**发送不是单方面行为。**向一个未在监听的钱包发送消息,本身不会产生任何效果。
输入错误的地址不会导致资金消失,但仍可能将资金发送给错误的一方。 损坏的epicbox地址会在base58校验和验证时失败,钱包在发送任何内容之前即拒绝该地址。一个格式正确但属于其他钱包的地址,其行为与任何其他接收方相同。如果该钱包正在监听,转账即完成,资金归对方所有。如果没有任何监听器,转账永远不会完成,你的输入(input)将保持已预留状态,直到你取消为止。请参阅释放方式。
单位
1 EPIC等于100,000,000个基本单位,最小单位称为freeman。所有API均以freeman的整数形式接受和返回金额,因此0.1 EPIC为10000000。
与Grin的关系
Epic最初是Grin的分叉,共享MimbleWimble的基本原理。它在以下几个方面有所不同,因此针对Grin编写的资料不适合作为这些方面的参考:
| 领域 | Epic |
|---|---|
| 工作量证明 | 三种算法按共识设定的每纪元比例并发运行。参见工作量证明 |
| 发行 | 阶梯式纪元,且有终止。参见发行 |
| 区块奖励 | 基金会按比例收取递减的税费 |
| 默认传输方式 | Epicbox,一种存储转发中继。参见协议 |
| Tor | 钱包和节点均可在构建时捆绑Tor专家包 |