irita联盟链基本功能描述

前言

irita版本:irita/master,依赖库:github.com/bianjieai/iritamod v0.0.0-20210113080132-1a1b006c7f97

本文只做功能描述,API描述在此处 -> irita/docs/API,irita联盟链有以下功能:

  1. 准入控制
  2. 权限管理
  3. 节点管理
  4. 参数管理
  5. 系统运维

一. 准入控制

控制项描述
节点证书证明自己是由可信第三方许可的节点
P2P节点连接列表记录本节点期望与哪些节点建立网络通信
节点黑名单记录本节点禁止与哪些节点建立网络通信基于irita框架,仅此项需要开发,其他项可直接用

二. 权限管理(x/admin)

  1. 权限枚举,见代码 iritamod/modules/admin/types/admin.pb.go,此go代码是有proto文件生成的
const (
	// 初始化系统,添加Perm权限,不能被赋予其他权限
	RoleRootAdmin Role = 0
	// 添加、删除权限
	RolePermAdmin Role = 1
	// 冻结、解冻账号
	RoleBlacklistAdmin Role = 2
	// 节点模块,slashing模块,系统升级模块
	RoleNodeAdmin Role = 3
	// 参数模块
	RoleParamAdmin Role = 4
	// oracle模块、发行Token、发行token单位、定义服务、绑定服务
	RolePowerUser Role = 5
	// 目前没有用到,猜测是用来控制relayer的
	RoleRelayerUser Role = 6
	// 创建身份
	RoleIDAdmin Role = 7
)
  1. 权限控制交易,见代码 iritamod/modules/admin/keeper/ante.go

    // AnteHandle returns an AnteHandler that checks the auth to send msg
    func (ad AuthDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) {
    	for _, msg := range tx.GetMsgs() {
    		for _, signer := range msg.GetSigners() {
    			// 判断交易发起者是否冻结
    			if ad.k.GetBlockAccount(ctx, signer) {
    				return ctx, sdkerrors.Wrapf(types.ErrUnauthorizedOperation, "The sender %s has been blocked", signer)
    			}
    			// 判断交易发起者是否拥有合法权限发送消息
    			if auth, ok := ad.k.AuthMap[msg.Type()]; ok {
    				if err := ad.k.Access(ctx, signer, auth); err != nil {
    					return ctx, err
    				}
    				continue
    			}
    			// 判断交易发起者是否拥有合法权限操作模块
    			if auth, ok := ad.k.AuthMap[msg.Route()]; ok {
    				if err := ad.k.Access(ctx, signer, auth); err != nil {
    					return ctx, err
    				}
    			}
    		}
    	}
    	// continue
    	return next(ctx, tx, simulate)
    }
    
  2. 权限初始化,见代码:irita/app/ante.go -> RegisterAccessControl()

    func RegisterAccessControl(adminKeeper admin.Keeper) admin.Keeper {
    	// permission auth
    	adminKeeper.RegisterMsgAuth(&admin.MsgAddRoles{}, admin.RoleRootAdmin, admin.RolePermAdmin)
    	adminKeeper.RegisterMsgAuth(&admin.MsgRemoveRoles{}, admin.RoleRootAdmin, admin.RolePermAdmin)
    
    	// .....省略部分代码
    
    	// power user auth
    	adminKeeper.RegisterMsgAuth(&tokentypes.MsgIssueToken{}, admin.RoleRootAdmin, admin.RolePowerUser)
    	adminKeeper.RegisterMsgAuth(&nfttypes.MsgIssueDenom{}, admin.RoleRootAdmin, admin.RolePowerUser)
    	adminKeeper.RegisterMsgAuth(&servicetypes.MsgDefineService{}, admin.RoleRootAdmin, admin.RolePowerUser)
    	adminKeeper.RegisterMsgAuth(&servicetypes.MsgBindService{}, admin.RoleRootAdmin, admin.RolePowerUser)
    
    	// upgrade auth
    	adminKeeper.RegisterModuleAuth(upgradetypes.ModuleName, admin.RoleRootAdmin, admin.RoleNodeAdmin)
    
    	return adminKeeper
    }
    
  3. 权限管理提供的功能

    1). 添加权限:root权限不能再添加其他权限;只有root权限才能添加Perm权限;root权限不能通过此接口添加,只能初始化;通过位运算操作后存储权限;

    2). 删除权限:root权限不能被删除;只有root权限才能删除Perm权限;

    3). 冻结账号:root权限的账号不能冻结;不能重复冻结账号;

    4). 解冻账号:只有被冻结的账号才可以解冻;

三. 节点管理(x/node)

节点管理共有五个功能:

  1. 创建验证节点:验证节点凭证;以验证节点地址为key存储节点公钥;以验证节点的名字作为key存储节点Id;抽象了一个队列存储节点的创建,出块结束时更新验证节点;定义了一个钩子函数用于slashing模块
  2. 更新验证节点:验证节点凭证;替换旧节点公钥;替换旧节点ID;替换队列中的旧节点,出块结束时更新验证节点;
  3. 删除验证节点:删除节点公钥、ID;删除队列中的节点,出块结束时更新验证节点;定义了一个钩子函数用于slashing模块
  4. 添加观察节点:添加一个普通节点的交易(实际添加还有其他步骤),仅仅用来同步交易,不参与共识
  5. 删除观察节点:删除普通节点的交易(若网络没有删除此普通节点,任然可同步交易)

四. 参数管理(x/params)

路径参数管理,也就是管理模块的,仅提供了一个功能用来更新模块路径名;

想要通过接口修改 minimum-gas-prices等参数,需自行实现接口,若想更改参数及时生效,需自行实行abci的 BeginBlocker 或 EndBlocker 接口

五. 系统运维(x/upgrade)

系统运维提供两个功能:

  1. 升级:只能通过设置某个时间点或者区块高度进行升级(会调用 cosmos-sdk 的 x/upgrade 模块:在已有升级计划时不能再次提交升级,除非取消原有升级;时间点和区块高度必须是未来的;x/upgrade 本身不触发任何事件,所有与提议相关的事件都通过x/gov模块发出。)
  2. 取消升级

六. 其他

6.1 积分制(Token)

irita实现了发行、增发、燃烧Token的功能,但是仅仅针对发行功能做了权限控制,其他功能的权限控制需自行实现

6.2 国密算法

国密算法(此功能是基于原生代码进行开发的)有两处地方需要用到:

  1. 交易签名,实现见:cosmos-sdk(replaced)/crypto/keys/sm2,
  2. 对数据做哈希,没有实现,交易签名时对msg进行哈希使用的是sha256算法
6.3 版本改动

来看看irita基于原生cosmos-sdk做了那些改动及优化,针对 v0.42.3-irita-210413 版本:

  1. 增加SM2国密算法和测试用例,但是在模拟计算签名消耗gas时,若没有传公钥,默认是以SM2算法的公钥计算的 <9eba0ad09d0930d0c357569ec6ae757d627ba322>
  2. 通过nodeId过滤peer <9f414689145bdde1a7e3ce5e6c420b102d746606>

再看 irita基于原生tendermint做了那些改动及优化,针对 v0.34.8-irita-210413 版本:

  1. 增加对SM2算法的公钥解析 <5319fafbb7962ec07eb0fe17d34f74e2ad312e68>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值