Chuyển đến nội dung chính

Bài đăng

Đang hiển thị bài đăng từ Tháng 7, 2022

Khoá học Solidity bài 31: Function modifiers arguments. Hàm modifiers có tham số trong SOLIDITY

Function modifiers arguments Tự học Solidity bài 31: Function modifiers với arguments. Hàm modifiers có tham số trong SOLIDITY Summary for English Visiter mapping (uint => uint) public age; modifier olderThan (uint _age, uint _userId) { require(age[_userId] >= _age); _; } function driveCar(uint _userId) public olderThan (16, _userId) { } Bài học này chúng ta tìm hiểu sâu hơn về công cụ sửa đổi hàm Function modifiers. Trước đây ta đã được tìm hiểu về onlyOwner - giúp chúng ta có thêm những quyền hạn riêng cho người sở hữu hợp đồng. Nhưng cũng có rất nhiều trường hợp để chúng ta sử dụng  Function modifiers một cách linh hoạt. Ví dụ như check nhanh những người có đủ 18 tuổi mới được tham gia một chức năng dành cho người lớn chẳng hạn. Nhu cầu như thế thì chúng ta cần truyền tham số cho hàm  modifiers. Và hôm nay chúng ta cùng tim hiểu cách thức triển khai nhé. Công cụ sửa đổi hàm có đối số Chúng ta đi tìm hiểu về ví dụ sau: // A mapping luu tru tuoi mapping ( uint => ui

Tài liệu Solidity bài 30: Structs arguments. Truyền dữ liệu cấu trúc làm đối số trong Solidity.

Structs arguments Tự học Solidity bài 30: Structs arguments. Truyền dữ liệu cấu trúc làm đối số trong Solidity. Trong bài học này chúng ta tiếp tục thực hành về sử dụng các biến về thời gian và tìm hiểu thêm về cách truyền con trỏ biến structs. Ta sẽ đi cụ thể vào ví dụ để hiểu rõ cách sử dụng biến thời gian làm tác vụ đếm thời gian hồi chiêu của zombie. Time Cooldowns Nhiệm vụ bài học: Làm cho Zombies không thể ăn cho đến khi thời gian hồi chiêu của chúng trôi qua Điều này sẽ làm cho zombie không thể  ăn và các chức năng khác của zombie xây dựng sau này cũng sẽ có thời gian hồi chiêu Đầu tiên, chúng ta sẽ xây dựng xác định một số hàm trợ giúp cho phép chúng ta thiết lập và kiểm tra thời gian sẵn sàng của zombie.    function _triggerCooldown(Zombie storage _zombie) internal {     _zombie.readyTime = uint32(now + cooldownTime);   }   function _isReady(Zombie storage _zombie) internal view returns (bool) {       return (_zombie.readyTime <= now);   } Truyền cấu trúc làm đối số Bạn có

Tự học Solidity bài 29: Time Units. Đơn vị thời gian trong Solidity

Time Units Solidity Tự học Solidity bài 29: Time Units. Đơn vị thời gian trong Solidity Summary for English Visiter The variable now will return the number of seconds that have passed since January 1st 1970. Solidity also contains the time units seconds, minutes, hours, days, weeks and years. uint lastUpdated; function updateTimestamp() public { lastUpdated = now ; } // called, `false` if 5 minutes have not passed function fiveMinutesHavePassed() public view returns (bool) { return (now >= (lastUpdated + 5 minutes )); } Thank you! Đặt vấn đề Nếu bạn chơi các trò chơi điện tử thì không còn lạ gì với khái niệm thời gian hồi chiêu, thời gian hồi phục năng lượng để tung ra chiêu thức tiếp theo. Đương nhiên trong trò chơi Zombie mà chúng ta đang xây dựng qua các bài học cũng vậy, các con Zombie không thể cắn liên tục liên tục được, giữa mỗi lần cắn thì phải có một khoảng thời gian hồi chiêu tiêu hoá thức ăn phải không nào. Đặt vấn đề cho bài toán là như vậy thì chúng ta sẽ giải quy

Lean Solidity bài 28: Gas & minimize storage. Phí Gas và lý do phải tối ưu khi lập trình Solidity

Gas & minimize storage Tự học Solidity bài 28: Gas & minimize storage. Phí Gas và lý do phải tối ưu khi lập trình Solidity Summary for English Visiter 1.In Solidity, your users have to pay every time they execute a function on your DApp using a currency called gas. 2. Multiple uints inside a struct, using a smaller-sized uint. Solidity to pack these variables together to take up less storage. struct NormalStruct { uint a; uint b; uint c; } struct MiniMe { uint32 a; uint32 b; uint c; } Thank you! Tâm sự chút Việc tối ưu code là vô cùng cần thiết, nhưng nó lại đặc biệt hơn trong ngôn ngữ SOLIDITY, vì mỗi dòng code của bạn, khi khách hàng chạy một hàm trong Hợp Đồng đều phải trả phí. Và nó được tính bằng tổng các khai báo biến, phép toán logic, hoạt động... trong hàm bạn code. Vậy nếu bạn có thói quen code cho chạy đúng là được thì bây giờ phải rèn thêm thói quen tối ưu code. GAS - nhiên liệu của DApps chạy trên Ethereum Trong Solidity, người dùng của bạn phải trả tiề

Solidity cơ bản bài 27: Function Modifier Solidity. Cân bằng quyền kiểm soát dApp và tính phi tập trung của smart contract

Function Modifier Tự học Solidity bài 27: Cân bằng quyền kiểm soát dApp và tính phi tập trung của smart contract Summary for English Visiter modifier onlyOwner() { require(isOwner()); _; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } //Step code run when call: renounceOwnership 1. require(isOwner()); 2. _; 3. emit OwnershipTransferred(_owner, address(0)); 4. _owner = address(0); Thank you! Tâm sự chút Giang hồ hiểm ác, lòng người khó lường, sau khi học đến đây xong bài học này, điều quan trọng bạn cần phải nhớ là DApp nằm trên Ethereum không có nghĩa là nó phi tập trung - bạn phải thực sự đọc mã nguồn để đảm bảo rằng nó không bị chủ sở hữu kiểm soát đặc biệt. Với tư cách là nhà phát triển, có một sự cân bằng giữa việc duy trì quyền kiểm soát DApp để bạn có thể sửa các lỗi tiềm ẩn và xây dựng một nền tảng mà người dùng của bạn có thể tin tưởng để bảo mật dữ liệu của họ. Sự kế thừa Tro

Tự học Solidity bài 26: Ownable Contracts - Chủ sở hữu Hợp đồng có các quyền đặc biệt

Ownable Contracts   Tự học Solidity bài 26: Ownable Contracts - Chủ sở hữu Hợp đồng có các quyền đặc biệt Trong ví dụ ở bài trước ( bài 25 ), bạn có phát hiện ra lỗ hổng bảo mật không? setKittyContractAddress  được khai báo là external , tức là bất kỳ ai cũng có thể gọi nó! Điều đó có nghĩa là bất kỳ ai cũng có thể thay đổi địa chỉ của hợp đồng CryptoKitties trong hợp đồng  và phá vỡ ứng dụng của chúng ta! Chúng ta muốn có chức năng để cập nhật địa chỉ này trong hợp đồng của mình, nhưng chúng ta lại không muốn tất cả mọi người có thể cập nhật nó. Để xử lý những trường hợp như thế này thì chúng ta tạo các hợp đồng Có thể sở hữu Ownable Contracts  - nghĩa là hợp đồng này có một chủ sở hữu (là bạn) có các quyền đặc biệt. Hợp đồng có thể sở hữu của OpenZeppelin Dưới đây là hợp đồng có thể sở hữu được lấy từ thư viện OpenZeppelin Solidity. OpenZeppelin là một thư viện các hợp đồng thông minh an toàn và được cộng đồng kiểm duyệt mà bạn có thể sử dụng trong DApp của riêng mình. Sau bài học nà

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

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

Tự học Solidity bài 24: Tính bất biến của hợp đồng thông minh khi đã xuất bản lên Blockchain

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! Ngôn ngữ lập trình Solidity khá giống với các ngôn ngữ khác như JavaScript, Kotlin. Nhưng có một số điểm mà trong đó Ethereum DApps thực sự khá khác so với các ứng dụng bình thường. 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. f unction   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