Làm chủ hệ điều hành linux

Nguyễn Quang Minh

19 min read
38 views

Tài nguyên chuẩn bị

●     Xem clip kiến thức cơ bản blockchain defi … từ Chuyên gia, Tiến sĩ Việt. Cố gắng theo thứ tự đã đánh số: https://dathoc.net/bbc

●     Ebook: https://dathoc.net/bookbc

●     Máy tính nên có ít nhất 4 lõi cpu, ram nên là từ 8GB ram, free hdd 70gb, để tạo máy ảo ubuntu (2gb ram, 60gb hdd)

●     Cài oracle vbox

//using Oracle Vbox version 64bit (https://www.virtualbox.org/wiki/Downloads )

//tải iso Ubuntu OS Server (không phải desktop) - 16.x hoac 18.x (https://ubuntu.com/download/server/step2 )

//CÓ 2 CÁCH SETUP

// 1. Xem clip setup Ubuntu: https://www.youtube.com/watch?v=2mjX-tVcGeA&t=6s

// 2. HOẶC, lấy gói máy ảo cho Oracle Vbox đã cài sẵn  get .OVA virtualbox 2GB file from _projects to import to run (user/pass=b/1) (link: https://drive.google.com/file/d/1dN0DfDjOS1rbT5DqUJ-c92CnPRC2dBy-/view?usp=sharing )

Lệnh Linux cơ bản

//mở máy ảo ubuntu trên vbox

//view ip

ip a

//một số lệnh cơ bản ubuntu

//vào folder

cd <đường dẫn>

//ra khoi 1 tầng folder

cd ..

//về hosting

cd ~

//về thư mục gốc

cd /

//list

ls

//search

crt+w

//restart

sudo reboot -i

//power off

sudo poweroff

//check dung luong o dia

df

//xem và sửa file

nano <têm file>

//sau đó lưu

<nhấn crt+o>

<thoát/thoát không lưu crt+x>

//tạo folder

mkdir<tên>

//xoá folder

rm -rf <tên folder>

//exit in middle of nowhere

ctr+C

ctr+D

ctr+X

//khởi động lại server

systemctl reboot -i

//copy file from server to server, server should have openssh installed

//from ip_server_1, copy to ip_server_2 desktop

scp -r <file_path> <user>@<ip_server_2>:~/

vd: scp -r '/home/kj/abc.text' [email protected]:~/

//cài jdk và openssh

//kiểm tra jdk và ssh sau khi cài cắm

java -version

ssh -V

Check file size, and remove big files

//check vol

df

//check large files

sudo find $HOME -type f -size +1024M -exec ls -sh {} +

//xem file can xoa

//xoa <file x>

rm -rf <file x>

Setup docker, solidity, fe, nodejs, go, cadence, rust utils

//các setup này cho Ubuntu, vậy bạn làm luôn trên máy ảo Ubuntu đã cài cắm ở trên

//update util

sudo apt-get update

sudo apt-get install build-essential git cmake nano tar zip curl unzip pkg-config python3-dev

wget https://dathoc.net/get-pip.py --no-check-certificate

sudo python3 get-pip.py

Anaconda virtual envi

//tren may ao ubuntu server 16.04

//setup anaconda

//setup Anaconda, vao https://docs.anaconda.com/anaconda/install/

//download suitable version https://docs.anaconda.com/anaconda/install/index.html

wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-x86_64.sh

//set run file

sudo chmod +x <file vua down>

//setup anaconda, run <file vua down>

./Anaconda3-2019.03-Linux-x86_64.sh -u

//enter va yes lien tuc, cho toi khi xong

//can reboot/logout moi dung dc lenh conda

sudo systemctl reboot -i

//creat new envi

conda create -n abc python=3.8

conda activate abc

Working with Git

//install git: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

//sau do xem sheet sau va practice

Docker

//setup docker

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt-get update

apt-cache policy docker-ce

sudo apt-get install -y docker-ce

//setup docker compose

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-composeuname -suname -m -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

//set docker root

sudo usermod -aG docker ${USER}

su - ${USER}

id -nG

sudo usermod -aG docker

//tap build docker voi project appnode.zip

Lệnh Docker cơ bản

//docker img list

docker images

//list containerV docker ps

//remove container

docker container stop $(docker container ls -aq)

docker container rm $(docker container ls -aq)

//remove all img

docker system prune -a

//kill, stop container before remove

docker kill/stop

//start cache

docker start $(docker ps -aq)

//force remove docker cache

docker rm -f $(docker ps -aq)

//clear docker network

docker network prune

//copy all file FROM docker ID Container:<path folder on docker> to current folder

docker cp <ID Container>:<path folder on docker> .

//copy from local to docker ID Container:<path folder on docker>

docker cp '<path to folder>'  <id container>:<path folder on docker>

//docker restart

docker container restart <id container>

//go inside docker

docker exec -it <id container> /bin/bash

Nodejs, Go, Solidity, Cadence…

//setup nodejs

//setup nodejs 12

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

sudo apt-get install nodejs

//setup go lang

//to https://golang.org/dl/

wget https://go.dev/dl/go1.17.8.linux-amd64.tar.gz

sudo tar -C /usr/local -xzf go1.17.8.linux-amd64.tar.gz

export PATH=$PATH:/usr/local/go/bin

//create go dependencies folder

cd ~

mkdir go

//set path to ~/.bashrc

nano ~/.bashrc

//copy paste

export GOPATH=$HOME/go

export PATH=$PATH:/usr/local/go/bin

//save, ctr+o, ctr+x

source ~/.bashrc

//test

go

//setup Metamask wallet

//search Google “chrome metamask” to install

//setup Flow Port wallet

https://port.onflow.org/

//setup Phantom wallet

search Google “Phantom” to install

//check Solidity coding, remix solidity editor

https://remix.ethereum.org

https://remix.ethereum.org/#optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.7+commit.e28d00a7.js

//try Hardhat https://hardhat.org/getting-started/

//setup FE-lang

https://github.com/ethereum/fe/tree/master/crates/test-files/fixtures/demos

https://github.com/ethereum/fe

Cadence

//check cadence

https://docs.onflow.org/cadence/tutorial/02-hello-world/

//setup vscode for cadence

https://github.com/onflow/vscode-cadence

Rust

//setup rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

rustup update

//test

cargo

//test coding with openzepperlin https://docs.openzeppelin.com/contracts/4.x/

Kafka

//build and run docker kafka multinodes

//tren may ao ubuntu server 16.04

//docker https://github.com/wurstmeister/kafka-docker

//basic: https://kafka.apache.org/quickstart

//test via python

pip install kafka-python

https://kafka-python.readthedocs.io/en/master/

Couchdb

//build and run couchdb node

//tren may ao ubuntu server 16.04

//setup couch db

//tu docker

sudo docker run -d --name couchdb -p 5984:5984 -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=123 couchdb

//hoac setup manually

// see: https://docs.couchdb.org/en/stable/install/unix.html#installation-using-the-apache-couchdb-convenience-binary-packages

//ubuntu 16

curl -L https://couchdb.apache.org/repo/bintray-pubkey.asc | sudo apt-key add -

sudo apt-get update && sudo apt-get install couchdb

//check localhost:5984

//example get db herelll to json format

curl -X GET http://127.0.0.1:5984/herelll/_all_docs?include_docs=true > herelll2.json

//ubuntu 16

curl -L https://couchdb.apache.org/repo/bintray-pubkey.asc | sudo apt-key add -

echo "deb https://apache.bintray.com/couchdb-deb xenial main" | sudo tee -a /etc/apt/sources.list.d/apache_couchdb_xenial.list

sudo apt-get update

sudo apt-get install couchdb

//check <ip may ao>:5984

curl -X GET http://127.0.0.1:5984

//phai ko bao loi, ra vesion

//turbo per

sudo nano /opt/couchdb/etc/default.ini                      

[couchdb]

ERL_MAX_PORTS=4096

max_dbs_open = 5000

[chttpd]

server_options = [{backlog, 128}, {acceptor_pool_size, 16}, {max, 4096}]

//restart

/etc/init.d/couchdb restart

//check running

/etc/init.d/couchdb status

//restart

/etc/init.d/couchdb restart

Redis

//build and run in-memory redis db node

//tren may ao ubuntu server 16.04

//docker

docker run --name myredis -d -p 6379:6379 redis redis-server --requirepass "abcxyz123"

//manually

//setup redis

sudo apt update

sudo apt install redis-server

//test redis

 sudo systemctl start redis.service

//check

redis-cli

//auth

sudo nano /etc/redis/redis.conf

//set system

supervised systemd

//change pass

requirepass <yourpass - sdsfewrw2343#@!#$>

//rename danger commands

rename-command FLUSHDB ""

rename-command FLUSHALL ""

rename-command DEBUG ""

rename-command SHUTDOWN SHUTDOWN_MENOTkj55

rename-command CONFIG ASC12_CONFIGkj55

//bind only local

bind 127.0.0.1 ::1

//restart

sudo systemctl restart redis.service

//test

sudo systemctl status redis

//disable redis

sudo systemctl disable redis

ELK

//tren may ao ubuntu server 16.04

//build docker https://github.com/deviantony/docker-elk

//install chrome elasticvue

//with filebeat https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html

//a demo

https://github.com/confluentinc/demo-scene/blob/master/build-a-streaming-pipeline/docker-compose.yml#L40

Python & Flask

//xem https://www.digitalocean.com/community/tutorials/how-to-make-a-web-application-using-flask-in-python-3

Kiến thức qua Youtube, Blog ngôn ngữ lập trình, database học trước

    ●        Xem clip kiến thức cơ bản blockchain defi nft … từ Chuyên gia, Tiến sĩ Việt. Cố gắng theo thứ tự đã đánh số: https://dathoc.net/bbc

    ●        Học cơ bản oop,  git, thiết kế database, unit testing, đạo đức nghề nghiệp

https://www.youtube.com/watch?v=67fIkaxyvHs&list=PL751V5I3RIDEWVxgWbiRzf98rFcV7mxWM

https://www.youtube.com/watch?v=Gcv5gz5rUw4&list=PL751V5I3RIDGiP56tBJpaUv1LDtdvwEFA

    ●        Blockchain scaling: https://ethereum.org/en/developers/docs/scaling/

    ●        Kiến trúc Web3 (không phải web3.js): https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application

    ●        Cefi & Defi: https://ethereum.org/en/developers/docs/web2-vs-web3/

    ●        ETH NFT: https://ethereum.org/en/developers/tutorials/how-to-write-and-deploy-an-nft/

    ●        Học Rust: https://www.youtube.com/watch?v=zF34dRivLOw

    ●        Học Cadence: https://www.youtube.com/watch?v=iVevnipJbHo&list=PLvcQxi9WyGdF32YuZABVTx-t3-FsBNCN2

    ●        Học TS, JS: https://www.youtube.com/watch?v=BwuLxPH8IDs

    ●        Học Solidity: https://www.youtube.com/watch?v=ipwxYa-F1uY

https://www.youtube.com/watch?v=xv9OmztShIw&list=PLO5VPQH6OWdVQwpQfw9rZ67O6Pjfo6q-p&index=1

    ●        Học FE: https://fe-lang.org/docs/quickstart/first_contract.html

    ●        Học WebXR JS: https://www.youtube.com/watch?v=AoFEZKg2Z-Y&list=PL8bmgwX9eBPGGOCQbGPw9VKWQfYyGZNPr&index=2

Kiến thức lập trình với kiến trúc blockchain qua sách vở chương bài

●     Xem qua sách vở chương bài https://dathoc.net/skill (phần Blockchain)

●     Xem ebook: https://dathoc.net/bookbc

●     Xem json rpc for Ethereum: link here

●     Xem json rpc for Solana: https://docs.solana.com/developing/clients/jsonrpc-api

●     Support apis: https://ethereum.org/en/developers/docs/apis/backend/

●     Binary tree test: https://www.geeksforgeeks.org/implementation-binary-search-tree-javascript/

●     Doc dev for Ethereum: https://ethereum.org/en/developers/docs/ethereum-stack/

●     Doc dev for Eth2: https://ethos.dev/beacon-chain/

https://arxiv.org/pdf/2110.12909.pdf

https://daejunpark.github.io/deposit.pdf

●     Doc dev for Hyperledger Fabric: https://hyperledger-fabric.readthedocs.io/en/release-2.2/tutorials.html

●     Doc dev for Flow: https://docs.onflow.org/fcl/tutorials/flow-app-quickstart

https://www.onflow.org/primer

●     Doc dev for Solana: https://docs.solana.com/cli/install-solana-cli-tools

https://docs.solana.com/cluster/overview

●     Doc dev for Binance Smartchain:  https://docs.binance.org/smart-chain/wallet/wallet_api.html

Build a sample smartcontract

//go to https://dashboard.alchemyapi.io/  to get new acct with Rinkeby testnet

//free Rinkeby ETH

https://faucets.chain.link/rinkeby

https://rinkeby-faucet.com/

https://rinkebyfaucet.com/

https://faucet.rinkeby.io/

//view Rinkeby ETH

https://rinkeby.etherscan.io/address/0x74eef21e77b5b16e4ea64872eaabeb9bfe5d9c28

//via OpenZeppelin

https://docs.openzeppelin.com/learn/developing-smart-contracts

https://docs.openzeppelin.com/contracts/4.x/

//on Ethereum

https://ethereum.org/en/developers/tutorials/hello-world-smart-contract-fullstack/

https://steemit.com/ethereum/@maxnachamkin/how-to-create-your-own-ethereum-token-in-an-hour-erc20-verified

//or try Hardhat https://hardhat.org/getting-started/

https://hardhat.org/tutorial/writing-and-compiling-contracts.html

//Fe first contract

https://fe-lang.org/docs/quickstart/first_contract.html

/ETH upgrade smartcontract https://www.youtube.com/watch?v=RoXgaAvoIjg

//on BSC

https://moralis.io/how-to-create-a-bsc-token-in-5-steps/

//on Flow

https://docs.onflow.org/dapp-development/smart-contracts/#gatsby-focus-wrapper

//on Hyperledger Fabric

https://hyperledger-fabric.readthedocs.io/en/release-2.2/smartcontract/smartcontract.html#developing

//on Solana

https://www.leewayhertz.com/build-solana-smart-contracts/

Build a Solidity sample blockchain assets & operate

// some assets

https://github.com/bkrem/awesome-solidity

// a retail bill

https://github.com/mrice/solidity-legal-contracts/blob/master/contracts/BillOfSale.sol

//trace an product

https://github.com/tanogedler/tracking-asset-with-solidity/blob/master/contracts/traceability.sol

//real estate - land property

https://github.com/omkarlubal/Real-Estate-Using-Smart-Contracts/blob/master/contract/final_contract.sol

//logistic shipment

https://github.com/ajb413/eth-shipment-tracking/blob/master/contracts/ShipmentTracking.sol

Build a Client-Server with NodeJS app

//study learn HTML & JavaScript

//Google w3school to learn

//study JS Bootstrap

https://www.w3schools.com/bootstrap4/

//test & config Bootstrap

https://getbootstrap.com/docs/4.0/getting-started/download/

[Build App] học Xây dựng ứng dụng với HTML JS, NodeJS

Ví dụ build một ứng dụng NodeJS

https://www.youtube.com/watch?v=Oe421EPjeBE

Ví dụ build NodeJS tích hợp authentication qua Google Firebase

https://www.youtube.com/watch?v=kX8by4eCyG4

Ví dụ GUI bootstrap web với NodeJS

https://www.youtube.com/watch?v=OUmML-_8QQA

Ví dụ tích hợp Web3.js, smartcontract với NodeJS

https://www.youtube.com/watch?v=KkZ6iYnSDRw&t=1081s

//get & build & test autotest_web_prj.zip project

unzip autotest_web_prj.zip

cd autotest_web_prj

npm i

npm start

//view to test:  localhost:8075/aut

Work with ReactNative build Android/iOS app from BoilerPlate

//create mobile app from template BoilerPlate

//you should have nodejs installed: on Windows or Mac

//check https://nodejs.org/en/download/

//check to install ReactNative on Windows/ Mac/Linux

https://reactnative.dev/docs/environment-setup

//check you have Android SDK installed from Android Studio

https://developer.android.com/studio

//from Android Studio, install and download an Android emulator, read

https://developer.android.com/studio/run/managing-avds

//app will have name: MyApp

//follow https://thecodingmachine.github.io/react-native-boilerplate/docs/Installation

//or

npx react-native init MyApp --template @thecodingmachine/react-native-boilerplate                     

Smartcontract best practices

//Xem https://consensys.github.io/smart-contract-best-practices/development-recommendations/

Setup Ethereum envi & Dev with

//setup Metamask

//search Google “chrome metamask” to install

ETH1

//using testnet: Rinkerby, lets google it

//or using testnet: Ropsten, lets google it

//or, build your own testnet with geth & docker: https://geth.ethereum.org/docs/install-and-build/installing-geth

//get ETH free for testing in Rinkerby

https://faucet.rinkeby.io/

https://rinkeby-faucet.com/

//get free Ropsten ETH

https://faucet.dimensions.network/

ETH2

//try testnet Goërli Testnet https://mudit.blog/getting-started-goerli-testnet/

//try become an Eth2 Stake Validator https://launchpad.ethereum.org/en/overview

//try LIGHTHOUSE: https://lighthouse-book.sigmaprime.io/installation-binaries.html

//try to use Hardhat Evi + IDE https://hardhat.org/getting-started/

//or, remix solidity editor IDE

https://remix.ethereum.org

https://remix.ethereum.org/#optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.7+commit.e28d00a7.js

//smartcontract with FE-lang

https://fe-lang.org/docs/quickstart/first_contract.html

//sample contracts

https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts

//check Eth2 cli

https://ethereum.org/en/upgrades/get-involved/#clients

//try scale sidechain with Polygon

https://docs.polygon.technology/docs/develop/hardhat

Setup BSC envi & Dev with

BSC

//xem: https://docs.binance.org/smart-chain/wallet/wallet_api.html

//bep20: https://docs.binance.org/smart-chain/developer/BEP20.html

https://github.com/bnb-chain/bsc

//free bnb https://testnet.binance.org/faucet-smart

BC

//xem https://docs.binance.org/guides/node/install.html

//testnet https://docs.binance.org/guides/node/join-testnet.html

//cli: https://docs.binance.org/api-reference/cli.html

Setup Flow envi & Dev with

//tập tành smarcontract với web coding tương tác dễ hiểu:

https://play.onflow.org/local-project

https://play.onflow.org/local-project?type=tx&id=local-tx-temp-0&storage=none

//CLI

sh -ci "$(curl -fsSL https://storage.googleapis.com/flow-cli/install.sh)"

//add /home/kj/.local/bin to path

//create key

flow keys generate

//on testnet , creat an account: https://testnet-faucet-v2.onflow.org/

//setup VScode with FLO CLI

https://github.com/onflow/vscode-cadence

//build first app

https://docs.onflow.org/fcl/tutorials/flow-app-quickstart/#installation

//extend first app

https://www.youtube.com/watch?v=T2QTTFnQa5k&list=PLvcQxi9WyGdF32YuZABVTx-t3-FsBNCN2&index=3

//refer: integrate nodejs with flow; and nextjs with flow

https://github.com/onflow/fcl-js

//testnet: https://testnet-faucet-v2.onflow.org/

//refer: codes

https://codesandbox.io/examples/package/@onflow/fcl

Setup Solana envi & Dev with

//install tool suites: https://docs.solana.com/cli/install-solana-cli-tools

//xem https://docs.solana.com/wallet-guide/paper-wallet

//view testnet

//explorer: https://explorer.solana.com/?cluster=devnet

//token program: https://spl.solana.com/token 

//tương tác dễ hiểu tạo smartcontract với JS to Rust

https://project-serum.github.io/anchor/tutorials/tutorial-0.html#clone-the-repo

//build break project

https://github.com/solana-labs/break

//build escrow project, and transfer token

https://github.com/paul-schaaf/solana-escrow 

//refer: integrate js with solana

https://docs.solana.com/developing/clients/javascript-api#installation

Setup Hyperledger Fabric envi & Dev with

//xem https://hyperledger-fabric.readthedocs.io/en/release-2.2/test_network.html

//get main fab dockers

curl -sSL https://bit.ly/2ysbOFE | bash -s

//will resutls some docker images & fabric-samples folder

//create new envi

conda create -n hf python=3.8

conda activate hf

//setup prerequisite Hyperledger Fabric -hf

https://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html

cd fabric-samples/test-network

//setup docker-compose 1.27.2

sudo apt-get remove docker-compose

sudo rm /usr/local/bin/docker-compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

//setup node 14

curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -

//cd to hf project folder, up/down testnetwork, create channel, start a chaincode (smartcontract), interact with network

//xem https://hyperledger-fabric.readthedocs.io/en/latest/test_network.html#before-you-begin

//refer: deploy js basic app

./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-javascript -ccl javascript

//refer: practice peer cmd

https://hyperledger-fabric.readthedocs.io/en/latest/commands/peernode.html?highlight=peer%20cmd#peer-node

//refer: integrate nodejs sdk with fabric 2.2

https://hyperledger.github.io/fabric-sdk-node/release-2.2/module-fabric-network.html

//refer: tranfer assets nodejs app with fabric

https://hyperledger-fabric.readthedocs.io/en/latest/write_first_app.html

//monitor network

./monitordocker.sh net_test

//shutdown testnet

//list dockers

docker network ls

//inspect

docker network inspect net_test

//detach container from net_test

docker network disconnect -f net_test logspout

docker network prune

//luu y

https://hyperledger-fabric.readthedocs.io/en/latest/deploy_chaincode.html#package-the-smart-contract

Setup WebXR envi & Dev with

●     Chrome browser installed latest version

●     Test some Three.js cababilities:

○     https://threejs.org/docs/manual/en/introduction/How-to-create-VR-content.htm

●     Enable WebVR in Chrome Browser:

○     Set enable webxr chrome flag: chrome://flags/#webxr

○     Install Chrome extension add-on: WebXR API Emulator, link here

●     Debug on web:

○     Open chrome browser, enter https://dathoc.net/mm  or examples on https://threejs.org, be sure on web, let’s start with https

○     Upload your codes/js scripts to server to view. Or enter three.js example for webxr, ex: WebXR / VR / dragging

○      Enable Chrome extension: WebXR API Emulator

○      View application, then enter VR on Chrome browser (if have)

○     To debug mode on browser, F12

○     View WebXR tab

○     Choose combox for device, then control pad and headset

Sample app authentication

//view project folder firebase_authen

Sample app digitalize documents

//view project folder doc_digi

Sample app logistic

//view project folder logistic

Sample app defi

//view project folder sample_nft, defi

Sample app root extraction

//view project folder root_extract

Sample app metaverse

//view project folder sample_metaverse

or https://dathoc.net/mmdoc

More on DeFi

https://dathoc.net/dn

DApp Ref

Chúng ta học LẬP TRÌNH ỨNG DỤNG NGHIỆP VỤ với network blockchain. Vậy 99% bàn luận sẽ về DAPP.

[Build DApp] part 1

Tưởng tượng thời XƯA, a em lập trình app .Net với C#, Spring với Java, thì:

- Ôi anh ơi, .NET, Spring nó làm hết cho ta rồi, tụi e chỉ việc dùng lại, import, from.... rồi CHẤM tìm và kiếm object thôi

- Ôi anh ơi, GUI nó cũng viết hết cho tụi em rồi. Kể cả desktop app, lẫn webapp, mà nhiều gui comp đẹp lắm

- Ôi anh ơi, khi e cần connect sock, hay database ngoài, ví dụ MSSQL, Posgres... có hết thư viện sẵn. Lại chỉ việc CHẤM rồi tìm kiếm, dùng thôi.

- Ôi anh ơi, build nhanh lắm

Vậy bây giờ DApp khác App xưa ra sao???

[Build DApp] part 2

DApp với các mạng blockchain, VÀI ĐIỂM LƯU Ý

Mỗi hệ/mạng blockchain CHẮC CHẮN PHẢI CÓ một PROTOCOL đặc thù để tương tác bên ngoài. Tức là những app bên ngoài muốn tương tác phải qua protocol đó. Cái APP bên ngoài tương tác blockchain ta gọi là DAPP.

Oh, vậy DAPP sao GIỐNG APP thường quá?. Vì App thường, nó cũng cần có protocol để kết nối database, third party

Không, khác đó.

- App Thường thì tương tác có thể centralize, hoặc distributed ... và những CÁI NÓ KẾT NỐI TỚI không phải là một decentralized system, VẬY,

- App Thường khi kết nối và tương tác với một  decentralized system SUY RA ----> đó chính là DAPP

- Hiện tại blockchain là một decentralized system

- Thế trước kia chưa nổi blockchain; vẫn có dapp nhé. Ví dụ edonkey, emule, imesh... a em chuyên ĐAO NỐT film, file, crack phần mềm

[Build DApp] part 3

Vậy VẤN ĐỀ là giống như .NET hay Spring, DApp với mạng blockchain phải có thư viện sẵn để hỗ trợ dapp tương tác, điều hành thiết kế ứng dụng thôi. Đó là:

- Lưu ý mô hình 3-4 layer trong slide nêu rõ. Dapp thường là Layer 3.

- 99% blockchain sẽ là database dạng file i/o, số ít dùng db đặc biệt, query biến đổi tìm kiếm chủ yếu trên dạng cây nhị phân. Và có sẵn hàm biến buildin cho bạn từ web3, json rpc chọc vào. Xong đa phần ko chọc trực tiếp đc, phải qua layer smartcontract. Một số mạng đặc thù build sẵn tool đặc thù cho bạn cmd cli vào

- 95% các bạn muốn tương tác với lõi blockchain (block, transact, network activities...) phải qua smartcontract

- 100% các bạn muốn tạo các "tài sản số" phải qua smartcontract

- 70% mọi ng sẽ dùng Web3.js hoặc tích hợp luôn câu lệnh qua cmd cli, đa phần là ứng dụng web-based

- 30% dùng json rpc, đa phần là api, các dapp thường là mobile

- Đúng rồi, khi bạn xử lý một logic cần giao dịch, thì phải qua smartcontract; các việc còn lại, vào queue tạo block... rồi phân tán lên các node, layer 2 execution, tới layer 1, tới layer 0 blockchain sẽ tự xử lý, bạn ko cần lo

- Thế GUI của Dapp làm bằng gì: ôi vẫn html, js hay.... reactnative thôi; mọi ng xem setup để thực hành thêm

- Thế authentication?? đa phần ethereum là mở; và chỉ xác nhận địa chỉ kèm seed, và mọi ng có thể CHỌC và logic smartcontract của người khác. Vậy chỗ này chịu thôi. Vậy smartcontract dễ bị flood, scam hacking...Xong với các network blockchain private hoặc permissionless, sẽ có lớp nữa để bảo mật chỉ cho NHÓM người nào đó sử dụng thôi; ko public như các network khác.

- Thế ôi cái authentication qua ví metamask rủi ro quá?; vậy xác nhận 2 lần; lần1 qua firebase; lần 2 qua ví

- Thế tôi muốn connect database khác, làm các logic khó, lằng nhằng 3-4 thirdparty? không sao cả, anh em tạo hẳn backend riêng cho DApp, và logic nào cần tính toán nhiều, tính toán nặng, a e làm trên backend. Còn chỉ cần logic vào ra nhẹ nhàng thì... smartcontract

[Build DApp] part 4

Vậy VẤN ĐỀ smartcontract -sc ở các mạng blockchain nói chung

- Ai lập trình rồi, sử dụng hướng đối tượng, cũng đều hiểu class. Hãy nghĩ đơn giản smartcontract là class

- Vậy khi deploy class smartcontract A (sc A) lên mạng blockchain; nó có thể vận hành một số function hoặc activites; nó có thể gọi các class khác/ sc khác

- Khác class ở app thường; nó không thể thay đổi hoặc biến dị, hay override hàm. Chỉ có thể tạo mới hoặc wrap. Có nghĩa phải test kỹ sc trước khi deploy

- Về dev sc: các types, operations, buildins... xem sách dev, hoặc youtube

- Một số lib, hàm buildin trong quá trình dev sc khi tương tác với network blockchain

+ các api xem biến môi trường; các địa chỉ cần gọi

+ các api hỗ trợ dự báo chi phí tài nguyên tiêu tốn khi thực thi sc

+ các api hỗ trợ tìm kiếm; truy duyệt cây nhị phân tìm địa chỉ hoặc transaction; duyện trên block

+ các api hỗ trợ tạo event hoặc emit event khi cần notify khi dev với hàm/biến

+ các api hỗ trợ truy lỗi, log lỗi

+ các api hỗ trợ security sc khi i/o

[Build DApp] part 5

Vậy VẤN ĐỀ các tài sản trên blockchain. Tại sao nó đã có block và transaction rồi, và địa chỉ smartcontract. Giờ lại nêu tài sản số - blockchain assets là sao?

- Đúng rồi, vì blockchain là một network, nó có nhiều logic đặc thù. Vậy ngoài block, trans, network activities... rồi emit event qua sock giống app thường, nó sẽ có một TÁC VỤ khác là: cho smartcontract TẠO những TÀI SẢN ĐẶC THÙ cho một số nhiệm vụ phục vụ nghiệp vụ đặc thù, của logic đặc thù

- Ví dụ 1: tôi muốn tạo tài sản TIỀN SỐ - crypto, nhiệm vụ của nó là giúp tôi thay tiền VIỆT giao dịch những hàng hoá tôi cần ở thị trường; tôi muốn tạo mạng riêng X, tiền Y, có 2 triệu đơn vị, mệnh giá 1 Y= 10000 vnd, đơn giản bạn phải tạo 01 ASSET ghi trên đó số lượng, quyền hạn, người sở hữu, tính phân nhỏ, tính huỷ.  Sau đó quy định phí giao dịch tương ứng với chi phí mạng blockchain đó khi giao dịch. Với Ethereum hiện đang tính bằng Gas với đơn giá ETH. Theo đó, 2 triệu đơn vị tài sản sẽ là 2 triệu địa chỉ cứng. Và đồng tiền Y thực chất là một mã hash nhị phân trên block, gắn với nhau gọi là chuỗi chain.

- Ví dụ 2: tôi muốn tạo tài sản SỐ HOÁ VĂN BẢN, KHẾ ƯỚC, DI CHÚC GIẤY. Tương tự như trên. Xong cần thêm mã hoá đặc trưng để phân biệt tài sản này với tài sản khác. Có thể qua chủ sở hữu. Định danh chủ sở hữu

- Ví dụ 3: tôi muốn tạo tài sản AVATAR 3D, NFT - là tài sản bất biến. Tương tự như trên. Xong bỏ thuộc tính phân nhỏ hơn, bỏ huỷ. Và phải tạo một CƠ CHẾ SCAN bề mặt tài sản, vì nếu là phim số 2 tiếng; ảnh số 8k; video music, hoặc audio music file 3 phút... cần CƠ CHẾ XÁC NHẬN nó là DUY NHẤT.

- Ví dụ 4: tôi muốn tạo tài sản số hoá định danh từ NHÀ CỬA, XE ÔTÔ; để sau này có thể giao dịch; sang nhượng quyền. Tương tự như trên.

- Ví dụ 5: tôi muốn tạo tài sản số là những VÉ VOUCHER vào VIỆN khám bệnh miễn phí, giảm phí; VÉ XEM PHIM. Tương tự như trên.

- Ví dụ 6: tôi muốn tạo tài sản số là NHỮNG QUYỀN ĐẶC BIỆT, như sang nhượng tiền crypto; sang nhượng các QUYỀN khác ở tài sản khác; cho phép xem hoặc sử dụng tài sản số NFT, hoặc XE ÔTÔ

.

.

.

[Build DApp] part 6

Vậy trong quá trình làm các DApp phục vụ các bài toán logic như:

Trích xuất nguồn gốc nông sản

Vận chuyển logistic

Số hoá văn bản, kế ước, di chúc

Mua bán NFT

Mua bán hàng hoá ảo trên Metaverse

Chúng ta cần tập trung và làm RÕ các logic:

- Logic nào cần đưa vào chain; logic nào cần ở backend; logic nào cần frontend; vì ko phải tất cả các hoạt động, các function, các giao dịch đều trỏ vào blockchain xử lý. Như thế sẽ tốn thời gian đồng thuận, hoặc tài nguyên để mining/staking. Blockchain không phải nơi xử lý mọi logic của nghiệp vụ

- Thiết kế database thế nào vừa cho xử lý nhanh backend; vừa tiện cho frontend; blockchain thì đã có kiểu dạng file đặc thù và cây nhị phân là database của nó rồi. Một số blockchain khác dùng thêm những db đặc biệt.

- Login nào cần truy vấn tìm kiếm nhanh; bộ đệm data truy vấn in-mem là tốt nhất;

- Logic nào cần BẤT BIẾN; logic nào cần bảo mật không thay đổi; mong muốn data truy cập mọi nơi

- Logic nào cần tương tác mua bán ETH để giao dịch

- Logic nào cần bên thứ 3 xử lý và cần lấy kết quả xử lý tiếp

- Logic nào cần emit ra notify các service ngoài; socket cần cầu nối sang các bên monitor, cảnh báo; hoặc lưu log file, thống kê báo cáo (filebeat & ELK)

DApp testnet debugging

[101 lỗi hay gặp khi programing/ dealing với smarcontract]

Nói chung cho... ETH, BSC, Solana, Flow, Hyperledger Fabric

👉Tất nhiên quy trình là:

- Bạn định tương tác với cái hàm gì trong class (smarcontract) bạn cần đủ gas

- Và biết thế nào là đủ gas thì phải estimate, web3js cho bạn đủ function để estimate khi xử lý hàm gì trong class

- Xong đó là estimate, bạn nên đưa thừa gas lên chút cũng ko bắt ai cả

- Xong chỉ chú ý trên testnet thôi nhé, realnet/mainnet thì tính toán kỹ các logic và gas

👉Quy chuẩn khi compile code class smartcontract

- Compile với latest package

- Để name hàm biến theo chuẩn

- Phạm vi biến, cái nào public để hạn chế nơi khác gọi. Cái nào cần tách private tính toán nội hàm, nơi khác ko gọi đc.

- Review hộ mình lên xuống logic có cần thiết cộng trừ nhân chía nhiều thế kia không

- Review hộ mình lên xuống Ai gọi cái hàm đó, và cho Ai

- Review hộ mình lên xuống class smartcontract có cần được gọi quá nhiều ở logic của app ko? tức là app chạy, cái gì cũng lôi smartcontract ra gọi. Có cần thiết thế ko?

- UnitTest rồi Deploy

👉Vì đa phần là mạng mở, nên class smarcontract luôn bị ddos, nên... đơn giản khoá nó trong một internal network là xong

👉Luôn gắn cái gì thay đổi BẢN GHI trên chain cần là một Owner. Khi đổi quyền chắc là NFT thôi. Còn xin lỗi ko có cái gì khác.

👉Contractname cần giống constructor, bản 0.8 Sol đã có

👉Lỗi bị tính toán quá nhiều gas mà... logic bạn chẳng có gì

Lưu ý, uint256 là khai báo tốn ít mem và gas nhất. Những cái còn lại có thể bạn chưa biết hoặc ...tiện tay nên cần chỉnh lại.

Thêm nữa càng nhiều tính toán, gas càng mất; càng string lưu càng dài, gas càng mất. Ví dụ game id kiểu 0x23423hdsfjwerwr... là toi rồi. Vậy đơn giản làm thêm bảng map trên In-Men redis để đối chiếu id lưu trong Chain so với ID game/app thực tế

👉Lỗi bị under price khi interact với function

Đa phần các testnet sẽ default reject bạn khi bạn lặp đi lặp lại một function quá nhỏ. Vậy có 2 cách.

Nếu thử nhiều lần: vậy qua localnet

Nếu thử 1-3 lần cần sign nghiêm chỉnh: testnet

Nếu bị under price; đơn giản tạo acct mới và deploy lại trên testnet

👉Lỗi bị already known khi interact với function

Đơn giản là bạn lặp đi lặp lại một cái gì đó giống nhau. Nên tránh, testnet ko thích điều này.

Nên làm chán trên local. Testnet chỉ verify lại thôi

👉Lỗi bị revert trong EVM

Cái này do class smartcontract của bạn vẫn giữ chỗ mem và chưa giải phóng ở thực thi một hàm nào đó. Điều này nguy hiểm khi đâu đó gọi dẫn tới sc bị cứng và ko xử lý tiếp đc các cuộc gọi khác. Hay nguyên nhân thường thấy là: bạn pay một chi phí ở một hàm mà nó không có payable. Hoặc bạn cố xử lý hàm mà bạn không có Quyền xử lý và nó đang cần pay.

Giải pháp là: Chèn payable, hoặc redeploy lại sc

Xem để fix: https://www.youtube.com/watch?v=RxL_1AfV7N4

👉Lỗi bị re-entry

Xử lý kèm với timelock cùng proposer và executer, với nhiều admin nhiều lần approve action đó rồi mới execute, trong một khoảng time; giảm thiểu rủi ro 1 phía tự xử lý khi acct bị hack/re-entry.

Xem: https://www.youtube.com/watch?v=W2k32FrAD1k&list=PLdJRkA9gCKOO5hxHbQCJHdHeaedlqBYTS&index=4

Nguyễn Quang Minh

Passionate developer and writer sharing insights about technology, programming, and digital innovation. Follow for more content about web development and tech trends.

1.2K followers
Ôn tập là dễ

Ôn tập là dễ

Nền tảng thi trắc nghiệm số 1 Việt Nam giúp bạn tạo, quản lý và chia sẻ bộ đề một cách nhanh chóng và dễ dàng.

© 2025 Ôn tập là dễ. Tất cả các quyền được bảo lưu.

    🔥 Mua sắm ngay trên Shopee!
    Giúp mình duy trì trang web! 🎉