1、满足社区开发者,想更低操作门槛地拥有一套长安链开发测试环境,以便于快速体验和测试长安链的需求。
2、满足部分个人和企业用户,想低成本在云服务上开发并试运行自己的长安链应用。
3、适用人群,区块链产品经理,区块链技术开发人员。
在长安链的社区运营中我们发现,新用户在部署长安链时,由于本地的环境各异,对快速体验测试长安链造成一些不必要的阻塞。因而我们规划在云服务器上,提供一套适配长安链的标准环境,供社区开发者对长安链进行体验及测试。
此外基于腾讯云Lighthouse 低成本的特性,当社区用户有轻量级的长安链应用需要做试点和demo时,也可在利用Lighthouse 低成本的实现。
本产品主要包含:一台腾讯云CVM服务器、一套长安链管理平台,一条长安链,一个CMS交互式控制台。
为方便用户使用,已将长安链内置订阅到长安链管理台内,并提供四个常用的测试合约,供新用户快速上手体验。
长安链Lighthouse内部集成了使用docker启动的长安链和管理台服务。用户可以通过管理台直接与链进行交互。
为支撑长安链服务的正常运行,系统内置了额外依赖的服务:
服务 | 路径 | 使用方 |
---|---|---|
docker | /usr/bin/docker | 容器环境部署 |
内置了依赖的镜像:
名字 | 版本tag | 描述 |
---|---|---|
chainmakerofficial/chainmaker-with-cryptogen | v2.3.1 | 长安链节点镜像 |
chainmakerofficial/chainmaker-vm-engine | v2.3.1 | docker-go虚拟机镜像 |
chainmakerofficial/management-backend | v2.3.1 | 管理台后台镜像 |
chainmakerofficial/management-web | v2.3.1 | 管理台前台镜像 |
mysql | 5.7 | mysql数据库镜像 |
长安链底链和管理台集合环境通过service形式管理,开机自启,用户可通过systemctl命令对长安链集合环境进行管理操作
长安链集合环境启动,包括长安链底链、管理台服务(web端和后端)、以及所需要的依赖服务Mysql服务
长安链集合环境停止,停止长安链底链和管理台服务
长安链集合环境重启,对长安链底链和管理台服务进行重新启动
长安链服务相关文件的路径为:/home/chainmaker
,其中对应的子目录/文件如下所示:
├── chain 长安链底链程序包
├── chainmaker-go 长安链底链源码包
├── contract 长安链内置合约源码
├── cmc cmc工具
├── credentials.txt 密码本
└── manager 管理台服务程序包
下面是目录的简要说明:
目录chain存放长安链的运行环境,底链采用tbft共识,启用docker-go虚拟机的链环境,其子目录结构如下
├── bin //节点启动依赖,切勿删除,否则会导致节点启动终止失败问题
├── config
└── data
bin: 节点的启动依赖,包括启动/终止脚本及依赖的docker-compose文件,初始启动时,脚本会生成节点启动所依赖的各种配置信息。内部的start.sh和stop.sh脚本主要供chainmaker-monitor service使用,如需对节点进行启停操作,请尽量通过服务管理方式操作,或者通过docker-compose操作。
config: 存放节点启动所需要的配置信息,包括节点的身份、启动配置、对应组织的Admin和common用户等。
data: 存放节点运行中生成的日志和数据
目录chainmaker-go中为长安链底链源码包,使用的是社区v2.3.1版本的长安链仓库代码。
该目录包含了内置的3个docker-go合约的源码,具体介绍参考第三节"内置合约介绍",docker-go合约的开发和部署方式可以参考:使用Golang进行智能合约开发
目录cmc中存放的chainmaker底链的管理工具,它的使用方式可以参考:命令行工具
cmc的命令非常全,但对应参数也非常多,为方便用户使用,基于lighthouse环境,另外提供了cms
工具,这个工具更简化,详情可查看2.4
章节。
credentials.txt为密码本,它包括了三个密码:
目录manager存放管理台的运行环境,其目录结构和说明如下:
├── bin //管理台启动依赖,切勿删除,否则会导致管理台启动终止失败问题
├── docker-entrypoint-initdb.d
├── log
└── mysql_db
bin: 管理台的启动依赖,包括启动/终止脚本及依赖的docker-compose文件,此启动环境主要供chainmaker-monitor service使用,如需对管理台进行启停操作,请通过服务管理方式操作,或者通过docker-compose操作。
docker-entrypoint-initdb.d: 存放管理台初次启动时数据库初始数据
log: 管理台运行日志目录
mysql_db: 管理台使用的mysql数据库数据存放目录
使用如下方式可登录访问mysql服务
docker exec -ti {mysql_container_id} mysql -u{user} -p'{passwd}'
lighthouse环境提供了cms脚本程序,用于简单快捷地与长安链进行交互,cms脚本所在目录为/usr/local/bin/cms,脚本依赖/roor/chainmaker/cmc目录下的cmc程序及配置文件。
目前脚本仅提供了对合约操作、查询块操作和查询交易操作的功能
cms contract-create {contract-name byte-code-path contract\_version}
例:cms contract-create save ./save.7z v1.0.0
注:cms脚本中创建合约默认创建的是docker-go合约,请按照docker-go类型合约规范处理
cms contract-invoke {contract-name contract-method params}
例:cms contract-invoke save save '{"key":"aaa","data":"hello world"}'
cms contract-get {contract-name contract-method params}
例:cms contract-get save find '{"key":"aaa"}'
cms contract-upgrade {contract-name byte-code-path contract\_version}
例:cms contract-upgrade save ./save.7z v1.1.0
cms contract-freeze {contract-name}
例:cms contract-freeze save
cms contract-unfreeze {contract-name}
例:cms contract-unfreeze save
cms contract-revoke {contract-name}
例:cms contract-revoke save
cms block-get-by-height {block-height}
例:cms block-get-by-height 0
cms block-get-by-hash {block-hash}
例:cms block-get-by-hash 64fc87046310d4a0f9a7054132dd2e8b7530e6314342af309a7ca3d4cc2433c4
cms block-get-by-txid {txid}
例:cms block-get-by-txid ce6c57b969e84054b7c87bfe5113f615ce6c57b969e84054b7c87bfe5113f615
cms tx-get {txid}
例:cms tx-get ce6c57b969e84054b7c87bfe5113f615ce6c57b969e84054b7c87bfe5113f615
目前LightHouse支持的合约主要有四个,如下表所示:
序号 | 合约名称 | 合约功能 |
---|---|---|
1 | SaveContract | 存证合约,可保存Key-Value及描述信息 |
2 | ERC20Contract | ERC20合约,基本符合以太坊官方标准,可作为Token发布的Demo |
3 | ERC721Contract | ERC721合约,基本符合以太坊官方标准,可作为NFT发布的Demo |
为方便用户查看,对下面要讲到的合约内容进行一个整体的描述(或规范)。
函数名 | 函数类型 | 函数说明 | 入参说明 | 返回值 | 备注 |
---|---|---|---|---|---|
save | 执行 | 保存对象 | key:数据存储的key data:数据存储的内容 desc:数据存储的描述(可选) | 数据存储的key | 重复的key会将原数据覆盖 |
find | 查询 | 查询对象 | key:数据存储的key | 存储内容的JSON格式 | 对象结构体:
type EvidenceInstance struct {
Key string |
进行save操作,即保存对象至底链时,若保存成功会触发 保存 事件,该事件主题为:topic_save
存证合约的使用非常简单,主要包括两个部署:
ERC20是一套用于发行token的标准规范,它的定义如下:
// name: 返回token的名称
function name() constant returns (string name)
// symbol: 返回token的简称
function symbol() constant returns (string symbol)
// decimals: 返回token支持的小数点数量,例如,设置为3表示支持0.001方式
function decimals() constant returns (uint8 decimals)
// totalSupply: 返回token的总供应量
function totalSupply() constant returns (uint totalSupply);
// balanceOf: 返回某个账号的token余额
function balanceOf(address _owner) constant returns (uint balance);
// transfer: 从合约的调用者转移_value数量的token至_to账户,该操作要求必须触发Transfer事件
function transfer(address _to, uint _value) returns (bool success);
// transferFrom: 从地址_from发送数量为_value的token至_to账户,该操作要求必须触发Transfer事件
// transferFrom用于代理转移token,可转移的条件是from账号必须经过approve
function transferFrom(address _from, address _to, uint _value) returns (bool success);
// approve: 允许_spender多次取回当前账号的token,最高数量为_value,该操作必须触发Approval事件
// 如果再次调用该函数,以_value覆盖当前的余量。
function approve(address _spender, uint _value) returns (bool success);
// allowance: 返回_spender仍然被允许从_owner提取的金额
function allowance(address _owner, address _spender) constant returns (uint remaining);
// Transfer: 转移事件,当有token进行转移时触发
event Transfer(address indexed _from, address indexed _to, uint _value);
// Approval: 授权事件,当授权某账号代理token时触发
event Approval(address indexed _owner, address indexed _spender, uint _value);
为方便用户使用,本合约在已有规范的基础上增加了如下几个方法:
function owner() : 返回当前合约的拥有者,即管理员
function transferOwner(to) : 转移owner至其他账号,该操作只能由管理员进行
function mint(to, value) : 增发,只能由管理员操作,可给管理员自己或其他人增发token,totalSupply会更新
function burn(value) : 燃烧,即释放自己对应数量的token,totalSupply会更新
function deliver(to, value) : 派发,只能由管理员操作,从合约账号地址中转移token至指定账户
function address(): 查询当前账号的地址
合约在初始化的过程中可以设置一些基础配置,包括发行token的名称、简称、总量等信息,若不设置则会使用合约代码中默认的配置。初始化过程中涉及到的参数配置列表说明如下:
参数名 | 参数含义 | 默认值 |
---|---|---|
owner | 合约拥有者地址 | 发起合约安装的用户地址 |
totalSupply | token总供应量 | 1_000_000_000,10亿 |
decimals | token计算支持的小数点数量 | 2,表示最小支持0.01 |
name | token名称 | DEMO |
symbol | token简称 | DE |
函数名 | 函数类型 | 函数说明 | 入参说明 | 返回值 | 备注 |
---|---|---|---|---|---|
name | 查询 | 查询token名称 | 该token的名称 | 任何账号都可以查询 | |
symbol | 查询 | 查询token简称 | 该token的简称 | 任何账号都可以查询 | |
decimals | 查询 | 查询token支持小数位数 | 该token支持的小数位数 | 任何账号都可以查询 | |
totalSupply | 查询 | 查询token发行的总量 | 该token发行的总量 | 任何账号都可以查询 | |
owner | 查询 | 查询该合约的拥有者 | 该合约的拥有者 | 任何账号都可以查询 | |
balanceOf | 查询 | 查询指定用户的token数量 | owner: 指定的用户地址 | 该地址拥有的token数量 | 任何账号都可以查询 |
transfer | 执行 | 转移指定数量token给指定账号 | to: 转入的账号地址; value: 转移的token数量 | 当前账号剩余的token数量 | 该函数只能转出自己(交易发起者)的token |
transferFrom | 执行 | 替代某账号转移指定数量token给特定账号 | from: 转出的地址; to: 转入的地址; value: 转移token数量 | from账号剩余token数量 | 该函数的交易发起者必须经过from账号的授权,即approve |
approve | 执行 | 授权账号可转移指定数量的token | spender: 被授权的用户地址 value: 允许转移的token数量 | 允许转移的token数量 | 该函数重复调用会将授权的值重置 |
allowance | 查询 | 返回指定账号从特定账号授权剩余的token数量 | owner: 授权的用户地址; spender: 被授权的用户地址 | 授权剩余的token数量 | 任何账号都可以查询 |
transferOwner | 执行 | 转移当前合约的拥有者 | to: 新的拥有者地址 | 新的拥有者地址 | 只有合约拥有者才可以发起该交易 |
mint | 执行 | 给指定账号增发token | to: 增发的用户地址 value: 增发的token数量 | 增发地址的剩余token数量 | 只有合约拥有者才可以发起该交易,该合约调用会调整发行总量 |
burn | 执行 | 销毁指定数量的token | value: 销毁的token数量 | 该账号剩余token数量 | 只能销毁交易发起者账号的token |
deliver | 执行 | 给指定账号派发token | to: 派发的用户(可选,不设置则是当前账号) value: 派发的token数量 | 该账号剩余token数量 | 只有合约拥有者才可以发起该交易,该合约调用不会影响发行总量,该操作是从合约账号中将token转出 |
address | 查询 | 返回当前用户地址 | 该用户的地址 | 任何账号都可以查询 |
在长安链的docker-vm虚拟机模型中,交易发起者的地址算法暂未公开,因此需要用户通过手动调用合约中address()方法获取。
ERC20合约是一个发行token的合约,可以通过该合约进行指定token的发行操作。它的核心操作流程包括如下几个步骤:
ERC721的标准规范包括三部分:
其中ERC721Metadata的定义如下:
// 返回给token的名称
function name() external view returns (string _name);
// 返回该token的简写
function symbol() external view returns (string _symbol);
// 返回该token对应的信息,URI可以是地址,也可以是信息描述
function tokenURI(uint256 _tokenId) external view returns (string);
ERC721Enumerable的定义如下:
// 返回该token的发放总量
function totalSupply() external view returns (uint256);
// 根据token列表中的序号,从整个合约列表中返回token_id
function tokenByIndex(uint256 _index) external view returns (uint256);
// 根据个人账号中index的数量,返回其合约列表中的token_id
function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
ERC721的定义如下:
// 返回该地址拥有的NFT的数量
function balanceOf(address _owner) constant returns (uint balance);
// 根据token_id查询该token所属的用户地址
function ownerOf(uint256 _tokenId) constant returns (address owner);
转让 _tokenid 的使用权,从 _form 转移到 _to
function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
从 _from 转让 _tokenid 的使用权给 _to 地址
function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
转账触发事件
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
授权 _approved 代替自己执行交易
function approve(address _approved, uint256 _tokenId) external payable;
对管理账户中的 _operator 地址开启或关闭授权
function setApprovalForAll(address _operator, bool _approved) external;
通过 _tokenId 来获取授权地址
function getApproved(uint256 _tokenId) external view returns (address);
判断 _operator 是否被 _owner 授权为所有代码的运营者
function isApprovedForAll(address _owner, address _operator) external view returns (bool);
事件,approve函数触发
event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
事件,setApprovalForAll函数触发
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
为方便用户使用,本合约在已有规范的基础上增加了如下几个方法:
function setTokenURI(): 设置token的URI属性,只有该token的拥有者具有此权限
function mint(): 增发,任何人均可以操作,可以增发给自己或其他人,但该token不能重复
function burn(): 燃烧,即销毁该token,只能token的拥有者才可以操作(授权也不可以)
function setCheckData(): 设置检查数据,方便safeTransferFrom时填写data内容
function checkData(): 返回检查数据,只能返回拥有者的数据
function address(): 返回当前账号的地址信息
合约在初始化的过程中可以设置一些基础配置,包括发行NFT的名称、简称等信息,若不设置则会使用合约代码中默认的配置。初始化过程中涉及到的参数配置列表说明如下:
参数名 | 参数含义 | 默认值 |
---|---|---|
name | token名称 | NFT-DEMO |
symbol | token简称 | NFDO |
函数名 | 函数类型 | 函数说明 | 入参说明 | 返回值 | 备注 |
---|---|---|---|---|---|
name | 查询 | 查询NFT名称 | 该NFT的名称 | 任何账号都可以查询 | |
symbol | 查询 | 查询NFT简称 | 该NFT的简称 | 任何账号都可以查询 | |
tokenURI | 查询 | 查询指定NFT的URI配置信息 | tokenId: NFT唯一标识 | 该NFT的URI配置信息 | 任何账号都可以查询 |
totalSupply | 查询 | 查询已发布的NFT数量 | 该NFT的数量 | 任何账号都可以查询 | |
tokenByIndex | 查询 | 查询所有NFT集合中某个序号的NFT标识 | index: 该NFT在整个列表中的序号 | 对应序号的NFT标识(tokenId) | 任何账号都可以查询 |
tokenOfOwnerByIndex | 查询 | 查询某个账号下某个序号的NFT标识 | owner: 查询的账号; index: 查询的序号 | 对应序号的NFT标识(tokenId) | 任何账号都可以查询 |
balanceOf | 查询 | 查询某个地址拥有的NFT数量 | owner: 查询的账号 | 该地址拥有的NFT数量(销毁的不计算在内) | 任何账号都可以查询 |
ownerOf | 查询 | 查询某个NFT的拥有者 | tokenId: NFT唯一标识 | 拥有该NFT的地址 | 任何账号都可以查询 |
transferFrom | 执行 | 将NFT从一个地址转移至另外的地址 | from: 转出的地址(可选,不填时为当前账号); to: 转入的地址; tokenId: NFT唯一标识 | 字符串:“success” | 若from不是该NFT的拥有者需要其拥有者进行授权 |
safeTransferFrom | 执行 | 安全地将NFT从一个地址转移至另外的地址 | from: 转出的地址(可选,不填时为当前账号); to: 转入的地址; tokenId: NFT唯一标识 data: 校验的内容,通常由to地址对应用户给出,可通过setCheckData设置 | 字符串:“success” | 若from不是该NFT的拥有者需要其拥有者进行授权 |
approve | 执行 | 授权用户可代替自己操作某个NFT | approved: 被授权的账号 tokenId: 授权的的NFT唯一标识 | 字符串:“success” | 该操作会覆盖掉之前授权的账号 |
setApprovalForAll | 执行 | 设置某个用户对自己所有token的授权状态 | operator: 授权/回收授权的账号 approved: 被授权的状态,0:不授权,1:授权 | 0:不授权,1:授权 | 该授权的优先级比approve更高 |
getApproved | 查询 | 获取某个NFT授权操作的地址 | tokenId: NFT唯一标识 | 该NFT的授权操作地址 | 任何账号都可以查询,但只可查询自己的授权情况 |
isApprovedForAll | 查询 | 获取指定用户对某操作者的授权状态 | owner : 指定的用户(可选,不填代表自己) operator : 被授权的操作地址 | 0:不授权,1:授权 | 任何账号都可以查询 |
mint | 执行 | 增发指定的NFT至某个账号 | to: 增发给的账号(可选,不填时则增发给自己) tokenId: NFT唯一标识 tokenURI: NFT的URI属性 | NFT的唯一标识(tokenId) | 任何账号都可以增发,但tokenId不能重复 |
burn | 执行 | 销毁某个指定的NFT | tokenId: NFT唯一标识 | 字符串:“success” | 该账号必须是该NFT的拥有者,授权不可以 |
setTokenURI | 执行 | 设置NFT的URI属性 | tokenId: NFT唯一标识 tokenURI: NFT的URI属性 | 字符串:“success” | 该账号必须是该NFT的拥有者,授权不可以,但为保障唯一性,不建议调用该函数 |
setCheckData | 执行 | 设置账号的check数据 | data: 设置的check数据 | 字符串:“success” | 该账号只可设置自己的data,该data供safeTransferFrom中的data校验 |
checkData | 查询 | 查询设置的check数据 | 该账号设置的check数据 | 任何账号都可以查询 | |
address | 查询 | 返回当前用户地址 | 该用户的地址 | 任何账号都可以查询 |
同ERC20合约一样,交易发起者的地址需要用户通过手动调用合约中address()方法获取。
ERC721是一个发行NFT的合约,可通过该合约发行NFT或转让NFT等操作。它的核心流程包括以下几个步骤:
为降低长安链的使用门槛,官方推出长安链管理台,以便用户在初步接触长安链时,能够通过本平台可单机快速部署长安链用于产品体验和测试,并对长安链的技术架构,功能模块有一个初步了解。
在lighthose上,为进一步降低使用门槛,平台给每个用户私有化内置了一条长安链,用户可在该链上进行功能测试和产品体验。
为方便用户使用,平台本身在启动的时候,自动部署了一条链可直接使用,主要流程如下
1、在管理台-区块链管理模块,找到这条默认部署的链。
2、在区块链管理-合约管理模块,管理已经默认配置进去的三个合约,包含存证合约,ERC-20合约,ERC-721合约。
3、在区块链管理-上链管理处,调用内置的合约、并在区块链浏览器模块上查看链上信息。
4、您可以继续在这条链上,部署并使用自己的其他合约。
序号 | 内容 | 说明 |
---|---|---|
1 | 长安链版本 | V2.3.0 |
2 | 链id | chain1 |
3 | 组织数 | 4个组织 |
4 | 节点数 | 4个共识节点 |
5 | 共识算法 | TBFT |
6 | 单区块最大交易容量 | 100笔交易 |
7 | 交易过期时长 | 600s |
8 | 交易间隔 | 2000ms |
9 | 是否支持docker_VM | 支持 |
admin
账号,默认密码请参考密码文档
。如需新增其他账号,可通过admin
账号,在平台账户管理处新增。如果您想部署一条新的长安链,可通过本平台部署,主要流程如下。
1、首先需要在证书管理模块申请相关的组织证书、节点证书、用户证书。
2、接着在区块链管理模块,配置链的相关信息,包含区块基本配置、共识策略、参与组织与节点等,生成链的配置文件。
3、将配置文件下载并移动到,您的linux
服务器上,解压文件后,执行内置的脚本,一键启动链。
4、部署成功后,在管理平台上订阅链,使管理平台与链上某一节点建立联系,获得链上信息。
5、订阅成功后,您可以通过管理平台部署管理合约,发送交易,通过区块链浏览器查看链上信息。
admin
和client
两种。TBFT
、RAFT
、SOLO
、HOTSTUFF
等共识。release
目录下的start.sh
脚本即可启动链,命令如下:$ #此处以示例节点为例,实际操作时请自行换成真实的名称
$ cd release/TestCMorg1-示例测试节点1/bin
$ ./restart.sh
可通过如下命令验证节点是否启动成功
$ #查看节点进程是否存在
$ ps -ef|grep chainmaker | grep -v grep
$ #查看节点日志是否存在
$ cat ../release/*/log/system.log |grep "ERROR\|put block\|all necessary"
$ #若看到all necessary peers connected则表示节点已经准备就绪。
WASMER
、EVM
、WXVM
、GASM
。如果您已经有正在运行中的链,可将之导入到本管理台进行管理,主要流程如下
1、在证书管理先将该链上的某一组织证书、节点证书、用户证书导入到本管理台。
2、在区块链管理模块,使用所导入的组织、节点、用户信息订阅链。
3、订阅成功后,您可以通过所配置的节点与链建立联系,并且支持在管理台上部署管理合约,发送交易,通过浏览器查看链上信息
ca服务
,生成过证书,则可以将证书直接导入使用。ca证书
。a123456
。SDK
的下载入口。默认的Lighthouse环境中并没有开放底链访问需要的端口,在不修改配置的环境下是12301/12302/12303/12304。如需要通过SDK访问底链,需要首先将端口开放。
进入腾讯云该Lighthouse的管理台,选择防火墙页面。
可以看到目前只有一些基本的端口开放了,我们关注的12301-12304并没有开放,此时点击 "添加规则" 按钮,进入规则配置页面:
按照上图填写规则即可,若想限制访问来源,即哪些IP地址可以访问该端口,可以选择 启用 复选框,填入指定的源IP:
填写完成后,点击确定按钮,则会看到新创建的规则:
此时若本地使用 telnet工具进行访问,则可以发现端口已经可正常访问:
通过WebShell登录Lighthouse服务器后,使用如下命令进入到指定组织的用户证书页面:
[lighthouse@VM-0-3-centos ~]$ cd /home/chainmaker/chain/release/chainmaker-v2.2.1-lh-org1.chainmaker.org/config/lh-org1.chainmaker.org/certs/user
[lighthouse@VM-0-3-centos user]$ ll
total 12
drwxr-xr-x 2 chainmaker chainmaker 4096 Jun 14 11:31 admin1
drwxr-xr-x 2 chainmaker chainmaker 4096 Jun 14 11:31 client1
drwxr-xr-x 2 chainmaker chainmaker 4096 Jun 14 11:31 light1
上述命令中的路径 chainmaker-v2.2.1-lh-org1.chainmaker.org 和 lh-org1.chainmaker.org中的org1代表的组织,用户可根据自己的组织进行调整,例如:org2对应调整为:
chainmaker-v2.2.1-lh-org2.chainmaker.org 和 lh-org2.chainmaker.org。
系统为每个组织的用户内置了三个用户:admin/client/light,分别代表了管理员、普通用户和轻节点用户。
用户可根据自己的需求进入到指定用户页面下载对应的证书,以admin为例:
[lighthouse@VM-0-3-centos admin1]$ cd ../
[lighthouse@VM-0-3-centos user]$ cd admin1/
[lighthouse@VM-0-3-centos admin1]$ sudo su chainmaker
[chainmaker@VM-0-3-centos admin1]$ sz *
Received - admin1.sign.crt 17.89 KB/s Spend: 0 seconds
Received - admin1.sign.key 4.43 KB/s Spend: 0 seconds
Received - admin1.tls.crt 18.36 KB/s Spend: 0 seconds
Received - admin1.tls.key 4.52 KB/s Spend: 0 seconds
特别注意的是,在下载之前需要切换为 chainmaker用户,否则会出现权限问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。