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

Bài đăng

Hiển thị các bài đăng có nhãn Solidity

Tự học Web3: Subscribing to Events. Lắng nghe sự kiện từ một hợp đồng được viết bằng Solidity bằng Web3.js

Subscribing to Events  Tự học Web3: Lắng nghe sự kiện từ một hợp đồng được viết bằng Solidity bằng Web3.js Đăng ký sự kiện Như bạn có thể thấy, việc tương tác với hợp đồng của bạn thông qua Web3.js khá đơn giản - khi bạn đã thiết lập môi trường của mình, việc gọi các hàm và gửi giao dịch không khác gì một API web thông thường. Có một khía cạnh khác mà trong bài giảng ngày hôm nay chúng ta sẽ nghiên cứu: Đăng ký lắng nghe các sự kiện từ hợp đồng Solidity của bạn từ Web3.js Lắng nghe những thây ma mới Nếu bạn nhớ lại từ zombiefactory.sol , chúng ta đã có một sự kiện gọi là NewZombie mà chúng tôi đã bắn mỗi khi một thây ma mới được tạo ra: event NewZombie( uint zombieId , string name , uint dna ) ; Trong Web3.js, bạn có thể đăng ký lắng nghe một sự kiện để nhà cung cấp web3 của bạn sẽ kích hoạt  logic trong mã của bạn mỗi khi nó kích hoạt: cryptoZombies.events.NewZombie() .on( "data" , function ( event ) { let zombie = event . returnValues ; // We can access this event&#

Tự học Web3: Calling Payable Functions gọi hàm Payable từ web3.js đến một hợp đồng được viết bằng Solidity

Calling Payable Functions Tự học Web3 : Calling Payable Functions gọi hàm Payable từ web3.js đến một hợp đồng được viết bằng Solidity Chúng ta sắp đi đến những bài cuối cùng của khoá học Solidity và Web3 miễn phí này rồi. Trong bài hôm nay hãy xem xét một loại hàm khác yêu cầu xử lý đặc biệt trong Web3.js - Payable Functions. Calling Payable Functions Hàm Level Up! Nhớ lại trong ZombieHelper, chúng tôi đã thêm một Payable Functionsđể người dùng có thể lên cấp: function levelUp ( uint _zombieId ) external payable { require ( msg . value == levelUpFee); zombies[_zombieId].level++; } Cách gửi Ether cùng với một chức năng rất đơn giản, với một lưu ý: chúng ta cần chỉ định số tiền cần gửi trong wei, không phải Ether. Wei là gì? Một wei là đơn vị con nhỏ nhất của Ether - có 10 ^ 18 wei trong một ether. Đó là rất nhiều số 0 để đếm - nhưng may mắn là Web3.js có một tiện ích chuyển đổi thực hiện điều này cho chúng ta. // This will convert 1 ETH to Wei web3js.utils. to Wei( "1&quo

Tự học lập trình Web3: Sending Transactions gửi giao dịch bằng web3.js đến một hợp đồng được viết bằng Solidity

Sending Transactions Web3 Tự học lập trình Web3: Sending Transactions gửi giao dịch bằng web3.js đến một hợp đồng được viết bằng Solidity Sending Transactions Bây giờ chúng ta hãy xem xét việc sử dụng các chức năng send để thay đổi dữ liệu trên hợp đồng thông minh. Có một số khác biệt lớn so với các hàm gọi: Gửi một giao dịch yêu cầu địa chỉ từ của người đang gọi hàm (sẽ trở thành msg.sender trong mã Solidity của bạn). Chúng tôi muốn đây là người dùng DApp của chúng tôi, vì vậy MetaMask sẽ bật lên để nhắc họ ký giao dịch. Gửi một giao dịch tốn phí Gas Sẽ có một độ trễ đáng kể kể từ khi người dùng gửi một giao dịch và khi giao dịch đó thực sự có hiệu lực trên blockchain. Điều này là do chúng ta phải đợi giao dịch được đưa vào một khối và thời gian khối cho Ethereum trung bình là 15 giây. Nếu có nhiều giao dịch đang chờ xử lý trên Ethereum hoặc nếu người dùng gửi giá gas quá thấp, giao dịch của chúng tôi có thể phải đợi một số khối để được bao gồm và điều này có thể mất vài phút. Vì vậy

Tự học lập trình Web3: Metamask & Accounts Lấy tài khoản của người dùng trong MetaMask. Khoá học Solidity

Metamask & Accounts  Tự học lập trình Web3 : Metamask & Accounts Lấy tài khoản của người dùng trong MetaMask. Khoá học Solidity Xin chúc mừng, đến bài học thứ 47 này thì bạn đã viết thành công giao diện người dùng để tương tác với hợp đồng thông minh viết bằng Solidity đầu tiên của mình. Bây giờ chúng ta hãy lắp ghép các dữ liệu lại với nhau - giả sử chúng ta muốn trang chủ của ứng dụng của mình hiển thị toàn bộ đội quân thây ma của người dùng đó. Rõ ràng trước tiên chúng ta cần sử dụng hàm getZombiesByOwner(owner) để tra cứu tất cả ID của các thây ma mà người dùng hiện tại sở hữu. Nhưng hợp đồng Solidity của chúng ta đang đợi đầu vào chủ sở hữu là một địa chỉ ETH để truyền vào  Solidity. Làm cách nào chúng ta có thể lấy được địa chỉ ví của người dùng đang sử dụng dApp của chúng ta? Lấy tài khoản của người dùng trong MetaMask MetaMask cho phép người dùng quản lý nhiều tài khoản trong tiện ích mở rộng của họ. Chúng ta có thể xem tài khoản nào hiện đang hoạt động trên biến web3 đ

Tự học lập trình Web3: Calling Contract Functions: Gọi chức trong hợp đồng được code bằng Solidity

Calling Contract Functions Tự học lập trình Web3: Calling Contract Functions: Gọi chức trong hợp đồng. Khoá tự học Solidity cơ bản Calling Contract Functions Hợp đồng của chúng ta đã được thiết lập kết nối với Web3.js xong trong bài học trước! Bây giờ chúng ta có thể sử dụng Web3.js để nói chuyện với nó. Web3.js có hai phương pháp mà chúng tôi sẽ sử dụng để gọi các hàm trong hợp đồng của chúng ta: gọi và gửi. 1. Call Call được sử dụng cho view và pure functions . Nó chỉ chạy trên nút cục bộ và sẽ không tạo ra sự thay đổi trên blockchain. Lưu ý: khi gọi đến  view  và  pure   functions  ta sẽ không thay đổi dữ liệu trên blockchain. Chúng cũng không tốn phí GAS và người dùng sẽ không cần ký giao dịch với MetaMask. Sử dụng Web3.js, bạn sẽ gọi một hàm có tên myMethod với tham số 123 như sau: myContract.methods.myMethod( 123 ). call () 2. Send Send sẽ tạo ra một giao dịch và thay đổi dữ liệu trên blockchain. Bạn sẽ cần sử dụng send cho tất cả cac chức năng không phải là view hoặc  pure

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 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à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 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 => uint256) balances The

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

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