-
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 create initial ABCI state data for another version from current version 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 create-initial-state-data 8 9
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 create-initial-state-data 8 9
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 -
Start Tendermint/ABCI (
did-tendermint
) (docker container) with environment variableABCI_INITIAL_STATE_DIR_PATH
points to directory generated in step 4 of "Create initial ABCI state data" to load initial state onInitChain
. Then, wait for Tendermint to finish chain initialization and block 1 is created. -
Copy
master private key
ของ NDID ไปวางไว้ที่./dev_keys/
(หรือ directory path อื่นตาม environment variableKEY_DIR
ที่กำหนด) ตั้งชื่อไฟล์ว่าndid_master
และ Copyprivate key
ของ NDID ไปวางไว้ที่./dev_keys/
(หรือ directory path อื่นตาม environment variableKEY_DIR
ที่กำหนด) ตั้งชื่อไฟล์ว่าndid
(ถ้าใช้ external key service เช่น HSM ให้ใช้ key ใดๆก่อนก็ได้ แล้วสั่งเปลี่ยน public key หลัง restore สำเร็จ) -
Run
InitNDID
andEndInit
.NDID_NODE_ID=<NDID_NODE_ID> \ TENDERMINT_RPC_HOST=localhost \ TENDERMINT_RPC_PORT=26000 \ INITIAL_STATE_DATA_DIR=<PATH_TO_INITIAL_STATE_DATA_DIRECTORY> \ go run main.go init-ndid 7
NDID_NODE_ID=<NDID_NODE_ID> \ TENDERMINT_RPC_HOST=localhost \ TENDERMINT_RPC_PORT=26000 \ go run main.go end-init 7
-
หลังจาก 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