THORChain项目调研

0 前言

实习期间调研的公链跨链项目THORChain——一个去中心化跨链流动性网络,类似于Layer1 Uniswap,分享给大家。

1 THORChain项目调研

1.1 项目团队介绍

THORChain(雷神链)第一次现身是在2018年的Binance Hackathon,THORChain团队在竞赛中以DEX为目标开发了THORChain雏形。在此之后,THORChain团队持续对THORChain的技术进行开发。团队在2021年4月13日正式上线THORChain的测试网络ChaosNet,并计划在2022年1月上线主网,7月之前将网络控制权完全移交给社区。

THORChain的开发团队始终都保持着隐私性,直至今日,THORChain官方始终没有公布开发团队的信息,唯一可知的就是核心团队大概有20人左右构成。目前THORChain有一个官方发言人Chad Barraford,Chad是目前THORChain的CTO,为核心成员之一。

Chad于2019年加入THORChain,曾就读于University of Massachusetts Dartmouth。在2005年毕业后,Chad曾在不同的公司担任软件开发者的职位。Chad在2017年正式了解和进入crypto领域,并在同年创立了自己的第一个公司Cryptocades,Cryptocades利用游戏玩家电脑上的空闲算力来为开采Monero,但是公司在推出Beta版本后快速遇到技术问题,在六个月后关闭。之后,Chad加入了一个叫做Octagon Careers的线上职业申请平台公司,担任CTO的职位,Octagon Careers在五个月后倒闭,随后Chad加入了THORChain。

1

1.2 项目融资概况

市值情况:

1

融资概述:

  1. Seed Round:2018年,未知投资者投资600K USD。在此时间段,THORChain参与了Binance组织的Hackathon;

  2. Private Sale:2019年7月,True Ventures领投1.6M USD;

  3. IDO:2019年7月,220K USD;

  4. 2021年10月,THORSwap完成375万美元融资,IDEO CoLab Ventures领投,True Ventures、Sanctor Capital、THORChain、Nine Realms、Proof Group、0xVentures、Qi Capital等参投。

1.3 产品定位

THORChain目标是创建一个具有激励性的去中心化交易平台(DEX),具有以下特点:

  • 能够跨链交换Layer1币(原生币),比如BTC、ETH;

  • 用户不需要许可就可以加入;

  • 透明、公开的价格,无中心化的第三方;

  • 能够最大化效率的连续流动性池(Continuous Liquidity Pools)。

综上,THORChain可以看作Layer1的Uniswap。

2 技术调研情况

2.1 技术介绍

THORChain是一款基于Tendermint&Cosmos-SDKTSS的区块链。其中,Tendermint是一个拜占庭容错(BFT)共识算法,Cosmos-SDK是一个用于快速构建区块链的框架,TSS是门限签名算法。这3个技术较为著名,网上文档比较多,就不在此赘述了。以下将主要介绍THORChain特有的一些技术。

流动性模型

THORChain作为一个去中心交易平台(DEX, decentralised exchanges),它不同于传统的中心化交易所,它通过流动性模型让用户能以公开透明的价格交易资产,无需依赖第三方。THORChain使用的流动性模型为持续流动性池(CLP, continuous liquidity pools),它与uniswap的流动性模型基本相同。

在THORChain中,有多个流动池,每个流动池由RUNE原生币和其它资产组成。流动池有两类参与者:

  • 流动性提供者(LP, Liquidity Provider)。它们会向流动池提供资产对(注入流动性)并从中获益,比如:向RUNE:ETH流动池中注入10个RUNE和1个ETH。

  • 交易者(Trader)。它们通过流动池进行资产交易,比如:交易者想要用ETH交换RUNE时,可以向RUNE:ETH流动池中,注入(卖出)RUNE,而后提取(买入)ETH。交易者与流动性提供者的一个大区别在于:交易者一次只注入一种资产,从而换取另一种资产,而流动性提供者一次注入 一对(两种) 资产。

1

在流动池中,假设两种资产的数量分别为X和Y,它们需满足一个恒定的公式X * Y = K,其中K是一个常量(LP可以改变这个K)。通过这个公式:

  • 用户能够自动进行交易,示例:假设RUNE:ETH的流动池中,有10个RUNE和1个ETH,那么K = 10*1 = 10。此时一个用户注入了3个RUNE,为了满足公式,池中剩余的ETH应该为K/(10+3) = 10/13 = 0.77,那么用户将兑换得到1 - 0.77 = 0.23个ETH。

  • 资产汇率会趋于市场正常价格,示例:假设起初某个流动性提供者向RUNE:ETH池中注入了10个RUNE和1个ETH,K为10,汇率为10:1。而某个时刻市场实际汇率变为1:1,此时就会有大量投机者向池中注入ETH兑换RUNE,以套取高额利益。比如,投机者可以向池中注入3个ETH,为了满足公式,池中剩余的RUNE应该为K/(1+3) = 10/4 = 2.5,那么投机者将得到10 - 2.5 = 7.5个RUNE,而池中剩余2.5个RUNE和4个ETH,汇率逐渐趋于1:1。

跨链交易流程概述

假设用户需要用BTC交换ETH。

首先,用户需要向BTC上THORChain的 金库(Vaults) 发送一笔交易(THORChain在每个支持的应用链上都有一些金库,其本质是应用链上的一个账户地址)。在这笔交易中,用户需要指定跨链交易的目的链和目标地址。

当THORChain上的节点监听到金库收到一笔交易后,会通过bifrost协议将交易转换成THORChain上的交易,并广播到THORChain网络中。

当超大多数的节点对交易达成共识之后,交易会被执行。在本示例中,交易的类型是跨链交易,交易执行过程中会先从BTC:RUNE流动池中兑换出RUNE,再到ETH:RUNE流动池中兑换出ETH。

最终,THORChain会通过ETH上的金库向目标账户地址发起转账,跨链交易完成。

2.2 核心功能

2.2.1 THORNode

任何人可以向系统交纳担保资金来申请成为节点,请求通常会在几小时内被处理。当申请成功后,节点会加入系统白名单,为系统运行提供服务,并赚取收益。如果节点懒政或作恶,比如不发送交易、不提交区块、或打断签名,将会收到惩罚。节点可以在任何时候申请退出网络,当节点退出网络后,他的押金和获取的收益将会被退回。

一个节点需包含如下三大主要部分:

  1. thornode - 连接THORChain。

  2. bifrost - 用于连接THORChain与应用链的协议。

  3. Full nodes - 应用链的全节点,用于连接应用链。

目前,THORChain网络中有80多个THORNode。

2.2.2 金库

THORChain中存在两种类型的金库,这些金库分布在THORChain支持的各个应用链上,其本质就是应用链上的一个账户地址。

入站金库Asgard vaults

入站金库用于接收用户的入站交易,每个THORChain支持的应用链上,通常都有1个入站金库,各个应用链上入站金库的地址可参考:https://midgard.thorchain.info/v2/thorchain/inbound_addresses

由于入站金库存储着大量资金,它的私钥需要系统中的节点通过门限签名TSS共同控制。任何有关入站金库的签名操作,包括入站交易的验证,都需要超大多数(67%)节点达成共识。由于共识过程较为耗时,为了提高系统效率,THORChain规定每40个节点管理1个入站金库,比如100个节点就有3个入站金库。THORChain会不断检查哪个入站金库更安全,并指示用户向该金库发送交易。

同时,入站金库是用户与THORChain进行互动的入口。用户可以通过对入站金库地址发送交易,来进行相关操作,比如:跨链交易、注入流动性等等。对于一笔发送给入站金库的交易,需包含如下内容:

1
2
3
4
5
6
{
"from":"", // the user
"to":"", // the vault
"amount":"", // the amount to send (swap, add liquidity)
"memo":"", // the transaction intent
}

其中,memo字段标明了用户需要进行的操作和相关参数,其格式如下:

1
2
FUNCTION:PARAM1:PARAM2:PARAM3:PARAM4

FUNCTION决定用户的操作,比如SWAP表示跨链交易、ADD表示注入流动性等。如果是SWAP操作,其格式要求如下:

1

对于类EVM链,memo字段可通过payload传入;对于UTXO链,memo字段可通过输出脚本传入。

如果交易或memo字段格式错误,THORChain将会自动退还资产。

出站金库Yggdrasil Vaults

出站金库用于在目的链上发送交易,在THORChain支持的应用链上都有分布。为了提高出站效率,每个THORNode都运行着一个出站金库,且单独由它管控,金库内的资金为THORNode抵押资金的25%。当节点退出网络时,需要将资金返还给入站金库。

2.2.3 Bifröst协议

Bifrost定义了应用链如何与THORChain连接,它采用单向状态锚定(1-way State Pegs)的方式,从应用类同步状态到THORChain。

每个节点都会运行一个Bifrost服务,它包含Observer和Signer两大模块。

1

Observer会通过THORNode上运行的应用链节点,监听应用链上入站金库的地址,当入站金库收到一笔有效交易时,它会将交易转换成THORChain上的见证交易(witness transaction):

1
2
3
4
5
6
7
8
9
type Tx struct {
ID TxID `json:"id"`
Chain Chain `json:"chain"`
FromAddress Address `json:"from_address"`
ToAddress Address `json:"to_address"`
Coins Coins `json:"coins"`
Gas Gas `json:"gas"`
Memo string `json:"memo"`
}

1

起初,见证交易的状态为pending,节点会将交易广播到网络中,当超大多数(67%)节点对交易达成共识后,交易状态变为finalised。对于finalised交易,系统会按照下图逻辑处理:交易排序,执行交易,指定出站金库,最终生成txOut(记录目的链、目标地址、出站金库等信息)。

1

Signer收到finalised交易后,会通过目标链客户端,将其转换成目标链上的交易,交易通过TSS模块完成签名,最终发送到目标链上。

1

2.2.4 搅动

系统中每3天或每50000区块,或者节点加入/离开网络时,会触发一次搅动(Churning)。

当搅动发生后,会创建新的入站金库,由新节点控制,并将旧金库中的资金转移到新金库中。

在一次搅动事件中,满足以下条件的节点会被移出THORChain网络(但不会超过总节点的1/3):

  1. self-removal: 自己申请退出;

  2. network-removal: 网络中其它节点决定将它移出;

  3. oldest gets removed: 最早提交区块的(最懒的);

  4. accrued slash points for poor node operation: 做坏事被检测出的。

而新的节点会被接入THORChain网络,缴纳担保金额多的节点优先被接入。接入后,节点数量最多比原先节点总数多1。

2.2.5 费用

当用户与THORChain交互时,他们需要考虑3种消耗:

  1. 流动性池的手续费;

  2. THORChain网络资源消耗(共识、处理交易等);

  3. 目的链的网络资源消耗(交易手续费、gas费等)。

对于每笔交易,THORChain会收取两种费用:

  1. 固定的网络费用(Network Fee):用于支付网络资源,包括目的链交易费用。

  2. 动态的流动性费用(Liquidity Fee):用于支付给流动性池。

1

2.3 项目生态现状与趋势

现状:

1

生态系统

1

2.4 产品Dapp体验

跨链交易APP:https://app.thorswap.finance/swap

跨链交易讲解:Navigate THORSwap - THORSwap

跨链交易首页:

1

用户可以同时连接多个钱包,因为跨链交易时需要一个发送一个接收:

1

1

发送跨链交易:

1

1

1

可以在设置中选择“指定接收方地址”,这样只需要连接发出代币的钱包地址:

1

3 参考