长安链Lighthouse简介
1. 概述
1.1. 产品定位
1、满足社区开发者,想更低操作门槛地拥有一套长安链开发测试环境,以便于快速体验和测试长安链的需求。
2、满足部分个人和企业用户,想低成本在云服务上开发并试运行自己的长安链应用。
3、适用人群,区块链产品经理,区块链技术开发人员。
1.2. 产品简介
在长安链的社区运营中我们发现,新用户在部署长安链时,由于本地的环境各异,对快速体验测试长安链造成一些不必要的阻塞。因而我们规划在云服务器上,提供一套适配长安链的标准环境,供社区开发者对长安链进行体验及测试。
此外基于腾讯云Lighthouse 低成本的特性,当社区用户有轻量级的长安链应用需要做试点和demo时,也可在利用Lighthouse 低成本的实现。
本产品主要包含:一台腾讯云CVM服务器、一套长安链管理平台,一条长安链,一个CMS交互式控制台。
为方便用户使用,已将长安链内置订阅到长安链管理台内,并提供四个常用的测试合约,供新用户快速上手体验。
2. 产品指南
长安链Lighthouse内部集成了使用docker启动的长安链和管理台服务。用户可以通过管理台直接与链进行交互。
2.1. 服务集合
为支撑长安链服务的正常运行,系统内置了额外依赖的服务:
服务 | 路径 | 使用方 |
---|---|---|
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数据库镜像 |
2.2服务管理
长安链底链和管理台集合环境通过service形式管理,开机自启,用户可通过systemctl命令对长安链集合环境进行管理操作
- systemctl start chainmaker-monitor
长安链集合环境启动,包括长安链底链、管理台服务(web端和后端)、以及所需要的依赖服务Mysql服务
- systemctl stop chainmaker-monitor
长安链集合环境停止,停止长安链底链和管理台服务
- systemctl restart chainmaker-monitor
长安链集合环境重启,对长安链底链和管理台服务进行重新启动
2.3 文件列表
长安链服务相关文件的路径为:/home/chainmaker
,其中对应的子目录/文件如下所示:
├── chain 长安链底链程序包
├── chainmaker-go 长安链底链源码包
├── contract 长安链内置合约源码
├── cmc cmc工具
├── credentials.txt 密码本
└── manager 管理台服务程序包
下面是目录的简要说明:
chain
目录chain存放长安链的运行环境,底链采用tbft共识,启用docker-go虚拟机的链环境,其子目录结构如下
代码语言:shell复制├── bin //节点启动依赖,切勿删除,否则会导致节点启动终止失败问题
├── config
└── data
bin: 节点的启动依赖,包括启动/终止脚本及依赖的docker-compose文件,初始启动时,脚本会生成节点启动所依赖的各种配置信息。内部的start.sh和stop.sh脚本主要供chainmaker-monitor service使用,如需对节点进行启停操作,请尽量通过服务管理方式操作,或者通过docker-compose操作。
config: 存放节点启动所需要的配置信息,包括节点的身份、启动配置、对应组织的Admin和common用户等。
data: 存放节点运行中生成的日志和数据
chainmaker-go
目录chainmaker-go中为长安链底链源码包,使用的是社区v2.3.1版本的长安链仓库代码。
contract
该目录包含了内置的3个docker-go合约的源码,具体介绍参考第三节"内置合约介绍",docker-go合约的开发和部署方式可以参考:使用Golang进行智能合约开发
cmc
目录cmc中存放的chainmaker底链的管理工具,它的使用方式可以参考:命令行工具
cmc的命令非常全,但对应参数也非常多,为方便用户使用,基于lighthouse环境,另外提供了cms
工具,这个工具更简化,详情可查看2.4
章节。
credentials.txt
credentials.txt为密码本,它包括了三个密码:
- mysql_root_password: mysql数据库的root用户密码;
- mysql_chainmaker_password: mysql数据库的chainmaker用户密码,该用户是管理台访问mysql服务的用户;
- chainmaker_management_username: 长安链管理台的用户名
- chainmaker_management_password: 长安链管理台的登录密码;
manager
目录manager存放管理台的运行环境,其目录结构和说明如下:
代码语言:shell复制├── 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服务
代码语言:shell复制docker exec -ti {mysql_container_id} mysql -u{user} -p'{passwd}'
2.4 cms脚本
lighthouse环境提供了cms脚本程序,用于简单快捷地与长安链进行交互,cms脚本所在目录为/usr/local/bin/cms,脚本依赖/roor/chainmaker/cmc目录下的cmc程序及配置文件。
目前脚本仅提供了对合约操作、查询块操作和查询交易操作的功能
2.4.1. 合约操作
- 创建合约
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
2.4.2. 区块查询操作
- 根据块高查块
cms block-get-by-height {block-height}
例:cms block-get-by-height 0
- 根据块hash查块
cms block-get-by-hash {block-hash}
例:cms block-get-by-hash 64fc87046310d4a0f9a7054132dd2e8b7530e6314342af309a7ca3d4cc2433c4
- 根据交易ID查块
cms block-get-by-txid {txid}
例:cms block-get-by-txid ce6c57b969e84054b7c87bfe5113f615ce6c57b969e84054b7c87bfe5113f615
2.4.3. 交易查询操作
代码语言:txt复制cms tx-get {txid}
例:cms tx-get ce6c57b969e84054b7c87bfe5113f615ce6c57b969e84054b7c87bfe5113f615
3. 内置合约介绍
3.1. 合约列表
目前LightHouse支持的合约主要有四个,如下表所示:
序号 | 合约名称 | 合约功能 |
---|---|---|
1 | SaveContract | 存证合约,可保存Key-Value及描述信息 |
2 | ERC20Contract | ERC20合约,基本符合以太坊官方标准,可作为Token发布的Demo |
3 | ERC721Contract | ERC721合约,基本符合以太坊官方标准,可作为NFT发布的Demo |
3.2 整体说明
为方便用户查看,对下面要讲到的合约内容进行一个整体的描述(或规范)。
- 函数类型:包括执行和查询两类,其中执行函数会进行链共识操作,查询函数则不会,仅调用连接节点的处理逻辑;
- 返回值:成功时有具体的返回值描述,失败时则会返回失败原因(函数集表格中不再说明失败情况);
- 入参说明:若该参数为可选会进行说明,其他情况均为必选。
3.3 存证合约
3.3.1 合约函数集
函数名 | 函数类型 | 函数说明 | 入参说明 | 返回值 | 备注 |
---|---|---|---|---|---|
save | 执行 | 保存对象 | key:数据存储的key data:数据存储的内容 desc:数据存储的描述(可选) | 数据存储的key | 重复的key会将原数据覆盖 |
find | 查询 | 查询对象 | key:数据存储的key | 存储内容的JSON格式 | 对象结构体:
type EvidenceInstance struct {
Key string |
进行save操作,即保存对象至底链时,若保存成功会触发 保存 事件,该事件主题为:topic_save
3.3.2 合约使用指南
存证合约的使用非常简单,主要包括两个部署:
- 1)保存数据:调用save函数对数据进行存储;
- 2)查询数据:调用find函数查询已经存储的内容;
3.4 ERC20合约
3.4.1 ERC20标准规范
ERC20是一套用于发行token的标准规范,它的定义如下:
代码语言:shell复制// 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);
为方便用户使用,本合约在已有规范的基础上增加了如下几个方法:
代码语言:shell复制function owner() : 返回当前合约的拥有者,即管理员
function transferOwner(to) : 转移owner至其他账号,该操作只能由管理员进行
function mint(to, value) : 增发,只能由管理员操作,可给管理员自己或其他人增发token,totalSupply会更新
function burn(value) : 燃烧,即释放自己对应数量的token,totalSupply会更新
function deliver(to, value) : 派发,只能由管理员操作,从合约账号地址中转移token至指定账户
function address(): 查询当前账号的地址
3.4.2 合约初始化
合约在初始化的过程中可以设置一些基础配置,包括发行token的名称、简称、总量等信息,若不设置则会使用合约代码中默认的配置。初始化过程中涉及到的参数配置列表说明如下:
参数名 | 参数含义 | 默认值 |
---|---|---|
owner | 合约拥有者地址 | 发起合约安装的用户地址 |
totalSupply | token总供应量 | 1_000_000_000,10亿 |
decimals | token计算支持的小数点数量 | 2,表示最小支持0.01 |
name | token名称 | DEMO |
symbol | token简称 | DE |
3.4.3 合约函数集
函数名 | 函数类型 | 函数说明 | 入参说明 | 返回值 | 备注 |
---|---|---|---|---|---|
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 | 查询 | 返回当前用户地址 | 该用户的地址 | 任何账号都可以查询 |
3.4.4 合约使用指南
在长安链的docker-vm虚拟机模型中,交易发起者的地址算法暂未公开,因此需要用户通过手动调用合约中address()方法获取。
ERC20合约是一个发行token的合约,可以通过该合约进行指定token的发行操作。它的核心操作流程包括如下几个步骤:
- 1)发布合约:初始化合约,可在初始化合约时通过初始化参数对合约名称、简称和发行总量等信息进行设置,发行合约后,该合约中的所有token都在指定地址 CTT 中,需要通过派发操作将这些token转移出来。
- 2)派发token:调用合约的 deliver 方法可进行合约的派发,通过该方法可将token从默认地址 CTT 中转移到指定账号;
- 3)转移自己的token:调用合约的 transfer 方法可将自己的token转移给其他账号;
- 4)转移他人的token:调用 transferFrom 方法可将 他人 的token转移给指定账号,但 他人 必须给自己授权足够的token转移操作才可以,授权操作可通过 approve 函数进行;
- 5)增发token:当需要对token进行增发时,可通过调用 mint 函数来进行;
- 6)销毁token:可通过 burn 函数销毁自己的部分token;
3.5 ERC721合约
3.5.1 ERC721标准规范
ERC721的标准规范包括三部分:
- 1)ERC721Metadata:描述了该NFT的元数据信息,该标准是一个可选项;
- 2)ERC721Enumerable:描述了该NFT的枚举信息,该标准是一个可选项;
- 3)ERC721:该NFT的基本操作,包括查询、授权和转移等多种操作,该标准是一个必选项;
其中ERC721Metadata的定义如下:
代码语言:shell复制// 返回给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的定义如下:
代码语言:shell复制// 返回该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的定义如下:
代码语言:shell复制// 返回该地址拥有的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);
为方便用户使用,本合约在已有规范的基础上增加了如下几个方法:
代码语言:shell复制function setTokenURI(): 设置token的URI属性,只有该token的拥有者具有此权限
function mint(): 增发,任何人均可以操作,可以增发给自己或其他人,但该token不能重复
function burn(): 燃烧,即销毁该token,只能token的拥有者才可以操作(授权也不可以)
function setCheckData(): 设置检查数据,方便safeTransferFrom时填写data内容
function checkData(): 返回检查数据,只能返回拥有者的数据
function address(): 返回当前账号的地址信息
3.5.2 合约初始化
合约在初始化的过程中可以设置一些基础配置,包括发行NFT的名称、简称等信息,若不设置则会使用合约代码中默认的配置。初始化过程中涉及到的参数配置列表说明如下:
参数名 | 参数含义 | 默认值 |
---|---|---|
name | token名称 | NFT-DEMO |
symbol | token简称 | NFDO |
3.5.3 合约函数集
函数名 | 函数类型 | 函数说明 | 入参说明 | 返回值 | 备注 |
---|---|---|---|---|---|
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 | 查询 | 返回当前用户地址 | 该用户的地址 | 任何账号都可以查询 |
3.5.4 合约使用指南
同ERC20合约一样,交易发起者的地址需要用户通过手动调用合约中address()方法获取。
ERC721是一个发行NFT的合约,可通过该合约发行NFT或转让NFT等操作。它的核心流程包括以下几个步骤:
- 发布合约:即初始化合约,可在初始化的时候设置该类NFT的名称(name)和简称(symbol);
- 发布NFT:调用合约的 mint 方法可发行指定的NFT,建议在发行时就设置NFT的URI信息,不建议调用 setTokenURI 进行调整;
- 授权NFT:即授权别人操作自己的NFT,可通过 approve 方法进行某个NFT的授权,也可以通过 setApprovalForAll 函数授权某个用户替代自己的所有操作,这两者中后者的优先级更高,当然用户可通过调整合约方式来实现自己的逻辑;
- 普通转移NFT:可通过调用合约的 transferFrom 方法,实现NFT的转移,若当前操作者不是对应NFT的拥有者,则需要其拥有者为当前操作者进行授权;
- 安全转移NFT:可通过调用合约的 safeTransferFrom 方法实现NFT的安全转移,所谓的安全转移是指在转移的内容中添加了 data 参数,可通过对data的校验来实现安全的操作;
- 销毁NFT:当用户不再想使用NFT时,可通过 burn 函数实现对NFT的销毁,销毁后无法找回。
4. 管理台操作
为降低长安链的使用门槛,官方推出长安链管理台,以便用户在初步接触长安链时,能够通过本平台可单机快速部署长安链用于产品体验和测试,并对长安链的技术架构,功能模块有一个初步了解。
在lighthose上,为进一步降低使用门槛,平台给每个用户私有化内置了一条长安链,用户可在该链上进行功能测试和产品体验。
4.1. 内置长安链的使用
4.1.1. 整体流程说明
为方便用户使用,平台本身在启动的时候,自动部署了一条链可直接使用,主要流程如下
1、在管理台-区块链管理模块,找到这条默认部署的链。
2、在区块链管理-合约管理模块,管理已经默认配置进去的三个合约,包含存证合约,ERC-20合约,ERC-721合约。
3、在区块链管理-上链管理处,调用内置的合约、并在区块链浏览器模块上查看链上信息。
4、您可以继续在这条链上,部署并使用自己的其他合约。
4.1.2. 内置的长安链说明
序号 | 内容 | 说明 |
---|---|---|
1 | 长安链版本 | V2.3.0 |
2 | 链id | chain1 |
3 | 组织数 | 4个组织 |
4 | 节点数 | 4个共识节点 |
5 | 共识算法 | TBFT |
6 | 单区块最大交易容量 | 100笔交易 |
7 | 交易过期时长 | 600s |
8 | 交易间隔 | 2000ms |
9 | 是否支持docker_VM | 支持 |
4.1.3. 登录
- 本平台时会生成的对应的
admin
账号,默认密码请参考密码文档
。如需新增其他账号,可通过admin
账号,在平台账户管理处新增。
4.1.4. 证书模块
- 平台已经默认把内置部署的长安链的相关证书信息内置到管理台内,包含组织证书、节点证书、用户证书。
4.1.5. 区块链管理
4.1.5.1. 区块链列表
- 在区块链管理处,可看到已经内置部署的长安链。点击卡片开始使用。
- 默认用该链的,org1组织下的consensus1节点来订阅链,以及通过org1组织下的admin1用户证书来给链发交易。
4.1.5.2. 区块链概览
- 此处支持查看并管理链的基本概览,包含链基础信息,以及链权限管理信息。
- 支持下载SDK配置。
- 如果您一并部署了长安链的区块链浏览器,支持将管理台内的链直接订阅到区块链浏览器里。
4.1.5.3. 查看示例合约
- 此处展示本区块链已经部署的合约信息。支持新增合约,升级合约,冻结合约,解冻合约,注销合约,编辑查看合约等。
- 默认会内置三个测试合约,包含存证合约,ERC-20合约,ERC-721合约。相关合约源码及介绍,可查看合约介绍章节。
4.1.5.4. 使用示例合约
- 此处展示通过该平台调用合约的记录,以及执行结果,也可点击查看详情,跳转到区块链浏览器查看详细的链上信息。
- 在此处可点击发起上链直接调用示例合约。
- 使用前,建议请您先前往合约介绍章节,熟悉示例合约的具体业务内容,再进行调用。
4.1.5.5. 发起上链
- 此处可选择你要调用的合约,以及对应的合约方法,并填写入参,点击确定,发起上链交易。
- 发起上链请求后,将会用订阅链时所选择的用户来构建交易,并进行交易签名。
- 交易发送成功后,会在上链管理列表里展示。
4.1.5.6. 查看本链参与组织列表
- 查看该条链的参与组织
4.1.5.7. 查看本链参与节点列表
- 此处展示该条区块链的参与节点以及节点详情。
4.1.5.8. 区块链浏览器
4.1.5.8.1. 浏览器整体概览
- 此处展示区块链的全部区块信息,交易信息和合约信息
- 支持通过区块高度,区块哈希,交易哈希,合约名称等搜索
4.1.5.8.2. 查看区块详情
- 支持查看某一区块的具体信息,包括区块哈希,读写集哈希,DAG信息,以及本区块内的交易信息。
4.1.5.8.3. 查看交易详情
- 支持查看某一条交易详情,包括交易的所属区块信息,交易发起人信息,交易所调用的合约执行情况。
4.1.5.8.4. 查看合约详情
- 支持查看合约信息,包括合约的创建者信息,以及合约调用的历史交易记录。
- 暂不支持查看合约源码。
4.2. 从零部署链
4.2.1. 整体流程说明
如果您想部署一条新的长安链,可通过本平台部署,主要流程如下。
1、首先需要在证书管理模块申请相关的组织证书、节点证书、用户证书。
2、接着在区块链管理模块,配置链的相关信息,包含区块基本配置、共识策略、参与组织与节点等,生成链的配置文件。
3、将配置文件下载并移动到,您的linux
服务器上,解压文件后,执行内置的脚本,一键启动链。
4、部署成功后,在管理平台上订阅链,使管理平台与链上某一节点建立联系,获得链上信息。
5、订阅成功后,您可以通过管理平台部署管理合约,发送交易,通过区块链浏览器查看链上信息。
4.2.2. 证书管理
4.2.2.1. 组织证书
4.2.2.1.1. 查看组织证书列表
- 此处可查看已申请到的组织证书列表,并可以申请新的证书,导入外部证书,查看并下载证书。
- 如果您是首次部署链,前先申请证书。
4.2.2.1.2. 申请组织证书
- 填写组织ID,组织名称申请组织证书。
- 注意组织ID不能重复申请。
4.2.2.2. 节点证书
4.2.2.2.1. 查看节点证书列表
- 此处可查看已申请到的节点证书列表,并可以申请新的证书,导入外部证书,查看并下载证书。
4.2.2.2.2. 申请节点证书
- 节点证书是由上级组织机构签发的,故而申请节点证书前,请先确保已申请/导入相应的组织证书。
- 目前节点证书角色分为共识节点和同步节点两种。
- 通过填写节点名称、组织信息,节点角色申请节点证书。
4.2.2.3. 用户证书
4.2.2.3.1. 查看用户证书列表
- 此处可查看已申请到的用户证书列表,并且可以申请新的证书,导入外部证书,查看并下载证书。
4.2.2.3.2. 申请用户证书
- 用户证书是由上级组织机构签发的,故而申请用户证书前,请先确保已申请/导入相应的组织证书。
- 目前用户证书角色分为
admin
和client
两种。 - 通过填写用户名称、组织信息,用户角色申请用户证书。
4.2.3. 区块链管理
4.2.3.1. 区块链概览
4.2.3.1.1. 查看区块链列表
- 此处展示已跟本平台建立联系的区块链,其中如果点击未订阅的链,会跳转到下载链配置文件页面。如果已经订阅,则点击会进入链管理页面。
- 支持新增区块链配置文件,通过配置文件执行部署脚本可以快速部署链。
- 支持订阅已经部署运行的区块链。
- 新增已失效状态,如果所订阅的链的节点已经停止运行,或者获取不到链的信息,则为已失效。支持删除未订阅的链和已失效的链。
4.2.3.1.2. 新增区块链
- 链配置文件参数设定
- 此处用于新增链配置文件,目前支持自定义链的id、名称、区块最大容量,出块间隔、交易过期时长,以及共识配置。
- 支持创建Public公钥模式的区块链。
- 目前支持配置
TBFT
、RAFT
、SOLO
、HOTSTUFF
等共识。 - 申请链配置文件前,请先确保,所需的组织和节点证书已经申请/导入本管理平台。
- 支持根据需求选择你要部署的链所支持的虚拟机类型。
- 部署区块链
- 设置完配置文件后,会自动生成链配置文件,并将配置文件和部署脚本以压缩包的形式提供,请下载压缩包文件。
- 请将下载后的包,移动到要部署的机器上,执行
release
目录下的start.sh
脚本即可启动链,命令如下:
$ #此处以示例节点为例,实际操作时请自行换成真实的名称
$ cd release/TestCMorg1-示例测试节点1/bin
$ ./restart.sh
可通过如下命令验证节点是否启动成功
代码语言:txt复制$ #查看节点进程是否存在
$ ps -ef|grep chainmaker | grep -v grep
$ #查看节点日志是否存在
$ cat ../release/*/log/system.log |grep "ERROR|put block|all necessary"
$ #若看到all necessary peers connected则表示节点已经准备就绪。
- 在本地部署完链后,需要在管理台的订阅链模块,订阅所部署的链,以建立区块链与本管理台的联系。
4.2.3.1.3. 订阅区块链
- 如果您已经在服务器部署完区块链后,可在此处订阅区块链。
- 在后续的多签投票流程中,需要用到组织证书。
- 此处设置的节点,用于监听对应链的信息,以及通过该节点,往链上发送消息。
- 此处设置的用户,将在后续对链上发起交易请求时,用于签名。
4.2.3.1.4. 修改区块链配置
- 支持在链部署完成后,修改链的配置信息。
4.2.3.1.5. 链权限配置
- 支持查看并修改链相应的管理权限,包括所属权限的投票规则,以及参与方。
- 包括新增节点权限,更新区块配置权限,升级合约权限,冻结合约权限,解冻合约权限,注销合约权限。
4.2.4. 合约管理
4.2.4.1. 查看合约列表
- 此处展示本区块链已经部署的合约信息。支持新增合约,升级合约,冻结合约,解冻合约,注销合约,编辑查看合约等。
- 您可以在此处将您以后的合约部署到该链上。
4.2.4.2. 部署合约
- 注意合约名称必须保证唯一。
- 目前支持的合约虚拟机类型为:
WASMER
、EVM
、WXVM
、GASM
。 - 需要上传编译后的合约文件。
- 如果在链权限配置处,设置了部署合约需要多签,则此处可填写部署理由,提交部署后,会生成投票议案,通过后会部署上链。
- 部署合约时,支持预设该合约的额外参数信息。
- 部署合约时,如果是Docker_go合约则需要确保您的链版本在v2.1.0以上,且开启docker-vm,详情可见开源文档使用docker_go进行智能合约开发模块。
- 部署合约时,如果是EVM合约会根据abi文件自动解析出合约调用方法,其他类型的合约支持手动录入调用方法,以便后面引用。
- 合约调用方法为选填项,此处录入只是方便管理台其他地方可以引用,就算不录入也不影响直接调用合约。
- 发起部署合约后,将会用订阅链时所选择的用户来构建交易,并进行交易签名。
4.2.4.3. 升级合约
- 升级时,所填写的合约版本号,必须大于升级前的版本号。升级完成后,原合约将无法使用。
- 其余情况与部署合约类似。
4.2.4.4. 编辑合约
- 支持编辑合约调用方法,此处编辑的合约方法只是为链管理台上链管理功能处引用方便,并不影响链上合约代码。
- 请正确的填写合约调用方法,如果一个方法涉及多个入参,可以用逗号分隔。
4.2.4.5. 其他操作
- 处于正常状态下的合约,可以进行冻结操作。冻结行为需要经过多签投票后,才能执行。冻结后合约将暂时无法使用。
- 处于冻结状态下的合约,可以进行解冻操作,解冻行为需要经过多签投票后,才能执行。解冻后合约将恢复正常使用。
- 如果不需要使用该合约,可以将该合约注销,注销行为需要经过多签投票后,才能执行。注销后合约将永久无法使用。
4.2.5. 上链管理
4.2.5.1. 查看已上链记录列表
- 此处展示上链记录列表,可以继续发起上链交易,或者查看已经上链的交易详情。
4.2.5.2. 发起上链
- EVM合约通过解析abi文件可以自动获取合约调用方法,其他类型的合约目前需要手动录入调用方法。
- 此处选择链上合约后,如果在合约管理处已经录入过合约方法,则将自动引入,填写相关的value值即可发起合约调用(上链)操作。
- 同时支持手动输入调用方法,并填写相应的入参,发起合约调用(上链)操作。
- 发起上链请求后,将会用订阅链时所选择的用户来构建交易,并进行交易签名。
- 交易发送成功后,会在上链管理列表展示,可以点击详情,到区块链浏览器上查看更多交易的信息
4.2.6. 投票管理
4.2.6.1. 查看投票列表
- 此处展示需要投票的投票议案,包括已投票议案的和未投票的议案。
- 长安链管理台的用户大多是自己部署了一条私有链进行测试,为了测试多组织投票的场景,此处模拟了投票的功能,用户可切换组织进行投票。
- 用户可在链权限配置模块,查看并修改投票事件和投票策略。比如将部署合约的投票策略由需要大多数组织同意改为任一组织同意即可部署等。
- 此处可通过切换组织,查看对应组织的投票情况。
4.2.6.2. 参与投票
- 点击投票,弹出弹窗,查看投票议案的具体内容,并决定是否投票通过。
- 投票通过后,会检查是否满足链权限管理处的投票条件,如果满足的话,则往链上发起交易。
4.2.6.3. 查看投票详情
- 支持查看投票详情,查看哪些组织投票,哪些还尚未投票。
4.3. 导入已有链
4.3.1. 整体流程说明
如果您已经有正在运行中的链,可将之导入到本管理台进行管理,主要流程如下
1、在证书管理先将该链上的某一组织证书、节点证书、用户证书导入到本管理台。
2、在区块链管理模块,使用所导入的组织、节点、用户信息订阅链。
3、订阅成功后,您可以通过所配置的节点与链建立联系,并且支持在管理台上部署管理合约,发送交易,通过浏览器查看链上信息
4.3.2. 证书管理
4.3.2.1. 导入组织证书
- 如果您已经通过长安链的
ca服务
,生成过证书,则可以将证书直接导入使用。 - 目前暂不支持导入长安链体系外的
ca证书
。
4.3.2.2. 导入节点证书
- 如果您已经通过长安链的ca服务,生成过节点证书,则可以将证书直接导入使用。
- 注意导入节点证书前需要先导入节点证书签发组织的组织证书,并且导入节点证书时所选择的组织信息,必须与本节点证书签发的组织保持一致。
- 目前暂不支持导入长安链体系外的ca证书。
4.3.2.3. 导入用户证书
- 如果您已经通过长安链的ca服务,生成过用户证书,则可以将证书直接导入使用。
- 注意导入用户证书前需要先导入用户证书签发组织的组织证书,并且导入用户证书时所选择的组织信息,必须与本用户证书签发的组织保持一致。
- 目前暂不支持导入长安链体系外的ca证书。
4.3.3. 区块链管理
4.3.3.1. 订阅区块链
- 请确保您已经有一条正在运行的链,且链的相关证书已经导入到管理台后,才可在此处订阅区块链。
- 在后续的多签投票流程中,需要用到组织证书。
- 此处设置的节点,用于监听对应链的信息,以及通过该节点,往链上发送消息。
- 此处设置的用户,将在后续对链上发起交易请求时,用于签名。
4.3.3.2. 使用区块链
- 订阅区块链成功后你可以在区块链管理模块,管理使用该链,具体操作方式和使用内置的长安链,以及通过管理台启动的链一致。
4.4. 其他补充说明
4.4.1. 证书管理
4.4.1.1. 查看下载组织证书
- 如果需要将证书移动到其他地方使用,比如长安链CMC工具,SDK工具等。可以直接查看,并下载组织证书。
4.4.1.2. 查看下载节点证书
- 如果需要将证书移动到其他地方使用,比如长安链CMC工具,SDK工具等。可以直接查看,并下载节点证书。
4.4.1.3. 下载用户证书
- 如果需要将证书移动到其他地方使用,比如长安链CMC工具,SDK工具等。可以直接查看,并下载用户证书。
4.4.2. 账户管理
4.4.2.1. 平台账号列表
- 可在平台账号管理处,新增账号,禁用/启用账号。
- 如果忘记密码,管理员可将某一账户的密码重置为
a123456
。 - 在右上角账号位置,可以修改密码和退出登录。
4.4.2.2. 新增账号
- 输入姓名,用户名,登录密码新增账号,其中用户名不可以重复。
4.4.3. SDK管理
4.4.3.1. 查看开源文档及SDK
- 此处提供开源文档,长安链源码,以及各
SDK
的下载入口。
5. SDK访问底链
默认的Lighthouse环境中并没有开放底链访问需要的端口,在不修改配置的环境下是12301/12302/12303/12304。如需要通过SDK访问底链,需要首先将端口开放。
5.1. 放开底链访问端口
进入腾讯云该Lighthouse的管理台,选择防火墙页面。
可以看到目前只有一些基本的端口开放了,我们关注的12301-12304并没有开放,此时点击 "添加规则" 按钮,进入规则配置页面:
按照上图填写规则即可,若想限制访问来源,即哪些IP地址可以访问该端口,可以选择 启用 复选框,填入指定的源IP:
填写完成后,点击确定按钮,则会看到新创建的规则:
此时若本地使用 telnet工具进行访问,则可以发现端口已经可正常访问:
5.2. 下载证书
通过WebShell登录Lighthouse服务器后,使用如下命令进入到指定组织的用户证书页面:
代码语言:shell script复制[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为例:
代码语言:shell script复制[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用户,否则会出现权限问题。
5.3. SDK使用
SDK使用可参考:https://docs.chainmaker.org.cn/dev/SDK.html