📘ListOfOrders
Register of Listing Orders
Name
ListOfOrders
Dependent Contract
IListOfOrders, OrdersRepo, GoldChain
API:
Source Code:
ListOfOrders
// SPDX-License-Identifier: UNLICENSED
/* *
* Copyright (c) 2021-2023 LI LI @ JINGTIAN & GONGCHENG.
*
* This WORK is licensed under ComBoox SoftWare License 1.0, a copy of which
* can be obtained at:
* [https://github.com/paul-lee-attorney/comboox]
*
* THIS WORK IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
* WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
* TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. IN NO
* EVENT SHALL ANY CONTRIBUTOR BE LIABLE TO YOU FOR ANY DAMAGES.
*
* YOU ARE PROHIBITED FROM DEPLOYING THE SMART CONTRACTS OF THIS WORK, IN WHOLE
* OR IN PART, FOR WHATEVER PURPOSE, ON ANY BLOCKCHAIN NETWORK THAT HAS ONE OR
* MORE NODES THAT ARE OUT OF YOUR CONTROL.
* */
pragma solidity ^0.8.8;
import "./IListOfOrders.sol";
import "../../common/access/AccessControl.sol";
contract ListOfOrders is IListOfOrders, AccessControl {
using OrdersRepo for OrdersRepo.Repo;
using OrdersRepo for OrdersRepo.Deal;
using GoldChain for GoldChain.Chain;
using GoldChain for GoldChain.Node;
OrdersRepo.Repo private _repo;
//#################
//## Write I/O ##
//#################
// ==== Investor ====
function regInvestor(
uint userNo,
uint groupRep,
bytes32 idHash
) external onlyDK {
_repo.regInvestor(userNo, groupRep, idHash);
emit RegInvestor(userNo, groupRep, idHash);
}
function approveInvestor(
uint userNo,
uint verifier
) external onlyDK {
_repo.approveInvestor(userNo, verifier);
emit ApproveInvestor(userNo, verifier);
}
function revokeInvestor(
uint userNo,
uint verifier
) external onlyDK {
_repo.revokeInvestor(userNo, verifier);
emit RevokeInvestor(userNo, verifier);
}
// ==== Order ====
function placeSellOrder(
uint classOfShare,
uint seqOfShare,
uint votingWeight,
uint paid,
uint price,
uint execHours,
bool sortFromHead
) external onlyDK {
bytes32 sn = _repo.placeSellOrder(
classOfShare,
seqOfShare,
votingWeight,
paid,
price,
execHours,
sortFromHead
);
emit PlaceSellOrder(sn);
}
function withdrawSellOrder(
uint classOfShare,
uint seqOfOrder
) external onlyDK returns(GoldChain.Node memory order) {
order = _repo.withdrawSellOrder(
classOfShare,
seqOfOrder
);
emit WithdrawSellOrder(order.codifyNode());
}
function placeBuyOrder(
uint caller,
uint classOfShare,
uint paid,
uint price
) external onlyDK returns (
OrdersRepo.Deal[] memory deals,
GoldChain.Node[] memory expired
) {
OrdersRepo.Deal memory balance;
(deals, balance, expired) =
_repo.placeBuyOrder(
caller,
classOfShare,
paid,
price
);
emit PlaceBuyOrder(caller, classOfShare, paid, price);
uint len = deals.length;
while (len > 0) {
emit Deal(deals[len - 1].codifyDeal());
len--;
}
len = expired.length;
while (len > 0) {
emit OfferExpired(expired[len - 1].codifyNode());
len--;
}
if (balance.paid > 0)
emit GetBalance(balance.codifyDeal());
}
//################
//## Read I/O ##
//################
// ==== Investor ====
function isInvestor(
uint userNo
) external view returns(bool) {
return _repo.isInvestor(userNo);
}
function getInvestor(
uint userNo
) external view returns(OrdersRepo.Investor memory) {
return _repo.getInvestor(userNo);
}
function getQtyOfInvestors()
external view returns(uint)
{
return _repo.getQtyOfInvestors();
}
function investorList()
external view returns(uint[] memory)
{
return _repo.investorList();
}
function investorInfoList()
external view returns(OrdersRepo.Investor[] memory)
{
return _repo.investorInfoList();
}
// ==== Chain ====
function counterOfOffers(
uint classOfShare
) external view returns (uint32) {
return _repo.ordersOfClass[classOfShare].counter();
}
function headOfList(
uint classOfShare
) external view returns (uint32) {
return _repo.ordersOfClass[classOfShare].head();
}
function tailOfList(
uint classOfShare
) external view returns (uint32) {
return _repo.ordersOfClass[classOfShare].tail();
}
function lengthOfList(
uint classOfShare
) external view returns (uint) {
return _repo.ordersOfClass[classOfShare].length();
}
function getSeqList(
uint classOfShare
) external view returns (uint[] memory) {
return _repo.ordersOfClass[classOfShare].getSeqList();
}
function getChain(
uint classOfShare
) external view returns (GoldChain.NodeWrap[] memory) {
return _repo.ordersOfClass[classOfShare].getChain();
}
// ==== Order ====
function isOrder(
uint classOfShare,
uint seqOfOrder
) external view returns (bool) {
return _repo.ordersOfClass[classOfShare].isNode(seqOfOrder);
}
function getOrder(
uint classOfShare,
uint seqOfOrder
) external view returns (GoldChain.Node memory ) {
return _repo.ordersOfClass[classOfShare].
getNode(seqOfOrder);
}
// ==== Class ====
function isClass(uint classOfShare) external view returns(bool) {
return _repo.isClass(classOfShare);
}
function getClassesList() external view returns(uint[] memory) {
return _repo.getClassesList();
}
}
IListOfOrders
// SPDX-License-Identifier: UNLICENSED
/* *
* Copyright (c) 2021-2023 LI LI @ JINGTIAN & GONGCHENG.
*
* This WORK is licensed under ComBoox SoftWare License 1.0, a copy of which
* can be obtained at:
* [https://github.com/paul-lee-attorney/comboox]
*
* THIS WORK IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
* WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
* TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. IN NO
* EVENT SHALL ANY CONTRIBUTOR BE LIABLE TO YOU FOR ANY DAMAGES.
*
* YOU ARE PROHIBITED FROM DEPLOYING THE SMART CONTRACTS OF THIS WORK, IN WHOLE
* OR IN PART, FOR WHATEVER PURPOSE, ON ANY BLOCKCHAIN NETWORK THAT HAS ONE OR
* MORE NODES THAT ARE OUT OF YOUR CONTROL.
* */
pragma solidity ^0.8.8;
import "../../../lib/OrdersRepo.sol";
import "../../../lib/GoldChain.sol";
interface IListOfOrders {
//################
//## Events ##
//################
event RegInvestor(uint indexed investor, uint indexed groupRep, bytes32 indexed idHash);
event ApproveInvestor(uint indexed investor, uint indexed verifier);
event RevokeInvestor(uint indexed investor, uint indexed verifier);
event PlaceSellOrder(bytes32 indexed sn);
event WithdrawSellOrder(bytes32 indexed sn);
event PlaceBuyOrder(uint caller, uint indexed classOfShare, uint indexed paid, uint indexed price);
event Deal(bytes32 indexed deal);
event OfferExpired(bytes32 indexed offer);
event GetBalance(bytes32 indexed balance);
//##################
//## Write I/O ##
//##################
function regInvestor(
uint acct,
uint groupRep,
bytes32 idHash
) external;
function approveInvestor(
uint userNo,
uint verifier
) external;
function revokeInvestor(
uint userNo,
uint verifier
) external;
function placeSellOrder(
uint classOfShare,
uint seqOfShare,
uint votingWeight,
uint paid,
uint price,
uint execHours,
bool sortFromHead
) external;
function withdrawSellOrder(
uint classOfShare,
uint seqOfOrder
) external returns(GoldChain.Node memory order);
function placeBuyOrder(
uint offeror,
uint classOfShare,
uint paid,
uint price
) external returns (
OrdersRepo.Deal[] memory deals,
GoldChain.Node[] memory expired
);
//################
//## Read I/O ##
//################
// ==== Investor ====
function isInvestor(
uint userNo
) external view returns(bool);
function getInvestor(
uint userNo
) external view returns(OrdersRepo.Investor memory);
function getQtyOfInvestors()
external view returns(uint);
function investorList()
external view returns(uint[] memory);
function investorInfoList()
external view returns(OrdersRepo.Investor[] memory);
// ==== Deals ====
function counterOfOffers(
uint classOfShare
) external view returns(uint32);
function headOfList(
uint classOfShare
) external view returns (uint32);
function tailOfList(
uint classOfShare
) external view returns (uint32);
function lengthOfList(
uint classOfShare
) external view returns (uint);
function getSeqList(
uint classOfShare
) external view returns (uint[] memory);
function getChain(
uint classOfShare
) external view returns (GoldChain.NodeWrap[] memory);
// ==== Order ====
function isOrder(
uint classOfShare,
uint seqOfOrder
) external view returns (bool);
function getOrder(
uint classOfShare,
uint seqOfOrder
) external view returns (GoldChain.Node memory );
// ==== Class ====
function isClass(uint classOfShare) external view returns(bool);
function getClassesList() external view returns(uint[] memory);
}