LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > 详谈BoHr波尔的智能合约有何过人之处

详谈BoHr波尔的智能合约有何过人之处

2021-02-05 MiningCity开采BTCV 来源:区块链网络

智能合约的理念可以追溯到1995年,几乎与互联网(world wide web)同时出现。因为比特币打下基础而受到广泛赞誉的密码学家尼 克·萨博(Nick Szabo)首次提出了"智能合约"这一术语。从本质上 讲,这些自动合约的工作原理类似于其它计算机程序的 if-then 语句。 智能合约只是以这种方式与真实世界的资产进行交互。当一个预先编 好的条件被触发时,智能合约执行相应的合同条款。

区块链技术本?是?个?向交易的数据的分布式存储?案。但是具体在应?中,以交易基础可以衍?出?常?泛的应?。在这些应?的实现?式,可以通过?系列的程序运?来实现。这样的程序,称为智能合约。由于智能合约的实现是与加密货币?起出的,所以通常算 作区块链技术的?部分,但是其作为区块链的应?层更加合适。智能 合约其实应该称为傻?合约,因为它的执?是通过代码定义,然后程 序????代码执?实现的。所以并不是合约本?有智能,?是指合约的编写可以通过代码的形式预先编写。?旦代码运?,执??法?预。

为了实现智能合约的功能,加密货币通常需要在共识机制??添 加?持。?般实现的?式可以是脚本语?或者是图灵完备的程序语 ?。后者通常需要单独的虚拟机执?来隔绝与其他模块的相关性。 Bohr 的的智能合约执行引擎 BohrVM 采用模块化可拔插的设 计方式,首先开发的是支持 Java 语言的执行引擎 BohrJVM,后 续会提供了支持 Solidity 语言的执行引擎 Bohr EVM。Bohr JVM是为了最大程度利用开源社区在智能合约技术和经验方面的积累,提高智能合约的重用性而借鉴了以太坊的 EVM 的虚拟机。Bohr VM 的智能合约实现完全兼容 Ethereum 的智能合约规范,使用 JAVA 作为智能合约的开发语言,通过微服务的架构设计以及多重安全检查 机制为原生 Java 智能合约执行提供了一个高性能安全的执行沙 盒。

Bohr 拥有非图灵完备的声明式智能合约,这种智能合约被设计 为解释合约期望的目标,支持布尔运算的同时增加了对变量运算和合 约数据存取的支持,不支持栈和跳转类指令,这样既保留了声明式合约语言易于理解、安全性高的优点,又增强了合约语言的表达能力, 同时 Bohr 增强了智能合约内部数据的存储能力,大大提升了声明 式智能合约对复杂应用场景的支持能力。与图灵完备的智能合约相 比,声明式智能合约具有低复杂度、轻量化和高性能的优势,同时降 低了编写难度和出错概率。 Bohr没有账户的概念,Bohr以UTXO 的形式存储在不可篡改的分布式账本的数据单元中。在 Bohr的智能合约语言里,地址定义是一个布尔表达式,可计算出是 true 或者 false 的结果。如 果交易提供的签名是有效的,并且是由指定公钥对应的私钥所产生, 这个表达式计算的结果为 true。智能合约的所有表达式,最终都会计算出一个布尔值,多个子表达式可以通过布尔操作联合起来。例如, 下面这个定义需要两个签名。

["and", [

["sig", {pubkey: "one pubkey"}],

["sig", {pubkey: "another pubkey"}]

]]

为了花费与以上定义地址的资金,必须同时提供两个签名。我们 使用 JSON 来编写表达式,可以使用具备很好支持的、已经过优化 的 JSON 解析器。

"Or" 操作可以用来描述需要提供任意一个公钥所对应私钥的签 名。

["or", [

["sig", {pubkey: "laptop pubkey"}],

["sig", {pubkey: "smartphone pubkey"}],

["sig", {pubkey: "tablet pubkey"}]

]]

可以用以上定义实现在三个不同设备上可以控制同一个 address,这三个设备可能是你的电脑、手机和平板。 地址定义的指令可以嵌套,如:

["and", [

["or", [

["sig", {pubkey: "laptop pubkey"}],

["sig", {pubkey: "tablet pubkey"}] ]],

["sig", {pubkey: "smartphone pubkey"}]

]]

地址定义可以要求一个集合中参与者必须达到某个阈值,例如

2-3 签名。

["r of set", { required: 2,

set: [

["sig", {pubkey: "laptop pubkey"}],

["sig", {pubkey: "smartphone pubkey"}],

["sig", {pubkey: "tablet pubkey"}]

]

}]

上面的表达式意味着任意两个签名便可以使表达式为真。如果一个密钥丢失了,这个地址仍然可用,并且能够修改这个定义,给丢失 的密钥设置一个新值。另外,不同条目可以赋予不同的权重,并可以 设定一个最小权重要求。

["weighted and", {

required: 50,

set: [

{weight: 40, value: ["sig", {pubkey: "CEO pubkey"}] },

{weight: 20, value: ["sig", {pubkey: "COO pubkey"}] },

{weight: 20, value: ["sig", {pubkey: "CFO pubkey"}] },

{weight: 20, value: ["sig", {pubkey: "CTO pubkey"}] }

]

}]

地址定义可以引用其它地址。

["and", [

["address", "ADDRESS 1 "],

["address", "ADDRESS 2"]

]]

这种定义意味着把签名委托给其它地址,这对于构造共同控制的 地址是很有用处的。这种语法给予了用户很多方便,他们能根据自己的意愿去改变他们自己有权管理的那部分地址的定义,而不会影响别的用户。地址定义可以用来配备添加到 Bohr VM 中的数据。

["in data feed", [

["ADDRESS1", "ADDRESS2", …],

"data feed name",

"=",

"expected value"

]]

如果由某地址添加到 Bohr VM 的数据反馈结果与期望值相 等,则表达式的结果为 true。通过指定数据反馈的来源,可以实现 链上预言机功能。利用链上预言机可以扩展出非常强大的功能。

["or", [

["and", [

["address", "ADDRESS 1"],

["in data feed", [["EXCHANGE ADDRESS"], ["EURUSD", "+", "0.200"], ">","1.1500"]]

]],

["and", [

["address", "ADDRESS 2"],

["in data feed", [["TIMESTAMPER ADDRESS"], "datetime", ">", "2016-10-0100:00:00"]]

]]

]]

上面的表达式依赖两个预言机,一个会发布欧元/美元的汇率, 另外一个会发布时间。首先,双方为这个表达式定义的地址准备资金, 向这个地址支付各自相应的份额。然后,如果由兑换地址公布的欧元 /美元汇率加上 0.200 曾经超过1.150,则地址 1 将得到全部资金。 如果在 2020 年 10 月 1 日之前,以上情况没有发生,则地址 2 将得到全部资金。另外一个有趣的例子中,消费者向商人购买货物, 但是他不是很信任商人,如果货物没有发给他,希望钱可以退还给自 己。此时,消费者可以把钱付给用以下方式定义的一个共享地址。

这个定义有效的前提是 FedEx 会在链上存储包裹的单号。如果货物发放了,根据第一个条款,商人可以解锁资金。如果在商定的日 期之前,货物没有发放,消费者可以拿回自己的资金。地址定义可以实现交易查询。假定用户想购买至少 1200 个单元的数字资产,但 是只愿意支付 1000 Bohr,而且他不愿意一直在线等待卖家。他可以只在交易平台发布一个订单,当匹配的卖家出现时,自动完成交易。 他可以按照以下方式创建地址,并发送1000 Bohr 到该地址。

["or", [

["address", "USER ADDRESS"],

["and", [

["address", "EXCHANGE ADDRESS"],

["has", {

what: "output",

asset: "ID of alternative asset",

amount_at_least: 1200,

address: "USER ADDRESS" }]

]]

]]

第一个或条件的含义是用户在任何时候都可以撤销订单,拿回他的Bohr。第二个或条件当满足条件的交易出现后,将Bohr付给委托交易平台,授权它来花费资金。交易平台会公开发布订单信息,卖家可以查看订单列表,生成一个交换资产交易,并且和交易平台一签名。

—-

编译者/作者:MiningCity开采BTCV

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...