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

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

Tự học Solidity bài 23: Xử lý hàm có nhiều giá trị trả về Multiple Return Values trong ngôn ngữ lập trình Solidity.

Multiple Return Values Xử lý hàm có nhiều giá trị trả về Multiple Return Values trong ngôn ngữ lập trình Solidity. Summary for English Visiter function multipleReturns() internal returns(uint a, uint b, uint c) { return (1, 2, 3); } function processMultipleReturns() external { uint a; uint b; uint c; // get all A,B,C (a, b, c) = multipleReturns(); } function getLastReturnValue() external { uint c; (,,c) = multipleReturns(); //only C } Thank you! Khác với các ngôn ngữ lập trình mà ta đã quen thuộc, ngôn ngữ solidity hỗ trợ nhiều giá trị trả về trong một hàm. Vậy làm cách nào để chúng ta có thể lấy được các giá trị trả về mong muốn trong một tập các dữ liệu được returns? Để trả lời cho câu hỏi này chúng ta hãy tìm hiểu bài học thứ 23 này nhé. Xử lý nhiều giá trị trả về Hàm getKitty này là ví dụ đầu tiên mà chúng tôi thấy rằng trả về nhiều giá trị. Hãy xem cách mà chúng ta lấy dữ liệu trả về của hàm: function multipleReturns ( ) internal returns ( uint a, uint b, u

Tự học Solidity bài 22: Sử dụng Interface trong ngôn ngữ lập trình Solidity

Sử dụng Interface Trong ngôn ngữ lập trình Solidity. Trong khoá học online miễn phí Tự học lập trình web3 - Tự học ngôn ngữ lập trình Solidity. Summary for English Visiter contract NumberInterface { function getNum(address _myAddress) public view returns (uint); } contract MyContract { address NumberInterfaceAddress = 0xab38... // Address FavoriteNumber contract on ETH blockchain NumberInterface numberContract = NumberInterface(NumberInterfaceAddress); // `numberContract` = contract FavoriteNumber function someFunction() public { // Call `getNum` from contract: uint num = numberContract.getNum(msg.sender); } } Trong bài học trước chúng ta đã biết rằng, để tương tác với một hợp đồng thông minh khác thì phải xây dựng một bộ xương hợp đồng Interface và khai báo trong đó nhưng hàm của hợp đồng mà chúng ta muốn tương tác vào nội dung Interface. Trong bài học này chúng ta sẽ học các liên kết Interface đó với hợp đồng đang có ở trên blockchain.  Sử dụng Interface Tiếp

Tự học Solidity bài 21: Tương tác với các hợp đồng khác trong ngôn ngữ lập trình Solidity

Interface Solidity Tương tác với các hợp đồng khác trong ngôn ngữ lập trình Solidity.  Trong khoá học online miễn phí Tự học lập trình web3 - Tự học ngôn ngữ lập trình Solidity Summary for English Visiter contract NumberInterface { function getNum(address _myAddress) public view returns (uint); } contract MyContract { address NumberInterfaceAddress = 0xab38... // Address FavoriteNumber contract on ETH blockchain NumberInterface numberContract = NumberInterface(NumberInterfaceAddress); // `numberContract` = contract FavoriteNumber function someFunction() public { // Call `getNum` from contract: uint num = numberContract.getNum(msg.sender); } } Khi chúng ta có nhu cầu tương tác với một hợp đồng khác trên Blockchain, có thể hợp đồng thuộc bạn sở hữu, hoặc là một hợp đồng có sẵn trên blockchain. Vậy với ngôn ngữ solidity chúng ta sẽ phải làm từng bước như nào? Trong bài học này chúng ta cùng tìm hiểu nhé. Tương tác với các hợp đồng khác Để hợp đồng của chúng tôi nó