点击蓝字关注比原链公众号
2018年11月17日,“2018比原链全球开发者大会”正式在杭州国际博览中心开幕,这是杭州第一次由开源组织举办的技术型峰会,也是杭州被誉为区块链之城以来规模最大的一场区块链开发者大赛,100+开发团队历经4个月激烈厮杀,16支团队将在本次大会上展开最终角逐。
11月18日上午,比原链首席架构师James带来了题为“比原链的虚拟机、合约及开发”的演讲。
以下为现场速记,巴比特整理发布:
大家好,我今天在这里分享的话题是“PO智能合约”。什么是PO?PO其实就是面向过程式的编程。
首先我来介绍一下过程式编程。在现在的编程语言中,大多数是结构式编程,比如说C++、GO语言。你想做什么事情的时候,其实你是要对对象创建一个抽象的结构体,任何的func其实都是结构体上可调用的函数,以多结构体交互的模式完成复杂的功能。
过程式编程不一样,中间没有结构体的概念,过程式编程只有无数的func,func可以在任何时间被调用,func可以被自身调用,也可以被别的func调用,以一个流程图的形式完成整套过程。过程式编程有经典的作品,比如说Liunx内核、git以及ApacheHTTP服务器,其实都是基于过程式编程来完成的。
ForTube与比原链Bytom达成合作,将添加mBTM作为抵押资产:官方消息,去中心化数字资产银行ForTube与比原链Bytom达成合作,将添加mBTM作为抵押资产。双方将在改善流动性和扩大社区方面进一步加强合作。[2021/7/6 0:31:51]
Equity是全新的智能合约。之前和很多开发者交流的时候,他们会问我很多问题,比如可不可以直接把以太坊的智能合约放到比原链上跑,或者我想把EOS某个功能在比原链上实现,怎么做?其实Equity有自己的独特特性,所以我今天通过表格的方式来阐述它的特性。
先说最底层的虚拟机。从最底层来说,大多的公链虚拟机都是基于堆栈的形式构成的。虽然不同虚拟机的OP不同,但是架构是相同的。所以回到之前的一个问题,如果你愿意创建一个编译器把以太坊的智能合约编辑成比原链虚拟机的OPCODE,你可以把以太坊合约在比原链上跑,包括EOS合约的原理也是一样的。
第二个重点是合约语言。比原链是面向过程的合约语言,它的特点形成也跟BUTXO相关。我们知道面向过程没有一个结构体、没有一个对象,其实这是天然契合UTXO的模型,我们知道UTXO的特性是我不可能花一半,我只能销毁一个UTXO并且创建一或多个新的UTXO,其实这是一个过程流的模式。这跟以太坊完全不同,以太坊是账户模型,甚至你可以把以太坊账户理解成一个结构体,因为你的账单其实是结构体里的balance。
动态 | 比原链技术团队发布Bystack拜占庭容错共识方案:近日,比原链技术团队发布了Bystack区块链BaaS平台,其中,侧链的共识算法BBFT(Bystack Byzantine Fault Tolerance) 受到关注,目前该共识算法的完整验证过程以及相关论文为《BBFT: a Hierarchical Byzantine Fault Tolerant Consensus Algorithm》。目前对共识算法的思考,验证过程以及实现方式已通过论文形式都提交至github。(巴比特)[2019/5/23]
在上层来说,比原链想做的是资产上链,我们想把任何资产放到区块链上,然后用智能合约进行可信任的交易。比如说你的房产或者公司的股权,以太坊和我们要做的不同,他们想做的其实更像一个虚拟机运行各种合约。所以不同的需求导致了很多事情有差异。
我们为什么设计Equity,为什么我们选用过程式编程?这里有两点:一是安全;二是应用型。
从安全来说,去年Parity钱包被攻击,导致51.37万个ETH冻结。为什么被攻击Parity钱包代码安全,但问题在于它调用底层库,底层库被攻击,导致钱包毁掉。
在以太坊的世界中,其实每一个合约就像一个结构体,是一个指针,在别的合约调用它的时候,通过指针调用func。这里有两个例子,左边米色是比原链合约例子,右边粉色是以太坊上的例子。
声音 | 比原链CTO朗豫:合法稳定币是法定数字货币的小范围的尝试:比原链CTO朗豫近日接受采访时表示,合法稳定币现在只是一种合法政府背书的企业准备金证明 ,和法定数字货币还没有联系,但如果以后政府发稳定币就算是法定数字货币了。合法稳定币是法定数字货币的小范围的尝试。但就算未来法定数字货币发行了,稳定币仍然有价值,它可以在不同链上发行,比较自由。[2018/9/13]
比如我们有两个合约,第一个是金库,我们提供的功能是存钱、取钱、贷款,第二个是公司股权,股权可以转让、抵押或者解锁。因为这两个合约涉及到资产转移,所以对数学要求安全,做交易的时候要做易存易出的检测,所以假设我们都有一个数据库保证加减乘除是安全的。在以太坊的世界中,其实库是一个子合约,在金库合约和公司股权合约的时候,它其实是调用合约。如果合约被攻击了,合约毁掉就导致金库合约和公司股权合约崩掉也不能运行。这就是为什么Parity出问题的原因。
左边是Equity基于面向过程形式的合约展示形式,我们也有公司股权和金库两个合约,但是数学检查合约是作为这两个合约的子func存在,这代表了什么?从攻击角度来讲你不可能攻击func,原因是func相同的输入永远会产出相同的输出。而结构体因为内部数据改变,相同的输入会导致不同的输出。
gate.io发布将为比原链(BTM)用户兑换主网资产的公告:gate.io发布公告称,比原链主链已经上线,gate.io已经对主链进行测试并已经完成技术对接。gate.io正在与比原链团队沟通,将于近日为所有用户兑换为主网资产。gate.io平台用户无需任何操作即可获得主网代币兑换,gate.io平台之外的BTM持有用户需要充值到gate.io进行兑换。[2018/5/3]
所以说func是定性的,所以在Equity写合约的时候,如果你在合约写成的时候,你确定合约是安全可用的,以后就不会有外部因素让合约失效。
从应用来说。我们这么设计Equity,第一要天然契合UTXO模型特点。因为我们的账户模型很怪,账户要有balance,那在资产流入流出的时候我们要更新账单。但是UTXO其实是没有这个概念,UTXO的概念是什么?它的概念就是我花费了或者我没花费。所以虚拟机只能有两个状态:一个是true和false,就代表这个UTXO是否可以被解锁。也是通过这两个状态,可以保证多资产在原子级操作下可以进行交易。
什么意思?如果我有一万个BTM,我想换一个比特币,双方其实都想得到保障:我的确收到了我的钱,我才付出去。在面向对象的情况下,其实它是用func来保证的,但是Equity在虚拟机底层通过两个合约,都返回特性,再加上交易是原子级,保证任何情况下交易都能得到真正的互换,还不会说钱已经打给了A,但是A的钱没有过来的情况。
BTCC矿池即将支持比原链挖矿:近期于MIT成功举办的Bytom Algorithm Public Release大会上,比原团队首次公开比原链人工智能ASIC友好型Tensority算法,全球各地越来越多的人开始关注比原社群。同时,在比原团队的持续开发和测试后,比原链即将迎来主网上线,开启人工智能和区块链创造性结合的时代。
BTCC矿池在捍卫数字资产网络安全的同时还承担着推动区块链生态系统发展的重任。比原链作为区块链生态的重要一环,其核心协议及网络的安全稳定将影响其自身及区块链体系。由此,BTCC矿池宣布将同步比原链主网上线比原链挖矿,共筑更加强大的生态系统。[2018/4/20]
下面聊一下比原链上的进阶合约的开发。其实这也是平时跟大家交流时候会碰到的问题。
首先是自身锁。我看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合约更强大的功能,欢迎大家使用开发,同时希望大家给我们提更多更好的意见,让我们做出更好的合约编译器服务你们,让你们通过更好的合约,让资产更好在比原链上流通。谢谢大家,这是我今天的演讲。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。