宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > FIL币 > 正文

比原链开发者大会 | 比原链首席架构师James:比原链的虚拟机、合约及开发

作者:

时间:1900/1/1 0:00:00

点击蓝字关注比原链公众号

2018年11月17日,“2018比原链全球开发者大会”正式在杭州国际博览中心开幕,这是杭州第一次由开源组织举办的技术型峰会,也是杭州被誉为区块链之城以来规模最大的一场区块链开发者大赛,100+开发团队历经4个月激烈厮杀,16支团队将在本次大会上展开最终角逐。

11月18日上午,比原链首席架构师James带来了题为“比原链的虚拟机、合约及开发”的演讲。

以下为现场速记,巴比特整理发布:

大家好,我今天在这里分享的话题是“PO智能合约”。什么是PO?PO其实就是面向过程式的编程。

首先我来介绍一下过程式编程。在现在的编程语言中,大多数是结构式编程,比如说C++、GO语言。你想做什么事情的时候,其实你是要对对象创建一个抽象的结构体,任何的func其实都是结构体上可调用的函数,以多结构体交互的模式完成复杂的功能。

过程式编程不一样,中间没有结构体的概念,过程式编程只有无数的func,func可以在任何时间被调用,func可以被自身调用,也可以被别的func调用,以一个流程图的形式完成整套过程。过程式编程有经典的作品,比如说Liunx内核、git以及ApacheHTTP服务器,其实都是基于过程式编程来完成的。

声音 | 比原链CEO朗豫:去中心化跨链将是未来公链的突破方向:比原链CEO朗豫今晚做客币看大咖来了。在访谈中,朗豫表示:公链赛道是马拉松, 需要长时间打磨,而且不能为路边的各种光怪陆离所吸引停止脚步,难度还是挺大的。

朗豫称未来公链能突破的很大的方向就是去中心化跨链, 和其他二层网络的应用。技术社区有很多基于二层网络做的存储、云计算等,创意都非常好。公链现在的困境很大一部分是心态问题。[2019/10/17]

Equity是全新的智能合约。之前和很多开发者交流的时候,他们会问我很多问题,比如可不可以直接把以太坊的智能合约放到比原链上跑,或者我想把EOS某个功能在比原链上实现,怎么做?其实Equity有自己的独特特性,所以我今天通过表格的方式来阐述它的特性。

先说最底层的虚拟机。从最底层来说,大多的公链虚拟机都是基于堆栈的形式构成的。虽然不同虚拟机的OP不同,但是架构是相同的。所以回到之前的一个问题,如果你愿意创建一个编译器把以太坊的智能合约编辑成比原链虚拟机的OPCODE,你可以把以太坊合约在比原链上跑,包括EOS合约的原理也是一样的。

第二个重点是合约语言。比原链是面向过程的合约语言,它的特点形成也跟BUTXO相关。我们知道面向过程没有一个结构体、没有一个对象,其实这是天然契合UTXO的模型,我们知道UTXO的特性是我不可能花一半,我只能销毁一个UTXO并且创建一或多个新的UTXO,其实这是一个过程流的模式。这跟以太坊完全不同,以太坊是账户模型,甚至你可以把以太坊账户理解成一个结构体,因为你的账单其实是结构体里的balance。

动态 | 比原链BaaS平台Bystack白皮书正式发布:5月15日消息,比原链今日发布Bystack白皮书《全球首创一主多侧架构BUTXO模型BaaS平台》。据介绍,Bystack是比原链团队首创的一主链多侧链BUTXO模型BaaS平台,能够帮助用户快速创建,管理和维护企业级区块链网络和商业区块链应用的服务平台,为开发者或企业提供区块链能力的一站式解决方案。[2019/5/15]

在上层来说,比原链想做的是资产上链,我们想把任何资产放到区块链上,然后用智能合约进行可信任的交易。比如说你的房产或者公司的股权,以太坊和我们要做的不同,他们想做的其实更像一个虚拟机运行各种合约。所以不同的需求导致了很多事情有差异。

我们为什么设计Equity,为什么我们选用过程式编程?这里有两点:一是安全;二是应用型。

从安全来说,去年Parity钱包被攻击,导致51.37万个ETH冻结。为什么被攻击Parity钱包代码安全,但问题在于它调用底层库,底层库被攻击,导致钱包毁掉。

在以太坊的世界中,其实每一个合约就像一个结构体,是一个指针,在别的合约调用它的时候,通过指针调用func。这里有两个例子,左边米色是比原链合约例子,右边粉色是以太坊上的例子。

比原链CEO段新星回应称“比原链矿机出现大幅降价、算法被破解”为虚假消息:近日,网络上流传出,比原链矿机大幅降价,算法被破解、可用显卡挖矿等消息。对此,比原链CEO段新星表示此消息为虚假消息。同时,段新星还表示,比原链矿机本来就支持GPU显卡、ASIC矿机挖矿,只是效率不同。降价补贴送优惠券等只是比特大陆的优惠活动。[2018/5/3]

比如我们有两个合约,第一个是金库,我们提供的功能是存钱、取钱、贷款,第二个是公司股权,股权可以转让、抵押或者解锁。因为这两个合约涉及到资产转移,所以对数学要求安全,做交易的时候要做易存易出的检测,所以假设我们都有一个数据库保证加减乘除是安全的。在以太坊的世界中,其实库是一个子合约,在金库合约和公司股权合约的时候,它其实是调用合约。如果合约被攻击了,合约毁掉就导致金库合约和公司股权合约崩掉也不能运行。这就是为什么Parity出问题的原因。

左边是Equity基于面向过程形式的合约展示形式,我们也有公司股权和金库两个合约,但是数学检查合约是作为这两个合约的子func存在,这代表了什么?从攻击角度来讲你不可能攻击func,原因是func相同的输入永远会产出相同的输出。而结构体因为内部数据改变,相同的输入会导致不同的输出。

比原链(BTM)上线big.one交易平台 当前已开通BTM/BTC交易对:比原链(BTM)上线数字资产交易平台big.one,当前已开通BTM/BTC交易对。[2017/12/26]

所以说func是定性的,所以在Equity写合约的时候,如果你在合约写成的时候,你确定合约是安全可用的,以后就不会有外部因素让合约失效。

从应用来说。我们这么设计Equity,第一要天然契合UTXO模型特点。因为我们的账户模型很怪,账户要有balance,那在资产流入流出的时候我们要更新账单。但是UTXO其实是没有这个概念,UTXO的概念是什么?它的概念就是我花费了或者我没花费。所以虚拟机只能有两个状态:一个是true和false,就代表这个UTXO是否可以被解锁。也是通过这两个状态,可以保证多资产在原子级操作下可以进行交易。

什么意思?如果我有一万个BTM,我想换一个比特币,双方其实都想得到保障:我的确收到了我的钱,我才付出去。在面向对象的情况下,其实它是用func来保证的,但是Equity在虚拟机底层通过两个合约,都返回特性,再加上交易是原子级,保证任何情况下交易都能得到真正的互换,还不会说钱已经打给了A,但是A的钱没有过来的情况。

比原链项目周报 开发和业务进展:开发进展:1. 调整reactor 结构,代码结构功能分离, 增加可配置挖矿问题;2.为提升core性能而改造utxo成为递增存储的模式, 并测试;3.完成了包含program的ivy模板合约的锁定解锁交易,并进行了相关的单元测试;4.整合accountDB和assetDB到walletDB(代码放在walletDB分支), 跟踪部分github上bytom issue并解决;5. 设计钱包管理方案及wallet, account, asset代码整理;6. [dev] PoW算法性能优化,理论证明的计算机验证已经完成, 写论文中;7.客户端产品UI设计和交互研究,完成基础交互原型图;8. block_keeper 中有个for 协成没有catch 住signal 信号 (issues#94);9. windows 平台编译不通过BUG (issues#153)。业务进展:1. 比原链CTO朗豫拜访西南交通大学密码学研究工作组,对关于AI PoW算法的证明和研发工作进行沟通和交流,预期将在月底前完成论文撰写并发表;2. 比原链CTO朗豫周六参加“Chainge“ 技术沙龙第三期-揭秘区块链发展, 演讲主题《从0到1开发公有链》,分享比原链开发的经验。[2017/12/12]

下面聊一下比原链上的进阶合约的开发。其实这也是平时跟大家交流时候会碰到的问题。

首先是自身锁。我看Equity上大多数应用只是涉及到一个合约,什么意思?比如说BB交易,我把一些资产锁在合约上,如果谁愿意跟我交易那就交易,其实合约只存在一个UTXO中,UTXO过去就解锁了。我怎么样能够做一些复杂的情况,比如我想众筹一万个BTM,这肯定不是通过一个人来做,可能是多方共同众筹。

在结构式编程上,因为结构体上有一个账单,我只要更新账单,就能更新合约总额。但过程式编程并没有账单概念,所以我们可以想另外的方法,那就是我们的合约可以有多种解锁方式,最普通的是两种:

第一,成功提供所有解锁条件,合约成功解锁。

第二,我没能解锁合约,资产锁在的原有UTXO不动;自身锁是第三种概念,我有一个条件,你可以解锁它,但是解锁之后的资产锁回相同的合约之中。

为了更好说明,我做了一个例子。这是公益众筹,众筹条件是我需要在指定条件内众筹1万个BTM,这样的众筹才是成功的。UTXO#1就是第一个众筹的参与者,他自己把3千个BTM锁到UTXO当中,以智能合约形式。

因为我们是流程图形式,所以这两个合约有两个解锁方面:

第一,我到3天了,并没有募集足够的资金,原路退款。

第二,我是第二个人,我认为这个公益很有意思,我想参与进去,所以我从自己的账户中付出4000BTM,4000BTM同时解锁第一个UTXO#1,UTXO#1加上4千个BTM,同时锁到了UTXO#2中,那就是7千BTM。在UTXO#1智能合约中其实有一个检测制度,来保证UTXO#1解锁前必须要到锁到UTXO#2,不能锁其他的UTXO,不然的话其他人就会来攻击把钱拿走了。第三个人过来了,认为这件事情很有意义,他自己也出3000BTM成功创建UTXO#3,众筹完成。

众筹完成之后可以进行条件性解锁,比如说发给需要的人。当然在流程图中,其实UTXO#1、UTXO#2、UTXO#3都可以进行原路退款,如果达到时间、钱没有到账的情况下。

扩展性。如果在某种情况下,我的合约很复杂,怎么办?可能我的合约有一百万行代码,我不可能放在一个UTXO中,这实在太大了,因为我们知道区块体系有上限。代码上限达到,怎么办?这里可以利用pay-to-Script-hash的特性,其实就是比特币两种地址之一。比特币一种地址是Pay-to-Script-hash,即付给你的公钥的hash,第二是付给你一个智能合约的hash。如果你的合约特别大,你可以把它进行模块拆分化。模块拆分化,可能拆成一百个模块,每一个模块有hash。每一个模块之间的调用就是用hash调用,有兴趣可以会后交流。

第二个概念,平行互锁。一个UTXO只能锁定一种类型的资产,如果我想要做多种类型的资产,怎么办?比如我有20种资产,我要做互相锁定的交易,这时候就用平行互锁。平行互锁是什么意思?正常一个UTXO解锁的时候,我管我自己就可以了,但是平行互锁是说我知道有哪些智能合约跟我相关,如果我要解锁我自己,我不仅要满足自身解锁条件,并且要认证所有跟我相关的合约全部得到解锁并满足指定条件。其实并行互锁可能会涉及到很多的资产,我在这里做两个资产,让大家简单了解一下。

比如说借贷,我可能拿了公司10万股权去进行抵押贷款,有50万个BTM。规则是什么?我可以在任意时间偿还借贷。如果到时间我不偿还,公司当然有权利把我的股权拿走。这里面涉及到两个合约:

第一个UTXO,它其实是锁定你的股权,就是借贷方的抵押股权全部锁定在这里。

第二个UTXO,更多是还款合约,代表你还了多少钱。

这是怎么工作的?比如说我有一天说我手头比较宽裕,我愿意还30%3万股权的贷款,那么我自己就同时解锁两个UTXO。

UTXO#1就是要把15万BTM打到UTXO#4的账户里面,另外我自己要建立UTXO#3,就是把我的一部分股权解锁出来。互锁怎么锁?就是在UTXO#1和UTXO#2两个智能合约中,它们其实都会做一些检测,检测UTXO#1保证UTXO#4存在,UTXO#2要保证UTXO#3是存在的。通过这种互锁的方式,保证没有任何一方可以作弊,以这种形式存在。

由于今天时间比较紧,我把一些信息浓缩了。我们在明天会上线1.0.7的版本,解锁了更多Equity合约更强大的功能,欢迎大家使用开发,同时希望大家给我们提更多更好的意见,让我们做出更好的合约编译器服务你们,让你们通过更好的合约,让资产更好在比原链上流通。谢谢大家,这是我今天的演讲。

标签:比原链BTMUNCFUN比原链币是不是主流币BTMC价格Punch TokenGFUN币

FIL币热门资讯
采访“僵尸战场”游戏总监Roy Shapira?—?— 第二节:僵尸技能大解密

RoyShapira是“僵尸战场”的游戏总监。他接受了社区活跃成员Extranji的采访,谈论了为游戏创造每张新卡牌的过程。这是我们将要发布的系列采访的第二节。在本文中,Roy会谈论一些僵尸的技能以及它们的原理.

1900/1/1 0:00:00
Bottos + 大数据,没有坑爹,只有暖心

日常生活中大家有没有这样的迷思:为什么在一个购物App上看了啥,第二天在另一个购物App上竟然就好几个类似推荐?为什么手机移动终端App的推荐建议总是那么恰如其分的戳中了我们的点,让你感觉超级暖心?其实这都是大数据给您带来的不同感受.

1900/1/1 0:00:00
关于 DEL 暂停充、提币的公告

亲爱的Bit-Z用户: 因项目方技术维护,Bit-Z已暂停DEL充、提币服务,待调整完成后将尽快开放,请留意官方公告。由此给您带来不便,敬请谅解.

1900/1/1 0:00:00
因CMT钱包升级,暂停CMT充提币的通知

亲爱的用户, 接CyberMiles(CMT)官方通知,CyberMiles主网将于2018年11月13日北京时间约20:00进行主网软件升级.

1900/1/1 0:00:00
【系統】BCEX即將開啟火山幣(VTK)權益代幣PVTK售賣

尊敬的BCEX用戶: ????????為進壹步擴大BCEX的全球化發展,響應全球用戶需求,具有合法證券發行和交易許可牌照的瓦努阿圖國家數字證券交易所現已頒發給BCEX副牌照,並具備搭建交易網站的資格.

1900/1/1 0:00:00
DragonEx平台11月8日龙币分红公告

DragonEx平台11月8日龙币分红公告 2018-11-09 1DT分红 0.00000016ETH 0.0012USDT 0.

1900/1/1 0:00:00