> For the complete documentation index, see [llms.txt](https://docs.xft.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.xft.finance/bitnet/use-cases/drs/technical.md).

# TECHNICAL

Transfer agents *record changes of ownership*, maintain the issuer's security holder records, cancel and issue certificates, and distribute dividends.

<mark style="color:purple;">FUND OPERATIONS</mark>

adjustBalance

distributeDividends

[endOfDay](/bitnet/use-cases/drs/technical.md)

settleTransactions

settleCXTransactions

<mark style="color:purple;">TRANSACTION OPERATIONS</mark>

ADJUSTMENT\
AIP\
DIVIDEND\
DIVIDEND REINVESTMENT\
CASH\_LIQUIDATION\
SHARE\_LIQUIDATION\
CASH\_PURCHASE\
SHARE\_PURCHASE\
FULL\_LIQUIDATION\
SHARE\_TRANSFER\
CXFER\_OUT\
CXFER\_IN

DATA TYPES

```solidity
enum TransactionType {
    INVALID,
    ADJUSTMENT,
    AIP,
    DIVIDEND,
    DIVIDEND_REINVESTMENT,
    CASH_LIQUIDATION,
    SHARE_LIQUIDATION,
    CASH_PURCHASE,
    SHARE_PURCHASE,
    FULL_LIQUIDATION,
    SHARE_TRANSFER,
    CXFER_OUT,
    CXFER_IN
}
```

***

RESOURCES

TransactionIfaces.sol

{% code expandable="true" %}

```solidity
// SPDX-License-Identifier: Business Source License 1.1
pragma solidity 0.8.18;

import {IAuthorization} from "./IAuthorization.sol";

interface ITransactionStorage {
    enum TransactionType {
        INVALID,
        ADJUSTMENT,
        AIP,
        DIVIDEND,
        DIVIDEND_REINVESTMENT,
        CASH_LIQUIDATION,
        SHARE_LIQUIDATION,
        CASH_PURCHASE,
        SHARE_PURCHASE,
        FULL_LIQUIDATION,
        SHARE_TRANSFER,
        CXFER_OUT,
        CXFER_IN
    }

    struct TransactionDetail {
        TransactionType txType;
        uint256 date;
        uint256 amount;
        bool selfService;
    }

    struct ShareholderTransaction {
        bytes32 txId;
        TransactionDetail txDetail;
    }

    function clearTransactionStorage(
        address account,
        bytes32 requestId
    ) external returns (bool);

    function unlistFromAccountsWithPendingTransactions(
        address account
    ) external;

    function getAccountTransactions(
        address account
    ) external view returns (bytes32[] memory);

    function getTransactionDetail(
        bytes32 requestId
    ) external view returns (uint8, uint256, uint256, bool);

    function getAccountsWithTransactions(
        uint256 pageSize
    ) external view returns (address[] memory accounts);

    function getAccountsWithTransactionsCount() external view returns (uint256);

    function hasTransactions(address account) external view returns (bool);

    function isFromAccount(
        address account,
        bytes32 requestId
    ) external view returns (bool);
}

// Extended interface introduced for the new Share Transfer functionality,
// it was added in TransactionalModule_V3.sol
interface IExtendedTransactionDetail is ITransactionStorage {
    struct ExtendedTransactionDetail {
        TransactionType txType;
        uint256 date;
        uint256 amount;
        bool selfService;
        address source;
        address destination;
    }

    function getExtendedTransactionDetail(
        bytes32 requestId
    ) external view returns (uint8, address, address, uint256, uint256, bool);
}

interface IShareholderTransaction {
    function requestCashPurchase(
        address account,
        uint256 date,
        uint256 amount
    ) external;

    function requestCashLiquidation(
        address account,
        uint256 date,
        uint256 amount
    ) external;

    function requestFullLiquidation(address account, uint256 date) external;
}

interface IShareholderTransferTransaction {
    function requestShareTransfer(
        address account,
        address destination,
        uint256 date,
        uint256 amount
    ) external;
}

interface IShareholderSelfServiceTransaction {
    function requestSelfServiceCashPurchase(uint256 amount) external;

    function requestSelfServiceCashLiquidation(uint256 amount) external;

    function requestSelfServiceFullLiquidation() external;

    function enableSelfService() external;

    function disableSelfService() external;

    function isSelfServiceEnabled() external view returns (bool);
}

interface IShareholderSelfServiceTransferTransaction {
    function requestSelfServiceShareTransfer(
        uint256 amount,
        address destination
    ) external;
}

interface ITransferAgentTransaction {
    function setupAIP(address account, uint256 date, uint256 amount) external;
}

interface ICancellableSelfServiceTransaction {
    function cancelSelfServiceRequest(
        bytes32 requestId,
        string memory memo
    ) external;
}

interface ICancellableTransaction {
    function cancelRequest(
        address account,
        bytes32 requestId,
        string calldata memo
    ) external;
}

```

{% endcode %}
