@lijiang

Sculpting in time

Do one thing and do it well.
Every story has a beginning and an end.

Polkabtc Project

参与BTC跨链项目

3 分钟

开篇

选择支持该项目的原因:

  1. 相信BTC
  2. 相信PolkaDot
  3. 我们需要去中心化交易所

项目介绍

PolkaBTC 项目是建立在PolkaDot基础上的一条平行链,用来桥接BTC Chain,采用XCLAIM协议,将BTC跨链桥接到PolkaDot生态系统中,代币名为PolkaBTC,BTC资产被锁定在BTC链上,并在Polkadot系统中铸造以1:1为比例锚定BTC的代币PolkaBTC,PolkaBTC像所有PolkaDOT生态中的原生代币一样能够在各个平行链之间相互转换,并且PolkaBTC 桥接项目没有中心化风险,像企业,社区,个人都可以参与到运行BTC平行链的队伍中。

组件

  • XCLAIM (BTC,DOT)

    该组件实现了四种应用协议,分别为issuetransferredeemreplace,维护着整个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 具体的实际流程图:

  1. (Issue) 用户会将Bitcoin打给Vault (我们可以认为它就是一个去中心化银行系统),Vault 收到用户打款的资产之后,将会锁定该资产,并通知PolkaBTC系统中的智能合约确认该笔交易,如果确认通过,用户将获得与BTC等价的PolkaBTC Token。

  2. (Transfer & Swap) 交换和转发代币,发送者和接受者只需要通过智能合约来完成这一操作。

  3. (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 总共分为七个模块:

  1. Oracle 预言机,用于连接中心化交易所和去中心化交易所的纽带,获取代币交换的汇率。

  2. Treasury 财政模块,用于管理用户的PolkaBTC资金库。

  3. VaultRegistry 用于保存保险库的相关信息,

  4. Issue Redeem Replace 铸币,赎回,转移的协议接口。

  5. StabilizedCollateral 处理金库抵押,稳定汇率,以及自动清算。

  6. BTC-Relay 跟踪BTC主链,并验证交易。

  7. 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:

  1. Execute Issue 发行代币

  2. Submit Issue Proof 提交发行证明

  3. Execute Redeem 执行赎回

  4. Collateralization 保持抵押率高于安全抵押阀值

  5. Execute Replace 执行替换操作

以下行为会降低Vault SLA:

  1. Fail Redeem

  2. Fail Replace

  3. Liquidation

  4. Repeated Failed Redeem

  5. Repeated Failed Replace

以下行为会提高Staked-relayer SLA:

  1. Submit BTC block header 提交有效的BTC区块

  2. Correctly report theft 报告偷窃行为

  3. Correctly report NO_DATA 报告区块无数据

  4. Correctly report INVALID 报告无效区块

  5. Correctly report ORACLE_OFFLINE 报告预言机下线状态

参考资料

polkabtc-spec

documentation

最新文章

分类

关于

Keep thinking, Stay curious
Always be sensitive to new things