Skip to content

little51/codechain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

aca3b68 · Jun 5, 2020

History

90 Commits
Jun 3, 2020
Jun 5, 2020
Mar 5, 2020
Mar 24, 2020
May 12, 2020
Jun 5, 2020
Mar 4, 2020
May 12, 2020
Mar 30, 2020
Mar 5, 2020
Mar 6, 2020
Mar 24, 2020
Mar 6, 2020

Repository files navigation

codechain

​ codechain基于 Tendermint共识机制的代码链,采用go语言实现,并且依赖于Tendermint环境,建议在ubuntu16.04下开发,

  • ​ 为了便于后续的开发,首先建立起git、golang、tendermint代码库、vscode的开发环境,参考 建立开发环境
  • 为了验证Tendermint的四个节点的运行情况,参考 运行环境组网
  • 为了验证Tendermint更多的节点加入,参考 Seed模式组网
  • Tendermint一些难点,可参考 FAQ

Codechain核心

安装Mongodb

​ 资产数据采用Mongodb保存,所以请先安装Mongodb。

sudo apt-get install mongodb

二进制文件安装

codechain采用go语言开发,所以无依赖库,直接下载可执行文件即可运行,预览功能,安装脚本见

https://github.com/little51/codechain/blob/master/release/v0.0.1/codechain_v0.0.1_linux_amd64.sh

程序编译

如果已经配置好go开发环境,可以编译程序源码。

export GO111MODULE=on
export GOPROXY=https://goproxy.io
cd core
go build

运行

链初始化

tendermint init

链初始化只做一次,执行完成后,会在~/.tendermint目录下生成配置文件和数据文件。

运行应用

进入codechain/core目录下执行下面操作:

cd codechain/core
go build
./core

core程序会在26658端口监听tendermint进程发过来的交易。

运行单节点

​ 再开一个命令行,执行:

tendermint node

tendermint会在26657端口监听。

测试

curl -s 'localhost:26657/broadcast_tx_commit?tx="eyJwdWJsaWNrZXkiOiJBNUZFQTY0NUMwOTlGNjlFRTVGQ0Q4QjY3RkU4M0VBQ0QwQ0JBQzQxMEFCQzVCOEZBNUNCNEU0NTFENUY1Q0VDIiwic2lnbiI6IjNiOTM2ODc5MzkyMDJiNTJhZWJlZDA2YjU1ZjY2M2ZiN2M0ZjYyNzU2MGY3OTA3NDM5ZDg4ZjYzMWM5NWI4ZjNjYzdkODBkNzEzMTgwZjRhMDg1MDBkZDU5YTgzNjlhODZmODlhODQ4NDI1NzZjMDJkMTFkYTI3NTdhNzBiZDBkIiwibXNnIjoiZXlKMGIydGxiaUk2SWtWUFJpSXNJbVp5YjIwaU9pSkJOVVpGUVRZME5VTXdPVGxHTmpsRlJUVkdRMFE0UWpZM1JrVTRNMFZCUTBRd1EwSkJRelF4TUVGQ1F6VkNPRVpCTlVOQ05FVTBOVEZFTlVZMVEwVkRJaXdpZEc4aU9pSkVOemM1UkRZelJqZzNRa0kyT1RreE4wTTBSRE5FUkRKQ056WXlNekUxT1RVeE9URTVOVVExUVRWQlJEYzBSakV3UWpjNFJEbEJNamRCT1RZMk5UVkRJaXdpWVcxdmRXNTBJam9pTlRBaWZRPT0ifQ=="'
curl -s 'localhost:26657/abci_query?data="key=key1"'

Web应用

​ Web应用目前提供了账户管理和简单的资产管理,可实现账户密钥对的创建,资产的签名、登记。

编译运行

cd webserver
go build
./webserver

测试

​ 新建账户,返回公私钥对,对资产字符串进行私钥签名,用公钥验证。

新建账户

curl -X POST http://localhost:4000/account/new

结果如下:

{
	"address":"ECDCE3D5B6164768C0D4DFB74BF6B9E2C4D1682B",
	"error":"",
	"privateKey":"80d7f6a76d6bbc9893efff3721a49432f5ffdba39e0c98256d7e3fdd53e6b807d4e4cf08ec338970efc0e6b8e1dde3d4129a6bb5588ba90f72f9a0d6c0ed62ce",
  "publicKey":"D4E4CF08EC338970EFC0E6B8E1DDE3D4129A6BB5588BA90F72F9A0D6C0ED62CE"
}

资产签名

资产交易需要先进行资产签名,验证发起资产交易账户的公私钥对

测试如下

curl  -H "Content-Type: application/json" -d '{"privatekey":"80d7f6a76d6bbc9893efff3721a49432f5ffdba39e0c98256d7e3fdd53e6b807d4e4cf08ec338970efc0e6b8e1dde3d4129a6bb5588ba90f72f9a0d6c0ed62ce","msg":"eyJ0b2tlbiI6IktLSyIsImZyb20iOiJENEU0Q0YwOEVDMzM4OTcwRUZDMEU2QjhFMURERTNENDEyOUE2QkI1NTg4QkE5MEY3MkY5QTBENkMwRUQ2MkNFIiwidG8iOiIiLCJhbW91bnQiOiI2MDAifQ=="}' -X POST http://localhost:4000/account/sign

结果如下:

{"error":"","sign":"25a76ff76196706d63c3190cfb97edd45f322f046cb9d78592eda1368b42c15c63a6780a777a40de626b9b9530e9433f51d8ee300b881ea55941cc53b5b27507"}

资产创世

在资产交易之前,应该确认发起者拥有足够的token,可以通过资产创世的方式来创建一种新的token

测试如下:

curl  -H "Content-Type: application/json" -d '{"publickey":"D4E4CF08EC338970EFC0E6B8E1DDE3D4129A6BB5588BA90F72F9A0D6C0ED62CE","sign":"25a76ff76196706d63c3190cfb97edd45f322f046cb9d78592eda1368b42c15c63a6780a777a40de626b9b9530e9433f51d8ee300b881ea55941cc53b5b27507","msg":"eyJ0b2tlbiI6IktLSyIsImZyb20iOiJENEU0Q0YwOEVDMzM4OTcwRUZDMEU2QjhFMURERTNENDEyOUE2QkI1NTg4QkE5MEY3MkY5QTBENkMwRUQ2MkNFIiwidG8iOiIiLCJhbW91bnQiOiI2MDAifQ=="}' -X POST http://localhost:4000/assets/new

结果如下:

{
  "error": "",
  "info": "{ \n \"jsonrpc\": "2.0",\n \"id\": \"\",\n \"result\": {\n \"check_tx\": {\n \"code\": 0,\n \"data\": null,\n \"log\": \"\",\n \"info\": \"CheckTx successfully carried out the signVerify\",\n \"gasWanted\": \"1\" \n \"gasUsed\": "0",\n \"events\": [], \n \"codespace\": \"\"},\n \"deliver_tx\": {\n \"code\": 0,\n \"data\": null, \n \"log\": \"\", \n \"info\": \"\",\n \"gasWanted\": \"0\",\n \"gasUsed\": \"0\",\n \"events\": [],\n \"codespace\": \"\"},\n \"hash\": \"91C2DA3A01E9093FB7CF1FD4A30C93A5164A8F20FFCE28020BD7AB1497FB3AE8\",\n \"height\": \"82\"}}\n",
  "result": true
}

资产交易

两个不同账户之间可以进行相同token的交易

curl  -H "Content-Type: application/json" -d '{"publickey":"D4E4CF08EC338970EFC0E6B8E1DDE3D4129A6BB5588BA90F72F9A0D6C0ED62CE","sign":"df2d0652c8994ddc14ec70f9532aff7fb9b4ccd3077bf9c88c936a65a18a500e380f639f410d4058deddc2d4047bee070e229b0b5e86aaa97448374ac854770d","msg":"eyJ0b2tlbiI6IktLSyIsImZyb20iOiJENEU0Q0YwOEVDMzM4OTcwRUZDMEU2QjhFMURERTNENDEyOUE2QkI1NTg4QkE5MEY3MkY5QTBENkMwRUQ2MkNFIiwidG8iOiJBNUZFQTY0NUMwOTlGNjlFRTVGQ0Q4QjY3RkU4M0VBQ0QwQ0JBQzQxMEFCQzVCOEZBNUNCNEU0NTFENUY1Q0VDIiwiYW1vdW50IjoiMzAwIn0="}' -X POST http://localhost:4000/assets/new

结果如下:

{
  "error": "",
  "info": "{ \n \"jsonrpc\": "2.0",\n \"id\": \"\",\n \"result\": {\n \"check_tx\": {\n \"code\": 0,\n \"data\": null,\n \"log\": \"\",\n \"info\": \"CheckTx successfully carried out the signVerify\",\n \"gasWanted\": \"1\" \n \"gasUsed\": "0",\n \"events\": [], \n \"codespace\": \"\"},\n \"deliver_tx\": {\n \"code\": 0,\n \"data\": null, \n \"log\": \"\", \n \"info\": \"\",\n \"gasWanted\": \"0\",\n \"gasUsed\": \"0\",\n \"events\": [],\n \"codespace\": \"\"},\n \"hash\": \"B80F6B79569989513E5F23552CDBB53BA854F468FC2A4BFF1696C4C897660734\",\n \"height\": \"83\"}}\n",
  "result": true
}

资产查询

通过公钥可以来查询到当前所有不同token的资产信息

测试如下:

curl  -H "Content-Type: application/json" -d '{"key": "D4E4CF08EC338970EFC0E6B8E1DDE3D4129A6BB5588BA90F72F9A0D6C0ED62CE"}' -X POST http://localhost:4000/assets/query

结果如下:

{
  "error":"",
  "info":"{\n  \"jsonrpc\": \"2.0\",\n  \"id\": -1,\n  \"result\": {\n    \"response\": {\n      \"code\": 0,\n      \"log\": \"\",\n      \"info\": \"D4E4CF08EC338970EFC0E6B8E1DDE3D4129A6BB5588BA90F72F9A0D6C0ED62CE\",\n      \"index\": \"0\",\n      \"key\": null,\n      \"value\": \"eyJhcnJheSI6IFt7InB1YmxpY2tleSI6IkQ0RTRDRjA4RUMzMzg5NzBFRkMwRTZCOEUxRERFM0Q0MTI5QTZCQjU1ODhCQTkwRjcyRjlBMEQ2QzBFRDYyQ0UiLCJ0b2tlbiI6IktLSyIsImFtb3VudCI6MzAwfV19\",\n      \"proof\": null,\n      \"height\": \"0\",\n      \"codespace\": \"\"\n    }\n  }\n}",
  "result":true
}

msg说明

在资产签名,资产创世,资产查询测试中,POST请求数据中包含msg字段,该字段是处理后的一段加密Base64的字符串。其原始信息为包含token、from、to和amount四个属性的javascript对象,在前端经JSON.stringify()和Base64.encode()先后处理后形成最终的msg值。

数据库查询

​ 资产会保存到Mongodb中,通过Mongodb客户端可以查询chain数据库的assets集合。

链浏览器

参见 链浏览器 的说明。

路线图

序号 类别 任务 完成情况
1 基础 开发环境 完成
2 运行环境 完成
3 一键自动安装应用 完成
4 资产 基本key-value(mongledb) 完成
5 账户account与签名 完成
6 可分隔资产 开发中
7 API API规划 完成
8 WEBUI 块浏览器 开发中
9 资产管理 开发中
10 账户管理 完成
11 网络 协调节点 完成
12 节点管理(增减节点) 开发中
13 应用 生态系统(代码仓库、分布式应用、资产、价值) 规划完成