Polkabtc Project
参与BTC跨链项目
开篇
选择支持该项目的原因:
- 相信BTC
- 相信PolkaDot
- 我们需要去中心化交易所
项目介绍
PolkaBTC 项目是建立在PolkaDot基础上的一条平行链,用来桥接BTC Chain,采用XCLAIM协议,将BTC跨链桥接到PolkaDot生态系统中,代币名为PolkaBTC,BTC资产被锁定在BTC链上,并在Polkadot系统中铸造以1:1为比例锚定BTC的代币PolkaBTC,PolkaBTC像所有PolkaDOT生态中的原生代币一样能够在各个平行链之间相互转换,并且PolkaBTC 桥接项目没有中心化风险,像企业,社区,个人都可以参与到运行BTC平行链的队伍中。
组件
-
XCLAIM (BTC,DOT)
该组件实现了四种应用协议,分别为issue,transfer,redeem,replace,维护着整个PolkaBTC代币系统。
-
BTC-Relay
该组件被用于检查和确认在BTC链上发生的交易,比如当用户铸造一个新的PolkaBTC代币,等量的BitCoins将被锁定在BTC链上,之后用户的交易记录可以被BTC-Relay组件捕获和确认。
从上图中可以观察到,User -> (lock Bitcoin) -> BTC-Relay -> verify-Transaction -> XCLAIM -> Issue-PolkaBTC
用户锁定BTC,BTC-Relay确认该锁定交易,并保存BTC区块头,XCLAIM 铸造锚定币PolkaBTC,用户获取未锁定的BTC锚定币PolkaBTC。
我们具体看XCLAIM 具体的实际流程图:
-
(Issue) 用户会将Bitcoin打给Vault (我们可以认为它就是一个去中心化银行系统),Vault 收到用户打款的资产之后,将会锁定该资产,并通知PolkaBTC系统中的智能合约确认该笔交易,如果确认通过,用户将获得与BTC等价的PolkaBTC Token。
-
(Transfer & Swap) 交换和转发代币,发送者和接受者只需要通过智能合约来完成这一操作。
-
(Redeem) 用户赎回对应的BitCoin,用户请求解锁操作给智能合约,智能合约接收到解锁事件之后,请求Vault解锁相应的BitCoin,Vault确认可以解锁,最后用户将收到BitCoin,并将销毁对应的等量PolkaBTC代币。
参与者
-
Vaults 可以称之为保险库,类似我们生活中的中心化银行,只不过它是去中心化的,运行Vaults需要质押一定数量的DOT代币,它们接收和持有来自交易用户的BitCoin,当用户需要销毁PolkaBTC Token时,Vault将解锁相对应的BitCoin,发送到对用用户的地址。
-
Users 用户包括,请求者(质押BitCoin,希望获得PolkaBTC),发送者和接受者,赎回者。
-
Staked Relayers 运行比特币全节点的抵押机构,监控BTC链上的交易,监控Vault是否有作弊和偷盗行为,如果发现Relayer将会通知BTC平行链,如果Relayer停止运行,则PolkaDOT和BTC之间的桥梁就会中断。
-
Governance Mechanism 治理机制,监控整个BTC平行链的操作安全,包括Staked Relayers的正确行为,当Staked Relayers出现错误行为时,采用安全策略,手动干预BTC平行链上的所有模块。
模块架构图
PolkaBTC 总共分为七个模块:
-
Oracle 预言机,用于连接中心化交易所和去中心化交易所的纽带,获取代币交换的汇率。
-
Treasury 财政模块,用于管理用户的PolkaBTC资金库。
-
VaultRegistry 用于保存保险库的相关信息,
-
Issue Redeem Replace 铸币,赎回,转移的协议接口。
-
StabilizedCollateral 处理金库抵押,稳定汇率,以及自动清算。
-
BTC-Relay 跟踪BTC主链,并验证交易。
-
Parachain Governance 保持BTC平行链的正确运行,并在必要时干预或者停止运行。
框架
竞赛部署
准备工作,启动bitcoin testnet全节点。
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: bitcoin-testnet-full-node
namespace: polkadot
labels:
app: bitcoin-testnet-full-node
spec:
serviceName: "bitcoin-testnet-node"
selector:
matchLabels:
app: bitcoin-testnet-full-node
template:
metadata:
labels:
app: bitcoin-testnet-full-node
spec:
nodeSelector:
localpv: "true"
containers:
- name: bitcoin-testnet-full-node
resources:
limits:
memory: 7Gi
cpu: 4
requests:
memory: 2Gi
cpu: 1
image: 192.168.1.114:5000/bitcoin:0.21.1
env:
args:
- bitcoind
- -datadir=/data
- -testnet
- -server
- -par=1
- -maxuploadtarget=200
- -blocksonly
- -rpcuser=user
- -rpcpassword=password
- -fallbackfee=0.0002
- -rpcallowip=0.0.0.0/0
- -rpcbind=*
volumeMounts:
- name: bitcoin-testnet-node-database
mountPath: /data
volumeClaimTemplates:
- metadata:
name: bitcoin-testnet-node-database
spec:
accessModes:
- ReadWriteOnce
storageClassName: openebs-hostpath
resources:
requests:
storage: 500Gi
---
apiVersion: v1
kind: Service
metadata:
name: bitcoin-testnet-node
namespace: polkadot
spec:
ports:
- port: 18332
targetPort: 18332
name: test-node
selector:
app: bitcoin-testnet-full-node
---
apiVersion: v1
kind: Service
metadata:
name: bitcoin-testnet-node-port
namespace: polkadot
spec:
type: NodePort
ports:
- port: 18333
nodePort: 30183
selector:
app: bitcoin-testnet-full-node
BTC 全节点同步完成之后,启动staked-relayer
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: polkabtc-staked-relayer
namespace: polkadot
labels:
app: polkabtc-staked-relayer
spec:
serviceName: "polkabtc-staked-relayer"
selector:
matchLabels:
app: polkabtc-staked-relayer
template:
metadata:
labels:
app: polkabtc-staked-relayer
spec:
containers:
- name: polkabtc-staked-relayer
resources:
limits:
memory: 7Gi
cpu: 4
requests:
memory: 2Gi
cpu: 1
image: 192.168.1.114:5000/polkabtc-client-testnet:0.7.11
env:
- name: RUST_LOG
value: info
args:
- staked-relayer
- --bitcoin-rpc-url
- http://bitcoin-testnet-node:18332
- --bitcoin-rpc-user
- user
- --bitcoin-rpc-pass
- password
- --keyfile
- /keyfile.json
- --keyname
- polkabtcrelayer
- --auto-fund-with-faucet-url
- https://beta.polkabtc.io/api/faucet
- --telemetry-url
- https://beta.polkabtc.io/api/telemetry
- --btc-parachain-url
- wss://beta.polkabtc.io/api/parachain
volumeMounts:
- name: keyfile-json
mountPath: /keyfile.json
subPath: keyfile.json
volumes:
- name: keyfile-json
configMap:
name: polkabtcrelayer-keyfile-json
启动 polkabtc vault
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: polkabtc-vault
namespace: polkadot
labels:
app: polkabtc-vault
spec:
serviceName: "polkabtc-vault"
selector:
matchLabels:
app: polkabtc-vault
template:
metadata:
labels:
app: polkabtc-vault
spec:
nodeSelector:
localpv: "true"
containers:
- name: polkabtc-vault
resources:
limits:
memory: 7Gi
cpu: 4
requests:
memory: 2Gi
cpu: 1
image: 192.168.1.114:5000/polkabtc-client-testnet:0.7.10
env:
- name: RUST_LOG
value: info
args:
- vault
- --bitcoin-rpc-url
- http://bitcoin-testnet-node:18332
- --bitcoin-rpc-user
- user
- --bitcoin-rpc-pass
- password
- --keyfile
- /keyfile.json
- --keyname
- alexchenfeng
- --auto-register-with-faucet-url
- https://beta.polkabtc.io/api/faucet
- --telemetry-url
- https://beta.polkabtc.io/api/telemetry
- --btc-parachain-url
- wss://beta.polkabtc.io/api/parachain
- --network=testnet
volumeMounts:
- name: keyfile-json
mountPath: /keyfile.json
subPath: keyfile.json
volumes:
- name: keyfile-json
configMap:
name: test-keyfile-json
竞赛结果:
其中的SLA指标至关重要,全名: Service Level Agreements,Vault和Staked-relayer都拥有该分数值,取值范围在0~100之间,分数越高,Vault和Staked-relayer将获得更多的收益,如果一个Vault或者Staked-relayer SLA值低于某个阀值,它们将会受到惩罚,惩罚程度可以分为,没收一定数量的质押金,全额没收质押金,被系统禁止。
以下行为会提高Vault SLA:
-
Execute Issue 发行代币
-
Submit Issue Proof 提交发行证明
-
Execute Redeem 执行赎回
-
Collateralization 保持抵押率高于安全抵押阀值
-
Execute Replace 执行替换操作
以下行为会降低Vault SLA:
-
Fail Redeem
-
Fail Replace
-
Liquidation
-
Repeated Failed Redeem
-
Repeated Failed Replace
以下行为会提高Staked-relayer SLA:
-
Submit BTC block header 提交有效的BTC区块
-
Correctly report theft 报告偷窃行为
-
Correctly report NO_DATA 报告区块无数据
-
Correctly report INVALID 报告无效区块
-
Correctly report ORACLE_OFFLINE 报告预言机下线状态