区块链开发工具搭建-1 blockchain and blockscan
区块链与区块链浏览器
介绍
区块链浏览器
区块链浏览器:建立在普通的中心化网络上,专门为用户提供浏览和查询区块链上信息。 因为区块链公开透明的特质,它需要有一个媒介能够让矿工、监管者、开发者、交易者等等用户看到链上的情况,比如某笔交易、某块区块、当前链高。 区块链浏览器就是这个媒介,在这里,我们可以看到链上的所有信息(除了必须,比如真实身份),只需要输入某钱包地址或者某笔交易的ID,即可查询它们的详细信息。
区块链
区块链是一种安全共享的去中心化的数据账本。区块链技术支持一组特定的参与方共享数据。借助过区块链云服务,可以轻松收集、集成和共享多个来源的交易数据。数据被细分为多个共享区块,并以加密哈希形式的唯一标识符链接在一起。
区块链通过单一信息源确保数据完整性,消除数据重复,提高数据安全性。
在区块链系统中,未经法定人数许可,数据将无法更改,这一特点有助于防范欺诈和数据篡改。换言之,区块链账本可以共享,但不能更改。如果有一方尝试更改数据,区块链所有参与方都将收到警报,知晓哪一方试图更改数据。
heco-chain及blockscout
感谢开源 :sunglasses:
部署方式
直接使用我的docker镜像,使用docker-compose up -d 启动
version: '3.5'
networks:
backend:
driver: bridge
services:
blockChain:
# 自定义容器名称
container_name: blockChain
image: 9981212/chain:12306
volumes:
# 设置挂载目录
- ./data:/home/chain/data # 引用 .env 配置中 CODE_PATH_HOST 变量,将宿主机上代码存放的目录挂载到容器中 /usr/src/code 目录
- ./conf:/home/chain/conf
ports:
# 设置端口映射 8545 8546 30303 30303/
- "2348:8545"
- "8102:8546"
- "30303:30303"
- "32668:32668"
stdin_open: true # 打开标准输入,可以接受外部输入
tty: true
networks:
- backend
restart: always # 指定容器退出后的重启策略为始终重启
db:
image: postgres:13.6
restart: always
container_name: 'postgres'
environment:
POSTGRES_PASSWORD: ''
POSTGRES_USER: 'postgres'
POSTGRES_HOST_AUTH_METHOD: 'trust'
ports:
- 7432:5432
networks:
- backend
blockscout:
depends_on:
- db
- blockChain
image: blockscout/blockscout:latest
restart: always
container_name: 'blockscout'
links:
- db:database
command: bash -c "bin/blockscout eval \"Elixir.Explorer.ReleaseTasks.create_and_migrate()\" && bin/blockscout start"
networks:
- backend
env_file:
- ./envs/common.env
ports:
- 4000:4000
volumes:
- ./logs/:/app/logs/
smart-contract-verifier:
image: 9981212/smart-contract-verifier:latest
restart: always
container_name: 'smart-contract-verifier'
env_file:
- ./envs/common-smart-contract-verifier.env
networks:
- backend
ports:
- 8043:8043
visualizer:
image: 9981212/visualizer:latest
restart: always
container_name: 'visualizer'
env_file:
- ./envs/common-visualizer.env
networks:
- backend
ports:
- 8050:8050
redis_db:
image: 'redis:alpine'
networks:
- backend
ports:
- 6379:6379
container_name: redis_db
command: redis-server
volumes:
- ./redis_data:/data
需要修改chainId 的话拉取我的github仓库,配置自己的专有链,欢迎star
git clone -b block https://github.com/mover-code/docker-service.git
在genesisi.json中配置您的初始化地址并获取区块链主币用以消耗gas
文件解读参考文章
在evns/commonenv 中配置区块链节点rpc地址
geth 为编译后的区块链服务端,geth命令详解
geth 导入账户参考here
需要修改chainid 通过这里修改容器启动命令
这里给出命令
docker commit -c 'CMD ./geth --verbosity 1 --datadir data --config conf/geth.toml --networkid=你自己的chainId' blockChain ch:latest
构建自己的镜像后记得修改docker-compose.yaml 配置文件中的chain镜像为刚刚新建的自己的镜像这里是ch
so easy to run it for yourself :laughing:
常见问题 :bug
Question 1
- question:
miner.start() 之后没有区块产生 - answer:
开始挖矿前需要先解锁账户,运行 geth attatch geth.ipc 进入console命令行,执行persol.unlockaccount(‘address’,’password’,’timer’) address: 初始化配置的地址,password : 创建地址的密码,timer: 解锁时间周期, 为0 表示永久解锁
Question 2
- question:
开始挖矿之后,初始化地址的资产莫名减少 - answer:
被机器人监听到chainId服务时,因为初始账户已解锁所有人都可执行操作,产生的币已被转走 在开始挖矿时将所有的币转至安全账户
Question 3
- question:
浏览器服务无法打开或者500error - answer:
确认env文件中配置的postgres数据库连接地址,等待初始化数据库从rpc中抓取数据
Question 4
- question:
浏览器验证合约的解决办法 -
answer:
common.env 中配置SECRET_KEY_BASE= 27Swe6KtEtmN37WyEYRjKWyxYULNtrxlkCEKur4qoV+Lwtk8lafsR16ifz1XBBYj
另外nginx服务中配置location /socket { proxy_redirect off; proxy_pass http://127.0.0.1:4000; #转发到你本地的 9501 端口 对应 ws 的端口 proxy_set_header Host $host; proxy_set_header X-Real_IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr:$remote_port; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; }
演示 :beers
可访问https://scan.chychain.com 在线体验blockscan
有任何问题可以在下面评论或者通过email联系我