Surou 发布的文章

通过RPC推送交易后的返回数据,只为参考方便提取相关字段


const result = await api.transact({
        actions: [{
            account: "eosio.token",
            name: 'transfer',
            authorization: [
            {
                actor: "bcskillsell",
                permission: 'active',
            }],
            data: {
                from:"bcskillsell",
                to:"bcskillbuy",
                quantity: '12.00000000 EOS',
                memo: 'bcskill.com'
            },
        }]
      }, {
        blocksBehind: 3,
        expireSeconds: 30,
      });
console.log('\n\nTransaction pushed!\n\n' + JSON.stringify(result, null, 2));
{
  "transaction_id": "7c1f2e70f612bbeaaa1c6687b0da21dda85fb30de5d666f15baa092b70d55f2b",
  "processed": {
    "id": "7c1f2e70f612bbeaaa1c6687b0da21dda85fb30de5d666f15baa092b70d55f2b",
    "block_num": 32815165,
    "block_time": "2019-12-03T08:28:53.500",
    "producer_block_id": null,
    "receipt": {
      "status": "executed",
      "cpu_usage_us": 427,
      "net_usage_words": 18
    },
    "elapsed": 427,
    "net_usage": 144,
    "scheduled": false,
    "action_traces": [
      {
        "receipt": {
          "receiver": "eosio.token",
          "act_digest": "ce66f1905d2afbc792deaeca80a4e40576e25f3f8f3c204ac7d6ba4aef1fe437",
          "global_sequence": 36674138,
          "recv_sequence": 279646,
          "auth_sequence": [
            [
              "bcskillsell",
              205
            ]
          ],
          "code_sequence": 1,
          "abi_sequence": 1
        },
        "act": {
          "account": "eosio.token",
          "name": "transfer",
          "authorization": [
            {
              "actor": "bcskillsell",
              "permission": "active"
            }
          ],
          "data": {
            "from": "bcskillsell",
            "to": "bcskillbuy",
            "quantity": "12.00000000 EOS",
            "memo": "bcskill.com"
          },
          "hex_data": "00008851e1ae125e0000005e9fae125e008c8647000000000846534300000000137b227472616e736665725f74797065223a337d"
        },
        "context_free": false,
        "elapsed": 166,
        "console": "",
        "trx_id": "7c1f2e70f612bbeaaa1c6687b0da21dda85fb30de5d666f15baa092b70d55f2b",
        "block_num": 32815165,
        "block_time": "2019-12-03T08:28:53.500",
        "producer_block_id": null,
        "account_ram_deltas": [],
        "except": null,
        "inline_traces": [
          {
            "receipt": {
              "receiver": "bcskillsell",
              "act_digest": "ce66f1905d2afbc792deaeca80a4e40576e25f3f8f3c204ac7d6ba4aef1fe437",
              "global_sequence": 36674139,
              "recv_sequence": 122,
              "auth_sequence": [
                [
                  "bcskillsell",
                  206
                ]
              ],
              "code_sequence": 1,
              "abi_sequence": 1
            },
            "act": {
              "account": "eosio.token",
              "name": "transfer",
              "authorization": [
                {
                  "actor": "bcskillsell",
                  "permission": "active"
                }
              ],
              "data": {
                "from": "bcskillsell",
                "to": "bcskillbuy",
                "quantity": "12.00000000 EOS",
                "memo": "bcskill.com"
              },
              "hex_data": "00008851e1ae125e0000005e9fae125e008c8647000000000846534300000000137b227472616e736665725f74797065223a337d"
            },
            "context_free": false,
            "elapsed": 5,
            "console": "",
            "trx_id": "7c1f2e70f612bbeaaa1c6687b0da21dda85fb30de5d666f15baa092b70d55f2b",
            "block_num": 32815165,
            "block_time": "2019-12-03T08:28:53.500",
            "producer_block_id": null,
            "account_ram_deltas": [],
            "except": null,
            "inline_traces": []
          },
          {
            "receipt": {
              "receiver": "bcskillbuy",
              "act_digest": "ce66f1905d2afbc792deaeca80a4e40576e25f3f8f3c204ac7d6ba4aef1fe437",
              "global_sequence": 36674140,
              "recv_sequence": 906,
              "auth_sequence": [
                [
                  "bcskillsell",
                  207
                ]
              ],
              "code_sequence": 1,
              "abi_sequence": 1
            },
            "act": {
              "account": "eosio.token",
              "name": "transfer",
              "authorization": [
                {
                  "actor": "bcskillsell",
                  "permission": "active"
                }
              ],
              "data": {
                "from": "bcskillsell",
                "to": "bcskillbuy",
                "quantity": "12.00000000 EOS",
                "memo": "bcskill.com"
              },
              "hex_data": "00008851e1ae125e0000005e9fae125e008c8647000000000846534300000000137b227472616e736665725f74797065223a337d"
            },
            "context_free": false,
            "elapsed": 6,
            "console": "",
            "trx_id": "7c1f2e70f612bbeaaa1c6687b0da21dda85fb30de5d666f15baa092b70d55f2b",
            "block_num": 32815165,
            "block_time": "2019-12-03T08:28:53.500",
            "producer_block_id": null,
            "account_ram_deltas": [],
            "except": null,
            "inline_traces": []
          }
        ]
      }
    ],
    "except": null
  }
}

EOS 整个链停止,重新强制引导启动


BP节点全部停止,各节点重新启动后,无法正常出块

最近因为非技术原因,导致测试链所有BP节点都停止了。
由于producer_plugin中的安全检查,导致BP节点启动后,一直处于start_block_result::waiting
导致整个链网络瘫痪。

强制引导启动

先准备一台非目前BP节点所在的机器做强制引导节点。然后把目前出块账户的 2/3 +1 个BP账号都配置到此节点。
并把目前其他的BP节点都关闭pkill nodeos

修改强制引导节点的链程序,绕过安全检查

https://github.com/EOSIO/eos/blob/3c553db73864ea19458512b4669cf9942dc59f57/plugins/producer_plugin/producer_plugin.cpp#L1350
将下面代码注释掉,并重新编译链程序

if (_pending_block_mode == pending_block_mode::speculating) {
      auto head_block_age = now - chain.head_block_time();
      if (head_block_age > fc::seconds(5))
         return start_block_result::waiting;
   }

修改BP节点的配置为同步节点的配置

先将其余BP节点的config,改为同步节点的配置,也就是把强制引导节点的p2p-peer-address加到各BP节点的config,并把各BP节点的producer-namesignature-provider都注释掉。

强制启动引导节点

添加-e,强制启动出块

nodeos -e

此时强制出块节点应该已出块。

启动各BP节点

将其余BP节点分别启动,此时开始同步区块,等到追上强制出块节点高度。

迁移BP账号

关闭强制出块节点,把BP账号从config里面每注释掉一部分,就把对应的BP节点停止,并修改config,把对应的BP账号放开。此时重新启动强制出块节点和新迁移BP的节点,现在强制出块节点除去注释掉的部分出块账号。其余BP账号出块正常,且能从新迁移BP节点同步对应的出块BP账号的出块。新迁移的BP节点,出块也正常。
依次类推,迁移其余BP节点账号,等其余BP节点都出块正常后,及此次强制引导启动链网络结束。

备注

能出现全部节点停止的情况,基本都是特殊公链-“私链”,所以具有大部分BP的掌控权,我们先只针对此情景提出修复方案。


EOS 同步Mongo,各表数据解释


使用场景

由于需要对链上数据进行大量自定义得查询,一般来说还是通过部署同步节点,然后使用mongo插件将链上数据同步到Mongo进行使用更直接和方便。(虽然有其他得替代方案比如(Hyperion-History-API)(history-tools),测试下来,mongo更直接些,如果以后有其他方案更新,我们在做文章跟进,此处我们只讨论同步mongo得方案)

mongo 插件配置

必须开启以下配置,才能获取以下讨论中谈及得数据

  • mongodb-store-block-states = true
  • mongodb-store-blocks = true
  • mongodb-store-transactions = true
  • mongodb-store-transaction-traces = true
  • mongodb-store-action-traces = true

Mongo 数据表介绍

使用官方得mongo插件同步后,库数据表如下

  • account_controls
  • accounts
  • action_traces
  • block_states
  • blocks
  • pub_keys
  • transaction_traces
  • transactions

// 稍后补充

附加

action_traces表默认没有"trx_id"得索引,如果想根据"trx_id"查询得话,可以自行添加索引,不然会很慢。

db.action_traces.getIndexes()
db.action_traces.createIndex({"trx_id":1, "background":true})

安装mongodb,并切换dbpath


卸载旧版本(按需要)

sudo apt-get --purge remove mongodb mongodb-clients mongodb-server

安装新版本

sudo apt-get install mongodb

查看安装版本

mongo -version

测试启动

sudo service mongodb start

查看进程

ps -ef | grep mongo
mongodb  25630     1  0 13:13 ?        00:00:00 /usr/bin/mongod --unixSocketPrefix=/run/mongodb --config /etc/mongodb.conf

确认服务开机启动正常

pgrep mongo -l

停止服务

sudo service mongodb stop

修改自定义数据目录

假设我们想从默认位置,换到 /home/surou/mongodb

先新建此目录

mkdir /home/surou/mongodb

设置mongo组访问权限

cd /home/surou/mongodb
chown -R mongodb:mongodb /home/surou/mongodb
sudo chmod 777 mongodb

修改配置

sudo vi /etc/mongodb.conf
# Where to store the data.
dbpath=/home/surou/mongodb

#where to log
logpath=/home/surou/mongodb/mongodb.log

logappend=true

bind_ip = 0.0.0.0

重新启动

sudo service mongodb restart

查看状态

sudo service mongodb status

其他

db.createUser( { user: "账号", pwd: "密码", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] } )
db.auth("账号","密码")

参考

https://blog.csdn.net/weixin_39525355/article/details/111794454