📜 [專欄新文章] Scaling Ethereum 參賽心得
✍️ Johnson
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Scaling Ethereum 是一場由 ETHGlobal 所舉辦的線上黑客松,也是我第一次參加與以太坊有關的黑客松活動,這篇文章就來分享一人參賽的過程與心得。
源起
一開始是在 telegram 群組中得知這場比賽的消息,因緣際會之下剛好有人想組隊參賽,於是就在報名截止的前一天一起跟著報名了。
報名的方式除了填一些基本資料外,最特別的是還要 stack 以太幣,也就是要傳送 0.01 顆以太幣給主辦方,規則是必須在比賽的最後,有提交作品的人才能贖回 0.01 顆以太幣,之後看到 meme 頻道有人留言:
When your project is incomplete but you submit to get back stake.
一方面,這確實也會激勵你好好把比賽完成,就算沒做完也要有些成果上去,這也是主辦方秉持的精神,他們認為大家來黑客松相互學習成長,競賽獎金則是其次。
獎金
比賽方式是由 25 個左右的贊助者(sponsor)分別提供獎金,每個 sponsor 都有錄製一段影片,說明怎麼獲得他們的獎金,大部分會要你使用他們開發的工具,或者必須跟 sponsor 在做的研究有關,去實作出創新的作品。可參考:Prizes — Scaling Ethereum
你的專案可以選擇要投入哪個 sponsor 的獎金,一個專案可以投入多個 sponsor 底下,這樣獲獎機會也會比較高。
我選擇的 sponsor 是 zkSync,他們的說明如下:
zkSync is a user-centric zkRollup developed by Matter Labs. It uses zero-knowledge proofs to keep data availability on mainnet to achieve exponentially lower transaction costs. You may have seen us powering projects such as payments and Gitcoin Grants. We are currently rapidly developing zkSync 2.0, which will feature EVM-compatibility in testnet May 2021, soon followed by zkPorter, our new exponential scalability solution.
PrizeszkSync will be awarding their Prizes as follows:
- 1 winner — 4,000 USDC
- 2 winners — 2,000 USDC
- 4 winners — 500 USDC
We encourage builders to utilize zkSync SDK’s, implemented in JavaScript/Typescript and Rust. Prizes will be awarded to projects that make it simpler and easier for non-technical users to use zkSync, other ideas include integrations of current tools such as in Gitcoin Grants and tools for easy mass payments and multi-sigs.
社群互動
這個 hackathon 很棒的地方是他把使用者體驗做的很好。每個人都會有自己的 dashboard 顯示目前專案的進度和一些訊息。
Check-In #1 和 Check-In #2 的階段會要你提供專案的構想,你隨時都可以修改。主辦方會看你提交的資訊,幫助你找到適合的 sponsor,或是給你一些建議,就算是一人參賽也能感受到回饋。
整個賽程期間,社群都是使用 discord 在互動,discord 裡頭有很多頻道,像是基本的大會報告的頻道,或是一些不重要的迷因、閒聊頻道都有。
每個 sponsor 也都有自己的頻道,我就會在 sponsor-zksync 的頻道詢問技術的問題,例如我想問問 zkSync 一些關於專案構想的意見:
Hi there, I want to build a gas fee relayer which make my ERC-20 token transfer without transaction fee, to be more precise, delegating gas payment by another party. I think this is done by GSN https://opengsn.org/ , but maybe it could built on L2 with zkSync? I’m not sure, could somebody give me some advice about this topic?
zkSync 團隊的人回應我:
This is an amazing idea! This can totally be built, as we support batching transactions which can be used for all kinds of creative things such as paying for transaction fees in an erc-20 token. Your idea seems like a combination of that and the gitcoin grants integration. To get started, I suggest you watch the short 10 minute presentation I made on using the SDK and batching. Looking forward to your project!!
在 Check-In #2 的時候,我提交新版的專案構想,有一個欄位是問:「目前專案遇到什麼阻礙?」我的問題應該是被主辦方貼給 zkSync 的團隊,於是 zkSync 的團隊成員就用 discord 私訊我,貼了一些程式碼教我怎麼使用他們的 Javascript SDK,這突如其來的救援也幫了大忙。
除此之外,主辦方每個禮拜都會寄 email 通知一些重要的活動,賽程期間舉辦了四個 Summits 研討會,邀請世界各地有名的以太坊開發者分享議題,主辦方還有一個自己的 TV 網頁,直播所有的線上活動。這些活動都有錄影,可以在 youtube 看到過去所有的演講內容:https://www.youtube.com/c/ETHGlobal/videos
因為我的作品是使用 zkSync 的 Javascript SDK 製作的,好像也只能投稿 zkSync 作為獎金的 sponsor,不過主辦方在最後一個禮拜,也寄 email 告訴我說可以多投稿不同的 sponsors 看看,他依據我的專案構想給我一些適合的 sponsors 作為參考。
不過最後我還是只投稿了 zkSync,有點懶著再看其他 sponsors 的文件,也覺得其他 sponsors 的題目需要花比較大的功夫才能完成,一個人能力有限,就做點簡單的東西就好。
關於我的專案 — Gas Relay Service
在以太坊的世界,每一筆交易都需要額外付一筆交易費,也就是以太坊的 gas fee。
我的專案是讓「收款人」能夠幫「付款人」支付以太坊的手續費。
在黑客松之前,我就想研究「第三方支付手續費」的議題,因此我大部分時間其實都在研究一般的 meta-transactions 是怎麼實作的,有興趣的人可以看看 simple meta-transactions 的原始碼:https://github.com/chnejohnson/simple-meta-transaction
之後我才開始玩 zkSync 的 SDK,並研究怎麼在 Layer 2 實現第三方支付手續費的問題,以下就附上作品連結以及簡單的專案介紹給有興趣的人參考:https://showcase.ethglobal.co/scaling/gas-relay-service-on-zksync
The target is that token sender can choose to find another account to pay for fee. The another account can be (1) the token receiver’s account, (2) sender’s another account, (3) third party’s account.
In this project, I finished the demo, which is the (1) above, that receiver pay gas fee for the sender.
有趣的是,我在研究 meta-transactions 時學到很多智能合約的寫法,結果在最後專案上都沒用到(沒寫到合約的程式),zkSync Javascript SDK 其實很簡單,他們的文件寫得很清楚。最後 Demo 還是用 zkSync 團隊的成品修改來的…XD。
所幸在沒有懂太多技術的前提下完成了這場黑客松的專案,成功贖回了 0.01 顆以太幣。
評審與決選
整個賽程來到最後一個禮拜,主辦方安排兩天的時間進行 Judges,使用 zoom 進行線上研討會,一個人基本上是 7 分鐘,前 4 分鐘播放 Demo 簡報,後三分鐘會有評審問問題。
第一個問題是說:「Demo 中你是使用 zkSync 的錢包網頁去操作,那實際上你做得部分是什麼?」
我就回答我在他們的網頁上加了一顆按鈕,使用他們的 SDK 做出 gas relay 的功能,還有一個後端的 server 去作 relay。
第二個問題大概是問:「什麼樣的情境下會需要由 receiver 幫 sender 支付 gas fee?」
我的回答是,在一般超商購物的情境,消費者通常只支付商品的價格,不會支付額外的交易費,我認為以太坊的手續費應該屬於軟體的營運成本,由賣方支付比較適合。那如果賣方希望手續費的成本是由消費者承擔,可以直接調高商品的價格。
當然,我英文講得零零落落,希望評審有聽懂就是了…
最後一場直播就是 Finale 決選,主辦方選出十二個隊伍,公開再 Demo 一次,以及提供線上觀眾詢問問題,至此整個賽程就差不多進入尾聲。
決選後的不久,主辦方就公布了這次有獲得獎金的隊伍,幸運拿到了 zkSync 頒發的小獎~
zkSync — Matter Labs
- Zeneth — 2000 USDC
- ZeroSwap — 1500 USDC
- Kangaroo — 500 USDC
- Gas Relay Service — 500 USDC
後記
這次的參賽隊伍中,Zeneth 跟我的主題非常相似:
Zeneth — Use Flashbots to enable arbitrary meta-transactions so EOAs can enter L2s without ETH
另一個我覺得有趣的專案是 Alexandria:
Alexandria — A dApp using STARKs to verify aspects of your identity without revealing more than you should
沒想到主辦方 ETHGlobal 下個月又要再舉辦一場黑客松,有興趣的人可以看看:https://defi.ethglobal.co/ ,這次的主題是 De-Fi。
最後,只要有到 ETHGlobal 的 TV 網頁參加 Summit 研討會的直播,就能夠獲得 POAP 勳章,它就是一個酷東西~😋
POAP: Proof of Attendance Protocol
Scaling Ethereum 參賽心得 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
同時也有6部Youtube影片,追蹤數超過15萬的網紅umino ASMR,也在其Youtube影片中提到,Hello, I am umino.Thank you for watching this video.This description uses Google Translate. People who don't understand Japanese can't understand wha...
「think of me心得」的推薦目錄:
- 關於think of me心得 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於think of me心得 在 Taipei Ethereum Meetup Facebook 的最讚貼文
- 關於think of me心得 在 CheckCheckCin Facebook 的精選貼文
- 關於think of me心得 在 umino ASMR Youtube 的最佳解答
- 關於think of me心得 在 七七聊美式動畫 Youtube 的精選貼文
- 關於think of me心得 在 MindBonnieSoul Youtube 的最佳貼文
- 關於think of me心得 在 [心得] 歌劇魅影-我心目中最完美的版本- 看板BROADWAY 的評價
- 關於think of me心得 在 集中討論#集中討論Red Taylor's Version 榜單與心得分享 - Dcard 的評價
- 關於think of me心得 在 那些電影教我的事- Lessons from Movies - Facebook 的評價
- 關於think of me心得 在 【EyeLevel學生和家長分享學習心得】 - Facebook 的評價
think of me心得 在 Taipei Ethereum Meetup Facebook 的最讚貼文
📜 [專欄新文章] Uniswap v3 Features Explained in Depth
✍️ 田少谷 Shao
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Once again the game-changing DEX 🦄 👑
Image source: https://uniswap.org/blog/uniswap-v3/
Outline
0. Intro1. Uniswap & AMM recap2. Ticks 3. Concentrated liquidity4. Range orders: reversible limit orders5. Impacts of v36. Conclusion
0. Intro
The announcement of Uniswap v3 is no doubt one of the most exciting news in the DeFi place recently 🔥🔥🔥
While most have talked about the impact v3 can potentially bring on the market, seldom explain the delicate implementation techniques to realize all those amazing features, such as concentrated liquidity, limit-order-like range orders, etc.
Since I’ve covered Uniswap v1 & v2 (if you happen to know Mandarin, here are v1 & v2), there’s no reason for me to not cover v3 as well ✅
Thus, this article aims to guide readers through Uniswap v3, based on their official whitepaper and examples made on the announcement page. However, one needs not to be an engineer, as not many codes are involved, nor a math major, as the math involved is definitely taught in your high school, to fully understand the following content 😊😊😊
If you really make it through but still don’t get shxt, feedbacks are welcomed! 🙏
There should be another article focusing on the codebase, so stay tuned and let’s get started with some background noise!
1. Uniswap & AMM recap
Before diving in, we have to first recap the uniqueness of Uniswap and compare it to traditional order book exchanges.
Uniswap v1 & v2 are a kind of AMMs (automated market marker) that follow the constant product equation x * y = k, with x & y stand for the amount of two tokens X and Y in a pool and k as a constant.
Comparing to order book exchanges, AMMs, such as the previous versions of Uniswap, offer quite a distinct user experience:
AMMs have pricing functions that offer the price for the two tokens, which make their users always price takers, while users of order book exchanges can be both makers or takers.
Uniswap as well as most AMMs have infinite liquidity¹, while order book exchanges don’t. The liquidity of Uniswap v1 & v2 is provided throughout the price range [0,∞]².
Uniswap as well as most AMMs have price slippage³ and it’s due to the pricing function, while there isn’t always price slippage on order book exchanges as long as an order is fulfilled within one tick.
In an order book, each price (whether in green or red) is a tick. Image source: https://ftx.com/trade/BTC-PERP
¹ though the price gets worse over time; AMM of constant sum such as mStable does not have infinite liquidity
² the range is in fact [-∞,∞], while a price in most cases won’t be negative
³ AMM of constant sum does not have price slippage
2. Tick
The whole innovation of Uniswap v3 starts from ticks.
For those unfamiliar with what is a tick:
Source: https://www.investopedia.com/terms/t/tick.asp
By slicing the price range [0,∞] into numerous granular ticks, trading on v3 is highly similar to trading on order book exchanges, with only three differences:
The price range of each tick is predefined by the system instead of being proposed by users.
Trades that happen within a tick still follows the pricing function of the AMM, while the equation has to be updated once the price crosses the tick.
Orders can be executed with any price within the price range, instead of being fulfilled at the same one price on order book exchanges.
With the tick design, Uniswap v3 possesses most of the merits of both AMM and an order book exchange! 💯💯💯
So, how is the price range of a tick decided?
This question is actually somewhat related to the tick explanation above: the minimum tick size for stocks trading above 1$ is one cent.
The underlying meaning of a tick size traditionally being one cent is that one cent (1% of 1$) is the basis point of price changes between ticks, ex: 1.02 — 1.01 = 0.1.
Uniswap v3 employs a similar idea: compared to the previous/next price, the price change should always be 0.01% = 1 basis point.
However, notice the difference is that in the traditional basis point, the price change is defined with subtraction, while here in Uniswap it’s division.
This is how price ranges of ticks are decided⁴:
Image source: https://uniswap.org/whitepaper-v3.pdf
With the above equation, the tick/price range can be recorded in the index form [i, i+1], instead of some crazy numbers such as 1.0001¹⁰⁰ = 1.0100496621.
As each price is the multiplication of 1.0001 of the previous price, the price change is always 1.0001 — 1 = 0.0001 = 0.01%.
For example, when i=1, p(1) = 1.0001; when i=2, p(2) = 1.00020001.
p(2) / p(1) = 1.00020001 / 1.0001 = 1.0001
See the connection between the traditional basis point 1 cent (=1% of 1$) and Uniswap v3’s basis point 0.01%?
Image source: https://tenor.com/view/coin-master-cool-gif-19748052
But sir, are prices really granular enough? There are many shitcoins with prices less than 0.000001$. Will such prices be covered as well?
Price range: max & min
To know if an extremely small price is covered or not, we have to figure out the max & min price range of v3 by looking into the spec: there is a int24 tick state variable in UniswapV3Pool.sol.
Image source: https://uniswap.org/whitepaper-v3.pdf
The reason for a signed integer int instead of an uint is that negative power represents prices less than 1 but greater than 0.
24 bits can cover the range between 1.0001 ^ (2²³ — 1) and 1.0001 ^ -(2)²³. Even Google cannot calculate such numbers, so allow me to offer smaller values to have a rough idea of the whole price range:
1.0001 ^ (2¹⁸) = 242,214,459,604.341
1.0001 ^ -(2¹⁷) = 0.000002031888943
I think it’s safe to say that with a int24 the range can cover > 99.99% of the prices of all assets in the universe 👌
⁴ For implementation concern, however, a square root is added to both sides of the equation.
How about finding out which tick does a price belong to?
Tick index from price
The answer to this question is rather easy, as we know that p(i) = 1.0001^i, simply takes a log with base 1.0001 on both sides of the equation⁴:
Image source: https://www.codecogs.com/latex/eqneditor.php
Let’s try this out, say we wanna find out the tick index of 1000000.
Image source: https://ncalculators.com/number-conversion/log-logarithm-calculator.htm
Now, 1.0001¹³⁸¹⁶² = 999,998.678087146. Voila!
⁵ This formula is also slightly modified to fit the real implementation usage.
3. Concentrated liquidity
Now that we know how ticks and price ranges are decided, let’s talk about how orders are executed in a tick, what is concentrated liquidity and how it enables v3 to compete with stablecoin-specialized DEXs (decentralized exchange), such as Curve, by improving the capital efficiency.
Concentrated liquidity means LPs (liquidity providers) can provide liquidity to any price range/tick at their wish, which causes the liquidity to be imbalanced in ticks.
As each tick has a different liquidity depth, the corresponding pricing function x * y = k also won’t be the same!
Each tick has its own liquidity depth. Image source: https://uniswap.org/blog/uniswap-v3/
Mmm… examples are always helpful for abstract descriptions 😂
Say the original pricing function is 100(x) * 1000(y) = 100000(k), with the price of X token 1000 / 100 = 10 and we’re now in the price range [9.08, 11.08].
If the liquidity of the price range [11.08, 13.08] is the same as [9.08, 11.08], we don’t have to modify the pricing function if the price goes from 10 to 11.08, which is the boundary between two ticks.
The price of X is 1052.63 / 95 = 11.08 when the equation is 1052.63 * 95 = 100000.
However, if the liquidity of the price range [11.08, 13.08] is two times that of the current range [9.08, 11.08], balances of x and y should be doubled, which makes the equation become 2105.26 * 220 = 400000, which is (1052.63 * 2) * (110 * 2) = (100000 * 2 * 2).
We can observe the following two points from the above example:
Trades always follow the pricing function x * y = k, while once the price crosses the current price range/tick, the liquidity/equation has to be updated.
√(x * y) = √k = L is how we represent the liquidity, as I say the liquidity of x * y = 400000 is two times the liquidity of x * y = 100000, as √(400000 / 100000) = 2.
What’s more, compared to liquidity on v1 & v2 is always spread across [0,∞], liquidity on v3 can be concentrated within certain price ranges and thus results in higher capital efficiency from traders’ swapping fees!
Let’s say if I provide liquidity in the range [1200, 2800], the capital efficiency will then be 4.24x higher than v2 with the range [0,∞] 😮😮😮 There’s a capital efficiency comparison calculator, make sure to try it out!
Image source: https://uniswap.org/blog/uniswap-v3/
It’s worth noticing that the concept of concentrated liquidity was proposed and already implemented by Kyper, prior to Uniswap, which is called Automated Price Reserve in their case.⁵
⁶ Thanks to Yenwen Feng for the information.
4. Range orders: reversible limit orders
As explained in the above section, LPs of v3 can provide liquidity to any price range/tick at their wish. Depending on the current price and the targeted price range, there are three scenarios:
current price < the targeted price range
current price > the targeted price range
current price belongs to the targeted price range
The first two scenarios are called range orders. They have unique characteristics and are essentially fee-earning reversible limit orders, which will be explained later.
The last case is the exact same liquidity providing mechanism as the previous versions: LPs provide liquidity in both tokens of the same value (= amount * price).
There’s also an identical product to the case: grid trading, a very powerful investment tool for a time of consolidation. Dunno what’s grid trading? Check out Binance’s explanation on this, as this topic won’t be covered!
In fact, LPs of Uniswap v1 & v2 are grid trading with a range of [0,∞] and the entry price as the baseline.
Range orders
To understand range orders, we’d have to first revisit how price is discovered on Uniswap with the equation x * y = k, for x & y stand for the amount of two tokens X and Y and k as a constant.
The price of X compared to Y is y / x, which means how many Y one can get for 1 unit of X, and vice versa the price of Y compared to X is x / y.
For the price of X to go up, y has to increase and x decrease.
With this pricing mechanism in mind, it’s example time!
Say an LP plans to place liquidity in the price range [15.625, 17.313], higher than the current price of X 10, when 100(x) * 1000(y) = 100000(k).
The price of X is 1250 / 80 = 15.625 when the equation is 80 * 1250 = 100000.
The price of X is 1315.789 / 76 = 17.313 when the equation is 76 * 1315.789 = 100000.
If now the price of X reaches 15.625, the only way for the price of X to go even higher is to further increase y and decrease x, which means exchanging a certain amount of X for Y.
Thus, to provide liquidity in the range [15.625, 17.313], an LP needs only to prepare 80 — 76 = 4 of X. If the price exceeds 17.313, all 4 X of the LP is swapped into 1315.789 — 1250 = 65.798 Y, and then the LP has nothing more to do with the pool, as his/her liquidity is drained.
What if the price stays in the range? It’s exactly what LPs would love to see, as they can earn swapping fees for all transactions in the range! Also, the balance of X will swing between [76, 80] and the balance of Y between [1250, 1315.789].
This might not be obvious, but the example above shows an interesting insight: if the liquidity of one token is provided, only when the token becomes more valuable will it be exchanged for the less valuable one.
…wut? 🤔
Remember that if 4 X is provided within [15.625, 17.313], only when the price of X goes up from 15.625 to 17.313 is 4 X gradually swapped into Y, the less valuable one!
What if the price of X drops back immediately after reaching 17.313? As X becomes less valuable, others are going to exchange Y for X.
The below image illustrates the scenario of DAI/USDC pair with a price range of [1.001, 1.002] well: the pool is always composed entirely of one token on both sides of the tick, while in the middle 1.001499⁶ is of both tokens.
Image source: https://uniswap.org/blog/uniswap-v3/
Similarly, to provide liquidity in a price range < current price, an LP has to prepare a certain amount of Y for others to exchange Y for X within the range.
To wrap up such an interesting feature, we know that:
Only one token is required for range orders.
Only when the current price is within the range of the range order can LP earn trading fees. This is the main reason why most people believe LPs of v3 have to monitor the price more actively to maximize their income, which also means that LPs of v3 have become arbitrageurs 🤯
I will be discussing more the impacts of v3 in 5. Impacts of v3.
⁷ 1.001499988 = √(1.0001 * 1.0002) is the geometric mean of 1.0001 and 1.0002. The implication is that the geometric mean of two prices is the average execution price within the range of the two prices.
Reversible limit orders
As the example in the last section demonstrates, if there is 4 X in range [15.625, 17.313], the 4 X will be completely converted into 65.798 Y when the price goes over 17.313.
We all know that a price can stay in a wide range such as [10, 11] for quite some time, while it’s unlikely so in a narrow range such as [15.625, 15.626].
Thus, if an LP provides liquidity in [15.625, 15.626], we can expect that once the price of X goes over 15.625 and immediately also 15.626, and does not drop back, all X are then forever converted into Y.
The concept of having a targeted price and the order will be executed after the price is crossed is exactly the concept of limit orders! The only difference is that if the range of a range order is not narrow enough, it’s highly possible that the conversion of tokens will be reverted once the price falls back to the range.
As price ranges follow the equation p(i) = 1.0001 ^ i, the range can be quite narrow and a range order can thus effectively serve as a limit order:
When i = 27490, 1.0001²⁷⁴⁹⁰ = 15.6248.⁸
When i = 27491, 1.0001²⁷⁴⁹¹ = 15.6264.⁸
A range of 0.0016 is not THAT narrow but can certainly satisfy most limit order use cases!
⁸ As mentioned previously in note #4, there is a square root in the equation of the price and index, thus the numbers here are for explantion only.
5. Impacts of v3
Higher capital efficiency, LPs become arbitrageurs… as v3 has made tons of radical changes, I’d like to summarize my personal takes of the impacts of v3:
Higher capital efficiency makes one of the most frequently considered indices in DeFi: TVL, total value locked, becomes less meaningful, as 1$ on Uniswap v3 might have the same effect as 100$ or even 2000$ on v2.
The ease of spot exchanging between spot exchanges used to be a huge advantage of spot markets over derivative markets. As LPs will take up the role of arbitrageurs and arbitraging is more likely to happen on v3 itself other than between DEXs, this gap is narrowed … to what extent? No idea though.
LP strategies and the aggregation of NFT of Uniswap v3 liquidity token are becoming the blue ocean for new DeFi startups: see Visor and Lixir. In fact, this might be the turning point for both DeFi and NFT: the two main reasons of blockchain going mainstream now come to the alignment of interest: solving the $$ problem 😏😏😏
In the right venue, which means a place where transaction fees are low enough, such as Optimism, we might see Algo trading firms coming in to share the market of designing LP strategies on Uniswap v3, as I believe Algo trading is way stronger than on-chain strategies or DAO voting to add liquidity that sort of thing.
After reading this article by Parsec.finance: The Dex to Rule Them All, I cannot help but wonder: maybe there is going to be centralized crypto exchanges adopting v3’s approach. The reason is that since orders of LPs in the same tick are executed pro-rata, the endless front-running speeding-competition issue in the Algo trading world, to some degree, is… solved? 🤔
Anyway, personal opinions can be biased and seriously wrong 🙈 I’m merely throwing out a sprat to catch a whale. Having a different voice? Leave your comment down below!
6. Conclusion
That was kinda tough, isn’t it? Glad you make it through here 🥂🥂🥂
There are actually many more details and also a huge section of Oracle yet to be covered. However, since this article is more about features and targeting normal DeFi users, I’ll leave those to the next one; hope there is one 😅
If you have any doubt or find any mistake, please feel free to reach out to me and I’d try to reply AFAP!
Stay tuned and in the meantime let’s wait and see how Uniswap v3 is again pioneering the innovation of DeFi 🌟
Uniswap v3 Features Explained in Depth was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
think of me心得 在 CheckCheckCin Facebook 的精選貼文
【浪漫告白】還有三天就到情人節
⭐花你準備了沒有?
⭐你知道哪一種花適合她嗎?
#星期四食材
#一句激嬲女朋友
你似多肉植物
女:你覺得我似咩花?玫瑰花咁高貴?向日葵咁陽光?
男:似植物得唔得?
女:都可以呀!係邊種呀?
男:多肉植物。
然後,我嬲咗佢。
多肉植物其實很可愛,不過女生們還愛花多一點吧!作為男朋友,送花給女朋友你有甚麼心得呢?從中醫角度來看,花有不同食療作用,按著女生的體質送贈合適花茶就最體貼了!
玫瑰花
功效:性溫,具理氣解鬱、和血散瘀的功效。
適合體質:壓力大,不時唉聲嘆氣的她。
小黃菊
功效:性涼,具疏散風熱、明目的功效。
適合體質:常對著電腦工作、眼睛乾澀的她。
茉莉花
功效:性溫,有理氣解鬱、紓緩胸悶不適的功效。
適合體質:心情鬱悶、容易胃痛噯氣的她。
洛神花
功效:性寒,有清熱、消滯、養顏的功效。
適合體質:心浮氣躁、食慾不振的她。
留言或按讚👍🏻支持一下我們吧!❤️ 歡迎 Follow 我們獲得更多養生資訊。
#PhraseThatIrritatesTheGirlfriend
You look like a succulent
Girlfriend: If I were a flower, how would you describe me? An elegant rose? A sunny sunflower?
Boyfriend: How about a plant?
Girlfriend: Sure! What is it?
Boyfriend: Succulent.
Just like that, I became upset.
Succulents are adorable, but girls do love flowers more! As a boyfriend, do you have experience buying flower bouquets for your girlfriend? From the perspective of Chinese Medicine, different flowers have different medicinal values. It would be sweet for you to buy some floral tea for your girlfriend based on her body constitution!
Rose
Effects: Warm in nature, can regulate qi and improve mood as well as dispel bruising.
Suitable body type: For ladies who think excessively and frequently sigh.
Chrysanthemum
Effects: Cool in nature, clears the heat and improves vision.
Suitable body type: For ladies who often work at the computer with dry eyes.
Jasmine
Effects: Warm in nature, regulates qi and improves mood. Relieves tightness in chest.
Suitable body type: For ladies who are often depressed, with frequent stomach pain and burps.
Roselle
Effects: Cold in nature, helps to clear heat, relieve indigestion and improve skin.
Suitable body type: For ladies who are irritable and have poor appetite.
Comment below or like 👍🏻 this post to support us. ❤️ Follow us for more healthy living tips.
#男 #女 #我有壓力 #我煩躁 #我胖了 #氣滯 #血瘀
think of me心得 在 umino ASMR Youtube 的最佳解答
Hello, I am umino.Thank you for watching this video.This description uses Google Translate.
People who don't understand Japanese can't understand what I'm talking about in this video. So I will explain it in the summary column.
日本語が分からない人はこの動画で私が喋っていることが全く理解できないと思う。なので概要欄の方で説明をします。
It looks hot in my fleece, but I shot it in winter. When I was wondering what to post, I found this video in my stock. I decided to publish this video because the sound was strong and it sounded nice.
フリースを着てて暑そうだけど、撮影したのは冬だよ。何を投稿しようか悩んでた所、ストックの中からこの動画を発見した。音が強くていい風に聴こえたのでこの動画を公開することに決めた。
I often don't hear good sound right after shooting, but sometimes it sounds good after a while. This is what I call ASMR knowledge. I can't make such discoveries without listening to it when some time has passed. There are too many files and it's a hassle to check everything. Whenever I don't hear a good sound, it never goes out of my life. I don't post too many videos, so I'm worried about having too much stock.
撮影直後はあまりいい音に聴こえないことがよくあるんだけど、少し時間が経つといい音に聴こえることもあるんだ。これを私はASMRの心得と呼んでいる。少し時間が経った時に聴かないとこういう発見はできないんだけどね。ファイルがありすぎて全部を確認するのが面倒なんだ。いつまで経ってもいい音に聴こえない時は一生世に出ることはないんだ。あまり動画を投稿しないのでストックが貯まり過ぎることが悩みです。
There isn't much demand for posting ASMR videos every day. When I started posting videos, I posted them every day, but nobody saw them. that's sad. At that time, people who knew me wouldn't watch my video anymore. that's sad. I'm sad when my old friend was married before I knew it. No, maybe not. Even if a friend gets married, it doesn't matter to my life. Perhaps the saddest thing is what I'm saying. It's a good idea to write in your comments the sad things that everyone has done recently. Let's all comfort each other watching the video.
ASMR動画の毎日投稿ってあまり需要ないよね。私も動画投稿を始めた当初は毎日投稿してたんだけど、誰も見てなかったよ。悲しいね。その頃、私を知ってた人は今はもう私の動画を見てないんじゃないかな。悲しいね。昔の友人がいつの間にか結婚してた時くらい悲しいね。いや、そうでもないかな。友人が結婚しようと自分の人生に変わりはないからね。もしかして一番悲しいのは自分が言っていることなのかもしれない。みんなも最近あった悲しいことをコメントに書くといいよ。動画を見てるみんなで慰め合おうじゃないか。
Now that YouTuber is saturated, it seems that the material for video is already exhausted. I don't know much about YouTuber overseas, but what about the actual situation? In Japan...not to mention...
YouTuberというものが飽和してる今、動画のネタは既に枯渇してるのではないか、という話もしたよ。海外のYouTuberのことはよく知らないんだけど、実際どうなんだろう。日本では…言うまでもないか…。
Isn't it hard to chase someone's video every day? Time is all given equally and you have to use that time to watch the video. Some people may be doing something while watching the video in parallel. I think some people feel obliged to watch videos. Many YouTuber videos are long, and it's hard to see.
毎日誰かの動画を追っかけるのって大変じゃない?時間はみんな平等に与えられるものであって、その時間を切り詰めて動画を見なければならない。何かをしながら動画を見たり、動画を見ることが義務になってる人もいるんじゃないか?YouTuberの動画は長いものも多いし、見る方も大変そうだ。
It's amazing to continue every day. I forget even eating yogurt every day. I could only take the medicine I should take three times a day, twice. You may have experienced such a thing. With it. There is a saying in Japan that continuity is power. It's important to keep going. I poop every day. That is, bowel movements are good. It proves that the intestinal environment supports my daily life. But my sleep is light. Please write in your comments that everyone is continuing every day. Don't write poo. That is because I have already said.
毎日継続することって凄いよね。私は毎日ヨーグルトを食べることすら忘れる。1日に3回飲まないといけない薬を2回しか飲めなかった…そんなこと経験したことがあるだろう。それと一緒だ。日本には継続は力なりという名言がある。どんなことでも継続することが重要なのだ。私は毎日ウンコをしてる。それすなわち快便ということである。腸内環境が私の日々の生活を支えているということを証明してる。だが眠りは浅い。みんなも毎日継続していることをコメントに書いてほしい。ウンコはダメだ。それはもう私が言ったからである。
Good night.
おやすみの。
イヤホンまたはヘッドホンをつけてお楽しみください。もし動画が良かったら高評価を押していただけると励みになります。
SNS
Twitter: https://goo.gl/Y9uFpW
Twitter(通知用): https://goo.gl/WHEa8c
Instagram: https://goo.gl/sL8M1r
サブチャンネル: https://goo.gl/C7yDgn
無劣化音声の購入はこちらから
https://bit.ly/2ktOOjm
Copyright © 2017 UMINO ASMR All Rights Reserved.

think of me心得 在 七七聊美式動畫 Youtube 的精選貼文
Hi大家好我是七七
SUF正式完結了!
我們來聊一下啊!
想要討論也歡迎留言在下面我們相討論喔!
===歌詞與翻譯===
《Love like you》
If I could begin to be
如果我能夠成為
Half of what you think of me
你理想中一半的我
I could do about anything
我什麼都願意去做
I could even learn how to love
我甚至能去學如何去愛
When I see the way you act
當我看見你的舉動
Wondering when I'm coming back
不知我何時才能回神
I could do about anything
我什麼都願意去做
I could even learn how to love like you
我甚至能去學如何像你一樣的去愛
Love like you
像你一樣的去愛
I always thought I might be bad
我總是在思考,我可能很差勁
Now I'm sure that it's true
如今我確定那是真的
'cause I think you're so good
全因我覺得你是如此完美
And I'm nothing like you
而我根本比不上你
Look at you go
看著快速成長的你
I just adore you
我只能在一旁愛慕著你
I wish that I knew
我希望我能知道
What makes you think I'm so special
到底是什麼讓你覺得我如此特別
If I could begin to do
如果我能開始嘗試
Something that does right by you
什麼能與你相提並論的事
I would do about anything
我將會去努力嘗試
I would even learn how to love
甚至會去學習如何去愛
When I see the way you look
當終於我明白你的想法時
Shaken by how long it took
才訝異到許多時光都已流逝
I could do about anything
我什麼都願意去做
I could even learn how to love like you
我甚至能去學如何像你一樣的去愛
Love like you
像你一樣的去愛
Love me like you
像你一樣的去愛我
《Being human》
Just a little time
等一下
Just a little something else instead
只是其他一些東西
Just a little time
等一下
Just a little something up ahead
前面有一點東西
I'm dreaming of being... being... being...
我夢想著成為...成為...成為...
Being human...
成為人類...
Just a little time
等一下
Just a little something that I need
我只需要一點東西
Just a little time
等一下
Just a little feeling gaining speed
只是一點點感覺正在加速
I'm dreaming of going... going... going...
我夢想著去...去...去...
Going somewhere and...
去某個地方...
Being... being... being...
成為...成為...成為...
Being human...
----------合作邀約請洽----------
Email : nov19921129@gmail.com
---------Plz Follow Me---------
FB: https://goo.gl/TR4qT9
IG: https://goo.gl/DJdkYz

think of me心得 在 MindBonnieSoul Youtube 的最佳貼文
Remember to like and subscribe to MindBonnieSoul and turn on your notification bell!
www.MindBonnieSoul.com
First ever podcast with my good friend Maisie who is a Life Coach and Mindfulness Coach! Sit back, relax, close your eyes, and meditate with her.
Whether you are feeling stressed, anxious, restless, or you simply want to relax your mind & body, take a few minutes to explore the power of mindful breathing with me through my mindfulness breathing meditation!
While I was working towards my Certificate in Mindfulness Based Stress Reduction, I learnt different ways to incorporate mindfulness in my everyday life. Whether it was through mindful movements, mindful eating, mindful listening, or simply mindful breathing, it allowed me to connect and ground both my mind & body with the present moment.
Benefits of Mindful Breathing
1. Reduces stress
2. Decreases anxiety
3. Neutralises negative emotions
4. Ignites calmness
5. Increases patience
6. Raises self awareness
7. Relaxes the body and mind
8. Allows you to slow down
9. Fosters resilience
10. Experience the present moment
Mindfulness, as defined by Jon Kabat-Zinn, founder of MBSR is “paying attention in a particular way, on purpose, in the present moment, and non-judgmentally”. Share this mindful experience with anyone who you think could benefit from it !
Yours truly,
The Maisie Lining
#themaisielining #lifecoach
@MaisieKwong @TheMaisieLining
無論您感到壓力,焦慮,焦躁不安,還是只是想放鬆身心,請花幾分鐘時間, 通過正念呼吸冥想, 來探索正念呼吸的力量!
當我努力獲得 “正念減壓” 證書時,我學會了將正念融入日常生活的不同方法。無論是通過正念運動,正念飲食,正念聆聽,還是只是簡單地呼吸,它都使我能夠和身體保持聯繫,並使自己與當前時刻保持聯繫。
正念呼吸的好處:
1.減輕壓力
2.減輕焦慮
3.消除負面情緒
4.點燃平靜
5.增加耐心
6.提高自我意識
7.放鬆身心
8.讓你放慢腳步
9.增強韌性
10.體驗當下
你可以和任何人分享這種心得的體會!

think of me心得 在 集中討論#集中討論Red Taylor's Version 榜單與心得分享 - Dcard 的推薦與評價
#3 I bet you think about me 這是一首很可愛的歌,不是完全責怪前任的歌,而是我敢打賭,像我這麼好的女孩,你一定無法忘記我,就算你要結婚了,看到 ... ... <看更多>
think of me心得 在 那些電影教我的事- Lessons from Movies - Facebook 的推薦與評價
I never thought loving you would be easy, but I knew ... 不同角色動畫化時的心得,還有特別介紹五條老師、兩 ... to care about what you think about me. ... <看更多>
think of me心得 在 [心得] 歌劇魅影-我心目中最完美的版本- 看板BROADWAY 的推薦與評價
其實這是第一次看現場的歌劇魅影,但回來後瘋狂找相關影音的結果
不管怎麼聽都是最愛小先生和Claire的版本呀~~~(大心
(BTW,看了大家討論才知道,原來這次來台的還有替補女主角;
我是聽9/20下午的,應該是Claire沒錯吧?)
現場聽音樂劇的震撼真的是令人沉醉不已,令人久久無法忘懷
聽完到現在一周了還在中毒狀態XD
尤其歌劇魅影的音樂真的是從頭到尾都好聽,每一首的旋律都很鮮活
勝過之前聽的變身怪醫(Jackle & Hyde)
(BTW,後來才發現當時看的變身怪醫,主角也是小先生演的耶~~~瞬間對他充滿了愛意XD)
小先生歌聲中釋放出來的情感能量非常的豐沛且澎湃;憤怒的時候又聲勢懾人
完全能夠將魅影內心的深刻糾葛和壓抑的情感傳達到觀眾的心中
回來後查了才知他是演了兩千多次的魅影,不禁肅然起敬XD
聽了其他版本的魅影,儘管歌唱的功力也很好,但總覺得少了那種味道
那種只有小先生能夠傳達出來的味道和情感轉折
克萊兒的聲音也非常美,在渾厚能量強大的同時還非常的柔美婉轉
相較之下覺得莎拉布萊曼的聲音就比較低沉,少了Claire的那種溫柔
(這是個人意見啦~或許每個人感覺不同)
飾演拉烏爾的演員超帥啊XDD
(雖然對他的愛意還是沒有勝過小先生的魅影)
他在think of me這首歌當中首次開口,也是令人驚豔
當下就覺得好棒這齣每個人都好會唱好感動~~~~~(雖然這是廢話)
其實最開始的拍賣會,還覺得怎麼這麼冗又無聊
(以前看過歌劇魅影的電影但劇情全部忘光光)
但吊燈一出現,交響樂演奏出氣勢磅礡的主題曲the phantom of the opera時
立刻就震懾不已
搭配華麗的舞台效果,真的是非常令人難忘的饗宴
雖然3800真的很貴而且演員的臉也看不太清楚QQ 但是整場看下來也算是值得
到現在還在一聽再聽新加坡的版本,因為班底是和這次來台一樣的XD
反正我就是只要聽小先生和Claire的版本啦!!其他的我都不喜歡不喜歡~~~
就算是最原始的莎拉布萊曼版本我也不喜歡~~~(甚至我覺得這版魅影唱得沒有很好)
現場我也沒有買原聲帶甚麼的,因為知道不會有一樣的版本
不過昨天倒是又找出了電影版來看
只能說...畢竟還是電影
女主角唱得還算不錯了,但兩個男主真的是....恩.....
但雖然魅影歌聲不怎麼樣,卻長得超帥啊啊(這真的是魅影該有的樣子嗎?)
面具拿下來後的樣子倒也有恐怖到就是了XD
歌劇魅影的電影和音樂劇一樣,蘊藏了非常動人且深刻的情感,令人一再回味。
魅影這個角色的深情、悲傷與晦暗是不須贅述了,這一切都透過悠揚的樂聲和演員的
聲音表情揮灑得淋漓盡致。音樂猴子奏出的淡淡輕音樂,和masquerade是一樣的旋律;然
而後者輕快愉悅,前者卻透著好深好深的惆悵與哀愁。尤其是在結尾時,在傷心無奈之下
放走愛人與情敵的魅影,極致輕柔地和著這首曲子時,直叫人心碎。在全劇最終,再用盡
全身的力氣歌詠出it's over, the music of the night,那所有洶湧的情感與愛,都在
此傾洩而出了。
小克在墓園裡思念父親時所歌的曲調,也是令人愁思無限。挖出電影版之後才認真
地看了歌詞,多麼悵然,那種無能為力、無可挽回的痛楚,搭配著整齣劇從頭至尾滿溢的
豐富情感,讓人有種悲傷無止盡的感覺。而這種悲傷,是從戲裡一路延伸到戲外的,餘韻
無窮,使人低迴不已。
看到有版友跑去跟演員合照覺得好羨慕Q__Q
當時完全沒想到可以做這件事,因為小巨蛋人這麼多,所以覺得一定不可能...
(但當時我也沒時間就是了啦哈哈)
不過前幾年的變身怪醫就有跟幾個配角演員合照XD
(雖然我一直不知道他們演的是甚麼角色)
真的好想再看一次現場的啊啊啊~~~~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.79.22.208
※ 文章網址: https://www.ptt.cc/bbs/BROADWAY/M.1411800716.A.05B.html
※ 編輯: hansinell (125.230.83.105), 09/27/2014 23:13:16
... <看更多>