# ETH_platform
**Repository Path**: yarl/ETH_platform
## Basic Information
- **Project Name**: ETH_platform
- **Description**: Ethereum deployment platform.
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2024-11-07
- **Last Updated**: 2024-11-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## ETH 配置平台设计
## 1. 基础链配置
两个合约链: 数据合约+可重复配置升级的合约
1. 数据合约: 类似 TOS, 只提供 get 和 put 两个接口, 开放给另一个合约
- save:
- 接受一个 json 格式的数据,
- 多媒体格式: base64 转码,一般数据:json 化
- get: 通过 key 来获取 value
2. 配置合约: 提供智能合约模板 + json 配置平台(或填写表单), 转化为智能合约代码, 连接到数据链,接口提供给用户(如有余力再做, 这个难度较大)
## 2. 平台基础结构
1. 基础功能
- 通过前台启动和测试基础区块链(涉及到容器操作,可能相当耗时)
- 通过前台配置智能合约并部署到区块链上
- 实现一个数据展示平台, 查看区块链数据(区块链浏览器)
- 通过设计,提供 token 的形式让用户能够利用自己的智能合约部署区块链应用
2. 技术栈
1. 前端 react+nextjs (开发中)
2. 后台 nodejs/Go (nodejs)
3. 节点的数据发现采用 redis 发布订阅 (已完成)
4. 链的部署采用 websocket(web3.js)/json RPC (已完成)
1. 监控采用 Grafana? (否掉, 不现实)
3. 注意点
1. 由于需要发行 token 等 payable 方法, 客户一般不会成为节点, 需要写一个自己的钱包(暂时可能用不着, 我认为部署者和用户都应该在我们的集群上使用服务, 因此都可以访问我们的节点集群, 因此不需要编写为每个应用额外的钱包, 使用我们的api即可)
#### 区块链搭建和初始化配置
使用 docker + genesis.json 来搭建
#### 基础模板
基础合约:get + put 键值对 (put应该提供许多元信息, 时间戳, 哈希值, 上传人等)
增强合约:聚合查询, 统计, 定时任务
数据库合约: 建立数据模型, 设置CURD方法, 数据权限(+ 账户合约)
账户合约: 指定数据空间, 管理员账户,验证账户, 设置账户, 配置账户权限, 生成账户
展示合约: 查看区块链上情况(包装基础api)
代币合约: 指定发代币数量, 单位,交易手续费等
#### 组合示例
存证: 账户合约 + 提取并检查数据, 上传数据(基础合约的包装)
投票: 账户合约 + 增强合约
非合约相关接口
1. 申请成为节点 + 矿工, 直接加入以太坊网络
2. 申请新的以太币(应对交易费用不足的情况)
3. 参与应用的用户管理,应用状态管理
## 3. 进度目标
- [x] 搭建 Docker geth 集群(3x 虚拟节点)
- [x] 开发一个 master 主机,用来调用 docker 方法启动 docker 集群,监控 docker 内部的情况 + 查看以太坊运行情况
- [x] 为各个 nodejs 服务器开发 ethereum mangenment api 接口, 使其具备基本能力
- [ ] 使用 Compose 完成自动化部署,启用 consul 做服务发现和高可用集群
- [x] 使用 nodejs 编写 Docker api
- [x] 编写基础智能合约,测试后部署到集群
- [ ] 编写高层逻辑, 测试后封装成模板方法, 合约上链
- [x] 使用 egg 编写配置平台 api
- [ ] 编写前端交互逻辑
## 4. 文件结构
```
主目录结构
.
├── Readme.md
├── contracts 目前的简单智能合约文件
│ ├── Basic.sol
│ └── DataStore.sol 目前的数据合约, 包含简单权限设置
├── data
├── dump.rdb
├── genesis 当需要用puppeth自定义POA创世区块文件时,可以在这里执行
│ ├── eth_chain-harmony.json
│ └── eth_chain.json
├── images 基础的以太坊镜像(已弃用)
│ └── BaseEthereum
├── master 主目录
│ ├── backEnd 暂未使用
│ └── frontEnd 主目录
└── production
└── docker-compose.yml 生产环境下的docker-compose文件, 当需要部署的时候将这个文件复制到frontEnd中覆盖掉其中的docker-compose文件
主目录内部结构 /master/frontEnd
主目录控制台是一个在express服务器上运行的nextjs程序,
要启动起来, 请按以下步骤进行
1. 先安装最新稳定版的nodejs, 并在该目录下运行npm install
2. 将之前提到的production目录下的docker-compose.yml粘贴到此文件夹下, 覆盖原来的
3. 在命令行下输入 yarn dev-serverless
4. 打开localhost:3000 查看页面是否加载完毕
.
├── apis.js 一些调用docker api的方法
├── components
├── config
├── docker-compose.yml docker编排文件,需要被覆盖
├── next.config.js
├── node_master 主节点的对外服务器, 对外暴露端口7001, 可以通过http://127.0.0.1:7001访问(速度较慢, 启动完成后大约需要等待1分钟)
├── node_modules
├── node_slaver 子节点的对外服务器, 对外界没有暴露端口
├── package-lock.json
├── package.json
├── pages
├── server
├── server.js 控制台服务器的启动程序
├── start.sh
├── test.css
├── yarn-error.log
└── yarn.lock
```
## 5.容器配置
- 2x 以太坊节点(包含 egg 后端)
- 1x nginx 静态资源服务器 (用于静态资源映射和压缩等)
- 1x go api 服务器, 用于管理 docker 和以太坊节点 (否掉,时间不够)
- 1x redis 服务器, 用于提供数据存储服务
- 1x nodejs 静态资源服务器, 用于提供服务端渲染的静态资源
## 6.clone项目后的使用方法
1. 下载docker并安装
2. docker pull tomokokawase/node_master
3. docker pull tomokokawase/node_slaver (这两部分会耗时较久, 建议挂vpn, 在公司内网等网速快的地方拉取)
4. 安装docker-compose, 麻烦参照一下官网的教程
5. 按照之前所说的进入master/fronted执行一系列操作
6. localhost启动之后, 现在可以
1. 点击部署, 暂停和移除来对以太坊集群做相应操作
2. 点击下发,向以太坊集群内部下发智能合约文件(未编译)
3. 在postman中通过post请求访问http://127.0.0.1/deployContract 参数写name:已经下发的智能合约的名字(不带sol扩展名)来编译部署智能合约
4. 可以在命令行中, 使用docker ps -a, docker stats 查看进程和内存, cpu消耗, 通过docker logs [容器哈希] -f 持续查看容器输出