---
# System prepended metadata

title: Signature Aggregation trong EIP-4337

---

# Signature Aggregation trong EIP-4337

EIP-4337 chủ yếu tận dụng khả năng batch verification của aggregation signature để giảm kích thước của các transaction. Thay vì phải truyền chữ ký cho mỗi operation, với aggregation signature, ta chỉ cần một chữ ký cho một lô các operation.  
Hiện nay, triển khai của EIP-4337 với Aggregator chủ yếu sử dụng BLS Signature để tổng hợp và xác thực chữ ký.  

## Aggregator
Aggregator cần triển khai những hàm sau:  
1. validateUserOpSignature():  

        function validateUserOpSignature(UserOperation calldata userOp, bool offChainSigCheck) external view returns (bytes memory sigForUserOp, bytes memory sigForAggregation, bytes memory offChainSigInfo)
    - Xác thực một operation và trả về những thông tin cần thiết cho việc tổng hợp chữ ký của bundler.
    - Input:
        - userOp: operation cần được xác thực.
        - offChainSigCheck: nếu được set là `true`, sẽ không xác thực và không tính toán thông tin để tổng hợp chữ ký mà trả về trực tiếp thông tin cho bundler để bundler tự xác thực và tổng hợp.
    - Output:
        - sigForUserOp: giá trị thay thế cho `userOp.signature`, thường được set bằng `""`.
        - sigForAggregation: là giá trị sử dụng cho việc tổng hợp chữ ký. Thường được set là `userOp.signature`.
        - offChainSigInfo: thông tin của trả về cho bundler khi `offChainSigCheck=true`.

2. aggregateSignatures():  

        function aggregateSignatures(bytes[] calldata sigsForAggregation) external view returns (bytes memory aggregatesSignature);

    - Tạo chữ ký tổng hợp từ những chữ ký đầu vào.
    - Input:
        - sigsForAggregation: những chữ ký cần được tổng hợp.
    - Output:
        - aggregatesSignature: chữ ký đã được tổng hợp.

3. validateSignatures():  

        function validateSignatures(UserOperation[] calldata userOps, bytes calldata signature) view external

    - Xác thực chữ ký tổ hợp của một batch userOperation.
    - Input:
        - userOps
        - signature: chữ ký đã tổ hợp của những `userOps`.
    - Output: revert nếu chữ ký không hợp lệ.

## UserOps Aggregation flow

[![Aggregation activity diagram](https://i.imgur.com/DBMF5vR.png)](https://viewer.diagrams.net/?page-id=ezjxD1aWihwCxKgK6cBz&highlight=0000ff&edit=_blank&layers=1&nav=1&hide-pages=1#G1Qq0ToNHjKgikl1pieBKsAHma_f-geSem "UserOps Aggregation diagram.io")

## Execute Aggregated UserOps

[![Execute Aggregated UserOps diagram](https://i.imgur.com/Glr1y6g.png)](https://viewer.diagrams.net/?page-id=XdUOnYvwx4iiI3FUVpUx&highlight=0000ff&edit=_blank&layers=1&nav=1&hide-pages=1#G1Qq0ToNHjKgikl1pieBKsAHma_f-geSem "Execute Aggregated UserOps diagram.io")

## Ưu điểm và nhược điểm

### Ưu điểm

- Giảm calldata size và giảm gas khi thực hiện transaction: thay vì truyền signature cho từng UserOp, với signature aggregation, ta chỉ cần truyền 1 signature cho nhiều UserOp. 

### Nhược điểm

- Tốn nhiều effort để triển khai: để triển khai signature aggregation với EIP-4337, ta phải thay đổi tất cả các triển khai truyền thống với front-end, back-end và smart contract.
- Chưa được kiểm định nhiều trong thực tế: Các mô hình sử dụng signature aggregation còn ít, nhiều thư viện BLS signature chưa được audit.