시퀀싱 모듈
맞춤형 트랜잭션 순서 지정, 권한, 경매 및 크로스체인 조정을 위한 모듈식 스마트 계약
신디케이트는 별도의 블록체인에 배포된 스마트 계약을 통해 블록체인 시퀀싱을 온체인으로 가져와 변화시킵니다. 이러한 모듈식 접근 방식은 트랜잭션 순서 지정 프로세스에 대한 전례 없는 제어, 투명성 및 커뮤니티 소유권을 가능하게 합니다.
신디케이트 시퀀싱 모듈은 특정 애플리케이션 요구 사항을 충족하기 위해 독립적으로 구성할 수 있는 여러 핵심 구성 요소로 이루어져 있습니다.
권한 모듈
허용 목록 및 토큰 보유량과 같은 메커니즘을 통해 트랜잭션 시퀀싱을 제어할 수 있는 사람 관리
순서 지정 모듈
최적의 처리를 위해 트랜잭션이 정렬되고 일괄 처리되는 방식 정의
경매 모듈
밀봉 입찰 경매와 같은 메커니즘을 통한 경쟁적 시퀀싱 권한 활성화
원자적 모듈
복잡한 작업을 위해 여러 체인에 걸친 조정된 시퀀싱 허용
권한 모듈
권한 모듈은 앱체인에서 트랜잭션 시퀀싱을 수행할 수 있는 사람을 제어합니다. 이들은 주소가 시퀀싱할 수 있는지 여부를 반환하는 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]));
}
}
}경매 모듈
경매 모듈은 봉인된 입찰을 통해 공정성을 보장하기 위해 입찰자가 암호화된 입찰가를 제출하는 경쟁적 시퀀싱 권한을 가능하게 합니다.
사용 가능한 모듈
- 봉인 입찰 경매: 입찰자가 먼저 암호화된 입찰가를 제출하고 나중에 공개하는 2단계 경매
예시: 봉인 입찰 경매
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]);
}
}
}원자적 시퀀서는 모든 지정된 체인에서 모든 트랜잭션이 성공적으로 처리되거나 아무것도 처리되지 않도록 보장합니다. 이는 일관성을 유지해야 하는 크로스체인 작업에 유용합니다.