通过 Chainlink Proof of Reserve 来验证 BTC 质押资产

智能合约和预言机可以保证链上和链下资产的双向透明,参与者可以在新的框架下实现用户对于自身产品的信任。随着新的金融工具在去中心化金融的生态中不断涌现,对于加密资产来说,急需一个更加稳定的基础设施来保障协议和数据的安全。毕竟,如果所有应用使用的标准不一样的话,就没法在这个模块化的生态中实现端到端的公平透明和最小信任

Chainlink Proof of Reserve(PoR)是一个自动化的解决方案,可以通过去中心化的方式,提供质押物的实时信息,来最大程度帮助协议实现透明性和可验证性。在具体场景中,它可以帮助开发者去验证由链下或者跨链资产支撑的 stablecoins,wrapped 通证和其他资产是否有足额的质押物。

在这篇文章,我们将会了解去中心化验证方式的重要性,同时学习如何借助 Chainlink PoR 来验证 Wrapped BTC 通证的质押物。具体案例在这里,BitGo’s Wrapped Bitcoin(WBTC)

Wrapped 通证和跨链资产的 Proof of Reserve

Wrapped 通证是与其他资产锚定的一种链上资产。不同的 wrapped 资产都通过其特有的机制保证它的价格可以锚定在其所依赖的资产上。传统做法是靠一个不透明的人工流程来保证这个锚定,但是在这个流程中,用户不能够独立验证链上资产。另外一种做法是,一个单一的机构控制资产的发行和供给,但是这种情况下,wrapped 资产无法避免中心化风向和单点失败风险。

Chainlink Proof of Reserve 允许 wrapped 通证产品通过一种新的方式提升它们的安全性和透明度。它们可以使用 Chainlink PoR 这个自动化且实时的验证方式来代替动辄需要数月的人工验证过程。通过使用 Chainlink PoR,Wrapped 通证相关的项目可以在 mint(铸造)机制中加一个额外的安全层,这个额外的安全层可以控制 wrapped 资产的产出,保证流通中的供应量能够反应出链下或者跨链抵押物的供应,以防出现超额抵押的情况。

Wrapped 通证产品还可以使用 PoR 做一个程序电路中的电阻,当储备资产不足以支撑 wrapped 通证供应的时候,暂停 mint 或者 burn 函数,这样做可以避免 mint 出无抵押的通证,而导致的只有部分通证有抵押。

 A diagram showing how Chainlink helps prevent undercollateralized WBTC minting
Chainlink Proof of Reserve 怎样阻止抵押不足的 WBTC 被 mint(铸造)

使用Chainlink Proof of Reserve验证Wrapped Bitcoin

初始化Feeds

import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

contract ProofOfReserve {
    IERC20 public WBTC;
    AggregatorV3Interface internal reservesWBTC;
    /**
     * Aggregator: WBTC reserve and WBTC supply
     * WBTC Address: 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
     * Reserves Address: 0xB622b7D6d9131cF6A1230EBa91E5da58dbea6F59
     */
    constructor() {
        WBTC = IERC20(0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599);
        reservesWBTC = 
AggregatorV3Interface(0xB622b7D6d9131cF6A1230EBa91E5da58dbea6F59);
   }
}

取回数值

//Returns the latest Supply info
function getSupply() public view returns (uint256) {
    return WBTC.totalSupply();
}

//Returns the latest Reserves info
function getLatestReserves() public view returns (int) {
    (
        /* uint80 roundID */, 
        int answer,
        /* uint startedAt */,
        /* uint updatedAt */,
        /* uint80 answeredInRound */
    ) = reservesWBTC.latestRoundData();
    return answer;

}

根据 Wrapped 通证的供应链检查 BTC 的储备资产

//Determines if supply has exceeded reserves
function isWBTCHealthOK() public view returns (bool) {
    return getLatestReserves() >= int(getSupply());
}

总结

随着 Web3 开发者创建的金融产品越来越复杂,一定要有一个值得信赖的,透明并且去中心化的标准。这个标准可以借助区块链,智能合约和预言机极强的透明性,来使用一个自动化过程验证储备资金。

Chainlink Proof of Reserve 提供了一个去中心化的方式来保证 DeFi 协议端到端的透明性和可验证性。当任何人都可以验证一个 wrapped 资产是不是被它所宣传的抵押资产所抵押时,任何储备资金都可以被验证是否足以担保wrapped 资产供应量的以后,web3 才可以建立在一个稳固,可持续而且安全的基础之上。

可以关注 Chainlink 预言机并且私信加入开发者社区,有大量关于智能合约的学习资料以及关于区块链的话题!

Need Integration Support?
Talk to an expert
Faucets
Get testnet tokens
Read the Docs
Technical documentation