LapTrinhBlockchain

Chia sẻ kiến thức về Lập Trình Blockchain

An toàn Bảo mật, Lập trình Blockchain, Lập trình Smart Contract

Kiểm tra code smart contract dự án Calo (CALO)

Kiểm tra code smart contract dự án Calo (CALO)

Kiểm tra code smart contract dự án Calo (CALO)

Chia sẻ bài viết
5
(2)

Calo là dự án “Move To Earn” làm trên BSC của đội ngũ Việt Nam ăn theo trend của STEPN. Nhìn qua dự án thấy khá giống STEPN, chi tiết về dự án này bạn google search ra rất nhiều bài viết về dự án. Mình sẽ không đi sâu phân tích dự án mà chỉ tập trung vào kiểm tra mã nguồn (source code) của smart contract.

Dự án này do có một người bạn đầu tư nên mình mới biết và muốn đi kiểm tra xem thử, chứ không phải do chủ động chọn hoặc có thành kiến gì với dự án cả. Các vấn đề đưa ra chỉ là ý kiến cá nhân, nhiều khi các vấn đề trong mã nguồn có thể do nghiệp vụ của dự án. Ở đây chúng ta tập trung nhiều vào khía cạnh “Phi tập trung”, smart contract càng ít bị can thiệp từ DEV thì càng tốt.

Dự án có hai token đã được list trên Pancake:

Token CALO

Chi tiết code bạn xem trên BSCScan tại địa chỉ: 0xb6b91269413b6B99242B1c0Bc611031529999999. Về các lib sử dụng thì tôi không quan tâm nhiều, nhưng có một số chỗ tôi để ý như sau:

Xem trong source code, hàm khởi tạo của contract Token bạn sẽ thấy tổng cung tối đa là 500 triệu token và được khởi tạo ngay từ đầu. Bạn có thể kiểm tra lại trong tab “Read Contract“, xem biến maxSupply totalSupply. Trong đây cũng khởi thiết lập địa chỉ contract Router của Pancake, mục đích cũng chỉ để lấy địa chỉ contract của Pair. Đoạn này chưa thấy vấn đề gì.

Dự án CALO: Phần khởi tạo Smart Contract của token quản trị CALO
Dự án CALO: Phần khởi tạo Smart Contract của token quản trị CALO

Kiểm tra tiếp hàm _initialize() thì được đẩy hết sang ví tạo contract, có thể check thêm ở giao dịch tạo contract: 0x54565e523ed71ad8f8312133b1887e772e6b51e91fd8991569eaca602cdb84cc. Ví tạo contract là không phải là một contract mà là một ví bình thường ví bình thường: 0x1111116ac137b28c768a890bf401834d46c2ea09, nhưng nhìn tên họ đặt cho ví mọi người có thể nghĩ đó là một contract. Như vậy toàn bộ token này do đội DEV quản lý, họ muốn chuyển đi đâu cũng được, phụ thuộc vào sự uy tín và lời hứa của họ:

 Dự án CALO: Toàn bộ token CALO nằm trong ví do DEV quản lý
Dự án CALO: Toàn bộ token CALO nằm trong ví do DEV quản lý
Dự án CALO: Toàn bộ token CALO nằm trong ví do DEV quản lý
Dự án CALO: Toàn bộ token CALO nằm trong ví do DEV quản lý

Đây là token quản trị, mình chưa rõ có giới hạn lượng cung trong Whitepaper hay không, nhưng trong Smart Contract có hàm để ĐÚC (MINT) thêm token, quyền này nằm trong tay của DEV:

Dự án CALO: Quyền đúc thêm token CALO nằm trong tay của DEV
Dự án CALO: Quyền đúc thêm token CALO nằm trong tay của DEV

Trong smart contract có hàm renounceOwnership() để từ bỏ quyền, nhưng hiện tại hàm này chưa được gọi, bạn kiểm tra owner() sẽ biết:

Dự án CALO: Dự án đang kiểm soát Smart Contract
Dự án CALO: Dự án đang kiểm soát Smart Contract

Theo như trong code thì vẫn có trường hợp giá trị owner là 0x000000…000 nhưng thực sự thì DEV vẫn chưa từ bỏ quyền, vì nó còn liên quan tới biến _previousOwner, bạn để ý trong hàm lock()unlock(). Nếu DEV gọi hàm lock() thì owner sẽ được thiết lập về 0x0000…0000 nhưng DEV có thể khôi phục bằng lệnh unlock():

Chú ý tới hàm lock() và unlock()
Chú ý tới hàm lock() và unlock()

Token này DEV có thu phí mỗi lần transfer(), phí này hiện tại về ví 0x444444cc0e6801a1bacb6903de7e6fce69239401. Phần này mình nghĩ chắc sẽ có trong Whitepaper của dự án:

Ví nhận phí mỗi khi chuyển token CALO
Ví nhận phí mỗi khi chuyển token CALO

Phí hiện tại là 0.1%:

Phí chuyển token CALO: 0.1%
Phí chuyển token CALO: 0.1%
Thu phí chuyển CALO
Thu phí chuyển CALO

Ngoài ra smart contract còn cài đặt cơ chế chặn một số ví (Admin thêm các ví này vào blacklist để chặn), chặn không cho giao dịch trong thời gian bao lâu. Ngoài ra smart contract còn có cơ chế chặn không cho transfer() một lượng quá lớn. Hiện tại cờ này chưa được bật, nếu được bật mỗi lần giao dịch sẽ không quá 50,000 CALO. Đây là cơ chế hợp lý để tránh giao dịch một lượng lớn trong 1 giao dịch:

Cơ chếc chặn để tránh mua/ban một lượng lớn CALO trong 1 giao dịch
Cơ chếc chặn để tránh mua/ban một lượng lớn CALO trong 1 giao dịch

Token FIT

Chi tiết code bạn xem trên BSCScan tại địa chỉ: 0x77922a521182a719a48ba650ac2a040269888888. Trong contract này cũng có một số phần giống như contract CALO như:

  • Thu phí mỗi thao tác transfer(), swap() nếu teamWallet được thiết lập. Hiện tại đang chưa thu phí.
  • Cơ chế chặn địa chỉ, chặn thời gian giữa hai lần giao dịch.

Ở đây mình chú ý một số hàm sau:

  • Admin có quyền rút token, NFT ra khỏi contract => Nếu không may bạn chuyển nhầm token bất kỳ vào địa chỉ này thì bạn có thể nhờ DEV để lấy lại được nhé.
  • DEV có quyền đúc thêm token FIT => Hầu hết các GameFi đều phải có hàm này để trả token mà người chơi kiếm được trong game.
Admin có quyền rút token, NFT ra khỏi contract
Admin có quyền rút token, NFT ra khỏi contract
DEV có quyền đúc thêm token FIT
DEV có quyền đúc thêm token FIT

Trên đây chỉ là phân tích đơn thuần dựa trên Smart Contract của dự án, mỗi dự án có nghiệp vụ khác nhau nên cài đặt nó khác nhau. Mình không có bất kỳ bình luận nào về dự án, mình đưa ra thông tin để các bạn tham khảo và xác thực lại nó.

Bài viết này có hữu ích với bạn?

Kích vào một biểu tượng ngôi sao để đánh giá bài viết!

Xếp hạng trung bình 5 / 5. Số phiếu: 2

Bài viết chưa có đánh giá! Hãy là người đầu tiên đánh giá bài viết này.

Trả lời

Giao diện bởi Anders Norén