UNISWAP V3 - New Era Of AMMs? Architecture Explained

So what is the long-awaited Uniswap V3 all about? How is it different from V2? Will this be a game-changer when it comes to the Automated Market Makers space? And will it launch directly on Layer 2? You’ll find answers to these questions in this video.

Although Uniswap, as one of the core DeFi projects, doesn’t need much of an introduction, let’s quickly go through a few major points before we jump into V3.

Uniswap, in essence, is a protocol for decentralized and permissionless exchange of tokens on the Ethereum blockchain.

The initial version of Uniswap was launched in Nov 2018 and slowly started building users’ interest.

In May 2020, at the beginning of DeFi Summer, Uniswap launched a second version of the protocol called Uniswap V2.

Just before releasing V2, the team behind Uniswap had already started working on a new version of the protocol, details of which were announced just now - at the end of March 2021. The team decided to launch Uniswap V3 on both the Ethereum mainnet and Optimism - an Ethereum Layer 2 scaling solution - targeting early May for the release.

This was clearly one of the most anticipated announcements in DeFi’s history and it looks like V3 can completely revolutionise the AMM space.

#defi #blockchain

What is GEEK

Buddha Community

UNISWAP V3 - New Era Of AMMs? Architecture Explained

What's New in Uniswap V3?

Background

Uniswap is a decentralized exchange (DEX) running on the Ethereum blockchain. Its revolutionary technology was first introduced in 2018 through the company’s first iteration, Uniswap v1. Uniswap v1 is an on-chain system of smart contracts on the Ethereum blockchain, implementing an automated liquidity protocol based on a “constant product formula”.

Uniswap v1 was the first of its kind, a type of exchange where anyone can pool assets into shared market-making strategies. The v1 protocol allowed users to create a liquidity pool with any pair of ERC-20 assets, ensuring the constant (K) that the product of the reserves (X and Y) cannot decrease as shown in “the constant product formula”.

Two years later, the ambitious Uniswap team again disrupted the international DeFi ecosystem with Uniswap v2, a better and new implementation of the Uniswap algorithm based on the same formula, with new highly-desirable optimizations, setting the stage for exponential growth in AMM adoption.

V2 enabled the creation of ERC-20 to ERC20 liquidity pools in addition to the previous ERC20 to ETH pools within the DEX, which facilitated over $135 billion in trading volume, becoming the top cryptocurrency exchange in the world.

Uniswap has inevitably become one the most popular platform on the Etherum blockchain. The platform’s unique infrastructure for DeFi has empowered developers, traders, and liquidity providers to engage in a secure and powerful financial marketplace.

Despite the astonishing success of v1 and v2, the pioneering Uniswap team seeks to make even more history with the recent introduction of Uniswap v3.

🔥 Read more: What is Uniswap | Beginner’s Guide on How to Use Uniswap 🔥

Introducing Uniswap V3

we are excited to present an overview of Uniswap v3. We are targeting an L1 Ethereum mainnet launch on May 5 , with an L2 deployment on Optimism set to follow shortly after.

  • Concentrated liquidity, giving individual LPs granular control over what price ranges their capital is allocated to. Individual positions are aggregated together into a single pool, forming one combined curve for users to trade against
  • Multiple fee tiers , allowing LPs to be appropriately compensated for taking on varying degrees of risk

These features make Uniswap v3 the most flexible and efficient AMM ever designed:

  • LPs can provide liquidity with up to 4000x capital efficiency relative to Uniswap v2, earning higher returns on their capital
  • Capital efficiency paves the way for low-slippage trade execution that can surpass both centralized exchanges and stablecoin-focused AMMs
  • LPs can significantly increase their exposure to preferred assets and reduce their downside risk
  • LPs can sell one asset for another by adding liquidity to a price range entirely above or below the market price, approximating a fee-earning limit order that executes along a smooth curve

Uniswap’s oracles are now far easier and cheaper to integrate. V3 oracles are capable of providing time-weighted average prices (TWAPs) on demand for any period within the last ~9 days. This removes the need for integrators to checkpoint historical values.

Even with these groundbreaking design improvements, the gas cost of v3 swaps on Ethereum mainnet is slightly cheaper than v2. Transactions made on the Optimism deployment will likely be significantly cheaper!

Read on for more details on Uniswap v3. For a deeper technical overview check out the Uniswap v3 Core whitepaper, the Uniswap v3 Core smart contracts.

Concentrated Liquidity

In Uniswap v2, liquidity is distributed evenly along an x*y=k price curve, with assets reserved for all prices between 0 and infinity. For most pools, a majority of this liquidity is never put to use. As an example, the v2 DAI/USDC pair reserves just ~0.50% of capital for trading between $0.99 and $1.01 , the price range in which LPs would expect to see the most volume and consequently earn the most fees.

V2 LPs only earn fees on a small portion of their capital, which can fail to appropriately compensate for the price risk (”impermanent loss”) they take by holding large inventories in both tokens. Additionally, traders are often subject to high degrees of slippage as liquidity is spread thin across all price ranges.

In Uniswap v3, LP’s can concentrate their capital within custom price ranges, providing greater amounts of liquidity at desired prices. In doing so, LPs construct individualized price curves that reflect their own preferences.

LPs can combine any number of distinct concentrated positions within a single pool. For example, an LP in the ETH/DAI pool may choose to allocate $100 to the price ranges $1,000-$2,000 and an additional $50 to the ranges $1,500-$1,750.

By doing so, an LP can approximate the shape of any automated market maker or active order book.

Users trade against the combined liquidity of all individual curves with no gas cost increase per liquidity provider. Trading fees collected at a given price range are split pro-rata by LPs proportional to the amount of liquidity they contributed to that range.

Capital Efficiency

By concentrating their liquidity, LPs can provide the same liquidity depth as v2 within specified price ranges while putting far less capital at risk. The capital saved can be held externally, invested in different assets, deposited elsewhere in DeFi, or used to increase exposure within the specified price range to earn more trading fees.

Let’s illustrate with an example:

Alice and Bob both want to provide liquidity in an ETH/DAI pool on Uniswap v3. They each have $1m. The current price of ETH is 1,500 DAI.

Alice decides to deploy her capital across the entire price range (as she would have in Uniswap v2). She deposits 500,000 DAI and 333.33 ETH (worth a total of $1m).

Bob instead creates a concentrated position, depositing only within the price range from 1,000 to 2,250. He deposits 91,751 DAI and 61.17 ETH, worth a total of about $183,500. He keeps the other $816,500 himself, investing it however he prefers.

While Alice has put down 5.44x as much capital as Bob, they earn the same amount of fees, as long as the ETH/DAI price stays within the 1,000 to 2,250 range.

example 1

Bob’s custom position also acts as a kind of stop-loss for his liquidity. Both Alice and Bob’s liquidity will be entirely denominated in ETH if the price of ETH falls to $0. However, Bob will have lost just $159,000, versus Alice’s $1m. Bob can use his additional $816,500 to hedge against downside exposure or to invest in any other conceivable strategy.

example 2

Instead of providing equivalent liquidity depth as a v2 LPs with less capital, v3 LPs can choose to provide greater depth with the same amount of capital as their v2 counterparts. This requires taking on more price risk (”impermanent loss”) while supporting greater amounts of trading and earning higher fees.

LPs in more stable pools will likely provide liquidity in particularly narrow ranges. If the ~$25m currently held in the Uniswap v2 DAI/USDC pair was instead concentrated between 0.99 — 1.01 in v3, it would provide the same depth as $5bn in Uniswap v2 as long as the price stayed within that range. If the ~$25m was concentrated into the 0.999 - 1.001 range it would provide the same depth as $50b in Uniswap v2.

The tool below calculates the capital efficiency gains of a concentrated liquidity position (centered around the current price) relative to allocating capital across the entire price curve.

Liquidity Deposit Value

Value of paired tokens

$

Select ETH price range

Current Price: $1,820

V3 Range Position

Capital Required

$150,000

Fees per $ vs. V2

5.24x

V2 Position

Capital Required

$785,779

These two positions will earn equal fees and perform idenitcally while the price remains between $1200 and $2800.

At launch, capital efficiency gains will max out at 4000x for LPs providing liquidity within a single 0.10% price range. The v3 pool factory is technically capable of supporting ranges as granular as 0.02%, translating to a maximum 20,000x capital efficiency gains relative to v2. However, more granular pools can increase swap gas costs and might be more useful on Layer 2.

Active Liquidity

If market prices move outside an LP’s specified price range, their liquidity is effectively removed from the pool and is no longer earning fees. In this state, an LP’s liquidity is composed entirely of the less valuable of the two assets, until the market price moves back into their specified price range or they decide to update their range to account for current prices.

LPs only earn fees when the market trades between their specified price range.

In v3, it is theoretically possible for no liquidity to exist in a given price range. However, we expect rational LPs to continuously update their price ranges to cover the current market price.

Range Orders

V3’s LP customizability opens up a novel order feature to complement market orders, which we are calling ’range orders’.

LPs can deposit a single token in a custom price range above or below the current price: if the market price enters into their specified range, they sell one asset for another along a smooth curve while earning swap fees in the process.

Depositing to a narrow range feels similar to a traditional limit order. For example, if the current price of DAI is below 1.001 USDC, Alice could add $10m worth of DAI to the range of 1.001 — 1.002 DAI/USDC.

Once DAI trades above 1.002 DAI/USDC, Alice’s liquidity will have fully converted into USDC. Alice must withdraw her liquidity (or use a third-party service to withdraw on her behalf) to avoid automatically converting back into DAI if DAI/USDC starts trading below 1.002.

range

The average execution price of a fully executed range order is the geometric average of the minimum and maximum price: in Alice’s case, the execution price equals 1.001499 DAI/USDC for a total of $1,001,499. This execution price does not account for additional swap fees earned during the period in which prices trade within the 1.001 — 1.002 DAI/USDC range.

Range orders within wider ranges may prove particularly useful for profit-taking, buying the dip, and primary issuance events: in the later use case, issuers are now able to deposit liquidity in a single asset and specify the exact range of prices across which they wish to sell their tokens.

Non-Fungible Liquidity

As a byproduct of per-LP custom price curves, liquidity positions are no longer fungible and are not represented as ERC20 tokens in the core protocol.

Instead, LP positions will be represented by non-fungible tokens (NFTs). However, common shared positions can be made fungible (ERC20) via peripheral contracts or through other partner protocols. Additionally, trading fees are no longer automatically reinvested back into the pool on LPs’ behalf.

Over time we expect increasingly sophisticated strategies to be tokenized, making it possible for LPs to participate while maintaining a passive user experience. This could include multi-positions, auto-rebalancing to concentrate around the market price, fee reinvestment, lending, and more.

Flexible Fees

Uniswap v3 offers LPs three separate fee tiers per pair — 0.05%, 0.30%, and 1.00%. This array of options ensures that LPs tailor their margins according to expected pair volatility: LPs take on more risk in non-correlated pairs like ETH/DAI and, conversely, take on minimal risk in correlated pairs like USDC/DAI.

Although distinct fee tiers may lead to some degree of liquidity fragmentation, we believe that most pairs will calibrate to an ’obvious’ fee tier, which then serves as the canonical market. We expect like-kind asset pairs to congregate around the 0.05% fee tier and pairs like ETH/DAI to use 0.30%, while exotic assets might find 1.00% swap fees more appropriate. governance can add additional fee tiers as needed.

Uniswap v2 introduced a protocol fee switch, which allowed a flat 5 basis point (16.66% of LP fees) fee to be turned on by governance. Uniswap v3 protocol fees are far more flexible. Fees will be off by default, but can be turned on by governance on a per-pool basis and set between 10% and 25% of LP fees.

Advanced Oracles

Uniswap v2 introduced time weighted average price (TWAP) oracles. These oracles serve as a critical piece of DeFi infrastructure, and have been integrated into dozens of projects, including Compound and Reflexer.

V2 oracles work by storing cumulative sums of Uniswap pair prices on a per-second basis. These price sums can be checked once at the beginning of a period and once at the end to calculate an accurate TWAP over that period.

Uniswap v3 offers significant improvements to the TWAP oracle, making it possible to calculate any recent TWAP within the past ~9 days in a single on-chain call. This is achieved by storing an array of cumulative sums instead of just one.

oracles

This array of historical price accumulators makes it far easier and cheaper to create more advanced oracles that include simple-moving averages (SMA), exponential moving averages (EMA), outlier filtering, and more.

Despite this major improvement, the gas cost to Uniswap traders for keeping oracles up to date has been reduced by ~50% relative to v2. The costs for calculating TWAPs in external smart contracts is significantly cheaper as well.

License

We strongly believe decentralized financial infrastructure should ultimately be free, open-source software. At the same time, we think the Uniswap community should be the first to build an ecosystem around the Uniswap v3 Core codebase.

With this in mind, Uniswap v3 Core will launch under the Business Source License 1.1—effectively a time-delayed GPL-2.0-or-later license. The license limits use of the v3 source code in a commercial or production setting for up to two years, at which point it will convert to a GPL license into perpetuity.

Uniswap governance can accelerate the change to GPL or grant exemptions to the license at any time by updating the files at **v3-core-license-date.uniswap.eth**and v3-core-license-grants.uniswap.eth.

Note that the BUSL 1.1 license does not affect integrations. All code that may be needed for external integrations has been licensed under GPL or MIT , including math libraries, peripheral contracts, interfaces, and the developer sdk. Any wallet, interface, mobile app, protocol, or other project will be able to integrate with v3 as expected.

For more information on this license, see this FAQ.

Audits and Bug Bounty

Our team believes security is of the utmost importance — it took hundreds of hours of testing for us to feel comfortable with launching Uniswap v3.

Our security process for v3 included:

  • A full-length audit from Trail of Bits
  • A full-length audit from ABDK
  • A full audit from samczsun (no report)
  • An auditing and review process from our engineering team
  • A comprehensive test suite, including the automated tools Echidna and Manticore

Major bugs discovered as part of the testing and auditing process were fixed. However, we would like to note that Uniswap v3 is an extremely complex protocol and we cannot guarantee all bugs have already been discovered and resolved.

To help find any open vulnerabilities, a public bug bounty will run over the next 30 days, with up to $500,000 offered for critical bugs. More detail on the public bug bounty can be found here.

Launch Details

The Uniswap v3 smart contracts will be deployed to the Ropsten, Rinkeby, Kovan, and Görli testnets in the coming days, giving developers time to begin experimenting with the protocol before the official launch.

A liquidity provider migration portal will be available at launch, allowing v2 LPs to seamlessly transfer their liquidity to the new protocol.

In the meantime, there are few outstanding items to complete:

  • Partners and integrations can begin building on Uniswap v3 immediately, in preparation for mainnet launch!
  • The interface, analytics site, API, and developer SDK are being redesigned to work with Uniswap v3.
  • The initial Uniswap v3 router and position manager contracts are almost complete. While still subject to change, they are available here.
  • Documentation, guides, and further examples are in progress.
  • Additional infrastructure to support fungibile positions, liquidity mining, more complex strategies, and various other use cases will be built by Uniswap Labs together with the Uniswap community after mainnet launch

Conclusion

The DeFi space has undoubtedly benefited from the advent of AMMs unique features, which have since given birth to audacious and pioneering platforms like Uniswap. The Uniswap ecosystem provides a complex yet efficient technology that has revolutionized decentralized crypto trading through its distinct implementations of liquidity pools.

From Uniswap v1 to the anticipated v3, users and LPs are presented with a series of improvements that will facilitate the use of decentralized assets and eventually catapult the DeFi ecosystem to ever newer heights.

Thank you for reading!

#blockchain #uniswap #uniswap v3

Justen  Hintz

Justen Hintz

1663559281

To-do List App with HTML, CSS and JavaScript

Learn how to create a to-do list app with local storage using HTML, CSS and JavaScript. Build a Todo list application with HTML, CSS and JavaScript. Learn the basics to JavaScript along with some more advanced features such as LocalStorage for saving data to the browser.

HTML:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>To Do List With Local Storage</title>
    <!-- Font Awesome Icons -->
    <link
      rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css"
    />
    <!-- Google Fonts -->
    <link
      href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500&display=swap"
      rel="stylesheet"
    />
    <!-- Stylesheet -->
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>
    <div class="container">
      <div id="new-task">
        <input type="text" placeholder="Enter The Task Here..." />
        <button id="push">Add</button>
      </div>
      <div id="tasks"></div>
    </div>
    <!-- Script -->
    <script src="script.js"></script>
  </body>
</html>

CSS:

* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}
body {
  background-color: #0b87ff;
}
.container {
  width: 90%;
  max-width: 34em;
  position: absolute;
  transform: translate(-50%, -50%);
  top: 50%;
  left: 50%;
}
#new-task {
  position: relative;
  background-color: #ffffff;
  padding: 1.8em 1.25em;
  border-radius: 0.3em;
  box-shadow: 0 1.25em 1.8em rgba(1, 24, 48, 0.15);
  display: grid;
  grid-template-columns: 9fr 3fr;
  gap: 1em;
}
#new-task input {
  font-family: "Poppins", sans-serif;
  font-size: 1em;
  border: none;
  border-bottom: 2px solid #d1d3d4;
  padding: 0.8em 0.5em;
  color: #111111;
  font-weight: 500;
}
#new-task input:focus {
  outline: none;
  border-color: #0b87ff;
}
#new-task button {
  font-family: "Poppins", sans-serif;
  font-weight: 500;
  font-size: 1em;
  background-color: #0b87ff;
  color: #ffffff;
  outline: none;
  border: none;
  border-radius: 0.3em;
  cursor: pointer;
}
#tasks {
  background-color: #ffffff;
  position: relative;
  padding: 1.8em 1.25em;
  margin-top: 3.8em;
  width: 100%;
  box-shadow: 0 1.25em 1.8em rgba(1, 24, 48, 0.15);
  border-radius: 0.6em;
}
.task {
  background-color: #ffffff;
  padding: 0.3em 0.6em;
  margin-top: 0.6em;
  display: flex;
  align-items: center;
  border-bottom: 2px solid #d1d3d4;
  cursor: pointer;
}
.task span {
  font-family: "Poppins", sans-serif;
  font-size: 0.9em;
  font-weight: 400;
}
.task button {
  color: #ffffff;
  padding: 0.8em 0;
  width: 2.8em;
  border-radius: 0.3em;
  border: none;
  outline: none;
  cursor: pointer;
}
.delete {
  background-color: #fb3b3b;
}
.edit {
  background-color: #0b87ff;
  margin-left: auto;
  margin-right: 3em;
}
.completed {
  text-decoration: line-through;
}

Javascript:

//Initial References
const newTaskInput = document.querySelector("#new-task input");
const tasksDiv = document.querySelector("#tasks");
let deleteTasks, editTasks, tasks;
let updateNote = "";
let count;

//Function on window load
window.onload = () => {
  updateNote = "";
  count = Object.keys(localStorage).length;
  displayTasks();
};

//Function to Display The Tasks
const displayTasks = () => {
  if (Object.keys(localStorage).length > 0) {
    tasksDiv.style.display = "inline-block";
  } else {
    tasksDiv.style.display = "none";
  }

  //Clear the tasks
  tasksDiv.innerHTML = "";

  //Fetch All The Keys in local storage
  let tasks = Object.keys(localStorage);
  tasks = tasks.sort();

  for (let key of tasks) {
    let classValue = "";

    //Get all values
    let value = localStorage.getItem(key);
    let taskInnerDiv = document.createElement("div");
    taskInnerDiv.classList.add("task");
    taskInnerDiv.setAttribute("id", key);
    taskInnerDiv.innerHTML = `<span id="taskname">${key.split("_")[1]}</span>`;
    //localstorage would store boolean as string so we parse it to boolean back
    let editButton = document.createElement("button");
    editButton.classList.add("edit");
    editButton.innerHTML = `<i class="fa-solid fa-pen-to-square"></i>`;
    if (!JSON.parse(value)) {
      editButton.style.visibility = "visible";
    } else {
      editButton.style.visibility = "hidden";
      taskInnerDiv.classList.add("completed");
    }
    taskInnerDiv.appendChild(editButton);
    taskInnerDiv.innerHTML += `<button class="delete"><i class="fa-solid fa-trash"></i></button>`;
    tasksDiv.appendChild(taskInnerDiv);
  }

  //tasks completed
  tasks = document.querySelectorAll(".task");
  tasks.forEach((element, index) => {
    element.onclick = () => {
      //local storage update
      if (element.classList.contains("completed")) {
        updateStorage(element.id.split("_")[0], element.innerText, false);
      } else {
        updateStorage(element.id.split("_")[0], element.innerText, true);
      }
    };
  });

  //Edit Tasks
  editTasks = document.getElementsByClassName("edit");
  Array.from(editTasks).forEach((element, index) => {
    element.addEventListener("click", (e) => {
      //Stop propogation to outer elements (if removed when we click delete eventually rhw click will move to parent)
      e.stopPropagation();
      //disable other edit buttons when one task is being edited
      disableButtons(true);
      //update input value and remove div
      let parent = element.parentElement;
      newTaskInput.value = parent.querySelector("#taskname").innerText;
      //set updateNote to the task that is being edited
      updateNote = parent.id;
      //remove task
      parent.remove();
    });
  });

  //Delete Tasks
  deleteTasks = document.getElementsByClassName("delete");
  Array.from(deleteTasks).forEach((element, index) => {
    element.addEventListener("click", (e) => {
      e.stopPropagation();
      //Delete from local storage and remove div
      let parent = element.parentElement;
      removeTask(parent.id);
      parent.remove();
      count -= 1;
    });
  });
};

//Disable Edit Button
const disableButtons = (bool) => {
  let editButtons = document.getElementsByClassName("edit");
  Array.from(editButtons).forEach((element) => {
    element.disabled = bool;
  });
};

//Remove Task from local storage
const removeTask = (taskValue) => {
  localStorage.removeItem(taskValue);
  displayTasks();
};

//Add tasks to local storage
const updateStorage = (index, taskValue, completed) => {
  localStorage.setItem(`${index}_${taskValue}`, completed);
  displayTasks();
};

//Function To Add New Task
document.querySelector("#push").addEventListener("click", () => {
  //Enable the edit button
  disableButtons(false);
  if (newTaskInput.value.length == 0) {
    alert("Please Enter A Task");
  } else {
    //Store locally and display from local storage
    if (updateNote == "") {
      //new task
      updateStorage(count, newTaskInput.value, false);
    } else {
      //update task
      let existingCount = updateNote.split("_")[0];
      removeTask(updateNote);
      updateStorage(existingCount, newTaskInput.value, false);
      updateNote = "";
    }
    count += 1;
    newTaskInput.value = "";
  }
});

Related Videos

Build a Todo list app in HTML, CSS & JavaScript | JavaScript for Beginners tutorial

Build a Todo List App in HTML, CSS & JavaScript with LocalStorage | JavaScript for Beginners

To Do List using HTML CSS JavaScript | To Do List JavaScript

Create A Todo List App in HTML CSS & JavaScript | Todo App in JavaScript

#html #css #javascript

UNISWAP V3 - New Era Of AMMs? Architecture Explained

So what is the long-awaited Uniswap V3 all about? How is it different from V2? Will this be a game-changer when it comes to the Automated Market Makers space? And will it launch directly on Layer 2? You’ll find answers to these questions in this video.

Although Uniswap, as one of the core DeFi projects, doesn’t need much of an introduction, let’s quickly go through a few major points before we jump into V3.

Uniswap, in essence, is a protocol for decentralized and permissionless exchange of tokens on the Ethereum blockchain.

The initial version of Uniswap was launched in Nov 2018 and slowly started building users’ interest.

In May 2020, at the beginning of DeFi Summer, Uniswap launched a second version of the protocol called Uniswap V2.

Just before releasing V2, the team behind Uniswap had already started working on a new version of the protocol, details of which were announced just now - at the end of March 2021. The team decided to launch Uniswap V3 on both the Ethereum mainnet and Optimism - an Ethereum Layer 2 scaling solution - targeting early May for the release.

This was clearly one of the most anticipated announcements in DeFi’s history and it looks like V3 can completely revolutionise the AMM space.

#defi #blockchain

Uniswap V3 ! What it Means For UNI

Uniswap V3 is COMING!! What it Means For UNI!! 🦄

  • TIMESTAMPS -
    0:00 Intro
    2:09 Uniswap Recap & AMM Explanation
    4:50 Liquidity & Impermanent Loss
    6:30 LP Tokens & DeFi Composability
    8:24 Uniswap V3 Explained
    10:09 Concentrated Liquidity
    12:38 Capital Efficiency
    14:34 LP Risks & Features
    17:41 Uniswap License
    19:25 UNI Token Analysis
    21:40 Final Thoughts

📺 The video in this post was made by Coin Bureau

️ The origin of the article: https://www.youtube.com/watch?v=4CJEGVBcPGQ

🔺 DISCLAIMER: The article is for information sharing. The content of this video is solely the opinions of the speaker who is not a licensed financial advisor or registered investment advisor. Not investment advice or legal advice.

Cryptocurrency trading is VERY risky. Make sure you understand these risks and that you are responsible for what you do with your money

🔥 If you’re a beginner. I believe the article below will be useful to you

⭐ ⭐ ⭐ What You Should Know Before Investing in Cryptocurrency - For Beginner ⭐ ⭐ ⭐

Thanks for visiting and watching!

🔗 Useful Links 🔗
👉 What’s New in Uniswap V3? 👉 https://morioh.com/p/97ad4f283bd6
👉 What is Uniswap | Beginner’s Guide on How to Use Uniswap 👉 https://morioh.com/p/436a5462ef7b
👉 Uniswap Review & Guide 👉 https://youtu.be/GREUQeHpQeQ

#blockchain #bitcoin #uniswap #uniswap v3

Serverless Vs Microservices Architecture - A Deep Dive

Companies need to be thinking long-term before even starting a software development project. These needs are solved at the level of architecture: business owners want to assure agility, scalability, and performance.

The top contenders for scalable solutions are serverless and microservices. Both architectures prioritize security but approach it in their own ways. Let’s take a look at how businesses can benefit from the adoption of serverless architecture vs microservices, examine their differences, advantages, and use cases.

#serverless #microservices #architecture #software-architecture #serverless-architecture #microservice-architecture #serverless-vs-microservices #hackernoon-top-story