Chương 2: Lập trình BlockChain – Ngôn ngữ lập trình Solidity

Chào bạn, Mình là Danny Dan! Dưới đây mình hướng dẫn từng bước để lập trình Smart Contracts với ngôn ngữ lập trình Solidity:

Đối với bất cứ ai muốn tìm hiểu làm thế nào để tạo DAPPs (ứng dụng phân cấp) hoặc vào được các game ICO, học về Solidity là một yêu cầu bắt buộc. Bài viết sau đây sẽ cung cấp cho bạn một cái nhìn tổng quan cơ bản.

Solidity được phát triển bởi Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai và một số thành viên khác trong Ethereum cho phép viết các hợp đồng thông minh trên nền tảng blockchain giống như Ethereum.

Solidity là một ngôn ngữ được thiết kế gọn gàng với cú pháp rất giống với ECMAScript (Javascript). Có một số điểm chính cần ghi nhớ trong Ethereum Design Rationale, cụ thể là ta sẽ làm việc trong một mô hình stack-and-memory với kích thước từ chỉ dẫn 32 byte. EVM (Máy ảo Ethereum) cho phép truy cập vào chương trình “stack” giống như không gian đăng ký nơi gắn các địa chỉ bộ nhớ nhằm tạo vòng lặp Program Counter (để kiểm soát chương trình tuần tự), “memory” tạm thời có thể mở rộng và “storage” vĩnh viễn được ghi vào blockchain, và quan trọng nhất, EVM đòi hỏi tổng số determinism (thuyết định luận) trong các hợp đồng thông minh.

Vì vậy, trước khi tiếp tục, hãy xem ví dụ về hợp đồng cơ bản của Solidity. (Code được lấy từ github).

Hãy chạy một vòng lặp đơn giản trong Solidity:

contract BasicIterator 
{ 
address creator; // reserve one "address"-type spot 
uint8[10] integers; // reserve a chunk of storage for 10 8-bit unsigned integers in an array 
function BasicIterator() 
{ 
creator = msg.sender;
uint8 x = 0; 
//Section 1: Assigning values
while(x < integers.length) { 
integers[x] = x; 
x++; 
} } 
function getSum() constant returns (uint) { 
uint8 sum = 0; 
uint8 x = 0; 
//Section 2: Adding the integers in an array.
while(x < integers.length) { 
sum = sum + integers[x];
 x++; 
} 
return sum; 
} 
// Section 3: Killing the contract
function kill() 
{ 
if (msg.sender == creator) 
{ 
suicide(creator); 
}
}
}

Bây giờ hãy cùng phân tích nhé:

Phần 1: Chỉ định giá trị

Trong bước đầu tiên, hãy điền vào một mảng được gọi là “integers” trong đó có 10 số nguyên không dấu 8-bit. Điều này sẽ được thực hiện thông qua một vòng lặp while. Hãy xem những gì đang xảy ra bên trong vòng lặp while.

while(x < integers.length) {
integers[x] = x;
x++;
}

Hãy nhớ rằng, chúng ta đã gán giá trị “0” cho số nguyên x. Vòng lặp while đi từ 0 đến integers.length. Integers.length là một hàm trả về dung lượng (capacity) tối đa của mảng. Vì vậy, nếu quyết định rằng một mảng sẽ có 10 số nguyên, arrayname.length sẽ trả về giá trị 10. Trong vòng lặp trên, giá trị của x đi từ 0-9 (<10) và cũng gán giá trị của chính nó cho các mảng số nguyên. Vì vậy, ở cuối vòng lặp, các số nguyên sẽ có giá trị sau:

0,1,2,3,4,5,6,7,8,9.

Phần 2: Thêm nội dung mảng

Bên trong hàm getSum(), nội dung của chính mảng đó sẽ được thêm vào. Điều đó sẽ được thực hiên bằng cách lặp lại cùng một vòng lặp while như trên và sử dụng biến “sum” để thêm nội dung cho mảng.

Phần 3: Kết thúc hợp đồng

Chức năng này kết thúc hợp đồng và gửi số tiền còn lại trong hợp đồng cho người tạo hợp đồng.

Khi được hỏi về cảm hứng và động lực đằng sau việc tạo ra Solidity, Tiến sĩ Gavin Woods đã nói:

“[Solidity] là một công cụ tinh vi để phát triển các hợp đồng mà cuối cùng có thể cung cấp cho cả nhà phát triển và người dùng thông tin về những gì code đã thực hiện. Để giúp ích cho điều này, tôi đã tạo ra NatSpec, một định dạng tài liệu thân thiện với hợp đồng, và biến nó thành lựa chọn tốt nhất trong Solidity. Tôi cũng đã đề xuất một tập hợp ngôn ngữ kiểm chứng chính thức (chưa được triển khai) để tối đa hóa các loại công cụ bảo đảm tính chính xác có thể được thực hiện.

Tôi giới thiệu những điều như là một lựa chọn tốt nhất cho ngôn ngữ Solidity nhằm cung cấp một khái niệm trừu tượng cho LOGs, tương tự như trong hình thức để gọi hàm. Cảm hứng cho điều đó xuất phát từ “tín hiệu” của hệ thống Qt meta-object.

Một tính năng sau đó mà Christian R. và tôi đã tìm ra cùng nhau là các công cụ sửa đổi hàm; cho phép các thuộc tính được đặt như một phần của chữ ký hàm để thực hiện một số sửa đổi đối với nội dung của hàm đó. Ngôn ngữ này rất phù hợp cho việc lập trình theo định hướng hợp đồng”.

Bài viết này đã đề cập đến 1 ngôn ngữ được sử dụng cho lập trình blockchain. Trong thực tế, còn có rất nhiều ngôn ngữ khác mà bạn có thể sử dụng với blockchain.

 Đừng ngại ngùng gửi mail cho mình: info.igoweb@gmail.com

Các dịch vụ khác