Skip to content
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
Cannot retrieve contributors at this time
title: Support Tron-DEX based on system contracts
author: sean liu <> 
discussions to:
status: Final
type: Standards Track
category: core
created: 2020-08-10

Simple Summary

This TIP provides system contracts for the market in java-tron.


This TIP provides system contracts to support the exchange of token, including TRX and TRC-10. The main features include an online order table and online matching.


Security, transparency, and efficiency have always been at the core of DEX, but exchanges in the form of smart contracts often rely on offline matchmaking systems. In addition, the higher costs also lead to users avoiding frequent transactions as much as possible, reducing the overall transaction volume.


Only two system contracts are added, which is convenient and simple to use.

Create new order:

rpc MarketSellAsset (MarketSellAssetContract) returns (TransactionExtention) {}

message MarketSellAssetContract {
    bytes owner_address = 1;
    bytes sell_token_id = 2;
    int64 sell_token_quantity = 3;
    bytes buy_token_id = 4;
    int64 buy_token_quantity = 5;

owner_address:Owner address,default hexString 
sell_token_id:sell token id,default hexString     
sell_token_quantity:sell token quantity           
buy_token_id:buy token id,default hexString         
buy_token_quantity:buy token quantity, min to receive

Cancel an exist order:

rpc MarketCancelOrder (MarketCancelOrderContract) returns (TransactionExtention) {}

message MarketCancelOrderContract {
    bytes owner_address = 1;
    bytes order_id = 2;
owner_address:Owner address,default hexString 
order_id:order id

A set of query interfaces is also provided.Like, Get all trading pairs:

rpc GetMarketPairList (EmptyMessage) returns (MarketOrderPairList) {  }

Get all order prices for the trading pair:

rpc GetMarketPriceByPair (MarketOrderPair) returns (MarketOrderList) {

Get all orders for the trading pair:

rpc GetMarketOrderListByPair (MarketOrderPair) returns (MarketOrderList) {};

Get order by orderId:

rpc GetMarketOrderById (BytesMessage) returns (MarketOrder) {}

Get all orders for the account:

rpc GetMarketOrderByAccount (BytesMessage) returns (MarketOrderList) {};

Get orderId from transactionInfo

message Transaction{
repeated MarketOrderDetail orderDetails = 26;

message MarketOrderDetail {
  bytes makerOrderId = 1;
  bytes takerOrderId = 2;
  int64 fillSellQuantity = 3;
  int64 fillBuyQuantity = 4;
makerOrderId: exist order id
takerOrderId: current order id
fillSellQuantity: sell quantity in this matching
fillBuyQuantity: buy quantity in this matching