EOSIO MySQL 插件 issue 2

in #eos6 years ago

文/温国兵

这是「区块链技术指北」的第 41 篇文章。

如果对我感兴趣,想和我交流,我的微信号:Wentasy,加我时简单介绍下自己,并注明来自「区块链技术指北」,同时我会把你拉入微信群。

题图来自: © ChainONE / Original / chainon.io

0x00 背景


链上数据如何转化为 API 友好的数据,这是一个很重要的话题。因为能够转化为 API 友好的数据,对于开发者而言,可以极大地提高效率。目前 EOS 生态有很多插件,比如 MySQL 插件、ES 插件、Kafka 插件等等。

笔者在测试环境部署了基于 kesar 写的 MySQL 插件,结果同步数据时发现有如下的异常。上文提到了 amount 字段过短,来看看本文是什么问题吧。

(html comment removed: more)

0x01 解决


查看 nodeos 日志,可以发现如下异常。

terminate called after throwing an instance of 'soci::mysql_soci_error'
  what():  Data too long for column 'public_key' at row 1 while executing "INSERT INTO accounts_keys(account, public_key, permission) VALUES (:ac, :ke, :pe) " with :ac="walletiphone", :ke="PUB_R1_81x8BXgDQGTWmcAaavfCDcVTTyzz1BeBYbje9yJomVMCJZbz86", :pe="owner".

我们查看表结构,可以得知 public_key 长度为 53。

[root@localhost][eos]> DESC accounts_keys;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| account    | varchar(12) | YES  | MUL | NULL    |       |
| public_key | varchar(53) | YES  |     | NULL    |       |
| permission | varchar(12) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

我们尝试将 public_key 改为 64,重新同步解决。

ALTER TABLE accounts_keys CHANGE COLUMN public_key public_key varchar(64) DEFAULT NULL;

0x02 小结


MySQL 插件目前不太成熟,还有很多坑,谨慎入坑。

「区块链技术指北」同名 知识星球,二维码如下,欢迎加入。

区块链技术指北

「区块链技术指北」相关资讯渠道:

同时,本系列文章会在以下渠道同步更新,欢迎关注:

原创不易,读者可以通过如下途径打赏,虚拟货币、美元、法币均支持。

  • BTC: 3QboL2k5HfKjKDrEYtQAKubWCjx9CX7i8f
  • ERC20 Token: 0x8907B2ed72A1E2D283c04613536Fac4270C9F0b3
  • PayPal: https://www.paypal.me/robinwen
  • 微信打赏二维码

Wechat

–EOF–

版权声明:自由转载-非商用-非衍生-保持署名(创意共享4.0许可证)