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没有正确关闭,在再次开启前需要清理数据。解决办法:
2、在创建一个账户demo后,再次创建demo,会报错
这时要删除这个用户的办法,只有清理区块链数据:
rm -rf ~/.local/share/eosio/nodeos/data
3、在部署合约时出现了这样一个问题,如下:
原因是我之前将这个合约部署到sodfans用户。现在如果要再次部署,只能两种解决方式:
1)将合约修改后再部署
2)合约可以不用修改,但需要部署到另一个用户
注意:只能将同一个合约部署到同一个账户一次,两次也没意义。
4、合约文件中的一个方法如下:
void increase(account_name actor){
eosio::require_auth(actor);
eosio::print(eosio::name{actor}," INCREASE => ",value++);
}
第2行表示,验证传入的账户名(即合约的调用者)是否出现在授权账户里,只有在actor参数与授权账户一致时才会执行,否则就会抛出异常。如我伪造一个用户fake来调用合约,则报如下错误:
4、将合约部署到sodfans后,创建了一个新账户jack,然后通过jack向计数器合约发送increase动作:
cleos push action sodfans increase '["jack"]' -p sodfans
结果报错:
报错原因是:-p指定了发起账户为sodfans,然后系统会用sodfans这个账户的私钥签名交易,但是传入的参数又是jack,所以报错。这两个参数应该一样。 但是修改了之后又报了一个新的错误,如下: 这是因为在我合约文件的increase方法中,引用了两个方法,这两个方法的scope都应该将_self改成actor。
8、在我将合约代码改来改去,甚至部署到不同的账户时,为什么这里的值还能接着来,还能共享???
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