iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 28
0
Blockchain

區塊鏈應用開發實戰系列 第 28

28. 去中心化交易所用戶取消下單功能實作

小明今天繼續完成的是用戶取消下單的功能:

User 用戶功能

  • 取消下單
function cancelOrder(string symbolName, bool isSellOrder, uint priceInWei, uint offerKey) public {
    uint8 symbolNameIndex = getSymbolIndexOrThrow(symbolName);
    if (isSellOrder) {
        require(tokens[symbolNameIndex].sellBook[priceInWei].offers[offerKey].who == msg.sender);

        uint tokensAmount = tokens[symbolNameIndex].sellBook[priceInWei].offers[offerKey].amount;
        require(tokenBalanceForAddress[msg.sender][symbolNameIndex] + tokensAmount >= tokenBalanceForAddress[msg.sender][symbolNameIndex]);


        tokenBalanceForAddress[msg.sender][symbolNameIndex] += tokensAmount;
        tokens[symbolNameIndex].sellBook[priceInWei].offers[offerKey].amount = 0;
        emit SellOrderCanceled(symbolNameIndex, priceInWei, offerKey);

    }
    else {
        require(tokens[symbolNameIndex].buyBook[priceInWei].offers[offerKey].who == msg.sender);
        uint etherToRefund = tokens[symbolNameIndex].buyBook[priceInWei].offers[offerKey].amount * priceInWei;
        require(balanceEthForAddress[msg.sender] + etherToRefund >= balanceEthForAddress[msg.sender]);

        balanceEthForAddress[msg.sender] += etherToRefund;
        tokens[symbolNameIndex].buyBook[priceInWei].offers[offerKey].amount = 0;
        emit BuyOrderCanceled(symbolNameIndex, priceInWei, offerKey);
    }
}

本文同時發佈於作者部落格:https://www.bdetw.com/blog


/images/emoticon/emoticon34.gif想找區塊鏈人才或想學習區塊鏈知識的夥伴。歡迎參加社群小聚,一起來輕鬆交流、互相學習成長、認識新朋友、發現新機會!
 
台北區塊鏈社群
https://bitlly.co/Q4dIK
 
BDE 區塊鏈學院 - 提供專業的區塊鏈培訓與顧問服務。
https://bitlly.co/mbDwX


上一篇
27. 去中心化交易所用戶檢視賣單交易帳簿功能實作
下一篇
29. 去中心化交易所管理者前端功能實作
系列文
區塊鏈應用開發實戰30

尚未有邦友留言

立即登入留言