雖然這篇youtube付款方式驗證鄉民發文沒有被收入到精華區:在youtube付款方式驗證這個話題中,我們另外找到其它相關的精選爆讚文章
在 youtube付款方式驗證產品中有7篇Facebook貼文,粉絲數超過1萬的網紅廷豐水產 SoGood 莎媽廚房,也在其Facebook貼文中提到, 阿拉伯頂級藍鑽蝦|🦐 ▪️30/40尾 1公斤/盒 藍鑽蝦 $550 最大隻規格 ▪️40/50 尾 1公斤/盒 藍鑽蝦 $510 第二規格 ❤️莎弟認真說,最低價在這,歡迎比價❤️ ⚠️庫存齊全,冷凍庫裡好多藍鑽蝦 ⚠️藍鑽蝦就是白蝦,白蝦中的法拉利 ⚠️最鮮甜的白蝦,蝦膏甜而回甘 ⚠️最大...
同時也有7部Youtube影片,追蹤數超過7,990的網紅大天使TV,也在其Youtube影片中提到,【美國稅務】Youtube 要跟創作者課稅!要求更新稅務資訊 W-8 表格是做什麼用的?要如何填寫?有投資美股經驗的與您分享W-8表格重要性|事關重大 已開啟營利的頻道請注意 Youtube 寄信通知所有創作者必須在2021/05/31之前,在Google AdSense™帳戶提交稅務資訊,否則將...
「youtube付款方式驗證」的推薦目錄
- 關於youtube付款方式驗證 在 BusinessFocus | 商業、投資、創科平台 Instagram 的最讚貼文
- 關於youtube付款方式驗證 在 廷豐水產 SoGood 莎媽廚房 Facebook 的最佳解答
- 關於youtube付款方式驗證 在 林智堅 Facebook 的最讚貼文
- 關於youtube付款方式驗證 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於youtube付款方式驗證 在 大天使TV Youtube 的精選貼文
- 關於youtube付款方式驗證 在 林進 Youtube 的精選貼文
- 關於youtube付款方式驗證 在 林進 Youtube 的最佳貼文
youtube付款方式驗證 在 BusinessFocus | 商業、投資、創科平台 Instagram 的最讚貼文
2020-05-14 04:19:48
「刷臉支付」的技術看來越來越普及了!繼早前支付寶與KFC合作,讓客人能透過「刷臉支付」的方式來買炸雞後,騰訊亦不甘後人。 微信支付與綾致時裝集團在12月25日達成合作,在全國首次推出「人臉智慧時尚店」。在深圳九方購物中心的Jack&Jones和廣州白雲萬達廣場的VERO MODA店舖裡,顧客可通過...
-
youtube付款方式驗證 在 大天使TV Youtube 的精選貼文
2021-03-11 17:00:15【美國稅務】Youtube 要跟創作者課稅!要求更新稅務資訊 W-8 表格是做什麼用的?要如何填寫?有投資美股經驗的與您分享W-8表格重要性|事關重大 已開啟營利的頻道請注意
Youtube 寄信通知所有創作者必須在2021/05/31之前,在Google AdSense™帳戶提交稅務資訊,否則將會將頻道廣告收入全面預扣24%稅率,W-8 表格要如何填寫?對我的收入有什麼影響?也歡迎大家有問題可以留言討論。
▶︎ Youtube官方對於美國稅務的說明頁面 http://bit.ly/3l3IHx2
▶︎ google Adsense 登入網址 https://www.google.com.tw/adsense/start/
▶︎ 郵局地址翻譯工具 https://www.post.gov.tw/post/internet/Postal/index.jsp?ID=207#result
▶︎ 嘉信對非美國投資者說明 https://www.schwab.com.hk/zh-hk/us-taxes
▶︎ 美國券商嘉信理財開戶教學 https://youtu.be/qtfPovCTf0I
00:00 W-8 表格與稅務問題
01:28 不寫 W-8 表格會怎麼樣?三年需要更新一次
02:22 填寫 W-8 表格,對我的 youtube 廣告收入有什麼影響?
03:25 手把手填寫 W-8 表格 管理稅務資料
06:11 Peggie未來領取YouTube 收益的規劃
----------
如果你是Youtube的創作者 開始Youtube上面有收入的話
你在今天(3/10)的凌晨可能會在你的信箱裡面收到一封
來自Youtube官方的信
然後看起來好像是要跟你課稅的樣子
其實就要你去填寫 W-8 表格
是跟(美國所得)稅有關的事情
因為我已經投資美國股市很久時間
所以我對這個表格蠻熟悉的
接下來我會跟大家講解一些關於這個表格的事情
如果不想讓了解原理 只想知道表格怎麼填的話
可以拉到時間軸的後面
我會示範 怎麼樣一步一步填寫這個表格
如果你對於這個事情很好奇的話
我會跟你解釋我所理解的內容
因為每個人的 國籍 稅務身份 都不太一樣
所以我可能沒有辦法包含到所有人的需求
那我待會主要講的
會是以如果你是一個台灣人
平常就只有繳稅給台灣
是用個人的身份 在收youtube的收入的話
要怎麼樣 來填寫這份表格 對你來說有什麼影響
如果是我忽略了 或者是沒有講到地方
也歡迎大家在底下補充更多資訊
第一個 我不是美國的 稅務身份
需不需要交稅給美國? 其實是不需要的
如果你是台灣人的話 其實不需要繳稅給美國
美國的繳稅公民的身份是這樣
只要你是美國人 你在全世界的收入 都必須繳稅給美國政府
即使是美國人來台灣工作
到香港工作到那裡工作等等之類
這些收入都必須繳稅給美國政府
台灣人是不用的
這個頁面 是嘉信證券 對於非美國人稅務的說明頁面
國外的投資者 只要繳交一個叫做 W-8 的表格
你就可以免去每年投資的資本利得稅務 股息要預扣 30% 稅
基本上預扣是拿不回來的
這個 W-8 表格 就是在幫你告訴美國政府說
我不是美國的稅務身份 請你不要跟我扣美國人的稅
那如果你在美國有收入
卻沒有填寫這個 W-8 表格的話
他就會把你預設成你是美國人 跟你預扣美國人的稅率
google 這邊寫說如果是預扣的話 稅率是 24%
因為是繳給美國政府的文件
大家一定要注意表格上面資訊的正確性
尤其是地址
如果未來有東西寄到你填寫的這個地址 你沒有收到
然後被退回美國的話
這份 W-8 表格就相當於沒有作用
你又會被扣 美國人的稅率
W-8 表格 是每三年要更新一次
不同的機構 就要填寫不同的 W-8 表格
比如說我在 TD Ameritrade 開個戶 那邊就有一張 W-8 表格
我在嘉信證券有個賬戶 那邊就會有一張 W-8 表格
我現在在Google有個 Google AdSense™的賬戶
這邊也會有一張 W-8 表格
照理來說 這些個別的系統 在時間快到的時候
它都會提醒說 W-8 表格效期快到了 記得更新
大概的說明就是這樣
但是你也不要擔心
填了 W-8 表格之後會不會被扣很多的稅
這大家說明一下今天 Google 的用意是什麼
他說如果你的youtube收入 假設是100塊錢
然後這100塊錢 全部都是來自於非美國的用戶 所貢獻的
你的觀眾不是美國人 可能是台灣人 或者其他華語圈的人
如果是沒有填寫 W-8 表格
跟有填寫 W-8 表格
你所需要交的稅會不一樣哦
如果你沒有填寫 W-8 表格的話 他就當做你是美國人
所以不管你的用戶來源是哪裡 全部預扣 24% 稅
如果你有填寫 W-8 表格 跟美國政府說
我不是美國人 不要跟我扣美國人的稅
這些非美國用戶所貢獻的盈利 是 0% 的稅
那如果你的收入來源
有20%是非美國用戶
然後有另外的80%是來自於美國用戶的話
沒有填寫 W-8 也一樣是預扣24% 稅
有填寫 W-8 跟他說你不是美國人的話
它就會是其中的80塊是 30% 稅
然後20塊 是 0% 的稅
接下來示範 怎麼填寫 W-8 表格
先登錄你的 Google AdSense™ 賬戶
現在進去就會看到警示說
我們這個新的政策
它是規定要在2011年的5月31日之前把 W-8 表格填完
按管理稅務資料 或者是按付款
一樣按管理稅務資訊
這邊按加入稅務資訊
這邊會要再驗證一次密碼 輸入完之後就按繼續
接下來選 個人 按繼續
美國公民或居民嗎 否 要選否才能填 W-8
按繼續 W-8 選第一個 開始填寫
這邊的名字要跟你的護照上面(外幣帳戶)的英文名字一樣
如果你暫時還沒有護照的話
你可以用你的信用卡(英文名)或者是你自己翻譯
但你要記得你現在自己翻譯了
你未來去辦護照
那個官方文件就要用你現在翻譯的時候自己寫的那個名字
國籍選你的國籍 我選台灣
這個納稅人識別號碼 就是要寫
既然你不是繳稅給美國 那你是繳稅給誰
我是繳稅給中華民國政府
所以我要寫我在中華民國政府的 稅籍編號 就是身份證字號
那你如果是其他國家的
就看你的國家的稅籍編號是什麼 這邊按繼續
這邊的永久地址 就是你的戶籍地址
那你要把它自己翻譯成英文的
英文地址 可以到郵局這個網站去翻譯
如果你有其他的郵寄地址
google 這邊沒有很要求地址證明
所以你可以寫其他的郵寄地址
我是避免爭議 所以直接就寄到戶籍地址去
打勾按繼續
租稅協定 台灣跟美國是沒有租稅協定的
可是如果是中國大陸 跟美國是有租稅協定的
所以看你所在的國家去填寫
台灣人選否 按繼續 這樣就填完了
打開檢查一下
然後確認一下這邊的都是你剛剛所填的資訊
有一個重點是這個 foreign tax id 這邊就是要填
你在自己的國家
比如說我填台灣的稅籍編號 就是身份證字號
如果沒有的話 這份 W-8 表格 是會有點怪怪的
ok 之後按打勾
繼續這邊的簽名 現在用電子簽名就好
輸入 你的護照上面的英文名字
然後這個表示是我自己填寫的 選是 按繼續
接下來這個問題 有沒有在美國境內從事活動服務 選否
這邊再打勾一次
下面這個就是 你這個賬戶之前有沒有 已經收過款
如果有的話就選下面這個
我的賬戶是還沒有收過錢的 我選上面這個
根據你的狀況去做填寫
好了後就按提交 這邊顯示已核准了
就是 W-8 表格已經寫好了 系統覺得沒有任何的問題
這邊 30% 的稅率 你要記得只是針對
如果你的客人是來自於美國的用戶
那美國用戶所貢獻的盈利會被預扣 30% 稅 就是這樣而已
其他國家來源貢獻的廣告收入 是不會預扣 30% 稅
不需要過度擔心
我要跟大家講的是 繳稅是有錢人的高級煩惱
所以不要覺得說 繳稅好像是很討厭的事情 或者是什麼的
你真的是有賺錢 才有要繳稅這件事情
我會對 W-8 表格很熟悉 是因為我已經投資美國股市很久了
在那邊的投資收入也是很不錯的
我常常在填寫這個表格
如果大家對美股投資有興趣的話
你可以再私訊我
或者在底下留言告訴我 你們想知道什麼美股相關的訊息
我這個頻道 還沒有達到真的可以把錢領出來的標準
可以領錢的標準是100塊美金
我預計會用領支票的方式
然後再把支票存到嘉信證券賬戶裡面
再用嘉信證券的那張提款卡 從台灣領錢出來
未來如果這個頻道的收入 真的達到100塊美金
有時候到那個支票 有做了這個流程之後
再拍影片跟大家分享
----------
☞ 如果對你有幫助,請記得按👍讚並留言✍︎告訴我喔
▶︎ 訂閱大天使TV,第一時間通知你最新正確用藥資訊
‣‣ http://bit.ly/33JLAtk
▶︎大天使TV其它的平台更精彩 有IG與FB粉絲團◀︎
‣‣一鍵連結按這裡 ► https://joy.link/pharmapeggie
▶︎藥師如何投資美股?點連結免費參加分享會 ◀︎
‣‣ http://bit.ly/BOS-Peggie -
youtube付款方式驗證 在 林進 Youtube 的精選貼文
2019-12-16 01:10:17#1209祝我生日快樂 🎂😄🎂(海外朋友有福囉)
這次親自設計想要帶給大家不同的感覺
我找來了自己身邊的好朋友們
身高152~188越努力越幸運T 穿起來的樣子
三樣商品都是我常使用也很喜歡的🥰
希望每個人都可以穿上的OVERSIZE設計
想告訴大家我們沒有不一樣
雙面設計配你穿搭使用的飲料杯套/雙色刺繡襪子
都是我很喜歡日常也使用得到的商品❤️
『越努力越幸運』系列商品
越努力,越幸運
越幸運,越有更大的舞台去努力
希望可以帶給大家正面力量,不畏挑戰!!!
🌻100%台灣製造🌻
🈴品質本人驗證🈴
🔝簡單輕鬆穿搭🔝
🥤杯套環保愛地球🥤
預購網址: https://reurl.cc/vn8ZrA
---------------------以下是預購須知-----------------
1.完成繳費才是有下單成功
2. 預購完畢後90天內才出貨,請耐心等候!
3. 預購商品皆為下訂之後才製作不支持退換貨。
4. 支持全球寄送➡付款、可訂購國家以及運送方式請參閱網站。
5. 預購時間12/09(一)12:00~12/25(三)23:59
6. 有任何問題請洽KOL STYLE官網客服以及粉絲團私訊,或以LINE@詢問:@xhv7016l (要+@才有辦法加入喔)
7.預購前敬請再次詳閱KOLSTYLE官網預購須知。 -
youtube付款方式驗證 在 林進 Youtube 的最佳貼文
2019-12-12 01:07:57#1209祝我生日快樂 🎂😄🎂(海外朋友有福囉)
這次親自設計想要帶給大家不同的感覺
我找來了自己身邊的好朋友們
身高152~188越努力越幸運T 穿起來的樣子
三樣商品都是我常使用也很喜歡的🥰
希望每個人都可以穿上的OVERSIZE設計
想告訴大家我們沒有不一樣
雙面設計配你穿搭使用的飲料杯套/雙色刺繡襪子
都是我很喜歡日常也使用得到的商品❤️
『越努力越幸運』系列商品
越努力,越幸運
越幸運,越有更大的舞台去努力
希望可以帶給大家正面力量,不畏挑戰!!!
🌻100%台灣製造🌻
🈴品質本人驗證🈴
🔝簡單輕鬆穿搭🔝
🥤杯套環保愛地球🥤
預購網址: https://reurl.cc/vn8ZrA
---------------------以下是預購須知-----------------
1.完成繳費才是有下單成功
2. 預購完畢後90天內才出貨,請耐心等候!
3. 預購商品皆為下訂之後才製作不支持退換貨。
4. 支持全球寄送➡付款、可訂購國家以及運送方式請參閱網站。
5. 預購時間12/09(一)12:00~12/25(三)23:59
6. 有任何問題請洽KOL STYLE官網客服以及粉絲團私訊,或以LINE@詢問:@xhv7016l (要+@才有辦法加入喔)
7.預購前敬請再次詳閱KOLSTYLE官網預購須知。
youtube付款方式驗證 在 廷豐水產 SoGood 莎媽廚房 Facebook 的最佳解答
阿拉伯頂級藍鑽蝦|🦐
▪️30/40尾 1公斤/盒 藍鑽蝦 $550 最大隻規格
▪️40/50 尾 1公斤/盒 藍鑽蝦 $510 第二規格
❤️莎弟認真說,最低價在這,歡迎比價❤️
⚠️庫存齊全,冷凍庫裡好多藍鑽蝦
⚠️藍鑽蝦就是白蝦,白蝦中的法拉利
⚠️最鮮甜的白蝦,蝦膏甜而回甘
⚠️最大隻市價690以上
⚠️第二規格市價600以上
全程低溫運輸,產地直送,快速送達
產品符合SGS檢驗及多項國際認證,享有1000 萬產品責任險保障。
阿拉伯純淨的高鹽度紅海養殖,養殖過程不添加化學成分,藍鑽蝦養殖區受沙烏地阿拉伯國王特許,生產的藍鑽蝦品質之優,可以說是皇室御用,出生非凡。
藍鑽蝦的品質全球第一,不僅通過BAP「最佳水產養殖規範驗證」,還獲得稀有的四星等級,從飼料廠、孵化廠、養殖場、以及加工廠,整個供應鏈的生產全都符合國際高標準。
藍鑽蝦採用IQF 活體單凍方式,從產地捕撈到進入加工廠凍結不超過4 小時,全程低溫控管,確保新鮮無虞!而單體凍結方式,可一隻隻拆解使用,需要多少即拆多少,兼具便利性與維持最佳鮮度。
#歡迎索取食材價目表
#歡迎批發零售 #團爸團媽 #餐廳
👏歡迎訂閱我們的youtube頻道🔔
點它一下➡️ bit.ly/訂閱頻道 ⬅️
訂閱按完後旁邊的🔔也要按一下歐
訂購點選下面連結
直接告知我們食材與數量即可
訂購私信我們⬇️
m.me/sogoood88888
訂購Line我們加入食材群組⬇️
https://line.me/ti/p/sT3DUtph32
加入後可告知我們加入食材群組
每日上傳食材資訊與新鮮魚貨
只有群組才看得到的優惠資訊
🈵️5000免運
📣嘉義地區可自取
🚚黑貓全台低溫宅配,可配合貨到付款,貨到付款不加收手續費,參照黑貓低溫運費收費。
本島運費$160、$225
外島運費$260、$340
youtube付款方式驗證 在 林智堅 Facebook 的最讚貼文
【預購三倍券教學】
今天三倍券開始預購了,大家都已經預購了嗎?其實預購三倍券有很多種方式。可以在家用線上預購,也可以到超商操作事務機預購,還可以綁定信用卡、電子票證,或是行動支付,都可以!
我今天要來使用的方式是「網站預購」。跟著我的步驟,就可以輕鬆完成預購喔!
第一步,打開健保快易通app,就是大家之前網購口罩的app。
第二步,點開「三倍券驗證」
第三步,點「產製三倍券驗證碼」,就會得到三倍券的驗證碼。
第四步,到「振興三倍券預購平台」,輸入相關資料,就預購完成囉!只要7/15到選擇的門市付款就可以拿到三倍券了!
等大家都拿到三倍券的時候,我們再出門衝消費,挺振興,全民一起買起來!
#三倍券官方網站:http://3000.gov.tw
#三倍券預購教學 #全民買起來
追蹤IG▶️ https://reurl.cc/exG76R
訂閱Youtube▶️ https://reurl.cc/GV5Lo3
加入市府的line▶️ https://reurl.cc/p2zme
youtube付款方式驗證 在 Taipei Ethereum Meetup Facebook 的精選貼文
📜 [專欄新文章] Uniswap 解析:恆定乘積做市商模型 Constant Product Market Maker Model 的 Vyper 實作
✍️ 田少谷 Shao
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
在 🦄 Uniswap v2 到來之前徹底了解 v1 的設計與演算法!
Image source: https://uniswap.org/
Outline
一. 前言二. 恆定乘積做市商模型 Constant Product Market Maker Model 1. 計入手續費 2. 程式碼結構 3. 演算法核心與實作 4. 段落小結三. 流動性 Liquidity 1. 第一筆流動性注入、決定k值 2. 除了第一筆以外的情況四. 結語
一. 前言
暨上一篇開始接觸了 Vyper 後,我找了 Uniswap 的程式碼來更加熟悉 Vyper 的實作方法,順便研究了其演算法,然後就又寫了一篇 xD
類 Python 的合約語言 Vyper 開發入門:與 Solidity 差異、用 Truffle 部署、ERC20 賣幣合約實做
Uniswap 是以太坊上非常成功的自動做市商 Automated Market Maker (AMM)。本次我將用的 Uniswap 的程式碼搭配由 Runtime Verification 這家審計公司對 Uniswap 所做的形式化驗證結果來解釋恆定乘積做市商模型的 Vyper 實作 (2018 審計時 Uniswap 就已經是用 Vyper 而非 Solidity 了):
智能合約程式碼:https://github.com/Uniswap/uniswap-v1/blob/master/contracts/uniswap_exchange.vy
合約審計結果:https://github.com/runtimeverification/verified-smart-contracts/blob/master/uniswap/x-y-k.pdf
本文將以講解實作概念及數學推導為重點,程式碼的部分只是輔助。審計結果將恆定乘積做市商模型演算法的數學推導寫得非常清楚而有趣(?),建議有興趣者可以整份看過一遍,相信得到很多收穫!
至於更多 Uniswap 的介紹有興趣者可以參考 吳冠融 Roger Wu 所撰寫的簡介與使用流程:
解析 DeFi 項目《Uniswap》(一)Uniswap 是什麼?
解析 DeFi 項目《Uniswap》(二)Uniswap 如何使用?
在開始前的最後,先預告本文頗長,所以來播個被 Youtube 推薦的歌吧:
二. 恆定乘積做市商模型 Constant Product Market Maker Model
交易所如果要去中心化、也不使用掛單 order book,就需要靠演算法自動算出交易標的的數量與價格,而 Uniswap 使用名為恆定乘積的演算法,其來源可追溯自 Vitalik 的這篇文章:點我。
公式非常的簡單:x * y = k。令交易的兩虛擬貨幣為 X 和 Y,各自數量為 x 和 y,兩貨幣數量的乘積 x * y 恆等於 k,k 值是由第一筆注入的流動性所決定 (於 三. 流動性 Liquidity 解釋)。
因此,用 ∆x 數量的 X 幣來購買 Y 幣所能得到的數量 ∆y、或是為了購買 ∆y 需要付出的 ∆x 數量,依照此公式進行計算:(x+∆x)(y-∆y) = k,而交易的價格就是兩幣量 ∆x 和 ∆y 的比。
以下公式用 α = ∆x / x 和 β = ∆y / y 來表示 ∆x 和 ∆y 及 X Y 兩幣在交易發生後的新均衡數量:
圖一
1. 計入手續費
在 Uniswap 進行的每一筆交易都會被收取 ρ = 0.003 / 0.3% 的手續費回饋給流動性提供者 liquidity provider ,因此要將手續費納入公式的考量:
圖二
上圖的公式或許不太直覺,我建議不要從 x’ρ 及 y’ρ 開始理解,而是從 ∆x 和 ∆y 兩值開始:手續費 ρ = 0.3% 的意思是會從付款中扣掉 0.3 %,也就是從 ∆x 扣。在有手續費的情況下 ∆x 就變成了 (1-ρ)∆x ,若令 γ = 1-ρ 則為 γ∆x。因此,將圖一中的 ∆x 換成 γ∆x,就會得到以下式子:
source: https://www.codecogs.com/latex/eqneditor.php
將等號左方的 γ 移到右方後就得到了圖二中的 ∆x。同理,由於 ∆y 中的 α = ∆x / x ,用 γ∆x 代換 ∆x 就會得到圖二中的 ∆y (有 α 的地方乘上 γ )。而 x’ 還有 y’ 就可以由 ∆x 和 ∆y 推出來了!
然而,將圖二中得到的 x’ 和 y’ 相乘,會得到:
source: https://www.codecogs.com/latex/eqneditor.php
也就是說,當有手續費使得 γ != 1 /ρ != 0,x’ρ * y’ρ 的值其實會稍微和 xy = k 不同:在實作上 γ = 0.997 / ρ = 0.003,因此 1/γ-1 ≒ 0.003。β = ∆y / y 代表的是換得的 Y 幣佔總量的比例,即使最大值為 1,誤差也只有 1 * 0.003,故可知手續費 = 0.3% 對於 k 值的影響極小。
2. 程式碼結構
了解了基本的公式後,就可以開始研究程式碼是怎麼撰寫的。首先來看各個函式的功能:
addLiquidity() 及 removeLiquidity():轉入與轉出資金,留到 三. 流動性 Liquidity 中說明
getInputPrice() 及 getOutputPrice():最主要的函式,用以計算給 ∆x 所能換得的 ∆y 數量、以及為了得到 ∆y 所要支付 ∆x 的數量。此兩函式會被其他負責進行交易、匯幣的函式使用
三組 (eth->Token, Token->eth, Token->Token) 的 swap() 及 transfer():swap() 的收幣人就是付款人、transfer() 的收幣人不是付款人而是指定的對象。基本上這兩函式就是呼叫 getInputPrice() 或是 getOutputPrice() 後進行匯幣的動作,因此不再多做解釋
3. 演算法核心與實作
在研讀程式碼前,先回顧一下 ∆x 和 ∆y 的公式:
首先我們考慮用 ∆x 所能購買到的 ∆y 的 getInputPrice():
什麼…就這幾行程式碼?是的。
以上的程式碼和公式表達方式不同,因此先將 α = ∆x / x 和 β = ∆y / y 代換回來並將上下同乘 x:
source: https://www.codecogs.com/latex/eqneditor.php
由於 γ = 0.003,可以將上下同乘 1000 後得到:
source: https://www.codecogs.com/latex/eqneditor.php
接著就能來對照程式碼了:
(109行) numerator: input_amount 是欲支付的 X 幣數量 ∆x、output_reserve 是 Y 幣數量 y,再乘上 997 後就是等式右邊的上方 (= 997∆xy)
(110行) denominator: input_reserve 是 X 幣的數量,乘上 1000 再加上剛剛算過的 997∆x,就得到了等式右邊的下方 (= 1000x + 997∆x)
此處要注意的是 Vyper 的除法是無條件捨去,等同於 floor() 函式。這會不會造成嚴重的影響呢?如果熟悉 ERC20 的人應該記得,在發幣時輸入的四個參數中有一個參數代表小數點的位數,如同下方程式碼中的 2 代表最後兩位在小數點後。舉例來說,當 getInputPrice() 收到 1234567 為這個幣的 input_amount 時,代表使用者擁有的幣的數目實際上是 12345.67。因此,即使將結果捨去 0.67 後的數字,影響真的不大,況且如果不捨去而選擇無條件進位,那代表交易所反而要虧損一點點啦,太佛心了吧 xD 有興趣者可以看看審計報告的內容,有更詳細地去定義這些誤差所影響的範圍!
再來我們看若要購買 ∆y 需要付出多少 ∆x 的 getOutputPrice()。
一樣先將 α = ∆x / x 、β = ∆y / y 和 γ = 0.003 代換並上下同乘 1000y 得到:
source: https://www.codecogs.com/latex/eqneditor.php
我們已經看過 getInputPrice() 一次了,所以應該能發現第 122–124 行得出的結果和上式相同。要注意的是這邊的結果反而是無條件捨去後直接 +1,因為這是在計算使用者要付多少 ∆x 才能購買到 ∆y,為了不讓交易所虧只能選擇請使用者多付一點點。
4. 段落小結
以上就是撇除匯幣等函示,恆定乘積做市商的 Vyper 實作,沒錯就這樣而已!Uniswap 之所以可以做到低 gas 消耗就是因為這個演算法本身就非常簡單,所需的運算也就是兩三次乘除法而已!
不過我們還沒結束,接下來要談談如何投入資金/注入流動性,而這部分也包含了決定 k 值的精妙機制!
三. 流動性 Liquidity
流動性指的是交易市場中能夠交易的資金/標的物的量。使用自動做市商 (AMM) 而非掛單的最大好處就是市場一定會有流動性,而缺點就是如果交易量越大就會造成越大的滑點 Slippage,意思就是交易價格變動會越大、得到的價格越差 。
source: https://ethresear.ch/t/improving-front-running-resistance-of-x-y-k-market-makers/1281
我們可以用上面提到的 V 文章中的圖片來迅速帶過,畢竟有關注 Uniswap 的讀者大概都已經看過這圖很多次了。
當要兌換的幣的數量越大/占比越重,例如:20% Y 幣的流動性,就會造成要付出比兌換少量時極為不對稱的高額 X 幣。
接著我們要來探討注入流動性的原則,依照市場是否已經有流動性而區分為兩種情形:
1. 第一筆流動性注入、決定 k 值
以下程式碼是 addLiquidity() 函式中 46-48, 51, 及 64-74 行。當市場上還沒有任何流動性時,不會滿足第 51 行而是進入 64 行的 else。
在第 65 行我們可以看到 msg.value ≥ 10¹⁰,以及在 67 行 token_amount 就是其中一個輸入值 max_tokens。這邊代表的是第一個注入流動性的使用者可以自行決定要注入多少 Ether (≥ 10¹⁰) (= x) 以及相應的幣的數量 (= y),也就是上方提到的 k 值 (= x* y),在本例的 X 幣就是 Ether。(本處先不解釋剩餘的程式碼,留到 2. 除了第一筆以外的情況)
那麼問題來了:第一個注入流動性的人要怎麼決定提供各自多少的兩種幣呢?最好的辦法是依照當時兩幣的市價比,讓兩者的價值 (數量 * 價格) 相同,例如:當 1 Ether 的價格為 100 Dai,注入 1 Ether 以及 100 Dai 是最好的,因為兩種幣的總價值是一樣的,以下舉例說明原因。
當 1 Ether 市價為 100 Dai 時,假設第一人決定注入 1 Ether 和 50 Dai (k = 50),總價值為 150 Dai,我們考慮兩種兌換方法:
Ether -> Dai:用 0.1 Ether 來購買 Dai,依照上方公式 (1+0.1)(50-y) = 50 可得 y ≒ 4.55,也就是說得到的價格是 0.1 Ether = 4.55 Dai,遠低於市價 0.1 Ether = 10 Dai,相信沒有人這麼傻~
Dai -> Ether:用 2 Dai 來購買 Ether,依照上方公式 (1-x)(50+2) = 50 可得 x ≒ 0.038,也就是說得到的價格是 2 Dai = 0.038 Ether,高於市價 2 Dai = 0.02 Ether,那麼眼尖的人就會立刻衝來套利了xD
那麼即使如此,第一人有所損失嗎?當然有!假設路人 A 手上有 30 Dai (= 0.3 Ether),A 看到機會後就把 30 Dai 全換成 Ether:(1-x)(50+30) = 50 可得 x = 0.375,大於原本持有的 Dai 的價值 0.3 Ether。此時,第一人即使立刻抽出現存的全部資金 Ether = 0.625 及 Dai = 80,總價值也只剩下 142.5 Dai,比起原本的 150 Dai 還少。以上的計算還有手續費沒有納入考量,但也只有 30 Dai 的 0.3% = 0.09 Dai。
由上例可知,第一位提供流動性的人為了避免自己的損失,確實得依照當時兩幣的市價比去提供相應的數量。傑克,這真是太神奇了0…0
2. 除了第一筆以外的情況
如果市場已經有流動性,使用 addLiquidity() 來注入流動性就會進入第 51 行的 if。
source: https://github.com/Uniswap/uniswap-v1/blob/master/contracts/uniswap_exchange.vy
(53行) eth_reserve: 由於使用者已經透過函式 addLiquidity() 將錢匯入了合約,因此將合約所擁有的 Ether 數量 self.balance (= x + ∆x) 減去使用者匯入的錢 msg.value (= ∆x),得到使用者匯錢之前合約內所擁有的 Ether 數量 (= x)
(54行) token_reserve: self.token 是一個餵入幣地址的 ERC20 instance;透過呼叫 ERC20 的函式 balanceOf() 即可查出合約所擁有的 Y 幣的數量 (= y)
(55行) token_amount: 透過將合約所擁有的 Y 幣的數量 token_reserve (= y) 乘上使用者匯入的錢 msg.value (= ∆x) 對合約原本擁有的Ether 數量 eth_reserve (= x) 的比例,代表使用者應該相應地注入多少 Y 幣 (∆y = y * ∆x / x)。除法一樣是無條件捨去
(56行) liquidity_minted: 將原本交易所中的總流動性 total_liquidity 乘上增加的比率 msg.value / eth_reserve (= ∆x / x) ,代表增加的流動性,隨後會在第 58 行記錄下來
(60行) transferFrom() 函式將使用者應付的 Y 幣數量 token_amount (= ∆y) 匯入當前合約,就完成了流動性的注入。小提示:智能合約中的 assert() 會確保函式內的條件如果失敗就整筆交易 transaction 直接取消,因此只要傳入的參數已經被計算好,於 60 行再進行 transferFrom() 其實與放在前面並沒有太大的差別
以上就是注入流動性的大致實作內容。取出資金 removeLiquidity() 其實與 addLiquidity() 的做法大同小異,因此就不再贅述。
四. 結語
呼,真的累。恆定乘積做市商模型的概念雖然簡單,但解釋起來還是挺複雜的!其實本文並未著墨於審計報告中的主要議題:評估因為整數除法 (不使用浮點數) 而造成的誤差範圍,因為講起來非常複雜、也不是真的這麼需要知道。不過,恰巧就是這些程式碼的細節有可能讓程式產生預期之外的結果!因此,對於有興趣了解該如何去分析智能合約整數除法的讀者,可以研究一下;而 Uniswap 的程式碼因為是用 Vyper 實作,可讀性非常高、同時也不難,因此也非常值得打開來看看、甚至動手實作自己的版本!
最後,如果本文有任何錯誤,請不吝提出,我會盡快做修正;而如果我的文章有幫助到你,可以看看我的其他文章,歡迎一起交流 :)
田少谷 Shao - Medium
Uniswap 解析:恆定乘積做市商模型 Constant Product Market Maker Model 的 Vyper 實作 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌