Нет описания

chencheng 1ebf00d5ef update 2 лет назад
conf 99511d6d78 字面修改 4 лет назад
images cbbbfc4c97 1.0.0发布 4 лет назад
node1 0690ad69d2 优化 4 лет назад
node2 0690ad69d2 优化 4 лет назад
node3 0690ad69d2 优化 4 лет назад
node4 0690ad69d2 优化 4 лет назад
sql 728540f4d0 sql文件上传 4 лет назад
wasm cbbbfc4c97 1.0.0发布 4 лет назад
.gitignore 0690ad69d2 优化 4 лет назад
chain_linux_x86_1.0.0 cbbbfc4c97 1.0.0发布 4 лет назад
chain_windows_x86_1.0.0.exe cbbbfc4c97 1.0.0发布 4 лет назад
libwasmer-arm.so cbbbfc4c97 1.0.0发布 4 лет назад
libwasmer.dylib cbbbfc4c97 1.0.0发布 4 лет назад
libwasmer.so cbbbfc4c97 1.0.0发布 4 лет назад
libwasmer_runtime_c_api.so cbbbfc4c97 1.0.0发布 4 лет назад
readme.md 1ebf00d5ef update 2 лет назад
wasmer_runtime_c_api.dll cbbbfc4c97 1.0.0发布 4 лет назад

readme.md

湖南御码区块链1.0.0

关于

湖南御码网控信息技术有限公司,注册资金1000万元,公司总部位于长沙市高新区,是一家拥有多项自主知识产权的高新技术研发型企业,同时也是一家专业的密码应用综合解决方案提供商,公司集结了一大批经验丰富的密码应用从业专家,致力于打造以国产密码技术为核心的新网络安全基础设施,构建自主可控的网络安全体系,为密码应用安全性评估及技术改造提供整体解决方案。公司以技术自主创新为驱动力,依据国家各项要求及规范,围绕国产密码算法研发了一系列产品,主要包括:密码服务中台管理系统、密码安全中间件软件、移动认证APP软件、统一身份认证平台、终端安全管理软件等,面向全国用户提供密码综合应用服务,为国家信息安全建设贡献力量。

湖南御码网控信息技术有限公司

系统架构

基于长安链1.2.5版本开发

共识节点(consensus node)

参与区块链网络中共识投票、交易执行、区块验证和记账的节点。

同步节点 (sync node)

见证节点,参与区块和交易同步、区块验证,交易执行,并记录完整账本数据,但不参与共识投票。

轻节点 (light node)

参与同步和校验区块头信息、验证交易存在性的节点。

共识算法

算法 节点数量
Raft 2n+1 联盟链中不需要考虑恶意节点,且需要性能较高的场景
TBFT 3n+1 联盟链中需要考虑恶意节点的场景
HotStuff 3n+1 联盟链中需要考虑恶意节点的场景

智能合约

支持使用C++、Go、Rust、Solidity进行智能合约开发,每种开发语言实现的合约由不同的虚拟机执行,在将合约发布到链上时通过Runtime Type来指定虚拟机类型。

共识网络

支持国密通信 网络模块参考https://libp2p.io/

产品演示

演示地址 http://chain.yumawk.com

区块链主链(1.0.0)

产品部署

配置文件

链配置文件 [node1/chainconfig/bc1.yml]

主要配置项

consensus.nodes #共识节点配置

trust_roots #信任组织和根证书

同一个链bc1.yml需要保持一致,新节点的加入需通过区块链管理平台,否则区块验证不通过

主配置文件 [node1/chain.yml]

主要配置项

node.priv_key_file #共识节点签名证书私钥配置

cert_file #共识节点签名证书配置

net.listen_addr #节点地址配置,不同的节点IP和端口不一样

net.seeds #引导节点地址配置,需要能连通的已启动节点地址

net.tls #共识节点通信TLS证书配置,支持国密

rpc.tls #SDK调用TLS证书配置,支持国密

storage *store_path #区块存储本地路径配置

启动命令

WINDOWS

chain_windows_x86_1.0.0.exe start -c ./node1/chain.yml

LINUX

赋予执行权限 chmod +x chain_linux_x86_1.0.0

export LD_LIBRARY_PATH=$PWD

export WASMER_BACKTRACE=1

./chain_linux_x86_1.0.0 start -c ./node1/chain.yml

后台运行 nohup ./chain_linux_x86_1.0.0 start -c node1/chain.yml > panic.log &

服务管理Shell脚本[TODO]

Docker容器[TODO]

新增共识节点

  1. 通过管理平台签发节点证书

客户端证书有获取链的基本信息,调用合约,获取区块信息权限

管理员证书有客户端证书所有权限,额外有添加根证书,部署合约,新增共识节点权限

节点名称如果为 node2 签发出来的组织名称为node2.yumawk.com

  1. 根据签发的节点证书配置bc1.yml和chain.yml,启动区块链node2

  2. 通过管理平台配置链信息,连接区块链

  3. 通过管理平台配置客户端证书和管理员证书

  4. 通过管理平台信任根证书

  5. 通过管理平台添加共识节点

  6. 多节点产生共识

合约调用

  1. 通过管理平台添加合约

存证合约虚拟机文件 [wasm/fact_1.0.0.wasm]

  1. 支持C++、Go、Rust、Solidity开发语言进行智能合约开发

  2. GO语言SDK

https://git.chainmaker.org.cn/chainmaker/chainmaker-sdk-go/-/tags/v1.2.5

  1. JAVA语言SDK

https://git.chainmaker.org.cn/chainmaker/chainmaker-sdk-java/-/tags/v1.2.4

其他合约开发[TODO]

代码调用示例

创建节点

node := chainmaker_sdk_go.NewNodeConfig(
    // 节点地址,格式:127.0.0.1:12301
    chainmaker_sdk_go.WithNodeAddr(nodeAddr),
    // 节点连接数
    chainmaker_sdk_go.WithNodeConnCnt(connCnt),
    // 节点是否启用TLS认证
    chainmaker_sdk_go.WithNodeUseTLS(true),
    // 根证书内容,支持多个
    chainmaker_sdk_go.WithNodeCACerts(caCertBase64),
    // TLS Hostname
    chainmaker_sdk_go.WithNodeTLSHostName(tlsHostName),
)

创建客户端连接

if node == nil {
    // 创建节点
    node = createNodeWithCaCert(nodeAddr, connCnt)
}
chainClient, err := chainmaker_sdk_go.NewChainClient(
    // 设置归属组织
    chainmaker_sdk_go.WithChainClientOrgId("sina.yumawk.com"),
    // 设置链ID
    chainmaker_sdk_go.WithChainClientChainId(chainId),
    // 设置客户端用户私钥路径
    chainmaker_sdk_go.WithUserKeyFilePath(fmt.Sprintf(userKeyPath, orgId)),
    // 设置客户端用户证书
    chainmaker_sdk_go.WithUserCrtFilePath(fmt.Sprintf(userCrtPath, orgId)),
    // 添加节点1
    chainmaker_sdk_go.AddChainClientNodeConfig(node),
    // 添加节点2
    //AddChainClientNodeConfig(node1),
)
if err != nil {
    return nil, err
}
//启用证书压缩(开启证书压缩可以减小交易包大小,提升处理性能)
err = chainClient.EnableCertHash()
if err != nil {
    return nil, err
}

调用合约[save]

client, err := createClientWithCaCerts()
curTime := fmt.Sprintf("%d", chainmaker_sdk_go.CurrentTimeSeconds())
fileHash := uuid.GetUUID()
params := map[string]string{
    "time":      curTime,
    "file_hash": fileHash,
    "file_name": fmt.Sprintf("file_%s", curTime),
}
resp, err := client.InvokeContract(contractName, "save", "", params, -1, true)
if err != nil {
    panic(err)
}
fmt.Println(resp)

调用合约[find_by_file_hash]

client, err := createClientWithCaCerts()
fileHash := "5e5eced9b0204c9d891c81aa9d41a209"
params := map[string]string{
    "file_hash": fileHash,
}
resp, err := client.InvokeContract(contractName, "find_by_file_hash", "", params, -1, true)
if err != nil {
    panic(err)
}
fmt.Println(resp)

区块链管理平台(1.0.0)

产品部署

配置文件[conf/app.conf]

appname = manage
runmode = prod

[dev]
httpport = 80
mysql.dataSource = root:xxxxxx@tcp(127.0.0.1:5000)/block_chain?charset=utf8mb4
[prod]
httpport = 80
mysql.dataSource = root:xxxxxx@tcp(172.17.0.1:5000)/block_chain?charset=utf8mb4

dev为开发模式,prod为线上模式

数据库脚本[sql/block_chain.sql]

LINUX

赋予执行权限 chmod +x chain_manage_linux_x86_1.0.0

后台运行 nohup ./chain_manage_linux_x86_1.0.0 > panic.log &

服务管理Shell脚本[TODO]

Docker容器[TODO]

产品截图

image-20210929150144239

image-20210929150626206

image-20210929150915040

image-20210929150935269

image-20210929150955542

image-20210929151012773

image-20210929151211981

image-20210929151234739