Centos和ubuntu 瑞波幣,xrp 節點搭建

rippled服務器軟件可以根據其配置以多種模式運行,包括:

  • 庫存服務器(stock server) - 使用分類帳的本地副本跟隨網絡
  • 驗證服務器(validating server) - 簡稱驗證器(validator) - 參與共識(並完成庫存服務器所做的一切)。
  • 獨立模式下(stand-alone mode)的rippled server - 用於測試 (不與其他rippled節點通信, 私有節點)

還可以將rippled`可執行文件作爲`客戶端應用程序運行,以便在本地訪問rippledAPI (在這種情況下,相同二進制文件的兩個實例可以並行運行, 一個作爲服務端, 另一個作爲客戶端短暫運行, 然後終止)

準備

rippledXRP分類帳網絡中的每臺服務器執行網絡的所有交易處理工作。未知數量何時會達到最大網絡容量。因此,生產rippled服務器的基準硬件應該與Ripple的性能測試中使用的類似。

硬軟件配置(建議)

爲了在生產環境中獲得最佳性能,建議節點的服務器滿足如下配置(裸機):

操作系統:Ubuntu 16.04+
CPU:Intel Xeon 3+ GHz處理器,支持4核和超線程
磁盤:SSD
內存:
    用於測試:8GB +
    對於生產:32GB
網絡:主機上具有千兆網絡接口的企業數據中心網絡

SSD存儲

SSD存儲應支持幾千個讀寫IOPS。Ripple工程師觀察到的每秒最大讀寫次數超過每秒10,000次(在重度使用的公共服務器集羣中)以及每秒超過7,000次寫入(在專用性能測試中)。
CPU利用率和虛擬化

Ripple性能工程已經確定裸機服務器實現最大吞吐量。但是,管理程序很可能會導致性能下降最小化。

網絡

對於當前的交易量,最低要求大致爲2Mbps傳輸和2Mbps接收。但是,在提供歷史分類帳和交易報告時,這些數據可能會突然傳輸至100MBps。當一個rippled服務器最初啓動時,它可能會突然超過20Mbps的接收。

存儲

建議估計存儲容量大概爲每天大約12GB的數據與NuDB保持聯機。RocksDB每天需要8GB左右。但是,每天的數據隨網絡中的活動而變化。應該提供額外的容量來爲未來的增長做準備。截至(2018-03-01),所有XRP賬本記錄大約爲6.8TB。

RAM內存

內存要求主要是node_size配置設置和檢索歷史數據的客戶端使用。如前所述,生產服務器應該使性能最大化並將此參數設置爲huge。可以將node_size參數設置得較低以減少內存的開銷(測試的時候使用)。測試可以使用8GB的內存。

 

1、centos部署

1: 安裝ripple RPM 存儲庫

$ sudo rpm -Uvh https://mirrors.ripple.com/ripple-repo-el7.rpm

2: 安裝rippled軟件包:

$ sudo yum install --enablerepo=ripple-stable rippled

3: 配置rippled服務以在系統引導時啓動

$ sudo systemctl enable rippled.service

啓動服務

$sudo systemctl start rippled.service

4: 在CentOS / Red Hat上自動更新

$ /opt/ripple/bin/update-rippled.sh

檢查是否/opt/ripple/bin/update-rippled.sh存在。如果沒有,請手動更新。
運行以下命令以更新到最新版本rippled:

$ sudo rpm -Uvh --replacepkgs https://mirrors.ripple.com/ripple-repo-el7.rpm
$ sudo yum update --enablerepo=ripple-stable rippled
$ sudo systemctl daemon-reload
$ sudo service rippled restart

5: 運行一個驗證器 生成驗證器密鑰對:

$ /opt/ripple/bin/validator-keys create_keys

在這裏插入圖片描述

$ /opt/ripple/bin/validator-keys create_token --keyfile /root/.ripple/validator-keys.json
需要把我的keyfile 路徑換成自己 create_keys 生成的路徑

在這裏插入圖片描述

6:編輯rippled.cfg文件

rippled.cfg文件路徑 /opt/ripple/etc/rippled.cfg


文件內容加上
[validator_token]
此處爲圖片裏 validator_token下面的私鑰

7: 重啓服務

$ sudo systemctl restart rippled.service

8: 查看服務器信息

$ /opt/ripple/bin/rippled server_info

 在這裏插入圖片描述

pubkey_validator響應中的值應與您爲驗證器一起生成public_key的validator-keys.json文件中的值匹配

9: 驗證網絡連接是否正常

$  /opt/ripple/bin/rippled peers

peers陣列null,則表明您沒有健康的網絡連接

10: 等待ripple 拉塊

$ /opt/ripple/bin/rippled server_info  

在這裏插入圖片描述

表示ripple服務器的狀態
在這裏插入圖片描述

11: 一般情況下都是先把節點切換成測試網, 先完成功能, 因爲測試網可以有幣測試

切換到測試網需要修改 ripple.cfg和validators.txt

1:修改ripple.cfg, 把下圖標紅的兩項前面的# 去掉,前面不可留有空格

在這裏插入圖片描述

2:修改validators.txt文件, 把測試網配置開啓, 正式網關閉
紅圈1部分 是需要註釋掉的,
紅圈2部分 是需要解開註釋的,

在這裏插入圖片描述

3:兩處都修改好了之後,需要重啓下ripple服務 

$ sudo systemctl restart rippled.service

4:等待3~8分鐘 使用下方命令查詢下信息 

$ /opt/ripple/bin/rippled server_info | grep seq

 在這裏插入圖片描述

5:如果以上條件都符合了, 點擊下方鏈接獲取有xrp的賬戶,可以開發了.

鏈接: xrp獲取測試賬號:https://xrpl.org/xrp-test-net-faucet.html

補充一句: 如果按照上面整體走下來,網絡不可用, 可以選擇不開啓驗證 直接從第三步轉到第十一步

等待更新,開發功能文檔ing

golang 對接jsonRPC 文檔 已開發,請點擊鏈接查看

https://blog.csdn.net/Little_Ji/article/details/95168053

2、ubuntu部署

  1. 安裝yum-utils和alien:

    root@coin:~$ sudo apt-get update
    root@coin:~$ sudo apt-get install yum-utils alien
  2. 安裝Ripple RPM存儲庫:

    root@coin:~$ sudo rpm -Uvh https://mirrors.ripple.com/ripple-repo-el7.rpm
    rpm: RPM should not be used directly install RPM packages, use Alien instead!
    rpm: However assuming you know what you are doing...
    Retrieving https://mirrors.ripple.com/ripple-repo-el7.rpm
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:ripple-repo-2-1.el7              ################################# [100%]
    
  3. 下載rippled軟件包:

    root@coin:~$ yumdownloader --enablerepo=ripple-stable --releasever=el7 rippled
    ripple-stable                                                                                                                                                                             | 1.4 kB     00:00     
    ripple-stable/primary                                                                                                                                                                     | 2.5 kB     00:00     
    ripple-stable                                                                                                                                                                                              12/12
    rippled-1.4.0-1.el7.x86_64.rpm                                                                                                                                                            |  12 MB     00:02     
    root@ip-10-0-3-133:~#  rpm --import https://mirrors.ripple.com/rpm/RPM-GPG-KEY-ripple-release && rpm -K rippled*.rpm
    rippled-1.4.0-1.el7.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#ccafd9a2)
  4. 驗證rippled軟件包上的簽名:

    root@coin:~$ sudo rpm --import https://mirrors.ripple.com/rpm/RPM-GPG-KEY-ripple-release && rpm -K rippled*.rpm
    rippled-1.4.0-1.el7.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#ccafd9a2) 
    
  5. 安裝rippled軟件包:

    root@coin:~$ alien -i --scripts rippled*.rpm && rm rippled*.rpm
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    warning: rippled-1.4.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID ccafd9a2: NOKEY
    	dpkg --no-force-overwrite -i rippled_1.4.0-2_amd64.deb
    Selecting previously unselected package rippled.
    (Reading database ... 663530 files and directories currently installed.)
    Preparing to unpack rippled_1.4.0-2_amd64.deb ...
    Unpacking rippled (1.4.0-2) ...
    Setting up rippled (1.4.0-2) ...
  6. rippled服務配置爲開機啓動:

    root@coin:~$ systemctl enable rippled.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/rippled.service to /usr/lib/systemd/system/rippled.service.
  7. 開啓 ripple 節點(默認是守護進程)

    root@coin:~$ systemctl start rippled.service

後續

rippled與網絡的其他部分同步需要幾分鐘的時間,在此期間,它會輸出有關缺失賬本的警告。之後,您將擁有一個功能齊全的`stock server,可以使用該服務器進行本地簽名並訪問XRP賬本的API。

版本更新(ubuntu)

sudo rpm -Uvh --replacepkgs https://mirrors.ripple.com/ripple-repo-el7.rpm
yumdownloader --enablerepo=ripple-stable --releasever=el7 rippled
rpm -K rippled*.rpm
sudo alien -i --scripts rippled*.rpm
sudo systemctl daemon-reload
sudo service rippled restart

一. 以Stock Server模型運行

在何種情況下運行此模式

大多數原因時:可以信任自己的服務器(節點),可以控制其工作負載,並且不會受其他人的支配來決定何時以及如何訪問它. 當然,必須考慮器安全性,以保護服務器免受惡意黑客攻擊。

需要信任正在使用的rippled 節點。如果連接到惡意節點,很可能導致損失資金。例如:

  • 惡意的幾點可能會給你播報錯誤的信息: 在未付款時已付款
  • 可以有選擇地顯示或隱藏支付路徑和貨幣兌換優惠,以保證他們自己(攻擊者)的利潤,同時不爲你提供最優惠的價格。
  • 如果發送了地址的密鑰(secert),它可能會被劫持, 從而代表你進行任意交易,甚至轉移或銷燬地址所持有的所有資金。

此外,運行自己的節點可自己管理控制,以便執行重要的僅限管理員的操作指令。如果使用其他共享服務器,則必須擔心同一服務器的其他用戶與您競爭服務器的計算能力。 WebSocket API中的許多命令會給服務器帶來很大壓力, 因此,rippled 可以選擇在需要時縮減其響應。如果使用共享節點,則可能無法始終獲得最佳結果。

最後,如果運行validator 節點,則可以使用庫存服務器作爲公共網絡的代理,同時將validator 服務器保留在私有子網上,使其只能通過庫存服務器與外界通信。

二 .以 Validator模式運行

在何種情況下運行此模式

作爲共識節點運行rippled 服務, 不僅可以進行正常p2p節點還參與交易的校驗功能

  1. rippled 服務器啓動驗證功能

    首先,您的服務器是一個不受信任的驗證器。其他人可以看到您的服務器問題的驗證,但是他們在協商一致的過程中忽略了這些問題。

  2. 共享公鑰,特別是其他受影響的操作人員。

  3. 當其他信任的節點將您的公鑰添加到它們的受信任服務器列表中時,您就成爲了受信任的validator。

    參考 Properties of a Good Validator

ripple集羣服務器設置

爲何要搭建集羣服務器

  • rippled集羣服務器共享加密的工作。如果一個服務器驗證了消息的真實性,集羣中的其他服務器也會信任它,不會再次驗證。
  • 集羣服務器共享關於節點和API客戶端行爲不當或濫用網絡, 這使得同時攻擊集羣中的所有服務器變得更加困難
  • 集羣服務器總是在集羣中傳播事務, 即使對其中一些交易不滿足當前基於負載的交易費用。

如果運行一個validator的作爲私有節點,建議使用集羣服務器作爲代理服務器。

部署集羣

配置集羣

  1. 對於每個服務器,請注意服務器的IP地址。

  2. 對於每個服務器,使用validation_create方法生成惟一的種子。

    例如,使用命令行接口:

    $ rippled validation_create
    Loading: "/etc/rippled.cfg"
    Connecting to 127.0.0.1:5005
    {
       "result" : {
          "status" : "success",
          "validation_key" : "FAWN JAVA JADE HEAL VARY HER REEL SHAW GAIL ARCH BEN IRMA",
          "validation_public_key" : "n9Mxf6qD4J55XeLSCEpqaePW4GjoCR5U1ZeGZGJUCNe3bQa4yQbG",
          "validation_seed" : "ssZkdwURFMBXenJPbrpE14b6noJSu"
       }
    }

    將每個響應的validation_seedvalidation_public_key參數保存在安全的地方。

  3. 在每個服務器上,編輯配置rippled.cfg文件,修改以下部分

    1. [ips_fixed]部分中,列出集羣中每個成員的IP地址和端口。對於這些服務器,端口號應該匹配來自該服務器的 rippled.cfg.的protocol = peer端口(通常是51235)。例如

      [ips_fixed]
      192.168.0.1 51235
      192.168.0.2 51235

      這定義了特定的節點服務器,該服務器應該始終試圖維護p2p連接。

    2. [node_seed]部分中,將服務器的節點種子設置爲第2步中使用validation_create方法生成的validation_seed值之一。每個服務器必須使用唯一的節點種子。例如:

      [node_seed]
      ssZkdwURFMBXenJPbrpE14b6noJSu

      這定義了服務器用於簽名p2p通信(不包括驗證消息)的密鑰對。

    3. [cluster_nodes]部分中,設置服務器集羣的成員,這些成員由它們的validation_public_key值標識。每個服務器都應該列出集羣中所有其他成員的公鑰。還可以爲每個服務器添加自定義名稱。例如:

      [cluster_nodes]
      n9McNsnzzXQPbg96PEUrrQ6z3wrvgtU4M7c97tncMpSoDzaQvPar keynes
      n94UE1ukbq6pfZY9j54sv2A1UrEeHZXLbns3xK5CzU9NbNREytaa friedman

      這定義了服務器用來識別集羣成員的密鑰對

    4. 保存配置文件(rippled.cfg)後,在每個服務器上重新啓動。

      $ systemctl restart rippled
    5. 要確認每個服務器現在都是集羣的成員,使用[peers method]。集羣字段應該列出每個服務器的公鑰和(如果配置了)自定義名稱。

      例如,使用命令行接口

      $ rippled peers
      
      Loading: "/etc/opt/ripple/rippled.cfg"
      2020-Mar-27 10:01:41.141232835 HTTPClient:NFO Connecting to 127.0.0.1:5005
      
      {
         "result" : {
            "cluster" : {},
            "peers" : [
               {
                  "address" : "136.243.94.204:51235",
                  "complete_ledgers" : "54375063 - 54377063",
                  "latency" : 356,
                  "ledger" : "EE8C08D806E821AFED56FE87050EAA703F23486A4A0036EEA133BD19278BA5E6",
                  "load" : 296,
                  "metrics" : {
                     "avg_bps_recv" : "19096",
                     "avg_bps_sent" : "19140",
                     "total_bytes_recv" : "20043838",
                     "total_bytes_sent" : "5363999"
                  },
                  "public_key" : "n9KAMwoY5QWaqr5QEFVGHxwpnbKrcrgjACcrTMdJEjoSZt9oEBVg",
                  "uptime" : 296,
                  "version" : "rippled-1.4.0"
               },
               {
                  "address" : "169.55.164.30:51235",
                  "complete_ledgers" : "32570 - 54377063",
                  "latency" : 361,
                  "ledger" : "EE8C08D806E821AFED56FE87050EAA703F23486A4A0036EEA133BD19278BA5E6",
                  "load" : 294,
                  "metrics" : {
                     "avg_bps_recv" : "21068",
                     "avg_bps_sent" : "19076",
                     "total_bytes_recv" : "12123924",
                     "total_bytes_sent" : "5995038"
                  },
                  "public_key" : "n9LbkoB9ReSbaA9SGL317fm6CvjLcFG8hGoierLYfwiCDsEXHcP3",
                  "uptime" : 409,
                  "version" : "rippled-1.4.0"
               },
               {
                  "address" : "54.86.175.122:51235",
                  "complete_ledgers" : "54376038 - 54377062",
                  "latency" : 421,
                  "ledger" : "EE8C08D806E821AFED56FE87050EAA703F23486A4A0036EEA133BD19278BA5E6",
                  "load" : 268,
                  "metrics" : {
                     "avg_bps_recv" : "19392",
                     "avg_bps_sent" : "18894",
                     "total_bytes_recv" : "20180836",
                     "total_bytes_sent" : "5946849"
                  },
                  "public_key" : "n94rE1SydpHTvJ4NyX9vC1cdeDmYP5nQSXTyeMnLh8jMJSRdcy9Q",
                  "uptime" : 409,
                  "version" : "rippled-1.4.0"
               },
               {
                  "address" : "[::ffff:184.173.45.36]:51235",
                  "complete_ledgers" : "54376807 - 54377063",
                  "latency" : 335,
                  "ledger" : "EE8C08D806E821AFED56FE87050EAA703F23486A4A0036EEA133BD19278BA5E6",
                  "load" : 320,
                  "metrics" : {
                     "avg_bps_recv" : "21675",
                     "avg_bps_sent" : "18884",
                     "total_bytes_recv" : "16532975",
                     "total_bytes_sent" : "5941722"
                  },
                  "public_key" : "n9LwVv4w65bw5cHm2UriGnnfj6Y1jfERXTmj3cVfVJDz2vbwEjLD",
                  "uptime" : 409,
                  "version" : "rippled-1.4.0"
               },
               {
                  "address" : "[::ffff:198.13.58.221]:51235",
                  "complete_ledgers" : "54376935 - 54377063",
                  "latency" : 140,
                  "ledger" : "EE8C08D806E821AFED56FE87050EAA703F23486A4A0036EEA133BD19278BA5E6",
                  "load" : 353,
                  "metrics" : {
                     "avg_bps_recv" : "66356",
                     "avg_bps_sent" : "20338",
                     "total_bytes_recv" : "62865143",
                     "total_bytes_sent" : "8495426"
                  },
                  "public_key" : "n9LyrCy2rpm6qBMY2ugJbFQr45LTJphJrkKiRUf2gkDL4Cxx1tXU",
                  "uptime" : 410,
                  "version" : "rippled-1.4.0"
               },
               {
                  "address" : "[::ffff:3.216.68.48]:51235",
                  "complete_ledgers" : "54357063 - 54377063",
                  "latency" : 307,
                  "ledger" : "EE8C08D806E821AFED56FE87050EAA703F23486A4A0036EEA133BD19278BA5E6",
                  "load" : 355,
                  "metrics" : {
                     "avg_bps_recv" : "22358",
                     "avg_bps_sent" : "17001",
                     "total_bytes_recv" : "17727277",
                     "total_bytes_sent" : "5464431"
                  },
                  "public_key" : "n9JewiDJszSGRWdb4HenbzPuAGVe2W7LFSr3DZn2vEKDHmQ6cTV4",
                  "uptime" : 409,
                  "version" : "rippled-1.4.0"
               },
               {
                  "address" : "[::ffff:185.132.133.11]:51235",
                  "complete_ledgers" : "54376327 - 54377063",
                  "latency" : 253,
                  "ledger" : "EE8C08D806E821AFED56FE87050EAA703F23486A4A0036EEA133BD19278BA5E6",
                  "load" : 344,
                  "metrics" : {
                     "avg_bps_recv" : "54110",
                     "avg_bps_sent" : "13661",
                     "total_bytes_recv" : "46922490",
                     "total_bytes_sent" : "4290330"
                  },
                  "public_key" : "n9LSFqs7AW3acBEqpA67bm5S8FnKspKUw9mDV94wyRSBiBgdempW",
                  "uptime" : 409,
                  "version" : "rippled-1.4.0"
               },
               {
                  "address" : "[::ffff:169.54.137.7]:51235",
                  "complete_ledgers" : "54376807 - 54377063",
                  "latency" : 254,
                  "ledger" : "EE8C08D806E821AFED56FE87050EAA703F23486A4A0036EEA133BD19278BA5E6",
                  "load" : 374,
                  "metrics" : {
                     "avg_bps_recv" : "25744",
                     "avg_bps_sent" : "17162",
                     "total_bytes_recv" : "28793217",
                     "total_bytes_sent" : "5482770"
                  },
                  "public_key" : "n9Mdk7abYaVvded5zic9oDEY3NULv9RmeJ9Z5hgjXX1ycZqAGhTn",
                  "uptime" : 409,
                  "version" : "rippled-1.5.0-rc3"
               },
               {
                  "address" : "[::ffff:198.11.206.6]:51235",
                  "complete_ledgers" : "54376807 - 54377063",
                  "latency" : 265,
                  "ledger" : "EE8C08D806E821AFED56FE87050EAA703F23486A4A0036EEA133BD19278BA5E6",
                  "load" : 392,
                  "metrics" : {
                     "avg_bps_recv" : "30847",
                     "avg_bps_sent" : "16712",
                     "total_bytes_recv" : "15152452",
                     "total_bytes_sent" : "5375211"
                  },
                  "public_key" : "n9MGChK9EgiCBM6s15EwF9d6m4LWZHh1UnJcgr16kQr4xBpx71fS",
                  "uptime" : 409,
                  "version" : "rippled-1.5.0-rc3"
               },
               {
                  "address" : "198.11.206.26:51235",
                  "complete_ledgers" : "54376807 - 54377063",
                  "latency" : 257,
                  "ledger" : "EE8C08D806E821AFED56FE87050EAA703F23486A4A0036EEA133BD19278BA5E6",
                  "load" : 393,
                  "metrics" : {
                     "avg_bps_recv" : "27851",
                     "avg_bps_sent" : "17539",
                     "total_bytes_recv" : "15613529",
                     "total_bytes_sent" : "5598772"
                  },
                  "public_key" : "n9LieQkojpM1wsqman9d8jxVXrLxRh8RAmwv5rDvC5ea3kxnEVUn",
                  "uptime" : 409,
                  "version" : "rippled-1.5.0-rc3"
               }
            ],
            "status" : "success"
         }
      }
      

生產服務器搭建

爲了防止生產validator服務器受DDoS攻擊,可以使用stock rippled server服務器作爲代理使validator和外部網絡之間進行通信。

  1. 設置 rippled validator. 參考上文
  2. 設置一個或多個 stock ripped servers
  3. 配置validator 和服務器,並將分散的服務器彼此集羣。
  4. 更改以下配置
    ? - 複製[ips_fixed]列表並將其粘貼到[ips]下。這些字段應該只包含公共的ripple的IP地址和端口。validator 服務器只連接到這些p2p節點。
    ? - 將[peer_private]更改爲1,以防止其他IP地址被轉發

    1. 配置validator主機的防火牆,使其僅接受來自其公共節點的入站連接。
    2. 重啓rippled 服務器,使配置生效

域驗證

網絡參與者不太可能在不知道誰在操作validator的情況下信任validator。爲了解決這個問題,validator節點可以將它們的server與它們控制的web域關聯起來。

  1. 通過在validator server上運行以下命令來找到您的validator公鑰:

    $ $HOME/opt/ripple/bin/rippled server_info -q | grep pubkey_validator
  2. 使用用於域的SSL私鑰對pubkey_validator(來自步驟1)進行簽名。SSL私鑰文件不需要存儲在驗證器服務器上。

    openssl dgst -sha256 -hex -sign /path/to/your/ssl.key <(echo <your-validator-public-key>)
  3. 使用validator-keys tool(包含在ripple的RPM中),對域名進行簽名

    $ $HOME/opt/ripple/bin/validator-keys --keyfile /path/to/your/validator-keys.json sign <your-domain-name>
  4. 要驗證validator 域,可在XRP_charts上查看, 將此谷歌表單(Google Form)與驗證器的信息一起提交。

測試服務器搭建

Ripple創建了XRP測試網絡,爲XRP分類賬提供了一個測試平臺。XRP測試基金不是真正的基金,只用於測試。在連接到正式XRP分類帳網絡之前,可以將rippled server連接到XRP測試網絡,以測試並理解rippled的功能。還可以使用XRP測試網絡來驗證您自己的代碼是否正確地與ripple交互。

爲了rippled 服務器連接到XRP測試網絡,更改以下配置 rippled.cfg:

  1. 在本地配置文件 rippled.cfg

    a. 打開如下配置

    [ips]
    r.altnet.rippletest.net 51235

    b. 註釋掉以下配置

    # [ips]
    # r.ripple.com 51235
  2. 在本地 validators.txt (與rippled.cfg文件同目錄) 做如下更改

    a. 打開如下配置

    b. 註釋掉以下配置

    # [validator_list_sites]
    # https://vl.ripple.com
    #
    # [validator_list_keys]
    # ED2677ABFFD1B33AC6FBC3062B71F1E8397C1505E1C42C64D11AD1B28FF73F4734     
  3. 重啓 rippled server

  4. 驗證rippled是否連接到XRP測試網絡 :

    在服務器上使用server_info方法,並將其與來自測試網絡上的公共服務器的結果進行比較。validated_ledger對象的seq字段在兩臺服務器上應該是相同的(如果它在您檢查時發生了更改,可能會關閉一到兩臺服務器)

    • 以下命令檢查測試網絡服務器(s.altnet.rippletest.net:)的最新驗證分類賬

      $ ./rippled --rpc_ip 34.210.87.206:51234 server_info | grep seq
    • 下面的命令檢查您的本地rippled server 的最新已驗證的分類賬序列:

      $ ./rippled server_info | grep seq
      Loading: "/etc/opt/ripple/rippled.cfg"
      2020-Mar-27 10:08:55.241048896 HTTPClient:NFO Connecting to 127.0.0.1:5005
      
                  "seq" : 54377176
      
      
      $ ./rippled server_info
      Loading: "/etc/opt/ripple/rippled.cfg"
      2020-Mar-27 10:07:43.941135849 HTTPClient:NFO Connecting to 127.0.0.1:5005
      
      {
         "result" : {
            "info" : {
               "build_version" : "1.4.0",
               "complete_ledgers" : "54376656-54377157",
               "hostid" : "ip-10-0-3-133",
               "io_latency_ms" : 1,
               "jq_trans_overflow" : "0",
               "last_close" : {
                  "converge_time_s" : 3,
                  "proposers" : 35
               },
               "load" : {
                  "job_types" : [
                     {
                        "job_type" : "untrustedProposal",
                        "per_second" : 39
                     },
                     {
                        "avg_time" : 2,
                        "job_type" : "ledgerData",
                        "peak_time" : 56,
                        "per_second" : 2
                     },
                     {
                        "in_progress" : 1,
                        "job_type" : "clientCommand",
                        "per_second" : 12
                     },
                     {
                        "job_type" : "transaction",
                        "per_second" : 14
                     },
                     {
                        "job_type" : "batch",
                        "peak_time" : 2,
                        "per_second" : 10
                     },
                     {
                        "job_type" : "advanceLedger",
                        "peak_time" : 16,
                        "per_second" : 4
                     },
                     {
                        "job_type" : "fetchTxnData",
                        "per_second" : 9
                     },
                     {
                        "job_type" : "trustedValidation",
                        "peak_time" : 2,
                        "per_second" : 6
                     },
                     {
                        "job_type" : "writeObjects",
                        "per_second" : 17
                     },
                     {
                        "job_type" : "trustedProposal",
                        "per_second" : 12
                     },
                     {
                        "job_type" : "peerCommand",
                        "per_second" : 781
                     },
                     {
                        "job_type" : "processTransaction",
                        "per_second" : 14
                     },
                     {
                        "job_type" : "SyncReadNode",
                        "per_second" : 278
                     },
                     {
                        "job_type" : "AsyncReadNode",
                        "per_second" : 824
                     },
                     {
                        "job_type" : "WriteNode",
                        "per_second" : 243
                     }
                  ],
                  "threads" : 6
               },
               "load_factor" : 612.35546875,
               "load_factor_fee_escalation" : 612.35546875,
               "load_factor_server" : 1,
               "peer_disconnects" : "1",
               "peer_disconnects_resources" : "0",
               "peers" : 10,
               "pubkey_node" : "n9MJsZfQRCY3C4hGQMr64sEXaraW8TSfmvpwgcva5QFd7yRg6M1r",
               "pubkey_validator" : "none",
               "server_state" : "full",
               "server_state_duration_us" : "621268444",
               "state_accounting" : {
                  "connected" : {
                     "duration_us" : "141065904",
                     "transitions" : 1
                  },
                  "disconnected" : {
                     "duration_us" : "2141541",
                     "transitions" : 1
                  },
                  "full" : {
                     "duration_us" : "621268444",
                     "transitions" : 1
                  },
                  "syncing" : {
                     "duration_us" : "10097438",
                     "transitions" : 1
                  },
                  "tracking" : {
                     "duration_us" : "0",
                     "transitions" : 1
                  }
               },
               "time" : "2020-Mar-27 10:07:43.941546",
               "uptime" : 774,
               "validated_ledger" : {
                  "age" : 3,
                  "base_fee_xrp" : 1e-05,
                  "hash" : "6F46D48E153FEEC22FD64DD8774BF8D7C8D8161B9FF95771BCE0AA83E1DD25BA",
                  "reserve_base_xrp" : 20,
                  "reserve_inc_xrp" : 5,
                  "seq" : 54377157
               },
               "validation_quorum" : 28,
               "validator_list" : {
                  "count" : 1,
                  "expiration" : "2020-Apr-10 00:00:00.000000000",
                  "status" : "active"
               }
            },
            "status" : "success"
         }
      }
      

配置歷史區塊數據

History Sharding讓服務器可以保存歷史XRP賬本數據,而無需每個服務器存儲完整的歷史。默認情況下,rippled server 不存儲歷史碎片(區塊)。

※ 雖然validator 和stock rippled 服務器都可以配置爲存儲歷史區塊,但是Ripple建議不要將 validator ripplerd server配置爲存儲,以減少服務器上的開銷。如果運行一個validator並希望存儲XRP分類帳歷史記錄,Ripple建議單獨運行一個rippled server 用來存儲區塊。

設置存儲區塊歷史, 按以下步驟

  1. 明確爲區塊存儲分配多少空間

    爲更好的分配空間, 參考如下幾點

    • 賬本存儲(由[node_db]定義)與區塊存儲是分開的。所有服務器都需要賬本存儲,並且必須包含一系列最近的歷史記錄,由online_delete參數中保持可用的賬本數量定義。(默認配置存儲最近的2000份賬簿)
    • 如果在賬本存儲中至少保留了2 ^ 15個分類帳(32768份),則可以高效的將分類帳中最近歷史記錄的塊導入到區塊中.
    • 歷史區塊存儲(由[shard_db]定義)僅用於存儲歷史區塊。不用做stock server省略配置。s區塊存儲的大小在max_size_gb參數中以GB爲單位定義; 服務器會試圖使用盡可能多的空間來存儲完整的區塊.
    • 一個由2 ^ 14分類帳本(16384份)組成的的區塊約佔200 MB到4 GB的空間。越舊的區塊所佔的空間越小,因爲當時賬本中交易量越少。
    • 區塊和帳本存儲必須存儲在不同的文件路徑中。如果需要,可以將賬本和區塊配置爲位於不同的磁盤或分區上。
    • 保存完整的賬本歷史紀錄和分片(區塊)是可以的,但是真的是多餘的.
    • 獲取區塊(分片)的時間的長短, rippled server 所需的文件句柄的數量以及內存緩存的使用直接受切片大小的影響。
  2. 修改 rippled.cfg

    打開配置文件 cd $HOME/.local/ripple/rippled.cfg 修改如下

    [shard_db]
    type=NuDB
    path=/var/lib/rippled/db/shards/nudb  # 切片存儲路徑
    max_size_gb=50      # 單位是GB

    提示:Ripple建議對碎片存儲使用NuDB(類型=NuDB)。與RocksDB相比,NuDB在每個碎片上使用的文件句柄更少。RocksDB使用的內存與存儲的數據大小成比例,這可能需要過多的內存開銷。然而,NuDB被設計用於SSD驅動器,不能與機械磁盤一起工作。

  3. 重啓服務

    systemctl restart rippled
  4. 等待下載分片數據

    當服務器通過網絡同步後, 會自動下載歷史分片數據

啓用公共簽名

默認情況下, rippled 的簽名方法被限制使用與管理連接, 如果你想允許 簽名方法被用於 公共API 方法( rippled version v1.1.0 以前), 你可以通過配置來啓用他.

如果你的服務器接受他們, 這使得以下方法可以公用

  • sign (簽名方法)

    • 默認情況下,此方法僅適用於管理員。如果服務器啓用了公共簽名,則可以將其用作公共方法。

    • 注意: 除非本人操作ripple server,否則您應該使用local signing with RippleAPI 來進行簽名,而不是使用這個命令。非可信的節點可以在簽署之前更改交易,或者使用您的密鑰簽署其他任意交易,造成虛假簽名.

    • 格式如下:

      {
        "id": 2,
        "command": "sign",
        "tx_json" : {
            "TransactionType" : "Payment",
            "Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
            "Destination" : "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
            "Amount" : {
               "currency" : "USD",
               "value" : "1",
               "issuer" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn"
            }
         },
         "secret" : "s████████████████████████████",
         "offline": false,
         "fee_mult_max": 1000
      }
  • sign_for ( 多簽名交易的簽名)

  • submit

    • submit方法申請一筆交易並將其發送到網絡以進行確認(打包)幷包含在將來的分類帳本中
    • 有兩種模式
      • submit-only(只提交)模式, 接受一個已簽名和序列化成二進制的交易 ,並提交到網絡中,由於簽名的事務對象是不可變的,因此在提交後不能修改或自動填寫事務的任何部分。
      • Sign-and-submit(簽名並提交), 接受一個 JSON格式的交易對象,以與 sign method,相同的方式完成和簽署事務, 然後提交簽名的交易。我們建議只在測試和開發中使用此模式

如果你是管理元連接的該ripple節點, 無需啓用 公共簽名

? : Ripple不建議啓用公共簽名。與wallet_proposal_method一樣,簽名命令不執行需要管理級權限的任何操作,但是將它們限制爲管理連接可以防止用戶通過不安全的通信或不受控制的服務器不負責任地發送或接收密鑰。

啓用步驟如下

  1. 編輯rippled.cfg

    vim $HOME/etc/opt/ripple/rippled.cfg
  2. 添加如下配置

      [signing_support]
       true
  3. 重啓rippled 服務(節點)

    systemctl restart rippled

三. 以獨立模式(stand-alone)模式運行

在沒有受信任共識服務器的情況下,可以在獨立模式下運行rippled 節點 。 在獨立模式下,rippled不與XRP Ledger其他任何p2p服務器通信,所以只能在本地服務器上執行大多數相同的操作。此模式 獨立提供了一種測試rippled行爲的方法,而不依賴於實時網絡。 例如 ,可以測試在Amendments進入區中心網絡之前來測試其效果。

在獨立模式下,rippled 不會區分“已關閉”分類帳版本和“已驗證”分類帳版本

在運行該模式之前,必須明確指出從哪個版本的賬本開始的:

如下兩種 :

  1. 從頭開始 --- 通過創建創世節點(賬本) genesis ledger
  2. 從本地已有賬本開始

以創世節點運行

要使用一個新的genesis分類賬以獨立模式啓動rippled,使用-a-start選項:

rippled -a --start --conf=/path/to/rippled.cfg  # a 表示alone

更多啓動參數,參考 命令行使用手冊 :Commandline Usage: Stand-Alone Mode Options.

在一個創世分類賬本中,傳世地址擁有全部1000億XRP。創世地址的關鍵字硬編碼如下:

  • 地址: rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh
  • 密鑰: snoPBrXtMeMyMHUVTgbuqAfg1SUTb ("masterpassphrase")

設置 Genesis Ledger

默認情況下,一個新的新的創世賬本未啓用Amendment`。如果使用`--start`參數啓動一個新的創世賬本,那麼創世總賬包含一個`EnableAmendment僞交易來啓用該節點的 Amendment, 除了在配置文件中明確禁用 Amendment。 (提醒:在獨立模式下,必須手動推進分類帳advance the ledger manually。)

從已知賬本運行

如果rippled server 先前已與XRP Ledger的p2p網絡(生產網絡或測試網絡)同步,則可以從存儲於磁盤的分類帳版本開始 .

步驟如下

  1. 正常啓動 rippled (檢索賬本)

    rippled --conf=/path/to/rippled.cfg
  2. 等待 同步完成

    使用server_info方法檢查檢查節點相關的狀態。當server_state值顯示以下任何值時,將同步您的服務器:

    • full
    • proposing
    • validating
  3. 檢索特定的賬本版本 (可選)

    • 如果只想要最新的分類帳,則可以跳過此步驟。
    • 如果想加載一個特定的歷史分類帳版本,請使用ledger_request方法進行提取ripple。如果ripple還沒有分類賬版本,可能必須多次運行ledger_request命令,直到它完成檢索分類賬爲止。
    • 如果想重放一個特定的歷史分類帳版本,必須同時獲取要重放的分類帳版本和重放之前的分類帳版本。(以前的分類賬版本設置了初始狀態,在此基礎上應用您重播的分類賬版本所描述的更改。)
  4. 關閉rippled 節點

    使用 stop方法

    rippled stop --conf=/path/to/rippled.cfg
  5. 以獨立模式啓動rippled 節點

    使用-a--load選項啓動服務器(默認爲最新賬本):

    rippled -a --load --conf=/path/to/rippled.cfg

    要加載特定的歷史賬本,使用--load--ledger參數啓動服務器,提供分類帳索引或標識要加載的分類帳版本的哈希值

    rippled -a --load --ledger 19860944 --conf=/path/to/rippled.cfg
  6. 手動跟進賬本

    在獨立模式下使用--ledger加載分類帳時,它將轉到當前的分類帳,因此必須手動跟進分類帳本

    rippled ledger_accept --conf=/path/to/rippled.cfg

四.命令行詳解

可用模式

  • (Daemon Mode)守護程序模式 - 默認值。連接到XRP Ledger以處理交易並構建賬本數據庫。
  • Daemon Mode(獨立模式) - 使用-a--standalone選項。與守護進程模式一樣,除了它不連接到其他節點。可以使用此模式測試交易處理或其他功能。
  • Client Mode (客戶端模式) -- 通過API接口的方法連接到又存在的Rippled節點, 作爲一個JSON-RPC客戶端, 請求完之後就退出 。可以使用此模式來檢查節點狀態和賬本的數據。
  • Other Usage(其他的用法) --- 以下每個命令都會使rippled 可執行文件打印一些信息,然後退出:
    • 幫助信息 -- 使用 -h 或者 --help , 輸出幫助信息
    • 單元測試 --- 使用-u 或者使用--unittest 運行單元測試, 有助於確認節點是否成功的進行編譯.
    • 版本申明 --- 使用 --version ,輸出 rippled 的版本信息, 然後退出.

通用指令

此指令適用於大多數的節點模式

--conf( 配置文件路徑) --- 如果未指定,則rippled首先檢查本地工作目錄中的rippled.cfg(Uinx 默認再/opt/ripple/etc/rippled.cfg)文件。

可選參數

以下通用參數會影響控制太輸出和日誌文件的存儲

指令 簡寫 說明
--debug   (棄用)啓用跟蹤級調試,, 使用log_level method 替代
--silent   啓動時日誌不輸出, 建議在啓動rippled 作爲systemd單元時減少多餘的日誌
--verbose -v 棄用. 使用log_level方法替代

守護進程模式指令

rippled [OPTIONS]

默認啓動模式。除了通用指令,還可以提供以下任何選項

選項 說明
--fg 將守護程序作爲的單個進程運行。否則,在第一個進程作爲監視器運行時,rippled會爲守護進程分叉第二個進程。
--import 在完全啓動之前,從另一個節點的賬本中導入賬本數據。在rippled.cfg中需要有效的[import_db]字段.
--nodetoshard 在完全啓動之前,將任何完整的歷史記錄分片從賬本的存儲區複製到分片存儲區,直到分片存儲區配置的最大磁盤空間 , 會佔用大量的CPU 和 I/O , 警告:此命令是複製數據(而不是移動數據),因此必須有足夠的磁盤空間來存儲分片存儲區和賬本的數據。
--quorum 此選項適用於測試網絡 , 通過要求{QUORUM}可信驗證者的協議,覆蓋最低法定數量以進行驗證。默認情況下,驗證的仲裁將根據有多少個值自動設置爲安全數量的可信驗證器。如果對共識有深刻理解並且需要使用非標準配置,請僅使用此選項。
-- validateShards 查分片存儲中的數據是否有效並與網絡歷史記錄一致。有關分片存儲的更多信息History Sharding

獨立模式指令

rippled --standalone/-a [OPTIONS]

以獨立模式運行。在此模式下,rippled 不會連接p2p或執行共識.

初始化ledger選項

指令 說明
--ledger {LEDGER} 通過指定賬本版本來啓動, 指定的賬本版本必須存在於節點上
--ledgerfile {FILE} 從指定的文件加載賬本的版本,該版本必須包含JSON格式的完整分類帳。有關此類文件的示例,請參閱提供的ledger-file.json.。
--replay 用於調試。使用調試器,您可以添加斷點來分析特定的事務處理邏輯。
--start 用於調試。從一個新的genesis ledger時啓用。

客戶端模式

rippled [OPTIONS] -- {COMMAND} {COMMAND_PARAMETERS}

在客戶端模式下,充當一個rippled的客戶端。 (該節點可能是在本地單獨進程中運行的相同可執行文件,也可能是在遠程服務器上)

除了單獨的命令語法之外,客戶端模式還接受通用選項和以下選項:

指令 說明
--rpc 明確指定以客戶端的模式啓動
–rpc_ip{IP_ADDRESS} 明確指定連接到rippled 節點 , 選項報貨port端口

用法示例(獲取最早可用的帳戶交易歷史記錄 和 最新的可用賬本版本)

rippled -- account_tx rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh -1 -1

單元測試

rippled --unittest/-u [OPTIONS]

單元測試運行的是rippled 的源碼,以確認可執行文件按預期執行。運行單元測試後,該過程將顯示結果和退出的摘要。

如果單元測試報告失敗,則通常表示以下情況之一:

  • 編譯出錯
  • 源碼有bug
  • 單元測試代碼錯誤

單元測試的通用指令

指令 說明
--unittest-ipv6 使用IPv6連接到本地, 從版本1.1.0開始提供
--unittest-jobs {NUMBER_OF_JOBS} 使用指定數量的進程來運行單元測試。這可以在多核系統上更快地完成運行測試。
--unittest-log 即使指定了--quiet,也允許單元測試寫入日誌。
--quiet / q 即使指定了--quiet,也允許單元測試寫入日誌。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章