chain33专利技术解析: 交易组

原创
1703 天前
971

开发chain33的时候,最困难的还是对区块链本质的理解和把握。我们往往看到以太坊是怎么做的,fabirc是怎么做的,当我们自己做的时候,我们就需要了解更加本质的东西,才能做出创新和更好的决策。

交易组的概念正是从我们对现有系统的一个批判得到,我们认为,区块链上的交易不应该是相互孤立的,他们应该是可以互相关联,可以在同一个事务环境下执行的。同时引入交易组以后,我们发现,区块链上的交易可以做到比传统的做法更加安全透明,而不影响体验。

做chain33的时候,我们非常重视专利技术的保护,专门有4位同事负责写专利。这个也是对后面使用我们chain33技术的企业的一个保护,同时,也是为了大家一起建设生态的需要,而不是每家在做重复的工作。

   在传统的区块链世界中,交易都是独立的,一笔交易的执行结果不会影响另外一笔交易的执行结果。就这样一个简单的场景,在以太坊上都是无法做到的。比如 alice 有100 ERC20 token YCC 要和 bob 交换 1个 ETH,那么alice 和 bob 分别创建两个交易

tx1: alice send 100 YCC to bob

tx2:  bob send 1 ETH to alice

这个时候,如果系统可有保证 tx1 和 tx2 要么同时执行成功,要么同时执行失败,那么个alice 和 bob 就可以实现 一种 原子交换,这样的交换方式,要比传统区块链中的交换方式简单很多。交易组技术就是这样一个技术:系统保证,交易组中的所有交易,要么同时执行成功,要么同时执行失败。并且以指定顺序执行。

看上去,交易组技术好像没有什么技术含量,但是他非常的有用,除了我们前面提到的两个陌生人原子交换资产(这个就可以实现去中心的C2C),去除内部交易也是他的一个应用。

用过以太坊的人都知道,以太坊中有很多交易叫做 internal transaction

这个内部交易是怎么回事呢?就是合约内部调用产生的交易(不是用户前面发到区块链中的原始交易)。也就是说在以太坊中,你调用一下一个合约函数,可以背后,有20个交易产生,可能还会调用到其他的合约,或者莫名其妙的把你的资产转走(可能你调了一个正常合约,但是这个正常合约调了一个有后门的合约,这个时候,到底找谁赔偿?)。这样的不透明的调用方式和资产转移方式不仅仅调用者比较迷糊,而且是以太坊合约bug的一个重要来源。所以,在chain33中,这样的调用方式被禁用了,合约调用合约会让一个合约的bug蔓延,非常不利于系统的稳定。也就是说,chain33中你每花一分钱,都是经过你的客户端签名过的,没有隐形的内部交易可以转移资产。但是,虽然这样做,更加安全了,对用户也更加透明,但是事情会变的繁琐。

比如下面的这个例子:

alice 要 转 10个 BTY 去 game 合约中玩游戏。在以太坊中,可能通过调用game 合约中的一个函数,就完成了操作。但是,在chain33中,他的过程就要稍微复杂一点。用户的资产在coins 合约中,而游戏币在在game合约中。

alice 转 BTY 这个是在 coins 合约中,所以,需要一个交易:

tx1: coins 合约中 alice send 10 BTY to game(game合约会在coins中有一个账户)

然后需要第二个交易, alice 用这个 10 BTY 购买 10个游戏币

tx2: game 合约中 alice buy 10 游戏币 cost 10 BTY

如果没有交易组,两笔交易同时发到区块链中,那么有可能执行的顺序会变反,那么就执行出错了。这个时候交易组就大显身手了,在交易组中保证了 tx1,tx2 的原子性,以及顺序。这样,这两笔交易就像一笔交易一样被区块链接受,他的方便程度就和 ETH相同了。

我们损失了一点方便性,换来了安全性和透明性,同时因为有 交易组的存在,这个方便性的损失非常小,通过类库的封装,使用者可能都不需要知道交易组的存在。

这也引申出了chain33的一个核心概念,每个合约就是一个服务,他有固定的功能,用户可以调用多个合约的服务,实现一个新的功能组合。这个理念的差异,让chain33 系统更加易用,用最简单的一个例子来说,在以太坊中,你一定要自己写一个和别人重复的代码实现一个 erc20的token,而在chain33 中,你不需要写任何代码,调用一下token 合约,合约会给你创建一个你要的token,这还么有完毕,在传统的合约中,合约是不能升级加上功能的,chain33中合约的功能是组合出来的,所以允许这样做,比如系统中多了一个多重签名合约,只要通过交易组的组合,也就相当于 token 合约中的币,有了多重签名的功能。

chain33 全职开发团队的规模,已经不输国外的大部分区块链项目。国内的程序员千万不要忘自菲薄,现在已经到了中国人掌握核心技术的时代了。现在就加入chain33,开发自主,国产的区块链基础系统。同时,如果你给chain33 做了贡献,或者把专利技术给了复杂美,我们会给予丰厚的奖励。