您正在查看: 2018年8月

EOS exceptions

EOS 目前大约有180种错误类型,虽然有错误码,但是还是很笼统的,具体的报错信息还得看detail里面的内容:

一、常见的错误码以及issue上对应的错误记录

3010001 Invalid name:账户名格式1-12位(a-z,1-5,“.” ) 且”.”不能在首尾

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3010001

3010004 Invalid authority:检查参数是否填写正确

authorization”: [{
“actor”: “accountname1”,
“permission”: “active”
}]
https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3010004

3010008 Invalid block ID

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3010008

3010010 Invalid packed transaction:一般报这个错误就是打包交易的参数传的不正确

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3010010

3010011 Invalid asset:检查资产格式是否正确,如”stake_net_quantity”:”0.0001 EOS” 1.确保正确的精度 空格加Symbol

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3010011

3030000 Block exception

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3030000

3030001 Unlinkable block

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3030001

3030002 Transaction outputs in block do not match transaction outputs from applying block

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3030002

3030003 Block does not guarantee concurrent execution without conflicts

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3030003

3030008 Block is not signed with expected key 检查是否对块信息签名

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3030008

3040000 Transaction exception

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3040000

3040002 Transaction should have at least one normal action:查看action是否添加,是否正确

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3040002

3040005 Expired Transaction:交易过期,过期时间可以设置长一点

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3040005

3040006 Transaction Expiration Too Far:过期时间设置太长

3040007 Invalid Reference Block:引用块无效或不匹配,节点间不同有关

https://github.com/EOSIO/eos/issues/4659

3050000 Action validate exception:检查Action是否正确

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3050000

3050001 Account name already exists:账户名已存在

3050002 Invalid Action Arguments:检查Action参数

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3050002

3050003 eosio_assert_message assertion failure:账户不存在,资产金额不正确等

3060003 Contract Table Query Exception

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3060003

3060004 Contract Query Exception

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3060004

3070002 Runtime Error Processing WASM

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3070002

3080001 Account using more than allotted RAM usage:内存不足,买些内存

3080002 Transaction exceeded the current network usage limit imposed on the transaction:网络资源不足,抵押一些资源

3080004 Transaction exceeded the current CPU usage limit imposed on the transaction:CPU不足,抵押一些CPU

3080006 Transaction took too long

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3080006+

3081001 Transaction reached the deadline set due to leeway on account CPU limits

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3081001

3090003 Provided keys, permissions, and delays do not satisfy declared authorizations:检查权限,签名等是否正确

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3090003

3090004 Missing required authority

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3090004

3110001 Missing Chain API Plugin

https://github.com/EOSIO/eos/issues?utf8=%E2%9C%93&q=3110001

二、EOS 错误码大全

3000000 blockchain exception
3010001 Invalid name
3010002 Invalid public key
3010003 Invalid private key
3010004 Invalid authority
3010005 Invalid action
3010006 Invalid transaction
3010007 Invalid ABI
3010008 Invalid block ID
3010009 Invalid transaction ID
3010010 Invalid packed transaction
3010011 Invalid asset
3010012 Invalid chain ID
3010013 Invalid fixed key
3010014 Invalid symbol
3020000 Fork database exception
3020001 Block can not be found
3030000 Block exception
3030001 Unlinkable block
3030002 Transaction outputs in block do not match transaction outputs from applying block 交易不匹配
3030003 Block does not guarantee concurrent execution without conflicts
3030004 Shard locks in block are incorrect or mal-formed
3030005 Block exhausted allowed resources
3030006 Block is too old to push
3030007 Block is from the future
3030008 Block is not signed with expected key
3030009 Block is not signed by expected producer
3040000 Transaction exception
3040001 Error decompressing transaction
3040002 Transaction should have at least one normal action
3040003 Transaction should have at least one required authority
3040004 Context-free action should have no required authority
3040005 Expired Transaction
3040006 Transaction Expiration Too Far
3040007 Invalid Reference Block
3040008 Duplicate transaction
3040009 Duplicate deferred transaction
3040010 Context free action is not allowed inside generated Transaction
3040011 The transaction can not be found
3040012 Pushing too many transactions at once
3040013 Transaction is too big
3040014 Unknown transaction compression
3050000 Action validate exception
3050001 Account name already exists
3050002 Invalid Action Arguments
3050003 eosio_assert_message assertion failure
3050004 eosio_assert_code assertion failure
3050005 Action can not be found
3050006 Mismatch between action data and its struct
3050007 Attempt to use unaccessible API
3050008 Abort Called
3050009 Inline Action exceeds maximum size limit
3060000 Database exception
3060001 Permission Query Exception
3060002 Account Query Exception
3060003 Contract Table Query Exception
3060004 Contract Query Exception
3060100 Database exception
3060101 Database usage is at unsafe levels
3060102 Reversible block log usage is at unsafe levels
3070000 WASM Exception
3070001 Error in WASM page memory
3070002 Runtime Error Processing WASM
3070003 Serialization Error Processing WASM
3070004 memcpy with overlapping memory
3070005 binaryen exception
3080000 Resource exhausted exception
3080001 Account using more than allotted RAM usage
3080002 Transaction exceeded the current network usage limit imposed on the transaction
3080003 Transaction network usage is too much for the remaining allowable usage of the current block
3080004 Transaction exceeded the current CPU usage limit imposed on the transaction
3080005 Transaction CPU usage is too much for the remaining allowable usage of the current block
3080006 Transaction took too long
3080007 Transaction exceeded the current greylisted account network usage limit
3081001 Transaction reached the deadline set due to leeway on account CPU limits
3090000 Authorization exception
3090001 Duplicate signature included
3090002 Irrelevant signature included
3090003 Provided keys, permissions, and delays do not satisfy declared authorizations
3090004 Missing required authority
3090005 Irrelevant authority included
3090006 Insufficient delay
3090007 Invalid Permission
3090008 The action is not allowed to be linked with minimum permission
3090009 The parent permission is invalid
3100000 Miscellaneous exception
3100001 Internal state is no longer consistent
3100002 Unknown bloc
3100003 Unknown transaction
3100004 Corrupted reversible block database was fixed
3100005 Extracted genesis state from blocks.log
3100006 Subjective exception thrown during block production
3100007 Multiple voter info detected
3100008 Feature is currently unsupported
3100009 Node management operation successfully executed
3110000 Plugin exception
3110001 Missing Chain API Plugin
3110002 Missing Wallet API Plugin
3110003 Missing History API Plugin
3110004 Missing Net API Plugin
3110005 Missing Chain Plugin
3110006 Incorrect plugin configuration
3120000 Wallet exception
3120001 Wallet already exists
3120002 Nonexistent wallet
3120003 Locked wallet
3120004 Missing public key
3120005 Invalid wallet password
3120006 No available wallet
3120007 Already unlocked
3120008 Key already exists
3120009 Nonexistent key
3120010 Unsupported key type
3120011 Wallet lock timeout is invalid
3120012 Secure Enclave Exception
3130000 Actor or contract whitelist/blacklist exception
3130001 Authorizing actor of transaction is not on the whitelist
3130002 Authorizing actor of transaction is on the blacklist
3130003 Contract to execute is not on the whitelist
3130004 Contract to execute is on the blacklist
3130005 Action to execute is on the blacklist
3130006 Public key in authority is on the blacklist
3140000 Exceptions that are allowed to bubble out of emit calls in controller
3140001 Block does not match checkpoint
3150000 ABI exception
3150001 No ABI found
3150002 Invalid Ricardian Clause
3150003 Invalid Ricardian Action
3150004 The type defined in the ABI is invalid
3150005 Duplicate type definition in the ABI
3150006 Duplicate struct definition in the ABI
3150007 Duplicate action definition in the ABI
3150008 uplicate table definition in the ABI
3150009 Duplicate error message definition in the ABI
3150010 ABI serialization time has exceeded the deadline
3150011 ABI recursive definition has exceeded the max recursion depth
3150012 Circular definition is detected in the ABI
3150013 Unpack data exception
3150014 Pack data exception
3160000 Contract exception
3160001 The payer of the table data is invalid
3160002 Table access violation
3160003 Invalid table iterator
3160004 Table can not be found inside the cache
3160005 The table operation is not allowed
3160006 Invalid contract vm type
3160007 Invalid contract vm version
3160008 Contract is already running this version of code
3160009 No wast file found
3160010 No abi file found
3170000 Producer exception
3170001 Producer private key is not available
3170002 Pending block state is missing
3170003 Producer is double confirming known rang
3170004 Producer schedule exception
3170006 The producer is not part of current schedule
3180000 Reversible Blocks exception
3180001 Invalid reversible blocks directory
3180002 Backup directory for reversible blocks already existg
3180003 Gap in the reversible blocks database
3190000 Block log exception
3190001 unsupported version of block log
3190002 fail to append block to the block log
3190003 block log can not be found
3190004 block log backup dir already exists
3200000 http exception
3200001 invalid http client root certificate
3200002 invalid http response
3200003 service resolved to multiple ports
3200004 fail to resolve host
3200005 http request fail
3200006 invalid http request
3210000 Resource limit exception
3220000 Mongo DB exception
3220001 Fail to insert new data to Mongo DB
3220002 Fail to update existing data in Mongo DB
3230000 Contract API exception
3230001 Crypto API Exception
3230002 Database API Exception
3230003 Arithmetic Exception
转载自:https://blog.csdn.net/it_zhangxiang/article/details/81387428

配置EOS同步主网数据到Mysql

EOS编译安装,请参考编译EOS主网EOS-Mainnet代码并支持sql_db_plugin

一. 修改Config配置

先运行下nodeos,将会自动创建~/.local/share/eosio/nodeos/config目录和config.ini文件。
修改config.ini中如下内容

//添加 (2018-8-18 此时可用,如果有想分享的节点,请私聊我)
p2p-peer-address = fullnode.eoslaomao.com:443
p2p-peer-address = mars.fnp2p.eosbixin.com:443
//修改 可忽略
agent-name = "BcSkill"
//如果需要返回错误信息,修改
verbose-http-errors = true
//添加插件支持
plugin = eosio::chain_plugin
plugin = eosio::net_plugin
plugin = eosio::sql_db_plugin
//修改mongodb插件相关配置
sql_db-uri = mysql://db=eos user=root host=127.0.0.1 password='pwd'

二. 安装配置并启动MySql

1. 安装MySql

先安装MySql 参考 Ubuntu 安装MySql 8.0

2. 配置MySql

  • 接下来我们安装 soci。soci 是 C++ 连接 MySQL 的 Library。Ubuntu 可以快速安装,命令如下:
    sudo apt-get -y install libsoci-dev
  • 安装 mysql-client
    sudo apt-get -y install mysql-client
    sudo apt-get install libmysqlclient-dev

由于链上数据较大,比如1000W块左右的数据,离线压缩包大约14GB,同步到MySql大概需要200GB左右。所以需要将MySql数据单独磁盘存储。
修改MySql数据存储位置,/mnt/data为我这边挂载的存储盘
新建目录mkdir /mnt/data/MySql
并参考 Ubuntu16.04下修改MySQL数据的默认存储位置

配置Eos数据库

  • 进入mysql
    mysql -p
  • 创建数据库
    CREATE DATABASE eos DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 查看数据库
    mysql > show databases;

三. 下载主网离线数据包

参考 EOS 主网数据更新,离线数据包
因为使用离线包可以加快追上主网的进度,如果从零自己同步到主网进度,难以想象要多久...
假设已经将离线数据下载并解压到了 /mnt/data/data目录下。

四. 启动nodeos开始同步数据

nodeos --data-dir /mnt/data/data --hard-replay-blockchain --replay-blockchain
第一次运行 必须添加 --replay-blockchain参数,不然不会创建数据库表,参考下面代码

如果需要清空mysql数据库的话,添加--sql_db-block-start=0 --replay-blockchain
相关代码如下eos\plugins\sql_db_plugin\sql_db_plugin.cpp

void sql_db_plugin::plugin_initialize(const variables_map& options)
{
    ilog("initialize");
    try {
        std::string uri_str = options.at(SQL_DB_URI_OPTION).as<std::string>();
        if (uri_str.empty())
        {
            wlog("db URI not specified => eosio::sql_db_plugin disabled.");
            return;
        }
        ilog("connecting to ${u}", ("u", uri_str));
        uint32_t block_num_start = options.at(BLOCK_START_OPTION).as<uint32_t>();
        auto db = std::make_unique<database>(uri_str, block_num_start);

        if (options.at(HARD_REPLAY_OPTION).as<bool>() ||
                options.at(REPLAY_OPTION).as<bool>() ||
                options.at(RESYNC_OPTION).as<bool>() ||
                !db->is_started())
        {
            if (block_num_start == 0) {
                ilog("Resync requested: wiping database");
                if( options.at( RESYNC_OPTION ).as<bool>() ||
                        options.at( REPLAY_OPTION ).as<bool>()) {
                    ilog( "Resync requested: wiping database" );
                    db->wipe();
                }
            }
        }

此时已开始,同步中

五. 服务器建议配置

内存:32GB
存储:1T+

编译EOS主网EOS-Mainnet代码并支持sql_db_plugin

涉及的代码仓库

EOSIO官方将不再收录sql_db_plugin,第三方自己维护(github),v1.2.0已删除sql_db_plugin,官方只维护mongo_db_plugin。

合并代码,提交到自己的仓库

基于EOS-Mainnet对应的分支合并NebulaProtocol中sql_db_plugin相关代码。
由于我熟悉Windows TortoiseGit工具,所以我在Windows上准备好代码,提交到github自己的仓库,(也方便自己维护),再在Ubuntu上拉取分支代码。

步骤尽量的简单,方便新手按部就班,老鸟绕飞~

github 上新建仓库https://github.com/cppfuns/Pure-EOS.git

新建目录Pure-EOS,获取EOS-Mainnet代码

git clone https://github.com/EOS-Mainnet/eos.git

添加NebulaProtocol仓库

进入Pure-EOS目录,右键TortoiseGit->Settings,添加NebulaProtocol仓库

获取所有仓库更新信息到本地

再次在Pure-EOS目录,右键TortoiseGit->fetch,获取所有仓库更新信息到本地

切换分支

切换EOS-Mainnet当前最新的release分支,当前为mainnet-1.1.6
再次在Pure-EOS目录,右键TortoiseGit->Switch/Checkout...,选择mainnet-1.1.6分支

合并代码


再次在Pure-EOS目录,右键TortoiseGit->Show log,找到NebulaProtocol/sql_plugin分支

右键Merge to mainnet-1.1.6

点击确定后,如果有冲突,自行解决,

提交代码

此时已经将NebulaProtocol中sql_db_plugin分支代码,合并到了EOS-Mainnet的最新分支mainnet-1.1.6上了。提交本地的mainnet-1.1.6分支到github 上新建仓库https://github.com/cppfuns/Pure-EOS.git

获取代码

在Ubuntu上直接获取此仓库

git clone https://github.com/cppfuns/Pure-EOS.git

切换分支

cd eos源码目录
git checkout mainnet-1.1.6

开始编译代码

./eosio_build.sh -s EOS

执行安装

./eosio_install.sh

检测sql_db_plugin

编译完成后,执行

nodeos --help | grep "sql_db-uri"

如果输出–sql_db-uri arg Sql DB URI connection string If not内容,证明编译的EOS已支持sql_db_plugin

配置EOS同步主网数据到mongoDB

EOS编译安装,请参考 编译EOS主网EOS-Mainnet代码

一. 修改Config配置

先运行下nodeos,将会自动创建~/.local/share/eosio/nodeos/config目录和config.ini文件。
修改config.ini中如下内容

//添加 (2018-8-18 此时可用,如果有想分享的节点,请私聊我)
p2p-peer-address = fullnode.eoslaomao.com:443
p2p-peer-address = mars.fnp2p.eosbixin.com:443
//修改 可忽略
agent-name = "BcSkill"
//如果需要返回错误信息,修改
verbose-http-errors = true
//添加插件支持
plugin = eosio::chain_plugin
plugin = eosio::net_plugin
//修改mongodb插件相关配置
plugin = eosio::mongo_db_plugin
mongodb-uri = mongodb://127.0.0.1:27017/EOS
mongodb-filter-on = *
#mongodb-filter-out = spammer::
mongodb-filter-out = eosio:onblock:
mongodb-filter-out = gu2tembqgage::
mongodb-filter-out = blocktwitter::
mongodb-queue-size = 2048
abi-serializer-max-time-ms = 5000
mongodb-block-start = 1
mongodb-store-block-states = false
mongodb-store-blocks = false
mongodb-store-transactions = false
mongodb-store-transaction-traces = true
mongodb-store-action-traces = true

read-mode = read-only

参考:MongoDB Filtering and Optimizations
参考:issues/5797

二. 安装配置并启动MongoDB

1. 安装MongoDB

先安装MongoDB 参考(Ubuntu 安装 Mongodb 3+

2. 配置MongoDB

进入到MongoDB bin 目录,可以添加到环境变量,方便操作。

cd ~/opt/mongodb/bin

由于链上数据较大,比如1000W块左右的数据,离线压缩包大约14GB,同步到MongoDB大概需要200GB左右。所以需要将MongoDB数据单独磁盘存储。
修改MongoDB数据存储位置,/mnt/data为我这边挂载的存储盘
新建目录mkdir /mnt/data/mongo/db

3. 启动MongoDB

mongod --dbpath /mnt/data/mongo/db

这时MongoDB服务会默认监听27017端口

三. 下载主网离线数据包

参考 EOS 主网数据更新,离线数据包
因为使用离线包可以加快追上主网的进度,如果从零自己同步到主网进度,难以想象要多久...
假设已经将离线数据下载并解压到了 /mnt/data/data目录下。

四. 启动nodeos开始同步数据

nodeos --data-dir /mnt/data/data --hard-replay-blockchain

如果需要清空mongo数据库的话,添加--mongodb-wipe
相关代码如下eos\plugins\mongo_db_plugin\mongo_db_plugin.cpp

void mongo_db_plugin::plugin_initialize(const variables_map& options)
{
   try {
      if( options.count( "mongodb-uri" )) {
         ilog( "initializing mongo_db_plugin" );
         my->configured = true;

         if( options.at( "replay-blockchain" ).as<bool>() || options.at( "hard-replay-blockchain" ).as<bool>() || options.at( "delete-all-blocks" ).as<bool>() ) {
            if( options.at( "mongodb-wipe" ).as<bool>()) {
               ilog( "Wiping mongo database on startup" );
               my->wipe_database_on_startup = true;
            } else if( options.count( "mongodb-block-start" ) == 0 ) {
               EOS_ASSERT( false, chain::plugin_config_exception, "--mongodb-wipe required with --replay-blockchain, --hard-replay-blockchain, or --delete-all-blocks"
                                 " --mongodb-wipe will remove all EOS collections from mongodb." );
            }
         }

此时已开始,同步中

五. 服务器建议配置

内存:32GB
存储:1T+

编译EOS主网EOS-Mainnet代码

下载主网EOS代码

所谓的主网代码就是EOS-Mainnet维护的EOS分支仓库,相对EOSIO的仓库分支区别就是,EOS-Mainnet对发布的release分支做了进一步测试和审核,测试好后,BP们才部署。也就是基本上BP们都是部署的这个仓库分支,所以如果是同步主网,建议选此仓库分支。避免一些不必要的bug和数据不兼容等意外。

1. 获取代码
git clone https://github.com/EOS-Mainnet/eos.git

如果提示git没有安装,先安装gitapt install git

2. 切换对应的分支

由于主仓库分支较多,切换到当前仓库的最新的分支或者tag
当前最新为(mainnet-1.1.6)

cd eos源码目录
git checkout mainnet-1.1.6
3. 开始编译代码
./eosio_build.sh -s EOS

执行脚本后,脚本会自动安装所需的开发环境工具

4. 执行安装

编译完成后,

执行安装

./eosio_install.sh