Nico Vergauwen
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
      • Invitee
      • No invitee
    • Publish Note

      Publish Note

      Everyone on the web can find and read all notes of this public team.
      Once published, notes can be searched and viewed by anyone online.
      See published notes
      Please check the box to agree to the Community Guidelines.
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Versions and GitHub Sync Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
Invitee
No invitee
Publish Note

Publish Note

Everyone on the web can find and read all notes of this public team.
Once published, notes can be searched and viewed by anyone online.
See published notes
Please check the box to agree to the Community Guidelines.
Engagement control
Commenting
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
  • Everyone
Suggest edit
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
Emoji Reply
Enable
Import from Dropbox Google Drive Gist Clipboard
   owned this note    owned this note      
Published Linked with GitHub
Subscribed
  • Any changes
    Be notified of any changes
  • Mention me
    Be notified of mention me
  • Unsubscribe
Subscribe
# Tenderize ## Table Of Contents 1. [**Introduction**](#1-Introduction) 2. [**Glossary**](#2-Glossary) 3. [**TenderTokens**](#3-TenderTokens---Permissionless-Derivatives) 1. [Abstract](#31-Abstract) 2. [Existing Approaches](#32-Drawbacks-of-existing-approaches) 3. [Motivation](#33-Motivation) 4. [Solution](#34-Solution) 1.[Delegation Pools](#341-Delegation-Pools) 2.[Liquid Unstaking](#342-Liquid-Unstaking) 3.[Elastic Supply](#343-Elastic-Supply) 4.[Protocol Fees](#344-Protocol-Fees) 5. [Protocol Risks](#35-Protocol-Risks) 1.[Slashing Risk](#351-Slashing-Risk) 2.[Smart Contract Security](#352-Smart-Contract-Security) 3.[Arbitrary Node Commissions](#353-Arbitrary-Node-Commisions) 5. [**TenderSwap**](#4-TenderSwap---Efficient-Liquidity) 1. [Abstract](#41-Abstract) 2. [Motivation](#42-Motivation) 3. [Solution](#43-Solution) 1.[TenderPools](#431-TenderPools) 2.[Debt Ratio](#432-Debt-Ratio) 3.[Price Function](#433-Price-Function) 4.[Slippage](#434-Slippage) 7. [**Protocol Owned Liquidity**](#5-Protocol-Owned-Liquidity---Ensuring-Stability) 1. [Abstract](#31-Abstract) 2. [Motivation](#32-Motivation) 3. [Solution](#33-Solution) ## 1. Introduction Tenderize (🥩,🔨) is a liquid staking protocol that connects web3 protocols and their economics with DeFi. It allows you to earn rewards on your staked assets without lockups and use them across the DeFi ecosystem. Liquid staking through the Tenderize protocol is an alternative to locking up a user’s stake: it allows for users to stake any amount of collateral tokens and effectively retain access to their assets even though they are staked and locked up for several days or weeks in a smart contract. This is done through the issuance of a tokenized version of the staked funds — a sort of derivative — which can be transferred, stored, collateralized, spent or traded as one would a regular token. The design goals for the Tenderize protocol is to be trust minimized, decentralised and self-sustainable. Our approach to Liquid Staking is that of a middleware protocol that acts as a proxy to existing staking protocols while minimizing obstructions to existing workflows, protocol dynamics and mechanics. Through Tenderize node operators and their delegators will be able to have distinct liquid staking derivatives. The goal of Tenderize is to make staked assets for web3 protocols more accessible and capital efficient for all stakeholders of a network; node operators, token holders and the demand side. Tenderize has a heavy focus on web3 protocols because of their revenue potentials rather than purely relying on inflationairy token emissions. To make this possible the Tenderize protocol consists out of three high-level components: - **TenderTokens** - derivative tokens that represent staked assets 1:1 and act as delegation pools - **TenderSwap** - an automated market maker specifically designed for liquid staking derivatives and shared collateral liquidity - **Protocol Owned Liquidity** - a mechanism ensuring that the liquidity acquired is permanently allocated as part of the treasury ## 2. Glossary - **Collateral**: the underlying asset which is deposited in return for tenderTokens - **TenderToken**: liquid staking derivative that represent a 1:1 claim to collateral - **TenderSwap / Liquidity Pool (LP)**: automated market maker mechanism for being able to trade TenderTokens with their collateral - **Liquidity**: the collateral and TenderTokens in a TenderSwap liquidity pool - **Protocol Controlled Value (PCV)**: the amount of collateral the protocol controls from deposits, this is a combination of staked collateral and collateral pending to be staked/unstaked - **Protocol Owned Liquidity (POL)**: The amount of liquidity held by the protocol for a certain tenderToken - **Risk Free Value (RFV)**: The nominal value of liquidity held by the protocol versus the outstanding supply of tenderToken - **Reserve Ratio**: The ratio between POL and PCV - **Target Reserve Ratio**: The target value for how much liquidity reserves the protocol should hold (as decided by governance) - **Treasury**: all funds that are owned by the DAO (PCV is not owned by the DAO) ## 3. TenderTokens - Permissionless Derivatives ### 3.1 Abstract The Tenderize protocol takes a novel approach to liquid staking. Instead of acting as an aggregator it aims to be unopinionated, trustless and permisionless. There are no validator queues or permisionned whitelisting, no manual intervention or off-chain oracles to update staked amounts. Instant liquidity through TenderSwap is always optional as TenderTokens retain the behaviour of unstaking. TenderTokens are a tokenized version of staked, locked assets and are 1:1 equivalent to collateral. They are bound to a node operator, their yield is directly tied to the performance of this node. Any node on a network can have its own TenderToken which can be used by the node operator and token holders to allocate stake towards this node. Effectively allowing any network stakeholder to collateralise or get access to instant liquidity. We believe that a liquid staking protocol should be neutral. It should act as a proxy to the underlying staking protocol and add value for staked assets while minimizing obstructions to existing mechanics and workflows. An additional benefit of Tenderize's neutral approach is that regardless of how much market share the Tenderize protocol gains, it does not increase centralisation of stake towards a few node operators. ### 3.2 Drawbacks of existing approaches The current general approach to liquid staking is to act as a yield aggregator. User deposits are aggregated into a smart contract, an IOU derivative is issued to the user and then the protocol or DAO allocates aggregated deposits to various node operators on the network they operator on. Regularly the DAO will (through manual intervention of an agent) process any staking rewards which updates the balances for the derivative token. More often than not this process is (semi-)custodial and current liquid staking protocols are opinionated on where funds are allocated. They act as yield aggregators where profits and losses by different node operators are socialized across everyone. There's clear negative side effects to this approach in terms of trustlessness and centralisation, a DAO or multisig is responsible for allocating user deposits, processing staking rewards on a regular basis and determining to which nodes stake is allocated. The other big problem is that it leaves out one of the most important stakeholders, the actual node operators. Since stake is split among a set of nodes which might not include them. This leads to cartelisation and centralisation of stake risk and leaves node operators on the sidelines even though they are major stakeholders who likely own a lot of tokens and have the highest cash flows through actually running nodes. ### 3.3 Motivation At Tenderize we believe in core web3 principles, which does not only involve ownership of protocols you use but also trust minimization, permisionlessness and inclusion. Our opinion is that we should not sacrifice these principles when designing a liquid staking protocol. Furthermore we believe that a liquid staking protocol should be created in such a way that it is unopinonated, it should not significantly alter existing mechanics or favor "signed-up" node operators over others, a liquid staking protocol should merely act as a proxy for instant liquidity and collateralisation of locked up assets. ### 3.4 Solution #### 3.4.1 Delegation Pools TenderTokens represent staked assets 1:1. TenderTokens are ERC-20 based tokens for EVM based networks and are rooted on the chain their underlying protocol also lives (e.g. Livepeer is on Arbitrum so tLPT is rooted on Arbitrum). For any collateral token there can be as many TenderTokens as there are node operators on that network, each TenderTokens acts as a delegation pool towards a node operator. A delegation pool acts a proxy for delegators to stake towards a node operator while gaining the full benefits provided by Tenderize. By doing this instead of aggregating stake towards a basket of node operators we ensure that Tenderize doesn't cause centralisation risks to the underlying protocol. This design takes a bottom-up approach as it still allows anyone to easily build liquid staking pools and aggregators by combining different TenderTokens from different delegation pools. Each delegation pool has a stake ratio $r$ based on how much collateral is staked $c_i$ in it relative to the collateral in all delegation pools $C$ for a specific collateral token $r_i = \frac{c_i}{C}$ . ![](https://i.imgur.com/8gAInek.png) When collateral is deposited in Tenderize towards a node operator the amount of TenderTokens minted in return is equal to the effective amount of collateral that will be staked through Tenderize in the underlying protocol. #### 3.4.2 Liquid Unstaking As a delegation pool, Tenderize uses the primary staking markets to the fullest. We already mentioned that collateral is staked through Tenderize, but also unstaking from the underlying protocol is possible. This is done by burning an amount of TenderTokens and unstaking an equivalent amount of collateral in return. Once the unstaking period in the underlying protocol finishes the funds can be withdrawn. This is very much desirable such that a liquidity pool isn't the only exit option. To take this a step further, pending withdrawals are represented as non-fungible assets under the ERC-721 standard. The owner of the NFT will be eligible to execute the withdrawal once the unbonding period completes, upon withdrawal the NFT is burnt. This enables trading (e.g. OTC) of pending withdrawals to acquire instant liquidity, even when unstaking. ![](https://i.imgur.com/O0KDsGb.png) #### 3.4.3 Elastic Supply TenderToken supply is elastic and can grow or shrink based on whether the node operator for a delegation pool earns staking rewards for providing valuable work, or is being slashed due to bad behaviour. Elastic supply tokens are useful because user balances grow or shrink automatically. This is done effectively through share based accounting so that user balances wouldn't have to be updated individually. A user's TenderToken balance is equal to the user's equity share of the delegation pool's staked collateral. $balance_u = collateral_i * \frac{shares_u}{totalShares_i}$ When a user deposits collateral or unstakes TenderTokens the shares received or burnt is calculated according to the actual exchange rate. $fx = \frac{totalShares}{collateral}$ $shares = amount * fx = amount * \frac{totalShares_i}{collateral_i}$ Here's an example where Alice and Bob both hold differend equity shares of a TenderTokens delegation pool. Initially the total amount of collateral is 300 tokens for 150 total shares. As 100 rewards come in the collateral changes to 400 and the calculated balance for Alice and Bob is automatically updated. ![](https://i.imgur.com/5CDIlgO.png) #### 3.4.4 Protocol Fee To support growth of the Tenderize protocol a configurable fee can be charged on staking rewards that go to the Tenderize treasury. ### 3.5 Protocol Risks #### 3.5.1 Slashing Risk Node operators and its delegators in various web3 protocols are often subject to staking penalties and slashing when behaving misconducting (e.g. long down-time, performing bad work, ...). While Tenderize doesn't mitigate the risk as derivatives are bound to their node operator, the fees charged by the Tenderize protocol could be used as insurance and the node operator blacklisted in case of consistent misconduct. #### 3.5.2 Smart Contract Security There is an inherent risk that any piece of software could contain vulnerabilities or bugs. However security is a top priority for the Tenderize protocol. Therefore the smart contract code is fully open source for anyone to verify and its releases should have underwent security audits. #### 3.5.3 Arbitrary Node Commissions Node operators on the network can arbitrarily change their commission rates to draw rewards from delegations through Tenderize. This problem already exists for delegators in the underlying protocols as is however, Tenderize acts as another delegator. However should this happen, it would likely cause staked assets to move towards different node operators offering more favorable rates. The risk for users can be mitigated by providing the necessary UX and tooling to offer an optimal and informed experience. ### 3.6 Conclusion Liquid staking has recently seen a big rise in adoption thanks to stETH, but existing designs come with a few shortcomings and don't create much utility for node operators themselves. We described a design for liquid staking as a middleware protocol rather than an aggregator. By retaining the existing workflows of the underlying protocols we can achieve a protocol that unlocks new use cases and capabilities for staked assets while remaining neutral, permisionless and avoiding centralisation risks. ## 4. TenderSwap - Efficient Liquidity ### 4.1 Abstract Automated Market Makers (AMMs) as popularized by Uniswap have completely changed the way in which digital assets are exchanged by removing the need for intermediaries (active makers and takers which exchange buy/sell orders in an exchange). Instead it relies on a reserve pool of two or more assets and an invariant curve to determine the relationships of the tokens in a pool. The larger a trade relative to the total size of the reserves, the more price slippage will occur. A later iteration by Curve.fi saw the birth of StableSwap, an iteration of AMMs that provides more capital efficiency for stablecoins by using a different mathematical curve. ### 4.2 Motivation While these AMMs have revolutionized the world of DeFi each in their own regard, neither is a particular great fit for Liquid Staking Derivatives. One characteristic of most Liquid Staking Derivatives is that they have an elastic supply which provides usability challenges when wanting to use existing solutions. Furthermore, permissionless staking derivates were previously deemed impossible because of non-fungability of staked assets between validators, TenderSwap solves this problem in a way that doesn't result in fractionalized liquidity. Tenderize achieves high capital efficiency by effectively sharing collateral liquidity among different derivates. ### 4.3 Solution TenderSwap provides instant liquidity between TenderTokens and collateral with minimal slippage and high capital efficiency. TenderSwap pools work natively with tokens that have an elastic supply as many liquid staking derivatives do, which eliminates many usability challenges for these tokens in existing AMM protocols. It's biggest game-changer however is that despite the possiblity of there being multiple TenderTokens (one per node) for a single collateral token and that these TenderTokens are non-fungible among eachother (nodes perform differently), TenderSwap is able to effectively share collateral liquidity among TenderTokens rather than having separate liquidity pools for each TenderToken. #### 4.3.1 TenderPools In TenderSwap each collateral token is connected to a number of registered derivatives to make up a **TenderPool**. The collateral asset acts as the root asset through which trades between derivatives, or from derivative to collateral and vice versa can happen. ![TenderPool](https://i.imgur.com/Cqq1nPu.png) #### 4.3.2 Debt Ratio Each token inside a TenderPool exists as a balance sheet statement. A balance sheet contains **assets**, the pool balance of a particular token, and **liabilities**, the amount of debt outstanding to liquidity providers. The ratio between assets $A$ and liabilities $L$ is the **debt ratio** $d$ and is calculated as $d=\frac{L}{A}$. If the debt ratio is greater than 1 there is an outstanding debt to liquidity providers. This debt is covered by allowing liquidity providers to withdraw from a token inside a single TenderPool of which the debt ratio is smaller than 1. ![balance sheet](https://i.imgur.com/iNjfOqw.png) When a swap happens from e.g. tLPT_1 to LPT, the assets of tLPT_1 would increase and those of LPT would decrease, as tLPT_1 tokens are added and LPT is removed. The liabilities would remain the same. Thus the debt ratio of LPT would decrease and that of tLPT_1 increase. #### 4.3.3 Stake Ratio The stake ratio $r$ is a value between 0 and 1 that represents how much collateral is staked for a TenderToken relative to all the amount of a particular collateral staked across all its derivatives. It is used to determine the fractional amount of assets of collateral a particular TenderToken is able to use when swapping to or from it. While this doesn't affect the debt ratio for collateral directly, it does affect the impact a swap has on its delta, based on the amount of collateral assets that can be used. This means that TenderTokens that have less value locked will incur a bit more slippage in order to fairly share collateral among derivatives in a TenderPool. The *effective* assets and liabilities for collateral that can be used during a swap are defined as $A_c = A_c * r$ $L_c = L_c * r$ The stake ratio is fetched through an on-chain oracle, in the case of Tenderize from the Tenderizer contract for the collateral. ![](https://i.imgur.com/1t3WL5X.png) #### 4.3.5 Debt Ratio Decay Instead of recalculating the debt ratio after a swap there should be a decay from the effective debt ratio after the swap back to the newly calculated available assets in underlying tokens according to the stake ratio. This acts like a gradual dutch auction (GDA) whereby slippage decreases over time capped at it's max effective debt ratio until a buyer steps in. #### 4.3.5 Price Function TenderTokens are exchangeable 1:1 for their collateral and vice versa so we consider the exchange rate to be fixed. Instead the execution price is totally determined by slippage. For swapping an amount of $a_i$ from token $i$ to $j$ the amount received $y$ is calculated as the input amount minus the slippage $S_{i_{}\rightarrow{j}}$ : $f(y_{i}{_\rightarrow}{_j}) = a_i - a_i * S_{i_{}\rightarrow{j}}$ This can be done because on one hand collateral is always depositable in the Tenderizer to receive TenderTokens 1:1. On the other hand TenderTokens themselves can be unstaked on the primary staking market for their collateral which only carries a time value of money risk. This negative carry offsets any possible premium from TenderTokens being a productive asset. #### 4.3.6 Slippage As determined earlier, the amount of tokens you receive when you swap an amount $a_i$ is determined by slippage. In TenderSwap slippage is calculated differently than in a constant product market maker. Slippage is calculated in function of the change in debt ratios between tokens in a TenderPool when making a swap.This encourages convergence of debt ratios towards equilibrium Since a swap consists out of the debt ratio changing for two tokens, the total slippage $S_{i_{}\rightarrow{j}}$ on a trade is calculated as the difference of the slippage that occurs for token $i$ and $j$ : $S_{i_{}\rightarrow{j}} = S_i - S_j$ Actions that converge the debt ratios for the two tokens will be given a reward ($S_{i_{}\rightarrow{j}}$ is negative). On the other hand, actions that move the debt ratio of the two tokens further from equilibrium will be charged a penalty ($S_{i_{}\rightarrow{j}}$ is positive). ##### Slippage Function The slippage function is a sigmoid function $s(d)$ that maps a tokens debt ratio $d$ to a slippage value between 0 and 1 for its balance sheet. We want to define $s(d)$ so that slippage increases in function of the debt ratio increasing, i.e. higher debt ratio means higher slippage. $s(d) = \frac{1}{1+ke^{-nx}}$ Here is an example of such function: ![](https://i.imgur.com/HlpqtYl.png) *$k$ and $n$ are constants, this function is not final merely acts as a representation for a sigmoid function. ##### Calculating slippage With the slippage function we can solve for the slippage on each tokens balance sheet by solving the following equation where $d$ is the debt ratio before the swap and $d'$ after the swap: $S = \frac{s(d') - s(d)}{\triangle{d}}$ $S_{i_{}\rightarrow{j}} = S_i - S_j = \frac{s(d_i') - s(d_i)}{\triangle{d_i}} - \frac{s(d_j') - s(d_j)}{\triangle{d_j}}$ #### 4.5.4 Swap Fee A configurable swap fee is charged on the output amount of the swap which is split to liquidity providers proportional to the liquidity provided. #### 4.5.5 Protocol Fee ## 5. Liquid Basket A liquid basket is made up of several of the individual derivatives tied to a node operator. ## 6. Protocol Owned Liquidity - Ensuring Stability ### 6.1 Abstract *Protocol owned liquidity (POL)* is a new approach to create liquidity on decentralised exchanges (e.g. Uniswap), pioneered by OlympusDAO. Instead of relying on constant token emissions to market participants for providing liquidity for assets, the protocol owned liquidity model instead utilises a *“bonding”* mechanism. Bonding essentially involves the protocol selling its native tokens ($TENDER) at a discount to buyers, who in exchange will provide another token (collateral or liquidity), which forms part of the protocol’s treasury. The treasury can then be deployed to provide liquidity directly to DEXs (earning trading fees), facilitate market operations like arbitrage and can be invested to generate returns. ### 6.2 Motivation *Protocoled Owned Liquidity* is an innovative solution to the mercenary capital problem, whereby protocols engage in a so-called “race to the bottom” to provide higher and higher incentives from token emissions to attract liquidity providers, in-turn diluting the value of the protocols through the high issuance of tokens. Once incentives decrease, mercenary capital can easily reallocate to where it is most profitable, leaving you with no liquidity and a heavily diluted value for the protocol. Instead *POL* ensures that the liquidity acquired is permanently allocated as part of the treasury. This in turns acts as value accrual for the token ($TENDER) rather than dilution. Liquid Staking Protocols are required to maintain a healthy amount of liquidity to operate effectively. This protects TenderToken holders and ensures there is always locked exit liquidity available and sufficient market depth for price oracles to work securely. By owning a sufficient amount of liquidity the protocol can also engage in facilitating market operations such as arbitrage to maintain price stability for TenderTokens. ### 6.3 Solution TenderSwap liquidity pools act like a fractional reserve for staked assets but utilising a price curve, they allow for instant liquidity between TenderTokens and collateral in both ways. To achieve sufficient reserves at all times, the Tenderize protocol will acquire liquidity by selling its native $TENDER token at a discount as long as a target reserve ratio isn't reached. #### Reserve Ratio The amount of *Protocol Owned Liquidity (POL)* should be in function of the amount of *Protocol Controlled Value (PCV)* and the *Target Reserve Ratio*. This ensures that the protocol always strives to maintain a specific amount of liquidity. #### Bonding Bonding allows Tenderize to acquire liquidity for TenderTokens by selling $TENDER at a discount in exchange for these assets (collateral and liquidity), with a preference for collateral. When a Bond is purchased, the purchaser is quoted with the amount of $TENDER tokens received for the given assets as well as a vesting term and bond price. ##### Bond Pricing A bond price is the price paid for the $TENDER tokens compared to the provided assets (collateral or liquidity). It determined by the market price of assets with a discount or premium applied to it ###### Discount / Premium The protocol will charge a discount on the bond price (the buyer pays less than the market price for $TENDER) when the Reserve Ratio is smaller than the Target Reserve Ratio. Bond purchasers will pay a premium (more than the market price for $TENDER) in case the Reserve Ratio is greater than the Target Reserve Ratio. The greater the divergence between Reserve Ratio and Target Reserve Ratio, the greater the premium and discounts are. ###### Bond Pricing for Collateral Bond pricing for collateral will be based on the market price for the collateral vs $TENDER with the addition of a discount or premium ###### Bond Pricing for Liquidity Because liquidity bears more risk than collateral it will be priced lower than collateral. The price for TenderToken part of the liquidity provided will be adjusted based on market conditions and a discounter for the time-risk involved in case they need to be unstaked #### Collateral Bonds #### Liquidity Bonds ### Permissionless Liquid Staking Design Goals - Liquid staking derivatives for any validator, rather than aggregation - Efficiently share collateral liquidity among derivatives to avoid liquidity fractionalisation - Allow for easy modular addition of new types of collateral by DAO approval - Allow for TenderTokens to easily integrate with other protocols to provide utility, adhere to existing standards (e.g. ERC-20) - Minimal trust assumptions, no DAO interventions needed for individual tenderTokens at the very least

Import from clipboard

Advanced permission required

Your current role can only read. Ask the system administrator to acquire write and comment permission.

This team is disabled

Sorry, this team is disabled. You can't edit this note.

This note is locked

Sorry, only owner can edit this note.

Reach the limit

Sorry, you've reached the max length this note can be.
Please reduce the content or divide it to more notes, thank you!

Import from Gist

Import from Snippet

or

Export to Snippet

Are you sure?

Do you really want to delete this note?
All users will lose their connection.

Create a note from template

Create a note from template

Oops...
This template is not available.
Upgrade
All
  • All
  • Team
No template found.

Create custom template

Upgrade

Delete template

Do you really want to delete this template?
Turn this template into a regular note and keep its content, versions, and comments.

This page need refresh

You have an incompatible client version.
Refresh to update.
New version available!
See releases notes here
Refresh to enjoy new features.
Your user state has changed.
Refresh to load new user state.

Sign in

Forgot password

or

By clicking below, you agree to our terms of service.

Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
Wallet ( )
Connect another wallet

New to HackMD? Sign up

Help

  • English
  • 中文
  • Français
  • Deutsch
  • 日本語
  • Español
  • Català
  • Ελληνικά
  • Português
  • italiano
  • Türkçe
  • Русский
  • Nederlands
  • hrvatski jezik
  • język polski
  • Українська
  • हिन्दी
  • svenska
  • Esperanto
  • dansk

Documents

Help & Tutorial

How to use Book mode

How to use Slide mode

API Docs

Edit in VSCode

Install browser extension

Get in Touch

Feedback

Discord

Send us email

Resources

Releases

Pricing

Blog

Policy

Terms

Privacy

Cheatsheet

Syntax Example Reference
# Header Header 基本排版
- Unordered List
  • Unordered List
1. Ordered List
  1. Ordered List
- [ ] Todo List
  • Todo List
> Blockquote
Blockquote
**Bold font** Bold font
*Italics font* Italics font
~~Strikethrough~~ Strikethrough
19^th^ 19th
H~2~O H2O
++Inserted text++ Inserted text
==Marked text== Marked text
[link text](https:// "title") Link
![image alt](https:// "title") Image
`Code` Code 在筆記中貼入程式碼
```javascript
var i = 0;
```
var i = 0;
:smile: :smile: Emoji list
{%youtube youtube_id %} Externals
$L^aT_eX$ LaTeX
:::info
This is a alert area.
:::

This is a alert area.

Versions and GitHub Sync
Upgrade to Prime Plan

  • Edit version name
  • Delete

revision author avatar     named on  

More Less

No updates to save
Compare
    Choose a version
    No search result
    Version not found
Sign in to link this note to GitHub
Learn more
This note is not linked with GitHub
 

Feedback

Submission failed, please try again

Thanks for your support.

On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

Please give us some advice and help us improve HackMD.

 

Thanks for your feedback

Remove version name

Do you want to remove this version name and description?

Transfer ownership

Transfer to
    Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

      Link with GitHub

      Please authorize HackMD on GitHub
      • Please sign in to GitHub and install the HackMD app on your GitHub repo.
      • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
      Learn more  Sign in to GitHub

      Push the note to GitHub Push to GitHub Pull a file from GitHub

        Authorize again
       

      Choose which file to push to

      Select repo
      Refresh Authorize more repos
      Select branch
      Select file
      Select branch
      Choose version(s) to push
      • Save a new version and push
      • Choose from existing versions
      Include title and tags
      Available push count

      Upgrade

      Pull from GitHub

       
      File from GitHub
      File from HackMD

      GitHub Link Settings

      File linked

      Linked by
      File path
      Last synced branch
      Available push count

      Upgrade

      Danger Zone

      Unlink
      You will no longer receive notification when GitHub file changes after unlink.

      Syncing

      Push failed

      Push successfully