BitShares API 服务器架设指南 - 个人篇

in #bitshares7 years ago (edited)

BitShares API 服务器架设指南 - 个人篇

@abit交易所对接指南启发,也写一篇关于API服务器搭建的指南。希望可以帮助到有需要的人。以下示例均在 linux 或者 mac 操作系统上测试运行通过,但没有在 windows 下进行过测试,但是原理是相同的,至多是具体路径写法略有差别,请 windows 用户自行调整。

我们这里谈到的 API 服务器,实际上有以下几种用法,不同的用法,硬件要求及配置上有很大不同:

  1. 个人使用
    主要是个人用户在使用轻钱包或者网页钱包时,使用运行在本地,独占使用的API服务器。现代的个人电脑配置基本就足够了。

  2. 公共 API 服务器

    提供一个公共的API服务器,向公众开放服务。一般需要是托管在IDC的服务器或者从云服务提供商那里租赁的VPS,对配置带宽都有一定要求。

写着写着发现篇幅很长,所以分成 2 篇独立的文章,一篇讲个人设置,一篇讲公共API服务器的搭建。

配置供个人使用的API服务器

在自己的本地服务器上运行一个witness_node节点,并侦听本地端口。该节点仅供用户个人使用,所以速度飞快。

硬件要求

8G 内存(越多越好)
50G 硬盘

安装相关依赖并下载BitShares源码编译

Mac OSX上的方法

    # Mac OSX 操作系统上
    # 来源: https://github.com/bitshares/bitshares-core/wiki/Building-on-OS-X
    
    # 安装 brew
    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    brew doctor
    brew update
    
    # 安装编译需要的依赖
    brew install boost cmake git openssl autoconf automake 
    brew link --force openssl 
    
    # 下载 BitShares 源码并编译
    # 这里,我们假设将目的地目录设置在 /path/to/bts_source,可根据需要修改
    cd /path/to/bts_source
    # 获取源码
    git clone https://github.com/bitshares/bitshares-core
    cd bitshares-core
    # 获取依赖的子模块代码
    git submodule update --init --recursive
    cmake .
    # 编译witness_node程序,如果make后面不加参数,则编译所有预设程序,也包括了cli_wallet, delayed_node 等程序,这现在场景下不需要
    make witness_node

编译完成后witness_node程序在 programs/witness_node/ 目录下可以找到。这个程序可以复制到其他目录也可以独立运行。

  • 关于Mac下的安装详细说明,看这里.

  • 关于Windows下的安装说明,看这里.

  • 关于Ubuntu下的安装说明,看这里.

启动witness_node节点

时间校准

witness_node节点的运行要求当前的机器校准时间,如果是桌面操作系统,无论是 mac 或是 windows,请确认系统时间已自动同步,linux 系统安装 ntp服务实现。

sudo apt-get install ntp

配置并启动

我们先来看一下witness_node启动时需要配置哪些参数

# 注意我们的下载和编译路径
cd /path/to/bts_source/programs/witness_node

# -h 参数返回witness_node程序启动时支持的运行参数
./witness_node -h

# 其中这几条是我们关心的
-d [ --data-dir ] arg (="witness_node_data_dir")
指定数据及配置文件存储的目录,默认witness_node_data_dir.

--replay-blockchain
重发所有已下载的区块并重建索引,非常耗时。当意外中断后重启会强制进行,所以尽量不要强制中断,按了Ctrl+C之后稍等一会儿等程序完成收尾工作后优雅退出。

--resync-blockchain
删除所有已下载数据,重新同步区块链。

--rpc-endpoint [=arg(=127.0.0.1:8090)]
RPC侦听地址及端口

Options for plugin account_history:
  --track-account arg
追踪指定Account ID的交易历史(可多次设置)

-d参数设置数据及配置存储的目录。

--track-account 参数的意思是我们只关心特别指定的账户的历史交易信息,其他账户的历史交易信息我不需要。这样就可以大大节省内存开支。

既然是本地API只为我一个人服务,那只需要追踪我自己的账户就好了。因为我有2个账户,所以设置了2遍,如果你只有一个或者更多,则可以相应调整该参数。那么这个ID从哪里来呢,你可以从网页钱包中快速找到,比如我的账户名叫 mr.agsexplorer,访问网页钱包 https://bitshares.dacplay.org/account/mr.agsexplorer/overview,在账户下面有个#ID。

图片

在前面加上固定的1.2.mr.agsexplorer的完整的Account ID就有了1.2.10285。后面的另一个ID也是同样的道理,是属于 mrs.agsexplorer。你可以试一试,看看她的ID是不是10286

--partial-operations这个参数是最近在代码库中的增加的,-h里还没有显示。这个参数指示只需要部分的数据,配合track-account参数一起使用可以大大降低本机内存负荷。如果不加这两个参数,目前情况下内存需求大约在24G左右,实际上如果内存不足,无法运行;如果使用了这2个参数,内容负荷最少可达到1.4G。

track-account可以重复多次以追踪多个账户。

--rpc-endpoint这个参数设置我们的本地API服务器为客户端提供数据的地址和设置,默认的设置是 127.0.0.1:8090 也就是只在本地的8090端口提供服务,我们就采用这个默认设置。

--rpc-endpoint后面不填内容,就使用默认值;但是--rpc-endpoint必须要写,否则节点启动后就不开放Websocket RPC服务了。

所以,我们最终的启动命令看上去是这样的

# 进入工作目录
cd /path/to/bts_source/witness_node

# 启动命令及参数
./witness_node -d ./node_data  --partial-operations true --track-account '"1.2.10285"' --track-account '"1.2.10286"' --rpc-endpoint

综合上面的说明,这段启动命令的大意就是:把数据和配置文件放在当前目录下的node_data子目录中,启动节点后只追踪1.1.102851.2.10286这2个账户,其他的不关心,并用默认设置开放Websocket RPC服务。

节点启动后,就需要耐心等待区块同步。在未完成同步之前,如果尝试使用客户端进行连接,也能连,但是会出现“区块数据陈旧或时钟不准”的错误提示。

为了每次启动时不需要输入这么多命令,我喜欢创建一个脚本 run.sh,把具体命令写在里面,以后只需要运行该脚本就可以了。

#!/usr/bin/env bash

./witness_node -d ./node_data  --partial-operations true --track-account '"1.2.10285"' --track-account '"1.2.10286"' --rpc-endpoint

上面是 run.sh 脚本文件的内容,把run.sh文件放置在 witness_node 同一个目录就可以了,注意要给 run.sh 可执行权限。

chmod +x run.sh

以后每次要启动时,我就这样

cd /path/to/bts_source/programs/witness_node

./run.sh

节点启动后,我们可以尝试通过命令行来测试连接

# 使用curl命令来测试,向localhost:8090发出请求,获取#1号block摘要
curl http://localhost:8090 -d '{"jsonrpc": "2.0", "method": "get_block", "params": [1], "id": 1}'

# 应该返回一个JSON结构体
{"id":1,"jsonrpc":"2.0","result":{"previous":"0000000000000000000000000000000000000000","timestamp":"2015-10-13T14:12:24","witness":"1.6.8","transaction_merkle_root":"0000000000000000000000000000000000000000","extensions":[],"witness_signature":"1f53542bb60f1f7a653bac70d6b1613e73b9adc952031e30e591e601dd60d493ba5c9a832e155ff0c40ea1dd53512e9f93bf65a8191497ea67d701bc2502f93af7","transactions":[]}}

# 这就表示我们的节点能够正常提供数据服务了

客户端的连接

这里的客户端泛指数据消费端,表现形式不一,但是都包含一个数据源指向的设置,即从哪里获得数据,在我们的例子里,数据源的设置就是 ws://localhost:8090, ws开头表示使用websocket协议。

客户端的形态包括:

提供网页钱包的网站,如

轻钱包

  • 可以下载后独立运行的钱包UI程序,官方地址
  • 设置方法同上

命令行钱包

  • cli_wallet: ./cli_wallet -s localhost:8090

其他各种程序

  • curl: curl -d '{"jsonrpc": "2.0", "method": "info", "params": [], "id": 1}' http://localhost:8090 http://127.0.0.1:8093/rpc
  • 比如alt的btsbot

总结

在本机运行个人API服务,为自己的客户端提供本地的(网络延迟几乎可忽略)、独占的(不和其他用户分享)的API数据源,会让你对钱包的体验更进一层。但是每次使用客户端前,需要手动启动witness_node并等待它和网络同步数据,如果使用频率比较高,那么同步很快完成,如果距上次同步有段时间了,比如几个月,那需要等个几分钟到几十分钟也能迅速同步完毕。

这篇是 BitShares API 服务器架设指南 文章系列中的第一篇,个人篇。后面还会 公共API服务器 的搭建指南。

如果你喜欢这篇教程,请为我的见证人投票,在 BitShares 网络上,我的见证人叫 mr.agsexplorer,我同时维护着一个公共网页钱包 https://bitshares.dacplay.org 以及一组公共 API 服务器 wss://bitshares.dacplay.org/ws

Sort:  

难得一见的中文技术贴
大力赞
感谢作者分享

靠你消化造福我們了.... :)

好文!

增加一个第三方网页钱包,来自 TransWiser:https://bts.transwiser.com

虽然写得很详细,但还是不会搭啊。这种节点能不能分享的,我有时用轻钱包经常连不上,所以也很少用钱包和内盘了!

后面会有公共API的搭建文章,搭建公共API服务器的人多了,大家选择也会多。当然有资源的提供方也可以容易地为大家服务。面包会有的,一切会好起来的。

嗨朋友,非常好!!!!!
你会帮我一个投票在我的帖子,请跟着我,我需要支持你,谢谢! ;)

Thank you for sharing,
feeling that this article has been prepared for a week, although I am not too clear, but will always wait for a faucet erection method.

awesome post! bitshares are on a rock and roll mode!

非常有趣的文章。谢谢你的分享!

非常有趣的文章。谢谢你的分

It was very informative, for as long as it was translated by my translator. Thank you.

wow.. you are amazing.

Coin Marketplace

STEEM 0.17
TRX 0.13
JST 0.028
BTC 56570.01
ETH 3028.13
USDT 1.00
SBD 2.29