排序模块

用于自定义交易排序、权限、拍卖和跨链协调的模块化智能合约

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]);
        }
    }
}

原子排序器确保所有指定链上的交易要么全部成功处理,要么完全不处理。这对于需要保持一致性的跨链操作非常有用。