-
Go version >= 1.13.0
- Install Go by following installation instructions.
- Set GOPATH environment variable (https://github.com/golang/go/wiki/SettingGOPATH)
-
Clone the project
git clone https://github.com/ndidplatform/migration-tools.git
-
SetLastBlock through NDID API path POST
/set_last_block
or/setLastBlock
for older versionsbody
{ block_height: number }
Example:
curl -vkX POST https://IP:PORT/ndid/set_last_block \ -H "Content-Type: application/json" \ -d "{\"block_height\":0}"
block_height
คือเลข Block สุดท้ายที่จะให้สามารถทำ Transaction ลง Blockchain ได้ (block_height = 0 คือ setLastBlock เท่ากับ Block ปัจจุบัน และ -1 คือ ยกเลิกการ SetLastBlock)
-
Save/Write down NDID node ID(s), master public key, and public key. These values can be queried using GET
/utility/nodes/<NDID_NODE_ID>
Example:
curl -vkX GET https://localhost:8443/utility/nodes/ndid1 \ -H "Content-Type: application/json"
-
Stop Tendermint and ABCI (
did-tendermint
) -
Backup data directories and files of the current chain (both Tendermint and ABCI data)
-
Run migration command in
migration-tools
to convert and backup data from state DB / ABCI to filesExample:
cd migration-tools TM_HOME=/home/support/ndid/ndid/tendermint/ \ ABCI_DB_DIR_PATH=/home/support/ndid/ndid/data/ndid/abci/ \ go run main.go convert-and-backup 6 7
or run with C lib support for LevelDB (in case DB to backup uses cleveldb):
TM_HOME=/home/support/ndid/ndid/tendermint/ \ ABCI_DB_DIR_PATH=/home/support/ndid/ndid/data/ndid/abci/ \ CGO_ENABLED=1 CGO_LDFLAGS="-lsnappy" go run -tags "cleveldb" main.go convert-and-backup 6 7
TM_HOME
คือ Home directory ของ TendermintABCI_DB_DIR_PATH
คือ Directory state DB ของ ABCI
-
(Optional) Remove all service containers (Tendermint-ABCI
did-tendermint
, API, and redis)Example:
docker-compose down
-
Reset blockchain data
Example (using docker compose):
docker-compose run --rm tm-abci unsafe_reset_all
-
Remove ABCI data / stateDB
Example:
rm -rf /path/to/abci/data/directory/abci/didDB.db
-
(Optional) Remove/clear API service's redis cache
-
Pull new docker image version
-
เอา
config.toml
และgenesis.json
อันใหม่ไปวางใน directoryconfig
ที่ Tendermint home directory -
แก้
TM_P2P_PORT
ของ tendermint ใน.env
file เพื่อไม่ให้ node อื่นต่อเข้ามาได้ระหว่าง restore -
เปิด docker container เฉพาะของ ABCI ขึ้นมาเพื่อจะทำการ restore
-
Copy
master private key
ของ NDID ไปวางไว้ที่$GOPATH/src/github.com/ndidplatform/migration-tools/key/
ตั้งชื่อไฟล์ว่าndid_master
และ Copyprivate key
ของ NDID ไปวางไว้ที่$GOPATH/src/github.com/ndidplatform/migration-tools/key/
ตั้งชื่อไฟล์ว่าndid
(ถ้าใช้ external key service เช่น HSM ให้ใช้ key ใดๆก่อนก็ได้ แล้วสั่งเปลี่ยน public key หลัง restore สำเร็จ) -
Run script จาก
migration-tools
เพื่อ restore ข้อมูลExample:
cd migration-tools NDID_NODE_ID=<NDID_NODE_ID> \ TENDERMINT_RPC_HOST=localhost \ TENDERMINT_RPC_PORT=26000 \ BACKUP_DATA_DIR=<PATH_TO_BACKUP_DIRECTORY> \ go run main.go restore 7
NDID_NODE_ID
คือ ชื่อ node_id ของ NDID ที่จะใช้ initialize/registerTENDERMINT_RPC_HOST
คือ Tendermint RPC hostTENDERMINT_RPC_PORT
คือ Tendermint RPC portBACKUP_DATA_DIR
คือ directory ที่มีข้อมูลที่ convert แล้วเป็น JSON อยู่ในรูปแบบ text file
-
หลังจาก restore เสร็จเรียบร้อยแล้ว stop docker container ของ ABCI (
did-tendermint
) -
แก้
TM_P2P_PORT
ของ tendermint ใน.env
file คืนค่าเดิม เพื่อให้ node อื่น ๆ สามารถต่อเข้ามาได้ -
Start docker containers (Tendermint-ABCI
did-tendermint
, API, and redis)Example:
docker-compose up
-
(Optional) Set NDID node master public key and public key
Example:
cd migration-tools
NDID_NODE_ID=<NDID_NODE_ID> \
TENDERMINT_RPC_HOST=localhost \
TENDERMINT_RPC_PORT=26000 \
NODE_NEW_MASTER_PUBLIC_KEY_FILEPATH=<PATH_TO_NODE_NEW_MASTER_PUBLIC_KEY_FILE> \
NODE_NEW_PUBLIC_KEY_FILEPATH=<PATH_TO_NODE_NEW_PUBLIC_KEY_FILE> \
go run main.go update-node 7