#2021年度運勢 | 流年靈數11 📣📣📣
.
反正都是一個月寫一篇,在每月運勢跟流年靈數之間,我果斷選擇後者──反正應該沒多少人跟我一樣真的把年度運勢寫成年度運勢吧www
.
#喜歡的話歡迎分享咪子港穴您♡
#每個人會有2張牌喔詳見以下計算方法
#咪子塔羅占卜 #塔羅牌 #占卜預約 #占卜課程 #魔法課程
.
‼️如何計算流年靈數‼️
「2021」加上你西元的生日數字,個別拆開相加至「十位數」或「個位數」,這兩個數字就都是你2021的流年靈數
.
‼️範例‼️
1978年12月28日生的人,計算方法為「2+0+2+1」+1+2+2+8=18,即可參考第18號牌;再把1+8=9,就多一張可參考的9號牌
.
#靈數1到9內文中的2020請自動代換成2021
#塔羅流年靈數1到9👉 https://bit.ly/2KPaZNN
#塔羅流年靈數10👉 https://bit.ly/37JOTEt
.
| 讓子彈再飛一會兒 |
塔羅牌的第11號牌是「正義」(#Justice)。在標準版的偉特塔羅牌,畫的是一手執天秤、一手執寶劍的法官;在標準版的托特塔羅牌,畫的則是埃及著名的瑪特女神(#Maat):傳說中,瑪特女神會把死人的心臟放在天秤上,另一端放著羽毛。如果心臟比羽毛輕或等重,代表死人無罪,反之則有罪(然後就會被怪物咬死)。
.
不論是法官還是瑪特女神,「天秤」都是這張牌的重要象徵,由此延伸出公平、公正的意義。也就是說流年靈數11的人,2021年所有來到你們眼前的人事物,都帶有公平、公正的特質。
.
比如說,麻煩事可以尋求公正客觀的第三方來處理,也就是循法律途徑,對雙方最公平;如果你在現職的工作崗位服務已久,薪水卻沒有等比增加,不排除你會在今年思考去留,因為對你來說這就是不公平;也可能是你想報名考公務員/研究所等某種考試,但你會事先評估自己的資格,選擇對應的職等/學校
.
我知道後面這個比喻看起來有些籠統,你可能覺得「誰不會評估自己的條件啊」,但對某些喜歡為了理想跟抱負戰鬥的人來說,他們就是會選擇有難度的挑戰,而這很明顯不會是你們的選擇。
.
思考工作去留也好,準備考試也好,考慮到流年靈數11的你們,另外一張流年牌必定是2號的女祭司(#TheHighPriestess),而女祭司是一張以「豐富的腦內活動」著稱的牌,代表你們今年會運用各種「沉默的智慧」,包括觀察、私下蒐集相關資訊等方式來決定下一步行動。即使你們已經推算出最理性、利益最大化、最有效率的計畫,也不會雷厲風行地執行,因為你們還需要「讓子彈飛一會兒」來確定情勢一如所料。
.
#有興趣的人可以看一下2號牌的流年運勢 👉 https://bit.ly/2YKuYlC
.
這代表「理智」將成為你們重要的行動準則。也就是說,許多今年發生的事,不過是你們周詳安排後的結果。但「所有事情都依照原定計畫發展」,並不代表2021之於你們就是普通、平凡、順利的一年,因為你們的第三張流年牌是20號的「審判」(#Judgement):這是一張象徵「死而復生」的牌,代表今年的你們會發生某些重要事件,讓你們打從心裡徹底改變對某些事物的看法,這也可能是導致你們2021幾乎按兵不動的原因之一。
.
比如說,我一位罹癌的朋友經過治療,打算明年繼續回公司上班。乍看之下,他的生活回到了生病前的狀態,但我相信重返職場的他,心態上跟生病前比起來,肯定大不相同。
.
當然,你們不用擔心自己會在今年遭逢巨變,因為這些重要事件的呈現方式,不見得一定要驚天地、泣鬼神——很可能只是你與朋友的一番對談,讓你突然發覺自己的個性完全不適合做公務員;又或者是一覺醒來,才發現自己根本一點都不喜歡現在的工作,因此在心頭播下離職的種子,等等。
.
既然是種子,就需要時間發芽。上天給了你們兩年的時間——也就是2021跟2022年——讓你們思考未來的路該「向左走、向右走」。直到2023年的「皇帝」(#TheEmperor)牌降臨,才是向前開疆闢土的時機點。而不論那個最後的決定是甚麼,受到「女祭司」庇護的你們,一定會找出智慧的答案。
.
| 單身者——禮尚往來,找回人我平衡 |
既然「正義」牌是公正的象徵,那就代表你們今年的人際將以「公平」的方式互動。比如說,你請我吃飯慶生,那你生日的時候我也會回請。但一如之前討論得沸沸揚揚的「AA制」,有些人認為甚麼東西都算得一清二楚,難免讓人感覺有隔閡,所以在某些人眼中看來,會覺得你們很難親近,而這將大幅影響你們能不能脫單。
.
有些人會因為到了某個年歲還乏人問津而自暴自棄,但好的是,這並不會對你們產生太多負面影響。比起能不能脫單,你們更重視雙方能不能互相尊重——你付錢,我也付錢,大家地位相等,沒有誰高誰低的問題——這對於11號牌的你們來說,不是錢多錢少的問題,而是公不公平的問題,所以搞不好你們還覺得「既然對方把公平互動視為我不給機會,那就算了吧」。
.
你們甚至可能在今年放大「公平」的標準挑選對象。比如說,如果你月入五萬,那對方也得月入五萬;如果你家境小康,那對方也得家境小康;如果你名下有房,那對方也得名下有房……,等等。
.
但即使符合條件的對象出現了,受到2號牌「女祭司」的影響,你們也未必會立刻投入感情的懷抱,因為你們需要時間觀察對方是否為真心人,也需要時間評估維持單身與脫單的利弊。可惜不是每個人都跟戴愛玲一樣有耐心等愛,所以更可能是對方趁你們還在思考的時候就先打了退堂鼓。或許多少讓人覺得可惜,但經過你們的理性制衡,即使意志消沉也不會太久。
.
當然,單身的日子難免寂寞,但你們不會覺得單身就比較糟。相反地,你們很可能在今年覺得一個人的生活也蠻好的:心情不會因為某個人就七上八下、計畫好的事情也不會因為某人就被臨時打亂、可以花更多心思與時間好好照顧自己……,等等。如果往年的你總是為他人著想、放太多重心在別人身上,那麼2021找回自己心裡的「平衡」,也是「公平」的展現。
| 有伴者——理性溝通,有話都好說 |
有伴而且雙方互動良好的人,兩人關係乍看之下不夠熱情,甚至可能有些冷淡,但隱藏在背後的,是外人看不出來的「互相尊重」,彼此也能互相照應,甚至是論及婚嫁。所以遇到事情,千萬不要情緒化地一哭二鬧三上吊,理性溝通反而更有助於解決問題。
.
不過如果彼此相處不佳,則不排除這段關係總是只有其中一方在退讓,或者是其中一方覺得自己長久的付出得不到對方等值的回饋,那麼不停妥協的那方,今年會重新思考「公平」的重要性。雖然不至於在一時三刻就做出分手的決定,但仍不失為一種警訊。
.
少部分的人,可能會發現兩人世界多了第三者,而且還是光明正大浮出檯面的那種。尤其如果是已婚者,不排除今年會面臨離婚訴訟。請務必記得法律講求的是證據,否則容易敗訴而歸。
.
∎
.
⭐️2021流年占卜開放預約 | https://bit.ly/3kxYvX6
⭐️歡迎追蹤我的 #IG | mikoblossomtarot
⭐️各類 #魔法油 販售中 | https://bit.ly/3k93q1x
個別化服務 計 畫 範例 在 Taipei Ethereum Meetup Facebook 的最佳貼文
📜 [專欄新文章] Uniswap v2 實作 : 從創建交易對到Ether 換 Dai 投入 Compound
✍️ 田少谷 Shao
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Uniswap v2 實作 : 從創建交易對到Ether 換 Dai 投入 Compound
V̶y̶p̶e̶r̶ Solidity coding time!
Image source: https://uniswap.org/
Outline
一. 前言二. 程式碼結構 1. Wrapped Ether(WETH)? 2. Impermanent Loss三. 創建交易對 - 準備 Interfaces四. 注入資金 - 注意事項五. 兌換虛擬貨幣六. 取得報價作為預言機七. 自行兌換 WETH八. 結語
一. 前言
暨上一篇解釋了 Uniswap 的演算法後,由於個人有使用 Uniswap v2 的需求,因此整理後寫成本篇,希望能幫助到其他也需要用 Uniswap 的讀者!(不熟 Uniswap 的人也可以參考區塊勢 許明恩 Astro Hsu 寫的介紹文:點我)
Uniswap 解析:恆定乘積做市商模型 Constant Product Market Maker Model 的 Vyper 實作
本文希望透過實際操作 Uniswap 我個人會用到、我認為大家比較常會用到的功能,來讓不熟悉的讀者快速了解其程式架構(v2 相較 v1 繁複)、熟悉實作方法,無法顧及全部還請見諒。
以下實作的測試環境為 Rinkeby 測試網,由於只是要講解使用方法,因此選擇在 Remix 上操作。
而 Uniswap v2 跟 v1 的差異,個人沒有很認真研究,大致列舉以下幾點,本文只會就其中幾點在後方進行較詳細的解釋:
使用 Wrapped Ether, WETH (於 二. 程式碼結構 解釋),讓 ERC20 交易對不再需要透過 Ether ,降低 gas 的消耗,但還是可以用 Ether 支付
加入時間權重的預言機,降低被操縱價格的風險,於 六. 取得報價作為預言機 中舉例說明,有興趣者可以看看 白皮書 有詳細介紹
閃電貸
使用 Solidity 而非 Vyper,因為 Solidity 功能上較齊全,於 五. 兌換虛擬貨幣 中舉例說明原因
在開始之前,本文超長,播個背景音樂吧:
二. 程式碼結構
本段落簡單描述 Uniswap 程式碼各部分的功能。若讀者要自己實作,可以參考此處得知該去哪一份程式碼找相應的功能:
Factory / UniswapV2Factory.sol : 創建交易對、查詢交易對的地址與總數;查詢、指定交易對手續費的收款地址
Pair(ERC-20) / UniswapV2ERC20.sol : Uniswap 流動性代幣 ERC20 的部分
Pair / UniswapV2Pair.sol : Uniswap 流動性代幣的其他部分;查詢交易對資訊
Router / UniswapV2Router01.sol : 注入、取出流動性/資金;兌換虛擬貨幣。此合約看似最複雜,其實只是因為收付款的單位可以是 Ether 或是 ERC20,所以有很多重複的函式
ExampleOracleSimple.sol, ExampleSlidingWindowOracle.sol : 預言機的範例程式碼
Library / UniswapV2OracleLibrary.sol : 供預言機調用的函式
Library / UniswapV2Library.sol : 供內部調用的函式
除了描述程式碼結構,為了以下的實作我們還需要知道 Wrapped Ether 是什麼,順便了解其使用原因:
1. Wrapped Ether (WETH) ?
從字面上來解釋,Wrapped Ether 是被包起來的 Ether。那為什麼好好的 Ether 不用還要創造出另一版本,嫌這小小世界的術語不夠多嗎 (ETH, WETH, Dai, aDai, cDai, sDai…)?xD
wETH | ERC20 tradable version of ETH
主因有兩個:廣泛地說,Ether 是以太坊上的原生虛擬貨幣,但它與廣為使用的 ERC20 標準並不相容( ERC20 有 approve(), transfer() 等等功能);而針對 Uniswap 的場景來說,v1 的交易對都一定有 Ether,而使用 Ether 可能會造成 Impermanent Loss,於下方解釋。
因此,就以上兩點的解決方法個別是:
部署一 ERC20 <-> Ether 的兌換合約:使用者將 Ether 付給 Wrapped Ether (ERC20) 的智能合約,合約就會給使用者同等數目的 WETH;拿回 Ether 則有點不太一樣,方法是告訴 WETH 的合約使用者要 withdraw(),WETH 的合約就會把使用者 WETH 擁有的額度設回 0 (或減少) 並返還 Ether,於 五. 兌換虛擬貨幣 中舉例說明
v2 交易對的建立不再只能是 (Ether, ERC20),可以是 (ERC20, ERC20)
2. Impermanent Loss
Impermanent loss 在 DeFi 指的是像 Uniswap 這類用演算法的去中心化交易所,如果交易對是兩幣價不相干的虛擬貨幣,例如:穩定幣 (Dai, USDC, etc) 和 Ether,流動性提供者 liquidity provider 會因為幣價的相對波動而比起直接持有兩幣還損失了一筆。
容我舉個例解釋清楚點,可以搭配我上一篇所寫的 Uniswap 的演算法 來理解:假設一開始 1 Ether 幣價為 100 Dai,只有一流動性提供者 LP 投入了 1 Ether 及 100 Dai (1 * 100 = 100 = k,k值要維持不變),總價值為 200 Dai。當 Ether 的幣價來到 200 Dai,眼尖者會發現資金池中的 Ether 價格低、有利可圖,因此會進行套利,例如:拿 33 Dai 約可以換到 0.25 Ether (0.75 * 133 ≒ 100),比起市場上要用 50 Dai 才能換到 0.25 Ether,套利者賺到了。此時,流動性提供者若將自己的資金提出,0.75 Ether 和 133 Dai 此時的總價值是 283 Dai,看似比當初的 200 Dai 還多,但其實將兩幣放著不動 1 Ether + 100 Dai 在此時就已經是 300 Dai 的價值了。於是,impermanent loss 就變成了 permanent loss :(
三. 創建交易對
- 準備 Interfaces
在開始之前,由於使用到的合約不少,所以我將全部所需整理在此:點我。其中,UniswapImplementation.sol 是本文實作的檔案。
若讀者在自己調用 Interface 時遇到版本問題,就依照 compiler 提供的指示稍作修改即可。我所整理的合約都修正過版本的差異、以下的實作也測試了可行,因此可以安心使用。
進入正題
通常大家使用的 Uniswap 資金池都是已經存在的,而如果想要上架自己的虛擬貨幣就要自己創建一組新的交易對,有兩種方式:在 Uniswap 官網上執行或是透過呼叫 Uniswap 的合約來建立,本文使用合約的方式。
首先,我們需要決定資金池為哪兩種虛擬貨幣,那就很普通地選 ETH 和 Dai 吧。雖然選了 ETH,但如同上方所述實際上必須使用 WETH,於是記下其在 Rinkeby 上的位置 。Dai 就使用 Compound 部署在 Rinkeby 上的版本,位置在 0x5592EC0cfb4dbc12D3aB100b257153436a1f0FEa。
接著,打開 IUniswapVFactory.sol,依照官方文件的指示將此合約部署在 Rinkeby 上的 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f。以下會有許多由 Uniswap 文件得知的合約地址及其他資訊等等,就不再一一附上來源或畫面截圖!
如上圖黑框所示,輸入了地址後按下藍色按鍵就完成部署了。接著,如下圖將 Dai 的地址 及 WETH 的地址輸入 createPair():
由於這個交易對我已經部署過了,因此讀者若想嘗試就麻煩去找別的 Rinkeby 上的測試幣了、或自己發一個! 完成後可以用 getPair() 輸入兩幣地址來確認交易對被建立成功:
如果想要進一步核對,可以先呼叫下圖紅框中的 allPairsLength(),得知當前總共有幾組交易對,再將 (交易對數 - 1) 輸入 allPairs(),就能得到和上圖一樣的地址。需要減 1 是因為陣列的 index 從 0 開始。
allPairsLength 的值會因為其他人的使用而增加,故日後可能會和本圖產出的 9 不同
四. 注入資金
看到標題的讀者可能會想:為何要把注入資金/流動性和上方的創建交易對分開呢?因為注入流動性這個功能被放在了 UniswapV2Router01.sol 中,所以就分開解釋。
雖然上一節只需要複製貼上按按鍵,但接下來要探討的注入資金 addLiquidity() 及虛擬貨幣的交換 swap()比起創建交易對 createPair() 是較有可能被融入到其他 DeFi 服務的功能(應該不太會有人會一直需要創建新的交易對),因此打開 UniswapImplementation.sol、要開始 Solidity coding!
如果不熟悉為何別的 DeFi 會需要在自己的服務中使用 Uniswap,可以搜尋 DeFi Money Lego/ DeFi 樂高,顧名思義就是在一個 DeFi 服務上使用另一個 DeFi 服務。實際的例子有:Aave 的新功能是可以拿往 Uniswap 注入流動性後得到的流動性代幣再投入 Aave 來賺取利息,以及下一節兌換虛擬貨幣的功能可以在 Pelith 的輕鬆貸 EasyDai、一站式 DeFi 組合工具 Furucombo 等場景中看到他們如何將 Uniswap 銜接上其他的 DeFi 服務。
回歸正題
在開始之前,先簡單提及一下有哪些變數、instance 需要初始化:
我們要呼叫 Uniswap 合約的 instance 來進行互動: IUniswapV2Router01
不只需要 Dai 的 instance,也需要 Dai 和 WETH 的地址;DaiAmount 和 ETHAmount 是為了稍後注入流動性所設置的,本文假設第一筆流動性我們使用 200 Dai + 1 Ether
immutable 是版本 0.6.5 加入的,用途是讓變數只能被讀取 read-only,但不同於 constant 的是能夠在 constructor() 中賦值。之所以各 instance 的地址不一起加上 immutable ,是因為若加上了,這些地址就不能在 constructor() 中被使用
p.s. 由於 gist 沒有 Solidity 的 syntax highlighting,所以隨便用了 .js 請忽略
看完了初始設定後,由於我們目前鎖定的資金池是 Dai 及 ETH,因此使用如下的 addLiquidityETH() 此函式,可以直接匯入 ETH 及 Dai。
本處我使用長度為 3 的陣列 addLiquidityResult 來記錄注入資金後的返回值:注入 Ether 的數量、Dai 的數量及返回的 Uniswap 流動性代幣的數量。實際上應該要依照不同使用者記錄的他們執行 addLiquidity() 後各自的返還值
第五行中的 approve() 是為了讓 UniswapV2Router01 的合約能夠從我們部署的合約 UniswapImplementation 取得 200 Dai 的使用權
於第六行 addLiquidityETH() 後方的大括號 {value: ETHAmount},這是 Solidity 0.6.0 後版本如果要在呼叫 function 的同時送入 Ether 的標準寫法,以前的寫法 .value() 目前也還能用但 compiler 會給提示
addLiquidityETH() 的第三、四個參數為最少要成功注入的數量。使用者能夠成功注入的數量取決於資金池中兩虛擬貨幣當下的數量,而本處直接給 0 比較方便
這邊非常重要的是上述程式碼還欠缺了一個無法被寫在合約內的步驟:使用者要同意這個被部署的合約 UniswapImplementation 可以從自己的帳戶中轉出 200 Dai。因此,將 ERC20 (Dai) 部署在 Rinkeby 上的位置,也就是0x5592EC0cfb4dbc12D3aB100b257153436a1f0FEa,接著輸入被部署合約的地址以及 200 Dai = 200000000000000000000、按下 approve() 後準備作業完成,如下圖。
終於可以呼叫 addLiquidity() 了! 如下圖,在紅框中以 1 Ether 呼叫黑框中的 addLiquidity() 後,就能成功將資金注入到 liquidity pool 了! 由於本文寫在測試後,因此沒有留下第一次 addLiquidity() 的結果 :(
此處被部署的合約位置跟上方截圖不同,因為其中測試了一些東西所以重新部署qq
接著,可以拿出 IUniswapV2Pair.sol,將其部署在 三. 創建交易對 中成功部署的位置 0x03E6c12eF405AC3F642B9184eDed8E1322de1a9e,使用黑框中的 getReserves() 就可以看到資金池中確實有匯入的資金! (本處依然沒有第一次使用後的截圖,因此截圖只是為了讓讀者看到 getReserves() 的結果)
此圖黑框中的值代表:在資金池中,Dai的數量、Ether的數量及上一次匯入資金的時間戳記
- 注意事項
使用 addLiquidity() 時需要小心的地方是:除了第一筆注入的資金可以自行決定兩虛擬貨幣的數量,第二筆開始就會依照其演算法算出兩幣可以投入的各自數量,因此使用者放入的兩幣中可能會有部分的其中一幣被 Uniswap 返回。
上方的程式碼只是為了第一筆流動性所寫,如果不是第一筆的情況就需要用成功注入流動性後的返回值(例如筆者的作法是用一陣列 addLiquidityResult 來存結果)來把沒有成功注入的資金返回給使用者。
五. 兌換虛擬貨幣
本節使用的兌換功能依舊是來自 IUniswapV2Router01.sol。
由於兌換虛擬貨幣實際上只有五行不到的程式碼,那麼就來把兌換 Ether 而得到的 Dai… 投到 Compound 來賺取放款利息吧! (雖然只是在測試網) 如果覺得這個場景似曾相識,沒錯,這就是上面提到的 輕鬆貸 EasyDai 的不專業版本!
首先將 Ether 和 Dai 互換的邏輯完成:
Ether 換 Dai : 使用 swapExactETHForTokens(),給某數量的 Ether 能換多少 Dai 是多少
Dai 換 Ether : 使用 swapExactTokensForETH(),作法只差在要把 Dai 轉到當前合約,再同意 UniswapV2Router01 可以從當前合約把 Dai 轉走
兩個做法的第二個參數都是可以自行指定兌換的路徑,此處就直接給 WETH 和 Dai 的地址即可(順序有差)。需要注意的是這個路徑要是動態陣列 dynamic array,而這就是 Vyper 所不支援的功能! 動態陣列跟靜態陣列宣告方式的差別我有註解在程式碼中
此處就先來試試 Dai 換 Ether 吧!和上方一樣,在使用時也要先 approve() 當前合約,當前合約才能轉走使用者的 Dai。
由上方的截圖可以很清楚的看到 Dai 換 Ether 這個動作牽涉到的資金轉移路徑:
Dai: 我的帳戶→當前合約→交易對所在合約
WETH: 交易對所在合約→UniswapV2Router01
Ether: WETH 合約→UniswapV2Router01→我的帳戶
以上的路徑有些人稍微思考後可能會納悶:為什麼上方沒有一筆 WETH 從 UniswapV2Router01 再轉到 WETH 合約的動作呢? 這就是在 Wrapped Ether (WETH) ? 中提到的案例。原因是:把 WETH 還回 WETH 的合約時實際上使用的函示是 withdraw() 而非 transfer(),而在 WETH 合約中發生的只是把使用者 WETH 擁有的額度歸零或減少而已。
接下來就是把 Dai 轉到 Compound 的部分。由於 Compound 不是本文重點,此處只求功能正常,因此比起真正的實作方法當然是簡化許多。
一如往常初始化 Compound 合約的 instance
ETH 換 Dai 後放入 Compound : 將用 ETH 換得的 Dai 的數量,也就是 swapExactETHForTokens() 返回的第二個值,approve() Compound 的合約後就可以用 mint() 匯入了! 要注意的是,ETH 換成 Dai 後的收款地址(第四個參數)是當前合約,才能從此合約轉 Dai 到 Compound
還款給使用者: 用 redeem() 取出 Dai,一如往常同意 UniswapV2Router01 使用 Dai 的權力
之所以說這個程式碼不能真的拿來用是因為:cDai 轉給使用者、讓使用者自己持有是比較安全的作法;即使選擇把 cDai 留在當前合約,以上程式碼檢查 cDai 數量是用當前合約 address(this) 去檢查,實際上應該要去記錄每個使用者所擁有的 cDai 數量
最後附上截圖,可以看一下資金的轉移路徑:
ETH -> WETH -> Dai -> cDai (Compound)
cDai -> Dai -> WETH -> ETH
六. 取得報價作為預言機
若使用 Uniswap v1的報價作為預言機,攻擊者可以利用其演算法造成的滑點來操控價格。為此,Uniswap v2 提供了兩個加入時間權重的合約範例:
ExampleOracleSimple.sol : 簡單版
ExampleSlidingWindowOracle.sol : 複雜版;Sliding Window 在此場景是指透過改變擷取資料(歷史價格)的片段,用該特定期間的價格來做成時間權重,讓使用上更靈活!
本處以簡單版為例。打開 ExampleOracleSimple.sol,由於一些匯入檔案的問題我將 UniswapV2OracleLibrary 也放在這份檔案中。
做法非常簡單:將 UniswapV2Factory、Dai 及 WETH 所在的地址作為部署合約 ExampleOracleSimple 時的輸入值就完成了。部署成功後會有個 24 小時的鎖 Time lock,因為這個預言機是有時間權重的,所以並不是一部署完就能立刻使用。若要體驗更新價格此功能可以使用我部署的兩個,其位置我寫在註解中。
將 WETH 或是 Dai 的地址和要查詢的數量輸入 consult() 就能查到兩虛擬貨幣的價格:
1 ETH 價格約為 97 Dai
1 Dai 價格約為 0.01 ETH
然而,在測試網上我們沒辦法拿著預言機查到的價格套入演算法來核對,因為測試網上的 Uniswap 沒有啟用收費機制,而 k 值要在收費機制啟動時才能被計算,欲知詳情者就麻煩去看官方文件了!
七. 自行兌換 WETH
上方雖然有提到 WETH 在 Uniswap 中的使用原因及場合,但或許有人想試著自己動手將 Ether 換成 WETH、把 WETH 換回 Ether。方法非常簡單,將 WETH.sol 部署到 0xc778417E063141139Fce010982780140Aa0cD5Ab 就能使用,如下圖:
按下綠框中的 At Address 後,使用下方黑框中的 deposit 搭配在中間的黑框輸入所要兌換 Ether 的量,就能成功換到 WETH。同理,圖中未顯示的 withdraw 功能就是讓人輸入 WETH 來換回等量的 Ether。
稍微提一下,如果是第一次兌換,將 WETH 所在的地址輸入 Metamask 就能在錢包中看到自己擁有的 WETH 的數量,如下兩圖:
Voila!
八. 結語
呼,雖然上述操作及程式碼的撰寫其實還蠻簡單的,但畢竟 Uniswap 的功能不少、我個人也希望能將小細節解釋清楚些,因此長度遠超過預期...有看到結尾處的讀者,辛苦了xD 希望大家現在對於 Uniswap v2 的內容跟實作方法都很清楚了!
最後,如果本文有任何錯誤,請不吝提出,我會盡快做修正;而如果我的文章有幫助到你,可以看看我的其他文章,歡迎一起交流 :)
田少谷 Shao - Medium
Uniswap v2 實作 : 從創建交易對到Ether 換 Dai 投入 Compound was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
個別化服務 計 畫 範例 在 全文才 Facebook 的最佳貼文
108/03/14
《職業訓練》
107年度原住民職業訓練-原住民山域嚮導培訓班簡章
(山域嚮導資格檢定新訓與複訓研習班)
一、研習宗旨:為提昇現有山域嚮導之專業知識與技能,落實登山安全及山岳生態之保護
二、研習依據:教育部體育署山域嚮導資格檢定辦法
三、主辦單位:南投縣政府原住民行政局委託辦理
四、承辦單位:中華民國健行登山會山域嚮導資格檢定工作小組
五、嚮導級別:登山嚮導
報名資格:中華民國國民設籍南投縣年滿18歲以上未滿65歲具原住民身分者
有志從事山域服務工作者(未滿20歲者,並徵得法定代理人同意)。
已領有體育署山域嚮導證,需複訓者。
七、舉辦日期:108年04月09至04月13日
八、課程項目與時數:
(一)、研習課程:
級別:登山嚮導
山域環境知識
計畫/行政/隊伍管理
山野裝備器材
山野活動技能
山野緊急應變
(二)、研習時間及時數:研習時間每日08:10至21:10最後一天至16:10 ,新訓者,完成累計四十八小時課程時數,可取得「訓練證明書」效期一年;複訓者,完成累計二十四小時課程時數,可申請嚮導證書效期展延三年
九、報名相關規定:
(一)、參加者除要符合本簡章第六條資格外,有下列情形之一,且經判刑確定者不得參加報名。或罹患精神疾病或身心狀況違常,經直轄市、縣(市)主管機關委請相關專科醫師二人以上諮詢後,認定不能執行業務者,不得擔任山域嚮導;已取得山域嚮導資格者,撤銷之。
一、犯傷害罪章。但其屬過失犯,不包括之。
二、犯中華民國刑法第二百九十四條之遺棄罪。
三、犯妨害性自主罪章、妨害風化罪章及妨害自由罪章之罪。
四、犯毒品危害防制條例之罪。
五、犯殺人罪。
(二)、報名方法:即日起至04月02日止,將「報名表」及「警察刑事紀錄證明」
傳真至02-2752-4741或電郵[email protected],「報名表」可至官網(http://www.mountainguide.org.tw)
(三)、報名資格證明如有造假不實經查證屬實者,取消其報名資格
(四)、費用全免
十、研習人數:限額50名,額滿為止。
十一、研習地點:540 南投市光明路1號 (行政院人事行政總處公務人力發展學院)
十二、報到通知:研習日期前三天公告於官網(http://www.mountainguide.org.tw)。
十三、時數:新訓者山域嚮導課程48小時、基本救命術 8小時、特教課程(性別平等+安全衛生)各2小時共60小時,複訓者山域嚮導課程共24小時。
1. 報到時間:新訓者04月09日08:20 前,複訓者04月11日13:00前
2. 報到時請攜帶雙證件,身份驗證用及繳交「報名表」、「警察刑事紀錄證明」正本
十六、其他注意事項:悉依教育部體育署「山域嚮導資格檢定辦法」及相關法令規定辦理。
研習期間遇特殊情況,請假不得超過十分之一,超過者以退訓論。
報名即視同願意遵照報名簡章規定,請詳加閱讀避免自身權益受損。
參加人員需自備扁帶*3公尺及6mm*3公尺輔助繩各2條,帶鎖勾環2枚。
實施隨堂測驗檢定必考繩結,包括雙8字結、雙套結(栓馬結)、普魯士結、水結、意大利半扣,請事先熟練 (範例http://www.mountainguide.org.tw)
參與研習者自理往返交通及住宿。
本活動投保包括對每一個人體傷或死亡個別所負之最高賠償責任,各為新臺幣五百萬元之「公共意外責任險」理賠,各參與人員可自行依需要加投保人身險。
若遇颱風或人力不可抗拒之天然災害,本單位有權宣佈取消、延期等相關事宜。
本研習會依實際情況保有更動研習地點或課程內容之權力。
本簡章如有未盡事宜,得隨時修訂公佈之。
為環境永續,本活動恕不提供紙杯,請學員自行攜帶環保杯。
洽詢專線:中華民國健行登山會山域嚮導資格檢定工作小組02-2751-0938或0937-832-710
個別化服務 計 畫 範例 在 認識個別化支持計畫(I SP) - YouTube 的推薦與評價
目前依據臺灣的特殊教育法,對於IEP與ISP 的用詞,是根據身心障礙學生的教育階段別而不同,高中及其以下階段都叫做 個別化 教育 計畫 (IEP), ... ... <看更多>