排序模块
用于自定义交易排序、权限、拍卖和跨链协调的模块化智能合约
Syndicate 通过在单独的区块链上部署智能合约,将区块链排序带到链上,从而彻底改变了区块链排序。这种模块化方法使交易排序过程具有前所未有的控制、透明性和社区所有权。
Syndicate 排序模块由多个关键组件组成,这些组件可以独立配置以满足您的特定应用需求。
权限模块
权限模块控制谁可以在您的应用链上排序交易。它们实现了一个简单的接口,其中包含一个 isAllowed 函数,该函数返回某个地址是否可以排序:
function isAllowed(address proposer) external view returns (bool);可用模块
- 白名单:由管理员控制的简单允许排序者列表
- 代币余额:要求排序者持有最低数量的代币
- 密封投标拍卖:通过竞争性投标获取排序权
示例:代币余额模块
以下是一个简单的示例,要求排序者持有代币:
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;
}
}排序模块
交易排序目前由基础 SyndicateSequencingChain 合约处理,该合约按交易提交的顺序处理交易。这提供了一种简单且可预测的交易排序机制。
可用功能
- 单笔交易处理:通过
processTransaction处理单个交易 - 批量交易处理:通过
processBulkTransactions一次处理多个交易 - 原始交易支持:通过
processTransactionRaw处理压缩交易
示例:交易处理
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]));
}
}
}拍卖模块
拍卖模块通过密封投标拍卖实现竞争性排序权,投标人提交加密投标以确保公平性。
可用模块
- 密封投标拍卖:一个分为两个阶段的拍卖,投标人首先提交加密投标,然后再揭示投标内容
示例:密封投标拍卖
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;
}
}原子模块
原子模块支持跨多个链的协调交易处理,确保所有交易要么全部处理,要么完全不处理。
可用模块
- 原子排序器:跨多个链以原子方式处理交易
示例:原子排序器
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]);
}
}
}原子排序器确保所有指定链上的交易要么全部成功处理,要么完全不处理。这对于需要保持一致性的跨链操作非常有用。