区块链系列

开发工具搭建-1

Posted by samll_ant on December 3, 2022

区块链开发工具搭建-1 blockchain and blockscan

区块链与区块链浏览器

介绍

区块链浏览器

区块链浏览器:建立在普通的中心化网络上,专门为用户提供浏览和查询区块链上信息。 因为区块链公开透明的特质,它需要有一个媒介能够让矿工、监管者、开发者、交易者等等用户看到链上的情况,比如某笔交易、某块区块、当前链高。 区块链浏览器就是这个媒介,在这里,我们可以看到链上的所有信息(除了必须,比如真实身份),只需要输入某钱包地址或者某笔交易的ID,即可查询它们的详细信息。

区块链

区块链是一种安全共享的去中心化的数据账本。区块链技术支持一组特定的参与方共享数据。借助过区块链云服务,可以轻松收集、集成和共享多个来源的交易数据。数据被细分为多个共享区块,并以加密哈希形式的唯一标识符链接在一起。

区块链通过单一信息源确保数据完整性,消除数据重复,提高数据安全性。

在区块链系统中,未经法定人数许可,数据将无法更改,这一特点有助于防范欺诈和数据篡改。换言之,区块链账本可以共享,但不能更改。如果有一方尝试更改数据,区块链所有参与方都将收到警报,知晓哪一方试图更改数据。

heco-chain及blockscout

  • 根据heco-chain源代码打包docker来搭建测试链 仓库
  • 使用blockscout源代码打包docker来搭建区块浏览器 仓库


感谢开源 :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

blockscan.png

可访问https://scan.chychain.com 在线体验blockscan

有任何问题可以在下面评论或者通过email联系我