Gửi bài viết tới BigCoin

CREDITS : Review Đánh Gia Code API của Credits

Đăng bởi: StevenPalley  - 05/05/2018 - 927 lượt xem
Chia sẻ
 

Phân tích kỹ thuật và đánh giá

Khái quát chung:

Tôi đã tiến hành đánh giá các code kể từ vài ngày qua để cung cấp cho nhóm các đề xuất và khuyến nghị của tôi sau khi kiểm toán nội bộ (biên dịch, cấu trúc và review code).

Công việc mà tôi đã làm được từ vài ngày qua hoàn toàn rất cần thiết để cung cấp phản hồi tốt hơn cho cộng đồng và cho nhóm phát triển cốt lõi. Tôi không được trả tiền để thực hiện đánh giá này và đó là nhiệm vụ của tôi với tư cách là cố vấn kỹ thuật của dự án để cung cấp cho bạn một cách công khai những suy nghĩ của tôi.

Trước hết, phân tích sau đây sẽ cho bạn thấy mô hình hóa của code để hiểu rõ hơn cấu trúc của API.

Mô-đun API của nền tảng CREDITS đã sẵn sàng cho tài khoản github CREDITS và bao gồm các tệp sau:

APIHandler.cpp

APIHandler.h

APIHandlerBase.cpp

APIHandlerBase.h

APIHandlerInterface.h

CallStats.cpp

CallStats.h

csconnector.cpp

DBHandlers.cpp

DBHandlers.h

DebugLog.h

Validation.h

ValidationTests.cpp

Trạng thái của code thực tế cho thấy không có sự hiện diện của giấy phép trong các header file. Tôi biết rằng đây không phải là phiên bản cuối cùng nhưng tôi khuyên bạn nên thêm nó càng sớm càng tốt.

 

Tôi nhận thấy ngôn ngữ trong code của bạn là bằng tiếng Nga, nhưng tôi đề nghị bạn nên dịch nó sang tiếng Anh, ngôn ngữ Shakespeare. Tuy nhiên tôi rất thích đọc nó bằng ngôn ngữ Moliere.

Với vai trò như một máy chủ API, code chủ yếu được chạy và biên dịch trên nền tảng Linux. Dựa trên thực tế này, tôi đã không tìm thấy bất kỳ Makefile nào để giúp tôi làm điều đó đúng cách. Tôi khuyên bạn nên tạo một Makefile được sử dụng để xây dựng các chương trình nhị phân từ mã nguồn và làm cho quy trình làm việc của bạn có thể tái sản xuất được.

Đối với phần xác thực, cấu trúc của code được triển khai dưới dạng macro. Mặc dù việc triển khai này mang lại khả năng thích ứng tuyệt vời, nhưng nó hy sinh rất nhiều khả năng hiểu và sẵn sàng. Sử dụng thư viện kiểm tra chuẩn có thể là một khởi đầu tốt nếu bạn định thay đổi nó.

Bạn cũng có thể tách Unit Test từ các tệp “prod”. Nó cho phép các cộng tác viên thêm các bài kiểm tra của riêng họ trong giai đoạn thử nghiệm mà bạn dự định chạy trong những ngày tới.

Tìm hiểu sâu hơn về từng file

Tôi đã phân tích từng file được trình bày một cách riêng biệt và mô hình hóa nó để cung cấp càng nhiều chi tiết càng tốt về kiến trúc được chọn bởi coreteam CREDITS.

APIHandler.cpp

#include “APIHandler.h”

#include “DebugLog.h”

#include “csconnector/csconnector.h”

#include “CallStats.h”

#include “Validation.h”

Biểu đồ của các header file trông như sau:

Namespace:

csconnector

csconnector::detail

Các chức năng:

VALIDATE (nguồn)

VALIDATE (mục tiêu)

VALIDATE (tiền tệ)

APIHandler.h

#include

#include “APIHandlerInterface.h”

Biểu đồ của các header file trông như sau:

 

 

Biểu đồ của các file này được bao gồm:

Các lớp code:

Lớp csconnector::APIHandler

Namespace:

csconnector

Nhận xét:

Header file mô tả các phương thức và tham số của chúng. Không có nhận xét nào khác có liên quan mà tôi nhận thấy

APIHandlerBase.cpp

#include “APIHandlerBase.h”

Biểu đồ của các header file được bao gồm trông như sau:

Các lớp:

struct csconnector::detail::APIRequestStatus

Namespace:

csconnector

csconnector::detail

Các biến (Variables):

APIRequestStatus csconnector::detail::statuses

[static_cast< size_t >(APIHandlerBase::APIRequestStatusType::MAX)]

Nhận xét:

Áp dụng chính xác các kiểu dữ liệu để giảm dung lượng bộ nhớ đã sử dụng khi gán trạng thái của một function call.

APIHandlerBase.h

#include “API.h”

Biểu đồ của các header file được bao gồm cho APIHandlerBase.h:

Biểu đồ các tệp, tệp này được bao gồm trong:

Các lớp:

struct csconnector::APIHandlerBase

Namespace:

csconnector

Nhận xét:

File header mô tả các phương thức và tham số của chúng. Không có nhận xét liên quan.

APIHandlerInterface.h

#include “API.h”
 #include “APIHandlerBase.h”

Biểu đồ của các header file được bao gồm cho APIHandlerBase.h:

 

Biểu đồ các tệp, tệp này được bao gồm trong:

Các lớp:

struct csconnector::APIHandlerInterface

Namespace:

сsconnector

Nhận xét:

File header mô tả các phương thức và tham số của chúng. Không có nhận xét liên quan.

CallStats.cpp

#include “CallStats.h”
 #include
 #include
 #include
 #include “DebugLog.h”

Biểu đồ của các header file được bao gồm cho CallStats.cpp:

Typedefs:

using csconnector::call_stats::Counter = std::atomic

using csconnector::call_stats::NumCallsPerCommand

 = std::array<Counter, NumCommands>

using csconnector::call_stats::NumCallsPerCommandStats

 = std::array<int, NumCommands>

Các chức năng:

NumCallsPerCommandStats csconnector::call_stats::get ()

void csconnector::call_stats::count (Commands command)

void csconnector::call_stats::clear ()

void csconnector::call_stats::start ()

void csconnector::call_stats::stop ()

Các biến:

constexpr size_t csconnector::call_stats::NumCommands

 = (size_t)Commands::Max

NumCallsPerCommand csconnector::call_stats

::numCallsPerCommand

std::chrono::steady_clock::time_point csconnector

::call_stats::lastUpdateTime = std::chrono::steady_clock::now()

std::thread csconnector::call_stats::thread

std::atomic_bool csconnector::call_stats::quit {false}

Nhận xét:

CallStats.h

#include <csconnector/csconnector.h>

Biểu đồ của các header files được bao gồm cho CallStats.cpp:

Biểu đồ các tệp, tệp này được bao gồm trong:

Namespace:

csconnector

csconnector::call_stats

Các chức năng:

void csconnector::call_stats::start ()

void csconnector::call_stats::stop ()

void csconnector::call_stats::count (Commands command)

Nhận xét:

File header mô tả các phương thức và tham số của chúng. Không có nhận xét liên quan.

csconnector.cpp

#include“csconnector/csconnector.h”

#include“DebugLog.h”

#include“APIHandler.h”

#include“DBHandlers.h”

#include“CallStats.h”

#include

#include

#include<thrift/protocol/TBinaryProtocol.h>

#include<thrift/transport/TServerSocket.h>

#include<thrift/transport/TBufferTransports.h>

#include<thrift/server/TThreadedServer.h>

Biểu đồ của các header file được bao gồm cho csconnector.cpp: 

Namespace:

csconnector

csconnector::detail

Typedefs:

typedef std::lock_guard< std::mutex > csconnector::detail::ScopedLock

Các chức năng:

void csconnector::detail::start (const Config &config)

void csconnector::detail::stop ()

void csconnector::start (const Config &config)

void csconnector::stop ()

Các biến:

td::unique_ptr< TThreadedServer > csconnector::detail::server = nullptr

std::mutex csconnector::detail::mutex

std::thread csconnector::detail::thread

Nhận xét:

DBHandlers.cpp

#include “DBHandlers.h”

#include <csdb/csdb.h>

#include “csconnector/csconnector.h”

#include

#include

Biểu đồ của các header file được bao gồm cho DBHandlers.cpp:

Namespace:

db_handlers

Typedefs:

Sử dụng db_handlers::PoolNumber = uint64_t

Các chức năng:

void db_handlers::init ()

void db_handlers::deinit ()

void db_handlers::BalanceGet (BalanceGetResult &_return, const Address &address, const Currency &currency)

void db_handlers::string_to_uuid (const std::string &uuid_str, uuid_t uuid)

bool db_handlers::GetTransaction (const TransactionId &transactionId, Transaction &transaction)

void db_handlers::TransactionGet (TransactionGetResult &_return, const TransactionId &transactionId)

void db_handlers::SubstituteTransactionHash (api::Transaction &transaction, const std::string &newHash)

Đó thực sự là một hack (ngôn ngữ lập trình).

std::string db_handlers::FormatTransactionHash (const std::string &poolHash, size_t transacionNumber)

void db_handlers::TransactionsGet (TransactionsGetResult &_return, const Address &address, const int64_t offset, const int64_t limit)

void db_handlers::PoolListGet (PoolListGetResult &_return, const int64_t offset, const int64_t limit)

void db_handlers::PoolGet (PoolGetResult &_return, const PoolHash &hash)

Nhận xét:

DBHandlers.h

#include “API.h”

Biểu đồ của các header file được bao gồm cho DBHandlers.h:

Biểu đồ các tệp, tệp này được bao gồm trong:

Namespace:

db_handlers

Các chức năng:

void db_handlers::init ()

void db_handlers::deinit ()

void db_handlers::BalanceGet (api::BalanceGetResult &_return, const api::Address &address, const api::Currency &currency)

void db_handlers::TransactionGet (api::TransactionGetResult &_return, const api::TransactionId &transactionId)

void db_handlers::TransactionsGet (api::TransactionsGetResult &_return, const api::Address &address, const int64_t offset, const int64_t limit)

void db_handlers::PoolListGet (api::PoolListGetResult &_return, const int64_t offset, const int64_t limit)

void db_handlers::PoolGet (api::PoolGetResult &_return, const api::PoolHash &hash)

Nhận xét:

File header mô tả các phương thức và tham số của chúng. Không có nhận xét liên quan.

DebugLog.h

#include

Biểu đồ của các header file được bao gồm cho for DebugLog.h:

Biểu đồ các tệp, tệp này được bao gồm trong:

Macros:

#define DEBUG_LOG

Các chức năng:

void Log ()

template

void Log (T t, Args… args)

template

void DebugLog (T t, Args… args)

Macros:

DEBUG_LOG

#define DEBUG_LOG

Các chức năng:

DebugLog()

template

void DebugLog ( T t,Args… args)

Call graph:

Biểu đồ của function call:

Log() [1/2]

void Log

Biểu đồ của function call:

Log() [2/2]

template

void Log(T t,

Args… args

)

Call graph:

Nhận xét:

Không có nhận xét liên quan ở giai đoạn phát triển này.

Validation.h

#include

#include

#include

#include

#include

Biểu đồ của các header file được bao gồm cho Validation.h:

Biểu đồ các tệp, tệp này được bao gồm trong:

Các lớp:

struct validation::Validator< T >

struct validation::StringLengthValidator< O >

struct validation::StringLengthValidator< O >::Int2Type< I >

struct validation::NonEmptyValidator

struct validation::NonZeroValidator

struct validation::EqualToValidator< T >

struct validation::CustomValidator< T >

struct validation::ValidatorBuilder< T >

struct validation::Dummy

struct validation::ValidationTraits< T, D >

Namespace:

Validation code

Macros:

#define VALIDATE_BEGIN_(C, D)

#define VALIDATE_BEGIN(C) VALIDATE_BEGIN_(C, Dummy)

#define VALIDATE_BEGIN_EX(C, D) struct D{}; VALIDATE_BEGIN_(C, D)

#define VALIDATE(F)

#define VALIDATE_END()

Typedef:

Sử dụng xác thực::FieldId = uint8_t

Sử dụng xác thực::ValidatorId = uint8_t

Sử dụng xác thực::ValidationResult = std::tuple< FieldId, ValidatorId >

Kiểu dữ liệu Enum:

enum validation::StringLengthOperation { validation::Less, validation::More, validation::Equal }

Các biến:

constexpr ValidationResult validation::NoError = { 0, 0 }

Macros:

Xác thực

#define VALIDATE ( F )

Macro definition:

 

 

Nhận xét:

file header mô tả các phương thức và tham số của chúng. Không có nhận xét liên quan ở giai đoạn phát triển này.

ValidationTests.cpp

#include “Validation.h”

#include

Biểu đồ của các header file được bao gồm cho ValidationTests.cpp:

Các lớp:

struct Test

Các chức năng:

VALIDATE (x).EqualTo(1)

VALIDATE (s).Length< More >(2)

void validationTest ()

Functions:

VALIDATE() [1/2]

VALIDATE ( x )

VALIDATE() [2/2]

VALIDATE ( s )

validationTest()

void validationTest ()

Biểu đồ cuả function call:

Nhận xét:

Kết luận

Mặc dù nhận thấy một số cải tiến cho code vẫn cần thiết nhưng cấu trúc của code dường như được thiết kế để có khả năng mở rộng. Là cố vấn kỹ thuật của Credit, tôi cảm thấy tự tin về dự án và những gì nhóm nghiên cứu đang cố gắng đạt được.

Thật vậy, xây dựng một giao thức mới từ đầu sau một cộng đồng mạnh mẽ cần có thời gian. Nhóm cốt lõi sẽ xuất bản từng phần code trên GitHub để các thành viên cộng đồng có thể nhận được phản hồi. Nhóm CREDITS đã bắt đầu chia sẻ một phần của code và họ sẽ tiếp tục làm điều đó trong những ngày tới.

Cộng đồng sẽ được tham gia nhiều hơn khi một phiên bản ổn định đã sẵn sàng để được triển khai. Ý kiến cá nhân, tôi hiếm khi thấy trong không gian cộng đồng blockchain có một nhóm gần gũi với cộng đồng của họ như Credit.

Kiên nhẫn dẫn đến sự cứu rỗi, vội vàng dẫn đến sự đau khổ. Ai muốn làm những điều vĩ đại thì phải suy nghĩ sâu sắc về các chi tiết bởi vì những tai họa đang đứng ở đằng sau. Hãy kiên nhẫn chờ đợi cuộc cách mạng sắp bùng nổ.

Nguồn: medium.com

Bạn đang đọc bài: CREDITS : Review Code API

Biên soạn: https://bigcoinvietnam.com/

Tags
Chia sẻ  
  
  
  
100% Rating
Điểm: 5 / 5
2 Bình chọn

StevenPalley

Đội ngũ dịch bài từ các trang web uy tín ở nước ngoài. Với sự đánh giá cao của các chuyên gia

[Đánh giá Beaxy] 7 điều cần biết trước khi sử dụng (Cập nhật 2019)


Đánh giá Beaxy: 7 điều cần biết trước khi sử dụng (Cập nhật 2019)

Beaxy là một sàn giao dịch tiền điện tử hoàn toàn mới nhằm giải quyết một số vấn đề không được khắc phục ở các sàn giao dịch lớn khác như Binance. Sàn giao dịch này đã được một số cộng đồng đón nhận vì các tính năng rất thu hút như kết hợp lệnh dừng lỗ và đặt lệnh, thị trường tiền fiat cho nhiều altcoin, hỗ trợ support trực tuyến 24/7, v.v. Để giúp bạn tìm hiểu xem đây có phải là sàn giao dịch phù hợp với bạn hay không, chúng tôi đưa ra bài viết này nhằm nêu ra một vài ưu nhược điểm của sàn giao dịch.

Thân thiện với người mới bắt đầu: Yếu tố quan trọng nhất trong Đánh giá Beaxy này chắc chắn là chủ đề về trải nghiệm người dùng và sự thân thiện với người mới bắt đầu. Mặc dù Beaxy rõ ràng đang nỗ lực rất nhiều để làm cho sàn giao dịch của họ trở nên dễ sử dụng, nhưng có một sự khác biệt lớn đối với các sàn giao dịch cơ bản như Coinbase. Khi có nhiều sự lựa chọn về các cặp tiền Crypto, nhiều kiểu đặt mua và biểu đồ khác nhau có thể là những nguyên nhân tạo ra sự khó khăn đối với người dùng. Beaxy có một bộ tính năng rất đơn giản và dễ sử dụng đối với những người mới chỉ tham gia thị trường tiền điện tử lần đầuSắp tới Beaxy sẽ cho ra mắt Help Center giúp người mới bắt đầu nhanh chóng học cách sử dụng sàn giao dịch.

 

Đội ngũ hỗ trợ khách hàng của BeaxyĐội ngũ support của Beaxy ở cả 3 văn phòng trên khắp thế giới luôn trực tiếp hỗ trợ người dùng 24/7. Beaxy là một trong số ít sàn giao dịch có live chat support (chat trực tiếp với support), điều này rất cần thiết khi người dùng sử dụng dịch vụ gặp một số vấn đề phát sinh ngoài ý muốn. Có nhiều cặp giao dịch dễ dàng lựa chọnBeaxy có nhiều lựa chọn giao dịch với các cặp Bitcoin, Ethereum và thậm chí là Fiat. Khi ra mắt, Beaxy sẽ hỗ trợ nhiều loại tiền điện tử, bao gồm BTC, ETH, XRP, NEO, TRX và hàng chục token ERC-20 và NEP-5.  Tính năng cốt lõiBeaxy sẽ kết hợp với một số bên đối tác khác để tạo ra một sàn giao dịch hứa hẹn là tốt hơn so với Binance thời điểm hiện tại. Sàn giao dịch cũng cung cấp một số tính năng được thiết kế đặc biệt để giúp quản lý danh mục tiền điện tử dễ dàng hơn. Điều này bao gồm cho phép người dùng đặt thông báo giá tùy chỉnh và tạo nhiều danh mục đầu tư dựa trên hồ sơ rủi ro của họ. Hơn nữa, Beaxy cũng có một ứng dụng di động mang tất cả các chức năng trên website điều này rất tiện lợi khi bạn muốn tối ưu việc di chuyển Bảo đảm quỹ . Beaxy rất coi trọng vấn đề bảo mật. Bên cạnh tất cả các biện tốt nhất về bảo mật tiêu chuẩn như xác thực hai yếu tố, nhiều máy chủ và mã hóa mạnh mẽ, việc trao đổi cũng đi tiên phong trong tiện ích bảo mật được gọi là IP whitelist. Hệ thống này có thể bảo vệ người dùng khi họ đã thêm tên mình và mật khẩu của họ vào Beaxy, Beaxy sẽ chặn kẻ tấn công nếu IP của anh ta không khớp với chủ sở hữu thực sự của tài khoản. 

Hiệu suất và tốc độ

Một trong những khía cạnh quan trọng nhất của trao đổi tiền điện tử là nó cần phải nhanh và hoạt động tốt trong thời điểm có nhu cầu cao, một số lệnh order bị đóng băng hoặc lệnh bị từ chối đôi khi có thể khiến nhà đầu tư tốn rất nhiều tiền. Để ngăn chặn các vấn đề gây khó khăn cho các sàn giao dịch như BitMex và Binance trong thời điểm nhu cầu tăng cao, Beaxy đã phát triển một hệ thống có thể hỗ trợ tới 225.000 tx / s cho mỗi cặp giao dịch. Với tổng số 100 cặp giao dịch, điều đó sẽ tương đương với công suất tối đa 22,5M tx /s.

Hơn nữa, Beaxy cũng cung cấp cổng deposit fiat cho người dùng điều này rất tiện lợi so với nhiều sàn giao dịch tiền điện tử hiện nay.

Lệ phí

Một trong những điều hấp dẫn nhất của Beaxy là mức phí cực kỳ hấp dẫn. Beaxy là một trong số ít các sàn giao dịch tiền điện tử có token riêng BXY. Người dùng Beaxy có thể giữ một lượng BXY nhất định để giảm phí tới 50%. Ngoài ra, nếu người dùng giữ BXY cùng với số điểm loyalty họ kiếm được, họ có thể hạ thấp mức phí giao dịch xuống chỉ còn 0,075%. Điều này cũng tương tự như cấu trúc phí Binance, cũng chỉ cung cấp mức phí giao dịch thấp hơn Beaxy cho những người dùng giao dịch tiền điện tử hơn 100 BTC mỗi tháng. Thậm chí ở Coinbase họ tính phí lên tới 1,5%!

Đội ngũ công ty tin cậy

Beaxy là một công ty rất mới được đăng ký tại quốc gia Nevis thuộc quần đảo Caribbean. Nhóm đã rất minh bạch và đã tham dự nhiều hội nghị và gặp gỡ, do đó họ muốn xây dựng được thêm sự tin tưởng của người dùng bằng cách đảm bảo trải nghiệm tuyệt vời, bảo mật vượt trội từ sàn giao dịch này. 

Artak Hamazaspyan, CEO và người sáng lập Beaxy, là một kỹ sư có nhiều năm kinh nghiệm và sống ở Mỹ. Việc Beaxy rất minh bạch về đội ngũ sáng lập của mình là một dấu hiệu rất tích cực và cũng là một điểm tuyệt vời trái ngược với các sàn giao dịch như HitBTC hoặc Liqui - nơi nhóm hoàn toàn ẩn danh.

Đánh giá tổng quan:

Beaxy là một sàn giao dịch mới nổi có những chiến lược tiếp cận người dùng tương đối hiệu quả. Dù đang ở trong giai đoạn chuẩn bị công bố những cũng đang nhận được nhiều quan tâm từ các thành viên cộng đồng.

Trong những yếu tố quan trọng của một sàn giao dịch, có thể kể đến tính thanh khoản, trải nghiệm người dùng và tính bảo mật, Beaxy đã có chính sách và chiến lược để có thể hoàn thành được 2 yếu tố. Còn yếu tố thứ 3 chính là tính bảo mật, đây cũng là điều kiện tiên quyết để quyết định sự vượt trội của một sàn giao dịch, hãy cùng đồng hành với Beaxy, để xem sàn giao dịch này có thể đạt được “kiềng ba chân” cho vị trí của mình trong thị trường tiền mã hóa hay không.

Nếu bạn cũng có hứng thú muốn trải nghiệm sàn, hãy đăng kí tại đường link này. Nếu đăng kí ngay bây giờ, bạn sẽ sẽ có cơ hội giao dịch tại sàn hoàn toàn miễn phí trong 1 tháng đầu tiên kể từ khi sàn ra mắt. Hãy trải nghiệm cùng chúng tôi!

Tags
Chia sẻ  
  
  
  
100% Rating
Điểm: 5 / 5
2 Bình chọn

admin

Mang giá trị lại cho tất cả mọi người

Bigcoin Việt Nam - Phân tích đầu tư Bitcoin và các dự án công nghê Blockchain