Files
zeekayandHanzo Dev 70f6883235 Restore the regulated-markets papers; Lux holds the licences
A July commit removed eight papers on the premise "no license — DEX/non-custodial
only". That premise is wrong: Lux operates an ATS, a broker-dealer, a transfer
agent and a bank, and this material is resold at lux.financial. The merge that
brought main in preserved the removal because the commit stated a reason, which
is how a stale reason outlives the fact it rested on.

Back, at the versions main carried — main never received the removal, so its
copies are the later ones: the ATS architecture, the security-token standard,
smart order routing, institutional custody, MPC custody, post-quantum securities,
the SSB partnership and the CoinBridge brief. 83 files.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-30 15:58:05 -07:00

92 lines
3.2 KiB
TeX

\section{Partition Management}
\label{sec:partitions}
\subsection{Partition Types}
The Lux standard extends ERC-1400 partitions to support complex capital structures:
\begin{table}[H]
\centering
\caption{Partition types and use cases.}
\label{tab:partitions}
\begin{tabular}{lp{7.5cm}}
\toprule
\textbf{Partition} & \textbf{Use Case} \\
\midrule
\texttt{COMMON} & Common shares with standard voting and dividend rights \\
\texttt{PREFERRED\_A} & Series A preferred with liquidation preference and anti-dilution \\
\texttt{PREFERRED\_B} & Series B preferred with distinct terms \\
\texttt{LOCKUP\_6M} & Shares subject to 6-month lockup from issuance \\
\texttt{LOCKUP\_12M} & Shares subject to 12-month lockup (Rule 144) \\
\texttt{VESTING} & Shares subject to vesting schedule (employee grants) \\
\texttt{RESTRICTED} & Shares subject to regulatory hold \\
\texttt{CONVERTIBLE} & Convertible instruments (notes, SAFEs) pending conversion \\
\texttt{TREASURY} & Issuer treasury shares (not outstanding, no voting rights) \\
\texttt{ESOP} & Employee stock option pool allocation \\
\bottomrule
\end{tabular}
\end{table}
\subsection{Partition Operations}
\begin{lstlisting}[language=Solidity,caption={Partition management operations.}]
contract SecurityToken is ISecurityToken {
mapping(bytes32 => mapping(address => uint256)) internal partitionBalances;
mapping(bytes32 => PartitionConfig) internal partitionConfigs;
struct PartitionConfig {
bool transferable;
uint256 lockupExpiry; // 0 = no lockup
address complianceOracle; // partition-specific oracle
uint256 maxHolders; // 0 = unlimited
VestingSchedule vesting; // empty = no vesting
bool convertible;
bytes32 convertTarget; // target partition for conversion
uint256 convertRatio; // conversion ratio (basis points)
}
struct VestingSchedule {
uint256 cliffDuration;
uint256 totalDuration;
uint256 startTime;
}
function transferByPartition(
bytes32 partition, address from, address to,
uint256 value, bytes calldata data
) external override returns (bytes32) {
PartitionConfig memory config = partitionConfigs[partition];
// Lockup check
require(
config.lockupExpiry == 0 || block.timestamp >= config.lockupExpiry,
"partition locked"
);
// Vesting check
if (config.vesting.totalDuration > 0) {
uint256 vested = vestedAmount(partition, from);
require(value <= vested - partitionTransferred[partition][from],
"exceeds vested amount");
}
// Compliance check via partition-specific or global oracle
address oracle = config.complianceOracle != address(0)
? config.complianceOracle
: defaultComplianceOracle;
(bytes1 status,,) = ITransferRestriction(oracle)
.detectTransferRestriction(from, to, value);
require(status == 0x00, "transfer restricted");
// Execute transfer
partitionBalances[partition][from] -= value;
partitionBalances[partition][to] += value;
emit TransferByPartition(partition, from, to, value, data);
return partition;
}
}
\end{lstlisting}