NLINK:教程:通过Chainlink预言机构建参数化保险智能合约

区块链技术具有独特的属性,可以用来创建创新性的去中心化保险产品,为保险供应商和客户带来诸多好处。在本技术教程中,我们将向您展示:去中心化参数化保险合约的主要特点为什么Chainlink预言机在这些新的保险产品中起着举足轻重的作用在去中心化保险合约中使用ChainlinkPriceFeed的优势如何把所有的东西放在一起,创建一个可用的参数化作物保险合约如何使用Chainlink节点来自动更新保险合约下面例子的完整代码可以在Remix或GitHub上查看,包括下面提到的所有功能以及所有需要的帮助函数。去中心化保险

去中心化保险利用区块链技术和智能合约来取代传统的保险协议。去中心化保险产品主要有三大特点。数据驱动的自动化

去中心化保险合约最重要的一点是,它是数据驱动和自动执行的。这意味着保险合约在不需要人工干预的情况下自动执行逻辑,依靠从外部获取的安全准确的数据来决定合约逻辑的执行。这些保险智能合约还可以与外部输出连接,如支付处理器或企业财务系统,以方便触发支付。智能合约

智能合约代表了保险人与客户之间的保险合同,它实质上是保险人对客户指定类型的损失、破坏或责任进行赔偿的承诺,如果是参数保险,则是对冲特定事件发生的风险。它包含了保险合同的所有细节,如指数、客户支付的细节、合同日期或期限、指数的测量地点、阈值和商定的赔付值。由于保险合约存储和执行在通常运行在大量节点上的区块链上,因此它具有高度确定性,不容易被黑客攻击或篡改。理赔流程

与传统的保险合同不同,去中心化保险合约中,理赔过程是作为合约执行的一部分自动处理的。客户不需要提交理赔,不需要提供任何证据,也不需要与保险公司或智能合约有任何互动。当智能合约认为应该发生赔付时,赔付将作为合约执行的一部分自动触发。这可以通过直接向客户进行链上支付,也可以通过智能合约连接的外部支付通道或金融系统来完成。创建数据驱动的参数化保险合同

现在,我们已经了解了什么构成了一个去中心化的参数化保险合约,我们将通过构建一个简单的例子来展示上述三个概念。在这个场景中,我们将创建一个具有以下属性的参数化农作物保险合约:如果在指定时间内没有降雨,合同将向客户支付约定的价值,目前设置为三天,以便于演示。合同将从两个不同的数据源获取降雨数据,以缓解任何数据完整性问题,然后对结果进行平均。该合约将以相当于美元价值的ETH全额出资,用于约定的赔付金额,以确保在触发索赔时的完全确定性。它将使用ChainlinkETH/USDPriceFeed来确定合约所需的ETH数量。

动态 | 观点:比特币减半事件是对整个资产类别核心投资理论的考验:区块链研究公司Smith+Crown研究总监Matt Chwierut在最近的文章中考虑了区块链领域的关键发展,这些发展可能会影响一年内价格走势的确定,例如比特币减半事件。他表示,无论减半是否有助于比特币的价值上升,鉴于比特币在整个领域的巨大影响力,这一事件很可能在未来一年成为更广泛的加密市场的主要决定因素。他还谈到这一事件是如何逐渐“形成对整个资产类别核心投资理论的考验”,特别是针对这样一种集体信念,即由整个国家能源消费维持的稀缺工具可以作为一种货币价值储存手段被人们接受。他指出,减半事件没有100%的好结果。熊市将深刻动摇加密货币已准备好被全球接受的信念,牛市将增强那些相信比特币将面临更大泡沫的人的信心。此外,一个矛盾的市场将暗示人们对该资产类别的厌倦。他补充说,这将是进入加密货币十年的关键时刻。他谈到比特币主导地位的逆转将意味着该领域其他资产的价值增加,这反过来将“表明区块链技术的更广泛应用将带来比比特币本身更大的市场舒适度。”如果这种趋势在2020年出现,对它的认识将推动其加速发展,“产生的递归影响最终可能被证明影响深远。”(AMBCrypto)[2020/1/20]

去中心化保险架构建立保险合约工厂

首先,我们需要创建一个主"合约工厂"合约,它将生成多个保险协议,并允许我们与它们进行交互。这个合约将由保险公司拥有,并为每个生成的保险合约提供足够的ETH和LINK资金,以确保保险合约一旦生成,就能在其整个存续期内执行所有需要的操作,包括赔付。首先,我们的Solidity代码包含两个合约,一个是InsuranceProvider合约,一个是InsuranceContract合约。InsuranceProvider合约会生成很多保险合约。InsuranceProvider合约的构造函数初始化了Kovan网络上的ChainlinkETH/USDPriceFeed。InsuranceContract合约的构造函数定义如下,后面会进一步充实。

InsuranceProvider合约的一般结构如下:每个生成的合约都存储在保险合同的`contracts`map中以生成的合同的Ethereum地址作为键。值是一个实例化的InsuranceContractSolidity智能合约。

声音 | 中国通信工业协会王东:比特币的出现打破了价值创造的方式:针对数字经济和区块链,中国通信工业协会数字经济分会副会长王东表示,数字营销、数字工厂、数字商业、数字金融只是数字经济的一部分。数字经济的到来是因为数字信用的产生,形成数字的生态。比特币的出现打破了价值创造的方式,采用分布式去中心化的技术,不可篡改的属性使得群体形成了对它的共识,这种共识在群体中形成价值的流动。(科技快报)[2020/1/9]

`newContract`函数接收所需的输入并生成一个新的保险合约,按照之前定义的构造函数定义传递所有所需的参数。它还会发送与支付金额相等的ETH,从而使生成的合约资金充足。它使用ChainlinkETH/USDPriceFeed来完成这个转换。然后,它将生成的合约存储在`contracts`map中,并将足够的LINK传输到生成的合约中,这样它就有足够的数据请求每天两次,并且有一个余量。这个余量是为了考虑到合约到期后可能需要额外调用的时间问题。当合约结束时,任何剩余的LINK都会被返还给保险提供商。

`updateContract`函数用于更新保险合约的数据,并检查是否达到了触发付款的阈值,或者合约是否已经到了结束日期。

最后,`getContractRainfall`函数用于返回给定保险合同的降雨量,`getContractRequestCount`函数用于查看有多少数据请求成功地传回保险合约。

获取外部数据

生成的保险合约需要获得外部数据才能正常执行。这就是Chainlink网络发挥作用的地方,因为你可以使用它将保险合约连接到多个降雨数据源。在这个例子中,我们将在两个不同的Chainlink节点上使用JobSpecification,从两个不同的天气API中获取数据,然后将在链上取平均值来得出最终结果。这两个天气API都需要注册获得一个免费的API密钥在每个请求中使用。-WeatherBitWeatherAPI-LinkPoolGET>Uint256Job-SteelblockGET>Uint256Job一旦我们记下了WeatherAPIkey以及上面的JobSpecificationId和oracle合约,我们现在就可以创建`InsuranceContract`合约,填写所需的常量字段。在生产场景中,这些常量字段会被私有存储在Chainlink节点上,在链上是不可见的,但为了方便跟随演示,它们被留在了合约中。我们还存储了所需的JSON路径,当Chainlink节点从每个API中获取天气数据时,我们要遍历这些路径来找到每日总降雨量。

声音 | 诺贝尔经济学奖:比特币是一个投机泡沫:日前,诺贝尔经济学奖获得者Robert Shiller在接受彭博电视采访时表示,比特币是一种社会现象,其流行性随着美国地理位置的不同而有所差异,西海岸比东海岸对比特币兴趣更浓。他还表示,这是一种狂热的蔓延,是一个投机泡沫,但是这并不意味着比特币会归零。[2018/6/27]

完成保险合约

下一步是完成保险合约,它代表客户和保险公司之间的作物保险合同。该合约被实例化,所有所需的值都传递到构造函数中。它还做了以下工作:使用ChainlinkETH/USDPriceFeed来检查是否有足够的ETH被发送,以确保在触发支付时有足够的资金。设置合约执行所需的一些变量将JobId和oracle数组设置为包含从上面“获取外部数据”部分的两个JobSpecification中获取的值。然而,如果你想运行你自己的Chainlink节点,将两个请求都设置为使用你的JobSpecification和oracle合约,这样就可以看到每个Job的输出。这样做需要在market.link上创建一个新的JobSpecification,和这个例子一样,只需要修改runloginitiator中的地址为你的oraclecontract。

然后,我们创建一个函数来调用,以从每个Chainlink节点和天气API中请求降雨数据。这个函数被主保险提供者合约所调用。它为每个请求建立了所需的URL,然后为每个请求调用`checkRainfall`函数。但在这之前,它调用了一个`checkEndContract`函数来检查合约结束日期是否已经到了,并且只有在合约仍然有效的情况下才会继续。这个`checkEndContract`函数定义如下。

美国司法部制裁勒索比特币的伊朗黑客:据最新消息,美国司法部发布命令制裁一家伊朗公司和九名伊朗黑客,认为他们涉嫌攻击美国的政府机构、大学、私有公司以及盗取石油机密。在上述被制裁的黑客中,有将近一半与去年HBO数据被盗以及勒索比特币赎金有关。据悉,去年夏天HBO宣布被盗,其重要作品《权利与游戏》丢失大量数据。美国司法部在11月对伊朗人Behzad Mesri提起诉讼,指控他参与伊朗军方的黑客项目。而HBO未声明是否缴纳赎金,只是宣布提供25万美元“善意金”。[2018/3/24]

现在我们可以创建`checkRainfall`函数。这是实际执行外部数据请求的函数。它接收所有需要的参数,建立一个请求,然后将其发送到指定的Chainlink节点oracle合约。在我们的演示中,传递到`checkRainfall`函数中的`_path`变量的值用来遍历请求返回的JSON的路径,找到当前的降雨量。这些值取决于调用哪一个天气API,这两个选项都存储在我们的合约中的静态变量中,并根据需要传递到`_path`函数参数中。WorldWeatherOnlineAPIresponseformatWeatherbitAPIresponseformat

然后,我们创建一个回调函数,当Chainlink节点发回响应时调用。这个函数接收指定位置的更新雨量数据,如果是第二次数据更新,则执行取平均计算,然后用最新的雨量数据更新合约。回调函数还根据当前合约的降雨量数据检查是否实现了参数化损失。本例中,它根据给定的阈值检查连续无雨天数。如果满足赔付条件,则调用`payoutContract`函数。

接下来我们创建`payoutContract`函数。这个函数作为理赔处理步骤,执行保险人向客户自动支付约定的价值。我们在这里格外小心,确保它只能在合约仍处于激活状态时被调用,并且只能被其他合约函数在内部调用。它还将任何剩余的LINK返回到保险提供商主合同,并将合约设置为已完成状态,以防止对其进行任何进一步的操作。

}最后,我们创建一个函数来处理这样的场景:合约结束日期已经到了,还没有触发支付,我们需要归还合约中的资金,然后标记为结束。该函数执行检查整个合约是否收到足够的数据请求。每天需要收到一个数据请求,总计只允许漏掉一个请求。因此,如果合约的持续时间为30天,则必须有至少29个成功的数据请求。如果合约在其生命周期内收到足够的请求,所有资金将被退回给保险供应商。否则,如果在整个合约的存续期内没有足够的数据请求,客户就会自动收到作为退款的保费,而保险商则会拿回任何剩余的资金。这个方案还利用ChainlinkETH/USDPriceFeed来确定正确的ETH数量,将其返还给客户。这个检查给客户一定程度的保证,保险提供商不会试图通过不更新降雨量数据来玩弄合约,直到达到结束日期。该函数还将返回任何剩余的LINK回保险提供商合约。

部署和测试合同

首先,我们需要部署InsuranceProvider合约,并用一些ETH和LINK为其提供资金,以便在生成的InsuranceContract合约中使用。完成这些工作后,我们就可以创建一个新的InsuranceContract,传递所需的值。请注意以下几点。持续时间的单位是秒在这个演示中,1天被缩短为60秒,所以合同期限300秒代表5天。premium和payoutValue参数以美元为单位,乘以100000000,例如100美元就是10000000000。

创建一个新的保险合同当保险合同生成后,我们可以通过Etherscan中的交易或通过交易输出获取其地址。

在Etherscan上查看生成的合同然后,我们可以将生成的合同地址,传入`updateContract`函数,开始将降雨量数据传入合同中。

更新保险合约当两个Chainlink节点都处理了作业请求并返回一个结果后,我们就可以调用`getContractRainfall`和`getContractRequestCount`函数来查看平均降雨量的更新,以及数据请求数的增加。一个数据请求意味着两个节点都返回了一个结果,取平均值之后存储在合约中。在本例中,爱荷华州目前两个数据源的平均降雨量为0.6mm。我们还可以调用帮助函数`getContractStatus`来验证合同是否还处于活动状态。

获取保险合约的状态在合约有效期内,每天应重复此步骤,结束合约。如果无雨天数达到`DROUGHT_DAYS_THRESHOLD`中设置的阈值,合约将向客户支付约定的金额,合约状态结束。为了达到演示的目的,我们又为一个没有降雨的地点创建了一个保险合约,并在三分钟内重复上述步骤三次,以演示在赔付时发生的情况。在这个案例中,我们可以看到最新的降雨量为0,请求次数为3,合同不再处于活动状态。

获取保险合同的状态如果我们再去以太坊上检查该合约,就会发现约定的美元ETH赔付值已经转回了上面创建合约时指定的客户钱包地址,而保险合约已经不再持有任何ETH或LINK。由于保险合约现在处于完成状态,所以后续对保险合约的任何操作都会被拒绝。

验证保险合约的支付情况自动更新数据

在当前版本的合同中,必须有人手动调用`updateContract`函数来让合约与Chainlink节点通信并获取降雨量数据。这并不理想,因为它需要在整个合约期限内多次调用。一个好的自动化方法是利用Chainlink节点的croninitiator。croninitiator是一种使用简单的cron语法在Chainlink节点上调度循环Job的方法。在这种情况下,我们可以做的是在Chainlink节点上创建一个新的JobSpecification,使用croninitiator每天触发一次JobSpecification。但为了本演示的目的,我们将根据前面提到的常量SECONDS_IN_DAY,将其设置为每分钟触发一次。JobSpecification的剩余部分将简单地在每次Cronjob触发执行JobSpecification时,调用部署的智能合约`updateContract`函数。这个想法是,保险前端将拥有所有相关的细节,并可以将它们传递进来。

我们的想法是,去中心化的保险应用前端将向Chainlink节点API发送请求,动态生成新的JobSpecification,并提供节点自动开始定期更新保险合同所需的所有正确细节,而不必通过Chainlink节点前端接口手动创建这个工作规范。要做到这一点,首先我们需要Chainlink节点的IP地址和端口,以及登录节点的用户名和密码。这些都是用来生成下一次请求的cookiefile。

完成了这些工作后,我们会得到一个响应,以显示认证成功。

然后我们可以向Chainlink节点API发送另一个POST请求,这次是向/v2/specs端点发送。请求中的JSON是定期更新的生成的保险合约的地址,以及开始和结束的日期/时间,这样节点就知道什么时候停止定期更新保险合约。

这个命令会在返回一个成功的消息,其中包含了生成的JobSpecification的细节。在这之后,你就可以登录到Chainlink节点前端,并看到新创建的JobSpecification。

Cron启动器工作规范语法JobSpecification创建后,它就会按照croninitiator中设置的参数开始执行请求。我们可以在Chainlink节点前端监控到这一点。

节点成功地完成了请求后可以回到智能合约,看到它的状态已经成功更新。

总结

在这篇技术文章中,我们已经演示了如何建立一个去中心化的作物保险产品,以补偿农民的干旱期。我们已经展示了保险合约拥有准确和去中心化数据的重要性,以及Chainlinkoracles在安全提供这些数据方面的作用。我们还演示了如何利用连接到外部数据和事件的确定性智能合约来彻底降低处理保险理赔的开销和管理成本,以及在合约条款以美元为基础却以加密货币支付的情况下,如何利用Chainlink去中心化喂价送来准确确定正确的赔付金额。最后,我们还演示了Chainlink节点croninitiator如何与Chainlink节点API结合使用,以自动安排和执行智能合约更新。虽然这个演示包含了许多功能,但它可以作为一个基本模板来构建一个完整的、功能丰富的去中心化保险产品。开发者可以在这个模板的基础上以各种方式进行构建,比如去掉人工数据聚合,利用Chainlink的聚合器或PreCoordinator合约。另一种选择是将保险合约证券化,并将其作为DeFi生态系统或其他市场的抵押品。如果您是开发人员,并希望将您的智能合约连接到链外数据和系统,请访问开发文档并加入Discord上的技术讨论。如果您想安排电话讨论更深入的集成,请在这里联系。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:15ms0-6:685ms