Giá Oracle là gì? Cách sử dụng giá Oracle an toàn
![Avatar](/_next/image?url=https%3A%2F%2Ffiles.amberblocks.com%2Fthumbnail%2Fchnbzaa92ook5tnj%2Fchannel%2Fchnbzaa92ook5tnj%2Ff8xggzaan1h8ak0kz9cjhlnzcffpbk77%2Flogocoin98.png&w=3840&q=20)
![thumbnail](https://file.coin98.com/insights/oracle-price-1606227961635.jpg)
Vào cuối năm 2019, một bài đăng có tiêu đề “Cho vay phi tập trung để giải trí và thu lợi nhuận”. Trong đó, đã mô tả một cuộc tấn công vào các dApp Ethereum dựa trên dữ liệu giá cho một hoặc nhiều token.
Hiện tại đã là cuối năm 2020 và không may là nhiều dự án đã mắc phải những sai lầm tương tự, với ví dụ gần đây nhất là vụ hack Harvest Finance dẫn đến thiệt hại tập thể 33 triệu USD cho người dùng giao thức. Trong khi các nhà phát triển đã quen thuộc với các lỗ hổng như reentrancy, thì việc thao túng oracle về giá rõ ràng không phải là điều thường được xem xét.
Ngược lại, khai thác dựa trên reentrancy gần đây đã giảm trong những năm qua trong khi khai thác dựa trên thao túng oracle về giá hiện đang gia tăng. Vì vậy, tôi quyết định rằng đã đến lúc ai đó xuất bản một nguồn tài liệu chính xác về thao túng oracle về giá.
Bài đăng này được chia thành ba phần. Đối với những người không quen thuộc với chủ đề này, có một phần giới thiệu về oracles và thao túng oracle. Những người muốn kiểm tra kiến thức của mình có thể bỏ qua các nghiên cứu điển hình, nơi chúng tôi xem xét các lỗ hổng và khai thác liên quan đến oracle trong quá khứ. Cuối cùng, chúng tôi kết hợp với một số kỹ thuật mà các nhà phát triển có thể áp dụng để bảo vệ các dự án của họ khỏi sự thao túng oracle về giá.
Bài viết được dịch lại và tinh chỉnh từ bài viết gốc được đăng trên trang Block cá nhân của Samczsun, bạn có thể tham khảo link gốc tại đây.
Giá oracle là gì?
Nói một cách tổng quát, giá Oracle là bất cứ thứ gì bạn tham khảo để biết thông tin về giá. Khi Pam hỏi Dwight giá trị tiền mặt của một chiếc Schrute Buck, Dwight đang hoạt động như một Price Oracle.
Trên Ethereum, nơi mọi thứ đều là một hợp đồng thông minh, các oracle về giá cũng vậy. Do đó, sẽ hữu ích hơn khi phân biệt giữa cách làm thế nào oracle lấy thông tin về giá của nó.
Theo một cách tiếp cận, bạn có thể chỉ cần lấy dữ liệu giá ngoài chuỗi hiện có từ các API giá hoặc sàn giao dịch và đưa dữ liệu đó vào chuỗi. Mặt khác, bạn có thể tính giá tức thời bằng cách tham khảo các sàn giao dịch phi tập trung trên chuỗi.
Đọc thêm: Oracle là gì?
Cả hai tùy chọn đều có những ưu và nhược điểm tương ứng. Dữ liệu ngoài chuỗi thường phản ứng chậm hơn với sự biến động, điều này có thể tốt hoặc xấu tùy thuộc vào việc bạn đang cố gắng sử dụng nó để làm gì.
Tuy nhiên, nó thường yêu cầu một số ít người dùng có đặc quyền đẩy dữ liệu lên chuỗi. Vì vậy bạn phải tin tưởng rằng họ sẽ không trở nên xấu xa và không thể bị ép buộc đưa ra các bản cập nhật xấu.
Dữ liệu trên chuỗi không yêu cầu bất kỳ quyền truy cập đặc quyền nào và luôn được cập nhật, nhưng điều này có nghĩa là dữ liệu này dễ bị kẻ tấn công thao túng và có thể dẫn đến thất bại nghiêm trọng.
Thao túng Oracle trong cuộc sống thực
Thứ 4, ngày 1 tháng 12 năm 2015. Tên bạn là David Spargo và bạn đang tham dự buổi hòa nhạc Peking Duk ở Melbourne, Úc. Bạn muốn gặp trực tiếp ban nhạc nhưng giữa bạn và lối vào hậu trường có hai nhân viên bảo vệ và không đời nào họ để một Joe bình thường nào đó vào ngay.
Bạn tự hỏi, các nhân viên bảo vệ sẽ phản ứng như thế nào nếu bạn chỉ đơn giản hành động như thể bạn có liên quan. Các thành viên trong gia đình chắc chắn sẽ được phép vào thăm hậu trường ban nhạc.
Vì vậy tất cả những gì bạn phải làm là thuyết phục nhân viên bảo vệ rằng bạn là người thân. Bạn nghĩ về nó một chút và đưa ra một kế hoạch mà chỉ có thể được mô tả là thiên tài hoặc hoàn toàn điên rồ.
Sau khi nhanh chóng sắp xếp mọi thứ, bạn tự tin bước đến gần các nhân viên bảo vệ. Bạn tự giới thiệu mình là David Spargo, gia đình của Peking Duk. Khi người bảo vệ yêu cầu bằng chứng, bạn cho họ xem bằng chứng không thể chối cãi - Wikipedia.
Bảo vệ vẫy bạn qua và yêu cầu bạn đợi. Một phút trôi qua, rồi hai phút. Sau năm phút, bạn tự hỏi liệu mình có nên chạy trốn trước khi cơ quan thực thi pháp luật xuất hiện hay không.
Khi bạn sắp được tại ngoại, Reuben Styles bước đến và giới thiệu bản thân. Bạn đi bộ với anh ấy đến căn phòng màu xanh lá cây, nơi ban nhạc đã rất ấn tượng với sự khéo léo của bạn và cuối cùng bạn chia sẻ một vài cốc bia cùng với họ. Sau đó, họ chia sẻ những gì đã xảy ra trên trang Facebook của họ.
Cái gì có thể sai?
Chúng ta hãy xem xét một số trường hợp trong đó oracle về giá được tích hợp kém dẫn đến thiệt hại tài chính đáng kể cho một dự án DeFi.
Sự cố Synthetix sKRW Oracle
Synthetix là một nền tảng phái sinh cho phép người dùng tiếp xúc với các tài sản như tiền tệ khác.
Để tạo điều kiện thuận lợi cho việc này, Synthetix (vào thời điểm đó) đã dựa vào việc triển khai nguồn cấp dữ liệu giá ngoài chuỗi tùy chỉnh. Trong đó giá tổng hợp được tính từ một bộ nguồn cấp dữ liệu giá bí mật được đăng trên chuỗi vào một khoảng thời gian cố định. Các mức giá này sau đó cho phép người dùng giữ các vị thế dài hoặc ngắn so với các tài sản được hỗ trợ.
Vào ngày 25 tháng 6 năm 2019, một trong những nguồn cấp dữ liệu giá mà Synthetix dựa vào đã báo cáo sai giá của đồng Won Hàn Quốc cao hơn 1000 lần so với tỷ giá thực.
Do lỗi bổ sung ở những nơi khác trong hệ thống oracle về giá, giá này đã được hệ thống chấp nhận và được đăng trên chuỗi, nơi một bot giao dịch nhanh chóng giao dịch trong và ngoài thị trường sKRW.
Tổng cộng, bot đã có thể kiếm được lợi nhuận hơn 1 tỷ USD, mặc dù nhóm Synthetix đã có thể thương lượng với nhà giao dịch để trả lại tiền để đổi lấy tiền thưởng lỗi.
Synthetix đã thực hiện chính xác hợp đồng oracle và kéo giá từ nhiều nguồn để ngăn các nhà giao dịch dự đoán những thay đổi về giá trước khi chúng được công bố trên chuỗi.
Tuy nhiên, một trường hợp cá biệt của một nguồn cấp dữ liệu giá thượng nguồn bị trục trặc dẫn đến một cuộc tấn công tàn khốc. Điều này minh họa rủi ro của việc sử dụng oracle về giá sử dụng dữ liệu ngoài chuỗi: bạn không biết cách tính giá, vì vậy hệ thống của bạn phải được thiết kế cẩn thận để tất cả các chế độ lỗi tiềm ẩn được xử lý đúng cách.
Các khoản cho vay dưới mức thế chấp
Như đã đề cập trước đó, tôi đã xuất bản một bài đăng vào tháng 9 năm 2019 phác thảo những rủi ro liên quan đến việc sử dụng các phép toán về giá dựa trên dữ liệu trên chuỗi.
Mặc dù tôi thực sự khuyên bạn nên đọc bài đăng gốc, nhưng nó khá dài và nặng về chi tiết kỹ thuật có thể khiến bạn khó đọc. Do đó, tôi sẽ cung cấp một giải thích đơn giản ở đây.
Hãy tưởng tượng bạn muốn đưa một khoản vay phi tập trung vào blockchain. Người dùng được phép gửi tài sản để thế chấp và vay các tài sản khác với số tiền nhất định được xác định theo giá trị của tài sản mà họ đã ký gửi.
Giả sử rằng một người dùng muốn vay USD bằng ETH làm tài sản thế chấp, rằng giá hiện tại của ETH là 400 USD và tỷ lệ thế chấp là 150%.
Nếu người dùng gửi 375 ETH, họ sẽ gửi 150.000 USD tài sản thế chấp. Họ có thể vay 1 USD cho mỗi 1,5 USD tài sản thế chấp, vì vậy họ sẽ có thể vay tối đa 100.000 USD từ hệ thống.
Nhưng tất nhiên, trên blockchain không đơn giản như chỉ tuyên bố rằng 1 ETH trị giá 400 USD bởi vì một người dùng độc hại có thể chỉ cần tuyên bố rằng 1 ETH trị giá 1.000 USD và sau đó lấy tất cả tiền từ hệ thống.
Do đó, các nhà phát triển sẽ thu hút sự chú ý của giao diện có giá gần nhất, chẳng hạn như giá giao ngay hiện tại trên Uniswap, Kyber hoặc một sàn giao dịch phi tập trung khác.
Thoạt nhìn, đây có vẻ là điều chính xác cần làm. Rốt cuộc, giá Uniswap luôn chính xác bất cứ khi nào bạn muốn mua hoặc bán ETH vì bất kỳ sự sai lệch nào đều được các nhà kinh doanh chênh lệch giá nhanh chóng sửa chữa.
Tuy nhiên, hóa ra, giá giao ngay trên một sàn giao dịch phi tập trung có thể cực kỳ không chính xác trong một giao dịch như được thể hiện trong ví dụ bên dưới.
Xem xét cách hoạt động của một dự trữ Uniswap. Giá được tính dựa trên số lượng tài sản do dự trữ nắm giữ, nhưng tài sản do dự trữ thay đổi khi người dùng giao dịch giữa ETH và USD.
Điều gì sẽ xảy ra nếu một người dùng độc hại thực hiện giao dịch trước và sau khi vay từ nền tảng của bạn?
Trước khi người dùng vay tiền, họ mua 5.000 ETH với giá 2.000.000 USD. Sàn giao dịch Uniswap hiện tính giá 1 ETH = 1.733,33 USD. Giờ đây, 375 ETH của họ có thể đóng vai trò thế chấp cho số tài sản trị giá lên tới 433.333,33 USD mà họ vay. Cuối cùng, họ giao dịch lại 5.000 ETH với 2.000.000 USD ban đầu của họ, điều này sẽ đặt lại giá.
Kết quả thực là nền tảng cho vay của bạn chỉ cho phép người dùng vay thêm 333.333,33 USD mà không cần đưa ra bất kỳ tài sản thế chấp nào.
Nghiên cứu điển hình này minh họa sai lầm phổ biến nhất khi sử dụng sàn giao dịch phi tập trung như một oracle về giá - kẻ tấn công gần như có toàn quyền kiểm soát giá trong một giao dịch và cố gắng đọc chính xác mức giá đó giống như đọc trọng lượng trên cân trước khi nó kết thúc.
Bạn có thể nhận sai số và tùy thuộc vào tình huống, bạn có thể tốn rất nhiều tiền.
Thao túng giá MKR ngoài chuỗi
Vào tháng 12 năm 2019, Synthetix phải hứng chịu một cuộc tấn công khác do thao túng oracle về giá. Điều đáng chú ý về điều này là nó đã vượt qua rào cản giữa dữ liệu giá trong chuỗi và dữ liệu giá ngoài chuỗi.
Người dùng Reddit u/MusaTheRedGuard đã quan sát thấy kẻ tấn công đang thực hiện một số giao dịch rất đáng ngờ chống lại sMKR và iMKR (MKR nghịch đảo).
Đầu tiên kẻ tấn công mua một vị thế Long trên MKR bằng cách mua sMKR, sau đó mua số lượng lớn MKR từ cặp Uniswap ETH/MKR. Sau một thời gian chờ đợi, kẻ tấn công đã bán sMKR của họ cho iMKR và bán lại MKR của họ cho Uniswap. Sau đó, họ lặp lại quá trình này.
Đằng sau cuộc tấn công, giao dịch của kẻ tấn công thông qua Uniswap cho phép chúng di chuyển giá MKR trên Synthetix theo ý muốn.
Điều này có thể là do nguồn cấp dữ liệu giá ngoài chuỗi mà Synthetix dựa vào là trên thực tế dựa trên giá trên chuỗi của MKR và không có đủ thanh khoản để các nhà kinh doanh chênh lệch giá đặt lại thị trường về điều kiện tối ưu.
Sự cố này minh họa một thực tế là ngay cả khi bạn nghĩ rằng mình đang sử dụng dữ liệu giá ngoài chuỗi. Bạn vẫn có thể thực sự đang sử dụng dữ liệu giá trực tuyến và bạn vẫn có thể gặp phải những phức tạp liên quan đến việc sử dụng dữ liệu đó.
Hack bZx
Vào tháng 2 năm 2020, bZx đã bị tấn công hai lần trong khoảng thời gian vài ngày với giá khoảng 1 triệu USD. Bạn có thể tìm thấy một phân tích kỹ thuật tuyệt vời về cả hai bản hack được viết bởi palkeo tại đây, nhưng chúng tôi sẽ chỉ xem xét bản hack thứ hai.
Trong lần hack thứ hai, kẻ tấn công đầu tiên đã mua gần như tất cả sUSD trên Kyber bằng ETH. Sau đó, kẻ tấn công đã mua lô sUSD thứ hai từ chính Synthetix và gửi nó vào bZx. Sử dụng sUSD làm tài sản thế chấp, kẻ tấn công đã vay số lượng ETH tối đa mà chúng được phép. Sau đó, họ bán lại sUSD cho Kyber.
Nếu bạn chú ý, bạn sẽ nhận ra đây về cơ bản giống như một cuộc tấn công cho vay phi tập trung, nhưng sử dụng một tài sản thế chấp khác và một sàn giao dịch phi tập trung khác.
yVault Bug
Vào ngày 25 tháng 7 năm 2020, tôi đã báo cáo một lỗi cho yEarn về việc ra mắt các hợp đồng yVault mới của họ. Tôi sẽ tóm tắt ngắn gọn bên dưới:
Hệ thống yVault cho phép người dùng gửi token và kiếm được lợi nhuận từ nó mà không cần phải tự quản lý. Trong nội bộ, kho tiền theo dõi tổng số token yVault được đúc cũng như tổng số token cơ bản được gửi. Giá trị của một token yVault duy nhất được tính bằng tỷ lệ giữa token được đúc với token được gửi. Bất kỳ lợi nhuận nào mà vault kiếm được sẽ được trải rộng trên tất cả các token yVault được đúc (và do đó, trên tất cả các chủ sở hữu token yVault).
YVault đầu tiên cho phép người dùng kiếm được lợi nhuận trên USDC bằng cách cung cấp thanh khoản cho nhóm Balancer MUSD / USDC. Khi người dùng cung cấp thanh khoản cho các nhóm Balancer, họ sẽ nhận được BPT đổi lại có thể được đổi cho một tỷ lệ của nhóm. Do đó, yVault đã tính toán giá trị của các khoản nắm giữ dựa trên số lượng MUSD / USDC có thể được đổi bằng BPT của mình.
Điều này có vẻ giống như cách triển khai chính xác, nhưng rất tiếc, nguyên tắc tương tự như đã đưa ra trước đó được áp dụng - trạng thái của nhóm Balancer trong một giao dịch không ổn định và không thể tin cậy được.
Trong trường hợp này, do đường cong liên kết mà Balancer đã chọn, người dùng hoán đổi giữa USDC sang MUSD sẽ không nhận được tỷ giá hối đoái 1: 1. Nhưng trên thực tế sẽ để lại một số MUSD trong nhóm.
Điều này có nghĩa là giá trị của BPT có thể tạm thời bị tăng cao, điều này cho phép kẻ tấn công thao túng giá theo ý muốn và sau đó rút cạn kho tiền.
Sự cố này cho thấy rằng các phép toán về giá không phải lúc nào cũng được gắn nhãn như vậy một cách thuận tiện và các nhà phát triển cần phải cảnh giác về loại dữ liệu họ đang sử dụng và xem xét liệu dữ liệu đó có thể dễ dàng bị thao túng bởi người dùng không có đặc quyền hay không.
Hack Harvest Finance
Vào ngày 26 tháng 10 năm 2020, một người dùng không xác định đã tấn công Harvest Finance pool bằng một kỹ thuật mà bạn có thể đoán được ngay bây giờ. Bạn có thể đọc phần báo cáo chính thức tại đây.
Nhưng một lần nữa tôi sẽ tóm tắt lại cho bạn: kẻ tấn công đã giảm giá USDC trong Curve pool bằng cách thực hiện giao dịch, vào Harvest pool với giá giảm, khôi phục giá bằng cách đảo ngược giao dịch trước đó và thoát khỏi Harvest pool ở mức giá cao hơn. Điều này dẫn đến thiệt hại hơn 33 triệu USD.
Bảo vệ mình khi sử dụng giá Oracle thế nào?
Bây giờ, tôi hy vọng rằng bạn đã học được cách nhận ra chuỗi chung - không phải lúc nào bạn cũng rõ ràng là bạn đang sử dụng oracle về giá. Và nếu bạn không tuân theo các biện pháp phòng ngừa thích hợp, kẻ tấn công có thể lừa giao thức của bạn để gửi tất cả tiền của bạn cho họ.
Mặc dù không có bản sửa lỗi chung nào có thể được quy định, nhưng đây là một vài giải pháp đã hoạt động cho các dự án khác trong quá khứ. Có thể một trong số chúng cũng sẽ áp dụng cho bạn.
Thị trường nông, đừng lặn (Shallow Markets, No Diving)
Giống như lặn xuống đáy của một cái bể cạn, lặn xuống thị trường cạn rất đau đớn và có thể dẫn đến những khoản chi phí đáng kể sẽ thay đổi cuộc đời bạn mãi mãi.
Trước khi bạn xem xét mức độ phức tạp của giá cụ thể mà bạn định sử dụng, hãy xem xét liệu token có đủ thanh khoản để đảm bảo tích hợp với nền tảng của bạn hay không.
Một con chim trong tay đáng giá bằng hai con trong bụi cây
Bạn có thể bị mê hoặc khi xem tỷ giá hối đoái tiềm năng trên Uniswap, nhưng không có gì là cuối cùng cho đến khi bạn thực sự nhấp vào giao dịch và các token đã nằm trong ví của bạn.
Tương tự, cách tốt nhất để biết chắc chắn tỷ giá hối đoái giữa hai tài sản là chỉ cần hoán đổi tài sản trực tiếp. Cách tiếp cận này rất tuyệt vời vì không có hậu quả và không có nếu - thì. Tuy nhiên, nó có thể không hoạt động đối với các giao thức như nền tảng cho vay vốn được yêu cầu giữ tài sản ban đầu.
Hầu như các oracle phi tập trung
Một cách để tóm tắt vấn đề với các oracle dựa vào dữ liệu chuỗi là chúng luôn cập nhât. Nếu đúng như vậy, tại sao không giới thiệu một chút về chậm trễ nhân tạo?
Viết hợp đồng tự cập nhật giá mới nhất từ sàn giao dịch phi tập trung như Uniswap, nhưng chỉ khi được một nhóm nhỏ người dùng đặc quyền yêu cầu. Giờ đây, ngay cả khi kẻ tấn công có thể thao túng giá, chúng cũng không thể khiến giao thức của bạn thực sự sử dụng nó.
Cách tiếp cận này thực sự đơn giản để thực hiện và nhanh chóng giành được chiến thắng, nhưng có một số hạn chế - trong thời gian dây chuyền tắc nghẽn. Bạn có thể không cập nhật giá nhanh như bạn muốn và dễ bị mắc kẹt với các cuộc tấn công. Ngoài ra, bây giờ người dùng của bạn cần tin tưởng rằng bạn sẽ thực sự cập nhật giá.
Giảm tốc
Thao túng các oracle về giá là một hoạt động nhạy cảm với thời gian vì các nhà kinh doanh chênh lệch giá luôn theo dõi và muốn có cơ hội để tối ưu hóa bất kỳ thị trường nào dưới mức tối ưu.
Nếu kẻ tấn công muốn giảm thiểu rủi ro, họ sẽ muốn thực hiện hai giao dịch bắt buộc để thao túng một oracle về giá trong một giao dịch duy nhất để không có cơ hội một nhà kinh doanh chênh lệch giá có thể nhảy vào giữa.
Là một nhà phát triển giao thức, nếu hệ thống của bạn hỗ trợ nó, có thể chỉ cần thực hiện độ trễ ngắn nhất là 1 khối giữa người dùng vào và ra khỏi hệ thống của bạn.
Tất nhiên, điều này có thể ảnh hưởng đến khả năng tổng hợp và sự hợp tác giữa thợ đào - miner với các nhà giao dịch - trader.
Trong tương lai, những kẻ xấu có thể thực hiện thao túng oracle về giá trong nhiều giao dịch khi biết rằng người khai thác mà họ hợp tác sẽ đảm bảo rằng không ai có thể nhảy vào giữa và ăn bớt thu nhập của họ.
Giá trung bình theo thời gian (TWAP)
Uniswap V2 đã giới thiệu một TWAP oracle cho các nhà phát triển trên chuỗi sử dụng. Tài liệu đi vào chi tiết hơn về các đảm bảo bảo mật chính xác mà oracle cung cấp, nhưng nói chung đối với các nhóm lớn trong thời gian dài mà không bị tắc nghẽn chuỗi, TWAP oracle có khả năng chống lại các cuộc tấn công thao túng oracle rất cao.
Tuy nhiên, do bản chất của việc triển khai, nó có thể không phản ứng đủ nhanh với những thời điểm thị trường biến động mạnh và chỉ hoạt động đối với các tài sản đã có liquid token trên chuỗi.
M-of-N Reporters
Đôi khi họ nói rằng nếu bạn muốn điều gì đó được thực hiện đúng, bạn phải tự làm. Điều gì sẽ xảy ra nếu bạn tập hợp N người bạn đáng tin cậy và yêu cầu họ gửi giá mà họ cho là giá phù hợp trên chuỗi, và câu trả lời M tốt nhất trở thành giá hiện tại?
Cách tiếp cận này được sử dụng bởi nhiều dự án lớn hiện nay: Maker chạy một tập hợp nguồn cấp dữ liệu giá do các đơn vị đáng tin cậy điều hành, Compound tạo ra Oracle Open và có các tính năng báo cáo như Coinbase và Chainlink tổng hợp dữ liệu giá từ các nhà khai thác Chainlink và hiển thị nó trên chuỗi.
Chỉ cần lưu ý rằng nếu bạn chọn sử dụng một trong các giải pháp này, bạn hiện đã ủy thác sự tin cậy cho bên thứ ba và người dùng của bạn cũng sẽ phải làm như vậy.
Việc yêu cầu các phóng viên đăng thông tin cập nhật trên chuỗi theo cách thủ công cũng có nghĩa là trong thời gian thị trường biến động mạnh và tắc nghẽn chuỗi, các bản cập nhật giá có thể không đến đúng thời gian.
Đọc thêm: Các vấn đề của Oracle Blockchain
Kết luận
Giá cả là một thành phần quan trọng, nhưng thường bị bỏ qua của bảo mật DeFi. Sử dụng an toàn các oracle về giá rất khó và có rất nhiều cách để thu hút sự chú ý của cả bạn và người dùng.
Trong bài đăng đã đề cập đến các ví dụ trước đây về thao túng oracle về giá và xác định rằng việc đọc thông tin giá trong khi giao dịch có thể không an toàn và có thể dẫn đến thiệt hại tài chính nghiêm trọng.
Bài viết cũng đã thảo luận về một số kỹ thuật mà các dự án khác đã sử dụng để chống lại sự thao túng oracle về giá trong quá khứ. Tuy nhiên, cuối cùng, mọi tình huống là khác biệt và bạn có thể thấy mình không chắc liệu mình có đang sử dụng oracle về giá chính xác hay không.