V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
seerxiaozhushou
V2EX  ›  问与答

不依赖远程 API 启动 SEER 区块链命令行钱包和网页钱包的方法

  •  
  •   seerxiaozhushou · 2018-10-27 20:46:57 +08:00 · 1061 次点击
    这是一个创建于 2219 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不依赖远程 API 启动命令行钱包和网页钱包的方法

    在 SEER 的见证人操作等需要使用命令行钱包的操作中,我们介绍了通过钱包连接远程 API 来和区块链交互的方法。类似这样:

    cli_wallet.exe -s ws://123.207.146.191:9999
    

    其中” ws://123.207.146.191:9999 ”为 API 链接

    轻钱包和重钱包

    这是一种比较方便的钱包使用方式,即开即用,钱包本身并不会在本地存储和自己无关的区块链数据,因此被称为轻钱包

    通俗易懂的说,轻钱包的原理是有第三方运行了一个全节点,通过一定的配置后向社区提供公网 IP 和 RPC 端口,普通用户通过连接到这个第三方的节点,来和区块链交互。

    轻钱包的方式是最常用的钱包使用方式,但也可能出现因为 API 节点服务不可用,导致用户连不上钱包的情况。这种情况下,您可以在本地运行一个全节点,然后钱包连接自己运行的全节点即可和区块链交互。

    在最早的比特币网络中,比特币钱包使用前需要先同步全部区块链网络的数据,将所有区块链数据下载到本地,因此被称为重钱包或全节点钱包。这就是一种不依赖远程 API 启动钱包的形式,是区块链去中心化的特性表现。

    在本地运行一个 SEER 全节点

    在 SEER 网络中,每个见证人节点都是一个全节点。我们可以先在本地运行一个 SEER 见证人节点,开启 RPC 端口,节点运行正常后,使用命令行钱包连接本地节点的 RPC 端口。

    以 windows 为例,下载最新版的节点和钱包: https://github.com/seer-project/seer-core-package/releases 并解压缩。

    1、 在witness_node.exe所在目录创建文件” node.cmd ”

    2、 用记事本打开node.cmd,输入以下内容后保存退出:

    witness_node.exe --data-dir ./data  --p2p-endpoint=0.0.0.0:1888 --rpc-endpoint=0.0.0.0:9090
    

    1888为和其他节点连接的 p2p 监听端口,9090为 rpc 监听端口,用于钱包连接。运行过见证人节点的用户可能发现了,此处并没有添加见证人参数。当然,若本地已有见证人节点,也不需要再运行此节点,直接用钱包连接见证人节点即可。

    3、 每次点击node.cmd即可运行。

    节点和区块链网络数据同步需要一段时间,同步完成后,会显示像下面一样的 3 秒一个的见证人出块。

    节点正常启动的状态

    使用钱包连接此节点

    使用命令行钱包连接此节点

    和原有命令行钱包启动方式一样,但参数需要修改:

    cli_wallet.exe -s ws://localhost:9090
    

    9090为您在节点参数中设置的 rpc 监听端口。

    使用命令行钱包连接此节点

    因为主网网页钱包是 https 连接,你无法引用本地的 ws 连接,所以除非你找到一个 http 的 SEER 网页钱包(例如爱好者自己建立的钱包或你自己搭建一个开发环境),否则只能下载 SEER 的桌面钱包,来连接本地节点。

    在这里下载: https://github.com/seer-project/seer-UI-package/releases

    下载后,在设置-接入点-添加 API 服务器节点中,添加ws://localhost:9090。然后在接入点页面点击你添加节点后的使用即可启用本地节点。

    SEER 公共 API 服务器配置指南

    不依赖远程 API 启动命令行钱包和网页钱包的方法 中,我们介绍了让普通个人用户摆脱对远程 API 的依赖,自建全节点和区块链交互的方法。而在实际运营中,大部分用户还是使用 DAPP 或社区提供的 API 来对区块链进行操作,此教程就旨在帮助开发者搭建一个独立的公共 API 服务器,从而避免因高并发或单点 API 服务不可用的情况下影响 DAPP 和轻钱包用户的区块链使用体验。

    准备

    1、 为了访问安全,SEER 网页钱包和大部分服务都采取了 HTTPS 协议,因此也要求 API 使用 WSS 协议,同时 WSS 不支持 IP 访问,所以需要开发者提供域名,并申请 SSL 证书;

    2、 此教程演示的是建立一个单点的 SEER API 节点,对于 DAPP 级 API 设立者来说,需要考虑 DAPP 的阶段并发用户数,提供更高带宽和设备条件,并配置多节点负载均衡,同时进行防火墙等安全配置;

    3、 搭建一个公共 SEER API 节点,你需要租用一台 linux 服务器、设置一个指向该服务器的域名或二级域名、架设见证人全节点、配置 nginx、申请 SSL 证书等几个必要步骤;

    4、 当理事会通过一次见证人节点版本更新的提案后,API 全节点也应该进行同步更新。

    架设见证人全节点

    租用服务器和域名解析的步骤在这里就省略了,和其它网站的配置是一样的。本例中,笔者使用 api.seerchain.org 二级域名指向 Ubuntu 18.04 x64 的测试服务器。

    登陆服务器后,分别输入以下指令:

    1、 新建一个名叫 seer 的窗口;

    screen -S seer
    

    2、 在 root 目录下新建一个名叫 seer 的目录,复制v0.0.5 版本的程序包到此目录,并更名为seer.tar.gz。(此处注意,若有了更新的程序包版本,则到 SEER 软件发布页 https://github.com/seer-project/seer-core-package/releases 复制最新的 ubuntu 版本程序包链接替换掉此下载链接。)

    mkdir seer
    curl -Lo seer/seer.tar.gz https://github.com/seer-project/seer-core-package/releases/download/v0.05/witness_node-ubuntu-0.0.5.tar.gz 
    

    3、 切换到 seer 目录,解压此软件包。

    cd seer
    tar xzvf seer.tar.gz
    

    4、 带参数启动 witness_node,其中./data是指定区块链数据的存放目录,127.0.0.1:9090是设置是节点对外的 Websocket RPC 服务地址和端口。

    ./witness_node  --data-dir ./data --rpc-endpoint=127.0.0.1:9090
    

    5、 观察节点运行正常,显示 3 秒一个出块后,ctrl+A d 隐藏 screen,之后要再打开运行有节点的 Sreeen,则使用 screen -R ,或 screen -r seer

    6、 在服务器上安装使用 wscat 测试 ws。

    安装:

     apt install node-ws
    

    测试:

    wscat -c ws://127.0.0.1:9090
    > {"jsonrpc": "2.0", "method": "get_block", "params": [1], "id": 1}
    < {"id":1,"jsonrpc":"2.0","result":{"previous":"0000000000000000000000000000000000000000","timestamp":"2018-05-18T12:00:03","witness":"1.5.2","transaction_merkle_root":"5fbe404a5640f6f070884d7a7e480ce2ae686f3d","extensions":[],"witness_signature":"1f722606de6dc7fcdd258744e9f2c42983fdbbfecabe8e597fb9c90b6e2298e51a79f19b3fef34a9706b2fe186f6a5174c081538d750b92ae9842c89ea75079ec7","transactions":[{"ref_block_num":0,"ref_block_prefix":0,"expiration":"2018-05-18T12:00:30","operations":[[33,{"fee":{"amount":0,"asset_id":"1.3.0"},"deposit_to_account":"1.2.13","balance_to_claim":"1.12.1","balance_owner_key":"SEER71d7yHA7KgW8qkHYv4hX2WT4X1FariKbjWCqAfegjGr8B2LowE","total_claimed":{"amount":"100000000000","asset_id":"1.3.0"}}]],"extensions":[],"signatures":["2034bffb272ed20e482cb647685ae30f1a4b8b5cf6814495f3bc730aba83af7f771a72ae1e129f8e92419c0028177d837503226c67b35a3d818a7aabbfa9b19965","204a2219d727e097b1159e9d85db13d6dcfc98d9d9741866b2b4f4b3da28382245036282dd7fc504e50a4872aef215d7009cd6a190739d61545eee0b67bf00120d"],"operation_results":[[0,{}]]},{"ref_block_num":0,"ref_block_prefix":0,"expiration":"2018-05-18T12:00:30","operations":[[4,{"fee":{"amount":514453,"asset_id":"1.3.0"},"registrar":"1.2.13","referrer":"1.2.13","referrer_percent":0,"name":"test001","owner":{"weight_threshold":1,"account_auths":[],"key_auths":[["SEER5YaXn6iaZ14RuzmGQkbVQwU6VS4A9wWzA5P4JpkhiYdNah3KnF",1]],"address_auths":[]},"active":{"weight_threshold":1,"account_auths":[],"key_auths":[["SEER7pGpLgPDAKtvEPx9gTnNcFvKaWyKWSHCiysn2fyryCtVaRBBTJ",1]],"address_auths":[]},"options":{"memo_key":"SEER7pGpLgPDAKtvEPx9gTnNcFvKaWyKWSHCiysn2fyryCtVaRBBTJ","voting_account":"1.2.5","num_committee":0,"num_authenticator":0,"num_supervisor":0,"votes":[],"extensions":[]},"extensions":{}}]],"extensions":[],"signatures":["1f7be5f6dc2c6fffab9841491a3fe729293d7f8d57fb7c0e62a368a88977ad3f35384498b846eb1c0215a76608760f54e496aada7673e1b6f2969985987c722bf5"],"operation_results":[[1,"1.2.14"]]}]}}                                             
    

    正常的话,会返回 SEER 的区块#1 的信息,现在和此节点同一台设备上的命令行钱包和轻钱包都能用ws://127.0.0.1:9090这个 API 和区块链交互了,下面我们将配置 nginx,让此 API 能通过公网访问。

    配置服务器 nginx

    nginx 在服务器上负责反向代理、SSL 等服务,如果要配置多节点负载均衡也是对 nginx 进行配置。

    安装 nginx

    sudo apt update
    sudo apt install nginx
    

    出现Do you want to continue? [Y/n]的时候 Y 就可以了。

    配置 nginx

    1、 在/etc/nginx/sites-available/目录新建一个名为apifile的 nginx 配置文件

     sudo nano /etc/nginx/sites-available/apifile
    

    2、 打开文件后,以下面内容为例,写入配置文件:

    
    # WebSocket 配置
    map $http_upgrade $connection_upgrade {
            default upgrade;
            '' close;
        }
        
    upstream nodeapi {
    # 127.0.0.1:9090 是节点启动时配置的 rpc 服务地址和端口,修改为你的
        server 127.0.0.1:9090 fail_timeout=0;
    }
    
    server {
    # 监听 80 端口
            listen 80;
            root /var/www/html;
    
            index index.html index.htm index.nginx-debian.html;
    # api.seerchain.org 修改为你的域名
            server_name api.seerchain.org;
    
            location / {
                    proxy_set_header Host $http_host;
                    proxy_redirect off;
                    proxy_http_version 1.1;
                    proxy_pass http://nodeapi;
     # WebSocket 配置
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "upgrade";
            }
    }
    
    

    3、 修改完成后,使用 nano 的写入和退出快捷键,即control+O-ENTERcontrol+X

    4、 将apifile软链接到配置目录

    sudo ln -s /etc/nginx/sites-available/apifile /etc/nginx/sites-enabled/
    

    5、 测试 nginx 配置是否有错,如果有错根据提示修改

    sudo nginx -t
    

    6、 重新载入 nginx

    sudo systemctl reload nginx
    

    7、 此时,若配置正确,你可以使用wscat -c ws://api.seerchain.org在任意联网设备测试成功。同时,ws://api.seerchain.org已经可用于桌面版钱包、任何未使用 HTTPS 的网页钱包和 DAPP 以及命令行钱包连接区块链网络。( api.seerchain.org 改为您的域名)

    8、 若要在 SEER 主网网页钱包或任何采用了 HTTPS 协议的应用中使用此 API,需要申请 SSL 证书,并对 nginx 进行更多配置。

    申请 SSL 证书

    SSL 证书网上有很多,收费的和免费的都有,这里笔者推荐最简单的certbot一键注册免费证书并自动续期的服务。

    安装 certbot 并申请 ssl 证书

    1、 首先,添加存储库:

    sudo add-apt-repository ppa:certbot/certbot
    

    2、 安装 Certbot 的 Nginx 软件包:

    sudo apt install python-certbot-nginx
    

    3、 使用 Certbot 自动完成 SSL 证书申请和配置,Certbot 会自动修改你的 nginx 配置文件,替换 seerchain.orgapi.seerchain.org 为你的域名和二级域名。

    sudo certbot --nginx -d seerchain.org -d api.seerchain.org
    

    按照英文的提示配置吧,有几个地方要填和选择,比如邮箱等,其它有(A)gree 的选择输入 A,有(Y)es 的选择输入 Y 即可,需要注意的是:

    Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1: No redirect - Make no further changes to the webserver configuration.
    2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
    new sites, or if you're confident your site works on HTTPS. You can undo this
    change by editing your web server's configuration.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 
    

    在这一步时,您可能会需要选择1,如果选择2的话,Certbot 会自动修改你的 nginx 配置文件,所有的非 SSL 请求都会被自动转发到 SSL,如果您希望同一个域名既能用于 WS,例如命令行钱包,也能用于 HTTPS 的网页钱包等,则选1,否则选择2

    4、 完成后,打开您之前创建的 nginx 配置文件:

    sudo nano /etc/nginx/sites-available/apifile
    

    可以查看到 certbot 对配置文件的修改,最终配置好的文件如下:

    map $http_upgrade $connection_upgrade {
            default upgrade;
            '' close;
        }
    upstream nodeapi {
        server 127.0.0.1:9090 fail_timeout=0;
    }
    
    server {
            listen 80;
            root /var/www/html;
    
            index index.html index.htm index.nginx-debian.html;
    
            server_name api.seerchain.org;
    
            location / {
                    proxy_set_header Host $http_host;
                    proxy_redirect off;
                    proxy_http_version 1.1;
                    proxy_pass http://nodeapi;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "upgrade";
            }
    # 以下为 certbot 添加内容,当然,相应目录存放了您的证书文件
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/api.seerchain.org/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/api.seerchain.org/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
    }
    
    

    设置 certbot 自动续约

    证书使用周期有限,需要设置 certbot 自动续约证书:

    sudo certbot renew --dry-run
    
    

    结语

    至此,一个独立 API 节点就配置完成了。在https://wallet.seer.best/settings/access设置-接入点页面点击添加 API 服务器节点,在ADDRESS一栏填入您的 API 地址并确认,即可在网页钱包中使用您的 API 来访问区块链网络。这里因为是做测试,并且笔者和测试服务器所在地不在同一个国家的原因,所以延迟较高。在实际使用中,开发者需要根据用户分布,就近设置高效率的 API 节点,以提高用户体验。

    添加 API

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2713 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:06 · PVG 08:06 · LAX 16:06 · JFK 19:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.