DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Because the DevOps movement has redefined engineering responsibilities, SREs now have to become stewards of observability strategy.

Apache Cassandra combines the benefits of major NoSQL databases to support data management needs not covered by traditional RDBMS vendors.

The software you build is only as secure as the code that powers it. Learn how malicious code creeps into your software supply chain.

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

Related

  • Tackling Multidomain Integration in Software Development
  • Thoughts On the Software Crisis
  • Building Secure Smart Contracts: Best Practices and Common Vulnerabilities
  • Languages for Domain Experts, Not Just for Programmers

Trending

  • Build a Simple REST API Using Python Flask and SQLite (With Tests)
  • Efficient API Communication With Spring WebClient
  • Introducing Graph Concepts in Java With Eclipse JNoSQL
  • The Evolution of Scalable and Resilient Container Infrastructure
  1. DZone
  2. Software Design and Architecture
  3. Security
  4. Simplifying Blockchain Development by Using Abstraction

Simplifying Blockchain Development by Using Abstraction

Finally, the concept of abstraction is finding a place in web3 and should help make blockchain development less confusing and intimidating.

By 
John Vester user avatar
John Vester
DZone Core CORE ·
Sep. 28, 23 · Analysis
Likes (1)
Comment
Save
Tweet
Share
37.9K Views

Join the DZone community and get the full member experience.

Join For Free

Blockchain has the potential to revolutionize the way we interact with the digital world. It promises security, transparency, and decentralization. However, for most people, getting started with blockchain can be confusing and intimidating. The need to manage private keys and wallets can be a significant hurdle. 

To make blockchain more accessible, developers have been exploring ways to simplify the process, and one exciting concept is abstraction. In this article, we’ll look at what abstraction is and how it creates a better web3 wallet experience. Later, we’ll take a detailed look at how it is implemented on Flow, a blockchain-focused on mainstream web3 adoption and used by companies such as the NBA, NFT, Ticketmaster, and Mattel. 

What Is Abstraction?

In the realm of computer science and software development, abstraction is a fundamental concept. Abstraction simplifies a system by removing certain characteristics to reduce complexity and enhance efficiency. For most blockchain users, dealing with private keys and wallets can be intimidating and inconvenient. Abstraction in blockchain aims to address this issue. There are two primary ways to manage keys and assets in the blockchain: user custody and application custody.

User Custody

This is considered the safest and most ideal version of blockchain management. With user custody, you hold your own keys on a device like your computer or phone. A special software called a "wallet" helps manage access to your keys. When you use a blockchain application, it asks your wallet for permission to do things like sending money, and you get to approve or deny these requests. User custody gives you full control and security over your assets.

current user journey

Application Custody

On the other hand, application custody is an approach in blockchain where the responsibility of managing private keys and wallet software is shifted from the user to the application or service provider.

Let’s see how it works and why it's valuable:

  1. User-friendly onboarding: With application custody, the user onboarding process is designed to be extremely user-friendly, similar to how people sign up for traditional online services. Users are not required to install any wallet software or deal with the complexities of managing private keys. They can create an account with the blockchain application just as they would with any other web2 service, using a username and password or other familiar credentials like their Google or Facebook login.
  2. No wallet management: In an application custody model, users don't have to worry about onerous wallet management, such as securely storing private keys or making backups. This simplification is especially attractive to users who are new to blockchain technology and may find the concept of wallets and private keys confusing.
  3. Traditional payment methods: Application custody also enables blockchain applications to accept traditional payment methods, such as credit cards for web-based applications or native in-app purchases for mobile apps. This means that users can pay for blockchain-based services using methods they are already familiar with, making the payment process seamless and comfortable.
  4. Reduced user consent: Another advantage of application custody is that applications can manage the assets within the user's account directly, all without needing to request user consent for every action. For example, if a user purchases an item within a mobile game using in-app purchases, they don't have to repeatedly approve each transaction through their wallet. This streamlines the consent process and feels more like the traditional web2 user experience.

walletless user journeyApplication custody isn’t just convenient; it also prioritizes a user-friendly onboarding experience by handling key management and wallet complexities on behalf of the user. However, it limits the portability of assets outside of the application, which is where the concept of account abstraction (specifically account delegation) comes into play. Abstraction bridges the portability gap and offers users more control and flexibility over their blockchain assets.

The Solution: Connecting Both Worlds With Abstraction

To solve this issue and to create a balance between user custody and application custody, developers are turning to something called "account abstraction," specifically, "account delegation." Account delegation refers to a dynamic in which any account that has a valid capability to another account object in the storage can access it. This feature allows one blockchain account to delegate control to another. The account that delegates (the "child" account) still uses cryptographic keys, but the owner of the other account (the "parent" account) gains access to its assets. Importantly, the child account must give permission for this access, and it can take it back at any time. This connection between accounts forms a hybrid custody model that combines the benefits of both user and application custody. 

How It Works

Here's how it works in simple terms:

  • Easy start: New users, who might find the idea of managing keys intimidating, can sign up for an account without dealing with wallets. It's similar to signing up for any other online service. 
  • Growing confidence: As users become more familiar with blockchain and gain confidence in managing their keys, they can delegate control of their app-custody account to their self-custody account. 
  • Full control: With their own keys on their own devices, users can access all their assets in both accounts. They keep control while still letting the application manage assets in the child account, reducing the need for constant interactions with wallets.
  • Interoperability: Because this delegation relationship is tracked on the blockchain, the application can recognize it and access the assets in the parent account when necessary. This makes it easy for users to move assets between accounts for seamless access.

Deep Dive Into Walletless Building

Before moving forward, it's important to understand the concept of account linking, a unique Flow concept that enables the sharing of ownership over accounts. Cadence (the smart contract programming language for Flow) provides two ways to access Flow accounts:

  • PublicAccount: This gives you access to public account info like address, balance, and storage, but you can't make changes. 
  • AuthAccount: With AuthAccount, you get the same access plus the ability to make changes, like adding/removing keys and managing contracts.

account

With Cadence, you can create permissions to share access to account storage. This means if an account has valid permission to access another account's storage, it can get in. You can also control what parts of the storage can be accessed with these permissions.

authaccount capability

Account linking is doable by adding these permissions to the AuthAccount object. Just like storage permissions allow access to data stored in an account, AuthAccount permissions enable access to the AuthAccount itself.

When we talk about "account linking," it's like a parent account sharing a special access card (AuthAccount capability) with another account, making it their child account. This happens in two simple steps on Flow: 

  • The child account creates and shares the AuthAccount capability with the parent account.
    Implementation in code: Create Capability

JavaScript
// Creates and shares the AuthAccount capability with the parent account
// Sends the capability to the signer’s inbox
transaction {
    prepare(signer: AuthAccount) {
        let capability = signer.linkAccount(/private/accountCapA)!
        signer.inbox.publish(capability, name: "accountCapA", recipient: 0x1)
    }
}


  • The parent account can then use this capability to access the child's account easily.
    Implementation in code: Claim Capability
JavaScript
// Access the child’s account
// Capability is a claim to the signer’s inbox
transaction {
    prepare(signer: AuthAccount) {
        let capability = signer.inbox.claim<&AuthAccount>("accountCapB", provider: 0x2)!
        let accountRef = capability.borrow()!
    }
}

claim capability

Why Is Account Linking Useful?

Account linking was created to help users easily join your Flow-based app without needing a wallet first. This makes it simple for everyone to use Flow apps without technical issues or the need to install a wallet. You can enjoy apps right away and also have the option to own your data later on. 

With account linking, users can connect multiple app accounts together. You don't need to worry about the complexities of accessing these accounts because it's all managed through one main account.

child account

The best part? Assets can move freely between these accounts without any extra transactions. Your app account can now interact with the broader Flow ecosystem seamlessly. 

With this feature, users can have full control over their digital items in their in-app account. This means they truly own these items, not just within the app but also outside it. They can easily view their inventory using their parent account and even use these items in other apps, like a marketplace or a game. The best part is they can do all this without the hassle of transferring items between accounts, making it super convenient to use multiple apps at once.

Conclusion

Blockchain development is evolving to make it easier for everyone to get involved. Abstraction, through account delegation, is a key part of this evolution. It combines the safety of user custody and the convenience of application custody, allowing users to transition smoothly from beginners to experts in the blockchain world. As blockchain technology continues to grow, these innovative ideas will help make it more accessible to everyone.

Have a really great day!

Blockchain Abstraction (computer science)

Published at DZone with permission of John Vester, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Tackling Multidomain Integration in Software Development
  • Thoughts On the Software Crisis
  • Building Secure Smart Contracts: Best Practices and Common Vulnerabilities
  • Languages for Domain Experts, Not Just for Programmers

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!