Lời nói đầu

Xin xin chào các bạn, để liên tục loạt bài về blockchain, bây giờ mình xin nói về smart contract cùng các khái niệm, lý lẽ luân chuyển xung quanh Smart contracts trên nền tảng ethereum. Nếu bạn làm sao chưa chắc chắn ethereum là gì, hoàn toàn có thể xem thêm nội dung bài viết Ethereum, một nền tảng gốc rễ Blockchain đầy triển vọng!. Nlỗi các bạn đã biết, vào ethereum gồm 2 một số loại tài khoản là: Externally Owned Accounts (EOAs) cùng contract accounts. EOAs được kiểm soát bởi các phần mềm bên cạnh, ví dụ như những wallet application, nó nằm kế bên ethereum. Contract accounts được kiểm soát điều hành bởi vì phần mềm chạy vào sản phẩm ảo ethereum (EVM). Cả 2 một số loại thông tin tài khoản đông đảo được xác định do 1 can dự ethereum. Trong phạm vi nội dung bài viết này chúng ta đã bàn bạc về một số loại thứ hai, contract accounts cùng các phần mềm kiểm soát và điều hành smart contracts.Để hiểu được bài viết này, thử khám phá chúng ta cần có đông đảo kỹ năng và kiến thức cơ phiên bản về blockchain, ethereum, key, address, trương mục, transaction ...

Bạn đang xem: Solidity là gì

Smart contract là chiếc nồi gì vậy?

Theo loại lịch sử bọn họ đã thấy technology vẫn biến hóa không hề ít vật dụng, của cả dấn thức của mỗi họ. Các technology mới được hiện ra với từ từ thay thế sửa chữa các technology sẽ trsống cần lạc hậu. Bắt đầu kỉ nguyên của mạng internet, ý thức luôn là 1 trong sản phẩm công nghệ nào đó tương đối xa xỉ Khi các tổ chức, cá nhân hợp tác, tiếp xúc với nhau trên mạng mạng internet. Đứng trước bài bác tân oán kia, vào trong thời điểm 1990, đơn vị mật mã học tập Nichồng Szabo sẽ giới thiệu 1 quan niệm hoàn toàn mới là smart contracts.Smart contracts trợ thì dịch là những đúng theo đồng xuất sắc, được quan niệm là 1 tập phù hợp những lời hứa hẹn, được hình thức bên dưới dạng kĩ thuật số, bao hàm những giao thức bảo đảm an toàn những mặt tiến hành các lời hứa hẹn không giống nhau. Xét về cẩn thận Computer programs thì hợp đồng logic dễ dàng là những công tác máy tính, trường đoản cú thích hợp đồng không có chân thành và ý nghĩa pháp luật vào ngữ cảnh này. Một Lúc đúng theo đồng được thực hiện, mã của vừa lòng đồng cần thiết được thay đổi. Không y như những phần mềm truyền thống, biện pháp tuyệt nhất nhằm sửa thay đổi một vừa lòng đồng là xúc tiến một vừa lòng đồng bắt đầu =)).Mặc dù định nghĩa smart contracts đã có từ khá lâu dẫu vậy mãi cho trong tương lai, lúc công nghệ blockchain lộ diện, họ new rất có thể thực tại hóa được các phát minh này.Trong ethereum, các hòa hợp đồng tuyệt vời với các ngữ chình họa của nó được kiểm soát điều hành cùng xúc tiến trên trang bị ảo EVM.

Vòng đời của smart contract

Các Smart contract hay được viết bởi vì các ngữ điệu xây dựng bậc cao, ví dụ như Solidity. Nhưng nhằm chạy, bọn chúng bắt buộc phải được biên dịch ra low-màn chơi bytecode nhằm chạy xe trên đồ vật ảo EVM. Sau Khi được biên dịch, chúng được deploy lên Ethereum blockchain với một transaction cho tới 1 contract-creation address. Mỗi một thích hợp đồng được xác minh bởi vì một tác động ethereum. Địa chỉ này hoàn toàn có thể được sử dụng trong các transaction với tứ bí quyết người gửi, fan thừa nhận hoặc để Điện thoại tư vấn những chức năng của hợp đồng.Chú ý, các smart contract chỉ được chạy Lúc chúng được Điện thoại tư vấn do 1 transaction, toàn bộ những smart contract vào ethereum được thực hiện vị 1 transaction được đề xướng từ là một EOAs (Externally Owned Accounts).Transaction là atomic, vậy nên bất cứ 1 transaction tất cả call từng nào đúng theo đồng đi chăng nữa, tâm lý của những hợp đồng đang đổi khác trường hợp transaction thành công xuất sắc, ví như transaction thua cuộc, toàn bộ phần lớn thứ sẽ được rolled back nhỏng thể transaction chưa lúc nào được Điện thoại tư vấn. Tuy nhiên transaction ko thành công vẫn được lưu trữ bên trên blockchain và rất có thể vẫn khấu trừ gas cost vào thông tin tài khoản tạo nên transaction nhưng không tồn tại tác động ảnh hưởng làm sao lên tâm trạng của phù hợp đồng.Không thể thay đổi mã của thích hợp đồng tuy vậy chúng ta có thể xóa bọn chúng khỏi blockchain. Để thực hiện xóa chúng, họ thực hiện EVM opcode SELFDESTRUCT, opcode này đã remove contract ra khỏi blockchain. Hoạt hễ này có gas cost là âm, do đó khuyến nghị câu hỏi giải pngóng tâm trạng tàng trữ. Xóa vừa lòng đồng Theo phong cách này sẽ không xóa transaction history của vừa lòng đồng bởi nó đã có tàng trữ vào blockchain tuy nhiên nó đã sa thải tinh thần của hòa hợp đồng ở tất cả các kân hận về sau.

Introdution to lớn Ethereum high-level languages

EVM là một trong những laptop tế bào phỏng chạy một dạng mã vật dụng quan trọng đặc biệt Call là mã bytecode EVM. Mặc mặc dù hoàn toàn có thể xây dựng những vừa lòng đồng logic trực tiếp bằng bytecode. EVM bytecode siêu cạnh tranh sử dụng và khó khăn đến xây dựng viên hiểu cùng hiểu. Do đó, hầu như những đơn vị trở nên tân tiến ethereum thực hiện 1 ngữ điệu xây dựng cao hơn nữa để viết các chương trình smart contract cùng tiếp đến compile bọn chúng ra bytecode. Mặc mặc dù ngẫu nhiên ngữ điệu xây dựng bậc cao nào cũng hoàn toàn có thể được điều chỉnh để viết các đúng theo đồng logic nhưng bởi đặc điểm chuyển động vào môi trường xung quanh tiến hành giảm bớt với buổi tối giản (EVM), khu vực phần đông tất cả những giao diện người dùng thông thường, đồ họa hệ quản lý và giao diện Hartware đa số bị thiếu hụt nên vẫn là tiện lợi hơn giả dụ thi công 1 ngôn ngữ viết smart contract buổi tối giản, từ trên đầu rộng là chuyển đổi các ngôn ngữ có sẵn để tương xứng viết các smart contract.Việc viết smart contract sẽ làm chuyển đổi tứ duy của các lập trình sẵn viên, vị đơn giản dễ dàng là không có vị trí đến sai trái, hồ hết lầm số đông đề xuất trả giá chỉ bằng may mắn tài lộc (ether). Dưới đấy là 1 số ít ngôn từ lập trình dùng để làm viết smart contract:

LLL

Một ngôn ngữ thiết kế hàm. Là ngữ điệu xây dựng bậc cao trước tiên mang lại Ethereum smart contract, thảng hoặc lúc được áp dụng ngày nay.

Serpent

Một ngữ điệu lập trình thủ tục với cú pháp tương tự Pykhông lớn được tạo thành vì chưng Vitalik Buterin, ít khi được sử dụng

Solidity

Ngôn ngữ lập trình giấy tờ thủ tục cùng với cú pháp giống như JavaScript, C++ hoặc java. Ngôn ngữ thông dụng tốt nhất cùng hay được sử dụng để viết những hòa hợp đồng lý tưởng được tạo ra do Gavin Wood.

Vyper

Một ngữ điệu được phát triển vừa mới đây, tựa như Serpent cùng với cú pháp như là Pynhỏ bé, tìm hiểu sự gần cận với Python hơn là Serpent nhưng không phải nhằm sửa chữa Serpent. Nó lại được tạo nên vị Vitalik Buterin.

Bamboo

Một ngôn ngữ bắt đầu được cải cách và phát triển, Chịu ảnh hưởng vì chưng Erlang cùng với explicit state transistions và không có những luồng lặp. Nó nhắm đến Việc bớt side effect cùng tăng năng lực audit smart contract. Ngôn ngữ này khôn xiết bắt đầu cùng chưa được sử dụng nhiều.

Nhỏng chúng ta thấy ở bên trên, có không ít ngôn ngữ nhằm bạn chọn lựa viết smart contract tuy vậy bởi vì Solidity là ngữ điệu thịnh hành độc nhất vô nhị và mình cũng sử dụng ngữ điệu này đề xuất trong phần tiếp theo của bài viết, chúng ta đang đề cùa đến ngôn từ này.

Xây dựng smart contract cùng với Solidity

*
Khái niệm bên trên Wikipedia

Solidity is a "contract-oriented" programming language for writing smart contracts. It is used for implementing smart contracts on various blockchain platforms. It was developed by Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Liana Husikyan, Yoiđưa ra Hirai và several former Ethereum core contributors lớn enable writing smart contracts on blockchain platforms such as Ethereum.

Solidity được phát triển cùng hiện nay đang rất được duy trì vì một nhóm những đơn vị phát triển. Chi tiết xem thêm link github.Sản phẩm thiết yếu của dự án solidity là Solidity Compiler (solc) dùng để compile mã solidity sang trọng EVM bytecode hoặc ABI (Application Binary Interface).

Download & install

Với bất kể ngữ điệu biên dịch nào, việc thứ nhất chúng ta nên có tác dụng là cài đặt trình biên dịch.Cài đặt solc trên ubuntu:$ sudo add-apt-repository ppa:ethereum/ethereum$ suvì apt update$ suvày apt install solcKIểm tra version:$ solc --versionsolc, the solidity compiler commandline interfaceVersion: 0.4.21+commit.dfe3193c.Linux.g++

Development environment

Trong phạm vi bài viết mình sử dụng Visual Studio Code editor với solc command-line.

Hello world program

Và đây là lịch trình hello world thần thánh :vpragma solidity ^0.4.21;contract HelloWorld Trong đoạn chương trình trên "pragma solidity ^0.4.21" là một trong những thông tư version của trình biên dịch solidity mang đến smart contract.Bác làm sao từng làm việc cùng với C++ thì chẳng xa lạ gì cùng với trường đoản cú khóa này. Cụ thể lúc compile HelloWorld contract sinh hoạt trên, trình biên dịch đang báo lỗi trường hợp version compiler là trước 0.4.21 với từ 0.5.0 trnghỉ ngơi đi (vì chưng số đồ vật 3 chuyển đổi theo những bạn dạng vá, số thứ 2 thay mặt đại diện cho những thay đổi Khủng và có thể dẫn đến việc biệt lập lớn thân những version) .

Using Solidity

Chúng ta thường thấy những mẩu quảng cáo bên trên tivi cùng với đoạn kết: "Đọc kĩ giải đáp áp dụng trước lúc dùng". Solidity là một trong những dung dịch thử liều cao cùng với đầy đủ có mang với bốn duy hoàn toàn bắt đầu vào programing. Nó cải tiến và phát triển tương đối nhanh hao vậy phải cách rất tốt là chúng ta buộc phải hiểu hết toàn thể phần tư liệu về ngữ điệu này ở đây:https://solidity.readthedocs.io/en/latest/Bài viết này của chính bản thân mình chỉ tóm tắt gần như điểm cơ bản của ngôn ngữ này. Thực ra tôi cũng không có thời hạn nhằm viết lại toàn cục và cũng không có hứng trúc Lúc viết về cú pháp của một ngôn từ lập trình (tài giỏi liệu rồi thì viết lại làm những gì =)) ). Mình nêu ra những chi tiết của ngôn từ này chỉ nhằm mục tiêu tuyệt nhất là các bạn cũng có thể theo dõi và quan sát những bài viết sau thôi :v

Data types

1 số hình dạng dữ liệu cơ phiên bản trong solidity:

boolean (bool):

true hoặc false, toán thù tử rất có thể sử dụng ! (not), && (and), || (or), == (equal), != (not equal).

integer (int/uint)uin

Từ int8/uint8 (8 bit) mang đến int256/uint256 (256 bit) với số bit là bội của 8. Nếu viết uint/int thì trình biên dịch vẫn khoác định hiểu là uint256/int256.

fixed point (fixed/ufixed)

Chưa tư vấn trọn vẹn nghỉ ngơi thời điểm hiện nay.

address

Kích thước đôi mươi byte, dùng để lưu lại báo cáo ethereum address.

byte array (fixed)

byte1, byte2, byte3 ... byte32.

byte array (dynamic)

Dynamic kích thước arrays of bytes, được định nghĩ về giao diện bytes hoặc string.

enumstructmapping

Cặp key => value, tựa như std::map trong C++.

time units

seconds, minutes, hours, days, weeks, years. 1 years = 365 days.

Xem thêm: As Built Drawings Là Gì - # Các Loại Bản Vẽ Xây Dựng Trong Tiếng Anh

ether units

wei, finney, szabo & ether.

Contract definition

Trong Solidity đa số trang bị các xoanh xung quanh đúng theo đồng, tương tự như như các ngôn từ hướng đối tượng người dùng (đối tượng người tiêu dùng ví dụ sinh hoạt đấy là vừa lòng đồng). Tương nlỗi triết lý về OOPhường thì trong Contract cũng bao gồm thuộc tính (state variables) với những thủ tục (methods). Ngoài có mang Contract, Solidity cũng hỗ trợ 2 đối tượng người sử dụng không giống tương tự Contract bao gồm:

interface

Đặc tả cấu tạo của vừa lòng đồng, bao hàm các hàm mà không có thân hàm, không xa lạ cùng với giới xây dựng viên yêu cầu chắc hẳn rằng không phải lý giải những.

library

Deploy 1 lần với được áp dụng vị các hợp đồng khác trải qua DELEGATECALL.

Thuộc tính

Ví dụ: contract A mapping (uint => address) public dataMức độ truy cập public, private, internal (không tồn tại external).Trong Contract A sinh sống trên data là 1 state variable, cường độ truy vấn public, mang định solidity sẽ tạo 1 getter function data() trả về data (không lúc nào truy vấn trực tiếp được vào thuộc tính).Các vùng lưu trữ gồm storage, memory, calldata.

Pmùi hương thức

Các hàm được khái niệm với cú pháp như sau:function FunctionName() // definelấy một ví dụ 1 function:function buyToken(address _beneficiary) public payable

FunctionName

Tên function, được sử dụng nhằm Gọi từ một transaction, 1 thích hợp đồng không giống hoặc vào cùng 1 hợp đồng.

parameterspublic

Đại diện mang lại cường độ truy cập, rất có thể điện thoại tư vấn hàm từ bỏ trong hoặc xung quanh vừa lòng đồng (internal hoặc external).

external

Giống public tuy thế nếu như muốn Điện thoại tư vấn từ bỏ phía bên trong hòa hợp đồng phải cần sử dụng từ khóa this.

internal

Chỉ có thể Gọi từ bên phía trong hợp đồng cùng những hợp đồng thừa kế nó.

private

Chỉ có thể Hotline tự chính phù hợp đồng kia.

Chú ý: Tất cả các tự khóa trên chỉ ảnh hưởng đến kĩ năng Điện thoại tư vấn hàm, bất kì tài liệu hoặc hàm nào vào thích hợp đồng đông đảo hiển thị trên blockchain công khai (kể cả private cũng khá được chú ý thấy).

constant/view

Hàm ko biến đổi tinh thần của vừa lòng đồng. Các hành vi sau đây được xem là có tác dụng đổi khác tâm lý của thích hợp đồng:

Writing to lớn state variables.Emitting events.Creating other contracts.Using selfdestruct.Sending Ether via calls.Calling any function not marked view or pure.Using low-cấp độ calls.Using inline assembly that contains certain opcodes.

Từ khóa constant alias tới view (dự con kiến tư vấn trường đoản cú bạn dạng 0.5.0).

pure

Hàm ko gọi hoặc thay đổi tâm lý của đúng theo đồng. Các hành động sau sẽ vi phạm khái niệm pure function:

Reading from state variables.Accessing this.balance or .balance. Accessing any of the members of block, tx, msg (with the exception of msg.sig & msg.data).Calling any function not marked pure.Using inline assembly that contains certain opcodes.payable

Hàm gật đầu đồng ý thừa nhận ether. Các hàm chưa phải payable vẫn khước từ các khoản tkhô hanh toán, trừ Lúc chúng bắt đầu từ coinbase hoặc đích đến của SELFDESTRUCT. Trong đều trường hòa hợp này, một Contract tất yêu ngăn chặn những khoản thành tân oán mang lại (do xây cất của EVM).

Fallbaông xã function

Hàm không có tên hàm, không tồn tại tmê mẩn số truyền vào với cũng không tồn tại quý hiếm trả về. Hàm này được triển khai Lúc không có hàm làm sao khớp cùng với lời call hàm mang đến contract. Thường được thực hiện Khi gửi ether mang lại Contract (không gọi hàm nào), nhằm dìm ether thì các cách tiến hành này được khắc ghi là payable.Ví dụ:function () public payable // buy tokenbuyTokens(msg.sender);

Function modifiers

Dùng kể kiểm soát và điều hành những hành vi của hàm. Ví dụ:modifier onlyOwner require(msg.sender == owner);_ ;function destroy() public onlyOwner selfdestruct(owner);Trong đoạn code trên, phần thân hàm của destroy() sẽ được không ngừng mở rộng bởi thân hàm của modifier, kí từ _ sẽ là phần khai báo thân hàm của function destroy(). Nội dung hàm destroy hiện nay sẽ tiến hành gọi như vậy này:function destroy() public onlyOwner require(msg.sender == owner);selfdestruct(owner);Chụ ý Việc đặt địa chỉ của kí trường đoản cú _ trong modifier vẫn tác động mang lại hàm áp dụng nó.

contructor và selfdestruct

Cú pháp knhì báo contructor:contructor() // define contructorCú pháp này tư vấn từ bỏ v0.4.22, các version mau chóng hơn nữa thì khai báo contructor nhỏng knhị báo function mang tên trùng cùng với Contract.Hàm diệt thì ta có thể coi nghỉ ngơi ngay lập tức phần bên trên, Lúc Gọi selfdestruct, hòa hợp đồng sẽ ảnh hưởng hủy.

Bên cạnh đó Solidty cũng support overload.

Tính kế thừa của Contract

Solidity cung cấp nhiều thừa kế. Cú pháp:contract Children is Parent1, Parent2 Thứ đọng trường đoản cú thừa kế là quan trọng đặc biệt vào Solidity, nhỏng knhì báo sinh hoạt bên trên Parent2 vẫn override Parent1.Trong Solidity cũng đều có tư tưởng abstract contract. tất cả tối thiểu 1 cách làm không được tư tưởng. Các contract kế thừa nó phải định nghĩa mọi cách thức này. Do support nhiều kế thừa bắt buộc Solidity cũng phạm phải kim cương problem:

*
Solidity sử dụng thuật toán thù "C3 Linearization" để giải quyết vụ việc này.

Event

Solidity support khái niệm event. Chắc cũng ko xa lạ với giới lập trình bắt buộc bản thân không giải thích các. Sử dụng emit nhằm bắn event đã clear rộng với minh bạch sự kiện với lời Gọi hàm. Chụ ý event không tồn tại thân hàm cùng được handle trải qua tlỗi viện web3.js.

Error handling

Support assert, require & revert.

Xem thêm: Đánh Giá Xiaomi Redmi Note 3 Tinhte Giá Tốt Nhất, Cập Nhật Nhất Tháng 06/2021

Others

Ban đầu bản thân định viết không ít trang bị về solidity nhưng mà nhận thấy tất cả viết cả ngày cũng không hết được cần mình khuim các bạn phải gọi tổng thể Solidity Doc.

Lời kết

Cảm ơn các bạn đang đọc đến đây, đã có nhiều bạn hẳn tương đối bổi rối là viết chấm dứt smart contract thì hình thù nó như vậy nào? kiểm tra nó vẻ bên ngoài gì? deploy ra sao ? ... cùng mẫu chúng ta mong mỏi chờ là một cái nhìn trực quan liêu. Vậy thì còn chần chờ gì nữa, hãy nhanh tay follow để theo dõi và quan sát những loạt bài bác tiếp sau của chính mình :v

Tài liệu tsi mê khảo

Mastering Ethereum: Building Smart Contracts and DApps - Andreas Antonopoulos và Gavin Wood

Chuyên mục: CÔNG NGHỆ
Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *