<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Abstract Money - Medium]]></title>
        <description><![CDATA[The Interchain Application Platform - Medium]]></description>
        <link>https://medium.com/abstract-money?source=rss----22eece0a500c---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Abstract Money - Medium</title>
            <link>https://medium.com/abstract-money?source=rss----22eece0a500c---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 15 May 2026 15:52:19 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/abstract-money" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Abstract v0.22: Simplifying The IBC Experience]]></title>
            <link>https://medium.com/abstract-money/abstract-v0-22-simplifying-the-ibc-experience-77f06a324c4d?source=rss----22eece0a500c---4</link>
            <guid isPermaLink="false">https://medium.com/p/77f06a324c4d</guid>
            <category><![CDATA[interchain]]></category>
            <category><![CDATA[abstract-sdk]]></category>
            <category><![CDATA[development]]></category>
            <category><![CDATA[ibc]]></category>
            <category><![CDATA[cosmwasm]]></category>
            <dc:creator><![CDATA[Nicolas KOWALSKI]]></dc:creator>
            <pubDate>Tue, 18 Jun 2024 19:11:47 GMT</pubDate>
            <atom:updated>2024-06-18T20:01:07.435Z</atom:updated>
            <content:encoded><![CDATA[<h4>IBC is extremely powerful, though this power remains largely unharnessed due to its complexity, asynchronicity, and lack of debugability. Abstract makes IBC (in CosmWasm) easy. How?</h4><blockquote><a href="#7033">Introduction: The Pain of IBC Development </a><br> 1. <a href="#a3ee">Abstract v0.22: Your IBC Hero</a><br> 2. <a href="#e97d">CosmWasm IBC vs. Abstract </a><br> 3. <a href="#0e4b">Streamlined Experience for IBC Pros</a><br> 4. <a href="#444e">Enhancing The Abstract Experience</a><br><a href="#a31b">Conclusion: Abstract — Making IBC a Breeze!</a></blockquote><h3>Introduction: The Pain of IBC Development</h3><p>Back at Cosmoverse Istanbul 2023, I wore a T-shirt proclaiming Debugging IBC is such a PAIN!</p><figure><img alt="Author of the article wearing a red shirt with the following text : “Debugging IBC is such a Pain ! Talk to this guy” and an arrow from the text to the neck of the t-shirt" src="https://cdn-images-1.medium.com/max/1024/1*6BOWqvLKxK29SGTHRjSHpA.jpeg" /><figcaption>This is me</figcaption></figure><p>And you can’t disagree with that. The <strong>lack of tooling</strong>, the various <strong>complicated handshakes and endpoints (</strong>Channel , Packet , Client , packet_receive…) are indeed challenging when developing simple IBC applications. Despite its strengths in security and decentralization, IBC presents significant difficulties due to insufficient <strong>tooling</strong> and <strong>abstraction</strong>, similar to forcing an app developer to manage TCP and HTTP protocols for every StackOverflow query they have.</p><h3>Abstract v0.22: Your IBC Hero</h3><p>As underlined in every written piece about Abstract:</p><blockquote><strong>Abstract builds tooling to streamline the on and off-chain CosmWasm developer experience in building Interchain applications</strong></blockquote><p>For over a year, the <strong>Interchain Abstract Accounts</strong> have provided users with a single account across the entire IBC ecosystem, enabling transactions across multiple blockchains without leaving their home-chain. This eliminates the need for bridging, managing gas tokens, and switching wallets, offering a seamless IBC experience within users’ comfort zones. <strong>The Abstract 0.22 release further simplifies</strong> sending and composing IBC messages without multiple transaction signatures.</p><p><strong>Now, we also aim to simplify IBC for developers</strong>. This update introduces essential features and simplifications to facilitate creating IBC applications without delving into protocol specifics.</p><h3>CosmWasm IBC vs. Abstract</h3><p>CosmWasm smart contract all have the capability to send <strong>IBC</strong> messages. However, as a developer, regular IBC inside smart-contracts requires :</p><ul><li>Implementing 6 additional entry-points, 2 of which should <strong>never</strong> fail</li><li>Creating and maintaining IBC channels, which is a <strong>huge</strong> Dev-Ops challenge on its own (and what smart-contract developer really likes Dev-Ops anyway ?)</li><li>An extra mind-juggling effort to understand and remember all the IBC lingo.</li><li><a href="https://github.com/CosmWasm/cosmwasm/blob/main/IBC.md">Learn more about all the necessary steps here</a></li></ul><p>With Abstract and for simple IBC applications,<strong> you simply need to add 1 endpoint</strong> to receive packets. This allows for <strong>simpler and more composable applications </strong>thanks to simple implementation patterns and the diminished overhead.</p><h3>Streamlined Experience to make you an IBC Pro</h3><p>More advanced IBC applications will obviously need more tooling than a single IBC endpoints. Abstract also provides a simplified interface for experienced IBC developers to allow for a modular and inter-operable experience. Let’s dive in some code to illustrate the Abstract Interchain developer experience. If some of the single-chain endpoints are not familiar to you, check out the <a href="https://docs.cosmwasm.com/docs/smart-contracts/contract-semantics">official documentation</a> to learn more. The following sections present the difference between the single-chain and multi-chain experience inside Abstract smart-contracts.</p><h4>Module to Module IBC</h4><p>Abstract 0.22 introduces a feature to allow modules to communicate with one another seamlessly over IBC, without you as a dev having to worry about authentication, callback logic, channels, packets, clients, or anything related to IBC. It just works. How?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/395/1*kk_IEglGCfdotxIvfxt45w@2x.png" /><figcaption>Diagram demonstrating Module to Module IBC</figcaption></figure><h4>Sending Messages</h4><p>Sending IBC messages is easy. You need to specify, the chain you want to communicate with, a receiver, the message and an eventual callback parameter. The structure looks like this :</p><pre>// Single-chain experience<br>let msg = wasm_execute(contract_addr, msg, funds)?;<br>// IBC experience<br>let msg = app<br>      .ibc_client(deps.as_ref()) <br>      .module_ibc_action(host_chain, target_module, exec_msg)?;</pre><p>With this syntax, you see that it’s as easy to send a message as you would any CosmosMsg.</p><h4>Receiving Messages</h4><p>Abstract introduces an additional endpoint in its framework that can only be called by Abstract core contracts when another modules sends an IBC message. This endpoint looks like this:</p><pre>// Single-chain experience<br>fn execute(deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg)<br>// IBC experience<br>fn module_ibc(deps: DepsMut, env: Env, info: ModuleIbcInfo, msg: Binary) <br><br>pub struct ModuleIbcInfo {<br>  pub source_chain: ChainName,<br>  pub source_module: ModuleInfo,<br>}</pre><p>Similarly to receiving a message through the execute endpoint, you get the deps , env variables. The info variable in the IBC case contains information allowing to identify the original caller of the messages, just like the usual MessageInfo variable. It allows simplifying access-control for developers.</p><h4>Action callbacks</h4><p>In some cases, you want to be able to execute code depending on the execution result of an IBC message. You can specify the need for a callback in the original message using the callback_info field. Here is its structure:</p><pre>pub struct CallbackInfo {<br>    /// Used to identify the callback that is sent (acts like the reply ID)<br>    pub id: String,<br>    /// Used to add information to the callback.<br>    /// This is usually used to provide information to the ibc callback function for context<br>    pub msg: Option&lt;Binary&gt;,<br>}</pre><p>Similar to reply , you have an id which will be propagated back to the Abstract callback endpoint to identify which callback handler should be used. The additional msg field allows you to pass additional information to the callback (for example some context, the original message you sent…).</p><p>To receive the callback, you implement an additional endpoint :</p><pre>// Single-chain experience<br>fn reply(deps: DepsMut, env: Env, reply: Reply);<br>// IBC experience<br>fn ibc_callback(deps: DepsMut, env: Env, msg: IbcResponseMsg);<br><br>pub struct IbcResponseMsg {<br>    /// The ID chosen by the caller in the `callback_info.id`<br>    pub id: String,<br>    /// The msg sent with the callback request.<br>    /// This is usually used to provide information to the ibc callback function for context<br>    pub msg: Option&lt;Binary&gt;,<br>    /// The execution or query result (because YES you can also query remote chains !)<br>    pub result: CallbackResult,<br>}</pre><p>Callbacks are secure because they can only be received on the module that dispatched them. This ensures security of execution and makes sure that all the IBC interactions are secure !</p><h3>Enhancing The Abstract Experience</h3><p>In addition to onboarding every dev to the Interchain, Abstract has simplified the developer experience throughout its framework. Here is a non-exhaustive list of the additional changes that were brought to the framework in the last month:</p><p>- Multiple API changes were made (interface macro, re-exports…) in order to <strong>making the library more accessible to all developers, new or experienced.</strong><br>- We made the namespace claiming process permissioned on Mainnet to avoid namespace pollution, squatting and impersonation.<br>- We tested and iterated on the Abstract client library to <strong>smooth the on-boarding of all kinds of developers</strong>. We added numerous features and simplified the API (Name Service builder, IBC helpers, apps, accounts retrievers…)<br>- We added an <a href="https://ida.interchain.io/tutorials/8-understand-sdk-modules/1-authz.html"><strong>Authz API</strong></a> to facilitate the use of this complicated module inside Abstract Apps</p><h3>Conclusion: Abstract — Making IBC a Breeze!</h3><p>Abstract v0.22 comes with wonderful new IBC features that Abstract everything complicated about cross-chain communication :</p><ul><li>No more Dev-Ops for IBC interactions (say bye to channels, relayers,…)</li><li>The execution flow is <strong>exactly</strong> the same as the CosmWasmsubmessage-reply flow, developers don’t need to learn more things to use IBC !</li></ul><p>To learn more about it, check out:</p><ul><li>The <a href="https://github.com/AbstractSDK/abstract/blob/main/framework/docs/src/releases/v0.md#0221---2024-05-08">v0.22</a> Changelog</li><li>Our official <a href="https://docs.abstract.money/">documentation</a></li><li>The Abstract <a href="https://docs.abstract.money/4_get_started/10_ibc_capabilities.html">IBC documentation</a></li><li>Our <a href="https://discord.com/invite/uch3Tq3aym">Discord channel</a> for support, we <strong>want</strong> to help you !</li><li>Our <a href="https://x.com/AbstractSDK">Twitter</a> for more announcements</li><li>Our <a href="https://www.youtube.com/@abstractmoney">YouTube channel</a> for workshops and tutorials!</li></ul><p><strong>Be Abstract. Think Interchain.</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=77f06a324c4d" width="1" height="1" alt=""><hr><p><a href="https://medium.com/abstract-money/abstract-v0-22-simplifying-the-ibc-experience-77f06a324c4d">Abstract v0.22: Simplifying The IBC Experience</a> was originally published in <a href="https://medium.com/abstract-money">Abstract Money</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Founding of Abstract Money]]></title>
            <link>https://medium.com/abstract-money/the-founding-of-abstract-money-a5dfe260e75c?source=rss----22eece0a500c---4</link>
            <guid isPermaLink="false">https://medium.com/p/a5dfe260e75c</guid>
            <category><![CDATA[abstract-money]]></category>
            <category><![CDATA[cosmos]]></category>
            <category><![CDATA[personal-chain]]></category>
            <category><![CDATA[abstract]]></category>
            <category><![CDATA[abstracto]]></category>
            <dc:creator><![CDATA[Adair Kelley]]></dc:creator>
            <pubDate>Sat, 04 May 2024 11:06:14 GMT</pubDate>
            <atom:updated>2024-05-04T11:18:44.585Z</atom:updated>
            <content:encoded><![CDATA[<p>Hi! I’m Adair, a nerd with a passion for classical music, sovereignty, and permanence of humankind. Today marks the second anniversary of a bold decision I made: leaving AWS behind to co-found a software company with my now-best friend, Robin. Funny how we’d only crossed paths six months prior! Our brainchild, <a href="https://abstract.money">Abstract Money</a>, is a developer-centric platform powering the next-generation of decentralized consumer applications. Our co-founder journey begins with a serendipitous meeting at Cosmoverse 2021 in Lisbon.</p><p><strong>A Cosmic Encounter</strong></p><p>At Cosmoverse, Howard was the first human with whom I dared talk (albeit awkwardly) at the conference, where we discovered a mutual obsession with Terra and Luna. LFG! Like many others, this stemmed from the incredibly lucrative “risk-free” yield farming opportunities on Anchor and Mirror (may they rest in peace).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*TnqWuEo3O0Mw7z0G.jpg" /></figure><p>Cosmoverse was my first IRL crypto conference, my roots having been in the EVM space. I ended up in Cosmos due to its truly decentralized ethos which is starkly different from other globalist ecosystems — and shoutout to Cryptocito for highlighting it! On the other side, Howard was CTO at White Whale, a protocol delivering some of the most advanced DeFi products in Cosmos at the time. I was a bit starstruck by him and Sunny to say the least, my professional software experience only having been as a corporate cog.</p><p><strong>Bidding Adieu to Big Corporate</strong></p><p>At the time, I was part of an amazing team at AWS: a giant corporate structure with startup-like teams and a culture that matched. I loved my team and my autonomy, though the limitations of web2 quickly became glaring. One could have a tremendous impact on customers and profitability, though web2 is not a meritocracy and the cog reaps no rewards from the performance of the engine. I booked a flight to Belgium to work with Howard IRL. Good morning su… cloudshine?</p><p><strong>A Problem with Web3</strong></p><p>Decentralization is inevitable. Though by definition, decentralization means fragmentation, and this is ever-clear with the development of the Cosmos ecosystem and web3 at large. On Ethereum, everyone is building on the same protocol, hence why collaboration is is incentivized to drive value to that protocol. Cosmos is a different story. Application-specific protocols — read applications — are the basic unit of value-capture, and therefore teams are incentivized to build in silos. Collaboration is secondary as it may lead to others beating your application to market. Every team starts from scratch, makes the same mistakes, and <em>wastes effort</em>!</p><p><strong>The Idea</strong></p><p>Howard ideated DAO-OS as a modular standard in building CosmWasm applications on Terra, aimed at solving the problems with fragmented development. “DAO<em>”</em> because organizations are the base unit of collaboration, and “OS<em>”</em> as it enables execution of applications and control of data flow. This later became Abstract OS as an homage to the abstraction of OSes. Next up: Abstract Hypervisor?</p><p>We unveiled Abstract OS at Cosmoverse 2022 in Medellín as a modular application development platform. Its potential was evident with our victory at the first CosmWasm hackathon with <a href="https://equilibrium.zone/">Equilibrium</a>, a cross-chain, auto-balancing portfolio application. However, we weren’t satisfied.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*kWqlsH2eaSeofgm8.png" /></figure><p><strong>Thinking Bigger</strong></p><p>The web3 design space is relatively unexplored. Ethereum is not a global compute platform, and Cosmos has yet to realize its localist vision as the “internet of blockchains.” In comparison to the timeline of computing, it seems that we are in the 1970s with use of “general-purpose” blockchains akin to <a href="https://www.notion.so/The-Origin-of-Abstract-Money-402181df1793498ab4cf9b5fdc5ee01d?pvs=21">computer timesharing</a>. It follows that decentralized personal computers, personal virtual machines (VMs) will become more prevalent, with value-creating applications preceding their adoption. The future of computing is self-sovereign.</p><p><em>Abstract is built with the personal VM in mind, allowing each individual to have their own personal chain, the new era of the PC.</em></p><p><strong>A Holistic Application Platform</strong></p><p>Abstract’s vision is to align the incentives between developers and users, forming a symbiotic ecosystem that fosters collaboration. Innovation comes as a natural byproduct.</p><p>For developers, Abstract offers a modular approach to building applications. This is reminiscent of microservices in the web2 realm, enhancing scalability and flexibility, while significantly reducing total engineering time. These components can be monetized, providing sustainable income and incentivizing continued maintenance. And when it comes to applications’ go-to-market, Abstract provides a solution for the cold-start problem — that initial hurdle of attracting users to new applications — with its application platform.</p><p>On the other hand, Abstract is the end-user’s personal application platform, serving as a portal to a wide variety of consumer applications. It’s an environment where they can directly impact development by providing direct feedback, enabling rapid iteration and improvements.</p><p>Technically, Abstract is a Wasm VM-agnostic application layer, using CosmWasm for its robust framework and IBC for seamless interoperability. For the end-users? They just use the apps. Much like the internet, the interchain is abstracted away.</p><p><strong>Closing Thoughts</strong></p><p>And so why do Howard and I get along so well? Well, anybody that knows me will tell you that my head is always in the clouds. I love everything about the ideation process, diving deeper and deeper and finding new ways to transform our lives. Howard is an incredibly grounding force, with a basis in reality, being highly logical and calculated in his actions.</p><p>I’m the ideas man, and Howard is the logic man. And this makes us the absolute perfect co-founder combination.</p><p>Cheers.</p><p>Adair Kelley</p><p><strong>Footnotes</strong></p><ol><li>This day also happened to be when and where I met Vanessa Pestritto, now a lifelong friend and beloved mentor.</li><li>Howard, along with my dear sister Adele, is one of the few people on this planet crazy enough to learn <a href="https://www.kaufmann.no/roland/dvorak/">programmer dvorak</a> at a casual recommendation.</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a5dfe260e75c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/abstract-money/the-founding-of-abstract-money-a5dfe260e75c">The Founding of Abstract Money</a> was originally published in <a href="https://medium.com/abstract-money">Abstract Money</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Abstract Introduces “MyFi”: A Case Study]]></title>
            <link>https://medium.com/abstract-money/abstract-introduces-myfi-a-case-study-cff2bc0e2e4d?source=rss----22eece0a500c---4</link>
            <guid isPermaLink="false">https://medium.com/p/cff2bc0e2e4d</guid>
            <category><![CDATA[abstract]]></category>
            <category><![CDATA[interchain]]></category>
            <category><![CDATA[ibc]]></category>
            <category><![CDATA[cosmwasm]]></category>
            <category><![CDATA[myfi]]></category>
            <dc:creator><![CDATA[CyberHoward]]></dc:creator>
            <pubDate>Thu, 25 Apr 2024 15:22:25 GMT</pubDate>
            <atom:updated>2024-04-25T16:23:06.994Z</atom:updated>
            <content:encoded><![CDATA[<h4>dApps as Consumer Software on Distributed Compute</h4><h3>Abstract</h3><p>As the technology for decentralization evolves, so should the ideas that surround it. MyFi, short for My Finance, is a new era of decentralized finance (DeFi) that promotes self-sovereign financial applications. MyFi’s inception was sparked by technical advances in smart-contract application development. At its core,<strong> MyFi allows developers to vend their decentralized applications (dApps) as consumer software while reducing users’ trust assumptions about that software.</strong></p><h3>DeFi dApps: A Pragmatic Analysis</h3><p>Decentralized Applications, dApps in short, are applications hosted on distributed systems, the most common of which are blockchains. Each dApp defines a set of unbreakable rules in code, broadly called smart-contracts. Smart-contracts can be deployed to a blockchain network which ensures that they are executed correctly.</p><p>After the application is deployed, any user is free to interact with it by initiating a transaction on that blockchain network. Blockchains use these transactions to share the network’s compute with its users. As applications often get upgraded with new features or bug fixes, the original developers typically remain in full control over these dApps, giving them responsibility for the safety of the contracts’ code.</p><p><strong>These properties: a secure execution environment, the monolithic deployment of applications, and the shared access to those applications through transactions is what makes blockchain applications so different. </strong>These unique features lead to the birth of Decentralized Finance (DeFi) and the creation of hugely successful dApps. Examples include Uniswap , an automated market maker protocol, and Compound, a lending and borrowing protocol, both of which have attracted billions in capital. So what’s next for this industry as it matures? History has us convinced it lies in software distribution.</p><h3>Software Distribution</h3><p>The act of making an application available to users, promptly named “software distribution” has seen its fair share of evolution since the introduction of programmable computers.</p><p>In the early days of software development, programs were written and made available through mainframes, big and expensive computers that were shared between user like a valuable commodity. The process of distributing the software written for these behemoths wasn’t very different from how software is deployed and managed on modern blockchains. Developers would:</p><ol><li>Write their software.</li><li>Test it on a mainframe (when one was available).</li><li>Finally, deploy it to a mainframe for others to use the next day.</li></ol><p>The process for dApp developers today looks the same:</p><ol><li>Write their smart-contract.</li><li>Test it on a public testnet (testing blockchain).</li><li>Finally, if all seems fine, push it to a mainnet blockchain for public use.</li></ol><p>Luckily software distribution have moved a long way since the mainframe era. In the modern age, people have ownership of their own devices like a smartphone or a PC, allowing them to install whichever applications that they like.</p><p>Software distribution platforms like the Apple App Store and Google Play Store enabled these device owners to discover and “own” their software by installing it on their own devices. These practices lowered the barrier for users to try out new software and for developers to get their software in the hands of users. <strong>This ability to publish software on widely-used app marketplaces enabled smaller teams to compete with software monoliths, launching the era of software startups operated out of musky basements.</strong></p><p>While DeFi dApps are technically decentralized as they exist on blockchains, their management is fairly centralized, as <em>most dapps are still hosted services</em>. dApp creators maintain the ability to update their dApps at any time, risking users funds and robbing them of the sovereignty Web3 should bring to users. DeFi as a service is not decentralized.</p><p>Abstract Money is bringing dApp ownership back to users and paving way for MyFi: a new era of decentralized personal finance.</p><h3>MyFi</h3><p>Self-sovereignty and ownership are foundational values of Web3, nonetheless our status-quo has partly relinquished these responsibilities to on-chain financial services providers. Blockchains give us the tools we need to create public financial infrastructure (DeFi), and using these same tools, we can build sovereign personal financial infrastructure (MyFi).</p><p>Over the past two years, we’ve developed the Abstract SDK, a modular framework for dApp development. The Abstract SDK is designed for organizations and individual developers to build composable, distributed applications in a <strong>fast, secure, and cost-effective manner</strong>.</p><p>For maximum composability and extensibility, Abstract Apps are built upon <strong>Abstract Accounts, our smart-contract accounts</strong>. If you’re coming from EVM, these are similar to a Gnosis Smart Accounts, though far more interoperable (more on that later). Developers using the Abstract SDK build <em>modules: </em>standardized smart-contracts that isolate shared logic and can extend the functionality of an Account, making it an application. These modules can be composed, allowing teams to collaborate in building more advanced applications, component by component.</p><p>So every Abstract App is account-based. What difference does it make?</p><p>First, it allows users to be in full control of their funds <em>and</em> their applications. Similar to how mobile apps are installed directly on user’s devices, Abstract apps are <em>installed directly on user’s Accounts</em>. The user remains in full control over their installation at all times, and can choose to upgrade to new versions should the developers publish bug fixes or otherwise. And because the contract instance is owned by the user, they can have much finer control over the settings of their applications.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uypmJqp2VZE83FOJ3lXkaw.png" /><figcaption>Diagram depicting Abstract Accounts and their installed MyFi applications.</figcaption></figure><p>And for developers, letting users self-custody their funds in their personal apps has enormous legal advantages. As teams never gain control over or custody funds, they are much better protected from legal scrutiny. Knowing this up-front can save teams tens of thousands of dollars in legal costs! Contrary to what some people might think, developers don’t actually want the risk of managing funds that are not theirs. Until now, this responsibility has been assumed.</p><p>The MyFi model inverts the traditional relationship between users and dApps. As users are now in control, they need a way to discover and manage their applications. Enter the Abstract dApp Launcher: a multi-chain dApp distribution and discoverability platform.</p><h3>Dapp Distribution and Discovery</h3><p>With Abstract MyFi, instead of deploying dApps themselves, developers publish their dApps on-chain to the Abstract App Store (shown below).</p><p>Interacting with the Abstract App Store will feel familiar. Available dApps are showcased and new releases are featured on the home page. Upon discovery, users can install the dApp directly on their Account, making it available as a shortcut in the Launcher for immediate use.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bLXaUNZvzqbM_VmEQ7qqQQ.png" /><figcaption>Fig 2. Abstract Launcher dApp Store</figcaption></figure><p>We’ve designed this experience to be as seamless as possible, hiding all the complexities of the underlying technology to let users focus on apps, not chains. Cross-chain transactions, bridging, and even gas expenditure are hidden from the user, making it as seamless as downloading and using an app on a smartphone.</p><p>Chain abstraction is native to our platform. With Abstract Accounts, users can manage their dapps and accounts on any chain, though they are none the wiser. For devs, they can write their apps once, distributing them to users of any chain in the overarching CosmWasm ecosystem.</p><p>Let’s see a concrete example of how this is used.</p><h3>MyFi Case Study: Carrot Savings</h3><p>To showcase MyFi and flex the power of our multi-chain platform, we’ve developed <a href="https://carrotsavings.com">Carrot Savings</a>, a multi-chain stablecoin yield aggregator.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0qWzcCKgqHEy0pYI6_rHLQ.png" /><figcaption>Carrot Savings App</figcaption></figure><p>Carrot Savings is an Abstract App that gives users access to high stablecoin yield opportunities from protocols and chains across Cosmos.</p><p>You can onboard to Carrot Savings in 2 easy steps:</p><ol><li>Create a new Abstract Account with any sign-in method.</li><li>Install the Carrot App with initial funding, giving immediate access to yields.</li></ol><p>Once installed, the app itself performs the yield strategy directly on your assets without them sending them out of your Accounts! So just like on your phone, the Carrot App will request certain permissions — not your location or access to your photos — but permissions to interact with external protocols on your behalf.</p><p>V1 of Carrot Savings leverages an Osmosis stableswap pool, providing liquidity from a user’s wallet using AuthZ for proxied permissions. Each user is in full control of the underlying contract and has the ability to revoke permissions at any time. After the setup, a bot will execute compounding actions on the user’s behalf. The user can inspect their position on the Osmosis frontend itself or through our web-app.</p><p>V2 of Carrot Savings, currently under development, will integrate additional yield sources and allow for multiplexing across multiple protocols. The process of migrating from V1 to V2 will be simple and the custody of the funds always remains with the user.</p><h3>Closing Thoughts</h3><p>From a confusing multi-chain UX to the struggles of creating brand awareness, the Web3 landscape is plagued by challenges effecting both users and developers.</p><p>MyFi is a wholistic response to these challenges. Users can discover and interact with the interchain through our launcher without being confronted with technicalities. In turn these users become an attractive audience for developers to target through our built-in app-store. By creating personalized blockchain products, developers have an easier time identifying the needs of their users and iteratively pushing updates to those who are willing to experiment.</p><p>In the end, our goal is to foster experimentation and ideation by significantly lowering the barrier to bring a dApp to market.</p><p>Do you want to help us make this a reality or are you interested in building with our software? Follow up with us on <a href="https://discord.gg/2Gxq4cczCD">Discord</a>, start reading our <a href="http://docs.abstract.money">docs</a> or <a href="https://abstract-money.notion.site/a6969e246bf44882a97acf872d4eae0c?v=3bf38eb3262043cdb4108ee5d4380129&amp;pvs=74">discover our open positions</a>!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cff2bc0e2e4d" width="1" height="1" alt=""><hr><p><a href="https://medium.com/abstract-money/abstract-introduces-myfi-a-case-study-cff2bc0e2e4d">Abstract Introduces “MyFi”: A Case Study</a> was originally published in <a href="https://medium.com/abstract-money">Abstract Money</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Abstract SDK + Rollkit Hackathon Track | Celestia Infinite Space Bazaar]]></title>
            <link>https://medium.com/abstract-money/abstract-sdk-rollkit-hackathon-track-celestia-infinite-space-bazaar-850f5275faa3?source=rss----22eece0a500c---4</link>
            <guid isPermaLink="false">https://medium.com/p/850f5275faa3</guid>
            <category><![CDATA[cosmwasm]]></category>
            <category><![CDATA[celestia]]></category>
            <category><![CDATA[rollkit]]></category>
            <category><![CDATA[rollup]]></category>
            <category><![CDATA[abstract-sdk]]></category>
            <dc:creator><![CDATA[Adair Kelley]]></dc:creator>
            <pubDate>Thu, 04 Apr 2024 19:39:41 GMT</pubDate>
            <atom:updated>2024-04-04T22:49:42.300Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Drv8sC6wgRejwFZlPC4vqQ.png" /></figure><p>Abstract Money is offering a $2,500 prize to the team who implements the best SocialFi-focused rollup with apps built using the <a href="https://docs.abstract.money">Abstract SDK</a>, deployed on a CosmWasm rollup using <a href="https://rollkit.dev">Rollkit</a>’s sovereign rollup framework.</p><p><a href="https://bazaar.celestia.org/">Celestia Infinite Space Bazaar</a> is a hackathon from April 2nd to May 17th, 2024, rewarding applications on Celestia and its rollups across DeFi, NFTs, Gaming, and General Applications. It values creativity and innovation. Extra points for projects that push the boundaries of what’s possible on Celestia. Sounds crazy, right? Read on to learn more</p><h3>Track: Abstract MyFi — Best SocialFi Application built using Rollkit and Abstract SDK</h3><h4>Abstract Money</h4><p>Abstract Money is a multi-chain development and distribution platform for dapps. Our goal is to enable developers to build more powerful interchain dApps through collaboration, convention, and modularity. We provide a full-stack CosmWasm app development experience, including smart-contract, middleware, and frontend tooling.</p><h4>Rollkit</h4><p>Rollkit is a sovereign rollup framework that allows anyone to launch their own sovereign, customizable blockchain as easily as a smart contract. Our mission is to empower developers to quickly innovate and create entire new classes of rollups with minimal tradeoffs. We’re setting the bar high for developers’ flexibility and ability to customize rollups however they see fit. Developers can deploy and interact with CosmWasm Rollkit rollups using <a href="https://github.com/AbstractSDK/cw-orchestrator">cw-orchestrator</a>, with a guide <a href="https://orchestrator.abstract.money/chains/rollkit.html">available here</a>.</p><h4>Abstract SDK</h4><p>The Abstract SDK is our modular CosmWasm framework, built to streamline the development of interchain applications. Using this SDK, devs can build modules that extend the functionality of Abstract Accounts, our IBC-native smart-contract wallet. And then using our on-chain application management infrastructure, you can publish apps that span and control the entire interchain.</p><p>Abstract applications are account-based, meaning that every Abstract App is just an Abstract Account with Modules installed on it. When an Abstract App is “installed” by the end-user, they are creating a sub-account on their main account and literally instantiating the application components, meaning all apps are “self-hosted” and non-custodial. This opens up the doors for highly unique applications where the users always remain in full control, such as in social media or community-based platforms, oft-coined “SocialFi,” though as Abstract infra is fully owned by You, it’s “MyFi.” This works very well with rollups, as the rollups themselves can scale as the social media platform scales in size.</p><h4>MyFi</h4><p>Why MyFi? In DeFi, we are using decentralized, but still custodial, applications for our finances. Web3 is about self-sovereignty and ownership, and those rights are still being relinquished to now on-chain financial services. These services can update the contracts, migrate ownership, and all can potentially rug you. Using Abstract, every app you interact with is fully controlled by YOU. Blockchain gives us the tools we need for public financial infrastructure, and using these same tools, we can build personal financial infrastructure. As a user, I’d want this financial infrastructure to be customized to ME, and feel like MINE. Abstract MyFi brings this dream to reality.</p><h3>Bounty</h3><blockquote>🎈 We encourage all hackers to be as creative and innovative as possible for this. If you have an idea and are unsure how it can be built, please reach out to us on <a href="https://discord.gg/uch3Tq3aym">Discord</a>.</blockquote><p>Social finance focuses on the social applications of DeFi. Its goal is to create a more fair and financially inclusive online ecosystem where users have greater control over their content and can directly benefit from their online activities.</p><p>On traditional social media platforms, users create accounts on their servers, relinquishing control of all content and activities to the platform. With Abstract, Apps are literally <em>installed</em> on users’ Accounts, meaning that meaning that they’re fully sovereign and controlled by them. This flips the control model, and the platform simply provides an interface that accesses functionality available on the users’ Accounts.</p><p>For example, let’s say that we were building a social media platform on Abstract. This Abstract App would include:</p><ul><li><strong>Profile module</strong> — allowing for creation and management of of a user-profile NFT</li><li><strong>Posts module</strong> — allowing for publishing of NFT posts on a specific profile, with means of “purchasing” the posts from end-users</li><li><strong>Social points module</strong> — allows other users to buy “shares” in an individual via bonding curves or other mechanism.</li><li><strong>Marketplace module</strong> — allowing for users to list and sell items</li></ul><p>For this track, create a socialFi application that would require a user to install it on their Account before they can access the platform. We’d like you to think about novel incentive mechanisms, media ownership, and NFTs.</p><h4>To Qualify</h4><ul><li>Deploy a CosmWasm Rollup using Rollkit</li><li>Use <a href="https://orchestrator.abstract.money">cw-orchestrator</a> to deploy Abstract’s on-chain app infrastructure</li><li>Use the Abstract SDK to write a novel application using it’s Account-based application model. Users <em>must install it</em> to participate in something socially (like FriendTech, reviews, etc.).</li><li>Create a frontend where users can install the app on their own account and interact with other installations of the app</li></ul><h4>Disqualifiers</h4><ul><li>Single-app instances, where the application is “hosted” on one Account.</li><li>This app should be fully owned by the end-user, with the platform conforming to their installation.</li><li>Apps can have factories and other contracts that orchestrate information like multi-queriers or -executors.</li></ul><h3>Interchain MyFi BONUS (reach out to us):</h3><p>One of the best use cases for Abstract (and the reason our original name was Abstract OS) is for personal rollups. Using Interchain Abstract Accounts (ICAAs), you can use this rollup to control any account on any blockchain connected via IBC. Here’s an <a href="https://www.youtube.com/watch?v=MrpndbPSBmI">overview</a> and <a href="https://www.youtube.com/watch?v=-rArIzkU72E">code walkthrough</a>. You can also use these ICAAs to interact with any other DeFi primitive on the interchain, using our DeFi adapters. This means you can create fully self-sovereign DeFi strategies spanning multiple chains. If you are interested in pursuing this, please reach out to us on Discord and we can guide you through the process of working with them. This <em>requires</em> knowledge of IBC and cross-chain execution. We have advanced tooling to support this use case.</p><h3>Resources</h3><ul><li>Website: <a href="https://abstract.money">abstract.money</a></li><li>High Level Overview of Abstract’s Infra: <a href="https://medium.com/@abstractmoney/a-high-level-overview-of-abstract-moneys-interchain-app-platform-d30813c7a1b4">https://medium.com/@abstractmoney/a-high-level-overview-of-abstract-moneys-interchain-app-platform-d30813c7a1b4</a></li></ul><h4>Rollkit</h4><ul><li>Documentation: <a href="https://rollkit.dev/learn/intro">https://rollkit.dev/learn/intro</a></li><li>Get Started: <a href="https://rollkit.dev/tutorials/cosmwasm#%F0%9F%97%9E%EF%B8%8F-cosmwasm-rollup">https://rollkit.dev/tutorials/cosmwasm#🗞️-cosmwasm-rollup</a></li><li>GitHub: <a href="https://github.com/rollkit/rollkit">https://github.com/rollkit/rollkit</a></li></ul><h4>Abstract SDK</h4><ul><li>Documentation: <a href="https://docs.abstract.money">https://docs.abstract.money</a></li><li>Get Started: <a href="https://docs.abstract.money/4_get_started/1_index.html">https://docs.abstract.money/4_get_started/1_index.html</a></li><li>GitHub: <a href="https://github.com/AbstractSDK/abstract">https://github.com/AbstractSDK/abstract</a></li></ul><h4>CW-Orchestrator</h4><ul><li>Documentation: <a href="https://orchestrator.abstract.money/">https://orchestrator.abstract.money/</a></li><li>GitHub: <a href="https://github.com/AbstractSDK/cw-orchestrator">https://github.com/AbstractSDK/cw-orchestrator</a></li><li>Get Started: <a href="https://orchestrator.abstract.money/setup/index.html">https://orchestrator.abstract.money/setup/index.html</a></li></ul><h4>Social</h4><ul><li>YouTube: <a href="https://youtube.com/@AbstractMoney">https://youtube.com/@AbstractMoney</a></li><li>Discord: <a href="http://discord.gg/uch3Tq3aym">https://discord.gg/uch3Tq3aym</a></li><li>Twitter: <a href="https://twitter.com/AbstractSDK">https://twitter.com/AbstractSDK</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=850f5275faa3" width="1" height="1" alt=""><hr><p><a href="https://medium.com/abstract-money/abstract-sdk-rollkit-hackathon-track-celestia-infinite-space-bazaar-850f5275faa3">Abstract SDK + Rollkit Hackathon Track | Celestia Infinite Space Bazaar</a> was originally published in <a href="https://medium.com/abstract-money">Abstract Money</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Getting Started with Abstract — How to create your own App Module]]></title>
            <link>https://medium.com/abstract-money/getting-started-with-abstract-how-to-create-your-own-app-module-5ddd644534f3?source=rss----22eece0a500c---4</link>
            <guid isPermaLink="false">https://medium.com/p/5ddd644534f3</guid>
            <category><![CDATA[cosmwasm]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[cosmos]]></category>
            <category><![CDATA[smart-contracts]]></category>
            <dc:creator><![CDATA[Abstract Contact]]></dc:creator>
            <pubDate>Fri, 22 Mar 2024 16:17:35 GMT</pubDate>
            <atom:updated>2023-03-29T14:42:21.994Z</atom:updated>
            <content:encoded><![CDATA[<h3>Getting Started with Abstract — How to create a Modular App (outdated)</h3><p><em>Note: this article is outdated and will be updated shortly.</em></p><p>This guide will walk you through the steps to create a CosmWasm smart-contract module using Abstract. You will be able to leverage other modules, interact with OSes, and deploy your contract all from one repository.</p><h3>Overview</h3><h3>Scaffold Generation</h3><p>Open a terminal window and run the following command to generate the <a href="https://github.com/Abstract-OS/app-template">scaffold app</a> on your machine:</p><blockquote><em>If you don’t yet have it installed you can install it with </em><em>cargo install cargo-generate</em></blockquote><pre>cargo generate gh:Abstract-OS/app-module-template \<br>               --branch template \<br>               --name &lt;module-name&gt;</pre><p>The above will clone the template repository into <em>&lt;module-name&gt;</em> which will be the name of your Abstract module.</p><blockquote><em>All message structs will be prefixed with this module name as well. Ex: </em><em>ModuleNameInstantiateMsg. This is to differentiate from the actual </em><em>InstantiateMsg (the true entry point) imported from </em><em>abstract_os.</em></blockquote><p>This name will also be the base name for most module-specific variables in the app. From here-on-out, the examples in this guide will be using “balancer”. This name will be the base name for most app-specific variables in the app as mentioned above.</p><h3>Project Structure</h3><p>Open the <em>module-name</em> folder, where you will find the following folders:</p><ul><li>contracts: your CosmWasm smart contracts</li><li>interfaces: Rust deployment interfaces for your smart contracts</li><li>scripts: scripts for deploying your module to Abstract Version Control and for writing tests</li></ul><p>Now that you have a fresh template, you are ready to start writing your module.</p><pre>cargo fmt # cleanup any template residuals<br>cargo build</pre><h3>Contract Structure</h3><blockquote><em>All the following files are referenced from </em><em>contracts/src directory. If you’ve ever written a CosmWasm smart contract before, this should be pretty standard aside from the </em>contract.rs<em> entry point.</em></blockquote><h4>msg.rs</h4><p>Message declarations for your module. Here you will find the entry-point msg declarations as well as their responses.</p><h4>error.rs</h4><p>Human-readable error declarations for the module.</p><h4>state.rs</h4><p>The actual state stored on-chain for your smart-contract. Item and Map are both from the <a href="https://github.com/CosmWasm/cw-storage-plus">cw-storage-plus</a> library, which provides powerful storage abstractions.</p><blockquote><em>Commonly-used state like the </em><em>Admin and </em><em>Contract Version are already provided natively by the Abstract-SDK and exposed to your handlers (details below 👀)</em></blockquote><h4>contract.rs</h4><p>This file serves as the overall entry point into your module. Abstract provides a wrapper around the <a href="https://docs.cosmwasm.com/docs/1.0/smart-contracts/entry-points/">CosmWasm entry points</a>, and exposes their configuration to you through the AppContract type. Your module-specific types for error, messages, and receive are then all encapsulated into a single new type: &lt;ModuleName&gt;App.</p><pre>pub type BalancerApp = AppContract&lt;<br>    BalancerError,<br>    BalancerExecuteMsg,<br>    BalancerInstantiateMsg,<br>    BalancerQueryMsg,<br>    BalancerMigrateMsg,<br>&gt;;</pre><p>Further down, we can see that our APP is an instance of this &lt;ModuleName&gt;App which declares each of the handlers for instantiate, query, execute, migrate, and replies.</p><pre>const APP: BalancerApp = BalApp::new(MODULE_NAME, MODULE_VERSION)<br>    .with_instantiate(handlers::instantiate_handler)<br>    .with_query(handlers::query_handler)<br>    .with_execute(handlers::execute_handler)<br>    .with_migrate(handlers::migrate_handler)<br>    .with_replies(&amp;[(EXAMPLE_REPLY_ID, handlers::example_reply_handler)])<br>    .with_dependencies(&amp;[EXCHANGE]);</pre><p>The dependencies specify which modules your users need to have installed in their OS to interact with the module. By default, the template declares the abstract:dex module as a dependency.</p><p>Finally, a Rust macro takes the type and const declaration of your app to export the actual CosmWasm entry points from your contract.</p><pre>export_endpoints!(APP, BalancerApp);</pre><h4>handlers</h4><p>All of the handlers for the messages sent to your contract (declared in msg.rs) are held within the handlers directory, and the appropriate messages can be handled via match statement.</p><p>Below is the ExecuteMsg handler for Equilibrium’s balancer module.</p><pre>pub fn execute_handler(<br>    deps: DepsMut,<br>    _env: Env,<br>    info: MessageInfo,<br>    balancer: BalancerApp,<br>    msg: BalancerExecuteMsg,<br>) -&gt; BalancerResult {<br>    match msg {<br>        BalancerExecuteMsg::Rebalance {} =&gt; rebalance(deps, info, balancer),<br>        BalancerExecuteMsg::UpdateAssetWeights { to_add, to_remove } =&gt; {<br>            update_asset_weights(deps, info, balancer, to_add, to_remove)<br>        }<br>        BalancerExecuteMsg::UpdateConfig { deviation, dex } =&gt; {<br>            update_config(deps, info, balancer, deviation, dex)<br>    }<br>}</pre><p>The &lt;ModuleName&gt;App acts as an adapter between your contract and the Abstract SDK, exposing Abstract Name System, other module functionality, asset value calculation, and much more. Read more in the <a href="https://docs.abstract.money">Abstract docs</a>.</p><h3>Deployment</h3><h3>Interfaces</h3><p>Within interfaces is a template.rs file that declares the deployment interface for your module. By default, the new function should be enough to deploy the contract but you can add additional functions to perform more advanced actions. See <a href="https://crates.io/crates/abstract-boot">abstract-boot</a> for more examples.</p><h3>Scripts</h3><p>To make your module available for other OSes to install on a local, Testnet, or Mainnet network, you can deploy your module directly from the template repo.</p><h4>1. Configure Deployment Env</h4><p>Rename the example env</p><pre># in the root<br>mv .env.example .env</pre><p>Configure the variables (this example uses uni-5 Juno testnet)</p><pre># human-readable name of the chain<br>CHAIN=&quot;juno&quot;<br># name of the deployment to be exported <br>DEPLOYMENT=&quot;v0.0.1&quot;<br># &quot;local&quot; | &quot;testnet&quot; | &quot;mainnet&quot;<br>NETWORK=&quot;testnet&quot; <br><br># Mnemonic of the account that will be used to deploy the contracts (admin)  <br>TEST_MNEMONIC=&quot;&quot;<br># Abstract version control address for app deployment  <br>VERSION_CONTROL_ADDRESS=junoxxx</pre><blockquote><em>The Abstract version control address can be found on </em><a href="https://beta.abstract.money/deployments"><em>https://beta.abstract.money/deployments</em></a><em> (check our discord for when it is available)</em></blockquote><h4>2. Configure the Deployment Network</h4><p>In src/bin/deploy_app.rs, configure the network to instantiate the daemon to be UNI_5 for Juno testnet or JUNO_1 for Juno mainnet. Other available networks are exported from boot_core (<a href="https://docs.rs/boot-core/latest/boot_core/networks/index.html">docs</a>).</p><pre>use boot_core::{instantiate_daemon_env, networks::juno::{JUNO_DAEMON, UNI_5, JUNO_1}};<br><br>pub fn deploy_app() -&gt; anyhow::Result&lt;()&gt; {<br>    let network = UNI_5;<br>    //...<br>}</pre><h4>3. Deploy to Version Control</h4><p>Run the following command:</p><pre>cargo deploy</pre><p>…and your module will be registered to Abstract Version Control. You can verify this by going to <a href="https://beta.abstract.money/ans">https://beta.abstract.money/</a>ans (soon) and checking the registered modules.</p><h3>Need help?</h3><p>Connect with us on <a href="https://discord.gg/uch3Tq3aym">Discord</a>! We’d be happy to help you with any questions, feedback, or suggestions.</p><h3>References</h3><ul><li><a href="https://docs.cosmwasm.com/docs/1.0/">Introduction | CosmWasm Documentation</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5ddd644534f3" width="1" height="1" alt=""><hr><p><a href="https://medium.com/abstract-money/getting-started-with-abstract-how-to-create-your-own-app-module-5ddd644534f3">Getting Started with Abstract — How to create your own App Module</a> was originally published in <a href="https://medium.com/abstract-money">Abstract Money</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Deploying and scripting your smart contract using BOOT]]></title>
            <link>https://medium.com/abstract-money/deploying-and-scripting-your-smart-contract-using-boot-5d4ffd05c860?source=rss----22eece0a500c---4</link>
            <guid isPermaLink="false">https://medium.com/p/5d4ffd05c860</guid>
            <category><![CDATA[cosmos]]></category>
            <category><![CDATA[cosmwasm]]></category>
            <category><![CDATA[smart-contracts]]></category>
            <category><![CDATA[rust]]></category>
            <dc:creator><![CDATA[Abstract Contact]]></dc:creator>
            <pubDate>Fri, 22 Mar 2024 16:17:25 GMT</pubDate>
            <atom:updated>2022-12-08T18:07:37.552Z</atom:updated>
            <content:encoded><![CDATA[<p>Once you have written your CosmWasm smart contract, you are probably ready to start writing integration tests or deploy it to a live network. Doing this through frontend interfaces such as <a href="https://cosmwasm.tools/">CosmWasm Tools</a> can work, but is certainly not a good long term solution. Executing this through the CLI is an even more time-consuming and menial process.</p><p><a href="https://github.com/Abstract-OS/BOOT">BOOT</a> (by Abstract) simplifies all of this by providing a type-safe library and a standard way of deploying and interacting with your CosmWasm smart contracts.</p><h3>Getting Started</h3><p>The following sections detail setting up a library for interfaces and a separate package for the scriptsso that publishing the contract interfaces is easy.</p><h4>Contract Interface Library</h4><p>To get started with BOOT, create a new folder anywhere (though we often do it alongside our contracts in the same repository) called interfaces by running:</p><pre>cargo init --lib interfaces</pre><p>Following this example, the file structure will now look like:</p><pre>.<br>├── Cargo.toml<br>├── contracts<br>│   ├── Cargo.toml<br>│   └── src<br>│       ├── contract.rs<br>│       └── ...<br>└── interfaces<br>    ├── Cargo.toml<br>    └── src<br>        └── lib.rs</pre><blockquote><em>If your cargo project is a workspace, be sure to add </em><em>interfaces to the [workspace].members array at the workspace root.</em></blockquote><p>Install <a href="https://crates.io/crates/boot-core">boot-core</a></p><pre>cd interfaces<br>cargo add boot-core<br>cargo add --path ../contracts</pre><p>Then add any other dependencies, which should look similar to the following:</p><pre>[dependencies]<br>boot-core = &quot;0.1.3&quot; # latest version as of writing this article<br>my-contract = { path = &quot;../contracts&quot; }<br># common<br>cosmwasm-std = &quot;1.1&quot;<br>serde = { version = &quot;1.0.103&quot;, default-features = false, features = [&quot;derive&quot;] }</pre><h4>Defining Contract Interfaces</h4><p>The contract interface is what your scripts will be interacting with to deploy and manage the deployed instance of your contract. It provides accessible methods for interfacing with the contract entry points and can maintain state between script runs based on the deployment configuration.</p><p>First, create a new file in the src directory of the interfaces package, and add it to the library declaration file:</p><pre>touch src/my-contract.rs<br>echo &#39;pub mod my_contract;&#39; &gt;&gt; src/lib.rs</pre><p>In your new contract file, define a struct for your contract interface and provide the [Instantiate|Execute|Query|Migrate]Msgs to the boot_contractmacro, which will generate fully-typed instantiate, execute, query, and migrate methods.</p><pre>use boot_core::prelude::boot_contract;<br>use my_contract::{InstantiateMsg, ExecuteMsg, QueryMsg, MigrateMsg};<br><br>#[boot_contract(InstantiateMsg, ExecuteMsg, QueryMsg, MigrateMsg)]<br>pub struct MyContract&lt;Chain&gt;;</pre><blockquote><em>The generic “&lt;Chain&gt;” argument is to help the rust-analyzer with type analysis because sometimes the macro-expansion engine does not fully understand generically typed macros.</em></blockquote><blockquote><em>If your entry point Msgs have any generic arguments, pull them out into newtypes before passing into the macro.</em></blockquote><p>Next, you’ll want to define the constructor for the struct defined above. In the following example:</p><pre>use boot_core::prelude::{BootEnvironment, Contract};<br><br>// ...<br><br>impl&lt;Chain: BootEnvironment&gt; MyContract&lt;Chain&gt; {<br>    /// Construct a new instance of MyContract<br>    /// * `contract_id` - what your contract should be called in local state (*not* on-chain)<br>    /// * `chain` - the chain to deploy to<br>    pub fn new(contract_id: &amp;str, chain: &amp;Chain) -&gt; Self {<br>        let crate_path = env!(&quot;CARGO_MANIFEST_DIR&quot;);<br>        // This can be the absolute path of the file like it is below<br>        // or it can simply be the name of the contract file like &quot;my-contract&quot;,<br>        // and the path of that file set via WASM_DIR env variable<br>        let wasm_path = &quot;../../target/wasm32-unknown-unknown/release/my-contract.wasm&quot;;<br>        Self(<br>            Contract::new(contract_id, chain)<br>                .with_wasm_path(wasm_path),<br>        )<br>    }<br>}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KSisG10eVEzCieQ6MsiKxQ.png" /></figure><p>Notice that we build the Contract instance with_wasm_path, where we provide the contract name. This contract name will be used to search the artifacts directory (set by ARTIFACTS_DIR env variable) for the .wasm file of your contract. Alternatively you can specify a path to the released wasm after running RUSTFLAGS=’-C link-arg=-s’ cargo wasm . See the <a href="https://docs.cosmwasm.com/docs/1.0/getting-started/compile-contract/">CosmWasm documentation on compiling your contract</a> for more information.</p><h3>Script</h3><p>Now that we have the interface written for our contract, we can start writing scripts to deploy and interact with it.</p><h3>Setup</h3><p>Like before, we’re going to setup a new folder for our scripts. This time, we’ll call it scripts and initialize it as a binary crate:</p><pre>cargo init --bin scripts</pre><blockquote><em>If your cargo project is a workspace, be sure to add </em><em>scripts to the [workspace].members array at the workspace root.</em></blockquote><p>Your scripts will have basically the same dependencies as your contract interfaces, but with a few additions:</p><pre>cargo add --path ../interfaces</pre><p>and also add the anyhow and dotenv crates:</p><pre>cargo add anyhow dotenv log</pre><h3>Env Configuration</h3><p>The dotenv crate will allow us to load environment variables from a .env file. This is useful for setting up the chain configuration for your scripts.</p><pre># .env<br># info, debug, trace<br>RUST_LOG=info<br><br># where the contract wasms are located<br>ARTIFACTS_DIR=&quot;../artifacts&quot;<br><br># where to store the output state data<br>DAEMON_STATE_PATH=&quot;./daemon_state.json&quot;<br><br># Mnemonics of the account that will be used to sign transactions<br>LOCAL_MNEMONIC=&quot;&quot;<br>TEST_MNEMONIC=&quot;&quot;<br>MAIN_MNEMONIC=&quot;&quot;</pre><p>IMPORTANT: Make sure to exclude the .env file in your gitignore.</p><h3>Main Function</h3><p>Now that we have our dependencies setup, we can start writing our script. Either create a new file in the src directory of the scripts/src package, or use the main.rs file that was created by default.</p><p>This function is mostly just boilerplate, so you can copy and paste it into your new script file. It will just call your function and give you nicer error traces:</p><pre>fn main() {<br>    dotenv().ok();<br>    env_logger::init();<br><br>    use dotenv::dotenv;<br>    if let Err(ref err) = deploy_contract() {<br>        log::error!(&quot;{}&quot;, err);<br>        err.chain()<br>            .skip(1)<br>            .for_each(|cause| log::error!(&quot;because: {}&quot;, cause));<br>::std::process::exit(1);<br>    }<br>}</pre><h3>Deployment Function</h3><p>First, we’ll define a function that will deploy our contract to the chain. This function will setup the environment (connecting to the chain), deploy the contract, and return a Result with the contract address.</p><pre>// scripts/src/my_contract.rs<br>use anyhow::Result;<br>use boot_core::networks;<br>use boot_core::prelude::{instantiate_daemon_env, NetworkInfo};<br>// Traits for contract deployment<br>use boot_core::interface::*;<br>use interfaces::my_contract::MyContract;<br><br>// Select the chain to deploy to<br>const NETWORK: NetworkInfo = networks::juno::UNI_5;<br>const CONTRACT_NAME: &amp;str = &quot;my-contract&quot;;<br><br>pub fn deploy_contract() -&gt; anyhow::Result&lt;String&gt; {<br>    // Setup the environment<br>    let (_, _sender, chain) = instantiate_daemon_env(network)?;<br><br>    // Create a new instance of your contract interface<br>    let contract = MyContract::new(CONTRACT_NAME, &amp;chain);<br>    // Upload your contract<br>    contract.upload()?;<br><br>    // Instantiate your contract<br>    let init_msg = InstantiateMsg {<br>        // ...<br>    };<br>    // The second argument is the admin, the third is any coins to send with the init message<br>    contract.instantiate(init_msg, None, None)?;<br><br>    // Load and return the contract address<br>    let contract_addr = contract.address()?;<br>    Ok(contract_addr)<br>}</pre><h3>Additional Scripts</h3><p>So you have your contract deployed, but what now? You can write additional scripts to interact with your contract. For example, you can write a script to query the contract state, or to execute a contract method.</p><p>Here’s an example of a script that queries the contract state:</p><pre>// scripts/src/my_contract.rs<br>// use ...<br>use my_contract::{QueryMsg};<br>// ...<br><br>pub fn query_contract() -&gt; Result&lt;()&gt; {<br>    // Setup the environment<br>    let (_, _sender, chain) = instantiate_daemon_env(NETWORK)?;<br><br>    let contract = MyContract::new(CONTRACT_NAME, &amp;chain);<br>    // Load the contract address (this will use the address set from the previous deploy script)<br>    let contract_addr = contract.address();<br>    // Query the contract<br>    let res = contract.query(QueryMsg::Balance {<br>      address: contract_addr,<br>    })?;<br>    // Print the result<br>    println!(&quot;{:?}&quot;, res);<br>    Ok(())<br>}</pre><p>And one that executes a contract method:</p><pre>// scripts/src/my_contract.rs<br>// use ...<br>use my_contract::{ExecuteMsg};<br>// ...<br><br>pub fn execute_contract() -&gt; Result&lt;()&gt; {<br>    // Setup the environment<br>    let (_, _sender, chain) = instantiate_daemon_env(NETWORK)?;<br><br>    <br>    let contract = MyContract::new(CONTRACT_NAME, &amp;chain);<br>    let contract_addr = contract.address();<br><br>    // Execute a contract method<br>    let res = contract.execute(ExecuteMsg::UpdateBalance {<br>      address: contract_addr,<br>      balance: Uint128::from(1000000u128),<br>    })?;<br>    // Print the result<br>    println!(&quot;{:?}&quot;, res);<br>    Ok(())<br>}</pre><h4>Refinement</h4><p>You can also refine your contract interface to make it easier to use. For example, you can create a function that will execute a specific contract method and return the result, instead of having to call contract.execute and contract.query separately.</p><pre>// interfaces/src/my_contract.rs<br>// Import the boot traits<br>use boot_core::interface::*;<br>// ...<br><br><br>impl&lt;Chain: BootEnvironment&gt; MyContract&lt;Chain&gt; {<br>    pub fn new(contract_id: &amp;str, chain: &amp;Chain) -&gt; Self {<br>      // ...<br>    }<br>    <br>    /// Query the balance of an address<br>    /// `address` - the address to query<br>    pub fn balance(&amp;self, address: Addr) -&gt; Result&lt;BalanceResponse&gt; {<br>        let balance_query = QueryMsg::Balance { address };<br>        self.query(balance_query)<br>    }<br>    <br>    /// Update the balance of an address<br>    /// `address` - the address to update<br>    /// `balance` - the new balance<br>    pub fn update_balance(&amp;self, address: Addr, balance: Uint128) -&gt; Result&lt;ExecuteResult&gt; {<br>        let update_balance_msg = ExecuteMsg::UpdateBalance {<br>            address,<br>            balance,<br>        };<br>        self.execute(update_balance_msg)<br>    }<br>}</pre><h3>References</h3><ul><li><a href="https://crates.io/crates/boot-core">Boot Core</a></li><li><a href="https://crates.io/crates/boot-cw-plus">Boot Cw-plus</a></li><li><a href="https://crates.io/crates/abstract-boot">Abstract Contract Interfaces</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5d4ffd05c860" width="1" height="1" alt=""><hr><p><a href="https://medium.com/abstract-money/deploying-and-scripting-your-smart-contract-using-boot-5d4ffd05c860">Deploying and scripting your smart contract using BOOT</a> was originally published in <a href="https://medium.com/abstract-money">Abstract Money</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A High-Level Overview of Abstract Money, Interchain App Platform]]></title>
            <link>https://medium.com/abstract-money/a-high-level-overview-of-abstract-moneys-interchain-app-platform-d30813c7a1b4?source=rss----22eece0a500c---4</link>
            <guid isPermaLink="false">https://medium.com/p/d30813c7a1b4</guid>
            <category><![CDATA[cosmwasm]]></category>
            <category><![CDATA[cosmos]]></category>
            <category><![CDATA[ibc]]></category>
            <category><![CDATA[chain-abstraction]]></category>
            <category><![CDATA[smart-contracts]]></category>
            <dc:creator><![CDATA[Abstract Contact]]></dc:creator>
            <pubDate>Fri, 22 Mar 2024 16:17:16 GMT</pubDate>
            <atom:updated>2024-08-26T19:20:46.402Z</atom:updated>
            <content:encoded><![CDATA[<blockquote><em>TL;DR: Abstract Money is a vertically-integrated application platform focused on unifying multi-chain development and interaction.</em></blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FyYTB9kVcy6Y%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DyYTB9kVcy6Y&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FyYTB9kVcy6Y%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/e6e846fc3a1e5f37d4926199844bf23e/href">https://medium.com/media/e6e846fc3a1e5f37d4926199844bf23e/href</a></iframe><p>Abstract’s goal is to enable developers to <strong>build more powerful interchain dApps</strong> through collaboration, convention, and modularity. We provide a <strong>full-stack CosmWasm development experience</strong>, including smart-contract, middleware, and frontend tooling. The Abstract SDK <strong>streamlines the development of interchain applications</strong> with a powerful and easy-to-use <strong>modular application framework</strong> whose capabilities are fully realized via account-abstraction and our on-chain application infrastructure.</p><blockquote><em>To learn more about our framework and our full developer vision, please check out our </em><a href="https://docs.abstract.money"><em>official documentation</em></a><em>.</em></blockquote><h3>Introduction</h3><p>The Cosmos SDK changes the game for blockchain-based applications. It allows for scalable development and deployment of application-specific chains by providing a well-defined framework emphasizing modularity. The “appchains” coincide with the <strong>fat application thesis</strong>, which states that the value lies in the applications themselves rather than in a shared, fat protocol like Ethereum or Solana. IBC enables interoperability between these appchains, and CosmWasm allows for the programmability of cross-chain interactions through a secure and efficient smart-contract environment. “inter-chain”</p><h3>The Problem</h3><p>It is <strong>difficult and slow to build CosmWasm applications</strong>. Teams <strong>start from scratch</strong>, and <strong>waste valuable time integrating primitives</strong> such as DEXes, money markets, oracles, and other DeFi building blocks. The fat app thesis encourages teams to drive value to their applications, consequently creating an environment of <strong>siloed development</strong>. This lack of inter-team collaboration <strong>hinders innovation and experimentation</strong>, and is partially why the CosmWasm ecosystem is relatively immature compared to the Ethereum and Solana ecosystems.</p><p>Secondly, while CosmWasm application updates (“migrations”) don’t require a replacement binary like chain upgrades, <strong>updates remain highly manual and dangerous</strong>, especially when multiple contracts are involved. This leaves user funds and team reputations at risk.</p><p>Finally, developing a cross-chain application <strong>requires deep prerequisite knowledge of IBC</strong>, proper handling of callbacks, error cases, and knowledge of interchain smart-contract security. Even for an experienced IBC developer, cross-chain interactions require new IBC ports, as well as channel and asset identification on both sides.</p><h3>The Solution</h3><p>We bring the modularity and scalability of the Cosmos SDK to CosmWasm applications with the Abstract SDK, our interchain application framework. The Abstract SDK is designed for organizations and individual developers to build composable, distributed applications in a <strong>fast, secure, and cost-effective manner</strong>. We place an emphasis on <strong>standardization and composability</strong>, congruent with well-studied smart-contract design patterns such as <a href="https://eips.ethereum.org/EIPS/eip-2535">Ethereum’s Diamond Proxy Pattern (EIP-2535)</a> and Web2 microservices and customized to the extensive capabilities of CosmWasm.</p><p>The foundation for every Abstract application is an <strong>Abstract Account, a smart-contract wallet</strong>. Modules, the smart-contracts built using the SDK, isolate shared logic and <em>extend</em> the functionality of the Account. This transforms it into an application. Module version management is performed via a permissioned on-chain module registry, allowing for <strong>dynamic application upgrades</strong> with protections against incorrect migrations. <strong>Inter-team collaboration is incentivized</strong> because modules can be monetized, providing sustainable income for developers and rewarding continued maintenance. Complex logic can be imported rather than rewritten.</p><p>The Abstract SDK provides easily-understandable <strong>abstractions for local and cross-chain interactions over IBC</strong>. Via an <strong>on-chain name service</strong>, assets, chains, and other resources can be referenced by name, rather than their complex identifiers. Abstract Accounts (and applications) can create and execute upon multi-hop interchain outposts developed specifically for chain-abstracted protocols and wallets.</p><h3>Why?</h3><blockquote><em>Read about Abstract’s origins </em><a href="https://paragraph.xyz/@adair/abstract-money-origins"><em>here</em></a><em>.</em></blockquote><p>Our goal is to help realize the ideal of full user sovereignty in ushering in the next generation of interoperable applications. The interchain becomes ubiquitous not only via technical superiority, but via a thriving developer ↔ user economy, the most important multi-sided market in Web3.</p><p>Our team consists of 7 highly experienced Web3 software engineers, and both our founders are technical. Abstract’s tooling has been in development for over 2 years.</p><p>Abstract’s framework and on-chain infrastructure is <a href="https://github.com/AbstractSDK/abstract">open-source</a>, chain-agnostic to any CosmWasm-enabled chain, and allows control of and interoperability with any chain connected to IBC.</p><h3>Abstract’s Interchain CosmWasm Tooling</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F8hxx7LN5H2g%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D8hxx7LN5H2g&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F8hxx7LN5H2g%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/6d04a108c51303a30b809501fda428b7/href">https://medium.com/media/6d04a108c51303a30b809501fda428b7/href</a></iframe><p>Below we’ll go over the different components of the Abstract stack, servicing interchain developers.</p><h3>Features TL;DR:</h3><p><strong>Production-Ready</strong></p><ul><li>Abstract Account: <em>Multi-chain smart-contract wallet</em></li><li>Version Control: <em>On-chain module registry with version management</em></li><li>Name Service: <em>On-chain name service for assets, contracts, addresses, chains (channels), and DEX pairs</em></li><li>Abstract SDK: <em>Modular CosmWasm application framework</em></li><li>Console: <em>Developer interface for managing Accounts, applications, and modules</em></li><li>API: <em>GraphQL API for quick contract queries and indexed information</em></li><li>Interchain Abstract Accounts: <em>Cross-chain smart-contract accounts</em></li></ul><p><strong>Pre-Release</strong></p><ul><li>Abstract.js: <em>Typescript SDK for use alongside the Abstract SDK</em></li><li>EVM Interchain Accounts: <em>Control and interact with any EVM chain</em></li></ul><h3>Abstract Accounts</h3><blockquote><em>Read more about Abstract Accounts </em><a href="https://docs.abstract.money/3_framework/3_architecture.html"><em>here</em></a><em>.</em></blockquote><p>Abstract’s application architecture is centered around our smart-contract wallet, coined an Abstract Account. This serves as a secure vault for asset management and provides a base upon which modules can be installed, creating an application. Applications can be installed <em>upon Accounts</em> via sub-accounts. The Account is also responsible for cross-chain communications, handling creation of and communication with interchain Accounts.</p><p>This enables Account owners to “self-host” their applications on fully sovereign smart-contracts. This follows the natural evolution of decentralized finance (DeFi) to a new era of personalized, sovereign finance, which we’re coining MyFi.</p><h3>Modules</h3><blockquote><em>Read more about Abstract modules </em><a href="https://docs.abstract.money/3_framework/5_modules.html"><em>here</em></a><em>.</em></blockquote><p>A <em>module</em> in Abstract is a smart-contract that can be installed on an Abstract Account to extend its capabilities. Modules can be installed, removed, and configured by the Account’s owner, allowing for a high degree of customization. Additionally, modules can take on dependencies on other modules and securely interact with each other.</p><p><strong>App modules</strong> are instantiated and owned by one Account.</p><ul><li>Ex: ETF module allows the owner to manage the Account as an ETF. The module handles value calculation for deposits and withdrawals, and the owner manages the allocation.</li></ul><p><strong>Adapter modules</strong> serve as standard interfaces that facilitate communication between Accounts and various external services. They adapt a service to an interface.</p><ul><li>DEX Adapter: Provides a standard interface for performing actions on DEXes.</li><li>CW-Staking Adapter Provides a standard interface for interacting with LP positions across Cosmos.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*g5k7GisHQWPXSGgV.png" /><figcaption><em>An example message sent to the Dex adapter. Notice the “dex” field and asset names, which are described further below in Abstract Name Service.</em></figcaption></figure><p><strong>Integrations</strong></p><p>Developers using the Abstract SDK can interact with the following services via standardized interface through Abstract’s adapter modules within minutes:</p><ul><li><a href="https://osmosis.zone/">Osmosis</a></li><li><a href="https://kujira.network/">Kujira</a></li><li><a href="https://astroport.fi/">Astroport</a></li><li><a href="https://dex.wynddao.com/">Wyndex</a></li><li><a href="https://astrovault.io/">Astrovault</a></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*oMH4lXqd1g0B945c.png" /><figcaption><em>Two Abstract Accounts each have sovereign ETF modules, which can call the shared DEX adapter module, calling to dexes across IBC.</em></figcaption></figure><h3>Module Registry (On-Chain)</h3><blockquote><em>See the </em><a href="https://console.abstract.money/modules"><em>live module registry</em></a><em> or read more on the </em><a href="https://docs.abstract.money/5_platform/2_version_control.html?highlight=version%20cont#version-control"><em>Version Control docs</em></a><em>.</em></blockquote><p>On-chain registry of versioned contracts to their code ids and metadata. Allows developers to register and monetize their modules.</p><ul><li>abstract:dex:0.20.0 =&gt; juno...xxx</li><li>abstract:etf:0.3.0 =&gt; 205</li></ul><p>This “package registry” is one of the most important components in enabling truly composable apps. All Abstract Apps can pull updates from the modules registry, allowing applications to be dynamically updated with the Account owner retaining full sovereignty.</p><h3>Abstract Name Service (On-chain)</h3><blockquote><em>See the </em><a href="https://console.abstract.money/ans"><em>live name service</em></a><em> or read more on the </em><a href="https://docs.abstract.money/5_platform/1_ans.html"><em>ANS docs</em></a><em>.</em></blockquote><p>The ANS is a smart contract that stores the following data:</p><p><strong>Assets</strong>: The most relevant assets on the local blockchain.</p><ul><li>osmosis&gt;osmo on Osmosis =&gt; uosmo</li><li>osmosis&gt;osmo on Juno =&gt; ibc/...XYZ</li><li>juno&gt;dao on Juno =&gt; juno...xxx</li><li>juno&gt;dao on Osmosis =&gt; ibc/...YZA</li><li>berachain&gt;bera on Berachain =&gt; 0xAul...E3a</li><li>berachain&gt;bera on Union =&gt; factory/union...nkz</li></ul><p><strong>Contracts</strong>: Contracts related to certain protocols or applications that could be dynamically resolved. This could be used to store the address for an asset-pair for a dex.</p><ul><li>croncat/factory on Osmosis =&gt; osmo...xxx</li><li>berachain&gt;bex/crocsw on Osmosis =&gt; 0x9...osu</li></ul><p><strong>Channels</strong>: IBC channel data to map a protocol + destination chain to a channel id. This allows for dynamic IBC transfers without having to know the channel id beforehand.</p><ul><li>osmosis on Neutron =&gt; channel-5</li></ul><p><strong>Pools: </strong>Essential liquidity pools for DeFi protocols, mapping ANS-ID to pool-id or contract.</p><ul><li>astroport/neutron&gt;ntrn,osmosis&gt;osmo on Neutron =&gt; neutron...ua5</li><li>berachain&gt;bex/berachain&gt;bera,union&gt;uno on Union =&gt; 0xYo...b7a</li></ul><h3>Abstract SDK (Framework)</h3><blockquote><em>Read more about the SDK via its </em><a href="https://docs.abstract.money/4_get_started/1_index.html"><em>technical documentation</em></a><em> and </em><a href="https://docs.abstract.money/4_get_started/2_installation.html"><em>get started by building an app</em></a><em>!</em></blockquote><p>The Abstract SDK itself is the Rust-based CosmWasm framework with which developers write and test application modules. Applications using the SDK work seamlessly with the on-chain infrastructure. It provides common abstractions via traits for maximum ease-of-use and modularity.</p><p>All Abstract modules are easily testable using <a href="https://orchestrator.abstract.money/">cw-orchestrator</a> with out-of-the-box abstractions for Abstract Accounts and all other on-chain infrastructure.</p><p><strong>IBC Capabilities</strong></p><p>Abstract Accounts can create single- and multi-hop outposts on IBC-enabled chains, enabling cross-chain applications. Our on-chain IBC abstractions ensure that all actions are authenticated and relayed to the proper destinations, and allow for single-chain management of complex multi-chain infrastructure.</p><p><strong>Typescript + React Developer SDK (Pre-Release)</strong></p><p><a href="https://github.com/AbstractSDK/abstract.js">Abstract.JS</a> provides comprehensive means for interacting with applications built using the Abstract SDK. It is also provider-agnostic, meaning that developers can use either Graz or Cosmos Kit in their frontend development. The design patterns used by Abstract.js are largely based on high-quality Ethereum packages such as <a href="https://github.com/wevm/wagmi">wagmi</a> and <a href="https://github.com/wevm/viem">viem</a>. It additionally provides code-generation plugins for <a href="https://github.com/CosmWasm/ts-codegen">ts-codegen</a> for readable clients.</p><p><strong>EVM IBC (Pre-release)</strong></p><p>We enable control and interaction with EVM-based chains with our proprietary implementation for interchain accounts on EVM via <a href="https://union.build">Union</a>, one of our core partners. This gives the EVM ecosystem unfettered access to the Interchain and visa-versa, enabling the development of advanced cross-chain liqudity orchestration, application protocols, and even cross-chain SAFEs.</p><h3>Application Console</h3><blockquote><em>Feel free to check out the </em><a href="https://console.abstract.money/"><em>mainnet</em></a><em> and </em><a href="https://testnet.abstract.money/"><em>testnet</em></a><em> Consoles, both of which are currently live.</em></blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FfQ9hCNP_69g&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DfQ9hCNP_69g&amp;image=http%3A%2F%2Fi.ytimg.com%2Fvi%2FfQ9hCNP_69g%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/7cc53bfa5e702cd71a846797280a7a83/href">https://medium.com/media/7cc53bfa5e702cd71a846797280a7a83/href</a></iframe><p>The developer console allows teams to manage their applications built using Abstract. It provides GUIs for all on-chain infrastructure and Abstract Accounts. It also serves as the marketplace upon which devs can list and monetize their modules as described earlier.</p><h3>Abstract API</h3><blockquote><em>Query the API </em><a href="https://api.abstract.money"><em>here</em></a><em>.</em></blockquote><p>A chain-agnostic GraphQL API for accessing all of Abstract from anywhere. Supports custom configurations for any CosmWasm network with Abstract.</p><h3>Case Studies</h3><h3>XION</h3><blockquote><em>Mint an NFT on Neutron directly from XION </em><a href="https://xion.abstract.money/"><em>here</em></a><em>! This demonstration walks you through each step of the process, though all actions can be fully abstracted away in practice.</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-nsoDWIoRmvqZ38Ms9Z5kg.jpeg" /></figure><p><a href="https://xion.burnt.com/">XION</a> is consumer-oriented chain focused on eliminating the complexities of Web3 interaction through “generalized abstraction,” offering users the ability to interact with apps and liquidity on any chain.</p><p>XION uses Abstract’s <a href="https://docs.abstract.money/3_framework/8_ibc.html">ICAAs</a> to enable chain abstraction and for full control and programmability of any chain over IBC. We’ve had over 160K Abstract Accounts and over 400K transactions executed using Abstract’s infrastructure in just a few weeks of release.</p><h3>FortyTwo Finance</h3><p><a href="https://fortytwo.money">FortyTwo</a> is the interchain’s DeFi yield aggregator. It offers a single interface where users can manage their yield positions and understand their portfolios spread across any IBC-enabled chain.</p><p>One of FortyTwo’s primary products is a dex-agnostic autocompounder, which achieves maximum yield on pools across IBC. This leverages Abstract’s DEX and Staking adapters and scales to any pair on any dex on any chain.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*oWW7X4RbcUXL3Qp1.png" /><figcaption>Architecture of FortyTwo Money’s autocompounder, a chain-agnostic, dex-agnostic, pair-agnostic yield maximizer built on Abstract.</figcaption></figure><p>Abstract makes developing single- and multi-chain applications easy. Developers should be able to focus on their business logic, and not the bulls**t. Users should be able to focus on the application, and not care the tech. Both of these ideals are realized through Abstract’s comprehensive interchain platform, all-the-while abstracting away the complexities of multi-chain development and interaction.</p><h3>Additional Resources</h3><p><strong>Abstract Money Chain Abstraction</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F5biJAkm3FoA%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D5biJAkm3FoA&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F5biJAkm3FoA%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/66dc26b4197663cfd35517cf25c786ed/href">https://medium.com/media/66dc26b4197663cfd35517cf25c786ed/href</a></iframe><h3>Acknowledgementns</h3><p>We wish to give thanks to the open-source community and the many teams that we’ve worked with in improving the Abstract SDK to make the development experience as amazing as possible, including (but not limited to):</p><ul><li><a href="https://confio.gmbh/">Confio</a></li><li><a href="https://fortytwo.money">FortyTwo</a></li><li><a href="https://yieldmos.com">Yieldmos</a></li><li><a href="https://daodao.zone">DaoDao</a></li><li><a href="https://cosmology.tech">Cosmology</a></li><li><a href="https://xion.burnt.com">Xion</a></li></ul><p><a href="https://github.com/AbstractSDK/abstract/blob/main/framework/CHANGELOG.md">Abstract Changelog</a></p><p><a href="https://discord.com/invite/uch3Tq3aym">Get in touch!</a></p><p><a href="https://twitter.com/AbstractSDK">Follow Us on Twitter</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d30813c7a1b4" width="1" height="1" alt=""><hr><p><a href="https://medium.com/abstract-money/a-high-level-overview-of-abstract-moneys-interchain-app-platform-d30813c7a1b4">A High-Level Overview of Abstract Money, Interchain App Platform</a> was originally published in <a href="https://medium.com/abstract-money">Abstract Money</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Abstract for CTOs]]></title>
            <link>https://medium.com/abstract-money/abstract-for-ctos-c9b30665e83c?source=rss----22eece0a500c---4</link>
            <guid isPermaLink="false">https://medium.com/p/c9b30665e83c</guid>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[interchain]]></category>
            <category><![CDATA[blockchain-startup]]></category>
            <category><![CDATA[smart-contracts]]></category>
            <category><![CDATA[developer-tools]]></category>
            <dc:creator><![CDATA[CyberHoward]]></dc:creator>
            <pubDate>Wed, 29 Nov 2023 10:31:11 GMT</pubDate>
            <atom:updated>2023-12-18T09:36:42.244Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong><em>Why building on Abstract sets you up for success in the Interchain.</em></strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mdEgZeKK-Y4gQ2KNoe-X3w.png" /></figure><p>Abstract builds tooling to streamline the on and off-chain CosmWasm developer experience in building Interchain applications. We offer a scalable full-stack framework emphasizing modularity, enabling better maintainability and seamless composability between teams, applications, and blockchains.</p><h3>Why is Abstract not built on the Ethereum Virtual Machine (EVM)?</h3><p>The introduction of Solidity and the EVM have undoubtedly transformed the world. The concept of a decentralized, Turing complete global computer enabled developers and degens alike to create unique applications ranging from decentralized finance (DeFi) to art collections valued at multiple millions of dollars.</p><p>Ethereum did a great job at drawing in developers and attention to a technology that has the potential to be extremely transformative to our society at broad. Nonetheless it has shown time and time again that the EVM struggles to uphold the technical values that are so important for the types of applications that need to be built out with this technology.</p><p>At its essence CosmWasm aims to be a response to those inadequacies.</p><h3>Reentrancy</h3><p>The EVM is notorious for its broad attack surface related to reentrancy. Attacks that exploit this vulnerability occur so often that a <a href="https://github.com/pcaversaccio/reentrancy-attacks">lists</a> exists that keeps track of them. The fact that reentrancy is a well-known attack vector, yet is still exploited on a regular basis shows that there is an inherent flaw in the technology (EVM).</p><p>CosmWasm follows <a href="https://en.wikipedia.org/wiki/Actor_model">the actor model</a> which, as a model for computation, doesn’t allow for any form of reentrancy. This ensures that individual contracts can securely manage their internal state without the risk of in-process interference by an attacker.</p><blockquote>🔒 There has <a href="https://blocksecteam.medium.com/how-the-mirror-protocol-is-exploited-33b5c1d48322">only been one known exploit</a> of a CosmWasm contract while CosmWasm was the main technology behind <a href="https://www.terra.money/">Terra’s</a> meteoric rise in 2021. A prime example is <a href="https://astroport.fi/">Astroport</a>, which reached a peak Total Value Locked (TVL) of <a href="https://defillama.com/protocol/astroport-classic?tvl=true&amp;mcap=false&amp;volume=false&amp;groupBy=daily"><strong>1.8 Billion</strong> US Dollars</a>.</blockquote><h3>Migration</h3><p>Smart-contract migrations are a necessity when responding to bug-reports and expanding a product’s feature set. Sadly, migrations are not a first-class feature in the EVM. Different libraries are used to allow developers to migrate their contracts in a way that’s often complex and error prone.</p><p>Learning from that experience CosmWasm supports migrations natively by allowing developers to change out the binary executable that defines the contract’s logic with another binary while retaining the contract’s address and state. In this way developers can easily apply patches and roll out upgrades.</p><h3>WASM and The Rust Language</h3><p>Where CosmWasm really shines is in it’s inherent composability as a result of it using <a href="https://webassembly.org/">WebAssembly (WASM)</a>.</p><p>WebAssembly is a platform-agnostic bytecode instruction set. At a glance, it allows developers to write code in any language while being as platform agnostic as Java but 1000x faster. As a result it can be used in browsers, mobile devices, embedded systems, micro-services and, if its execution is made to be deterministic, as a computation platform for smart-contracts.</p><p>As WASM is still undergoing heavy development, only a few languages really support it in a reliable and usable way. The current favorite is <a href="https://www.rust-lang.org/">Rust</a>, and for all the right reasons.</p><p><a href="https://www.rust-lang.org/">The Rust Language</a> is an expressive, fast and safe language that allows contracts to be small and cheap to execute. As a result of it being a full-blown programming language, developers who create CosmWasm contracts can put all the available (and rapidly developing) libraries to their use.</p><p>As a language Rust can be hard to learn but very rewarding to work with. Rust has been the most loved language for the <strong>7th</strong> year in a <a href="https://survey.stackoverflow.co/2022#technology-most-loved-dreaded-and-wanted">yearly survey on StackOverflow</a>. Not to mention its recent adoption in the Linux kernel, Microsoft Windows and <a href="https://rustmagazine.org/issue-1/2022-review-the-adoption-of-rust-in-business/">others</a>.</p><h3>The Problem with Building from Scratch</h3><p>While CosmWasm was able to address a lot of the problems that plagued Solidity, it did so with its own shortcomings. Abstract is the only application framework that properly addresses these issues and in doing so allows developers to experiment and innovate at a pace that just hasn’t been possible before.</p><h3>Tooling and Infrastructure</h3><p>Creating a new smart-contract framework from scratch requires rebuilding all the tooling that other framework’s developers have grown so accustomed to. Over the years we’ve seen developers create their own bandaid solutions with regard to contract testability, deployment pipelines and monitoring tools. It’s fair to say that most of these projects addressed a specific need without addressing the broader scope of the framework’s problems in this regard.</p><p>This uncoordinated approach, while decentralized in nature, causes a lot of confusion within its user base. As a result, public goods funding flows to developers and projects that keep re-inventing the wheel, only to eventually abandon it.</p><blockquote>🗣 The ecosystem’s biggest shortfall has been its inability to properly coordinate its network of passionate developers. This results in a fragmented and uncollaborative community.</blockquote><p>This same criticism extends to much of the Cosmos ecosystem. An ecosystem touted as the internet of blockchains that aims to simplify the creation of blockchains in a modular fashion. In its current state CosmWasm is bound to the Cosmos ecosystem as the CosmosSDK is its only supported environment, although this could soon™️ change.</p><p>Abstract aims to tackle the tooling and community fragmentation by creating incentive structures that foster collaboration as an inherent consequence of the system’s architecture. In other words, Abstract is the golden standard for collaborative smart-contract development.</p><h3>What We’ve Built</h3><p>Abstract aims to be the interchain application platform. To achieve this, we’ve developed on-chain infrastructure and Software Development Kits (SDKs) for both smart-contract and front-end development.</p><h3>The Abstract Framework</h3><p>Abstract’s framework primarily facilitates the creation of Abstract Accounts, which are smart-contract wallets with installable modular applications. Developing applications in this modular manner offers several significant benefits:</p><ul><li><strong>Code Reusability:</strong> Developers can reuse contracts in other applications. Moreover, Abstract provides a library of contracts for integrating with the most popular protocols, saving both time and money.</li><li><strong>Security:</strong> The logic of an application is simplified to its bare minimum, making it easier to audit and maintain. Additionally, its dependencies are often battle-tested smart contracts, reducing the attack surface.</li></ul><p>The following example demonstrates an auto-compounder application, shown in the diagram below. This application provides liquidity to a DEX pool and re-invests the received rewards back into the pool. The application’s functionality can be divided into three contracts:</p><ul><li><strong>DEX:</strong> Offers an interface for performing DEX operations, such as swapping tokens and providing liquidity.</li><li><strong>Staking:</strong> Provides an interface for conducting staking operations, such as claiming rewards and staking or unstaking.</li><li><strong>Auto-Compounder:</strong> Coordinates the DEX and staking contracts to execute the auto-compounding logic.</li></ul><p>The strength of this approach lies in its separation of concerns. Your team can focus on problem-solving and feature development without the burden of integrating all possible dependencies. With Abstract, you can rely on shared on-chain infrastructure that is actively maintained to ensure your application’s uptime.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*z7zuSMxZ35ZT3CVHmhUnKA.png" /><figcaption><strong>Modular Auto-Compounder Application</strong></figcaption></figure><p>Another aspect of this application development approach is the ability to self-host applications. Imagine being able to publish an on-chain application in the same way as an iOS/Android app. This is achievable with our smart-contract app store.</p><p>Below is the self-hosted version of the previously mentioned auto-compounder application. Both Sarah and Alex have created an Abstract Account on our platform and installed the auto-compounder application from our app store. The app’s creator may choose to charge an installation or usage fee for their work.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OitBfWk3iOuhjiMB-o8DvA.png" /><figcaption><strong>Self-hosted Modular Application</strong></figcaption></figure><p>With this setup, Alex and Sarah can both utilize the auto-compounder application and customize it according to their preferences. For instance, Alex can set the application to compound his rewards every 24 hours, while Sarah can set hers to do so every 12 hours. Updates to the application are done through a “pull” based system, as opposed to the current “push” based system. This means that both Sarah and Alex need to actively perform an upgrade if they wish to update their application. The developers cannot force new code onto the users. We believe this approach yields significant technical and potential legal benefits.</p><p>In conclusion, Abstract’s modular smart-contract development framework provides a streamlined process for the creation of complex smart-contract based applications through smart-contract composition.</p><h3>Our Tooling</h3><p>To demonstrate our commitment to a more collaborative development ecosystem, we’ve created <a href="https://github.com/AbstractSDK/cw-orchestrator"><em>cw-orchestrator</em></a>. This scripting tool for CosmWasm-based applications enables developers to share and collaborate on their projects.</p><p>At its core, <a href="https://github.com/AbstractSDK/cw-orchestrator"><em>cw-orchestrator</em></a> allows teams to create interfaces for their contracts. These interfaces can be used to interact with the contracts in any environment that supports CosmWasm execution, including live networks, mock environments, and everything in between.</p><p>Additionally, we’ve developed powerful features that allow other developers to easily deploy applications to any of these environments. Below is a snippet of how Abstract, a large multi-contract framework, can be deployed to a mock environment by any developer who wishes to integrate:</p><pre>// Create a sender<br>let sender = Addr::unchecked(ADMIN);<br><br>// Create the mock<br>let mock = Mock::new(&amp;sender);<br><br>// Deploy Abstract to the mock<br>let abstr_deployment = Abstract::deploy_on(mock.clone(), sender.to_string())?;</pre><p>You can read more about this powerful tool in our dedicated <a href="https://orchestrator.abstract.money/">docs</a>.</p><h3>Closing Thoughts</h3><p>Up until this point developers have been building web3 applications from scratch, monetizing their creations through ponzinomics and marketing. These practices have been great for meme and internet culture (3,3) but they have shown to fall short for any meaningful and long-term alignment between builders and users alike.</p><p>At some point systems must be put in place that foster long-term collaboration. We believe that Abstract is a major step in that direction and we’re counting on your support.</p><p>Let’s collaborate and make the interchain great again!</p><blockquote>👀 We’re looking for teams or investors that have a specific use-case that they would want to see built out. If that’s you, please <a href="https://calendly.com/abstract-money">book a meeting with us</a> to see if we can help you out!</blockquote><p><strong>Links</strong></p><p>Join our <a href="https://discord.gg/cCS36Hxrg8">Discord</a>!</p><p>Check out our <a href="https://github.com/AbstractSDK">Github</a>.</p><p>And follow us on <a href="https://twitter.com/AbstractSDK">Twitter(X)</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c9b30665e83c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/abstract-money/abstract-for-ctos-c9b30665e83c">Abstract for CTOs</a> was originally published in <a href="https://medium.com/abstract-money">Abstract Money</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>