issue
: issue a tokendo_issue
: helper function to issue tokentransfer
: transfer tokendo_transfer
: helper function to transfer tokendo_freeze
: helper function to freeze balance of user when user creates orderdo_unfreeze
: helper function to unfreeze balance of user when user cancels orderget_balance
: helper function to get user's balancecheck_balance_enough
: helper function to make sure the balance is enough before it subtractedcheck_balance_overflow
: helper function to make sure the balance isn't overflow before it addedupdate_balance
: helper function to update user's balance
linked_price_list
:
fn new => init một Circular Linked List cho mỗi token, cấu trúc sẽ là:
+ bottom: PriceItem tại min_value của kiểu dữ liệu P2 => tương ứng là node_head trong linked_list
+ head: PriceItem tại none => nó sẽ nằm giữa bottom và heap
+ top: PriceItem tại min_value của kiểu dữ liệu P2 => tương ứng là node_head trong linked_list
Mô hình nó sẽ như sau:
- Khi khởi tạo price_list sẽ tạo ra 3 node cố định là bottom, head và top
______________ Buy __________________ Sell _________________
price_list: | Bottom |<----------------------------->| Head |<------------------------------->| Top |
|____________| |________________| |_______________|
<-----chèn giá mua ở đây------> <-------chèn giá bán ở đây------>
- Giả sử:
_____________________ ______________________ ______________________ ______________________ ______________________ ______________________
price_list: | BOTTOM: | | PriceItem: | | PriceItem: | | HEAD: | | PriceItem: | | TOP: |
| + price: min(P2) | | + price: 1 | | + price: 2 | | + price: None | | + price: 4 | | + price: max(P2) |
| + prev: max(P2) |<---------->| + prev: min(P2) |<---------->| + prev: Some(1) |<--------->| + prev: Some(2) |<---------->| + prev: None |<--------->| + prev: Some(4) |
| + next: Some(1) | | + next: Some(2) | | + next: None | | + next: Some(4) | | + next: max(P2) | | + next: min(P2) |
| + ... | | + ... | | + ... | | + ... | | + ... | | + ... |
|___________________| |____________________| |____________________| |____________________| |____________________| |____________________|
- Giả sử user order 1 lệnh mới với 1 mức giá cụ thể:
=> Nếu mức giá đó đã tồn tại trong list rồi thì mình chỉ cần lấy PriceItem đó ra, update lại buy_amount, sell_amount và orders thôi
=> Nếu mức giá đó chưa tồn tại trong list thì mình tạo một PriceItem mới với mức giá đó và chèn nó vào trong list
Kiểu generic_type S là mapping từ token_hash => các mức giá => PriceItem tương ứng
create_trade_pair
: create a new create_trade_pairdo_create_trade_pair
: helper function to create tradepaircreate_order
: create a limit orderdo_create_limit_order
: helper function to create limit ordercancel_limit_order
: cancel orderdo_create_market_order
: helper function to create market orderensure_bounds
+ensure_counterparty_amount_bounds
+ensure_trade_pair
: make sure all require before process order match priceorder_match
: function to process orders that match the priceset_tp_market_data
: update tradepair market dataon_initialize
+on_finalize
: function to update trade volume, total volume, last match price,...