If you are well-versed with smart contracts, you will find that the Abstract SDK is a tool that gives you more leverage. Enabling you to get things done faster and better. It does this by giving you an extensive design space that transcends traditional smart contract capabilities, introducing superior code reusability and an unmatched software distribution process.
The Abstract SDK broadens your design space beyond traditional smart contract application architectures. While applications built with stand-alone smart contracts can also be crafted using the SDK, the Abstract SDK promotes a level of code reusability that goes beyond stand-alone smart contract development. It is through this code reusability that novel applications can be constructed with little effort in record time.
Traditionally applications have been created by composing “stand-alone” smart contracts. With each smart contract designed to fulfill a different role in the application’s logic. We call these applications hosted applications since they’re deployed and controlled by the code maintainers, and to use them, users transfer funds to the application’s smart contract. Dexes, lending markets, yield aggregators are all examples of hosted applications.
flowchart LR subgraph Developer Team [fas:fa-users-cog Developer Team] %% subgraph Application direction BT A[Application] %% end end User[fa:fa-users Users] ==> A style User fill: #161b25 style A fill: #161b25
Hosted applications can be built more efficiently with the Abstract SDK because of it’s modular design. As an example, let’s consider an auto-compounder application. The auto-compounder provides liquidity to DEX trading pairs and re-invests the received rewards into the pairs. The application’s logic can be split into three modules:
- DEX Adapter: Provides an interface to perform DEX operations. (e.g., swap tokens, provide liquidity, etc.)
- Staking Adapter: Provides an interface to perform staking operations. (e.g., claim rewards, stake, unstake, etc.)
- Auto-Compounder: Orchestrates the DEX and staking adapters to perform the auto-compounding logic.
If we visualize this application, we can see that the DEX and staking adapters are reusable components that can be used in other applications. The auto-compounder, in this approach, is a unique application that can be installed on an account and used by users to deposit into and withdraw from the auto-compounder application. The account essentially acts as a vault that holds all the users’ funds.
flowchart LR subgraph Autocompounder Application direction BT Autocompounder -.-> Dex Autocompounder -.-> Staking Staking --> Account Autocompounder --> Account Dex --> Account end User[fa:fa-users Users] ==> Autocompounder style User fill: #161b25 style Autocompounder fill: #161b25 style Staking fill: #161b25 style Dex fill: #161b25 style Account fill: #161b25
This approach offers two significant benefits:
- Code Reusability: Developers can reuse the DEX and staking adapters in other applications. Furthermore, Abstract already provides a library of adapters for the most popular protocols. This saves you both time and money as you don’t need to write the integrations yourself.
- Security: The auto-compounder application’s logic is reduced to it’s bare minimum, making it easier to audit and maintain. Furthermore, the DEX and staking adapters are battle-tested smart contracts, which further reduces the attack surface.
Self-hosted applications, on the other hand, represent a novel concept only achievable with the Abstract SDK. Here, _ users own their applications_ and don’t need to transfer funds to the application’s smart contract. Instead, they deploy the smart contract to their account, which grants the application rights to access those funds. Each application is a new instantiation of a smart contract that is owned and configurable by the user. The user can thus update the application’s code, parameters, and permissions at any time, without relying on the application’s maintainers.
flowchart LR subgraph Developers [fas:fa-users-cog Developers] direction RL A[App] end subgraph Acc1 [fas:fa-user User's Account] direction TB Ap1[App] --> A1[Account] end subgraph Acc2 [fas:fa-user User's Account] direction TB Ap2[App] --> A2[Account] end subgraph Acc3 [fas:fa-user User's Account] direction TB Ap3[App] --> A3[Account] end Store -.-> Ap1 Store -.-> Ap2 Store -.-> Ap3 A ==> Store[fa:fa-store App Store] style A fill: #161b25 style Store fill: #161b25 style Ap1 fill: #161b25 style Ap2 fill: #161b25 style Ap3 fill: #161b25 style A1 fill: #161b25 style A2 fill: #161b25 style A3 fill: #161b25
This approach offers two significant benefits:
- Sovereignty: Users have more control over their funds as they don’t need to trust application maintainers.
- Customizability: Users can tailor their application, leading to novel customization options unavailable with hosted applications.
Let’s see how this applies to the auto-compounder application from before:
The auto-compounder application can easily be converted into a self-hosted application. Again, by self-hosted we mean that instead of users moving their funds to an externally owned account, they deploy the auto-compounder application to their own account. The auto-compounder application is now owned by the user and can be configured to their liking.
flowchart BT subgraph Alex[Alex's Account] direction TB A1[Autocompounder] -.-> D1[Dex] A1[Autocompounder] -.-> S1[Staking] S1[Staking] --> C1[Account] A1[Autocompounder] --> C1[Account] D1[Dex] --> C1[Account] end subgraph Sarah[Sarah's Account] direction TB A2[Autocompounder] -.-> D2[Dex] A2[Autocompounder] -.-> S2[Staking] S2[Staking] --> C2[Account] A2[Autocompounder] --> C2[Account] D2[Dex] --> C2[Account] end AppStore[fa:fa-store App Store] ==> A1 AppStore[fa:fa-store App Store] ==> A2
With this setup Alex and Sarah can both use the auto-compounder application, but they can configure it to their liking. For example, Alex can configure the auto-compounder to compound his rewards every 24 hours, while Sarah can configure the auto-compounder to compound her rewards every 12 hours. This approach allows for a very customizable and personalized experience.