Nguyên tắc kiểm tra các giao thức đặt cược

Nguyên tắc kiểm tra các giao thức đặt cược

Thơi gian đọc: 6 phút

Trong blog này, chúng tôi đã phác thảo khái niệm về các giao thức đặt cược thanh khoản và hướng dẫn kiểm toán cho các giao thức đặt cược. Các hướng dẫn bao gồm một loạt các điểm dễ bị tổn thương như cơ chế rút tiền, lỗi làm tròn, lệnh gọi bên ngoài, logic phí, vòng lặp, cấu trúc, thời lượng đặt cược, v.v. Bài đăng trên blog này sẽ là một tài liệu tham khảo hữu ích để kiểm tra các giao thức đặt cược và có thể giúp bạn xác định các lỗi tiềm ẩn .

Cổ phần thanh khoản là gì?

Đặt cược thanh khoản cho phép người dùng đặt cược các khoản nắm giữ tiền điện tử của họ và kiếm phần thưởng mà không phải hy sinh tính thanh khoản. Thay vì khóa tiền của họ trong một khoảng thời gian cố định, người dùng có thể nhận được mã thông báo thanh khoản đại diện cho tài sản đặt cọc của họ. Mã thông báo này có thể được giao dịch hoặc sử dụng giống như bất kỳ loại tiền điện tử nào khác, cho phép người dùng sử dụng tài sản của họ theo ý muốn trong khi vẫn kiếm được phần thưởng đặt cược.

Hướng dẫn kiểm tra các giao thức đặt cược PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Ví dụ: bạn có 100 ETH muốn đặt cược trên mạng Ethereum. Thay vì khóa ETH của bạn trong một khoảng thời gian cố định, bạn có thể sử dụng dịch vụ đặt cược thanh khoản như Lido để đặt cược ETH của mình và nhận lại một mã thông báo thanh khoản có tên là stETH. Với stETH, bạn vẫn có thể giao dịch hoặc sử dụng ETH đã đặt cọc của mình trong khi kiếm phần thưởng đặt cược.

Hãy bắt đầu với việc kiểm tra các hợp đồng đặt cược:

Kiểm tra tất cả các thông số kỹ thuật kiểm toán có sẵn trước khi bắt đầu với mã hợp đồng. Nó có thể ở dạng sách trắng, tệp README hoặc thứ gì khác. Những điều này sẽ cung cấp cho bạn ý tưởng về nội dung của mã hợp đồng.

Khi xem tài liệu đặc tả kiểm toán cho hợp đồng đặt cược, hãy tìm những điểm sau:

  • Các loại Phí dựa trên và tính toán của họ.
  • Cơ chế phần thưởng cho mã thông báo đặt cược
  • Quyền hạn của chủ sở hữu
  • Hợp đồng có giữ ETH không?
  • Hợp đồng sẽ nắm giữ những token nào?
  • Hợp đồng ban đầu mà từ đó nó được rẽ nhánh

Kiểm tra xem các thông số kỹ thuật có khớp với mã không. Bắt đầu với phí và tokenomics, tiếp theo là xác thực quyền hạn của chủ sở hữu. Kiểm tra xem tất cả các giá trị phần thưởng và phí có phù hợp với tài liệu hay không.

Điểm dễ bị tổn thương để tìm kiếm?

1. Cơ chế rút tiền thưởng:

Kiểm tra xem cơ chế phần thưởng mã thông báo đặt cược có được triển khai chính xác không và phần thưởng đó có được phân phối công bằng và cân xứng cho tất cả những người đặt cược hay không. Các dự án có thể phân phối phần thưởng theo hai cách: tự động, định kỳ hoặc theo yêu cầu của chính người dùng. Chức năng rút tiền có thể được triển khai và tùy chỉnh theo logic nghiệp vụ của giao thức.
Dưới đây là một vài điểm kiểm tra:

  • Kiểm tra xem có bất kỳ người dùng nào có thể rút nhiều hơn số tiền thưởng + số tiền đặt cược không.
  • Kiểm tra Tràn/tràn trong tính toán số tiền
  • Kiểm tra xem các tham số nhất định có thể có tác động tiêu cực đến phần thưởng trong quá trình tính toán hay không.
  • Nếu block.timestamp hoặc block.number được sử dụng trong chức năng này. Kiểm tra xem nó có thể được khai thác theo bất kỳ cách nào không.

2. Logic phí:

Nếu tiền gửi và rút tiền phải chịu một số khoản phí, thì hãy xác minh rằng không người dùng nào có thể bỏ qua khoản phí đó. Ngoài ra, hãy cảnh giác với bất kỳ sự cố tràn hoặc tràn tiềm ẩn nào. Chỉ quản trị viên hoặc chủ sở hữu mới được phép thay đổi cài đặt phí. Đồng thời xác minh rằng ngưỡng cho phí tối đa đã được thiết lập, ngăn quản trị viên đặt ngưỡng đó ở mức quá cao.

3. Cơ chế đúc/đốt của LP Token:

Xác minh xem các cơ chế đúc và đốt đã được thực hiện chính xác chưa. Hàm ghi sẽ đảo ngược tất cả các thay đổi trạng thái được thực hiện bởi hàm đúc. Ngoài ra, điều quan trọng là phải xác minh rằng người dùng nhận được số lượng mã thông báo thích hợp trong lần đặt cược đầu tiên, khi nhóm trống.

Logic của các chức năng đúc và ghi có thể được xác minh bằng toán học để phát hiện ra bất kỳ lỗ hổng ẩn nào. Ngoài ra, tổng nguồn cung mã thông báo LP được đúc không được vượt quá tài sản được đặt cọc.

4. Lỗi làm tròn:

Mặc dù một số lỗi làm tròn nhỏ nhất định thường không thể tránh khỏi và không đáng lo ngại, nhưng chúng có thể tăng lên đáng kể khi có thể nhân chúng lên. Tìm kiếm các trường hợp lợi thế mà một người có thể kiếm lợi từ các lỗi làm tròn bằng cách liên tục đặt cược và hủy đặt cược.

Để xác định xem các lỗi làm tròn có thể tích lũy thành một lượng đáng kể trong một khoảng thời gian dài hay không, chúng ta có thể tính toán phạm vi các lỗi làm tròn có thể xảy ra theo phương pháp toán học.

5. Thời lượng đặt cọc:

Đảm bảo rằng các phép tính thời lượng đặt cược trong hợp đồng phù hợp với logic kinh doanh đã chỉ định. Xác minh rằng người dùng không thể đổi phần thưởng trước khi thời hạn đặt cược kết thúc bằng cách bỏ qua kiểm tra thời lượng. Ngoài ra, hãy kiểm tra xem kẻ tấn công có thể khai thác thời lượng đặt cược để nhận thêm phần thưởng hay không.

6. Cuộc gọi bên ngoài và Xử lý mã thông báo:

Hầu hết các cuộc gọi bên ngoài sẽ là hợp đồng mã thông báo. Vì vậy, chúng tôi phải xác định loại mã thông báo nào mà hợp đồng đặt cược sẽ xử lý. Điều cần thiết là phải kiểm tra các cuộc gọi bên ngoài để tìm bất kỳ lỗi nào và các cuộc tấn công vào lại. Mã thông báo giảm phát hoặc mã thông báo có phí chuyển nhượng, chẳng hạn như Safemoon, có thể gây ra sự cố nếu logic của chúng không được triển khai chính xác.

7. Kiểm tra thao túng giá:

Thao túng giá thông qua khoản vay nhanh là một trong những vụ hack thường xuyên nhất đối với các dự án DeFi. Có thể có những tình huống mà những kẻ xấu có thể sử dụng các khoản vay chớp nhoáng để thao túng giá trong quá trình đặt cược hoặc hủy đặt cọc số lượng lớn mã thông báo. Xem xét cẩn thận các chức năng đặt cược và hủy đặt cược để tránh các tình huống rủi ro có thể dẫn đến các cuộc tấn công thao túng giá dựa trên khoản vay chớp nhoáng và làm mất tiền của những người dùng khác.

8. Một số kiểm tra bổ sung:

  • Vòng lặp: Nếu logic hợp đồng liên quan đến việc lặp qua các mảng, thì điều quan trọng là phải đảm bảo rằng giới hạn gas của khối không bị vượt quá. Điều này có thể xảy ra khi kích thước mảng rất lớn, vì vậy bạn nên điều tra chức năng nào có thể làm tăng kích thước của mảng và liệu có bất kỳ người dùng nào có thể khai thác nó để gây ra một cuộc tấn công DoS hay không. kiểm tra cái này báo cáo.
  • Cấu trúc: Hợp đồng đặt cược sử dụng loại cấu trúc để lưu trữ dữ liệu người dùng hoặc nhóm. Khi khai báo hoặc truy cập một cấu trúc trong một hàm, điều quan trọng là phải chỉ định nên sử dụng “bộ nhớ” hay “bộ nhớ”. Nó có thể giúp chúng ta tiết kiệm xăng. Để biết thêm thông tin, vui lòng tham khảo bài viết này.
  • Chạy phía trước: Tìm kiếm bất kỳ tình huống nào mà các tác nhân độc hại có thể chạy trước bất kỳ giao dịch nào để có lợi cho chúng.
  • Kiểm tra khả năng hiển thị chức năng/kiểm soát truy cập: Bất kỳ chức năng nào được khai báo là bên ngoài hoặc công khai đều có thể được truy cập bởi bất kỳ ai. Do đó, điều quan trọng là phải đảm bảo rằng không có chức năng công cộng nào có thể thực hiện bất kỳ hành động nhạy cảm nào. Điều quan trọng là phải xác minh rằng giao thức đặt cược đã triển khai các biện pháp kiểm soát phù hợp để ngăn chặn truy cập trái phép vào cả số tiền đặt cược và cơ sở hạ tầng của hệ thống.
  • Rủi ro tập trung: Điều quan trọng là không trao cho chủ sở hữu quyền hạn quá mức. Nếu địa chỉ quản trị bị xâm phạm, nó có thể gây ra thiệt hại đáng kể cho giao thức. Xác minh rằng các đặc quyền của chủ sở hữu hoặc quản trị viên là phù hợp và đảm bảo rằng giao thức có kế hoạch sẵn sàng để xử lý các tình huống trong đó khóa riêng tư của quản trị viên bị rò rỉ.
  • Xử lý ETH / WETH: Hợp đồng thường bao gồm logic cụ thể để xử lý ETH. Ví dụ: khi msg.value > 0, hợp đồng có thể chuyển đổi ETH thành WETH trong khi vẫn cho phép nhận trực tiếp WETH. Khi người dùng chỉ định WETH làm tiền tệ nhưng lại gửi ETH cùng với lệnh gọi, điều này có thể phá vỡ một số bất biến nhất định và dẫn đến hành vi không chính xác.

Cho đến nay, chúng ta đã thảo luận về các giao thức đặt cược thanh khoản và hướng dẫn kiểm toán cho các giao thức đó. Tóm lại, đặt cược thanh khoản cho phép người dùng kiếm được phần thưởng đặt cược mà không phải hy sinh tính thanh khoản. Chúng tôi đã vạch ra những điểm dễ bị tổn thương trong hợp đồng đặt cược mà kiểm toán viên phải chú ý, chẳng hạn như cơ chế rút tiền, logic phí, cơ chế đúc/đốt mã thông báo LP, lỗi làm tròn, thời lượng đặt cược, lệnh gọi bên ngoài và kiểm tra thao túng giá. 

Chúng tôi khuyên các kiểm toán viên nên kiểm tra các tài liệu thông số kỹ thuật kiểm toán, so khớp các thông số kỹ thuật với mã và kiểm tra phí cũng như xác thực mã thông báo. Chúng tôi cũng khuyên bạn nên kiểm tra thêm chẳng hạn như lặp qua mảng, chỉ định bộ nhớ hoặc bộ lưu trữ cho dữ liệu kiểu cấu trúc và các kịch bản chạy trước. Những nguyên tắc này sẽ hữu ích cho việc kiểm tra các giao thức đặt cược và giúp xác định các lỗi tiềm ẩn.


11 Lượt xem

Dấu thời gian:

Thêm từ quillhash