您正在查看: Surou 发布的文章

EOS RPC API monitor Health Check

由于需要检查EOS Rpc API的健康运行情况,所以需要一个检查的脚本定期运行
监控需要发送微信消息,先参考《推荐一个简单的服务器监控,发送消息给微信的方案「Server酱」》,注册下面需要用的SCKEY
新建api_monitor.sh,内容如下

#!/bin/bash
# Update these for your own settings
declare -A APIS=( [eos-mainnet]=https://eos-mainnet.bcskill.com [get-scatter]=https://nodes.get-scatter.com )
WE_CHAT_WEBHOOK=https://sc.ftqq.com/SCKEY(去上面的参考去申请).send
#最新区块时间`head_block_time`与本地时间存在时差,不确定具体原因,暂时比对时间为容差为24h
DELAY=60*60*24

# Do not change below here
for K in "${!APIS[@]}"
do
    # Check the endpoint
    JSON=$(curl -s ${APIS[$K]}/v1/chain/get_info)

    # Fail if curl was unsuccessful
    if [ $? -ne 0 ]; then
        curl -s -X POST --data "text=\"\`$K\` API node cannot be accessed @ ${APIS[$K]}\"&desp=EOS Monitor Error" $WE_CHAT_WEBHOOK
        continue
    fi

    # Calculate the diff
    HEAD=$(echo $JSON | jq -r .head_block_time)
    BLOCK=$(date --date=$HEAD +"%s")
    NOW=$(date +"%s")
    DIFF="$(($NOW-$BLOCK))"

    # Fail if head block is older than acceptable delay
    if [[ $DIFF -gt $DELAY ]]; then
        curl -s -X POST --data "text=\"\`$K\` API head block time @ ${APIS[$K]}/v1/chain/get_info is lagging more than $DELAY seconds: $HEAD\"&desp=EOS Monitor Error" $WE_CHAT_WEBHOOK
    fi
done

依赖

返回结果依赖jq解析,需要先安装下

sudo apt-get install jq

修改文件权限

chmod 755 api_monitor.sh

运行

每30秒检查一次

watch -n 30 ./api_monitor.sh

等出问题时,会直接发送消息到绑定的微信

参考:https://github.com/BlockMatrixNetwork/eos-bp-failover/tree/master/external-rpc-api-monitor

推荐一个简单的服务器监控,发送消息给微信的方案「Server酱」

EOS Rpc服务器需要个简单的监控,出问题时发送消息给微信,方便运维同学尽快及时的处理,经过查询,Server酱的方案能简单的实现。

Server酱

官网:http://sc.ftqq.com

接入方法

  1. 登入:用GitHub账号登入网站,就能获得一个SCKEY(在「发送消息」页面)
  2. 绑定:点击「微信推送」,扫码关注同时即可完成绑定
  3. 发消息:往 http://sc.ftqq.com/SCKEY.send 发GET请求,就可以在微信里收到消息啦
    https://sc.ftqq.com/[SCKEY(登入后可见)].send?text=API node cannot be accessed&desp=EOS Monitor Error

    来个示意图

EOS自动的延迟转账

transaction 里面有一个 delay_sec 的参数,默认是0,可以通过自定义实现延迟EOS转账。
具体代码可以查看 contracts/eosiolib/transaction.hpp
我们通过写一个新的合约,实现延时转账的 send 功能

void send(account_name from, account_name to, asset amount, string memo, uint64_t delay) {
    eosio::transaction t{};
    t.actions.emplace_back(
    eosio::permission_level(from, N(active)), // with `from@active` permission
    N(eosio.token), // You're sending this to `eosio.token`
    N(transfer),   // to their `transfer` action
    std::make_tuple(from, to, amount, memo));  // with the appropriate args
    t.delay_sec = delay; // Set the delay
    t.send(eosio::string_to_name(memo.c_str()), from); // Send the transaction with some ID derived from the memo
    }
};

最后需要记得对发送者账户进行权限设置,让该合约有权限进行转账操作。

$ cleos set account permission <sender-account> active '{"threshold": 1,"keys": [{"key": "<sender-pubkey>","weight": 1}],"accounts": [{"permission":{"actor":"<contract-account>","permission":"eosio.code"},"weight":1}]}' owner -p <sender-account>

参考:https://eosio.stackexchange.com/questions/1900/how-to-transfer-eos-after-a-particular-delay
转自:http://blog.eosdata.io/index.php/2018/08/16/ru-he-jin-xing-zi-dong-de-yan-chieos-zhuan-zhang/

EOS核心仲裁庭收费标准

EOS核心仲裁庭费用表

本费用表适用于在EOS核心仲裁庭(ECAF)的争议解决机制(RDR)之下进行的仲裁,详情请参见此处https://eoscorearbitration.io/home/governance/
本费用表将会不定期的修订。ECAF的费用将以EOS的形式收取。如果需要从法币转换为EOS,操作过程在本备忘录末尾的货币转换部分做了详细说明。
该收费制度分为两部分,如下:
1.不可退还的诉讼费:在提交案件时支付。
2.仲裁费用:在案件结案时支付,用于补偿仲裁员、案件管理员、仲裁庭工作人员、外部专家等在案件上花费的时间成本。

注:费用与仲裁员针对潜在的判决可能要求当事人作为担保缴纳的任何保证金是分开的。
诉讼费:
当提交仲裁申请时,申请人应支付不可退还的诉讼费,该费用取决于索赔金额,具体如下:

仲裁费用

根据RDR第5.9节https://eoscorearbitration.io/home/governance/ :当仲裁程序开始,仲裁员将在切实可行的范围内尽快的提交一份仲裁费用的估算。
该仲裁费用将固定使用在仲裁上并且将被支付到本法庭账户。
这样的花费可能包括:
1、仲裁员的报酬;
2、仲裁员的花费;
3、专家和翻译的成本;
4、其它与本法庭审理该案件相关的报酬和花费;
5、当事人引发的合理的法律费用和其它花费;
6、由于消极的行动或行为被仲裁员征收的罚金;
7、任何与临时或者紧急救济通知有关的费用;
8、任何与请求合并仲裁有关的费用;
仲裁费用应参照仲裁庭成员的工作量计算。费率将取决于案件的具体情况,包括其复杂性和仲裁员可能具有的任何特殊资质。
费用将按小时收取,如下文(数字以美元报价,但以EOS收取,见后文关于货币兑换的部分)。适用的费率将取决于经验水平和本人对问题的专业程度。

保证金

仲裁员可指示当事人按其认为适当的比例和时间提交两种类型的保证金:

1.仲裁费用的预付款。根据ECAF规则,此类由当事人预付的保证金可以由ECAF用来支付任何此类仲裁费用(包括ECAF自己的费用和开支)。
2.占争议总金额一定百分比的保证金,作为对潜在判决的担保。

如果一方当事人未能或者拒绝支付任何款项到仲裁员指示的仲裁费用的账号,仲裁员可指示另一方或多方代为支付以允许仲裁继续进行(基于任何针对仲裁费用的仲裁令或裁定)。在这种情况下,代为付款的一方可以要求仲裁员给出一个命令或裁决,以便将该金额作为违约方的一笔立即到期债务和应付账款,来进行收回。

一方当事人申请紧急救济时,除了支付不可退还的诉讼费之外,还应支付相当于750美元的EOS的保证金(见后文关于货币兑换的说明)作为紧急救济程序的预付费用。如果没有同时支付诉讼费和保证金,ECAF将不会以紧急救济程序进行处理。

临时付款

随着仲裁程序的进行,由ECAF和仲裁员批准,部分保证金可能会不时地被释放,以覆盖仲裁费用的任何部分。

如果在需要临时付款时没有或欠缺资金,付款通知可以被提交给当事人直接进行付款。

支付方式

ECAF只会要求您将资金转入以下两个账户之一:

  • ecafeewallet
  • ecafescrowww

警告:不要将资金转移到任何其他帐户!任何向其他EOS帐户或交易所帐户付款的请求都是欺诈性请求! ECAF不会对转入其它账户的资金承担责任。

诉讼费的收取

申请人将通过ECAF官方网址的诉讼提交页面提起一个诉讼:https://eoscorearbitration.io/file-a-claim/
ECAF的案例经理随后将审核该诉讼。一旦案件经理确信不需要其他补充信息,他们将联系申请人提交诉讼费并附上适当的备注到以下地址:
Ecafeewallet
一旦成功收到诉讼费,该案件将被标记为已被仲裁庭接受,并等待分配给具体的一个仲裁员。

保证金的收取

当仲裁员被分配到一个案件时,他们将对仲裁费用进行初步估计。 (该估计将在结案时最终确定。)
仲裁员可以随后指示案件管理员将本案件的这些费用通知当事人。仲裁员还将确定是否需要要求一笔保证金来覆盖部分仲裁费用以及作为争议金额的保证金。
保证金将由案件经理负责征收,并将存入ECAF的托管账户,同时附有将提供给当事人的备注。保证金必须只能发送到以下这个账户:
Ecafescrowww

货币兑换

金额必须以EOS的形式支付。
如果任何到期金额没有以EOS为单位报价,则应按保证金和/或裁定的付款通知发出之日前一天的兑换率进行兑换。
EOS转换为美元使用的利率引用自CoinMarketCap https://coinmarketcap.com/currencies/eos/historical-data/ 在指定日期的收盘价。
如果该金额以美元以外的法定货币表示,则该金额应首先使用引用自OandA https://www.oanda.com/lang/cns/currency/converter/ 的在指定日期的平均卖出价,来转换为美元。然后再将其转换为如上所述的EOS单位。

请注意: 本文由EMAC(EOS 华语治理社区)仲裁候选人Achilles原创翻译,保留该声明即可转载。
原文来源:https://steemit.com/ecaf/@ecaf/ecaf-s-fee-schedule

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