智能合约
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 或者大于该数组大小的下标
-
以太坊
节点同步
- 区块链节点之间无法同步区块,通过挖矿增加了区块数以后,紧接着区块数被置零,刚刚部署的合约也消失了
-
报错信息记录:
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
-
问题原因和方法
- 由于使用nextcloud对包含区块链节点的文件夹进行了同步,导致区块节点之间无法同步区块,关闭nextcloud对区块链节点文件夹的同步即可
- 由于将区块数据文件夹复制到其他位置,建议如果需要在其他位置建立节点,可以通过新建节点并同步的方式
-