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

Bài đăng

Tự học lập trình Web3: Talking to Contracts: Nói chuyện với hợp đồng trong khoá tự học Solidity

Talking to Contracts Tự học lập trình Web3 : Talking to Contracts: Nói chuyện với hợp đồng trong khoá tự học Solidity Nói chuyện với hợp đồng thông minh bằng Javascript Bây giờ chúng ta đã khởi tạo Web3.js với nhà cung cấp Web3 của MetaMask, hãy thiết lập nó để nói chuyện với hợp đồng thông minh của chúng ta. Web3.js sẽ cần 2 thứ để trao đổi với hợp đồng của bạn: địa chỉ hợp đồng và ABI của nó. Địa chỉ hợp đồng Sau khi bạn viết xong hợp đồng thông minh của mình, bạn sẽ biên dịch nó và triển khai nó lên Ethereum.  Sau khi bạn triển khai hợp đồng của mình, nó sẽ nhận được một địa chỉ cố định trên Ethereum, nơi nó sẽ tồn tại mãi mãi. Nếu bạn nhớ lại từ học trước, địa chỉ của hợp đồng CryptoKitties trên mạng chính Ethereum là 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d . Bạn sẽ cần sao chép địa chỉ này sau khi triển khai để trao đổi với hợp đồng thông minh của mình. Hợp đồng ABI Một điều kiện cần nữa để Web3.js có thể trao đổi với hợp đồng thông minh là ABI của nó. ABI là viết tắt của

Tự học lập trình Web3: Sử dụng Web3 Providers: Infura và Metamask trong khoá tự học Solidity

Infura và Metamask   Tự học lập trình Web3: Sử dụng Web3 Providers: Infura và Metamask trong khoá tự học Solidity Bây giờ chúng ta đã có Web3.js trong dự án của mình, hãy khởi tạo nó và nói chuyện với blockchain. Nhưng để nói chuyện với blockchain thì điều đầu tiên chúng ta cần là một Nhà cung cấp Web3 (Web3 Provider) Hãy nhớ rằng, Ethereum được tạo thành từ các nút mà tất cả các nút đó đều giống hệt nhau cùng một dữ liệu. Việc khai báo Web3 Provider trong Web3.js giúp cho code của chúng ta biết nút nào mà chúng ta sẽ nói chuyện để xử lý các lần đọc và ghi lên bloackchain ETH. Nó cũng giống như khai báo URL của máy chủ web từ xa cho các lệnh gọi API của bạn (trong một ứng dụng web truyền thống). Bạn cũng có thể lưu trữ nút Ethereum của riêng mình với tư cách là nhà cung cấp. Tuy nhiên, có một dịch vụ của bên thứ ba giúp công việc của bạn dễ dàng hơn, vì vậy bạn không cần phải duy trì nút Ethereum của riêng mình để cung cấp DApp cho người dùng của bạn. Infura Infura là một dịch vụ cung

Tự học lập trình Web3: Web3.js Giới thiệu về thư viện javascript Web3. Kết hợp Javascript với ngôn ngữ SOLIDITY

Tự học lập trình Web3 Tự học Solidity - Giới thiệu về thư viện Web3.js  Kết hợp Javascript với ngôn ngữ SOLIDITY Web3.js là gì? Hãy nhớ rằng, mạng lưới blockchain của Ethereum được tạo thành từ các nút, mỗi nút chứa một bản sao của chuỗi khối. Khi bạn muốn gọi một hàm trên hợp đồng thông minh, bạn cần truy vấn một trong các nút này và cung  cấp cho nó biết: Địa chỉ của hợp đồng thông minh. Chức năng bạn muốn gọi. Các biến bạn chuyển cho hàm đó. Các nút Ethereum chỉ nói một ngôn ngữ gọi là JSON-RPC, ngôn ngữ này không thể đọc được. Một truy vấn để thông báo cho nút bạn muốn gọi một hàm trên hợp đồng trông giống như sau: Và ... Chúc bạn may mắn khi viết được tất cả các lệnh gọi hàm của bạn theo cách này +_+ // Yeah... Good luck writing all your function calls this way! // Scroll right ==> { "jsonrpc" : "2.0" , "method" : "eth_sendTransaction" , "params" :[{ "from" : "0xb60e8dd61c5d32be8058bb8eb970870f07233155" , &

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à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ụ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ặc nhiều địa chỉ được chấp thuận lấy mã