bitshares 比特股源码阅读笔记(一)
比特股在设计上采用了与比特币uxto完全不同的方式。它采用的是传统会计账户模式。
即每个账户对于每个资产都有一个余额。
账户之间转账就是资产余额的加减。
账户,资产都是一种object的孙子类 ,直接继承自abstract_object,而abstract_object继承自object.
每个object有一个全局唯一的id,object之间只能通过id来相互标识和访问。
每个 id是object_id特例化后的类的实例, 每个id由3个整数组成 ,前面两个是8位无符号整数,后面一个64位无符号整数,但是最大值不超过2的48次方。
每个账户都有两种权限authority,一个所有权,一个authority代表活动权(先把它想象成经营权或者管理权吧)
每个authority可以由多个执行者来实行,每个执行者可以有不同的权重。执行者可以是公钥、地址、或者其他账户。
谈谈个人感受:
1、我觉得比特股源码里,authority 方面的名字没起好,不够直观。
2、object_id的设计,虽然看上去很新奇,我现在还找不出为什么要这样设计?为了性能还是其他方面的考虑,简单的自曾id已经在工程上被证明不是一个好的设计。为了方便记忆的话,每个object已经有一个名字了。而且我觉得这方面明明有url的规范啊,为什么不用呢?直接定义一种url来访问不是更好吗?例如通过
bitshares://asserts/bitcny来获取bitcny的信息,bitshares://accounts/sb来获取sb账户的信息,这样是不是更直观,而容易被大家接受啊
3、大量使用了struct 来替代class ,虽然 c++中,这两个东西基本上是同一个东西,但是这确实不太容易让新人接受,毕竟大多数c++资料上都是用class来定义类的
4、大量使用了模板,如果你熟悉C++模板带来的元编程,那么对你来说,代码可读性和可维护性确实是不太好!估计这也是C++是日薄西山的原因之一吧,毕竟在C++搞模板进行元编程的年代,PL界里类型系统好像还不是很成熟。如果把bitshares的源代码换成rust来写,可读性,可维护性应该会不会更高些?毕竟他号称集软件工程15年来的最佳工程实践。
5、文档还是太少了
当然我要承认自己写c++写得很少,以上观点也肯定有些错误和不足,还是报着学习的心态多看看源代码。