前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BSC链智能合约质押挖矿模式系统开发

BSC链智能合约质押挖矿模式系统开发

原创
作者头像
开发v_syn520110
发布2022-10-25 16:13:12
3310
发布2022-10-25 16:13:12
举报
文章被收录于专栏:MMMKAMMMKA

在chainmaker中启用Docker VM

  • 每个长安链节点都需要配置和启动docker vm。
  • 修改节点配置config目录下的chainmaker.yml文件:
代码语言:javascript
复制
# Docker go virtual machine configuration
vm:
  # Enable docker go virtual machine
  enable_dockervm: true
  # Mount point in chainmaker
  dockervm_mount_path: ../data/org1/docker-go
  # Specify log file path
  dockervm_log_path: ../log/org1/docker-go
  # Whether to print log at terminal
  log_in_console: false
  # Log level
  log_level: INFO
  # Unix domain socket open, used for chainmaker and docker manager communication
  uds_open: true
  # Grpc max send message size, Default size is 4, Unit: MB
  max_send_msg_size: 20
  # Grpc max receive message size, Default size is 4, Unit: MB
  max_recv_msg_size: 20
  # max number of connection created to connect docker vm service
  max_connection: 5
  • 修改节点配置bin目录下的start.sh文件:

主要添加-e ENV_MAX_SEND_MSG_SIZE=20 -e ENV_MAX_RECV_MSG_SIZE=20以避免后续部署合约时,因请求消息太大导致部署不成功现象发生。

代码语言:javascript
复制
  docker run -itd \
    -e ENV_LOG_IN_CONSOLE="$log_in_console" -e ENV_LOG_LEVEL="$log_level" -e ENV_ENABLE_UDS=true \
    -e ENV_USER_NUM=1000 -e ENV_MAX_CONCURRENCY=100 -e ENV_TX_TIME_LIMIT=8 \
    -e ENV_MAX_SEND_MSG_SIZE=20 -e ENV_MAX_RECV_MSG_SIZE=20 \
    -v "$mount_path":/mount \
    -v "$log_path":/log \
    --name DOCKERVM-ljh-org3.qianjinlian.com \
    --privileged $image_name
  • 启动docker vm: 在 UNIX Domain Socket 的连接模式中(官方还提供一种TCP方式,没特殊要求可以就用socket模式),节点配置bin目录下start.sh脚本会自动拉起Docker VM容器,在已经启动的环境下,上述步骤配置完成后,可以使用restart.sh重启节点即可启动docker vm。
  • 停止docker vm: 在 UNIX Domain Socket 的连接模式中,停止节点时,节点配置bin目录下的 stop.sh 脚本自动停止Docker VM容器。 也可以使用docker命令单独停止Docker VM容器。

使用CMC工具部署和调用GO智能合约

创建合约

下边是以官方提供的contract_fact存证示例合约为例:

代码语言:javascript
复制
./cmc client contract user create \
--contract-name=contract_fact \
--runtime-type=DOCKER_GO \
--byte-code-path=./testdata/docker-go-demo/contract_fact.7z \
--version=1.0 \
--sdk-conf-path=./testdata/sdk_config.yml \
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org4.chainmaker.org/user/admin1/admin1.tls.key \
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org4.chainmaker.org/user/admin1/admin1.tls.crt \
--sync-result=true \
--params="{}"

这里可能会出现一个问题就是:请求消息太大,导致部署不成功。错误提示语如下

代码语言:javascript
复制
trying to send message larger than max (6153962 vs. 4194304)

此时需要修改连接配置:testdata/sdk_config.yml里边的rpc_client:

代码语言:javascript
复制
  rpc_client:
    max_receive_message_size: 1000
    max_send_message_size: 1000

把max_send_message_size调大一些。这里还需要提一点就是JAVA SDK 2.2.0版本不支持max_send_message_size配置,算是一个BUG,所以如果尝试使用JAVA SDK部署合约时,发生上边的错误暂时只能改为通过CMC去部署。

调用合约

代码语言:javascript
复制
./cmc client contract user invoke \
--contract-name=contract_fact \
--method=invoke_contract \
--sdk-conf-path=./testdata/sdk_config.yml \
--params="{\"method\":\"save\",\"file_name\":\"name007\",\"file_hash\":\"ab3456df5799b87c77e7f88\",\"time\":\"6543234\"}" \
--sync-result=true

查询合约

代码语言:javascript
复制
./cmc client contract user get \
--contract-name=contract_fact \
--method=invoke_contract \
--sdk-conf-path=./testdata/sdk_config.yml \
--params="{\"method\":\"findByFileHash\",\"file_hash\":\"ab3456df5799b87c77e7f88\"}"

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在chainmaker中启用Docker VM
  • 使用CMC工具部署和调用GO智能合约
    • 创建合约
      • 调用合约
        • 查询合约
        相关产品与服务
        容器镜像服务
        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档