EOS错误总结

时间:2024-03-20 13:13:59

1、开启nodeos时,报了一个如下错误

171101ms thread-0 chain_plugin.cpp:209 plugin_initialize ] initializing chain plugin 
171102ms thread-0 main.cpp:123 main ] database dirty flag set (likely due to unclean shutdown): re play required

这是因为nodeos没有正确关闭,在再次开启前需要清理数据。解决办法: EOS错误总结

2、在创建一个账户demo后,再次创建demo,会报错

EOS错误总结

这时要删除这个用户的办法,只有清理区块链数据:

rm -rf ~/.local/share/eosio/nodeos/data

3、在部署合约时出现了这样一个问题,如下:

EOS错误总结

  原因是我之前将这个合约部署到sodfans用户。现在如果要再次部署,只能两种解决方式:

1)将合约修改后再部署
2)合约可以不用修改,但需要部署到另一个用户

  注意:只能将同一个合约部署到同一个账户一次,两次也没意义。

4、合约文件中的一个方法如下:

void increase(account_name actor){
  eosio::require_auth(actor);
  eosio::print(eosio::name{actor}," INCREASE => ",value++);
}

  第2行表示,验证传入的账户名(即合约的调用者)是否出现在授权账户里,只有在actor参数与授权账户一致时才会执行,否则就会抛出异常。如我伪造一个用户fake来调用合约,则报如下错误: EOS错误总结

4、将合约部署到sodfans后,创建了一个新账户jack,然后通过jack向计数器合约发送increase动作:

cleos push action sodfans increase '["jack"]' -p sodfans

结果报错:

EOS错误总结

报错原因是:-p指定了发起账户为sodfans,然后系统会用sodfans这个账户的私钥签名交易,但是传入的参数又是jack,所以报错。这两个参数应该一样。 但是修改了之后又报了一个新的错误,如下:EOS错误总结 这是因为在我合约文件的increase方法中,引用了两个方法,这两个方法的scope都应该将_self改成actor。 EOS错误总结

8、在我将合约代码改来改去,甚至部署到不同的账户时,为什么这里的值还能接着来,还能共享???

EOS错误总结

9、注意:在获取区块的详细信息时get_block不要写成get-block,汇网教程上就有这个错,然后$1可以是任意一个区块号。

curl http://127.0.0.1:8888/v1/chain/get_block -X POST -s -d '{"block_num_or_id": '$1'}' | jq