当前位置: 首页 > 知识库问答 >
问题:

在docker上的私有区块链节点上使用松露部署智能合约

赫连晋
2023-03-14

我在私有区块链网络上部署智能合约时遇到了问题。我在三个虚拟机(矿工)上创建了我的区块链网络,在第四个虚拟机(控制器)上使用木偶:https://medium.com/@collin.cusce/using-puppeth-to-manually-create-an-ethereum-proof-of-authority-clique-network-on-aws-ae0d7c906cce

之后,我在一个矿工虚拟机上安装了truffle,并使用以下命令初始化了truffle:

truffle init

然后,我编写了一个简单的hello world智能合约,对其进行编译,并将其部署到truffle development区块链上,它成功了。然而,我试图在我的私有区块链上部署它,但我无法连接到网络。

geth控制台中的admin.nodeInfo命令返回以下输出:

docker exec -it 954cd3955065 geth attach ipc:/root/.ethereum/geth.ipc
Welcome to the Geth JavaScript console!

instance: Geth/v1.9.25-unstable-ead81461-20201123/linux-amd64/go1.15.5
coinbase: 0xe8cc4bea2cfdfd14cddefe1141bedd109576b9a9
at block: 78558 (Tue Dec 01 2020 22:01:02 GMT+0000 (UTC))
 datadir: /root/.ethereum
 modules: admin:1.0 clique:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

To exit, press ctrl-d
> admin.nodeInfo
{
  enode: "enode://7206ca3c62f6db47e1230dcf14a765d4c9b4870a66470dbb21fcc5ed2fab2167d6bcc47eec8044c42037b3e6e0017aeb8ddfc3580471da54a6c7274a0c1fe46b@10.100.2.32:30303",
  enr: "enr:-Je4QGXlVAESp8r2s1uHBJxoDLWQo8IvZsbe5sX2YRBb0un9Gdlt8nfDKQBR_j0lDPtaoCCuis4cJJlqtEHfa4tLO2EIg2V0aMfGhG5b-B6AgmlkgnY0gmlwhApkAiCJc2VjcDI1NmsxoQNyBso8YvbbR-EjDc8Up2XUybSHCmZHDbsh_MXtL6shZ4N0Y3CCdl-DdWRwgnZf",
  id: "027a351994ac1b127df56180b6210310cc0164f17f1b12c167cb167c4ffaa122",
  ip: "10.100.2.32",
  listenAddr: "[::]:30303",
  name: "Geth/v1.9.25-unstable-ead81461-20201123/linux-amd64/go1.15.5",
  ports: {
    discovery: 30303,
    listener: 30303
  },
  protocols: {
    eth: {
      config: {
        byzantiumBlock: 0,
        chainId: 1515,
        clique: {...},
        constantinopleBlock: 0,
        eip150Block: 0,
        eip150Hash: "0x0000000000000000000000000000000000000000000000000000000000000000",
        eip155Block: 0,
        eip158Block: 0,
        homesteadBlock: 0,
        istanbulBlock: 0,
        petersburgBlock: 0
      },
      difficulty: 98201,
      genesis: "0x17f752387c901db617cf0594ecd2cb9811dfcd666318c2e0e7cb0239471da979",
      head: "0xf8a37d0390558746901faa55463c127c553f02cf2d23ce0cb469fcd470c810f9",
      network: 1515
    }
  }
}

我尝试在truffle config中添加网络配置。我喜欢这样:

devnet2: {
    host: "localhost", 
    port: "30303", //port where the node is 
    network_id: "*",   
    from: 0x91cd7b879fefff34259d577a56d290b3315bf9b3    // Treats this network as if it was a public net. (default: false)
    }

然后,当使用命令truffle部署-网络Devnet2进行部署时,我总是得到这个错误:

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.


/usr/local/lib/node_modules/truffle/build/webpack:/packages/provider/index.js:56
        throw new Error(errorMessage);
^
Error: There was a timeout while attempting to connect to the network.
       Check to see that your provider is valid.
       If you have a slow internet connection, try configuring a longer timeout in your Truffle config. Use the networks[networkName].networkCheckTimeout property to do this.
    at Timeout.setTimeout (/usr/local/lib/node_modules/truffle/build/webpack:/packages/provider/index.js:56:1)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)

我试图延长超时限制,但没有成功。我也尝试使用Web3提供商(HTTPProvider和IPCProvider),但没有任何运气(如果需要,我可以提供更多细节)。

任何帮助都是非常感谢的,因为我花了很多时间在上面,却没有得到任何地方。不幸的是,我找不到任何关于将智能合约部署到运行在docker上的节点的信息。如果需要的话,我很乐意提供有关我所做工作的更多细节。

共有1个答案

蒲深
2023-03-14

我设法在私人网络上运行智能合约,但没有使用docker。我想到了一些事情。你在你的网络上运行过矿工吗?您需要运行miner,以便迁移合同。在执行合同时,您是否确保达到气体限值?在处理任何请求之前,矿工将等待达到最大气体限值。您是否已经部署了该合同?在迁移脚本中,可以通过碰撞版本创建新的迁移脚本,也可以使用重置标志再次运行所有迁移脚本。

 类似资料:
  • 如果你希望在自己的网络上部署ENS,或者在公共网络上部署自己的ENS副本,本指南将向你展示如何进行部署。如果你想使用现有的ENS部署,请参阅域名解析、域名管理和域名注册和续费 为了简单起见,在本页面我们会用到Javascript、Web3和npm上的Truffle框架。完整的部署文件示例可以在这个页面的底部查看。 引用合约 ENS的基础合约已经以npm模块的方式发布,比如ENS注册表和注册中心、解

  • 我用块菌测试合同有困难。我安装了最新版本的truffle以及TestRPC。 据我所知,最新版本的truffle附带了一个用于测试SmartContracts的客户端,因此不再需要TestRPC。 我有一个简单的合同,我的迁移是这样的: 当我运行松露开发时,我看到创建了10个测试帐户。 账户: (0)0x627306090abab3a6e1400e9345bc60c78a8bef57 (1) 0x

  • 我按照本教程使用aws Corda AMI在aws上部署节点。 但在注册步骤之后, (< code > Java-jar corda . jar initial-registration-p PASSWORD _ FOR _ NETWORK _ ROOT _ TRUSTORE ), 它抛出此错误: [错误]10:14:31 0000[主]内部。NodeStartupLogging.invoke -

  • 注意:本文档介绍使用 docker 官方的 registry v2 镜像部署私有仓库的步骤,你也可以部署 Harbor 私有仓库(部署 Harbor 私有仓库)。 本文档讲解部署一个 TLS 加密、HTTP Basic 认证、用 ceph rgw 做后端存储的私有 docker registry 步骤,如果使用其它类型的后端存储,则可以从 “创建 docker registry” 节开始; 示例两

  • 所以我正在构建一个基本的NF令牌。创建了一个基本的铸币函数和映射。我用truffle测试了应用程序,尝试了solidity测试和JS测试。有以下错误。 测试脚本在契约中运行一个简单的内部函数,该函数返回一个int=1000,并将其与测试中声明的预期变量(letexpected=1000)进行比较。这是JS测试脚本 下面是Solidity测试脚本: 我还尝试测试铸币的令牌ID,以及基于我声明的映射的

  • 我正在尝试在Binance智能链网络上部署测试契约。我正在使用metamask和truffle来创建和测试合同。我的文件夹结构如下所示 块菌部署错误 我已经附上了所有我面临的错误代码。有人能帮我吗?我还安装了高清钱包提供商。块菌编译成功。