区块链开发过程中遇到的问题以及解决方案

智能合约

IDE

  • compile detail无问题的remix IDE 版本:1.0.7

合约交互

web3.py

  • 使用web3.py输出地址或者bytecode等hex格式(如:0x14b15...)时,发现输出的是b'`\x80`@R4\x80\x15a...
    • 问题原因和解决方案
    • b'`\x80`@R4\x80\x15a...为bytes格式,可在获取该值的变量后添加后缀.hex(),即可输出hex格式
  • 发生报错Execution of job "函数名(trigger: interval[0:00:10], next run at: 2021-09-13 13:49:51 CST)" skipped: maximum number of running instances reached (1)
    • 意思是周期性执行某个函数,结果这个函数的上一个周期还没运行完成时,周期已经到来,所以被跳过

部署好智能合约以后不管输入什么参数,返回的都是零值

可以参考以下链接:

  • https://ethereum.stackexchange.com/questions/75962/call-smart-contract-function-in-geth
  • https://ethereum.stackexchange.com/questions/67794/how-to-setup-constantinople-fork-for-private-ethereum-chain
  • https://ethereum.stackexchange.com/questions/78616/it-possible-to-hard-fork-a-private-network-without-resyncing-chain-from-scratch
    需要设置分叉,即在gensis.json文件中的config中补充:
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "ethash": {}

这边贴出我的完整的创世区块设置

{
  "config": {
        "chainId": 20191111,
        "homesteadBlock": 0,
	    "eip150Block": 0,
        "eip155Block": 0,
        "eip158Block": 0,
        "byzantiumBlock": 0,
        "constantinopleBlock": 0,
        "petersburgBlock": 0,
        "istanbulBlock": 0,
        "ethash": {}
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0xffffffff",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
  
}

合约执行

  • 执行某个合约函数时报错
    • 报错信息:

      ValueError: {'code': -32000, 'message': 'invalid opcode: opcode 0xfe not defined'}
      
    • 问题原因和解决方法

      1. 合约执行时合约中的数组越界访问,如访问到下标为 -1 或者大于该数组大小的下标

以太坊

节点同步

  • 区块链节点之间无法同步区块,通过挖矿增加了区块数以后,紧接着区块数被置零,刚刚部署的合约也消失了
    • 报错信息记录:

      WARN [06-25|17:16:19.177] Head state missing, repairing            number=32 hash="c7655a…9c8272"
      INFO [06-25|17:16:19.180] Loaded most recent local header          number=32 hash="c7655a…9c8272" td=4355136 age=20s
      INFO [06-25|17:16:19.180] Loaded most recent local full block      number=0  hash="047862…906579" td=131072  age=52y2mo3w
      
    • 问题原因和方法

      1. 由于使用nextcloud对包含区块链节点的文件夹进行了同步,导致区块节点之间无法同步区块,关闭nextcloud对区块链节点文件夹的同步即可
      2. 由于将区块数据文件夹复制到其他位置,建议如果需要在其他位置建立节点,可以通过新建节点并同步的方式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值