如何以最简单方式获取struct中的最大值,并按从大到小排序,只在合约实现,并且最多获取20个当前最大的排序,不到20个也依次排序

pragma solidity >=0.8.6;
import "@openzeppelin/contracts/access/Ownable.sol";
contract RouteTrade is Ownable{
    uint32 tradeId;
    uint128 private stopTime;  //在空投发布后三天

    struct tradePair{
        uint32 tradePairId;    //交易id
        uint224 tradePrice;    //交易价格
        uint128 tradeAmount;   //交易数量
        uint128 alreadyAmount; //已经完成交易的数量
        uint128 startTime;     //开始世界
        uint128 endTime;       //结束时间
        address solder;        //出售者
    }
    tradePair[] public _tradePair;

    event createTradePair(uint32 thisId,uint224 thisPrice,uint128 thisAmount,uint128 finishAmount,uint128 thisStartTime,uint128 thisEndTime,address thisSolder);

    //设置代币空投后最终交割时间
    function setAirdropTime(uint256 airdropDate)external onlyOwner{
        stopTime=uint128(airdropDate) + 3 days;
    }

    //创建route pair
    function createRoutePair(uint256 buyPrice,uint256 buyAmount,uint256 _endTime)external{
        require(_endTime<stopTime);   //结束时间需要小于交割时间
        _tradePair.push(tradePair(tradeId,uint224(buyPrice),uint128(buyAmount),0,uint128(block.timestamp),uint128(_endTime),msg.sender));
        emit createTradePair(tradeId,uint224(buyPrice),uint128(buyAmount),0,uint128(block.timestamp),uint128(_endTime),msg.sender);
        tradeId++;
    }

    //得到最新的最高价格列表,最多为20个
    function fetchLastHighPrice()external view returns(tradePair[] memory){
        uint256 a;
        if(_tradePair.length>=20){
            a=20;
        }else{
            a=_tradePair.length;
        }
        tradePair[] memory newTradePair=new tradePair[](a);

    }

}
请先 登录 后评论

最佳答案 2023-06-24 09:11

链下排 把这个当数据库玩了么

请先 登录 后评论

其它 0 个回答

  • 1 关注
  • 0 收藏,1361 浏览
  • ? or ? 提出于 2023-06-23 13:35