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

Bài đăng

Hiển thị các bài đăng có nhãn Tự học lập trình web3 Solidity

Tự học Solidity bài 42: Comments. Viết chú thích trong ngôn ngữ lập trình SOLIDITY

Comments Solidity  Viết chú thích trong ngôn ngữ lập trình SOLIDITY Cú pháp cho bình luận Bình luận trong Solidity cũng giống như JavaScript. // Đây là một một dòng nhận xét. Nó là một ghi chú cho bản thân (hoặc cho người khác) Chỉ cần thêm đôi // vào bất kỳ đâu và bạn đang bình luận. Nó rất dễ dàng mà bạn nên làm nó mọi lúc. Nhưng tôi nghe bạn - đôi khi một dòng là không đủ. contract TuHocSolidityCom { /* Đây là một bình luận nhiều dòng. Tôi muốn cảm ơn tất cả các bạn những người đã dành thời gian của bạn để thử khóa học lập trình này. Tôi biết nó miễn phí cho tất cả các bạn, và nó sẽ miễn phí mãi mãi, nhưng chúng tôi vẫn làm tất cả sức mình để làm khoá học này tốt nhất có thể. Biết rằng đây vẫn là bước khởi đầu của sự phát triển Blockchain. Chúng tôi đã tiến rất xa nhưng có rất nhiều cách để thực hiện nó. */ } Đặc biệt, bạn nên chú thích code của mình để giải thích chức năng hoạt động của một hàm trong hợp đồng của bạn. Bằng cách này, một nhà phát triể

Tự học Solidity bài 41: SafeMath Library. An toàn dữ liệu trong ngôn ngữ lập trình SOLIDITY

SafeMath Library Tự học Solidity bài 41: Thư viện SafeMath. An toàn dữ liệu trong ngôn ngữ lập trình SOLIDITY Code đầy đủ của SafeMath library SafeMath { function mul ( uint256 a, uint256 b ) internal pure returns ( uint256 ) { if (a == 0 ) { return 0 ; } uint256 c = a * b; assert (c / a == b); return c; } function div ( uint256 a, uint256 b ) internal pure returns ( uint256 ) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub ( uint256 a, uint256 b ) internal pure returns ( uint256 ) { assert (b <= a); return a - b; } function add ( uint256 a, uint256 b ) internal pure returns ( uint256 ) { uint256 c = a + b; assert (c >= a); return c; } } Đầu tiên chúng ta có từ khóa library  các thư viện tương tự như các hợp đồng

Tự học Solidity bài 39: ERC721 Transfer Logic - Logic chuyển đổi chủ sở hữu trong ERC21 ngôn ngữ SOLIDITY

 ERC721 Transfer Logic Tự học Solidity: Logic chuyển đổi chủ sở hữu trong ERC21 ngôn ngữ SOLIDITY Logic chuyển đổi chủ sở hữu Bây giờ chúng ta sẽ tiếp tục triển khai ERC721 của mình bằng cách xem xét việc chuyển quyền sở hữu từ người này sang người khác. Lưu ý rằng thông số ERC721 có 2 cách khác nhau để chuyển mã thông báo: function transferFrom(address _from, address _to, uint256 _tokenId) external payable; Cách đầu tiên là chủ sở hữu mã thông báo gọi  transferFrom  với địa chỉ của anh ta là tham số  _from , địa chỉ anh ta muốn chuyển đến làm tham số  _to  và  _tokenId  của mã thông báo mà anh ta muốn chuyển. và function approve(address _approved, uint256 _tokenId) external payable; function transferFrom(address _from, address _to, uint256 _tokenId) external payable; Cách thứ hai là chủ sở hữu mã thông báo gọi đến hàm approve xin chấp thuận trước với địa chỉ mà anh ta muốn chuyển đến và _tokenID . Sau đó thì Contract sẽ ghi nhớ địa chỉ của một hoặc nhiều địa chỉ được chấp thuận lấy mã

Tự học Solidity bài 36: Random Numbers safely. Tại sao tạo số ngẫu nhiên trong SOLIDITY lại không an toàn?

Random Numbers Safely.  Tự học Solidity bài 36: Tại sao tạo số ngẫu nhiên trong SOLIDITY lại không an toàn? Trong bài học trước chúng ta đã được giới thiệu về việc tạo số ngẫu nhiên trong SOLIDITY, tuy nhiên tôi cũng có ghi chú là việc tạo số ngẫu nhiên như vậy là không an toàn. Trong bài học này chúng ta cùng tìm hiêu tại sao nó lại không an toàn nhé :) Tạo số ngẫu nhiên trong SOLIDITY Nguồn ngẫu nhiên tốt nhất mà chúng ta có trong ngôn ngữ lập trình Solidity là hàm băm keccak256 . Chúng ta có thể làm như sau để tạo một số ngẫu nhiên từ 1 đến 100: uint randNonce = 0 ; uint random = uint ( keccak256 ( abi . encodePacked ( now , msg . sender , randNonce))) % 100 ; randNonce++; uint random2 = uint ( keccak256 ( abi . encodePacked ( now , msg . sender , randNonce))) % 100 ; Đầu vào của chúng ta sẽ lấy: dấu thời gian của now , msg.sender và một biến integer nonce tăng dần (một số chỉ được sử dụng một lần, vì vậy chúng ta không chạy cùng một hàm băm với các tham số đầu vào giống nhau

Tự học Solidity bài 34: Payable functions of Solidity. Hàm thanh toán - code một functions mà người dùng phải trả ETH để gọi hàm như thế nào?

Payable functions of Solidity.  Tự học Solidity. Hàm thanh toán.  Code một functions mà người dùng phải trả ETH để gọi hàm như thế nào?  Một số định nghĩa functions mà chúng ta đã được học  Chúng ta có các công cụ sửa đổi khả năng hiển thị của functions: Kiểm soát khi nào và ở đâu hàm có thể được gọi hàm đó như:  - private có nghĩa là nó chỉ có thể được gọi từ các hàm khác bên trong hợp đồng. -  internal  giống như private nhưng cũng có thể được gọi bằng các hợp đồng kế thừa. - external  chỉ có thể được gọi là bên ngoài hợp đồng. -  public  có thể được gọi ở bất cứ đâu, cả bên trong và bên ngoài hợp đồng. Chúng ta cũng có các công cụ sửa đổi trạng thái, cho chúng ta biết cách hàm tương tác với BlockChain: - view cho chúng ta biết rằng bằng cách chạy hàm, sẽ không có dữ liệu nào được lưu / thay đổi.  - pure cho chúng ta biết rằng hàm không chỉ không lưu bất kỳ dữ liệu nào vào blockchain mà còn không đọc bất kỳ dữ liệu nào từ blockchain.  Cả hai đều không tốn gas nếu gọi từ bên ngoài t

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