Account Abstraction: The zkSync Way

Charlie Charlie
11 min read

Benefits of Account Abstraction

Welcome, everyone! Today, we're diving into the fascinating world of Account Abstraction, a concept that's gaining traction in the realm of web3 development.

If you already have a good idea about what it is and want to learn how to build it, then you canjump straight to the free course here on CyfrinUpdraft.

Think of it as a toolkit that can make using blockchain systems easier, more flexible, and more secure. But why is it so beneficial? Let’s break it down.

1. Enhanced Flexibility

Traditional blockchain accounts are pretty rigid. They operate under a set of predefined rules, much like a one-size-fits-all t-shirt. But instead of a t-shirt, you've got a wallet. In order to use that wallet, you need to keep up with a traditional password plus:

  • a set of seed phrases that can be anywhere from 12 to 24 words long

  • a very long private key

  • if you lose your private key or it gets stolen, say bye to your funds

  • only one way to handle transactions

Account abstraction, on the other hand, allows users to define their own rules for how their accounts should work. Imagine customizing that t-shirt to fit perfectly – that's the kind of flexibility we're talking about. This means you can tailor the way transactions are handled, define custom authorization logic, and even integrate advanced security features. You could even have someone else pay for your transactions.

2. Improved Security

Security is a huge deal in the blockchain world. With account abstraction, you can enhance the security of your accounts by incorporating multi-signature wallets or smart contracts that can control access. This is like having a vault that requires multiple keys to open – one key simply isn’t enough. It adds layers of protection against hacks and unauthorized access, making your assets much safer.

3. Better User Experience

Let’s be honest, interacting with the blockchain can sometimes be a bit daunting, especially for newcomers. Account abstraction can simplify this process. It allows for features like meta-transactions, where a third party can pay for your transaction fees, making the experience smoother and more user-friendly. Think of it as going to a theme park where someone else buys your tickets – you just enjoy the rides.

4. Interoperability

Account abstraction facilitates better interoperability between different blockchain networks. It’s like speaking multiple languages – you can easily communicate and interact with different systems without much hassle. This can pave the way for more cohesive and connected blockchain ecosystems, where moving assets or data across different networks becomes seamless.

5. Customizable Recovery Options

Losing access to your account can be a nightmare. With traditional accounts, losing your private key often means losing access to your assets forever. Account abstraction can introduce customizable recovery options, such as social recovery, where trusted contacts can help you regain access. It's like having a spare key to your house with a trusted friend – you’re never completely locked out.

In summary, account abstraction is a game-changer in the blockchain space. It brings flexibility, security, improved user experience, interoperability, and customizable recovery options. It's like upgrading from a basic phone to a smart one – once you experience it, you'll wonder how you ever managed without it.

Next up, we'll explore what zkSync has to do with account abstraction. Stay tuned!

What's zkSync Got to Do With It?

By now, you’re probably wondering, “What’s zkSync got to do with account abstraction?” Great question! Let’s dive into it.

What is zkSync?

Before we get into the relationship between the two, let’s quickly understand what zkSync is. zkSync is a Layer 2 scaling solution for Ethereum. It uses zero-knowledge rollups (zk-rollups) to bundle multiple transactions into a single one, which is then verified on the Ethereum mainnet. This process significantly reduces transaction fees and increases the throughput, making the Ethereum network more scalable and efficient.

Account Abstraction on zkSync

zkSync leverages the concept of account abstraction to enhance the user experience and security of its platform. Let’s delve into a specific aspect of zkSync that makes account abstraction so powerful: the smart accounts and paymasters. This might sound a bit technical at first, but don’t worry – we’ll break it down step by step.

What are Smart Accounts and Paymasters?

On Ethereum, there are two types of accounts: externally owned accounts (EOAs) and contract accounts. EOAs can initiate transactions, while contract accounts can implement arbitrary logic. This separation can be burdensome for users.

zkSync Era addresses this issue by allowing accounts to both initiate transactions and implement arbitrary logic, essentially combining EOAs and contract account functionality into one. Furthermore Account Abstraction fundamentally changes how accounts operate by introducing the concepts of smart accounts and paymasters.

Smart Accounts

Smart accounts in zkSync are fully programmable, allowing for various customizations that enhance security, flexibility, and user experience. Here’s how:

1. Custom Signature Schemes

Smart accounts can use custom signature schemes beyond the standard Ethereum signatures. This includes support for advanced cryptographic methods, enhancing security and allowing users to choose the signature method that best fits their needs.

2. Native Multi-Signature Capabilities

Multi-signature (multi-sig) capabilities are built directly into smart accounts. This means you can require multiple approvals for transactions, adding an extra layer of security. It’s like having a safe that needs multiple keys to open – ensuring that no single point of failure can compromise your assets.

3. Spending Limits

Smart accounts can enforce spending limits, either on a per-transaction basis or over a specified period. This feature helps in managing risk by preventing excessive withdrawals and ensuring that even if an account is compromised, the potential damage is minimized.

4. Application-Specific Restrictions

You can set up smart accounts with application-specific restrictions. For instance, an account could be programmed to interact only with certain dApps or smart contracts, adding a layer of control over how funds are used. This is particularly useful for organizations that need to ensure funds are used according to predefined rules and policies.

Paymasters

Paymasters are another innovative feature in zkSync that can sponsor transactions for users, allowing them to pay transaction fees in ERC20 tokens instead of ETH. This significantly enhances the user experience by making it more accessible and flexible.

1. Transaction Fee Sponsorship

Paymasters can cover the gas fees for users, enabling transactions without the need for users to hold ETH. This is particularly beneficial for new users who might not have ETH or for applications aiming to streamline the onboarding process.

2. ERC20 Token Payments

With paymasters, users can pay transaction fees in ERC20 tokens. This flexibility means users aren’t restricted to using ETH for fees, making the overall process more convenient and user-friendly. It’s like being able to pay for groceries with any currency, not just cash.

3. Enhanced User Experience

By sponsoring transaction fees and allowing payments in various tokens, paymasters make interacting with zkSync more intuitive and less cumbersome. This ease of use is crucial for the broader adoption of blockchain technology, as it lowers the barriers to entry for everyday users.

Up next, we'll delve into the different types of transactions that can be enabled through account abstraction in zkSync. Stay with us!

Transaction Type 113 Lifecycle

What is Transaction Type 113?

Transaction Type 113 is a specialized transaction designed to facilitate account abstraction on zkSync. It allows for the inclusion of custom logic within transactions, enabling more complex operations and greater flexibility compared to standard transactions.

It's important to note that transactions in zkSync have a lifecycle or phases that they go through to completion. If we were to create a minimal account abstraction account at simple level, our lifecycle would look something like this.

Two-Phase Lifecycle of Transactions in zkSync

Let’s dive into the two-phase lifecycle of transactions in zkSync, which ensures efficient, secure, and reliable processing of transactions. We’ll break it down into two key phases: Validation and Execution.

NOTE: I learned the following breakdown in my course at CyfrinUpdraft.


Phase 1: Validation

The validation phase ensures that all transactions are checked for correctness and are ready for processing. Here’s a step-by-step breakdown:

1. Transaction Submission:

The user initiates the transaction through the “zkSync API client,” which acts as a lightweight node that interacts with zkSync’s infrastructure. This client submits the transaction for validation.

2. Nonce Check:

The zkSync API client first checks that the transaction nonce is unique. It does this by querying the NonceHolder system contract to ensure that the nonce hasn’t been used already. This step prevents replay attacks and ensures transaction uniqueness.

3. Transaction Validation:

The zkSync API client then calls the validateTransaction function. This function must update the nonce to prevent any potential conflicts with future transactions. It’s crucial that this step is executed properly to maintain transaction order and integrity.

4. Nonce Update Verification:

After updating the nonce, the zkSync API client verifies that the nonce was indeed updated correctly. This step ensures that the transaction state is consistent and that no conflicts arise.

5. Payment Preparation:

Next, the zkSync API client handles payment for the transaction. It calls payForTransaction if the transaction fees are paid directly. If a paymaster is involved, the client uses prepareForPaymaster and validateAndPayForPaymasterTransaction to prepare and verify the payment process.

6. Bootloader Payment Verification:

Finally, the zkSync API client confirms that the bootloader, which processes and finalizes the transaction, has been paid. This step ensures that all necessary fees are covered before moving on to execution.


Phase 2: Execution

Once validation is complete, the transaction moves to the execution phase, where it is processed and finalized. Here’s how it works:

1. Transaction Submission to Main Node/Sequencer:

The validated transaction is passed from the zkSync API client to the main node or sequencer. As of now, these roles are fulfilled by the same entity. This step transitions the transaction from validation to actual execution.

2. Transaction Execution:

The main node or sequencer then calls the executeTransaction function. This function performs the core operations of the transaction, updating account states and processing the transaction as specified.

3. Post-Transaction Handling (if applicable):

If a paymaster was involved in the transaction, the postTransaction function is called. This function handles any final steps required for transactions that use a paymaster, ensuring that all aspects of the transaction are completed correctly.


In summary, the two-phase lifecycle of transactions in zkSync involves rigorous validation and precise execution steps. During the Validation phase, transactions are checked for correctness, nonce uniqueness, and proper payment. The Execution phase then processes the transaction, ensuring all operations are carried out as intended. This structured approach helps zkSync maintain high efficiency, security, and reliability for all transactions.

Next, we’ll explore the system contracts that play a vital role in zkSync’s architecture.

System Contracts in zkSync

In blockchain systems like zkSync, a system contract is a special type of smart contract that performs essential functions for the protocol's operation. Unlike user contracts, which are created by and interact with end-users, system contracts are pre-deployed and manage core aspects of the protocol's infrastructure. They handle critical operations such as nonce management, transaction validation, contract deployment, and more.

System contracts are integral to the protocol’s stability and performance. They ensure that transactions are processed correctly, that state changes are managed efficiently, and that the system operates securely and reliably.


Key System Contracts in zkSync

Here are some, but not all, of the system contracts used in zkSync:

1. Bootloader

Role:

  • Transaction Finalization: The Bootloader contract is sort of super-admin. It is responsible for the final stages of transaction processing. It ensures that transactions are correctly processed and finalized, and that all necessary steps are completed.

  • Transaction Processing: It handles the core logic needed to process transactions efficiently and securely.


2. ContractDeployer

Role:

  • Contract Deployment: The ContractDeployer contract manages the deployment of new contracts within the zkSync ecosystem. It is used to deploy both user contracts and other system contracts.

  • Deployment Management: This contract ensures that new contracts are deployed correctly, incrementing the deployed nonce, and ensuring that the constructor in a single contract is never called twice.


3. Constants

Role:

  • Define Protocol Constants: The Constants contract contains a collection of constant variables, including addresses and other important values used throughout the protocol.

  • Ensure Consistency: By centralizing these values, the Constants contract helps maintain consistency across the protocol and makes it easier to manage protocol-wide parameters.


4. NonceHolder

Role:

  • Manage Nonces: The NonceHolder contract is responsible for managing nonces, which are essential for ensuring that each transaction is unique. It tracks the latest nonce for each user and prevents replay attacks.

  • Prevent Duplicate Transactions: By managing and updating nonces, this contract ensures that old or duplicate transactions cannot be processed.


5. DefaultAccount

Role:

  • Default Account Management: The DefaultAccount contract provides default functionality for account operations within zkSync. It is used to handle default account-related processes and interactions.

  • Account Operations: This contract ensures that basic account operations are managed correctly and efficiently.


6. TransactionHelper

Role:

  • Assist with Transaction Operations: The TransactionHelper contract provides utility functions and helper methods for transaction-related operations. It aids in tasks such as transaction validation, fee calculations, and calculating the suggested signed hash of a transaction.

  • Utility Functions: It simplifies and optimizes transaction operations by offering reusable functions and logic.


7. IAccount

Role:

  • Account Interface: The IAccount contract defines the interface for accounts within zkSync. It sets out the functions and methods that accounts must implement, ensuring consistency and compatibility across different account types.

  • Account Management: This interface provides a standardized way for accounts to interact with the zkSync protocol, facilitating smooth operations and integrations.


In summary, system contracts in zkSync play a vital role in maintaining the protocol’s functionality and performance. Each contract serves a specific purpose, from managing nonces and deploying contracts to handling default account operations and providing utility functions. Understanding these contracts helps in appreciating how zkSync operates and maintains its high standards of efficiency, security, and reliability.

Next, we’ll explore where you can learn more about zkSync and account abstraction. Stay tuned!

Where Can I Learn More?

While there are a few good platforms that you can learn Account Abstraction like Alchemy and their YouTube. I believe that the absolute best resource for learning not only account abstraction but web3 development and security is CyfrinUpdraft. There, you will find up-to-date courses from beginner to Advanced. It's 100% free, no games no gimmicks. Check it out for yourself.

0
Subscribe to my newsletter

Read articles from Charlie directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Charlie
Charlie

One day I decided to solve a problem that was plaguing us at work. I wanted to make something to streamline our resources and make it easier for use to do our job. I figured that there had to be something online for us to use. I fell down a rabbit hole and I loved it. So much so that I ended up building the solution myself.