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

Bài đăng

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

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 ...

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...

Tài liệu lập trình Solidity bài 40: Overflows & Underflows. Ngăn chặn lỗi tràn dữ liệu trong SOLIDITY

Overflows & Underflows Tài liệu lập trình Solidity bài 40: Overflows & Underflows. Ngăn chặn lỗi tràn dữ liệu trong SOLIDITY Lỗi tràn dữ liệu trong SOLIDITY Giả sử chúng ta có một uint8, chỉ có thể có 8 bit. Điều đó có nghĩa là số lớn nhất chúng ta có thể lưu trữ là số nhị phân 11111111 (hoặc ở dạng thập phân, 2 ^ 8 - 1 = 255). Hãy xem đoạn mã sau. Kết  quả của số uint 8 number = 255 ; number++; Trong trường hợp này, chúng tôi đã làm cho nó bị tràn. Vì thế biến số number này tràn ngược trở lại với giá trị bằng 0 mặc dù chúng tôi đã tăng nó lên. (Nếu bạn thêm 1 vào nhị phân 11111111, nó sẽ đặt lại về 00000000, giống như đồng hồ đi từ 23:59 đến 00:00). Một lỗi tràn dưới cũng tương tự, nếu bạn trừ 1 từ uint8 bằng 0, thì nó sẽ bằng 255 (bởi vì uints không có dấu và không thể âm). Mặc dù chúng ta không sử dụng uint8 ở đây và có vẻ như uint256 sẽ không bị tràn khi tăng 1 mỗi lần (2 ^ 256 là một con số thực sự lớn), nhưng vẫn tốt để đưa các biện pháp bảo vệ vào hợp đồng để ứng dụ...

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...

Tự học Solidity bài 38: ERC721 Standard và Multiple Inheritance kế thừa từ nhiều hợp đồng trong SOLIDITY

Multiple Inheritance  Tự học Solidity: ERC721 Standard và Multiple Inheritance kế thừa từ nhiều hợp đồng trong SOLIDITY Trong bài học trước chúng ta đã tìm hiểu về Token của ETH và các tiêu chuẩn token như ERC20, ERC721... Trong ví dụ thây ma của chúng ta sẽ tiếp tục làm việc với tiêu chuẩn ERC721 vì 1 thây ma không thể bị chia tách như các đơn vị tiền điện tử. Như vậy tiêu chuẩn ERC721 là phù hợp cho chúng ta phát triển tiếp ví dụ zombie để tiếp tục tự học Solidity và web3. ERC721 Standard  Các token ERC721 không thể hoán đổi cho nhau vì mỗi mã được định nghĩa là duy nhất và không thể phân chia. Bạn chỉ có thể giao dịch chúng theo đơn vị nguyên: là 1 chiếc, 1 cái... và mỗi đơn vị có một ID duy nhất. Vì vậy, đây là những thứ hoàn toàn phù hợp để làm cho NFT giao dịch được. Đây là toàn bộ hợp đồng của ERC721, khi sử dụng bạn chỉ cần thừa kế lại nó: contract ERC721 { event Transfer ( address indexed _from, address indexed _to, uint256 indexed _tokenId ) ; event App...

Tự học Solidity bài 37: Tokens on Ethereum. Tìm hiểu về ERC20 tokens và ERC721 tokens

Tokens on Ethereum  Tự học Solidity bài 37: Tokens on Ethereum. Tìm hiểu về ERC20 tokens và ERC721 tokens Bạn đã từng nghe thấy trên ti vi nói về các đồng tiền  Bitcoin, Ethereum, Polkadot.... thì trong tiền điện tử sẽ chia thành hai loại: một là các đồng coin thường được khai thác bằng cách đào (vị dụ đào bitcoin), loại thứ hai là một mã thông báo dạng token. Trong hệ sinh thái của Ethereum bạn có thể đã nghe mọi người nói về các mã thông báo token - cụ thể là mã thông báo ERC20 là phổ biến nhất, phần lớn các tokens ở định dạng ERC20 này. Mã thông báo tokens trên Ethereum về cơ bản chỉ là một hợp đồng thông minh (có thể code bằng SOLIDITY )  tuân theo một số quy tắc chung - cụ thể là nó thực hiện một bộ chức năng tiêu chuẩn mà tất cả các hợp đồng mã thông báo khác chia sẻ, chẳng hạn như transferFrom (address _from, address _to, uint256 _tokenId) và balanceOf (address _owner). Bên trong hợp đồng thông minh thường có một   mapping check số dư: mapping(address => ui...

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 n...

Khoá học Solidity bài 35: Withdraws & Transfer. Thiết lập cách rút tiền và chuyển tiền từ hợp đồng thông minh trong SOLIDITY

Withdraws & Transfer Solidity Khoá học Solidity . Thiết lập cách rút tiền và chuyển tiền từ hợp đồng thông minh trong SOLIDITY Thiết lập cách rút tiền và chuyển tiền từ hợp đồng thông minh trong SOLIDITY Trong bài học trước, chúng ta đã học cách gửi Ether vào một hợp đồng. Vậy điều gì sẽ xảy ra sau khi bạn gửi nó? Sau khi bạn gửi Ether đến một hợp đồng, nó sẽ được lưu trữ trong tài khoản Ethereum của hợp đồng và nó sẽ bị mắc kẹt ở đó - trừ khi bạn thêm một chức năng để rút Ether khỏi hợp đồng. Vì thế khi lập trình hợp đông thông minh mà có chức năng thanh toán, thì đừng quên chức năng để rút tiền ra khỏi hợp đồng nhé, không là mất oan vài nghìn ETH mà không có cách nào lấy lại được đâu :)) Bạn có thể viết một hàm để rút Ether khỏi hợp đồng như sau: contract GetPaid is Ownable { function withdraw ( ) external onlyOwner { address payable _owner = address ( uint160 (owner())); _owner. transfer ( address ( this ). balance ); } } Lưu ý rằng chúng ta đang sử dụng own...

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ừ blockc...