Bài thực hành
Tự học Solidity bài 25: Thực hành tránh phụ thuộc vào nhưng yếu tố bên ngoài hợp đồng. Trong khoá học Solidity miễn phí online tại website TuHocSolidity.com
Trong ví dụ dưới đây, chúng ta đang Fix cứng địa chỉ ckAddress trong hợp đồng.
contract ZombieFeeding is ZombieFactory {
// 1. Remove this:
address ckAddress = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d;
// 2. Change this to just a declaration:
KittyInterface kittyContract = KittyInterface(ckAddress);
// 3. Add setKittyContractAddress method here
...
}
Để tránh phụ thuộc vào địa chỉ này có vấn đề gì, trong hợp đồng của chúng ta thay vì Fix cứng địa chỉ hợp đồng CryptoKitties vào DApp, chúng ta tạo một hàm setKittyContractAddress cho phép chúng ta 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.
Các bước cần làm là:
1. Xóa dòng mã fix cứng ckAddress.
2. Thay đổi dòng mà chúng ta đã tạo kittyContract để chỉ khai báo biến - tức là không gán nó bằng bất kỳ thứ gì.
3. Tạo một hàm có tên setKittyContractAddress. Nó sẽ nhận một đối số, _address (một địa chỉ) và nó phải là một hàm external.
4. Bên trong hàm, thêm một dòng mã đặt kittyContract bằng KittyInterface (_address).
Lưu ý: Nếu bạn nhận thấy một lỗ hổng bảo mật với chức năng này, đừng lo lắng - chúng ta sẽ sửa nó trong các bài sau.
Và kết quả sau khi sửa đổi là đây.
contract ZombieFeeding is ZombieFactory {
// 1. Remove this:
// 2. Change this to just a declaration:
KittyInterface kittyContract;
// 3. Add setKittyContractAddress method here
function setKittyContractAddress(address _address) external {
kittyContract = KittyInterface(_address);
}
...
}
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 HỌC TRƯỚC: BÀI SỐ 26
HỌC TỪ ĐẦU: BÀI SỐ 1