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;
}
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úng ta hay dùng (nếu bạn là một người tham gia vào thị trường tiền điện tử thì không còn lạ gì những trang tra cứu này:
- Tra cứu Bitcoin: https://www.blockchain.com/explorer
- Tra cứu Ethereum: https://etherscan.io
Và bây giờ chúng ta đi vào bài học nhé :)
View Functions không tốn GAS
Các chức năng chỉ xem view sẽ không tốn phí gas khi gọi chúng từ bên ngoài hợp đồng.
Điều này là do các chức năng xem không thay đổi bất kỳ điều gì trên blockchain - chúng chỉ đọc dữ liệu. Vì vậy, việc đánh dấu một chức năng bằng chế độ xem nói với web3.js rằng nó chỉ cần truy vấn nút Ethereum cục bộ của bạn để chạy chức năng và nó không tạo một giao dịch trên blockchain (sẽ cần phải chạy trên mọi nút đơn lẻ và chi phí gas).
Lưu ý: Nếu một chức năng xem được gọi nội bộ từ một chức năng khác trong cùng một hợp đồng mà không phải là một chức view functions, thì nó vẫn sẽ tốn phí gas. Điều này là do chức năng khác đó tạo ra một giao dịch trên Ethereum và sẽ vẫn cần được xác minh từ mọi nút. Vì vậy, các chức năng xem chỉ miễn phí khi chúng được gọi ra bên ngoài hợp đồng.
Lưu trữ trong Storage thì tốn GAS
Khai báo mảng trong bộ nhớ
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;
}
Thực hành luôn cho nhớ lâu bạn nhé
Nếu bạn chưa biết cách TẠO FILE, COMPILER và DEPLOY thì hãy xem lại trong bài giới thiệu nhé. Có hướng dẫn chi tiết ở đó.HỌC TỪ ĐẦU: BÀI SỐ 1