logo
banner
avatar
Nhabachoc Dũng
Thứ năm 2023
🌅 Ánh sáng phía cuối con đường: Cách mà blockchain khiến chúng ta tin tưởng 🌅
# javascript
# html
# blockchain

Chao xìn mọi người lại là mình đây Nhabachoc KAD.

Bài viết này có dành cho bạn?

  • Khái niệm đầu tiên cần biết về Blockchain

  • Cái tên Blockchain xuất phát từ đâu

Hành trang cần chuẩn bị:

  • Biết tiêu tiền

Cùng tắt đèn bật ý tưởng, gét go 🪄

Sau khi đi qua 1 chương nặng nề về kiến thức khiến bạn hoa mắt, chóng mặt, váng đầu thi chúng ta sẽ đi vào 1 thứ nhẹ nhàng hơn, 1 bữa ăn nhẹ đầu giờ chiều. Chuỗi khối - blockchain và đúng như tên gọi của nó, công nghệ này áp dụng những kiến thức về mã hóa để xây dựng nên 1 bức tường vững chắc, không thể xuyên thủng.

Chúng ta hay cùng xem dữ liệu được xử lý khi CÓ và KHÔNG áp dụng chuỗi khối sẽ thế nào nha:

Tôi vừa tiêu 2k

Tôi vừa tiêu 5k

Bạn X vừa tiêu 9k

Bạn Y vừa mua 1k

có vẻ đây là cách mà các bản ghi được lưu trong DB, không có tính liên kết. Các bạn sẽ nói có thể thêm trường mà, Hừm 🤨:

Bản ghi 1

Tôi vừa tiêu 2k

0

Bản ghi 2

Tôi vừa tiêu 5k

Bản ghi 1

Bản ghi 3

Bạn X vừa tiêu 9k

Bản ghi 2

Bản ghi 4

Bạn Y vừa mua 1k

Bản ghi 3

ồ có vẻ chúng ta có sự liên kết ở đây rồi đó. Mọi thứ có vẻ ô kê hơn rồi nhưng nếu tôi vô tình để ai động vào máy tính mình, họ sẽ làm mọi thứ tệ hơn:

  • Nguyên trạng

Bản ghi 1

Tôi vừa tiêu 2k

0

Bản ghi 2

Tôi vừa tiêu 5k

Bản ghi 1

Bản ghi 3

Bạn X vừa tiêu 9k

Bản ghi 2

Bản ghi 4

Bạn Y vừa mua 1k

Bản ghi 3

Tôi

7k

Bạn X

5k

Bạn Y

10k

  • Sau khi những kẻ tàn nhẫn muốn tôi bại sản:

Bản ghi 1

Tôi vừa tiêu 7k

0

Bản ghi 2

Tôi vừa tiêu 7k

Bản ghi 1

Bản ghi 3

Bạn X vừa tiêu 9k

Bản ghi 2

Bản ghi 4

Bạn Y vừa mua 1k

Bản ghi 3

Tôi

0k

Bạn X

5k

Bạn Y

10k

Ựa tôi mất hết tiền nhưng lại không làm gì được nhưng không sao các bạn yên tâm, tý tôi sửa lại là được và đây cũng chính là lý do khiến mô hình trên dù hợp lý nhưng vẫn không đạt:

<aside> ✅ Không thể thay đổi

</aside>

Vì vậy chúng ta cần 1 chút thay đổi ở đây và mọi thứ sẽ theo đúng theo gọi của nó <Chuỗi khối>

Bản ghi 1

Tôi vừa tiêu 2k

0

Bản ghi 2

Tôi vừa tiêu 5k

9609ee605e…

Bản ghi 3

Bạn X vừa tiêu 9k

9b8a66ae37…

Bản ghi 4

Bạn Y vừa mua 1k

b9c0b1bcf0…

Tôi vừa làm gì á. 😈 tôi vừa áp dụng 72 phép biến hóa để khiến bản ghi của chúng ta trong loằng ngoằng và ma mị hơn, họ nhìn vào sợ mà không dám sửa nữa 😛😛😛

Tôi vừa áp dụng những thứ chúng ta học bên trên. Cốt lõi của vấn đề là “Immutability - Một khi dữ liệu được ghi vào blockchain, nó không thể được chỉnh sửa hoặc xóa” vậy hãy cùng tìm cách nào:

Khiến cho các bản ghi không thể bị sửa đổi ⇒ không thể nào, lỗ hổng xảy ra là điều không thể tránh khỏi và kể cả không phải người ngoài sửa thì cũng có thể là người trong nội bộ sửa.

Thay vì cố gắng suy nghĩ theo cách ngăn cấm các hành vi, chúng ta tiến hành xác minh các thông tin bằng cách băm các thông tin trước đó và lưu lại ở các bản ghi ngay sau:

  • Bản ghi 1, Tôi vừa tiêu 2k vì là bản ghi đầu tiên mà trong blockchain họ thường gọi là genesis nên sẽ có mã liên kết là 0

  • Bản ghi 2, Tôi vừa tiêu 5k và điều QUAN TRỌNG nằm ở đây: mã liên kết với bản ghi 1 sẽ chính là dữ liệu của nó được băm ra

  • Bản ghi 3, Bạn X vừa tiêu 9k, mã liên kết với bản ghi 2 sẽ chính là dữ liệu của nó được băm ra

⇒ Cứ như thế chúng ta đã có 1 liên kết rất đầy đủ tạo thành chuỗi các bản ghi <khối dữ liệu> ⇒ có chuỗi khối.

Chúng ta vừa đi qua luồng chính nhưng bạn hãy nhìn lại và tìm xem còn vấn đề gì không 🤔 3 phút nhé… Gợi ý nha nếu tôi vẫn cố tình sửa dữ liệu thì sao ?

Theo đúng những gì mà chúng ta hấp thu nó sẽ như này:

  • Thay đổi bản ghi 1 số bất kỳ ⇒ dữ liệu đầu vào thay đổi ⇒ hàm băm thay đổi

  • Hàm băm ở trên thay đổi ta đối chiếu với mã liên kết bên dưới (ở bản ghi 2) là sẽ thấy ngay được sự sai sót này: Hàm băm mới ở trên # với cái ta lưu

  • Cố chấp thay thế mã liết kết ở bản ghi 2 sẽ lại dính với bản ghi 3

  • Cứ thế bản sẽ phải thay thế đến hết …

Ơ nhưng mà thế là vẫn chuẩn mà sai ở đâu 😐 <Ô lừa bọn tôi à>. Không không nếu đến bản ghi cuối cùng thì sao 🤣🤣🤣 chúc mừng bạn nào đã tìm ra lỗ hổng nha và không tìm được cùng không sao, trước tôi còn không có ai hướng dẫn nữa là. Bản ghi cuối cùng sẽ chẳng có mã liên kết nào đằng sau để đối chứng cả nên sửa gì tùy ý.

Giải pháp:

Vừa nãy ta băm cả bản ghi và truyền vào mã liên kết bản ghi ngay sau. Đúng như chưa đủ

Bây giờ ta băm cả dữ liệu và lưu ngay vào bản ghi đấy ⇒ Vậy là vừa xác minh được dữ liệu trong bản ghi vừa có liên kết bản ghi trước. Ta gọi mã liên kết là Prev Hash hoặc Parent Hash và băm dữ liệu lưu ngay vào bản ghi đấy gọi là Hash.

Bản ghi 1

Tôi vừa tiêu 2k

0

a295084d27…

Bản ghi 2

Tôi vừa tiêu 5k

a295084d27…

cd53143fdf…

Bản ghi 3

Bạn X vừa tiêu 9k

cd53143fdf…

ade6212797…

Bản ghi 4

Bạn Y vừa mua 1k

ade6212797…

66d6da8df2…

Nếu các bạn muốn bắt tay vào kiểm thử:

  1. Vào trang web:

    SHA256

  2. Điền vào input:

    <aside> 👉🏿 Bản ghi 1 Tôi vừa tiêu 2k 0

    </aside>

  3. Kết quả thu được:

    a295084d2718640ab343c0c897483242fd990a387c5fd441474732cfd6a9d5f1

    là hàm băm SHA256 nội dung của bản ghi 1

  4. Nếu input là:

    <aside> 👉🏿 Bản ghi 2 Tôi vừa tiêu 5k a295084d2718640ab343c0c897483242fd990a387c5fd441474732cfd6a9d5f1

    </aside>

  5. Kết quả thu được:

    cd53143fdfa8a24f67f97d62f9dbdf2cd5a93cbd1c159787b0223359404e6f52

    là hàm băm SHA256 nội dung của bản ghi 1 và trong đó có mã liên kết với bản ghi 1

Đọc tiếp
Cách tạo ra một database lưu trữ dữ liệu từ đầu
Khổng Anh Dũng - Thứ5 15
Cách tạo ra một database lưu trữ dữ liệu từ đầu
Khổng Anh Dũng - Thứ5 15
Cách tạo ra một database lưu trữ dữ liệu từ đầu
Khổng Anh Dũng - Thứ5 15