數位貨幣交易所主要由以下5個系統組成:
1.賬戶系統
不管是韭菜還是莊家,只要是交易所的使用者,都會有一個自己的中心化賬戶,這個賬戶裡包含了使用者的身份資訊、資產資訊以及交易資訊等,這些資訊都需要賬戶系統來進行統一的記錄和管控。
2.出入賬系統
出入帳系統不記錄資料,它的主要功能是在交易、充值或是提現的過程中,完成出賬和入賬的業務邏輯實現,將資產的變動與賬戶資料打通。
3.交易管理系統
對應到賭場的情景中,這個系統的功能就是定義並記錄所有的遊戲規則與資料。交易所的漲跌幅、K線以及交易資料等都是由這個系統來管理。
4.撮合引擎
它只有一個功能——訂單撮合,交易所的所有買和賣的需求,都需要撮合引擎把買單和賣單撮合成交易。
5.區塊鏈錢包
數位貨幣交易所繫統開發自身以及使用者的所有數位資產,都是存在區塊鏈錢包中,使用者每次實際充值提現所產生的鏈上互動,都是由錢包完成。
以上5個系統中,其中有2個又是系統建設中的重中之重,一個是撮合引擎,一個是區塊鏈錢包。
撮合引擎對於交易所的重要程度,就像心臟之於人,撮合引擎需要以一己之力帶動交易所其他各系統的運轉。一個優秀的撮合引擎需要滿足以下三個要求:
1.強大到變態的效能:交易所規模越大,並行的交易也就越多,撮合引擎效能的好壞,直接制約了交易所業務的發展。
2.多種訂單型別全相容:常用的訂單型別就包括限價單、市價單、止盈止損單等。
3.合約功能的支援:現階段的交易所行業中,合約交易已經幾乎成了必備功能,合約的撮合實現相比現貨要複雜許多,對技術的要求也會更高。
就技術層面而言,做好撮合系統已經成功了一半,另一半成功的關鍵就是區塊鏈錢包。
一方面錢包需要做中心化和去中心化的橋接,打通兩者的資產資料,另一方面錢包還必須安全穩妥的實現資金管理的職能。一旦錢包出現問題,發生了盜幣的情況,輕則導致元氣大傷,重則會導致交易所直接破產。
function buyNewLevel(uint8 matrix, uint8 level) external payable {
require(isUserExists(msg.sender), "user is not exists. Register first.");
require(matrix == 1 || matrix == 2, "invalid matrix");
require(msg.value == levelPrice[level], "invalid price");
require(level > 1 && level <= LAST_LEVEL, "invalid level");
if (matrix == 1) {
require(!users[msg.sender].activeX3Levels[level], "level already activated");
if (users[msg.sender].x3Matrix[level-1].blocked) {
users[msg.sender].x3Matrix[level-1].blocked = false;
}
address freeX3Referrer = findFreeX3Referrer(msg.sender, level);
users[msg.sender].x3Matrix[level].currentReferrer = freeX3Referrer;
users[msg.sender].activeX3Levels[level] = true;
updateX3Referrer(msg.sender, freeX3Referrer, level);
emit Upgrade(msg.sender, freeX3Referrer, 1, level);
} else {
require(!users[msg.sender].activeX6Levels[level], "level already activated");
if (users[msg.sender].x6Matrix[level-1].blocked) {
users[msg.sender].x6Matrix[level-1].blocked = false;
}
address freeX6Referrer = findFreeX6Referrer(msg.sender, level);
users[msg.sender].activeX6Levels[level] = true;
updateX6Referrer(msg.sender, freeX6Referrer, level);
emit Upgrade(msg.sender, freeX6Referrer, 2, level);
}
}