中移链是在满足我国信息化监管需求、合规可控的前提下,打造的中国移动区块链服务平台。如果把中移链类比为计算机系统,那么系统合约就是中移链中的系统设置部分,用于配置和管理链的资源和行为。在计算机系统中,系统设置提供了对计算机系统的底层控制,使其能够有效地运行各种应用程序。同样,在中移链中,系统合约是中移链中的底层协议,负责账户、交易、RAM、CPU、网络带宽等相关配置和管理。
01
账户和权限体系介绍
在中移链中,账户与系统合约密切相关,所有账户都必须由系统合约创建和管理。系统合约执行需要链账户来进行发起。链账户是中移链中的重要参与者,用于管理用户的资产、执行智能合约和交互。中移链中链账户可以设置多个权限和角色,这种灵活的权限管理机制使得中移链账户可以更加安全地进行交易。而这一机制,正是由系统合约来实现的。
在创建新账号时,默认需要指定以下参数:账户名称,Active和Owner权限公钥以及需要的资源(账户需要拥有一定数量的资源才能进行交易和操作,这些资源包括RAM、CPU和NET)。
账户名:在中移链中,账户名是唯一的标识符,用于标识账户和接收中移链资源。账户名必须是12个字符串,只能包含小写字母a-z和数字1-5。
公钥和私钥:账户可以有多个公钥,不同的公钥可以用于不同的场景来进行加密和签署交易。私钥是与公钥相关联的一个字符串,它用于签署交易和解密加密信息。私钥必须保持机密,不能被分享或泄露。
权限:中移链中的账户权限有多种类型,例如活跃权限(Active)、所有者权限(Owner)和合约权限等。这些权限用于管理账户的访问控制,例如限制谁可以访问账户、对账户进行转账或修改账户信息等。中移链中的权限非常灵活,允许账户所有者定义自己的访问规则和安全策略。
![](https://i-blog.csdnimg.cn/blog_migrate/d03af69915e38c6c4b997d6439049cf0.png)
如果需要更复杂的签名加密方式,可以通过多重签名来实现,它允许多个签名者进行多个公私钥对的协作,实现多方授权的目的。例如,一个企业账户可以设置3个签名者,当进行敏感操作时,需要至少有2个签名者共同授权才能完成操作。下图简单说明了一下多重签名的概念。
![](https://i-blog.csdnimg.cn/blog_migrate/be53fc29b31d49b578bc9f9c21c511e5.png)
我们可以把Alice在区块链中的权限和授权表看作一张清单,这张清单告诉我们她需要多少权重才能使用自己的Active权限进行签名。假设她的Active权限阈值是2,那么只有当权重达到2时,才能使用她的Active权限进行签名。如果我们把Bob和Stacy在Alice的Active权限表中的权重都改为1,那么他们两个的权限加起来才能达到2,才可以使用Alice的Active权限进行签名。
02
系统合约与交易介绍
目前中移链的主要的系统合约有如下几个:
![](https://i-blog.csdnimg.cn/blog_migrate/59321ba432ca9d5aa95dbb3ee81f7681.png)
中移链系统合约中的各个子合约之间相互协作,共同维护系统的正常运行。要执行中移链的系统合约,用户需要使用其私钥对其进行签名并发起交易请求。交易随后广播到网络并由网络参与者进行验证。以转账合约为例,整体的执行过程如下:
![](https://i-blog.csdnimg.cn/blog_migrate/a9d866ab4d20bb5054943bc1490dd6a3.png)
1、用户发起交易,使用对应权限的公私钥签名;
2、节点收到交易后,发送给共识节点;
3、共识节点接收到交易后,进行交易排序;
4、交易执行;
5、交易打包出块;
6、区块同步全网,交易在每个节点上运行;
7、区块链网络中每个节点数据同步一致;
为了保证合约的执行安全,合约的执行都需要使用账户进行签名,签名的账户权限必须满足合约执行的需求。比如,一个合约需要执行一个转账操作,那么它所依赖的账户就需要拥有相应的转账权限。如果账户没有这样的权限,那么合约的执行就会失败。
03
系统合约权限管控功能改造
通过对账户权限和系统合约执行过程的了解,不难发现虽然有灵活的组合权限来确认账户权限的归属,但是在系统合约层面,无法对重要系统合约的执行进行有效管控,比如新建链账户、资源购买、赎回和选举共识节点等重要操作,只需要签名通过并满足创建资源的需求即可调用,无法指定管理员来管理这些系统合约的权限,这显然也不符合开放联盟链的管理模式。
为了增强安全性,满足开放联盟链的需求,中移链在系统合约的主要函数中加入了权限组的校验逻辑。当调用转账和购买资源等需要权限的合约时,需要先校验权限是否通过。如下为提前设置管理员的命令:
![](https://i-blog.csdnimg.cn/blog_migrate/bbf8077bae8ea10fccf7fa65ee498e28.png)
以购买资源的合约为例,在购买资源前,中移链会在购买资源的系统合约中预先设置管理员权限表,为不同系统资源分配不同的管理员。当用户购买内存时,会校验当前用户是否在的权限组中。这样,当调用账户没有管理员权限时,将抛出异常并拒绝调用该合约。这种修改只是增加了管理员,缩小了权限范围,因此是向后兼容的,不会造成硬分叉。这样升级的好处是可以在不中断链的情况下,引入新的功能和升级系统,使得整个系统更加安全和可靠。
系统合约功能 | 改造前 | 改造后 |
---|---|---|
新建链账户 | 只要有资源就能创建 | 链账户管理员才能创建 |
购买RAM资源 | 有TOKEN(通证)就能购买 | 内存管理员才能进行购买分配 |
购买CPU资源 | 有TOKEN(通证)就能购买 | CPU管理员才能购买分配 |
... | ... | ... |
通过权限表的灵活配置,中移链实现了系统合约管控功能,敏感合约只允许权限表中对应的管理员进行操作。比如新建链账户,只允许链账户管理员进行操作,资源的买卖和赎回,只允许资源管理员进行操作,确保链上数据和系统合约的安全和稳定,也符合BSN开放联盟链的需求和目标。
04
系统合约权限管控功能验证
1、使用管理员账号分别创建两个测试账号:testaccount2和testaccount5,账号信息如下:
![](https://i-blog.csdnimg.cn/blog_migrate/453c97439e240e27f1b467c18dc1dd0d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dfd803e7dce915a43034f4acb720f439.png)
2、将测试账号testaccount2设置成为管理员账号
![](https://i-blog.csdnimg.cn/blog_migrate/b9a38b1d5c35f2eef8f860fef2220383.png)
![](https://i-blog.csdnimg.cn/blog_migrate/15738b14a252a2a1374be63e64b23781.png)
3、测试管理员testaccount2进行购买资源,购买成功。
![](https://i-blog.csdnimg.cn/blog_migrate/f7d10ff3eb85535e5b5c04597a2e1cd6.png)
4、接着使用普通账号的testaccount5进行购买资源测试,购买失败。
![](https://i-blog.csdnimg.cn/blog_migrate/77c6fac6c94666f89ad5afcc42abadfc.png)
5、现在将testaccount2从权限表中移除,再次进行购买资源测试。
![](https://i-blog.csdnimg.cn/blog_migrate/43740b1160e8138294e244b86ed2b2eb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ffe938253d510a6696c0bfb209787624.png)
6、移除权限后,testaccount2变成普通账号,购买资源失败。
中移链致力于构建一个开放、安全、高效、易用的区块链基础设施网络,以满足各种企业和开发者的需求。后续将持续对中移链底层框架进行能力增强,为BSN生态中的企业和开发者用户提供更加多元化的技术选择与更加可靠的基础设施保障。
05
参考资料
[1]BSN开放联盟链:
https://opb.bsnbase.com/main/index
[2]官方EOSIO账号和权限介绍:
https://developers.eos.io/welcome/latest/protocol-guides/accounts_and_permissions
[3]官方EOSIO交易介绍:
https://developers.eos.io/welcome/latest/protocol-guides/transactions_protocol
[4]官方EOSIO智能合约介绍:
https://developers.eos.io/welcome/latest/smart-contract-guides/index
-END-