mirror of
https://github.com/lux-apps/papers.git
synced 2026-10-30 18:15:21 +00:00
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]>
99 lines
3.7 KiB
TeX
99 lines
3.7 KiB
TeX
\section{Token Interface}
|
|
\label{sec:interface}
|
|
|
|
\subsection{Core ERC-1400 Interface}
|
|
|
|
The Lux Security Token Standard implements the full ERC-1400 interface:
|
|
|
|
\begin{lstlisting}[language=Solidity,caption={Core security token interface.}]
|
|
interface ISecurityToken is IERC20 {
|
|
// Document management
|
|
function getDocument(bytes32 name)
|
|
external view returns (string memory uri, bytes32 hash, uint256 timestamp);
|
|
function setDocument(bytes32 name, string calldata uri, bytes32 hash) external;
|
|
function getAllDocuments() external view returns (bytes32[] memory);
|
|
|
|
// Controller operations (MPC threshold required)
|
|
function isControllable() external view returns (bool);
|
|
function controllerTransfer(
|
|
address from, address to, uint256 value,
|
|
bytes calldata data, bytes calldata operatorData
|
|
) external;
|
|
function controllerRedeem(
|
|
address holder, uint256 value,
|
|
bytes calldata data, bytes calldata operatorData
|
|
) external;
|
|
|
|
// Partition management
|
|
function balanceOfByPartition(bytes32 partition, address holder)
|
|
external view returns (uint256);
|
|
function partitionsOf(address holder)
|
|
external view returns (bytes32[] memory);
|
|
function transferByPartition(
|
|
bytes32 partition, address from, address to,
|
|
uint256 value, bytes calldata data
|
|
) external returns (bytes32);
|
|
|
|
// Transfer restriction
|
|
function canTransfer(address to, uint256 value, bytes calldata data)
|
|
external view returns (bytes1 statusCode, bytes32 appCode);
|
|
function canTransferByPartition(
|
|
bytes32 partition, address to, uint256 value, bytes calldata data
|
|
) external view returns (bytes1 statusCode, bytes32 appCode, bytes32 partition);
|
|
|
|
// Issuance
|
|
function isIssuable() external view returns (bool);
|
|
function issue(address holder, uint256 value, bytes calldata data) external;
|
|
function issueByPartition(
|
|
bytes32 partition, address holder, uint256 value, bytes calldata data
|
|
) external;
|
|
|
|
// Redemption
|
|
function redeem(uint256 value, bytes calldata data) external;
|
|
function redeemByPartition(
|
|
bytes32 partition, uint256 value, bytes calldata data
|
|
) external;
|
|
}
|
|
\end{lstlisting}
|
|
|
|
\subsection{ERC-1404 Transfer Restrictions}
|
|
|
|
Transfer restriction checking extends ERC-1404 with a richer status code system:
|
|
|
|
\begin{lstlisting}[language=Solidity,caption={Transfer restriction interface.}]
|
|
interface ITransferRestriction {
|
|
function detectTransferRestriction(
|
|
address from, address to, uint256 value
|
|
) external view returns (uint8 restrictionCode);
|
|
|
|
function messageForTransferRestriction(uint8 restrictionCode)
|
|
external pure returns (string memory message);
|
|
}
|
|
\end{lstlisting}
|
|
|
|
\begin{table}[H]
|
|
\centering
|
|
\caption{Transfer restriction codes.}
|
|
\label{tab:restriction-codes}
|
|
\begin{tabular}{clp{6cm}}
|
|
\toprule
|
|
\textbf{Code} & \textbf{Name} & \textbf{Description} \\
|
|
\midrule
|
|
0x00 & SUCCESS & Transfer permitted \\
|
|
0x01 & SENDER\_NOT\_ELIGIBLE & Sender fails compliance check \\
|
|
0x02 & RECEIVER\_NOT\_ELIGIBLE & Receiver fails compliance check \\
|
|
0x03 & SENDER\_LOCKUP & Sender's tokens are in lockup period \\
|
|
0x04 & RECEIVER\_LIMIT & Receiver would exceed maximum holding \\
|
|
0x05 & JURISDICTION\_BLOCKED & Transfer blocked by jurisdictional rule \\
|
|
0x06 & ACCREDITATION\_EXPIRED & Receiver's accreditation has expired \\
|
|
0x07 & REGULATORY\_HOLD & Tokens subject to regulatory hold/freeze \\
|
|
0x08 & MAX\_HOLDERS & Transfer would exceed maximum holder count \\
|
|
0x09 & PARTITION\_RESTRICTED & Partition-specific restriction applies \\
|
|
0x0A & KYC\_INCOMPLETE & Receiver has not completed KYC \\
|
|
0x0B & AML\_FLAG & AML screening flag on sender or receiver \\
|
|
0xFF & UNKNOWN & Unspecified restriction \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\end{table}
|
|
|