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

Bài đăng

Tự học Solidity bài 33: For Loops. Sử dụng view và vòng lặp để tối ưu gas trong SOLIDITY

Tự học Solidity bài For Loops. vòng lặp trong ngôn ngữ lập trình SOLIDITY Summary for English Visiter function getEvens() pure external returns(uint[] memory) { uint[] memory evens = new uint[](5); uint counter = 0; for (uint i = 1; i <= 10; i++) { if (i % 2 == 0) { evens[counter] = i; counter++; } } return evens; } //This function will return an array with the contents [2, 4, 6, 8, 10]. Sử dụng view và vòng lặp để tối ưu gas trong SOLIDITY Quay lại ví dụ những thây ma zombie của chúng ta, chúng ta không thể lưu trữ zombie cho riêng mỗi chủ sở hữu thành một mảng riêng vì như vậy rất tốn gas. Đặc biệt là khi có thao tác chuyển đổi zombie từ chủ sở hữu A sang chủ sở hữu B. Như thế sẽ phát sinh số lượng công việc gồm 3 bước: 1. Chuyển zombie đến mảng zombie của chủ sở hữu mới.  Xóa thây ma khỏi mảng zombie chủ sở hữu cũ.  2. Di chuyển các thây ma trong bộ sưu tập zombie của chủ sở hữu cũ (để để lấp vào chỗ trống zombie chuyển đi) và sau đó giảm độ dài

Solidity Web3 bài 32: View Functions không tốn GAS khi gọi từ bên ngoài hợp đồng. Tối ưu gas trong SOLIDITY

View Functions Tự học Solidity bài 32: View Functions không tốn GAS khi gọi từ bên ngoài hợp đồng. Tối ưu gas trong SOLIDITY Summary for English Visiter 1. view functions don't cost any gas when they're called externally by a user. 2. One of the more expensive operations in Solidity is using storage — particularly writes. function getArray() external pure returns(uint[] memory) { // Instantiate a new array in memory with a length of 3 uint[] memory values = new uint[](3); // Put some values to it values[0] = 1; values[1] = 2; values[2] = 3; return values; } Tâm sự chút :) Sau bài học này chúng ta sẽ dễ dàng phân biệt được khi nào tốn GAS và khi nào thì không. Nếu một chức năng chỉ đọc dữ liệu trên blockchain thì nó sẽ không tốn GAS, những chức năng có ghi dữ liệu vào block và đồng bộ tât cả các khối khác trên blockchain thì nó phải mất phí GAS. Chính vì việc đọc dữ liệu chuỗi trên blockchain không mất phí GAS nên mới có những trang web tra cứu chuỗi khối mà chún

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