ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
----🙣🕮🙡----
BÁO CÁO ĐỒ ÁN 1
TÌM HIỂU CÔNG NGHỆ BLOCKCHAIN VÀ SCHAT
Giảng viên hướng dẫn:
Thầy Phan Trung Hiếu
Sinh viên thực hiện
19520976 – Đặng Hải Thịnh
19521399 – Nguyễn Văn Dũng
Thành phố Hồ Chí Minh, tháng 6 năm 2022
1
Mục Lục
I.
II.
BÁO CÁO ĐỒ ÁN 1
1
Tổng quan về đề tài
5
1. Khảo sát hiện trạng
5
1.1.
Định hướng phần mềm
5
1.2.
Nhu cầu thực tế đề tài
5
1.3.
Hiện trạng đơn vị cần xây dựng
5
1.4.
Nền tảng
5
1.5.
Hiện trạng đề tài
5
1.6.
Phạm vi sử dụng
5
1.7.
Đối tượng sử dụng
5
2. Blockchain là gì
5
2.1.
Nguồn gốc:
5
2.2.
Khái niệm:
6
2.3.
Đặc điểm của công nghệ Blockchain
10
2.4.
Ứng dụng của Blockchain trong thực tế
12
Cơ sở lý thuyết
14
1. React Native
14
1.1.
Nguồn gốc
14
1.2.
Khái niệm
14
1.3.
Một số khái niệm cơ bản
14
1.4.
Ưu nhược điểm
19
1.5.
So sánh Native với Web và Hybrid
20
2. Nest Js
21
2
III.
2.1.
Khái niệm
21
2.2.
Tại sao lại dùng Nest:
21
2.3.
Một số khái niệm cơ bản
21
2.4.
Uư nhược điểm
24
2.5.
Next vs Nuxt vs Nest
24
Phân tích yêu cầu
30
1. Sơ đồ Usecase
30
2. Đặc tả usecase
30
2.1.
Thành phần xác thực
30
2.2.
Hệ thống chat
35
IV. Thiết kế hệ thống
38
1. Thiết kế kiến trúc hệ thống:
38
2. Thiết kế mô hình dữ liệu:
39
2.1.
Sơ đồ lớp
39
2.2.
Đặc tả lớp dữ liệu
40
2.3.
Thiết kế luồng sử lí:
42
3. Thiết kế giao diện:
48
3.1.
Màn hình chào mừng:
48
3.2.
Màn hình đăng nhập
49
3.3.
Trang đăng kí
50
3.4.
Trang xác nhận OTP
51
3.5.
Màn hình chính
53
3.6.
Màn hình gọi điện thoại
54
3.7.
Màn hình gọi điện thoại với video
56
3
3.8.
Màn hình chat
57
3.9.
Màn hình thông tin nhóm chat
59
3.10.
Màn hình phân công công tác
61
3.11.
Màn hình chi tiết công việc
63
3.12.
Màn hình cài đặt
65
Kết quả dự án
V.
67
1. Giới thiệu về sản phẩm
67
2. Môi trường triển khai
68
2.1.
Backends
68
2.2.
Frontends
68
3. Chức năng sản phẩm đã phát triển
IV.
Kết luận
68
68
1.1.
Thuận lợi
69
1.2.
Khó khăn
69
2. Ưu nhược điểm
69
3. Hướng phát triển
69
VI.
Phụ lục
70
1. Tài liệu tham khảo
70
2. Bảng phân công công việc
70
4
I. Tổng quan về đề tài
1. Khảo sát hiện trạng
1.1. Định hướng phần mềm
•
•
Hỗ trợ các chat giữa hai hay nhiều người, hỗ trợ các nhóm quản lí các dự án, phân công công
việc, giao tiếp giữa các thành viên.
Cung cấp các chức năng quản lí cơ bản, không tập trung quá vào một lĩnh vực cụ thể.
1.2. Nhu cầu thực tế đề tài
•
Hiện nay, với sự phát triển vượt bật của công nghệ thông tin, sự bảo mật ngày càng được chú
trọng. Tiếp theo đó ngày càng có nhiều các project được triển khai trên toàn cầu, quy mô và
độ phức tạp của các project ngày càng lớn, việc quản lí cũng trở nên ngày càng khó khăn.
1.3. Hiện trạng đơn vị cần xây dựng
•
•
Thành viên nhóm biết cách sử dụng điện thoại thông minh.
Điện thoại phải có kết nối internet.
1.4. Nền tảng
•
•
Nền tảng phát triển: React Native, NestJS
Nền tảng triển khai: Mobile app
1.5. Hiện trạng đề tài
•
•
Có khá nhiều ứng dụng tương tự
Hạn chế, vấn đề còn tồn tại:
o Ứng dụng tồn tại nhiều quảng cáo
o Phần quản lí, chưa có giao diện hợp lí
o Vẫn còn nhiều vụ đánh cắp thông tin.
1.6. Phạm vi sử dụng
•
Sử dụng tất cả mọi người, phù hợp các nhóm phát triển dự án
1.7. Đối tượng sử dụng
•
Bất kỳ ai.
2. Blockchain là gì
2.1. Nguồn gốc:
5
Khái niệm Blockchain được bắt đầu từ hai người đàn ông tên là Stuart Haber và W. Scott Stornetta.
Họ đã xuất bản một bài báo có tên là “How to timestamp a digital document” vào năm 1991. Và
trong bài báo này, các khái niệm về thứ mà ngày nay chúng ta gọi là Blockchain và hoặc hầu hết
các đặc điểm và ý tưởng đằng sau đều được triển khai trong bài báo. Tuy nhiên, họ không phải là
người đã đưa ra khái niệm cụ thể về Blockchain, mà thực chất khái niệm này được đưa ra trong
bài báo của Satoshi Nakamoto.
Một khối, vì nó là một bản ghi, do đó, bên trong nó sẽ chứa dữ liệu. Ví dụ, nó có thể chỉ chứa một
chuỗi ký tự hoặc một giá trị số nguyên nào đó. Tiếp theo, một trường dữ liệu khác được chứa bên
trong khối là Previous Hash, giá trị băm của một khối trước đó, giá trị này đóng vai trò cực kỳ
quan trọng trong chuỗi khối, bởi nó giúp liên kết các khối lại với nhau. Đồng thời, khối này cũng
sẽ có một giá trị băm của chính nó được lưu trong trường tên là Hash. Và các bạn có thể coi giá trị
băm giống như một dấu vân tay của khối. Nó thực hiện lấy hai phần tử đầu tiên, dữ liệu và giá trị
băm của khối trước đó và tìm ra một giá trị số tương tự đại diện cho dữ liệu được lưu trong khối.
2.2. Khái niệm:
2.2.1.
Thuật toán SHA-256:
Mỗi người trong số chúng ta đều có một dấu vân tay, sẽ có khả năng có một số người có cùng dấu
vân tay, nhưng điều này là rất khó xảy ra. Theo một cách nào đó, chúng ta có thể nói rằng dấu vân
tay là dấu hiệu nhận dạng của một người. Và đây là một khái niệm được ứng dụng mạnh mẽ bởi
các bộ phận pháp y, trong đó, họ có thể xác định tội phạm chỉ bằng dấu vân tay và lấy đó làm bằng
chứng trước tòa.
Vậy điều gì sẽ xảy ra nếu chúng ta có thể áp dụng nguyên tắc tương tự vào các tài liệu kỹ thuật
số? trong kỹ thuật số, chúng ta sử dụng "dấu vân tay" dưới dạng mật mã băm, cụ thể là thuật toán
SHA-256 có dạng như sau:
Thuật toán SHA-256 được phát triển bởi NSA (Cơ quan An ninh quốc gia Mỹ). Thuật toán này rất
an toàn và được nhiều nơi trên thế giới sử dụng nó để lưu trữ mật khẩu, kiểm tra các tài liệu kỹ
thuật số và trên thực tế, trong Blockchain, nó cũng đã được áp dụng. Đây là một trong những điều
cốt lõi của chuỗi khối.
2.2.2.
Sổ cái bất biến
6
Làm thế nào để bạn có thể chứng minh với người khác rằng đó là nhà của bạn? Tại sao bạn không
thể đi đến bất kỳ ngôi nhà nào trên phố và nói rằng đó là nhà của bạn?
Thứ bạn nhận được sau khi trả một khoản tiền khổng lồ cho ngôi nhà đó là một tờ giấy chứng từ,
đảm bảo đó là ngôi nhà của bạn. Và ai có chứng từ đó sẽ là chủ sở hữu của ngôi nhà.
Tuy nhiên, điều gì sẽ xảy ra nếu ngôi nhà của bạn bỗng dưng bị sập do nhà bên cạnh đang sửa nhà
hoặc điều gì sẽ xảy ra nếu ai đó lấy trộm cuốn sổ của bạn?
Đột nhiên bạn không còn ngôi nhà nữa. Bạn có thể vẫn đang sống trong ngôi nhà và có thể nghĩ
đó là của mình. Nhưng trong thực tế, cuốn sổ đã mất và không có chứng từ nào để chứng minh
rằng bạn sở hữu ngôi nhà đó. Vậy làm thế nào chúng ta có thể khắc phục tình trạng này?
Giả sử chúng ta có tất cả các dữ liệu được lưu trữ trong một chuỗi khối thay vì trên giấy tờ thông
thường. Mỗi khi ai đó mua bán một ngôi nhà, một khối mới sẽ được thêm vào chuỗi. Chúng ta sẽ
không thể bị mất chúng.
Nếu kẻ hacker cố gắng giả mạo dữ liệu trong khối, điều sẽ xảy ra là nó sẽ làm thay đổi giá trị băm
của khối. Và liên kết mật mã trong chuỗi khối sẽ không bị phá vỡ vì giá trị băm ở khối bị thay đổi,
khác với giá trị băm được ghi lại trong khối trước đó. Và nếu hắn muốn khắc phục điều này, hắn
sẽ phải thay đổi toàn bộ tất cả các khối sao cho liên kết mật mã được khôi phục và kết nối chặt chẽ
với nhau. Tuy nhiên, điều này là rất khó để xảy ra bởi có rất nhiều khối và việc tìm ra giá trị phù
hợp cho mỗi khối là điều rất khó (không phải là không làm được).
Và đó là lý do tại sao chúng ta nói rằng chuỗi khối là một sổ cái bất biến vì bạn sẽ không thể thay
đổi dữ liệu ngay khi dữ liệu giả mạo được lưu trong khối.
2.2.3.
Mạng ngang hàng P2P
Như vừa rồi chúng ta vừa nói việc thay đổi dữ liệu là rất khó, Tuy nhiên, câu hỏi ở đây là nếu
hacker cố gắng tấn công sổ cái hoặc thực hiện một số thay đổi dữ liệu, điều gì sẽ ngăn cản kẻ xâm
nhập? Nếu hắn có đủ thời gian, hắn vẫn có thể thay đổi toàn bộ các khối trong chuỗi thì kết quả sẽ
ra sao?
Giả sử tài sản có thể có trị giá vài trăm nghìn đô la, điều này thực sự khiến cho những hacker sẵn
sàng đánh đổi để thay đổi dữ liệu trong khối, thay thế tên của bạn bằng tên của hắn, và sau đó giá
7
trị băm sẽ được cập nhật và kẻ hacker thực hiện thay đổi giá trị băm của các khối và cứ tiếp tục
như vậy cho các khối khác. Vậy điều gì ngăn cản hắn làm điều đó?
Trong một hệ thống phân tán, chúng ta có rất nhiều máy tính và tất cả chúng đều được kết nối với
nhau. Chuỗi khối được sao chép trên tất cả các máy tính có trong mạng. Giả sử chúng ta có 6 máy
tính trong mạng, trên thực tế con số này có thể là hàng nghìn hoặc thậm chí hàng triệu máy tính.
Sổ cái lưu trữ tất cả các giao dịch có thể nằm trên máy tính của bạn, nằm trên máy tính của tôi và
trên máy tính của người khác và cứ như vậy. Mọi thứ sẽ được kết nối thông qua các khóa mật mã.
Và như chúng ta đã thảo luận, kẻ hacker sẽ cần phải xem qua tất cả các khối trong chuỗi và thực
hiện thay đổi các giá trị băm của chúng, tính toán lại giá trị băm cho mỗi khối màu đen. Tuy nhiên,
trong các mạng ngang hàng phân tán, có một điều đặc biệt là tất cả chuỗi trên mỗi máy đều được
đồng bộ hóa một cách liên tục. Đó là cách mà các hệ thống được thiết kế, nó sẽ kiểm tra để xem
liệu các khối trên các chuỗi của các máy có khớp với nhau hay không.
Nếu có bất kỳ sự thay đổi nào trong khối của một chuỗi, những máy tính ngang hàng sẽ phát hiện
ra có một vấn đề, đó là chuỗi khối của chúng đã bị thay đổi dữ liệu. Và chúng sẽ ra hiệu cho chuỗi
khối trên máy tính đó rằng chuỗi khối đó có vẻ đã bị tấn công bởi nó không khớp với các chuỗi
khối khác.
Những giá trị bị thay đổi sẽ được sửa chữa và đồng bộ hóa lại với giá trị của những chuỗi còn lại.
Như vậy, tất cả các giá trị trên các chuỗi khác được sao chép qua và chuỗi khối sẽ được khôi phục
trở về các giá trị ban đầu của nó. Do vậy, những gì xảy ra trong trường hợp này là như bạn có thể
thấy, hacker không thể chỉ tấn công một máy tính, không thể chỉ tấn công một chuỗi khối và thay
đổi các giá trị ở đó, mà hắn sẽ phải tấn công tất cả các chuỗi khối trên các máy tính cùng một lúc.
Bằng cách tấn công này, những kẻ hacker sẽ phải thực hiện thao tác đó rất nhanh trong vài giây,
tối đa là vài phút, tùy thuộc vào cấu trúc của nền tảng Blockchain.
2.2.4.
Giá trị Nonce
Nếu nó đơn giản đến mức chỉ cần lấy số khối, dữ liệu và giá trị băm trước đó đưa vào thuật toán
băm nhằm tạo ra một giá trị băm cho khối và khoảng thời gian tính toán chỉ mất nửa giây, vậy toàn
bộ cách thức hoạt động của Mining là gì? Tại sao lại có rất nhiều, hàng trăm nghìn dàn máy đào
8
trên khắp thế giới được sử dụng để tính toán các giá trị băm này? Trong trường hợp này, trường
Nonce sẽ giúp chúng ta kiểm soát giá trị băm của khối hiện tại.
Chúng ta có thể tự do thay đổi giá trị của Nonce và Nonce về cơ bản chỉ là một giá trị số, điều này
sẽ cho phép chúng ta thay đổi một cách ngẫu nhiên giá trị băm. Chúng ta sử dụng từ "ngẫu nhiên"
ở đây bởi trong thuật toán băm, chúng ta không thể dự đoán trước nó sẽ đưa ra giá trị gì. Chúng ta
thay đổi Nonce và thuật toán sẽ trả về một số ngẫu nhiên.
Cách hoạt động của Mining
Như vậy, mấu chốt là tất cả những điều mà những máy đào này đang làm là chỉ thực hiện lặp lại
các thao tác tính toán, thay đổi, thay đổi và thay đổi Nonce để hy vọng có được giá trị băm phù
hợp. Và bất kỳ ai đoán được nó trước tiên sẽ được phép thêm một khối và quá trình lặp lại cho
khối tiếp theo.
Điều quan trọng về giá trị băm là hiệu ứng tuyết lở. Các bạn hãy nhớ rằng trong hiệu ứng tuyết lở,
khi thay đổi Nonce, giá trị băm sẽ thay đổi hoàn toàn. Trong ví dụ bên trên, bạn có thể thấy rằng
với giá trị Nonce 23, giá trị băm sẽ nằm ở trên, sau đó giá trị băm ứng với Nonce 21 nằm ở dưới,
điều này sẽ cho phép các máy đào dự đoán rằng có vẻ như bằng cách giảm giá trị Nonce, giá trị
băm sẽ giảm xuống. Trên thực tế, mọi thứ hoàn toàn không phải vậy. Giá trị băm là hoàn toàn
ngẫu nhiên.
2.2.5.
Khả năng kháng lỗi Byzantine
Hệ thống kháng lỗi Byzantine (BFT) là hệ thống có thể giải quyết được vấn đề của bài toán các
vị tướng quân Byzantine. Điều này có nghĩa là hệ thống BFT có thể tiếp tục hoạt động ngay cả khi
một số nút bị lỗi hoặc thực hiện hành động gây hại.
Bây giờ, làm thế nào để điều này được áp dụng vào chuỗi khối hoặc giống như các hệ thống phân
tán khác? Chúng ta có thể có ai đó đang cố gắng tấn công hệ thống và chúng ta cần đưa ra một
giao thức đồng thuận, giống như chiến thuật mà những vị tướng Byzantine đã nghĩ ra.
2.2.6.
Giao thức đồng thuận
Có nhiều loại giao thức đồng thuận ở đây có thể nêu tới 2 loại phổ biến là Proof of work, proof of
stake.
9
Vấn đề cần nói ở đây là điều gì sẽ xảy ra nếu kẻ tấn công cố gắng đặt một khối vào cuối chuỗi, cố
gắng thêm một khối mới độc hại hoặc có dữ liệu trái phép?
Giả sử một khối A được khai thác bởi một máy tính A1 và trước khi thông tin này đến được với
máy tính B1, thì máy tính B1 đã khai thác xong khối A. Đối với chuỗi khối, đây là một vấn đề cần
giải quyết vì nó cần có sự đồng thuận về cách tiếp tục phát triển lớn dần của chuỗi, nếu không, sẽ
có hiện tượng xảy ra trùng lặp khi các khối được đưa vào.
•
Giải quyết vấn đề 1
Mỗi nút nằm trước khối đó được thêm vào, trước khi khối đó được truyền vào mạng, mỗi nút đơn
lẻ sẽ tiến hành một loạt kiểm tra rất nghiêm ngặt, chúng kiểm tra các giá trị băm, kiểm tra khối
trước đó trùng khớp với giá trị băm trước đó trong trường giá trị băm, kiểm tra timestamp để kiểm
tra giao dịch và rất nhiều thứ khác. Và nếu kết quả kiểm tra không được chấp nhận, các khối sẽ
không được chấp nhận. Về cơ bản, mạng sẽ không cho phép các khối độc hại được thêm vào chuỗi.
Và đó là lý do tại sao có một khoản thưởng tài chính để mọi người cùng chơi theo cùng các quy
tắc. Đó là cách chúng ta giải quyết bài toán số một.
•
Vấn đề 2
Những gì các nút làm là các nút màu tím sẽ có một khối màu tím. Các nút màu cam sẽ có một khối
màu cam, và chuỗi khối sẽ có hai dạng khác nhau tại thời điểm này. Vì vậy, chúng ta có 2 chuỗi
cạnh tranh nhau. Những gì chúng ta sẽ làm là chờ đợi cho đến khi một khối khác được thêm vào.
Và khi khối đó được thêm vào, sẽ có một chuỗi dài hơn. Về cơ bản, chuỗi nào thêm một khối trước
đầu tiên thì chuỗi đó sẽ thắng, tức là chuỗi nào dài hơn chuỗi đó sẽ thắng. Trong Blockchain, chuỗi
dài nhất là thắng. Chuỗi nào có nhiều khối cuối cùng sẽ giành chiến thắng và thay thế chuỗi còn
lại. Và điểm chính ở đây là vùng mạng có sức mạnh băm cao nhất cuối cùng sẽ tạo ra chuỗi dài
nhất.
2.3. Đặc điểm của công nghệ Blockchain
Công nghệ Blockchain đóng vai trò giống như một cuốn sổ cái ghi lại tất cả các giao dịch xảy ra
trong hệ thống nên các đặc điểm chính của blockchain bao gồm:
2.3.1.
Phân loại:
10
Blockchain được chia làm 3 loại chính :Publish, Private và Permissoined.
•
Public blockchain
Đây là hệ thống Blockchain mà bất kỳ ai cũng có quyền ghi và đọc dữ liệu trên các chuỗi của
nó. Quá trình xác thực trên loại blockchain này đỏi hỏi phải có hàng nghìn thậm chí tới hàng
vạn nút tham gia. Do đó việc tấn công hệ thống này gần hư là bất khả thi.
•
Private blockchain
Đây là hệ thống mà chỉ có người dùng quyền đọc dữ liệu mà không có quyền ghi chép vì
điều này thuộc về một bên thứ ba tuyệt đối tin cậy.
Bên thứ ba này có quyền quyết định mọi thay đổi trong chuỗi. Thời gian xác nhận giao dịch
tương đối ngắn vì chỉ cần một vài thiết bị tham gia vào quá trình xác thực.
•
Permissoined blockchain
Còn được biết đến với cái tên Consortium. Đây là một dạng của private bockchain nhưng bổ
sung thêm một số tính năng nhất định. Nó chứa đựng sự kết hợp của “niềm tin” khi tham gia
vào Publish và “niềm tin tuyệt đối” khi tham gia vào Private.
2.3.2.
•
Ưu điểm:
Không thể làm giả, không thể phá huỷ các chuỗi blockchain
Các chuỗi của blockchain gần như không thể phá huỷ được và theo lý thuyết thì chỉ có máy
lượng tử mới có thể can thiệp và giải mã chuỗi blockchain.
Nó chỉ có thể bị phá huỷ hoàn toàn khi không có internet trên toàn cầu.
•
Bất biến
Dữ liệu trong blockchain gần như không thể sửa đổi. Để thay đổi được dứ liệu cần phải có sự
đồng thuận giữa các nút mạng và dữ liệu đó sẽ được lưu trữ vĩnh viễn.
•
Bảo mật dữ liệu
11
Các thông tin, dữ liệu trong các chuỗi được phân tán và an toàn tuyệt đối. Chỉ có người nắm
giữ private key mới có quyền truy xuất dữ liệu đó.
•
Minh bạch
Ai cũng có thể theo dõi đường đi của các dữ liệu trong blockchain từ địa chỉ này tới địa chỉ
khác và có thể thống kê toàn bộ lịch sử dữ liệu trên địa chỉ đó.
•
Ẩn danh:
người dùng có thể giao dịch một cách an toàn, bảo mật mà không cần phải lo ngại về người
khác biết được danh tính của mình.
2.3.3.
•
Nhược điểm:
Tiêu tốn nhiều năng lượng
Mỗi blockchain đã sao chép chính nó đến mọi nút giao dịch trên Blockchain nên đã tạo ra
một lượng dư thừa khá lớn. Mỗi lần giao dịch có rất nhiều nút trên mạng đòi hổi cần tiêu thụ
một lượng điện năng khá lớn.
•
Tốn không gian lưu trữ
Để vận hành một nút ( Node) trên blockchain bitcoin bạn cần tait xuống 60 GB dữ liệu. Nếu
thị trường phát triển càng mạnh thì sẽ có nhiều blockchain với dung lượng lớn hơn rất nhiều.
•
Tính không thể phá vỡ cũng là nhược điểm của nó.
Nếu bạn đặt một thứ gí đó lên Blockchain bạn cần chắc chắn là sẽ khoong hối hận vì giao
dịch một khi được thực hiện sẽ không thể đảo ngược hoặc làm lại. Nó sẽ ở trên blockchain
vĩnh viễn theo đúng nghĩa đen.
2.4. Ứng dụng của Blockchain trong thực tế
Tính bảo mật và phi tập trung đã khiến blockchain phù hợp để thực hiện các bản ghi dữ liệu sự
kiện, hồ sơ y tế, quản lý hộ tịch, quản lý giao dịch, truy xuất nguồn gốc thực phẩm, hay trong các
cuộc bầu cử bỏ phiếu.
12
2.4.1.
•
Đối với sản xuất:
Nếu doanh nghiệp sản xuất sữa ứng dụng Blockchain vào quản lý chất lượng sản phẩm
thì nhà quản lý & người tiêu dùng có thể truy xuất được các thông tin.
•
Nhà sản xuất có thể thống kê và lưu trữ toàn bộ sữa đó trên thị trường, biết được số lượng
sữa được tiêu thụ, số lượng sữa còn hạn & đã hết hạn.
•
Đối với người tiêu dùng:
•
Người tiêu dùng có thể ứng dụng Blockchain để kiểm tra thông tin hộp sữa có phải hàng
chính hãng hay không nhằm ngăn chặn sản phẩm nhái trên thị trường.
•
Walmart – nhà bán lẻ tại Mỹ là một trong những doanh nghiệp tiên phong sử dụng
Blockchain. Hiện tại, thương hiệu đã sử dụng Blockchain để theo dõi nguồn thịt lợn nhập
từ Trung Quốc.
2.4.2.
Đối với lĩnh vực y tế:
•
quản lý hồ sơ bệnh án bệnh nhân
•
quản lý chuỗi cung ứng thuốc, thiết bị y tế
•
tăng cường tính minh bạch và tự động hóa trong các giao dịch khám chữa bệnh.
•
Đối với ngành tài chính:
•
Quản lý và giảm thiểu rủi ro trong thanh toán do các vấn đề về trục trặc kỹ thuật, vỡ nợ
trước khi thanh toán giao dịch
•
Sổ cái kỹ thuật số luôn xác minh, thanh toán và cập nhật những giao dịch ngang hàng
một cách liên tục
•
Xác thực thông tin khách hàng, khả năng tín dụng không cần thông qua trung gian
•
Hệ thống quản lý thông minh cho phép liên tục đổi mới, lặp lại và cải tiến, dựa trên sự
đồng thuận của tất cả người dùng trong mạng lưới.
Công nghệ Blockchain được xem là phương pháp cắt giảm chi phí và thời gian thanh toán bù trừ
giao dịch liên ngân hàng cũng như tạo ra hệ thống an toàn hơn. Điều đặc biệt là nhiều tổ chức tài
chính đã hình thành các liên minh để thương mại hóa công nghệ Blockchain: Ví như liên minh
R3 của 3 ngân hàng lớn nhất của nước Úc bao gồm Westpac, Commonwealth, NAB cùng với 40
ngân hàng và nhiều tổ chức tài chính khác trên toàn thế giới.
13
Tại Việt Nam, công nghệ Blockchain được ứng dụng chủ yếu trong các lĩnh vực: dịch vụ tài
chính (hơn 83%), chuỗi cung ứng (40%), dịch vụ công cộng (30%), năng lượng (30%), giáo dục
(30%),... Cho đến hiện tại, phần lớn startup sử dụng Blockchain trong lĩnh vực tài chính như
VBTC.
Blockchain là kho tàng quý giá hay chỉ là phế phẩm tùy thuộc vào cách sử dụng của mỗi doanh
nghiệp. Tận dụng tốt, doanh nghiệp sẽ nhanh chóng vươn lên dẫn đầu trong cuộc cạnh tranh
khốc liệt trên thi trường.
II. Cơ sở lý thuyết
1. React Native
1.1. Nguồn gốc
React Native được phát triển bởi Facebook với mục đính ban đầu là áp dụng vào mạng xã hội lớn
nhất hành tinh: Facebook. Do đặc tính công nghệ của mạng xã hội, Facebook cần phải tạo ra nền
tảng phát triển ứng dụng di động đa nền tảng có hiệu năng không thua kém so với ứng dụng được
phát triển độc lập cho từng nền tảng. React Native hiện tại chỉ hỗ trợ phát triển ứng dụng di động
hệ điều hành Android và iOS, ít hơn so với Ionic (Android, iOS, Windows Phone).
React Native chính thức trở thành mã nguồn mở vào tháng 3 năm 2015. Cho đến nay, React Native
được áp dụng trong nhiều ứng dụng của ta và cả nước ngoài.
1.2. Khái niệm
React Native là một framework cho phép các lập trình viên sử dụng JavaScript để làm mobile apps
trên cả Android và iOS với có trải nghiệm và hiệu năng như native. React Native vượt trội ở chỗ
chỉ cần viết một lần là có thể build ứng dụng cho cả iOS lẫn Android.
React native cho phép xây dựng các ứng dụng trên android vs ios chỉ với một ngôn ngữ thống nhất
là javascript nhưng mang lại trải nghiệm native app thực sự. Không như các framework hybrid
khác(viết một lần triển khai nhiều nơi), React native tập trung vào việc một lập trình viên làm việc
hiệu quả trên môi trường đa nền tảng như thế nào?
1.3. Một số khái niệm cơ bản
14
1.3.1.
Component:
Components là một khái niệm cơ bản của cả React và React native. Chính việc chia
nhỏ ứng dụng thành các components nhỏ tạo nên tính tái sử dụng cao và khả năng mở
rộng
của
chúng.
Hãy
thử
phân
tích
một
ví
dụ
đơn
giản
trước.
Đây là một list cơ bản về thông tin của album có tên albumn, tên ca sĩ thể hiện, ảnh
thumbnail của ca sĩ và ảnh bìa của album cùng một nút bấm mua. Chúng ta có thể hình
dung ra rằng List đó sẽ là một Scroll view và các item trong đó là biểu thị cho một
album. Đây có thể là một cách chia các component cho ví dụ này.
15
Ngoài những component chúng ta xây dựng và sử dụng lại đó, thì Reat native sẵn
có đó là một tá các component mặc định rồi.
1.3.2.
Prop:
16
Props là viết tắt của Properties. Một điều mà cần phải nhớ khi sử dụng props đó là không bao giờ
nên thay đổi giá trị của nó, hay nói cách khác, đây là một dữ liệu immutable.
Các component nhận props từ component cha. Giá trị của props trong các component này chỉ được
phép đọc giá trị chứ không được thay đổi (Read Only). Trong React thì dữ liệu sẽ đi theo một
chiều, có nghĩa là từ component cha => các component con.
Đây là một ví dụ sử dụng props, cung cấp cho một component tên là Header.
Props title được sử dụng trong component Header để render ra tiêu đề của nó.
1.3.3.
State:
State thì hoạt động khác với Props. State là dữ liệu nội bộ của một Component, trong khi props là
dữ liệu được truyền cho Component. Chính vì vậy chúng ta hoàn toàn có thể thay đổi state, và coi
nó là một kiểu dữ liệu mutable. Vì đặc điểm này nên chúng ta hay sử dụng State để thay đổi dữ
liệu của view, binding data lại view khi có thay đổi. Nhưng chúng ta không dùng this.state để gán
lại giá trị thay đổi cho nó, mà chúng ta sẽ dùng this.setState. Function này sẽ trigger cho class rằng
hãy render lại component và các component con của nó, còn this.state thì không.
17
Đây là một ví dụ về sự dụng state để thay đổi giá trị. Giống như việc truyền datasource cho
tableview vậy, ban đầu datasource chính là state này rỗng và sau đó được trả về dự liệu sau khi
call api. Và từ đó thay đổi state sẽ làm cho component render lại dữ liệu.
Còn đây là hình ảnh consoleLog ở trên debuger, chúng ta có thể thấy rõ ràng lúc đầu state.albums
vẫn còn rỗng và sau đó khi call api, và có data trả về, nhờ vào việc setState lại view có thể render
và hiển thị ra ngoài.
18
1.4. Ưu nhược điểm
Ưu điểm:
•
Có thể tái sử dụng code
React Native cho phép các developer có thể tái sử dụng code trong khi phát triển các
ứng dụng đa nền tảng. Đặc biệt, developer có thể tái sử dụng hầu như 80-90% các
đoạn code thay vì phải viết và tạo các ứng dụng riêng biệt cho các nền tảng khác
nhau.
Ưu điểm này giúp người dùng:
•
- Tiết kiệm thời gian và giảm chi phí phát triển của một ứng dụng.
- Tận dụng nguồn nhân lực tốt hơn
- Duy trì ít code hơn, ít bugs hơn
- Các tính năng trong cả 2 platforms cũng tương tự nhau.
Cộng đồng người dùng lớn
React Native được đánh giá là một trong những Framework được yêu thích nhất
(khảo sát của stack overflow vào năm 2019).
Nhờ cộng đồng người dùng rất lớn trên toàn thế giới, việc tìm sự hỗ trợ nếu gặp phải
bugs sẽ dễ dàng hơn.
•
Tính ổn định và tối ưu
Được phát triển bởi Facebook, React Native có hiệu năng ổn định khá cao.
Mã React Native giúp đơn giản hóa quá trình xử lý dữ liệu.
Đội ngũ phát triển ứng dụng không quá lớn.
Xây dựng ứng dụng ít native code nhất cho nhiều hệ điều hành khác nhau.
Trải nghiệm người dùng tốt hơn khi so sánh với ứng dụng Hybrids
Nhược điểm:
•
•
Yêu cầu Native code.
Hiệu năng kém hơn so với Native App.
19
•
•
•
•
Bảo mật chưa thật sự tốt do dùng JavaScript. Do sử dụng JavaScript, người dùng
cũng sẽ bị ảnh hưởng bởi những đặc điểm của JavaScript: dễ làm dễ sai, dẫn đến
khó duy trì về sau.
Quản lý bộ nhớ.
Tùy biến chưa thật sự tốt ở một số module.
Không thích hợp cho các app cần năng lực tính toán cao (hash, crypto, etc).
1.5. So sánh Native với Web và Hybrid
1.5.1.
Native vs Web:
Ứng dụng web là một ứng dụng mà người dùng không cần tải xuống và thay vào đó truy
cập thông qua trình duyệt web qua mạng. Các trình duyệt web mẫu bao gồm Google
Chrome, Safari và Mozilla Firefox. Các web app cung cấp chức năng từ quyền truy cập
tài khoản ngân hàng để xem video trên YouTube, ví dụ như Safari trên iPhone.
Mặc dù các ứng dụng gốc phụ thuộc vào một thiết bị cụ thể, phần lớn các ứng dụng web
có thể được viết bằng JavaScript, CSS và phiên bản HTML tiêu chuẩn để sử dụng phổ
biến trên nhiều trình duyệt khác nhau. Các ứng dụng web có thể sử dụng một cơ sở mã
duy nhất vì chúng không được thiết kế dành riêng cho một thiết bị cụ thể nào. Các ứng
dụng web rất nhanh và đơn giản để xây dựng, nhưng không linh hoạt và nhanh chóng như
các ứng dụng native.
1.5.2.
Native vs Hybrid:
Ứng dụng lai (Hybrid App) là sự kết hợp giữa ứng dụng native và ứng dụng web. Hoạt
động bên trong của một ứng dụng lai tương tự như một ứng dụng web, nhưng nó được cài
đặt như một ứng dụng gốc. Các ứng dụng lai có quyền truy cập vào API thiết bị nội bộ,
có nghĩa là chúng có thể sử dụng các tài nguyên như máy ảnh, lưu trữ và GPS. Instagram
là một ví dụ điển hình của ứng dụng lai.
Các ứng dụng lai được xây dựng với HTML và CSS. Các lập trình viên tạo một cơ sở mã,
sau đó thực hiện các thay đổi nhỏ để điều chỉnh ứng dụng theo từng nền tảng. Các hybrid
app thường chạy một ứng dụng web thông qua một container hoặc WebView, một trình
duyệt có thể được chứa bên trong một ứng dụng di động.
20
- Xem thêm -