- vừa được xem lúc

Tích hợp Band Protocol để lấy dữ liệu off-chain cho smart contract

0 0 68

Người đăng: tran minh chien

Theo Viblo Asia

Khoan nói về Band Protocol là gì, mình sẽ đi thẳng vào công dụng của nó, có thể đây chính là mảnh ghép mà bạn vẫn luôn tìm kiếm cho Dapp của mình. Band protocol hỗ trợ các contract giao tiếp với dữ liệu từ thế giới bên ngoài như các dữ liệu về thời tiết, thể thao, giá trị cổ phiếu, tỉ giá các đồng ngoại tệ và tất nhiên không thể thiếu tỉ giá của các crypto currencies. Và có thể coi Band Protocol thuộc hệ Oracle tương tự như Chainlink.

Giới thiệu

Trong bài viết lần này, mình sẽ hướng dẫn chủ yếu về phần lấy các giá trị của các cryptocurrencies và tỉ giá ngoại tệ và cách tích hợp chúng vào những ứng dụng của các bạn.

Mình sẽ hướng dẫn các bạn tích hợp dữ liệu oracle của Band vào Smart Contract thông qua contract StdReference và Frontend thông qua thư viện bandchain.js

Tích hợp trên Smart Contract

Lý thuyết

Để lấy dữ liệu về giá từ Oracle của band thông qua smart contract, chúng ta có thể sử dụng StdReference contract. Contract này có 2 function hỗ trợ việc lấy dữ liệu là getReferenceDatagetReferenceDataBulk

Function getReferenceData sẽ nhận 2 giá trị đầu vào là basequote. Nó sẽ query lên StdReference contract với 2 tham số đầu vào và trả về giá trị giữa 2 cặp này dưới dạng dữ liệu struct ReferenceData. Dữ liệu này có dạng như sau:

struct ReferenceData { uint256 rate; // Giá trị tỉ lệ base/quote, đã được nhân với 1e18. uint256 lastUpdatedBase; // Mốc thời gian gần nhất giá trị của base được update theo UNIX time. uint256 lastUpdatedQuote; // Mốc thời gian gần nhất giá trị của quote được update theo UNIX time.
}

Cũng tương tự như getReferenceData, hàm getReferenceDataBulk sẽ lấy dữ liệu một bulk luôn thay vì 1 cặp, nó sẽ nhận đầu vào là một mảng các base và một mảng quote tương ứng. Ví dụ như đầu vào 2 mảng ['ETH', 'BTC', 'BNB'] và ['USD', 'KNC', 'DAI'] thì đầu ra sẽ là mảng giá trị ReferenceData tương tự các cặp :

  • ETH/USD
  • BTC/KNC
  • BNB/DAI

Thực hành

Để thực hành sử dụng smart contract StdReference, Band Protocol đã hỗ trợ deploy một contract trên testnet Kovan, các bạn có thể test trực tiếp trên Remix: https://remix.ethereum.org/

Địa chỉ của StdReference trên Kovan: 0xDA7a001b254CD22e46d3eAB04d937489c93174C3

pragma solidity 0.6.11;
pragma experimental ABIEncoderV2; interface IStdReference { /// A structure returned whenever someone requests for standard reference data. struct ReferenceData { uint256 rate; // base/quote exchange rate, multiplied by 1e18. uint256 lastUpdatedBase; // UNIX epoch of the last time when base price gets updated. uint256 lastUpdatedQuote; // UNIX epoch of the last time when quote price gets updated. } /// Returns the price data for the given base/quote pair. Revert if not available. function getReferenceData(string memory _base, string memory _quote) external view returns (ReferenceData memory); /// Similar to getReferenceData, but with multiple base/quote pairs at once. function getReferenceDataBulk(string[] memory _bases, string[] memory _quotes) external view returns (ReferenceData[] memory);
} contract DemoOracle { IStdReference ref; uint256 public price; constructor(IStdReference _ref) public { ref = _ref; } function getPrice(string _base, string _quote) external view returns (uint256){ IStdReference.ReferenceData memory data = ref.getReferenceData(_base, _quote); return data.rate; }
}

Tiếp theo các bạn deploy contract DemoOracle với đối số đầu vào của constructor là địa chỉ của stdReference trên Kovan : 0xDA7a001b254CD22e46d3eAB04d937489c93174C3

Từ đó có thể test được hàm getPrice với 2 đối số đầu vào là cặp crypto.

Tích hợp trên Webapp

Lý thuyết

Cũng tương tự như tích hợp cho smart contract, để tích hợp trên Webapp chúng ta sẽ sử dụng package bandchain.js. Tuy nhiên package này hiện đang chỉ hỗ trợ lấy giá theo bulk, tức là đầu vào sẽ nhận là 2 mảng là các cặp các bạn muốn lấy rate tương ứng.

Về cơ bản thì package bandchain.js cũng không khác gì việc bạn sử dụng các API cung cấp giá của binance hoặc coinbase tuy nhiên với những ứng dụng Dapp đã được tích hợp band trong smart contract thì cũng nên recommend sử dụng bandchain.js cho phần giao diện

Thực hành

Đầu tiên tạo một file node js:

index.js:

const BandChain = require('@bandprotocol/bandchain.js'); (async () => { const endpoint = 'https://poa-api.bandchain.org'; const bandchain = new BandChain(endpoint); const price = await bandchain.getReferenceData(['BAND/USD', 'BTC/ETH', 'EUR/USD', 'EUR/BTC']); console.log(price);
})();

endpoint phía trên sẽ trỏ đến một node để query các cặp crypto.

Chạy thử đoạn code phía trên

node index.js

Kết quả trả về sẽ là giá trị của các cặp tương ứng:

Như vậy bài viết lần này mình muốn chia sẻ cách mà các bạn có thể tích hợp nhanh chóng band protocol vào những ứng dụng blockchain có liên quan đến giá trị của các crypto currencies. Những bài viết tiếp theo mình sẽ giải thích rõ hơn về các nguyên lý hoạt động của band protocol.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Code Smart Contract bằng Assembly ?

Introduction. Hồi còn học trong ghế nhà trường bộ môn lập trình tốn nhiều não nhất của mình là code assembly. Nôm na thì bất cứ ngôn ngữ bậc cao nào như C , Go, Java,... được sinh ra để người dễ hiểu và dễ code , tuy nhiên chúng đều sẽ được compiled down xuống assembly một ngôn ngữ bậc thấp để máy h

0 0 58

- vừa được xem lúc

Xây dựng ứng dụng Dapps đầu tiên của bạn

Tutorial này sẽ giúp bạn xây dựng dapp đầu tiên của bạn – một hệ thống theo dõi chủ nuôi trong một tiệm thú cưng! Được dịch từ tutorial của Truffle. .

1 1 740

- vừa được xem lúc

Làm thế nào để một smart contract có thể nhận NFT (Non-Fungible Token)?

Mở đầu. Như chúng ta đã biết, trên các chain chạy evm ngày nay ngoài Native coin (ETH) và Fungible Token (ERC20) thì chúng còn cón Non-Fungible Token (ERC721 và ERC1155).

0 0 138

- vừa được xem lúc

Lập trình smart contract để tạo NFT kết hợp với Chainklink và IPFS

NFTs hay tên tiếng Anh là Non-Fungible Tokens có nghĩa là token duy nhất mà không bất kì token nào khác giống như nó. .

0 0 294

- vừa được xem lúc

Tản mạn về lỗ hổng trong smart contract của Fairmoon Token, các dấu hiệu bất thường và nguy cơ từ crypto

Hôm nay (19/05/2021) là một ngày đen tối đối với cộng đồng crypto khi:. .

0 0 69

- vừa được xem lúc

Làm smart contract kêu gọi vốn từ cộng đồng và thưởng NFT

1. Yêu cầu bài toán. . Smart contract kêu gọi vốn từ cộng đồng.

0 0 45