众所周知,以太坊 ERC20 协议是加密圈第一大发币协议,它创造了如下功绩:
- 成就了以太坊公链,让以太坊的 EVM 智能合约平台成为整个加密圈最主流的开发协议。
- 成就了 DeFi,ERC20 toke 的出现,让项目方可以使用去中心化的 token 去开展去中心化金融业务。
- 成就了去中心化融资和创业,直白点来说就是成就了 ICO,投资方和创业者可以更直接和高效的进行投资和融资。
而纵观当下所有新公链的叙事,基本都是在复制以太坊的成功之路,想扶持自己的 ERC20。那怎样才能做出属于自己平台的 ERC20?有两点:
- 新公链的市值要足够大,所以 Solana 一直在狂拉,甚至一度超过了 ETH 市值的 20%,想要夯实自己的地基。
- 发币协议要创新,不能单纯的复制 erc20。要得到加密圈用户和社群的认可。
对比了上面的 ERC20 成就之路和新发币协议的突围之路。当下最有可能超越 ERC20 发币协议的只有 Runes。理由如下:
- BTC 的市值占加密货币市值的 50%,地基最牢固,地基甚至远超以太坊地基。
- BRC20 铭文出来,公平发射的逻辑足够创新,得到了社区用户的认可。
- Runes 协议是在 BRC20 公平发射的基础上,衍生迭代的新发币协议,兼容了 BRC20 和 ERC20 的优势,同时又是 BTC 主网上的发资产协议。
Runes 的基本特征
利用 UTXO 所携带的 op_return 来描述代币的 deploy,mint,transfer 等基本操作以及所携带的代币信息。
代币发行者可以定制类似 BRC20 的完全公平发射,也可以定制 ERC20 的团队机构募资流程。同时也支持两者兼顾,一部分用于公平发射,另外一部分用于团队预留。
Runes VS BRC20
- 更灵活:BRC20 只能公平发射,不利于团队募资和融资。而 Runes 可以。
- 更方便:BRC20 transfer 时,必须先铭刻,发一笔交易,然后再 transfer,需要很重的外部检索器来溯源历史。而基于 UTXO
- op_return 的 Runes 每个 UTXO 中带着操作码和信息,不需要额外铭刻交易,只需要轻量级的检索器,给 BTC 网络不会造成大规模的小额 UTXO 的粉尘攻击,也给用户节省了交易手续费成本。
- 可以并发:比如一笔交易里带一个 op_return 加 M(M 为整数,比如可以设置为 1000)个地址,一笔交易就能平均发送给 M 个用户。这有点类似于微信红包基础送红包功能。
Runes VS ERC20
- erc20 的地基是 ETH,Runes 的地基是 BTC,Runes 的地基更牢固。
- erc20 从 2016 年以来,已经有很多闭环的商业和很大的生态,Runes 还没正式开始,erc20 有先发优势和规模效应。
- Runes 更新,币圈有个说法叫做炒新不炒,Runes 更有时髦性,有更大的成长空间。
- Runes 兼容铭文 brc20 的公平发射,这是这一轮加密周期里最重要的资产叙事。
- erc20 有图灵完备的 EVM 主网支撑其商业闭环,但 Runes 可以利用 BTC Layer2 来完成以太坊的图灵完备带来的商业逻辑。据了解,BTC L2 龙头项目 BEVM 很早就宣布会第一时间接入 Runes 协议,允许用户将 Runes 协议资产跨到二层网络上来做商业应用。
Runes 发币协议的一些细节
Deploy
通过构造 op_return 中带有如下信息的交易来实现符文的部署。
在 Deploy 交易中,可以在 op_return 中同时带有如下信息来实现部署的同时项目方预留代币
部署的符文有 3 种启动方式:
- term 设置为 0,带有 Edict,代表部署的符文全部在项目方手中
- term 不为 0,不带有 Edict,代表项目方不预留符文,在满足 deadline 和 term 两个约束条件时可以 fair mint
- term 不为 0,带有 Edict,代表项目方预留符文,在满足 deadline 和 term 两个约束条件时可以 fair mint
Mint
满足约束条件下,只需要在 op_return 中带有如下信息,即可实现 mint,mint 的数量在部署的时候已经进行了限定
pub struct Runestone {
// 符文 id, 在部署的时候自动唯一确定
pub claim: Option<RuneId>
}
Transfer
输入利用带有符文的 utxo,然后利用 op_return 带有 Edict 信息,指定转账到哪一个 utxo
#[derive(Default, Serialize, Debug, PartialEq, Copy, Clone)]
pub struct Edict {
pub id: RuneId, // 符文 id, 在部署的时候自动唯一确定
pub amount: u128, // 指定数量
pub output: u128, // 指定符文 transfer 到指定输出
}