Tính bất biến
Tự học Solidity. Tính bất biến của hợp đồng thông minh khi đã xuất bản lên Blockchain. Trong khoá học Solidity miễn phí online tại website TuHocSolidity.com
Từ bài học nay trở đi sẽ là những kiến thức nâng cao trong khoá học: Tự học SOLIDITY của bạn!
Như trong ví dụ sau đây là cách hàm IF của Solidity hoạt động, rất giống JS phải không nào.
function eatBLT(string memory sandwich) public {
if (keccak256(abi.encodePacked(sandwich)) == keccak256(abi.encodePacked("BLT"))) {
eat();
}
}
Điểm khác biệt đó là: sau khi bạn triển khai hợp đồng lên mạng lưới của Ethereum, hợp đồng đó là bất biến, nó không bao giờ có thể được sửa đổi hoặc cập nhật lại!!!
Code mà bạn triển khai trong hợp đồng sẽ ở đó vĩnh viễn trên blockchain. Đây là một lý do tại sao bảo mật là một mối quan tâm lớn như vậy trong Solidity. Nếu có sai sót trong mã hợp đồng của bạn, không có cách nào để bạn sửa chữa nó sau này. Bạn sẽ phải yêu cầu người dùng của mình bắt đầu sử dụng một địa chỉ hợp đồng thông minh khác nếu có bản sửa lỗi.
Nhưng đây cũng là một tính năng của hợp đồng thông minh và luật chơi là vậy. Nếu bạn đọc mã của một hợp đồng thông minh và sử dụng nó, bạn có thể chắc chắn rằng mỗi khi bạn gọi một hàm, nó sẽ thực hiện chính xác những gì mã đó sẽ làm. Không ai sau này có thể thay đổi chức năng đó và mang lại cho bạn kết quả gây ra lỗi.
Phụ thuộc bên ngoài
Trong ví dụ trước, chúng ta đã fix cứng địa chỉ hợp đồng CryptoKitties vào DApp của mình. Nhưng điều gì sẽ xảy ra nếu hợp đồng CryptoKitties có lỗi và ai đó đã phá hủy nó?
Điều đó khó xảy ra, nhưng nếu điều này xảy ra, nó sẽ khiến DApp của chúng ta bị lỗi và hoàn toàn vô dụng - DApp của chúng ta sẽ trỏ đến một địa chỉ được fix cứng không còn trả lại bất kỳ con mèo nào nữa. Các thây ma của chúng ta sẽ không thể ăn mèo, và chúng ta sẽ không thể sửa đổi hợp đồng của mình để sửa chữa nó.
Vì lý do này, bạn phải code các chức năng cho phép bạn cập nhật các phần chính của DApp.
Ví dụ: thay vì fix cứng địa chỉ hợp đồng CryptoKitties vào DApp, chúng ta nên có một hàm setKittyContractAddress cho phép chúng tôi thay đổi địa chỉ này trong tương lai trong trường hợp có điều gì đó xảy ra với hợp đồng CryptoKitties :)
Thực hành luôn cho nhớ lâu bạn nhé
Nếu bạn chưa biết cách TẠO FILE, COMPILER và DEPLOY thì hãy xem lại trong bài giới thiệu nhé. Có hướng dẫn chi tiết ở đó.
BÀI TIẾP THEO: BÀI SỐ 25
HỌC TỪ ĐẦU: BÀI SỐ 1