Módulos de secuenciación
Contratos inteligentes modulares para personalizar el orden de transacciones, permisos, subastas y coordinación entre cadenas
Syndicate transforma la secuenciación de blockchain llevándola a la cadena mediante contratos inteligentes desplegados en una blockchain separada. Este enfoque modular permite un control, transparencia y propiedad comunitaria sin precedentes del proceso de ordenamiento de transacciones.
Los módulos de secuenciación de Syndicate están compuestos por varios componentes clave que pueden configurarse independientemente para satisfacer las necesidades específicas de tu aplicación.
Módulos de permisos
Controla quién puede secuenciar transacciones mediante mecanismos como listas de permitidos y tenencia de tokens
Módulos de ordenamiento
Define cómo se ordenan y agrupan las transacciones para un procesamiento óptimo
Módulos de subasta
Habilita derechos de secuenciación competitivos mediante mecanismos como subastas de oferta sellada
Módulos atómicos
Permite la secuenciación coordinada entre múltiples cadenas para operaciones complejas
Módulos de permisos
Los módulos de permisos controlan quién puede secuenciar transacciones en tu appchain. Implementan una interfaz simple con una función isAllowed que devuelve si una dirección puede secuenciar:
function isAllowed(address proposer) external view returns (bool);Módulos disponibles
- Lista de permitidos: Lista simple de secuenciadores permitidos controlada por el administrador
- Saldo de tokens: Requiere que los secuenciadores mantengan una cantidad mínima de tokens
- Subasta de oferta sellada: Licitación competitiva por derechos de secuenciación
Ejemplo: Módulo de saldo de tokens
Aquí hay un ejemplo simple que requiere que los secuenciadores posean tokens:
contract TokenBalanceSequencingModule is PermissionModule {
address public immutable tokenAddress;
uint256 public immutable minimumBalance;
function isAllowed(address proposer) external view override returns (bool) {
return IERC20(tokenAddress).balanceOf(proposer) >= minimumBalance;
}
}Módulos de ordenamiento
El ordenamiento de transacciones actualmente es manejado por el contrato base SyndicateSequencingChain, que procesa las transacciones en el orden en que se envían. Esto proporciona un mecanismo de ordenamiento de transacciones simple y predecible.
Características disponibles
- Procesamiento de transacciones individuales: Procesa transacciones individuales mediante
processTransaction - Procesamiento de transacciones en lote: Procesa múltiples transacciones a la vez con
processBulkTransactions - Soporte para transacciones en bruto: Maneja transacciones comprimidas con
processTransactionRaw
Ejemplo: Procesamiento de transacciones
contract SyndicateSequencingChain is SequencingModuleChecker {
event TransactionProcessed(address indexed sender, bytes data);
function processTransaction(bytes calldata data) external onlyWhenAllowed(msg.sender) {
emit TransactionProcessed(msg.sender, prependZeroByte(data));
}
function processBulkTransactions(bytes[] calldata data) external onlyWhenAllowed(msg.sender) {
for (uint256 i = 0; i < data.length; i++) {
emit TransactionProcessed(msg.sender, prependZeroByte(data[i]));
}
}
}Módulos de subasta
Los módulos de subasta permiten derechos de secuenciación competitivos a través de subastas de sobre cerrado, donde los postores envían ofertas cifradas para garantizar la equidad.
Módulos disponibles
- Subasta de sobre cerrado: Una subasta de dos fases donde los postores primero envían ofertas cifradas y luego las revelan
Ejemplo: Subasta de sobre cerrado
contract SealedBidAuctionSequencingModule is PermissionModule {
// Track bids and auction state
mapping(address => bytes32) public sealedBids;
address public highestBidder;
uint256 public highestBid;
// Phase 1: Submit sealed bids
function bid(bytes32 sealedBid) external payable {
require(msg.value > 0, "Must send deposit");
sealedBids[msg.sender] = sealedBid;
}
// Phase 2: Reveal bids
function revealBid(uint256 bidAmount, string memory salt) external {
bytes32 computedHash = keccak256(abi.encodePacked(bidAmount, salt));
require(computedHash == sealedBids[msg.sender], "Invalid bid reveal");
if (bidAmount > highestBid) {
highestBid = bidAmount;
highestBidder = msg.sender;
}
}
// Only highest bidder can sequence
function isAllowed(address proposer) external view override returns (bool) {
return proposer == highestBidder;
}
}Módulos atómicos
Los módulos atómicos permiten el procesamiento coordinado de transacciones a través de múltiples cadenas, asegurando que todas las transacciones se procesen juntas o ninguna en absoluto.
Módulos disponibles
- Secuenciador atómico: Procesa transacciones a través de múltiples cadenas de forma atómica
Ejemplo: Secuenciador atómico
contract AtomicSequencer {
// Process transactions on multiple chains atomically
function processTransactionsAtomically(
SyndicateSequencingChain[] chains,
bytes[] transactions
) external {
// Ensure input arrays match
require(chains.length == transactions.length, "Length mismatch");
// Process each transaction on its respective chain
for (uint256 i = 0; i < chains.length; i++) {
chains[i].processTransaction(transactions[i]);
}
}
// Process multiple transactions per chain atomically
function processBulkTransactionsAtomically(
SyndicateSequencingChain[] chains,
bytes[][] transactions
) external {
require(chains.length == transactions.length, "Length mismatch");
for (uint256 i = 0; i < chains.length; i++) {
chains[i].processBulkTransactions(transactions[i]);
}
}
}El secuenciador atómico garantiza que o bien todas las transacciones se procesan con éxito en todas las cadenas especificadas, o bien ninguna se procesa. Esto es útil para operaciones entre cadenas que necesitan mantener la consistencia.