1. Tổng quan về Blockchain và Kaia
1.1. Blockchain là gì?
Blockchain là một sổ cái kỹ thuật số phân tán và bất biến, ghi lại tất cả các giao dịch xảy ra trên mạng. Mỗi khối trong chuỗi chứa một số lượng giao dịch được mã hóa, và khi một khối mới được tạo ra, nó được liên kết chặt chẽ với khối trước đó, tạo thành một chuỗi liên tục không thể bị thay đổi mà không bị phát hiện. Điều này đảm bảo tính minh bạch và bảo mật cao, vì thông tin không thể dễ dàng bị thay đổi hoặc xóa mà không có sự đồng thuận của mạng lưới, khiến blockchain trở thành công nghệ nền tảng cho các ứng dụng như tiền tệ, điện tử và hợp đồng thông minh.
1.2. Thỏa thuận Kaia
Cơ chế đồng thuận: Kaia sử dụng thuật toán Istanbul BFT, một phiên bản cải tiến của PBFT (Practical Byzantine Fault Tolerance) được tối ưu hóa cho mạng blockchain.
Mục tiêu:
- Khả năng xử lý 4.000 giao dịch mỗi giây.
- Khả năng hoàn tất giao dịch ngay lập tức.
- Thời gian tạo khối: 1 giây.
- Hỗ trợ hơn 50 nút đồng thuận tham gia vào quy trình.
Loại nút:
- CN (Consensus Node): Được quản lý bởi CCO (Core Cell Operator) và chịu trách nhiệm tạo các khối.
- PN (Proxy Node): Cung cấp giao diện cho mạng.
- EN (Endpoint Node): Cung cấp dịch vụ cho người dùng cuối.
Quy trình đồng thuận:
Khi một giao dịch được gửi đến CN (Hội đồng) từ các PN, VRF (Hàm ngẫu nhiên có thể kiểm chứng) Hàm này được sử dụng để chọn ngẫu nhiên 1 Ủy ban gồm 4 CN. 1 CN sẽ tiếp tục được chọn ngẫu nhiên để tạo thành một khối cùng với các quan sát của 3 CN khác. Khi một khối được tạo ra, 2/3 số CN trong Hội đồng sẽ phải ký vào khối để đạt được sự đồng thuận.
1.3. KLVM
KLVM, viết tắt của Máy ảo KaiaĐây là một môi trường máy ảo phi tập trung chạy trên mạng blockchain Kaia. KLVM Cho phép thực thi các hợp đồng thông minh, là những chương trình tự động thực hiện các giao dịch hoặc hành động cụ thể dựa trên các điều kiện được lập trình sẵn. Hợp đồng thông minh được viết bằng các ngôn ngữ lập trình như Solidity, sau đó được biên dịch thành... mã byte cái đó KLVM Có thể hiểu và thực hiện. KLVM tương thích với Ethereum EVMVì vậy, nó hoàn toàn hỗ trợ các công cụ phát triển hiện tại. mã lệnhvà mã nguồn.
1.4. Hợp đồng thông minh là gì?
MỘT hợp đồng thông minh Chương trình máy tính là một loại chương trình được thiết kế để tự động thực thi, điều khiển hoặc xác nhận các sự kiện và hành động theo các điều khoản được lập trình sẵn. Chúng tồn tại và hoạt động trên... KaiaĐảm bảo tính minh bạch và bảo mật cao vì chúng không thể bị sửa đổi sau khi đã triển khai. Hợp đồng thông minh Giúp tự động hóa các quy trình, giảm thiểu nhu cầu về các bên trung gian và giảm thiểu rủi ro gian lận hoặc sai sót. Chúng rất linh hoạt và có thể được sử dụng trong nhiều lĩnh vực, từ tài chính và bảo hiểm đến quản lý chuỗi cung ứng và bất động sản. Sự phát triển của hợp đồng thông minh Nó đang mở ra một kỷ nguyên mới trong cách chúng ta tương tác và thực hiện các giao dịch kỹ thuật số, mang lại hiệu quả, tính minh bạch và quyền tự chủ cao hơn cho người dùng.
1.5. Giao dịch và cách ký kết giao dịch
Trong mạng lưới Kaia, "giao dịch" là hành động do người dùng thực hiện để chuyển KLAY (token gốc của Kaia) hoặc các token dựa trên Kaia từ địa chỉ này sang địa chỉ khác, hoặc để tương tác với hợp đồng thông minh. Mỗi giao dịch bao gồm thông tin như địa chỉ nguồn, địa chỉ đích, số tiền chuyển, phí giao dịch (gas) và dữ liệu tùy chọn nếu giao dịch tương tác với hợp đồng thông minh.
Khi thực hiện giao dịch trên Kaia, việc ký giao dịch bằng ví tiền điện tử như MetaMask là một bước quan trọng để đảm bảo an toàn và bảo mật. Cụ thể, quy trình này diễn ra như sau:
- Tạo giao dịch: Người dùng nhập thông tin cần thiết cho giao dịch, chẳng hạn như địa chỉ người nhận, số tiền.
KLAYhoặc token để chuyển khoản, và phí gas. Ví dụ, trong MetaMask, người dùng có thể điều chỉnh mức phí gas để giao dịch được xử lý nhanh hơn. - Ký giao dịch: Sau khi thông tin giao dịch được nhập, ví sẽ tạo ra một giao dịch kỹ thuật số được ký bằng khóa riêng của người dùng. Việc ký giao dịch này chứng minh rằng người dùng có quyền sử dụng địa chỉ mà từ đó giao dịch được gửi đi mà không cần tiết lộ khóa riêng của họ.
- Gửi giao dịch: Giao dịch đã ký sau đó được gửi đến mạng Kaia thông qua một ví điện tử như Kaikas hoặc MetaMask. Mạng lưới sẽ xác nhận giao dịch và thực hiện nó, chuyển tiền hoặc tương tác với hợp đồng thông minh theo yêu cầu.
- Xác nhận giao dịch: Cuối cùng, giao dịch sẽ được mạng lưới xác nhận và thông tin về giao dịch sẽ được ghi lại trên blockchain. Người dùng có thể theo dõi trạng thái giao dịch thông qua các công cụ trực tuyến như Etherscan.
Quá trình này không chỉ giúp đảm bảo các giao dịch được thực hiện một cách an toàn mà còn giúp ngăn chặn việc giả mạo hoặc thay đổi trái phép các giao dịch, nhờ vào tính minh bạch và bất biến của blockchain.
2. Cấu trúc tập tin Solidity
2.1. Mã định danh giấy phép SPDX
Tất cả các hợp đồng Solidity đều phải có tuyên bố Giấy phép ở dòng đầu tiên.
// SPDX-License-Identifier: MITDanh sách các giấy phép từ kho lưu trữ SPDX: https://spdx.org/licenses/
2.2. Nguyên tắc ứng xử
thực dụng là từ khóa được sử dụng để khai báo phiên bản trình biên dịch của Solidity. thực dụng Chỉ áp dụng cho tệp cục bộ hiện tại, vì vậy bạn phải thêm thực dụng Áp dụng cho tất cả các tệp trong thư mục dự án.
// SPDX-Mã định danh giấy phép: MIT
pragma solidity 0.8 .20 ;Bạn có thể sử dụng ^ dấu hoặc toán tử so sánh <, <=, >, >= kết hợp với khai báo của trình biên dịch.
// SPDX-Mã định danh giấy phép: MIT
pragma solidity ^ 0.8 .20 ; // sử dụng phiên bản trình biên dịch 0.8.20 trở lên// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0; // use compiler version bigger or equal to 0.4.22 and less than 0.9.02.3. Nhập tệp từ các nguồn khác
Nhập toàn bộ tệp
nhập khẩu "Tên tệp"Nhập tất cả và gán bí danh
import * as symbolName from "Tên tệp" ;Tên nhập khẩu
Tên nhập khẩu Điều này có nghĩa là bạn sẽ chỉ định tên của đối tượng cần nhập từ một tệp khác. Lý do bạn nên sử dụng tùy chọn này là vì nó làm cho mã của bạn rõ ràng hơn.
import {ContractOne as alias, ContractTwo} from "FileName";2.4. Bình luận
Để bình luận, bạn có thể sử dụng // Và /* */
// Chú thích cho 1 dòng.
/* Chú thích cho nhiều dòng */Ngoài ra còn có NatSpec bình luận với /// hoặc /** **/
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;
/// @author The Project Team
/// @title A simple storage example
contract SimpleStorage {
uint storedData;
/// Store `x`.
/// @param x the new value to store
/// @dev stores the number in the state variable `storedData`
function set(uint x) public {
storedData = x;
}
/// Return the stored value.
/// @dev retrieves the value of the state variable `storedData`
/// @return the stored value
function get() public view returns (uint) {
return storedData;
}
}3. Cấu trúc hợp đồng
3.1. Biến trạng thái
Biến trạng thái là các biến được khai báo ở đầu hợp đồng, nằm ngoài phạm vi của biến cục bộ tuyên bố trong chức năng.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;
contract SimpleStorage {
uint storedData; // State variable
// ...
}3.2. Chức năng
Chức năng là các hàm được khai báo để thực hiện các phép tính, thay đổi giá trị của biến, v.v. Một ví dụ chức năng được nêu bên dưới.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.1 <0.9.0;
contract SimpleAuction {
function bid() public payable { // Function
// ...
}
}
// Helper function defined outside of a contract
function helper(uint x) pure returns (uint) {
return x * 2;
}3.3. Các bổ ngữ chức năng
Bộ điều chỉnh chức năng là những tuyên bố cho chức năng để tạo điều kiện cho việc thực hiện các hành động đó chức năng.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;
contract Purchase {
address public seller;
modifier onlySeller() { // Modifier
require(
msg.sender == seller,
"Only seller can call this."
);
_;
}
function abort() public view onlySeller { // Modifier usage
// ...
}
}3.4. Sự kiện
sự kiện Đây là tính năng ghi lại các hoạt động của hợp đồng thông minh. sự kiện Nó thường được sử dụng để xây dựng giao diện người dùng tương tác với hợp đồng thông minh.
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.22;
event HighestBidIncreased(address bidder, uint amount); // Event
contract SimpleAuction {
function bid() public payable {
// ...
emit HighestBidIncreased(msg.sender, msg.value); // Triggering event
}
}3.5. Lỗi
lỗi được sử dụng để thông báo cho người dùng lý do tại sao hành động đó thất bại, và lỗi có mức thấp hơn khí chi phí cao hơn so với việc hoàn trả sợi dây.
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
/// Not enough funds for transfer. Requested `requested`,
/// but only `available` available.
error NotEnoughFunds(uint requested, uint available);
contract Token {
mapping(address => uint) balances;
function transfer(address to, uint amount) public {
uint balance = balances[msg.sender];
if (balance < amount)
revert NotEnoughFunds(amount, balance);
balances[msg.sender] -= amount;
balances[to] += amount;
// ...
}
}3.6. Các loại cấu trúc
cấu trúc được dùng để khai báo một kiểu của sự vật.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;
contract Ballot {
struct Voter { // Struct
uint weight;
bool voted;
address delegate;
uint vote;
}
}3.7. Các kiểu liệt kê
liệt kê được dùng để khai báo một kiểu có giá trị là không thay đổi.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;
contract Purchase {
enum State { Created, Locked, Inactive } // Enum
}