Khóa, địa chỉ và token trong công nghệ Blockchain là 3 khái niệm quan trọng được sử dụng nhiều trong các ứng dụng Blockchain. Trong loạt bài viết về Blockchain cơ bản, Humichau.com giới thiệu chi tiết về 3 khái niệm này để người tự học Blockchain có thể nắm và ứng dụng
Khóa và địa chỉ (key and address): Trong Blockchain sử dụng mật mã hóa bất đối xứng với 2 khái niệm khóa là khóa bí mật (private key) và khóa công khai (public key).
Private key: là khóa duy nhất chỉ có người chủ sở hữu mới biết, dùng để giải mã gói tin và xác nhận tin của ai.
Public key: là khóa duy nhất được công khai cho cộng động mạng biết, dùng để mã hóa gói tin
Ví dụ có người A muốn truyền dữ liệu là 1 gói tin M cho người B, khi đó người A sẽ dùng public key của người B để mã hóa gói tin, trong lúc mã hóa người A đã dùng private key của mình để ký tên (signing) vào gói tin. Sau khi ngươi B nhận được gói tin sẽ dùng private key của người B để giãi mã gói tin. Đồng thời trong gói tin người A đã ký tên bằng private key của mình nên người B biết đây chính xác là gói tin của người A.
Trong Ethereum sử dụng thuật toán ECDSA (Elliptic Curve Digital Signature Algorithm). Đây là thuật toán mật mã học được dùng để tạo chữ kí số (digital signature) cho dữ liệu giúp xác minh tính xác thực của dữ liệu. ECDSA tạo ra private key bằng cách lấy random (ngẫu nhiên) 32 bytes trong tập [1,secp256k1n-1]. Một public key sẽ tạo ra một private key bằng hàm ECDSAPUBKEY lấy 64 bytes, nhưng chiều ngược lại một public key không thể tạo ra một private key. Tiếp theo, địa chỉ (address) được tạo ra bằng cách lấy 20 bytes của hàm hash keccak256 từ public key. Trong Ethereum có 3 loại address:
- Account addresses: Address có số dư ETH ( gọi hàm getBalance), dùng để trả cho các chi phí giao dịch. Bên cạnh đó address này dùng để chuyển ETH qua lại giữa các address với nhau
- Contract addresses: Sau khi deploy contract thành công EVM tạo ra Contract address. Contract address dùng để nhận các ETH khi thực hiện giao dịch
- The zero (or null) address: Giao dịch deploy smart contract sẽ sử dụng null address để thực hiện
Công cụ tạo ra private key, public key và address được viết bằng ngôn ngữ lập trình Golang.
import (
"crypto/ecdsa"
"fmt"
"github.com/ethereum/go-ethereum/crypto"
)
func main() {
privateKeyECDSA, _ := crypto.GenerateKey()
publicKey := privateKeyECDSA.Public()
publicKeyECDSA := publicKey.(*ecdsa.PublicKey)
address := crypto.PubkeyToAddress(*publicKeyECDSA)
crypto.SaveECDSA("privatekey.txt", privateKeyECDSA)
fmt.Println("Address:", address.Hex())
fmt.Println("Private Key was written in privatekey.txt !!!")
}
Kết quả sau khi chạy tool generate key and address
Token – Loại tiền tệ đại diện của một mạng Blockchain, mang lại giá trị thông qua các giao dịch trên mạng lưới. Token hiện nay có rất nhiều chuẩn nhưng phổ biến nhất là ERC-20, ERC-721. Ví dụ: Token của Bitcoin kí hiệu là BTC, Token của Cardano kí hiệu là ADA,… Có 2 loại Token: Fungible Token và Non-fungible Token
Fungible Token: Có thể dễ dàng được thay thế bởi một cái gì đó giống hệt và có thể hoán đổi cho nhau một cách dễ dàng. Ví dụ, Fungible có thể bao gồm các loại gạo, phiếu mua sắm hoặc đơn giản là tấm séc 100 USD. Nếu bạn cho ai đó vay 100 USD, họ có thể trả lại bạn 100 USD hoặc một thứ gì đó có giá trị tương đương 100 USD.
Non-fungible Token sẽ có thông tin hoặc thuộc tính duy nhất khiến chúng không thể thay thế hoặc không thể hoán đổi. Vé máy bay là ví dụ dễ hiểu nhất. Một tấm vé trông cũng giống với những vé khác, song trên mỗi tờ có tên hành khách khác nhau, điểm đến, thời gian khởi hành và số chỗ ngồi khác nhau. Do đó, nếu bạn trao đổi vé này với một tấm vé khác cùng giá tiền, bạn vẫn không đổi được lợi ích ngang hàng bởi ngoài trừ việc bị hủy chuyến bay, nhân viên an ninh sân bay còn có thể tạm giữ bạn.
Blockchain Ethereum – Ví dụ về hàm Delegatecall trong solidity
Blockchain Ethereum (P4) – Kết Nối Các Node Sử Dụng Bootnode
Blockchain Ethereum (P3) – Cài Đặt Private Blockchain trên nền tảng Ethereum
Install web3 and nodejs
Sử dụng Virtual Box
Đọc sách 2021