ref: https://sysdig.com/blog/dockerfile-best-practices/
如果你常用到容器化、微服務架構,這些輕量化的架構當碰到問題時,背後的資安事件調查、報告、修復卻是影響甚鉅。然而,這些影響都可以透過「把安全意識擺在開發階段 (shifting left security)」來降低風險,而這篇文章就會講述 Dockerfile 的最佳實作手段有哪一些。
首先,我們會從幾個大面向來說明各種控制安全風險的細節,像是權限控管、降低攻擊層面、預防機敏資料洩漏,以及在發布 container image 時的注意事項。而你需要特別注意的是,其實 Dockerfile 也只是算是開發階段的一部份,所以這邊能提醒到的內容都屬於部署前(特別是開發階段)的準備。以下共提及 20 個你可以注意的重點,但因為篇幅較長,筆者將選出較重要的幾個來談談。
讓我們從「權限控管」說起:
Rootless container
根據報告結果顯示,有超過 58% 的 image 都是用 root 作為執行服務的使用者,所以在此也會建議透過 USER 參數來設定容器的預設使用者,同時,也可以利用執行環境/架構的設定來避免容器的預設使用者是 root。
Make executables owned by root and not writable
服務的 binary file 應該避免被任何人修改,容器的預設使用者只需要執行服務的權限,而不是擁有權。
至於「減少攻擊面」的部分:
Multistage builds小
在 image 的建立,可以透過 multistage build 來建立很多層 container,例如在第一層安裝編譯所需的套件,而第二層則只需安裝 runtime 所需的套件(如 openssl 等),再複製第一層所編譯出來的執行檔就可以了。其餘的因開發/編譯所安裝的套件皆不需要放在最後的 image,這樣同時也可以把 image 的大小縮小。
Distroless & Truested image
採用最小/最輕量化的 base image 來作為你打造 image 的基礎,同時使用可信任來源的 image,避免不小心在未知的情況引入好幾個潛在的安全威脅。(在原文中,sysdig 也使用了自身開發的工具來檢測 image 是否有安全問題,如果有需要也能參考看看)
而再來關於「機敏資訊」的部分:
Copy
當你在從你的開發環境複製檔案到 image 當中時,需要非常小心,因為你很可能一不小心就把你的密碼、開發環境的 token、API key 等資訊複製進去了。而且不要以為把 container 裡面的檔案刪掉就沒事了,別忘了 container image 是一層一層堆疊起來的,就算刪掉了,還是能在前面的 layer 裡面找到。
但如果還是有需要用到這些機敏資料,也可以考慮使用環境變數(docker run -e 引入),或是 Docker secret、Kubernetes secret 也能夠幫你引入這些參數。如果是設定檔的話,則可以用 mount 的方式來掛載到你的 container 裡面。
總而言之,你的 image 裡面不該有任何機敏資料、設定檔,開發服務時讓服務在 runtime 的時候可以接受來自環境變數的參數才是相對安全的。
其他的部分:
其實文章當中還有提到很多製作 image 的注意事項,像是在 deployment 階段,可能你部署的 latest 與實際的 latest 因時間差而不同。又或是在 image 裡面加上 health check,也才能做到狀況監測。
在容器化服務的時代,開發者不僅需要具備撰寫開發程式的能力,也要對於虛擬化環境有足夠的理解,否則,在對架構不熟的情況就將服務部署上去,或把 image 推送到公開的 registry,都可能造成重要的資料外洩與潛在的資安危機。
同時也有123部Youtube影片,追蹤數超過4萬的網紅吳老師教學部落格,也在其Youtube影片中提到,EXCEL 函數與VBA設計(14) 完整教學影音分享申請 http://goo.gl/lsqo7 論壇:https://groups.google.com/group/excel_vba_2013?hl=zh-TW 課程內容: 01_範例_貸款計算介面設計說明 02_範例_貸款計算介面修改名...
「虛擬變數設定」的推薦目錄:
- 關於虛擬變數設定 在 矽谷牛的耕田筆記 Facebook 的精選貼文
- 關於虛擬變數設定 在 粘拔的幸福碎碎念 Facebook 的最讚貼文
- 關於虛擬變數設定 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於虛擬變數設定 在 吳老師教學部落格 Youtube 的精選貼文
- 關於虛擬變數設定 在 吳老師教學部落格 Youtube 的最佳解答
- 關於虛擬變數設定 在 吳老師教學部落格 Youtube 的最佳解答
- 關於虛擬變數設定 在 [程式] R 虛擬變數設定問題請教- 看板Statistics 的評價
- 關於虛擬變數設定 在 虛擬變項spss在PTT/Dcard完整相關資訊 - 說愛你 的評價
- 關於虛擬變數設定 在 虛擬變項spss在PTT/Dcard完整相關資訊 - 說愛你 的評價
- 關於虛擬變數設定 在 [程式] R 虛擬變數設定問題請教 - PTT Web 的評價
- 關於虛擬變數設定 在 B 資料轉換與過濾| 心理科學基礎統計 的評價
虛擬變數設定 在 粘拔的幸福碎碎念 Facebook 的最讚貼文
參考看看。
#看謎片請小心
美國為何那麼忌憚TikTok?
我犧牲個人隱私,用一個有點限制級的經歷來說明「演算法」,也許可以幫助網友理解?感謝《上報》上刊拙文,也請臉友指教。
TikTok,即app 抖音的海外版,確實屬於資訊通訊產業產值最大的最下游區塊,稱為「加值服務」,但是它才出道4年,還沒進入獲利高峰期。重點是下載量太大,即,使用者太多了!
一個 app的使用者越多,玩這個 app越頻繁,貢獻的個人資訊就越多。
咦?TikTok不過是一個短視頻平台,商業模式一眼即可看穿,同時間出現在市場上的類似app也不只它一個,憑什麼就是它以獨角獸之姿,惹的美國札眼呢?
一個關鍵在TikTok母公司字節跳動的「演算法」(algorithm)很厲害。所謂演算法就是一種找到各項變數之間「關聯性」的一種軟體技巧,不求找到完整的因果關係,只求利用使用者貢獻的個人片段資訊,儘快找到使用者的各種屬性與愛好的可能關聯。
舉個筆者個人的例子:我因為知道演算法的邏輯,所以儘量不點選電腦桌面跳出的廣告-那些都是瀏覽器推播的-以免類似的廣告排山倒海的湧入打擾工作。但是,有一回,一位比基尼美女出現了,一時不查,就點下去了,結果慘了…
因為我極少點選廣告,只有這一點點線索貢獻給瀏覽器,於是,很長一段時間,各種女性內衣廣告與美女交友網站充斥我的瀏覽器!我知我犯的錯在哪裡,於是清心寡慾,不再點擊任何相關廣告,也很成功,但,又一段時間之後,瀏覽器推播了同性戀交友網站廣告給我。謝謝。
你可以想像,如果美國人有一億人每天都在用TikTok,在家用、在學校用、在公司也用、在軍營也用…而且他們還時時互動。於是,TikTok 就可以拼湊出這一億美國人的整體生活內容、知識背景、意識形態、政治傾向,等於每一秒鐘都在對使用者做民意調查,而受測者卻完全不覺察。
行筆之此,對資通訊產業有一定了解的人,一定會說:又不是只有TikTok 才這麼做,所有社交平台的營運模式都是如此啊,而且這是美國公司先發明的商業模式。
確實,Facebook及旗下的Instagram也面臨不當使用使用者資訊的指控,所以,從資通訊科技的角度來說,問題是:美國為什麼不擔心Facebook?或其它類似的各種互聯網平台,譬如我用的瀏覽器也是美國公司的產品?
答案很簡單,就是攻勢現實主義的基本假設:別國的意圖永遠不可測。
TikTok雖然不是一帶一路的高鐵-沒法越過兩大洋建到我美國來;也不是個別間諜,潛伏在我美國-FBI可以每10小時就鎖定一個;甚至不是特異功能人士,可以在遠處發功來影響白宮重要人士的腦波-根據解秘檔案,X戰警也不全是捏造的。
但是,這個來自對手國的軟體,更能強而有力的越過地理國界,藉由資通訊科技為每個國家都創造的虛擬網路疆域(cyberspace),把影響力滲透進我國國內,直達人民與菁英。
而且不只是蒐集大數據,還可以透過推播,試圖改變美國人民的思想與行為!
虛擬網路疆域有幾個特色:第一,界線不明顯,譬如你在家上網,一不小心就遨遊到別的國家去了。第二,從國家的角度,這個空間的邊界,很難控制;如果有敵國勢力來攻擊,易攻難守!網路攻擊方可以一天發動幾千、幾萬、甚至幾十萬次,防守方只要有一次沒防住,就算失敗。第三,對於這種攻擊,還很難確認或證實攻擊來源,有時要花幾年的時間!就算確認了,駭客也不在自己國境內,怎麼抓捕?
譬如,這些年,以下這種消息不少:俄羅斯或中國意圖影響美國大選、美國監聽它國政要與領袖、北韓駭客破壞美國政府與企業網站…但是,有幾次駭客被捕獲、判刑、入獄呢?
大國對抗,都不希望被對方影響或甚至於控制,偏偏資通訊科技打開了潘朵拉的盒子。
最後,來看一張世界前 20 大科技公司的圖(下圖),基本上,都算是互聯網公司,都提供app滿足使用者的需求,重點是:這個市場7年前,美國絕對領先,中國公司還很少,現在卻中、美爭鬥最激烈。可以說,現在全球算不算 G2 = 兩強爭霸的格局,也許還有爭議,但是在網路加值服務的產業中,已是美、中對壘之勢了。
等一等,華為、抖音TikTok怎麼都不在圖中?
因為圖中都是上市公司,華為一開始就設定不要上市,憑添了神秘色彩。TikTok一始就打定主意要在國外上市,但長成太快,還沒IPO,也許因為攪黃了川普解封後第一瑒造勢活動,就被川普盯上了?
從保護國家安全、與抵抗對手國權力伸進本國境內的角度來說,美國當然要除TikTok而後快,至於手法有多粗暴或是否違反自由主義的商業精神,就是另外一回事了。
#科技戰
#中美貿易戰
#華為
#抖音
#TikTok
https://www.upmedia.mg/news_info.php…
虛擬變數設定 在 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.
👏 歡迎轉載分享鼓掌
虛擬變數設定 在 吳老師教學部落格 Youtube 的精選貼文
EXCEL 函數與VBA設計(14)
完整教學影音分享申請 http://goo.gl/lsqo7
論壇:https://groups.google.com/group/excel_vba_2013?hl=zh-TW
課程內容:
01_範例_貸款計算介面設計說明
02_範例_貸款計算介面修改名稱
03_範例_貸款計算開始計算程式撰寫
04_範例_貸款計算程式執行與除錯
05_範例_貸款計算資料庫建立
06_範例_貸款計算新增資料到資料庫中
今天的課程比較短,只有14小時,索性把之前課程精要再精要的做整理,
不難上的太難,又不能上的太快,所以藉由GOOGLE的服務達成師生互動目的。
分享GOOGLE雲端應用:
1.GO.GL:縮短網址
2.GOOGLE表單:取得使用者訊息或問卷調查
3.GOOGLE試算表:當成雲端資料庫
4.GOOGLE共用資料集:分享雲端檔案
5.GOOGLE網上論壇:學員論壇空間,可分享影音連結與討論,必須登入才能取得資源。
6.YOUTUBE影音平台:存放錄製好的教學影音,必利用影音清單建立連續播放功能。
7.GOOGLE Blogger:建立部落格與教學網誌,並嵌入部分影音分享。
一、我的上課用書:
3秒鐘搞定EXCEL:資料處理→函數→VBA
作者:林文恭研究室出版社:碁峰
出版日期:2012年06月19日定價:420元
Excel函數&VBA其實很簡單(附贈超值影音教學光碟)
作者: 林文恭研究室
書號: AEI003800 出版日: 2009/12/28
看!就是比你早下班-50個Excel VBA高手問題解決法
作者:楊玉文
http://www.books.com.tw/exep/prod/booksfile.php?item=0010497458
Excel VBA 與資料庫整合大活用
書號:SP20098 作者:古川順平 著
出版日:2010/3/18 譯者:博碩文化 編
跟我學Excel VBA:將複雜的操作用一個按鍵就搞定!
作者: 恩光技術團隊 江高舉
出版日: 2010/10/19
都有拿來上過課,但都不算太推薦,各有優缺點啦!
二、這次的課程理念:
1. 循序漸進, 透過實用的範例, 輕鬆進入 Excel VBA 設計領域, 逐步了解VBA 架構, 學會: VBA 變數、常數、函式及邏輯的觀念, 即使沒有任何程式設計基礎,也能撰寫 編修VBA,提昇工作效率, 晉昇 Excel 高手。
2.進而將EXCEL當成資料庫來使用,結合函數、VBA等更深入的功能,讓資料處理和分析的應用更上層樓。
3.若能結合GOOGLE雲端試算表與表單,讓EXCEL隨時成為您的分身幫您處理事務。
三、課程大綱:
Excel巨集錄製與VBA編輯器
VBA語法與常用程式函數
VBA控制項與表單介面設計
辦公室必備VBA實用範例
實例1:進階功課表
實例2:大型試算表
實例3:文字遊戲
實例4:銷貨單
ExcelVBA與外部資料整合應用
吳老師教學部落格:
http://terry55wu.blogspot.com/
補充資料:
EXCEL函數與VBA設計
http://goo.gl/LEjSW
EXCEL函數與VBA雲端班
http://goo.gl/zz71P
EXCEL函數與VBA進階班
http://goo.gl/rq9EK
EXCEL VBA 函數 自強基金會 吳清輝老師 程式設計 線上教學 e化創新 雲端計算 虛擬電腦 吳老師提供
虛擬變數設定 在 吳老師教學部落格 Youtube 的最佳解答
EXCEL 函數與VBA設計(14)
完整教學影音分享申請 http://goo.gl/lsqo7
論壇:https://groups.google.com/group/excel_vba_2013?hl=zh-TW
課程內容:
01_範例_貸款計算介面設計說明
02_範例_貸款計算介面修改名稱
03_範例_貸款計算開始計算程式撰寫
04_範例_貸款計算程式執行與除錯
05_範例_貸款計算資料庫建立
06_範例_貸款計算新增資料到資料庫中
今天的課程比較短,只有14小時,索性把之前課程精要再精要的做整理,
不難上的太難,又不能上的太快,所以藉由GOOGLE的服務達成師生互動目的。
分享GOOGLE雲端應用:
1.GO.GL:縮短網址
2.GOOGLE表單:取得使用者訊息或問卷調查
3.GOOGLE試算表:當成雲端資料庫
4.GOOGLE共用資料集:分享雲端檔案
5.GOOGLE網上論壇:學員論壇空間,可分享影音連結與討論,必須登入才能取得資源。
6.YOUTUBE影音平台:存放錄製好的教學影音,必利用影音清單建立連續播放功能。
7.GOOGLE Blogger:建立部落格與教學網誌,並嵌入部分影音分享。
一、我的上課用書:
3秒鐘搞定EXCEL:資料處理→函數→VBA
作者:林文恭研究室出版社:碁峰
出版日期:2012年06月19日定價:420元
Excel函數&VBA其實很簡單(附贈超值影音教學光碟)
作者: 林文恭研究室
書號: AEI003800 出版日: 2009/12/28
看!就是比你早下班-50個Excel VBA高手問題解決法
作者:楊玉文
http://www.books.com.tw/exep/prod/booksfile.php?item=0010497458
Excel VBA 與資料庫整合大活用
書號:SP20098 作者:古川順平 著
出版日:2010/3/18 譯者:博碩文化 編
跟我學Excel VBA:將複雜的操作用一個按鍵就搞定!
作者: 恩光技術團隊 江高舉
出版日: 2010/10/19
都有拿來上過課,但都不算太推薦,各有優缺點啦!
二、這次的課程理念:
1. 循序漸進, 透過實用的範例, 輕鬆進入 Excel VBA 設計領域, 逐步了解VBA 架構, 學會: VBA 變數、常數、函式及邏輯的觀念, 即使沒有任何程式設計基礎,也能撰寫 編修VBA,提昇工作效率, 晉昇 Excel 高手。
2.進而將EXCEL當成資料庫來使用,結合函數、VBA等更深入的功能,讓資料處理和分析的應用更上層樓。
3.若能結合GOOGLE雲端試算表與表單,讓EXCEL隨時成為您的分身幫您處理事務。
三、課程大綱:
Excel巨集錄製與VBA編輯器
VBA語法與常用程式函數
VBA控制項與表單介面設計
辦公室必備VBA實用範例
實例1:進階功課表
實例2:大型試算表
實例3:文字遊戲
實例4:銷貨單
ExcelVBA與外部資料整合應用
吳老師教學部落格:
http://terry55wu.blogspot.com/
補充資料:
EXCEL函數與VBA設計
http://goo.gl/LEjSW
EXCEL函數與VBA雲端班
http://goo.gl/zz71P
EXCEL函數與VBA進階班
http://goo.gl/rq9EK
EXCEL VBA 函數 自強基金會 吳清輝老師 程式設計 線上教學 e化創新 雲端計算 虛擬電腦 吳老師提供
虛擬變數設定 在 吳老師教學部落格 Youtube 的最佳解答
EXCEL 函數與VBA設計(4)
完整影音:
http://www.youtube.com/playlist?list=PLsE34duTsJQwWUy79LfYsai3ZAVSKpa9p
論壇:https://groups.google.com/group/excel_vba_2013?hl=zh-TW
課程內容:
01_LOOKUP函數
02_HLOOKUP函數
03_HLOOKUP配合定義名稱
04_HLOOKUP函數(數字)
05_VLOOKUP函數
06_綜合練習1
07_綜合練習1(符號與換行)
08_綜合練習2(定義名稱)
09_綜合練習2(定義名稱_從選取範圍)
10_如何亂數產生成績
11_如何用RANDBETWEEN產生成績
12_基本函數
13_如何設定開發人員標籤
今天的課程比較短,只有14小時,索性把之前課程精要再精要的做整理,
不難上的太難,又不能上的太快,所以藉由GOOGLE的服務達成師生互動目的。
分享GOOGLE雲端應用:
1.GO.GL:縮短網址
2.GOOGLE表單:取得使用者訊息或問卷調查
3.GOOGLE試算表:當成雲端資料庫
4.GOOGLE共用資料集:分享雲端檔案
5.GOOGLE網上論壇:學員論壇空間,可分享影音連結與討論,必須登入才能取得資源。
6.YOUTUBE影音平台:存放錄製好的教學影音,必利用影音清單建立連續播放功能。
7.GOOGLE Blogger:建立部落格與教學網誌,並嵌入部分影音分享。
一、我的上課用書:
3秒鐘搞定EXCEL:資料處理→函數→VBA
作者:林文恭研究室出版社:碁峰
出版日期:2012年06月19日定價:420元
Excel函數&VBA其實很簡單(附贈超值影音教學光碟)
作者: 林文恭研究室
書號: AEI003800 出版日: 2009/12/28
看!就是比你早下班-50個Excel VBA高手問題解決法
作者:楊玉文
http://www.books.com.tw/exep/prod/booksfile.php?item=0010497458
Excel VBA 與資料庫整合大活用
書號:SP20098 作者:古川順平 著
出版日:2010/3/18 譯者:博碩文化 編
跟我學Excel VBA:將複雜的操作用一個按鍵就搞定!
作者: 恩光技術團隊 江高舉
出版日: 2010/10/19
都有拿來上過課,但都不算太推薦,各有優缺點啦!
二、這次的課程理念:
1. 循序漸進, 透過實用的範例, 輕鬆進入 Excel VBA 設計領域, 逐步了解VBA 架構, 學會: VBA 變數、常數、函式及邏輯的觀念, 即使沒有任何程式設計基礎,也能撰寫 編修VBA,提昇工作效率, 晉昇 Excel 高手。
2.進而將EXCEL當成資料庫來使用,結合函數、VBA等更深入的功能,讓資料處理和分析的應用更上層樓。
3.若能結合GOOGLE雲端試算表與表單,讓EXCEL隨時成為您的分身幫您處理事務。
三、課程大綱:
Excel巨集錄製與VBA編輯器
VBA語法與常用程式函數
VBA控制項與表單介面設計
辦公室必備VBA實用範例
實例1:進階功課表
實例2:大型試算表
實例3:文字遊戲
實例4:銷貨單
ExcelVBA與外部資料整合應用
吳老師教學部落格:
http://terry55wu.blogspot.com/
補充資料:
EXCEL函數與VBA設計
http://goo.gl/LEjSW
EXCEL函數與VBA雲端班
http://goo.gl/zz71P
EXCEL函數與VBA進階班
http://goo.gl/rq9EK
EXCEL VBA 函數 自強基金會 吳清輝老師 程式設計 線上教學 e化創新 雲端計算 虛擬電腦 吳老師提供
虛擬變數設定 在 虛擬變項spss在PTT/Dcard完整相關資訊 - 說愛你 的推薦與評價
年齡分層共三組,需設定虛擬變數. G複迴歸... 範例一SPSS步驟-1. 8.[PDF] 迴歸分析2018年5月23日· 多元迴歸分析SPSS 操作方法. 1.欲投入迴歸分析的自變數若為間斷變 ... ... <看更多>
虛擬變數設定 在 虛擬變項spss在PTT/Dcard完整相關資訊 - 說愛你 的推薦與評價
年齡分層共三組,需設定虛擬變數. G複迴歸... 範例一SPSS步驟-1. 8.[PDF] 迴歸分析2018年5月23日· 多元迴歸分析SPSS 操作方法. 1.欲投入迴歸分析的自變數若為間斷變 ... ... <看更多>
虛擬變數設定 在 [程式] R 虛擬變數設定問題請教- 看板Statistics 的推薦與評價
[軟體程式類別]:
R
[程式問題]:
跑多元迴歸時的虛擬變數設定問題
[軟體熟悉度]:
新手以上一點點
[問題敘述]:
目前正在建立一個有關flyingV募資平台的迴歸模型
依變數 Y = (每筆專案的)實際募資金額/目標金額
其中有幾組自變數X是虛擬變數,如
1.不同專案類別(category):共有九種→設計、科技、社會...等
2.是否有早鳥優惠(earlybird):共有兩種→有或無
3.專案發起月份(month):共有12種→12個月
但我用factor來代替虛擬變數,所以我的迴歸模型大概如下:
model <- lm(y ~ X1+...+factor(category)+factor(earlybird)+factor(month)+...)
想請問如果設factor的話,R會自動把這幾個變數判斷為虛擬變數嗎???
還是需要設dummy variable才行???
目前看起來好像是能夠執行,但是很怕一切都是我的誤會OAQ
附上其中一組model的迴歸結果
有爬過文跟估狗過,但是找不太到相關資訊
所以只好勞駕各位專業的大大幫忙了 > <
謝謝!!!
--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.100
※ 文章網址: https://www.ptt.cc/bbs/Statistics/M.1465958847.A.1E5.html
※ 編輯: weiwei1110 (140.112.25.100), 06/15/2016 10:53:01
※ 編輯: weiwei1110 (140.112.25.100), 06/15/2016 10:53:19
... <看更多>