Tiêu đề gốc: "Cách Chainlink giúp các hợp đồng thông minh thu được dữ liệu bên ngoài"
Tác giả gốc: Connor Maloney
Người dịch: Li Yunlong
Nguồn gốc: Thông tin liên kết chuỗi

Bản thân các hợp đồng thông minh không có khả năng truy cập dữ liệu bên ngoài blockchain. Dữ liệu bên ngoài rất quan trọng đối với hầu hết các kịch bản ứng dụng hợp đồng thông minh, do đó việc thiếu chức năng này sẽ hạn chế sự phát triển hơn nữa của hợp đồng thông minh. Ví dụ, các hợp đồng thông minh liên quan đến tài chính, chuỗi cung ứng, bảo hiểm, an ninh và nhiều lĩnh vực khác đều dựa vào các sự kiện bên ngoài. Hợp đồng thông minh không thể có được thông tin sự kiện quan trọng ngoài chuỗi, chẳng hạn như thay đổi giá, ngày hậu cần và khả năng thanh toán. Nếu không có thông tin bên ngoài này, hầu hết các ứng dụng hợp đồng thông minh đều không có giá trị ứng dụng thực tế.
Tại sao hợp đồng thông minh không thể lấy dữ liệu bên ngoài một cách độc lập?
Bởi vì mạng blockchain mang tính quyết định. Hợp đồng thông minh chạy trên cơ sở hạ tầng phi tập trung, tự điều chỉnh được gọi là blockchain, nơi mọi thông tin đều có thể xác định và kiểm chứng được. Để một blockchain hoạt động bình thường, cần phải đạt được sự đồng thuận giữa các bên liên quan. Để đạt được mục tiêu này, người ta đã thiết kế [Các cơ chế đồng thuận khác nhau], chẳng hạn như bằng chứng công việc ( Proof công việc), Bằng chứng về cổ phần, Bằng chứng hoạt động. Các cơ chế đồng thuận này cho phép hệ thống phân tán của blockchain hình thành một trạng thái thống nhất.
Với các cơ chế đồng thuận này, các giao dịch trên mạng có thể được xác minh và trạng thái của sổ cái công khai thống nhất có thể được xác định. Thiết kế này cho phép blockchain hoạt động một cách công bằng và an toàn mà không cần xác thực tập trung. Do đó, toàn bộ blockchain là một cỗ máy trạng thái xác định.
Nhưng dữ liệu bên ngoài chuỗi khối không mang tính xác định bởi vì, theo một nghĩa nào đó, nó đi qua chuỗi khối Giá trị không thể xác minh về mặt lịch sử. Dữ liệu bên ngoài có thể thay đổi linh hoạt do nhiều yếu tố khác nhau. Thay đổi giá thường xuyên, các công ty cập nhật thông tin hậu cần theo thời gian thực, cập nhật về những thay đổi của hậu cần, v.v. Vì thông tin này không chắc chắn nên không có cách nào để hợp đồng thông minh xác minh dữ liệu này và đạt được sự đồng thuận. Do đó, dữ liệu không thể được xác nhận là xác thực sẽ không có ý nghĩa đối với blockchain.
Làm cách nào để cung cấp dữ liệu bên ngoài cho hợp đồng thông minh?
Điều này có thể đạt được thông qua phần mềm trung gian blockchain, đặc biệt là các oracle an toàn và đáng tin cậy. Oracle đóng vai trò là tác nhân dữ liệu, kết nối dữ liệu bên ngoài và hợp đồng thông minh. Nó hoạt động như một lớp trung gian giữa các API dữ liệu blockchain, chuyển đổi dữ liệu thành định dạng mà blockchain có thể đọc được. Ngoài ra, các oracle chịu trách nhiệm xác minh tính chính xác của dữ liệu bên ngoài, vì vậy các nguồn đáng tin cậy (giảm thiểu độ tin cậy) là rất quan trọng.
Tuy nhiên, trong dịch vụ oracle tập trung, oracle có thể bị tấn công (bị tin tặc tấn công, dịch vụ ngừng hoạt động, giả mạo dữ liệu, v.v.) , điều này khiến hợp đồng thông minh mất đi các đặc điểm quan trọng nhất về độ chắc chắn và độ tin cậy, do đó khiến hầu hết các trường hợp sử dụng hợp đồng thông minh dựa trên các tình huống thực tế đều không thể sử dụng được. Làm thế nào để giải quyết vấn đề này?Câu trả lời là một mạng oracle phi tập trung. Hoặc Chuỗi liên kết.
Chainlink giải quyết vấn đề kết nối bằng cách cung cấp mạng oracle phi tập trung phù hợp với tính bảo mật và độ tin cậy của các nhà phát triển hợp đồng thông minh. Chuỗi khối có thể được kết nối an toàn với các API được liên kết chuỗi thông qua các bộ điều hợp bên ngoài (còn được gọi là liên kết chuỗi). Các nhà phát triển có thể dễ dàng kết nối các hợp đồng thông minh của riêng họ với bộ API Chainlink được viết sẵn để thiết lập kết nối oracle ngoài chuỗi.

Ví dụ: giả sử bạn phát triển một Hợp đồng thông minh có thể gửi mã thông báo đến một địa chỉ. Chainlink (nhà tiên tri đầu ra) gửi thanh toán ngoại tuyến qua PayPal. Sau đó, nhà tiên tri có thể cung cấp biên lai trên chuỗi dựa trên thanh toán ngoại tuyến, hoàn thành chu trình giao dịch trong hệ thống blockchain.
Với Chainlink, các hợp đồng thông minh giờ đây có thể hoạt động trong hầu hết các tình huống ứng dụng trong thế giới thực thông qua việc chạy mạng oracle phi tập trung. Chainlink đáp ứng các điều kiện đặt trước của hợp đồng thông minh một cách an toàn và bảo mật, vì vậy tất cả các bên liên quan đều có thể hưởng lợi từ tiềm năng to lớn của hệ sinh thái hợp đồng thông minh.
Ở cấp độ mã, oracle hoạt động như thế nào?
Việc sử dụng oracle cần có đủ số lượng token LINK và một số kiến thức cơ bản về Solididy, một ngôn ngữ để viết hợp đồng thông minh. Vui lòng tham khảo [Tài liệu về giao diện Solidity] để tìm hiểu về tất cả các phương pháp Chainlink. Cuối cùng, có dây có thể yêu cầu dữ liệu từ oracle của Chainlink, trước tiên bạn cần kế thừa hợp đồng ChainlinkClient trong hợp đồng của mình. Bạn có thể tạo hợp đồng bằng cách sử dụng các ví dụ [tại đây] làm hướng dẫn hoặc bạn có thể tham khảo [tài liệu].
Oracles có thể giúp các hợp đồng thông minh yêu cầu và lấy dữ liệu bên ngoài từ chuỗi khối. Chúng tôi sử dụng các công việc để thực thi các nhiệm vụ oracle nhằm hoàn thành các yêu cầu. Những công việc này có JobID tương ứng với địa chỉ oracle. Những Công việc này bao gồm một loạt nhiệm vụ hoặc [Bộ điều hợp], bao gồm các tác vụ hoặc bộ điều hợp này khi gửi yêu cầu với JobID được chỉ định Xác định công việc cần thực hiện.
Để minh họa rõ hơn cách các oracle hoạt động ở cấp mã, chúng tôi giải thích thông qua một hợp đồng thông minh mẫu yêu cầu giá Ethereum:
hợp đồng MyContract là ChainlinkClient {
chủ sở hữu địa chỉ; p>
constructor() public {
/ / Đặt địa chỉ cho mã thông báo LINK trên mạng công cộng
// Đặt địa chỉ phát hành mã thông báo LINK trên mạng công cộng
p>setPublicChainlinkToken();
chủ sở hữu = msg.sender;
// Các chức năng bổ sung tại đây...
// Các chức năng bổ sung tại đây...
Trước hết, để sử dụng mạng Chainlink, bạn cần Hợp đồng kế thừa hợp đồng ChainlinkClient. Đây là phần thân của hàm tạo chung cho cả mạng thử nghiệm và mạng chính thức. Điều này là do chúng tôi sử dụng phương thức setPublicChainlinkToken(), phương thức này sẽ tự động lấy địa chỉ phát hành mã thông báo LINK dựa trên môi trường mạng nơi hợp đồng được triển khai.
Tất cả các địa chỉ mã thông báo LINK và oracle hiện tại đều có sẵn [tại đây]. Sau khi lưu trữ địa chỉ mã thông báo LINK, bạn có thể tạo yêu cầu bằng cách chỉ định địa chỉ hợp đồng oracle và JobID tương ứng của nó.
// Tạo yêu cầu Chainlink tới oracle được chỉ định với ID công việc nhất định
// Tạo yêu cầu Chainlink bằng cách cung cấp địa chỉ oracle và JobID
function requestEthereumPrice ( địa chỉ _oracle, bytes32 _jobId)
public
onlyOwner
{
// newRequest lấy JobID, địa chỉ gọi lại và chức năng gọi lại làm đầu vào
// Yêu cầu mới yêu cầu JobID , gọi lại địa chỉ và chức năng gọi lại làm đầu vào
Chainlink.Request bộ nhớ req = buildChainlinkRequest(_jobId, this, this.fulfill.selector); p>
// Thêm URL có khóa "get" vào tham số yêu cầu
//Thêm cài đặt URL "get" làm khóa để yêu cầu tham số
req.add( " ;get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD");
// Sử dụng thông số đầu vào (chuỗi được phân cách bằng dấu chấm) làm "đường dẫn" trong tham số yêu cầu
/ / Sử dụng chuỗi được phân cách bằng dấu chấm làm đường dẫn trong tham số yêu cầu
req.add("path", "USD" );
// Thêm một số nguyên có khóa "times" vào tham số yêu cầu
//Đặt bội số cho tham số yêu cầu
req.addInt(" lần", 100);
// Gửi yêu cầu có 1 LINK tới hợp đồng oracle
//Gửi 1 LINK tới oracle
sendChainlinkRequestTo(_oracle, req, ORACLE_PAYMENT);
Yêu cầu được tạo thông qua phương thức buildChainlinkRequest() và các tham số tương ứng được chấp nhận và điền vào cấu trúc Chainlink.Request làm tải trọng. Bạn có thể sử dụng req.add() để thêm tham số vào yêu cầu, chẳng hạn như URL. Khi bạn đã chuẩn bị tất cả các tham số cần thiết, bạn có thể gửi nó đến một địa chỉ hợp đồng oracle cụ thể thông qua phương thức sendChainlinkRequestTo() và trả 1 mã thông báo LINK làm phần thưởng cho nhà điều hành nút. Xin lưu ý rằng trên mạng chính, số tiền thanh toán khác nhau, nhưng để mọi người dễ hiểu hơn, chúng tôi hiện đặt mức phí là 1 LINK cho mỗi yêu cầu. Vì các mã thông báo này không có giá trị trên mạng thử nghiệm nên chúng tôi có thể lấy chúng thông qua [vòi].
uint256 hằng số riêng tư EXPECTED_RESPONSES = 3;
uint256[] giá riêng;
uint256 công khai avgPrice;
hàm thực hiệnEthereumPrice(bytes32 _requestId, uint256 _price)
công khai
recordChainlinkFulfillment(_requestId)
{
if(price.push(_price) == EXPECTED_RESPONSES) {
uint256 tổng;
for(uint i = 0; i <prices.length; i++) {
sum = sum.add(price[i]);
xóa giá[i];
avgPrice = sum.div(EXPECTED_RESPONSES);
>
>
Khi nút Chainlink lấy kết quả từ địa chỉ được chỉ định điểm cuối Cuối cùng, hợp đồng oracle sẽ gọi phương thức thực hiện. Các phương thức chèn lấp phải được bảo vệ thông qua công cụ sửa đổi recordChainlinkFulfillment() hoặc phương thức validChainlinkCallback(). Điều này ngăn những người không liên quan gọi phương thức và chỉ điền vào các kết quả tương ứng dựa trên yêu cầu của bạn.
Kết hợp tất cả những thứ này lại với nhau, bạn có thể hoàn thành một hợp đồng tiên tri có thể lấy dữ liệu bên ngoài trên mạng thử nghiệm Ethereum. Mã hoàn chỉnh có thể được tìm thấy [tại đây].
Làm cách nào để bắt đầu sử dụng Chainlink?
Nếu muốn bắt đầu nhanh chóng, bạn có thể sử dụng trợ giúp [tại đây] để triển khai hợp đồng thông minh thông qua Truffle. Nếu bạn đã quen với việc phát triển hợp đồng thông minh, bạn có thể xem bài viết blog mới nhất của chúng tôi bất cứ lúc nào [ 44 cách để trao quyền cho bạn bằng các phương thức hợp đồng thông minh Chainlink]. Cuối cùng, nếu bạn có bất kỳ câu hỏi nào, vui lòng tham khảo [Tài liệu kỹ thuật] của chúng tôi.
Chào mừng bạn tham gia cộng đồng chính thức của BlockBeats:
Nhóm Telegram đăng ký: https://t.me/theblockbeats
Nhóm Telegram thảo luận: https://t.me/BlockBeats_App
Tài khoản Twitter chính thức: https://twitter.com/BlockBeatsAsia