简述 📝

Steem 是一个基于区块链实现的版权社交平台,它基于石墨烯框架进行了修改。由于工作需要,我开始研究 Steem,以下记录了一些困扰了我一周的问题,希望可以帮助其他开发者避免同样的坑。👨‍💻

分支选择 📂

Steem 的官方文档提到有三个分支:

  • stable: 稳定分支
  • develop: 开发分支
  • master: 主分支

最初,我理所当然地选择了 stable 分支进行二次开发。然而,我发现这并不是一个好的选择。stable 分支最近一次更新是在一年前,似乎已经不再维护。而 master 分支最近有活跃的活动,实际上 develop 分支的开发信息直接合并到了 master 分支。这三个分支中,stable 分支与其他两个分支的目录结构和配置文件有所不同。例如,在启动 stable 分支后,使用钱包客户端创建用户时会报 max_block_age invalid 错误。查了之后发现,需要配置 max_block_age 的时间周期,但这个配置在 masterdevelop 分支中已经移除。此外,stable 分支的 RPC 接口配置只有 rpc_endpoint,可以用于 HTTP 和 WS,而 master 分支则更细致地区分了 HTTP 和 WS 的配置。总结一句话:用 master 分支进行二次开发。🛠️

权限的坑 🔐

根据官方钱包文档进行操作时,遇到了如下错误:missing required active authority: Missing Active Authority。这是怎么回事呢?原因是主网的公钥与你导入的私钥不一致。

官方文档中利用 get_dev_key "" init_key 得到的公钥和私钥,这里的 init_key 实际上是你初始账户的名字,而在 Steem 中,初始用户的名字是 initminer,所以这里不对。

解决办法:

  1. 利用 get_dev_key "xxxx" initminer 生成新的公钥和私钥。
  2. 修改 protocol/config.hpp,将 STEEM_INIT_PUBLIC_KEY_STR 修改成新生成的公钥。
  3. 修改生成的 config.ini,将 private-key 的值修改为新生成的私钥。📝

cli_wallet 的 Bug 🐛

通过官方提供的钱包对创建用户进行转账时,报如下错误:Invalid cast from object_type to string error。尝试了 stable 版本,也是一样的问题。我已经给官方提了 issue。具体原因是对外的 API 使用了复合类型,导致转换失败,但由于是 C++ 编写的,我的功力不够,不知道如何处理,只能等待官方解决。

解决办法:

经过同事的指点,发现可以用如下命令进行转账,官方文档中的那条命令简直就是坑。

transfer initminer user2 "1.000 TESTS" "given 1.000 TESTS" true

steem_python 客户端钱包的 Bug 🐍

用官方的 C++ 钱包转不了账,那就用官方的 Python 钱包吧。但实际上,Python 钱包也有坑。直接 pip install steem,然后按照手册进行操作,加上 --node 参数,就可以连接自己搭建的主网。但我加了参数后,一直连接的是 Steem 的主网。后来发现有人提交了 fix,估计是 pip 安装的版本没有更新。

解决方案是直接找到源码,将 https://api.steem.com 修改成自己的主网对外 API。🔗

总结 📚

入坑的路还很长,可能后续还会遇到更多的坑。目前主要的难点在于文档少、懂的人少以及对 C++ 语法不熟悉。之前也了解过 BitShares,相比之下,BitShares 的搭建速度快很多,国内对 BitShares 的源码分析资料也比 Steem 多。如果有朋友对区块链开发感兴趣,欢迎联系我,我们可以互相交流。🤝

标签: 区块链

添加新评论

😊