搭建 steem 碰到的问题

date
Jun 27, 2021
slug
steem-build-problem
status
Published
tags
blockchain
问题记录
summary
type
Post
读书笔记

简述

steem 是一个基于区块链实现的版权社交平台,它是根据 石墨烯 框架进行的修改,由于工作需要,开始了对其的研究,以下几个问题苦苦折磨了一周,记录了下来,以免其他开发者入坑。

分支选择

steem 的官方文档里面说有三个分支,stable 是稳定分支,develop 是开发分支,master 是主分支,所以一开始理所当然基于 stable 进行二次开发,然后就发现坑有点大,stable 的分支最近一次修改是 1 年前,感觉压根就不维护了啊,然后看到 master 分支最近有活动,原来 develop 分支开发的信息,直接合并到了 master 分支,三个分支中 stable 和其他两个分支的目录结构和配置文件都有所不同。就比如在启动 stable 后,用钱包客户端进行创建用户,直接报 max_block_age invalid 后来查了之后,发现需要配置 max_block_age 的时间周期,这个配置在 master 和 develop 里都没了,另外 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 生成新的公钥和私钥。
  1. 修改 protocol/config/hpp,将 STEEM_INIT_PUBLIC_KEY_STR 修改成公钥。
  1. 修改生成的 config.ini,修改 private-key 的值 1 中生成的私钥

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 钱包吧,其实也有坑,直接 pip install steem, 然后按照手册进行操作,里面加个 –node 参数,就可以连接我自己搭建的主网了,可是我加了之后,一直连的是 steem 的主网,后来发现有人提交的 fix,估计是 pip 安装的没有更新吧。 解决方案是直接找到源码,把 https://api.steem.com 修改成自己的主网对外 API。

总结

入坑的路还很长,可能后续还会有大坑,暂时就记录这些。主要的难点在于文档少,懂的人少,C++ 语法不熟悉。之前也了解过 bitshares,相对而言搭建起来就快多了,而且国内对 bitshares 的源码分析资料要比 steem 多。如果有朋友对于区块链开发这块感兴趣了,可以联系我,互相交流。

© Frandy 2024