Ghi chép Handshake

Cài đặt fullnode blockchain Handshake

Sử dụng Docker

  • Có thể dụng dụng docker image do skywirex build sẵn ở Docker Hub

  • Tự build

### Clone source code
# git clone https://github.com/handshake-org/hsd.git
# cd hsd
### Thiết lập tham số cho image và build
# VERSION=$(cat package.json | grep version | sed 's/.*"\([0-9]*\.[0-9]*\.[0-9]*\)".*/\1/')
# COMMIT=$(git rev-parse --short HEAD)
# ARC=$(uname -m)
# docker build -t skywirex/hsd:$VERSION-$COMMIT-$ARC .
##### Đẩy image lên docker hub
# docker push skywirex/hsd:$VERSION-$COMMIT-$ARC

Truy cập domain handshake

Để truy cập website sử dụng domain handshake, có 2 cách:

  • Sử dụng những thứ có sẵn

    • Trình duyệt Beacon (khuyên dùng cách này) có thể truy cập trực tiếp domain trên Handshake
    • Cài đặt fingertip trên máy tính và sử dụng các trình duyệt ưa thích để truy cập bình thường
  • Tự cài đặt và cấu hình DNS resolver sử dụng fullnode hoặc lightnode.

light DNS resolver on Ubuntu 20 LTS

sudo apt update && sudo apt upgrade -y
sudo apt-get install build-essential
sudo apt install git
sudo apt install autotools-dev
sudo apt install automake
sudo apt install autoconf
sudo apt install libunbound-dev
sudo apt install libuv1-dev
git clone https://github.com/handshake-org/hnsd.git
./hnsd -r 127.0.0.1:5353

light DNS resolver on Alpine

  apk update \
      && apk --no-cache --update add build-base automake autoconf
  apk add git libtool unbound-dev bind-tools screen
  git clone git://github.com/handshake-org/hnsd.git
  cd hnsd
  ./autogen.sh && ./configure && make
  screen
  ./hnsd
  dig @127.0.0.1 -p 5350 proofofconcept
     ./hnsd -p 5 -r 10.0.0.17:53
  dig @10.0.0.17 -p 53 proofofconcept
  screen -r
  history

./hnsd -r 10.0.0.17:5350

Một số trang web có thể truy cập được bằng với Domain Handshake có thể tham khảo tại dns.live

http://hnssearch./
http://nb./
http://gregosuri./
http://me.turbomaze./

Chạy regtest hoặc mainnet

docker create \
  --name hsd-regtest \
  --net=host \
  -v ~/.hsd:/root/.hsd \
  --restart=unless-stopped \
skywirex/hsd:<tag> --network regtest --http-host 0.0.0.0 --api-key=api-cua-ban
curl http://x:[email protected]:14037/
$ hsd --network=regtest
$ hsw-rpc --network=regtest getnewaddress
$ hsd-rpc  --network=regtest generatetoaddress 100 $ADDRESS
docker create \
  --name hsd \
  --net=host \
  -v ~/.hsd:/root/.hsd \
  --restart=unless-stopped \
skywirex/hsd:<tag> --network main --http-host 0.0.0.0 --api-key=api-cua-ban

Test endpoint

curl http://x:[email protected]:12037/

lấy seed phrase

curl $walleturl/$id/master

{
  "encrypted": false,
  "key": {
    "xprivkey": "rprvKE8qsHtkmUxUSPm69K2HLjAnjsEecv7BModHuarmVk9gbnRwYkYufvhv2XiNVxuz7wTMW3LsVKSoVUzz5TKmaYUyHHicQp3XB1gBHfXeDzbb"
  },
  "mnemonic": {
    "bits": 256,
    "language": "english",
    "entropy": "63fff07dca91ff627a83abfedf3703834925d7bef7670c02b6c4eec63deda4e8",
    "phrase": "glue zebra buyer news cable raise tube remove yard blue science alley sky type wink undo army hottest raise say glow walnut neck aspect"
  }
}

newPass='pass-cua-ban'

curl $walleturl/$id/passphrase \
  -X POST \
  --data '{"passphrase":"'$newPass'"}'

numblocks=2;
address='rs1qkjttpwuxsj2nfflt4ak7slz8zla4q2ug8jgnff';
curl $url \
  -X POST \
  --data '{
    "method": "generatetoaddress",
    "params": [ '$numblocks', "'$address'" ]
  }'
example: 
$ hsd-rpc getnameresource coolness
{
  "records": [
    {
      "type": "GLUE4",
      "ns": "ns1.coolness.",
      "address": "23.239.11.203"
    },
    {
      "type": "GLUE4",
      "ns": "ns2.coolness.",
      "address": "66.175.216.232"
    },
    {
      "type": "GLUE4",
      "ns": "ns3.coolness.",
      "address": "139.162.52.201"
    }
  ]
}
dig @127.0.0.1 -p 5350 proofofconcept
dig @127.0.0.1 -p 5350 proofofconcept TXT +short

Import ví sử dụng seed phrase

Tạo ví với id, pass và seed

id='<newwalletname>'
passphrase='<abcxyz>'
mnemonic='<words words words...>'
curl http://x:[email protected]:12039/wallet/$id \
  -X PUT \
  --data '{"passphrase":"'$passphrase'", "mnemonic":"'$mnemonic'"}'

Kiểm tra ví sau khi import

curl http://x:[email protected]:12039/wallet/$id

Số dư ví

curl http://x:[email protected]:12039/wallet/$id/account/$account

Lúc này bạn sẽ không thấy số dư ví (nếu có số dư trên Bob)

Scan lại blockchain

height=50

curl http://x:[email protected]:12039/rescan \
  -X POST \
  --data '{"height": '$height'}'

Send coin

Thiết lập

id="primary"
passphrase="pass-cua-ban"
account='default'
rate=10000
value=1000000000
address="hs1qx8wkg90qmqls4zlcgksaw78uhvxn6y4k57kptz"
curl http://x:[email protected]:12039/wallet/$id/send \
  -X POST \
  --data '{
    "passphrase":"'$passphrase'",
    "rate":'$rate',
    "outputs":[
      {"address":"'$address'", "value":'$value'}
    ]
  }'
REGISTER
curl http://x:[email protected]:12039/wallet/bob/update \
  -X POST \
  --data '{
    "passphrase":"mypassword",
    "name":"myname",
    "broadcast":true,
    "sign":true,
    "data": {"records": []}
  }'

Sao lưu và khôi phục ví

Ngoài việc backup seed bạn còn có thể nén thư mục ví được tạo ra trong lúc chạy hsd để có thể khôi phục lại trong trường hợp cần thiết. Ví này cần phải có password mới mở được.

Để thực hiện việc sao lưu ban di chuyển đến thư mục chứa ví (thông thường là .hsd) và nén lại bằng lệnh tar

cd /root/.hsd/
tar -cvf wallet.tar ./wallet

Để khôi phục lại ví hoặc copy ví sang máy khác cần tạo tạo docker container bằng lệnh create sau đó tạo thư mục chứa blockchain và copy ví vào thư mục đó, hoặc có thể chạy và sync blochain như bình thường sau đó copy ví đè lên thư mục wallet được tạo ra khi chạy daemon hsd.

mkdir ~/.hsd
cd ~/.hsd
tar -xvf wallet.tar

Ngoài ra, bạn còn có thể backup ví theo cách như cách hướng dẫn chính thức. Ví được backup sẽ nằm ở thư mục /root/.hsd/walletdb-backup.ldb trong container hsd

path='/root/.hsd/walletdb-backup.ldb'
curl http://x:[email protected]:12039/backup?path=$path \
  -X POST

Login vào docker và kiểm tra

docker exec -ti hsd /bin/sh