搭建比特股的水龙头注册服务

安装环境 ubuntu16.04 64位

一安装依赖库(mysql数据库 )

注意,记得安装sql时的root用户密码

sudo apt-get install mysql-server libmysqlclient-dev  libreadline-dev

二 安装ruby环境

//回到home目录
cd ~
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL

git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL

git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash

sudo rbenv install 2.2.3
sudo rbenv global 2.2.3
sudo gem install bundler

三下载水龙头代码

git clone https://github.com/bitshares/faucet
cd faucet
sudo bundle   # ignore warnings

四 配置水龙头文件

(1)水龙头访问配置faucet.yml

cp config/faucet-example.yml config/faucet.yml
vim config/faucet.yml

》》内容如下
cli_wallet_connection: ws://127.0.0.1:8099   //钱包开放的websocketurl,cli_wallet -r参数对应  ./cli_wallet --chain-id="a35368851451335a25ea894c9bf81831c4e7c39e56ce94700a7813700cadf701" -s ws://127.0.0.1:8090 -w wallet.json -r 127.0.0.1:8099   -H 127.0.0.1:8092  
registrar_account: nathan                    //提供注册的推荐人用户名,本例子为在比特股环境搭建》已创建且升级为会员的用户名nathan
referrer_percent: 50                               
refcode_prefix: F01                                
                                                   
default_url: 127.0.0.1                       //水龙头对外访问的IP      
default_port: 3000                           //水龙头对外访问的端口
                                                   
exception_notification:                            
  sender_address: faucet@example.com               
  exception_recipients: admin@example.com          
                                                   
smtp:                                              
  address: address                                 
  user_name: user                                  
  password: password 

(2)密码种子文件secrets.yml(ruby on rails用到的密码种子配置文件)

cp config/secrets-example.yml config/secrets.yml
rake secret
vim config/secrets.yml
》》内容如下 (按需要改各个清空的密码种子)
development:                                          
  secret_key_base: abcdefg123456                      
                                                      
test:                                                 
  secret_key_base: abcdefg123456                      
                                                      
# Do not keep production secrets in the repository,   
# instead read values from the environment.           
production:                                           
  secret_key_base: abcdefg123456   

(3)数据库配置

vim config/database.yml

》》内容如下
default: &default                    
  adapter: mysql2                    
  encoding: utf8                     
  pool: 5                            
  username: root           #数据库登录用户名                   
  password:                #数据库登录密码,根据安装mysql时的填写
  host: localhost          #数据库url          
                                     
development:                         
  <<: *default                       
  database: bitshares_faucet_dev     
                                     
test:                                
  <<: *default                       
  database: bitshares_faucet_test    
                                     
production:                          
  <<: *default                       
  database: bitshares_faucet   

五 创建并初始化数据库

rake db:create; rake db:migrate; rake db:seed
RAILS_ENV=production bundle exec rake db:create db:schema:load

六 运行水龙头服务 (-b 0.0.0.0 -b,bind之意。是让本机以外的主机,能够访问水龙头服务)

rails s -b 0.0.0.0

七 联合调试

1 创建创世状态json

 ./witness_node --create-genesis-json "genesis.json"

2 启动witness_node

 ./witness_node --rpc-endpoint "127.0.0.1:8090" --enable-stale-production -d test_net --seed-nodes "[]" --genesis-json "genesis.json"

3 启动cli_wallet(如果报chain-id出错,则替换提示的chain-id)

 ./cli_wallet --chain-id="a35368851451335a25ea894c9bf81831c4e7c39e56ce94700a7813700cadf701" -s ws://127.0.0.1:8090 -w wallet.json -r 127.0.0.1:8099   -H 127.0.0.1:8092  

4 启动网页钱包服务
4.1 修改网页钱包的配置文件,配置默认水龙头地址,默认p2p网络的地址
/bitshares-ui/app/api/apiConfig.js

》》内容如下
export const blockTradesAPIs = {
    BASE: "https://api.blocktrades.us/v2",
    // BASE_OL: "https://api.blocktrades.us/ol/v2",
    BASE_OL: "https://ol-api1.openledger.info/api/v0/ol/support",
    COINS_LIST: "/coins",
    ACTIVE_WALLETS: "/active-wallets",
    TRADING_PAIRS: "/trading-pairs",
    DEPOSIT_LIMIT: "/deposit-limits",
    ESTIMATE_OUTPUT: "/estimate-output-amount"
};

export const settingsAPIs = {
    DEFAULT_WS_NODE: "ws://127.0.0.1:8090",               //默认witness_node节点网络地址
    WS_NODE_LIST: [
        {url: "ws://127.0.0.1:8090", location: "My hosted"}//本地witness_node节点网络地址
    ],
    DEFAULT_FAUCET: "http://127.0.0.1:3000",            //默认水龙头地址
    RPC_URL: "http://127.0.0.1:8092"                                //推测是钱包api服务地址,测试中暂时未用到
};

4.2 启动网页钱包

npm start

4.3 浏览器打开127.0.0.1:8080

5 注册(用账户模式测试)
注意:此时的cli_wallet命令行,
5.1 必须是unlock状态(否则注册报Failed to create account: tes32 - Assert Exception: !self.is_locked():)
5.2 nathan账户存在,且已升级为会员。
5.3 nathan账户有很多余额





注册成功的后台打印

八 遇到的问题

1 配置水龙头服务时,生成密码种子命令rake secret报错

$rake secret报错
 Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.,因为没nodejs环境
=>安装nodejs 
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.30.2/install.sh | bash
nvm install v6
nvm use v6

2 执行rake db:create; rake db:migrate; rake db:seed报错,因root用户在localhost被禁用
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

=>
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

3 Failed to create account: tes32 - Assert Exception: !self.is_locked():
=》
进入cli_wallet命令模式(my_password 是set_password my_password设置的密码)

locked >>> unlock my_password 

4 运行witness_node 一天后,发现无法产生块

2994239ms thread-0 producer_plugin.cpp:210 block_production_loo ] initk generated block #202 @ 2017-09-11T06:49:54 with 0 trxs 0 pending
2998489ms thread-0 producer_plugin.cpp:229 block_production_loo ] Not producing block because node didn't wake up within 500ms of the slot time.
3000615ms thread-0 producer_plugin.cpp:229 block_production_loo ] Not producing block because node didn't wake up within 500ms of the slot time.
3002818ms thread-0 chain_controller.cpp:235 _push_block ] inith #203 @2017-09-11t06:50:03 | 0 trx, 0 pending, exectime_ms=13

=>
BM说,生成一个大区块是阻塞了,没说解决方法。以下是原文
This is an indication that the single CPU is getting backlogged by a large blocking task that is not properly timebound... eg, block generation with a large pending set. (https://github.com/EOSIO/eos/issues/397

5 注意,witness_node, cli_wallet,faucet配置的IP为127.0.0.1,则服务只能本机访问。如需要本机外的机器能访问,把127.0.0.1设置为本机的局域网IP或公网IP。

6 注册时,水龙头后台服务报异常Failed to create account: tes2 - Assert Exception: base58str.substr( 0, prefix_len ) == prefix

!!! register_account error: {"code"=>1, "message"=>"Assert Exception: base58str.substr( 0, prefix_len ) == prefix: ", "data"=>{"code"=>10, "name"=>"assert_exception", "message"=>"Assert Exception", "stack"=>[{"context"=>{"level"=>"error", "file"=>"types.cpp", "line"=>60, "method"=>"public_key_type", "hostname"=>"", "thread_name"=>"th_a", "timestamp"=>"2017-09-23T06:47:58"}, "format"=>"base58str.substr( 0, prefix_len ) == prefix: ", "data"=>{"base58str"=>"GPH5jNZn4sB7t3sBDcX3NFdx2BLEh3WA15SLmoG71dHCoLs1iTZwH"}}, {"context"=>{"level"=>"warn", "file"=>"websocket_api.cpp", "line"=>122, "method"=>"on_message", "hostname"=>"", "thread_name"=>"th_a", "timestamp"=>"2017-09-23T06:47:58"}, "format"=>"", "data"=>{"call.method"=>"call", "call.params"=>[0, "register_account", ["tes2", "GPH5jNZn4sB7t3sBDcX3NFdx2BLEh3WA15SLmoG71dHCoLs1iTZwH", "GPH5fMdwtVVKGvyawZwEBTBnftbovvNdJg1Q34BMpXPWggXtEKrbv", "nathan", "nathan", 0, true]]}}]}}

=》
因为网页钱包生成的公钥的地址前缀(GPH)和比特股源码的前缀(BTS)不对应。目前采用方法(2),原因是试错先试了这方法(2)。方法(1)未验证.
推测可行修改方式

(1)网页钱包bitshares-core的公钥前缀生成,是在bitsharesjs库里提供的。这里说可以把公钥前缀修改下。(https://blog.xiaofuxing.name/2017/04/18/ecc_in_nodejs_introduction.html)

 const bitsharesjsws = require('bitsharesjs-ws');
 bitsharesjsws.ChainConfig.setPrefix('BTS'); //可以手工设定前缀,这样的话可以兼容Steem区块链。


bitsharesjs库公钥前缀源码见
node_modules>bitsharesjs>cjs>src>ChainConfig.js
"use strict";
exports.__esModule = true;
var _this = void 0;
var ecc_config = {
    address_prefix: process.env.npm_config__graphene_ecc_default_address_prefix || "GPH"
};
_this = {
    core_asset: "CORE",
    address_prefix: "GPH",
    expire_in_secs: 15,
    expire_in_secs_proposal: 24 * 60 * 60,
    review_in_secs_committee: 24 * 60 * 60,
    networks: {
        BitShares: {
            core_asset: "BTS",
            address_prefix: "BTS",
            chain_id: "4018d7844c78f6a6c41c6a552b898022310fc5dec06da467ee7905a8dad512c8"
        },
        Muse: {
            core_asset: "MUSE",
            address_prefix: "MUSE",
            chain_id: "45ad2d3f9ef92a49b55c2227eb06123f613bb35dd08bd876f2aea21925a67a67"
        },
        Test: {
            core_asset: "TEST",
            address_prefix: "TEST",
            chain_id: "39f5e2ede1f8bc1a3a54a7914414e3779e33193f1f5693510e73cb7a87617447"
        },
        Obelisk: {
            core_asset: "GOV",
            address_prefix: "FEW",
            chain_id: "1cfde7c388b9e8ac06462d68aadbd966b58f88797637d9af805b4560b0e9661e"
        }
    },

(2)改bitshares-core源码的公钥前缀为GPH重新编译,且修改所有公钥前缀为GPH。
修改如下

(2.1)修改源码
(2.1.1) 源码/bitshares-core/libraries/chain/include/graphene/chain/config.hpp
#define GRAPHENE_SYMBOL "BTS"
#define GRAPHENE_ADDRESS_PREFIX "BTS"
=>
#define GRAPHENE_SYMBOL "GPH"
#define GRAPHENE_ADDRESS_PREFIX "GPH"

(2.1.2)源码/bitshares-core/libraries/chain/protocol/types.cpp 搜索多处"BTS"
std::string( "BTS" ); 
=>  
std::string( "GPH" );

(2.1.3)源码bitshares-core/libraries/chain/db_init.cpp
    if( symbol == "BTS" )
=>
    if( symbol == "GPH" )

(2.1.4) 修改 bitshares-core/genesis.json ,替换多处
"BTS
=》
"GPH
然后重新编译bitshares-core

(2.2)修改witness_node启动创世块状态文件genesis.json,替换多处
"BTS
=》
"GPH

(2.3)修改witness_node启动参数文件,比特股参数文件 config.ini,替换多处
"BTS
=》
"GPH

九 引用

http://docs.bitshares.org/testnet/7-faucet.html 《Setting up the Faucet》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • 毕业前的狂欢,有班级合照,宿舍合照,班级聚餐,合照与聚餐齐飞,内参毕业论文夹杂,每个人的心中有紧张有愉快。 ...
    有温度的阳光阅读 438评论 0 1
  • 我穿过镜花水月的佛前许愿 我也曾把自己的的心事告诉过亲近的朋友,可是当时烦躁几乎从未减少,反而给朋友带来了负能量。...
    青若潇潇阅读 254评论 0 1
  • 【今日盘面】 今日走势如我提醒,止跌企稳。今日沪指最低下探至3117.08我提醒支撑3125-3113区间内,普反...
    股海苍穹阅读 160评论 0 0
  • 很喜欢穷爸爸富爸爸系列,作者通过两个父亲的对比,将穷人思维和富人思维展现在我们面前,让我们更深刻的思考贫穷的本质到...
    天涯亦行人阅读 703评论 8 18