MiMCの秋新色は洗練されたアースカラーに注目!【2021秋新色BOOK】
https://maquia.hpplus.jp/catalog/newcolor/61463/?utm_campaign=maquia_online.facebook.20210803100021&utm_source=facebook&utm_medium=referral
#メイク
同時也有338部Youtube影片,追蹤數超過10萬的網紅yurika mul,也在其Youtube影片中提到,ご褒美に買ったトム様を使ってナチュラルなカラーメイクをしてみました✨このパレットキラキラしてるし、ナチュラルだけど、華やかになるし最高🥺💓やっぱトム様キレイだあああ!!新作のボビーブラウンもめちゃ綺麗だった🧡 そして、追加買いしたGUも一緒に紹介しちゃいました😂 両方ともゆるっとしてて本当可愛いの🥺...
「mimc」的推薦目錄:
- 關於mimc 在 MAQUIA SHUEISHA Facebook 的最佳貼文
- 關於mimc 在 Taipei Ethereum Meetup Facebook 的最讚貼文
- 關於mimc 在 Taipei Ethereum Meetup Facebook 的最佳解答
- 關於mimc 在 yurika mul Youtube 的最讚貼文
- 關於mimc 在 Bloome Channel Youtube 的最佳解答
- 關於mimc 在 yurika mul Youtube 的最佳貼文
- 關於mimc 在 粉底液测评#6//MIMC日本有机小众养肤粉底液//敏感肌可用 ... 的評價
- 關於mimc 在 【MiMC 礦物底妝及水潤眼影液】... - Cosme Kitchen Hong Kong 的評價
mimc 在 Taipei Ethereum Meetup Facebook 的最讚貼文
📜 [專欄新文章] Tornado Cash 實例解析
✍️ Johnson
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Tornado Cash 是一個使用 zk-SNARKs 建立的 Dapp,它實現了匿名的代幣交易,這篇文章就用一些程式碼片段,來分享它是怎麼運作的。
本文為 Tornado Cash 研究系列的 Part 3,本系列以 tornado-core 為教材,學習開發 ZKP 的應用,另兩篇為:
Part 1:Merkle Tree in JavaScript
Part 2:ZKP 與智能合約的開發入門
Special thanks to C.C. Liang for review and enlightenment.
我們知道在以太坊上的交易紀錄都是公開的,你可以在 etherscan 上看到某個地址的所有歷史交易紀錄,當然地址是合約的話也是一樣。
也許創建一個新的錢包和地址就好了?假設一個情境是 Alice 想要匿名傳送 1 ETH 給 Bob,Alice 原本的錢包是 A,但她不想讓 A 地址傳給 Bob 的交易紀錄被看到,所以 Alice 創建另一個錢包 B,顯然 B 錢包是空的,Alice 必須把 A 錢包的 1 ETH 傳到 B 錢包,再用 B 錢包的地址傳給 Bob。
但問題就在於,只要追蹤 B 錢包的地址,就能看到 B 的歷史交易紀錄中 A 錢包曾經打幣給 B 錢包,於是到頭來交易還是被追蹤到了。
Tornado Cash 的解決方案,簡單來說,它是一份合約,當你要匿名傳送代幣時,就把一定數量的幣丟進合約裡 (Deposit),此時你會拿到一個 note,長得像這樣:
tornado-eth-0.1-5-0x3863c2e16abc85d72b64d78c68fca5936db2501832e26345226efdfb2bc45804977f167d86b711bb6b4095ddaa646ec93f0a93ac4884a66c1d881f4fc985
note 就是一串字串,擁有這字串的人,就能提領 (Withdraw) 剛剛傳入合約的代幣。握有 note 就代表擁有提款的權利,所以 note 一旦被別人知道,別人就可以把錢給提走。
其中,後面那段亂碼,本篇文章就以「秘密」來稱呼,這個秘密是由 secret 與 nullifier 組成,而這兩個都是在鏈下隨機產生的亂數。
因此 Tornado 的合約基本上會有兩個函式:
Deposit
Withdraw
有興趣的人可以先到 Dapp 上先玩一次看看,使用 Goerli 測試網,這裡可以領 Goerli 的代幣:https://goerli-faucet.slock.it/
Deposit
我們就從 Deposit 開始說起,簡單來說, Deposit 是將資料儲存到合約的 Merkle Tree 上。
剛剛提到的秘密,它是在鏈下產生,由 secret 跟 nullifier 組成,合在一起之後也稱作 preimage,因為我們要對這個 preimage 進行 hash,就會成為 commitment。
合約中 Deposit 如下:
deposit 除了傳送代幣到合約之外,需填入一個參數 _commitment。
我們對 preimage 使用 Pedersen 作為 hash function 加密後產生 commitment,以偽代碼表示如下:
const preimage = secret + nullifier;const commitment = pedersenHash(preimage);
這個 commitment 會成為 Merkle Tree 的葉子,所以合約中的 _insert(commitment) 來自 MerkleTreeWithHistory.sol 的合約,將我們的資料插入 Merkle Tree,然後回傳一個 index 給你,告訴你這個 commitment 在 Merkle Tree 上的位置,最後一起發布成公開的 Deposit 事件。
我們知道 MerkleTree 是將一大筆資料兩兩做雜湊後產生一個唯一值 root,這個 root 就是合約上所儲存的歷史資料。
root 的特性就是只要底下的資料一有更動,就會重新產生新的 root。
所以只要一有用戶 deposit ,就會插入新的葉子到 Merkle Tree 上,於是就會產生新的 root,所以在合約中有一個陣列是用來儲存所有的 root 的 roots:
bytes32[ROOT_HISTORY_SIZE] public roots;
roots 是用來紀錄每個 deposit 的歷史,每一次 deposit 都會創造新的 root,而所有 root 都會被儲存進 roots 裡,於是當你要提領的時候,就要證明你的 commitment 所算出的 root 曾經出現在 roots 裡,代表曾經有 deposit 的動作,因此才可以進行提領。
Withdraw
在 Deposit 之前 Tornado Cash 就會在鏈下產生秘密後交給使用者,擁有這個秘密的人等於擁有提款的權利。
提領的時候,秘密會在鏈下計算後產生 proof,proof 是 withdraw 需要的參數,所以只要確保這個 proof 能夠被驗證,那麼代幣的接收地址 (recipient) 就可以隨便我們填,只要不填上當初拿來 deposit 用的地址,基本上就做到匿名交易的效果了。
也就是說,產生這個 proof 並提交給合約,能夠證明此人知道秘密,但卻不告訴合約秘密本身是什麼。
function withdraw(bytes calldata _proof, bytes32 _root, bytes32 _nullifierHash, address payable _recipient, address payable _relayer, uint256 _fee, uint256 _refund) external payable nonReentrant;
我們可以清楚看到 withdraw 函式裡沒有接收有關秘密的任何資訊作為參數,也就是秘密不會與合約有所接觸,也不會暴露在 etherscan 上。
回顧 ZKP 所帶來的效果:
鏈下計算
隱藏秘密
在 Tornado Cash 的例子中,我們用秘密來產生證明,完成的鏈下計算包括:
將秘密 hash 成 commitment
算出 Merkle Tree 的 root。
以下是簡化後的 withdraw.circom:
template Withdraw(levels) { signal input root; signal input nullifierHash;
signal private input nullifier; signal private input secret; signal private input pathElements[levels]; signal private input pathIndices[levels];
component hasher = CommitmentHasher(); // Pedersen hasher.nullifier <== nullifier; hasher.secret <== secret; hasher.nullifierHash === nullifierHash;
component tree = MerkleTreeChecker(levels); // MiMC tree.leaf <== hasher.commitment; tree.root <== root; for (var i = 0; i < levels; i++) { tree.pathElements[i] <== pathElements[i]; tree.pathIndices[i] <== pathIndices[i]; }}
component main = Withdraw(20);
從上述代碼就可以看出這份 circuit 的 private 變數有:
secret
nullifier
pathElements
pathIndices
而 public 變數有:
root
nullifierHash
如同我們一開始說過的,秘密就是指 secret 與 nullifier。這裡進行的鏈下計算就是對 secret 與 nullifier 雜湊成 commitment。而使用的 hash function 叫做 Pedersen。
在進行 Merkle Tree 的計算之前,我們還檢查了 nullifier 雜湊後的 nullifierHash 跟 public 變數 nullifierHash 是不是一樣的。
hasher.nullifierHash === nullifierHash;
接下來,開始計算 Merkle Proof,用意是確認經過雜湊後的 commitment 有沒有出現在 Merkle Tree 上,所以我們的 private input 還有 pathElements 與 pathIndices(詳情參考 Part 1 Merkle Tree in JavaScript),讓它跑一趟 Merkle Proof 的計算,最後就能夠算出一個 root,再確認計算後的 root 與我們的 public 變數 root 是否一樣。
tree.root <== root;
於是我們就能產生一個 ZKP 的證明 — 證明 private 變數:secret, nullifier, pathElements, pathIndices 可以計算出 public 變數:root 與 nullifierHash。
把這個證明提交給合約,合約透過 Verifier 驗證 proof 是否正確,以及必須事先確認:
public 變數 root 有在合約的 roots 裡面。
public 變數 nullifierHash 在合約中是第一次出現。
以下附上完整的 withdraw 原始碼:
必須注意 ZKP 是向合約證明使用者填入的 secret 和 nullifier 可以計算出某個 root,但無法保證這個 root 曾經在合約的 roots 歷史上。
所以合約的 withdraw 中,除了 verifyProof 之外,還要事先檢查 ZKP 算出來的 root 是不是真的在歷史上發生過,所以需要 isKnownRoot 的檢查:
function isKnownRoot(bytes32 _root) public view returns(bool)
必須先檢查 isKnownRoot 後才能進行 verifyProof。
經過 verifyProof 驗證成功後,合約就開始進行提款的動作,也就會將代幣傳到 recipient 的地址,最後拋出 Withdrawal 的事件。
nullifier 與 nullifierHash
為什麼我們的秘密不是只有 secret 還要額外加一個 nullifier?
簡單來說,這是為了防止已經提領過的 note 又再提領一次,也就是所謂的 double spend。
require(!nullifierHashes[_nullifierHash], "The note has been already spent");
可以看到 withdraw 需要填入參數 nullifierHash,跟 isKnownRoot 一樣的狀況,我們需要對電路的 public 變數先經過一層檢查之後,才能帶入到 verifyProof 裡面。
nullifierHash 可以理解為這個 note 的 id,但它不會連結到 deposit,因此可以用來紀錄這個 note 是否已經被提領過。
所以當 verifyProof 驗證成功之後,我們要紀錄 nullifierHash 已完成提領:
nullifierHashes[_nullifierHash] = true;
有關為什麼需要事先檢查 public 變數後,才能帶入 verifyProof ,可以參考 Part 2:ZKP 與智能合約的開發入門 提到的 publicSignals 的部分。
附上 Tornado Cash 的架構圖:
簡化版的 tornado-core
tornado-core 的程式碼很簡潔漂亮,所以我模仿該專案自己實作一遍:
simple-tornado:https://github.com/chnejohnson/simple-tornado
這份專案只完成了 tornado-core 的核心部分,不一樣的是我的開發環境使用 hardhat 與 ethers 寫成,而 circom 與 snarkjs 使用官方當前的版本,合約用 0.7.0,測試使用 Typescript 。
比起兩年前的 tornado-core ,simple-tornado 使用的技術更新,可能更適合初學者理解這份專案,但是它有 bug…我在 issues 的地方有紀錄說明。
在開發的過程中,我的順序是先從最小單位的 MiMC hash function 開始玩,發現必須 javascript 算一次 hash、solidity 算一次、circom 再算一次,確保這三個語言對同一個值算出同樣的 hash 之後,才能放心去做更複雜的 Merkle Tree。
總結
我們可以看到 Tornado Cash 簡單的兩個函式:Deposit 與 Withdraw,透過將代幣送入合約後再提領到另一個地址的流程,應用 ZKP 達成匿名的交易。
除了斷開 Deposit 與 Withdraw 的地址關聯性之外,Tornado Cash 還有做了一層「藏樹於林」的隱私防護,這部份的解釋就請參考 ZKP 讀書會 Tornado Cash。
網路上很多關於 ZKP 的文章或專案都是在 2019 年後出產的,經過許多人對這項技術的嘗試,讓我們對 ZKP 有了更清晰的理解,如今兩年後,開發工具也變得更加成熟,期待未來在 web 隱私議題上能看到更多 ZKP 大放異彩的應用。
原始碼
tornado-core
simple-tornado
參考資料
ZKP 讀書會 Tornado Cash
Tornado Privacy Solution Cryptographic Review
Tornado Cash 實例解析 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
mimc 在 Taipei Ethereum Meetup Facebook 的最佳解答
📜 [專欄新文章] Merkle Tree in JavaScript
✍️ Johnson
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
這篇文章會說明 Merkle Tree 的運作原理,以及解釋 Merkle Proofs 的用意,並以 JavaScript / TypeScript 簡單實作出來。
本文為 Tornado Cash 研究系列的 Part 1,本系列以 tornado-core 為教材,學習開發 ZKP 的應用,另兩篇為:
Part 2:ZKP 與智能合約的開發入門
Part 3:Tornado Cash 實例解析
Special thanks to C.C. Liang for review and enlightenment.
本文中實作的 Merkle Tree 是以 TypeScript 重寫的版本,原始版本為 tornado-core 以 JavaScript 實作而成,基本上大同小異。
Merkle Tree 的原理
在理解 Merkle Tree 之前,最基本的先備知識是 hash function,利用 hash 我們可以對資料進行雜湊,而雜湊後的值是不可逆的,假設我們要對 x 值做雜湊,就以 H(x) 來表示,更多內容可參考:
一次搞懂密碼學中的三兄弟 — Encode、Encrypt 跟 Hash
SHA256 Online
而所謂的 Merkle Tree 就是利用特定的 hash function,將一大批資料兩兩進行雜湊,最後產生一個最頂層的雜湊值 root。
當有一筆資料假設是const leaves = [A, B, C, D],我們就用function Hash(left, right),開始製作這顆樹,產生H(H(A) + H(B))與H(H(C) + H(D)),再將這兩個值再做一次 Hash 變成 H(H(H(A) + H(B)) + H(H(C) + H(D))),就會得到這批資料的唯一值,也就是 root。
本文中使用的命名如下:
root:Merkle Tree 最頂端的值,特色是只要底下的資料一有變動,root 值就會改變。
leaf:指單一個資料,如 H(A)。
levels:指樹的高度 (height),以上述 4 個資料的假設,製作出來的 levels 是 2,levels 通常會作為遞迴的次數。
leaves:指 Merkle Tree 上的所有資料,如上述例子中的 H(A), H(B), H(C), H(D)。leaves 的數量會決定樹的 levels,公式是 leaves.length == 2**levels,這段建議先想清楚!
node:指的是非 leaves 也非 root 的節點,或稱作 branch,如上述例子中的H(H(A) + H(B)) 和 H(H(C) + H(D))。
index:指某個 leaf 所在的位置,leaf = leaves[index],index 如果是偶數,leaf 一定在左邊,如果是奇數 leaf 一定在右邊。
Merkle Proofs
Merkle Proofs 的重點就是要證明資料有沒有在樹上。
如何證明?就是提供要證明的 leaf 以及其相對應的路徑 (path) ,經過計算後一旦能夠產生所需要的 root,就能證明這個 leaf 在這顆樹上。
因此這類要判斷資料有無在樹上的證明,類似的說法有:proving inclusion, proving existence, or proving membership。
這個 proof 的特點在於,我們只提供 leaf 和 path 就可以算出 root,而不需要提供所有的資料 (leaves) 去重新計算整顆 Merkle Tree。這讓我們在驗證資料有沒有在樹上時,不需要花費大量的計算時間,更棒的是,這讓我們只需要儲存 root 就好,而不需要儲存所有的資料。
在區塊鏈上,儲存資料的成本通常很高,也因此 Merkle Tree 的設計往往成為擴容上的重點。
我們知道 n 層的 Merkle Tree 可以存放 2**n 個葉子,以 Tornado Cash 的設計來說,他們設定 Merkle Tree 有 20 層,也就是一顆樹上會有 2**20 = 1048576 個葉子,而我們用一個 root 就代表了這 1048576 筆資料。
接續上段的例子,這顆 20 層的 Merkle Tree 所產生的 Proof ,其路徑 (path) 要從最底下的葉子 hash 幾次才能到達頂端的 root 呢?答案就是跟一棵樹的 levels 一樣,我們要驗證 Proof 所要遞迴的次數就會是 20 次。
在實作之前,我們先來看 MerkleTree 在 client 端是怎麼調用的,這有助於我們理解 Merkle Proofs 在做什麼。
基本上一個 proof 的場景會有兩個人:prover 與 verifier。
在給定一筆 leaves 的樹,必定產生一特定 root。prover 標示他的 leaf 在樹上的 index 等於 2,也就是 leaves[2] == 30,以此來產生一個 proof,這個 proof 的內容大致上會是這個樣子:
對 verifier 來說,他要驗證這個 proof,就是用裡面的 leaf 去一個一個與 pathElements 的值做 hash,上述就是 H('30', 40) 後得出 node,再 hash 一次 H('19786...', node) 於是就能得出這棵樹的 root。
重點來了,這麼做有什麼意義?它的巧思在於對 verifier 來說,他只需要儲存一個 root,由 prover 提交證明給他,經過計算後產生的 root 如果跟 verifier 儲存的 root 一樣,那就證明了 prover 所提供的資料確實存在於這個樹上。
而 verifier 若不透過 proof ,要驗證某個 leaf 是否存在於樹上,也可以把 leaves = [10, 20 ,leaf ,40]整筆資料拿去做 MerkleTree 的演算法跑一趟也能產生特定的 root。
但由 prover 先行計算後所提交的 proof,讓 verifier 不必儲存整批資料,也省去了大量的計算時間,即可做出某資料有無在 Merkle Tree 上的判斷。
Sparse Merkle Tree
上述能夠證明資料有無在樹上的 Merkle Proofs 是屬於標準的 Merkle Tree 的功能。但接下來我們要實作的是稍微不一樣的樹,叫做 Sparse Merkle Tree。
Sparse Merkle Tree 的特色在於除了 proving inclusion 之外,還可以 proving non-inclusion。也就是能夠證明某筆資料不在某個 index,例如 H(A) 不在 index 2 ,這是一般 Merkle Tree 沒辦法做到的。
而要做到 non-membership 的功能其實也不難,就是我們要在沒有資料的葉子裡補上 zero value,或是說 null 值。更多內容請參考:What’s a Sparse Merkle Tree。
實作細節
本節將完整的程式碼分成三個片段來解釋。
首先,這裡使用的 Hash Function 是 MiMC,主要是為了之後在 ZKP 專案上的效率考量,你可以替換成其他較常見的 hash function 例如 node.js 內建 crypto 的 sha256:
crypto.createHash("sha256").update(data.toString()).digest("hex");
這裡定義簡單的 Merkle Tree 介面有 root, proof, and insert。
首先我們必須先給定這顆樹的 levels,也就是樹的高度先決定好,樹所能容納的資料量也因此固定為 2**levels 筆資料,至於要不要有 defaultLeaves 則看創建 Merkle Tree 的 client 自行決定,如果有 defaultLeaves 的話,constructor 就會跑下方一大段計算,對 default 資料開始作 hash 去建立 Merkle Tree。
如果沒有 defaultLeaves,我們的樹也不會是空白的,因為這是顆 Sparse Merkle Tree,這裡使用 zeroValue 作為沒有填上資料的值,zeros 陣列會儲存不同 level 所應該使用的 zero value。假設我們已經填上第 0 筆與第 1 筆資料,要填上第 2 筆資料時,第 2 筆資料就要跟 zeros[0] 做 hash,第 2 筆放左邊, zero value 放右邊。
我們將所有的點不論是 leaf, node, root 都用標籤 (index) 標示,並以 key-value 的形式儲存在 storage 裡面。例如第 0 筆資料會是 0–0,第 1 筆會是 0–1,這兩個 hash 後的節點 (node) 會是 1–0。假設 levels 是 2,1–0 節點就要跟 1–1 節點做 hash,即可產出 root (2–0)。
後半部份的重點在於 proof,先把 proof 和 traverse 看懂,基本上就算是打通任督二脈了,之後有興趣再看 insert 和 update。
sibling 是指要和 current 一起 hashLeftRight 的值…也就是相鄰在兩旁的 leaf (or node)。
到這裡程式碼的部分就結束了。
最後,讓我們回到一開始 client 調用 merkleTree 的例子:
以及 proof 的內容:
前面略過了 proof 裡頭的 pathIndices,pathIndices 告訴你的是當前的 leaf (or node) 是要放在左邊,還是放在右邊,大概是這個樣子:
if (indices == 0) hash(A, B);if (indices == 1) hash(B, A);
有興趣的讀者可以實作 verify function 看看就會知道了!
原始碼
TypeScript from gist
JavaScript from tornado-core
參考
Merkle Proofs Explained
What’s a Sparse Merkle Tree?
延伸:Verkle Tree
Merkle Tree in JavaScript was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
mimc 在 yurika mul Youtube 的最讚貼文
ご褒美に買ったトム様を使ってナチュラルなカラーメイクをしてみました✨このパレットキラキラしてるし、ナチュラルだけど、華やかになるし最高🥺💓やっぱトム様キレイだあああ!!新作のボビーブラウンもめちゃ綺麗だった🧡
そして、追加買いしたGUも一緒に紹介しちゃいました😂
両方ともゆるっとしてて本当可愛いの🥺❤︎絶対使いやすいからぜひチェックしてみてね✨
Hey,guys!It's natural rose makeup tutorial & GU haul video.Did you guys enjoy that?👻💕
So if you like it,please give me a thumbs up and subscribe my channel.Bye💋
#トムフォード #ローズプリズム #ジーユー #購入品 #秋服 #秋ファッション
楽天ROOMはこちら🧡コスメや日用品、ファッションなどなど載せています✨
↓↓↓
https://room.rakuten.co.jp/yurika_room/items
※住所が変わりましたので
もしお手紙など送ってくださる方がいらっしゃいましたら、ご確認お願い致します🙇♀️💕
💌お手紙の送り先💌
↓↓↓↓↓↓↓↓↓
〒107-6228
東京都港区赤坂9-7-1
ミッドタウン・タワー 28階
UUUM株式会社
yurika mul宛
instagram⇨https://www.instagram.com/yuri0813ka/
Twitter⇨https://twitter.com/yurika__0813
楽曲提供:Production Music by http://www.epidemicsound.com
💄とある1日のGet Ready With Me🚙
https://youtu.be/KXQ4rSevmvs
🧡最小限メイク💓ナチュラルメイクの極み🧡
https://youtu.be/f8M1u3PHezI
✨スキンケアroutine〜summer2018〜✨
https://youtu.be/Gp5OJPJsQ9c
🌞モーニングルーティーン🌞
https://youtu.be/6Qnt97zmkzo
🏝Get Ready With Me in Okinawa🌞
https://youtu.be/0CZDMm5pYAU
💋自己紹介💋
https://youtu.be/gDzsO8OIYIc
Thank you💋
=======================
❤️MAKEUP❤️
Primer
BOBBI BROWN(ボビーブラウン)…インテンシブ スキン セラム ラディアンスプライマー SPF25 PA++ ¥6380
Foundation
BOBBI BROWN(ボビーブラウン)…インテンシブ セラム ファンデーション サンド、ベージュ SPF40 PA++++ 各¥8140
Powder
MACcosmetics...プレッププライムトランスペアレント フィニッシングパウダー ¥4180
Eyebrows
WHOMEE(フーミー)…アイブロウパウダー N bright brown ¥1980
ETVOS(エトヴォス)…ミネラルカラーリングアイブロウ ココアブラウン ¥2750
Eyeshadow
TOM FORD(トムフォード)…アイカラークォード 33 ローズプリズム ¥10340
Eyeliner
ラブライナー…クリームフィットペンシル メープルブラウン ¥1320
Mascara
CEZANNE(セザンヌ)…耐久カールマスカラ ¥638
FASIO(ファシオ)…パワフルカール マスカラEX ロング BK001
Bronzer & Noseshadow
BOURJOIS(ブルジョワ)…Delica de POUDRE Bronzing Powder
Blush
MiMC...ビオモイスチュアチーク 09 ブレッシング ¥4180
Highlighter
Anastasia Beverly Hills(アナスタシア ビバリーヒルズ)...Amrezy Highlighter
Lips
ロムアンド…ゼロマットリップスティック 03 シルエット ¥1540
💙GU 購入品💙
・2WAYフリルネックボリュームスリーブブラウス(長袖) 01 OFF WHITE Lサイズ ¥1990
・[メンズ]デニムシェフジャケット 66 BLUE Lサイズ ¥2990
=======================
mimc 在 Bloome Channel Youtube 的最佳解答
今回はさくらちゃんと一緒に秋のお気に入りコスメを紹介してます🍂💖
今季のトレンドを押さえつつ、イエベ秋の方に特におすすめのコスメがたくさんです✨!
アイシャドウ、リップ、アイブロウ、チーク、いろいろ!🍂
秋って特に好きな色が多くてコスメ買っちゃう〜🥺!
まだまだ秋コスメ集めたいので皆さんのおすすめがあれば是非教えて欲しいです〜🌝
ちなみに今私が気になってるのはSUQQUの新色のリップ💄❤︎
------------------------------------------------------------------------------------
▼秋コスメ紹介🤎
0:00 0P
0:26 【アイブロウ紹介】
0:32 JILL STUART ニュアンスブロウパレット 02
1:38 【アイシャドウ紹介】
1:44 RMK ローズウッドデイドリーム リクイドアイズ 04
3:13 MiMC ビオモイスチュアシャドー 29 ガイヤ
4:21 【チーク紹介】
5:16 CILY BLOSSOM BLUSH ANEMONE
5:32 3CE MOOD RECIPE FACE BLUSH ROSE BEIGE
6:41 M·A·C ミネラライズ ブラッシュ ユーモア ミー
7:42 【リップ紹介】
8:11 LiKEYbeauty スムースフィットリップスティック 01 パーフェクション
8:22 LiKEYbeauty スムースフィットリップスティック 201 ライブ
8:35 LiKEYbeauty スムースフィットリップスティック 202 テンプティング
11:00 NARS パワーマットリップピグメント 2760
12:36 DIOR フォーエヴァーリキッド200 フォーエヴァードリーム
13:29 皆さんのおすすめもコメント欄でぜひ教えてください♡
------------------------------------------------------------------------------------
🍑Instagram
今井美桜 (https://www.instagram.com/mio_ima49/)
田﨑さくら (https://www.instagram.com/tazaki_sakura/)
高木 由梨奈(https://www.instagram.com/yurina_takagi/)
🍑TikTok
https://www.tiktok.com/@bloomechannel
------------------------------------------------------------------------------------
#秋コスメ #新作コスメ #コスメ #メイク #新作コスメ #秋リップ #チーク #RMK
mimc 在 yurika mul Youtube 的最佳貼文
ヘアメンテしましたあ✨今回はパープル×ピンクhairにしたよ💗💜
めちゃ可愛くてお気に入りです🥺✨
そしてそれに合うようにルナソルの新作を使って大人ピンクメイクをしました!
やっぱりこれもラメがすごく綺麗でテンション爆上がりです😭!!
9/17に発売なので気になる方はぜひチェックしてみてください💕
楽天roomにも載せてあります✨
Hey,guys!It's pink makeup tutorial.Did you guys enjoy that?👻💕
So if you like it,please give me a thumbs up and subscribe my channel.Bye💋
#ヘアメンテ #ピンクヘア #ピンクメイク #インナーカラー #ピンクパープルヘア #デパコス #新作コスメ #肌に優しい
楽天ROOMはこちら🧡コスメや日用品、ファッションなどなど載せています✨
↓↓↓
https://room.rakuten.co.jp/yurika_room/items
※住所が変わりましたので
もしお手紙など送ってくださる方がいらっしゃいましたら、ご確認お願い致します🙇♀️💕
💌お手紙の送り先💌
↓↓↓↓↓↓↓↓↓
〒107-6228
東京都港区赤坂9-7-1
ミッドタウン・タワー 28階
UUUM株式会社
yurika mul宛
instagram⇨https://www.instagram.com/yuri0813ka/
Twitter⇨https://twitter.com/yurika__0813
楽曲提供:Production Music by http://www.epidemicsound.com
💄とある1日のGet Ready With Me🚙
https://youtu.be/KXQ4rSevmvs
🧡最小限メイク💓ナチュラルメイクの極み🧡
https://youtu.be/f8M1u3PHezI
✨スキンケアroutine〜summer2018〜✨
https://youtu.be/Gp5OJPJsQ9c
🌞モーニングルーティーン🌞
https://youtu.be/6Qnt97zmkzo
🏝Get Ready With Me in Okinawa🌞
https://youtu.be/0CZDMm5pYAU
💋自己紹介💋
https://youtu.be/gDzsO8OIYIc
Thank you💋
=======================
Color Contact Lens
popkens(ポップレンズ)…スパニッシュブラウン 1day 1箱10枚入り ¥1760
Primer
ETVOS(エトヴォス)…ミネラルインナートリートメントベース ¥4950
Foundation
ETVOS(エトヴォス)…コンフォートクリームファンデーション ナチュラル ¥4400
Concealer
vinotrte(ヴァントルテ)…ミネラルシルクコンシーラー ¥2530
Powder
ETVOS(エトヴォス)…ミネラルUVパウダー ピンクベージュ ¥3080
Eyebrows
WHOMEE(フーミー)…アイブロウパウダー N bright brown ¥1980
ETVOS(エトヴォス)…ミネラルカラーリングアイブロウ ココアブラウン ¥2750
Eyeshadow
LUNASOL(ルナソル)…アイカラーレーション EX14 スカーレットパッション ¥6820
Eyeliner
ラブライナー…クリームフィットペンシル ミディアムブラウン ¥1320
Mascara
ヒロインメイク…カールキープ マスカラベース ¥1100
too faced(トゥーフェイスド)...ベターザンセックス マスカラ ドールラッシュ ¥2970
Bronzer & Noseshadow
ジョンセンムル…スキンヌーダーシェーディングパクト ¥3900
Blush
MiMC...ビオモイスチュアチーク 05 ジョイ ¥4180
Highlighter
MOIRAcosmetics...Sun Glow Face & Body Highlighter 004 FAIRY GOLD $14.00
Lips
DEAR DAHLIA(ディアダリア)…リップパラダイス エフォートレス マットリップスティック M103 SOPHIE ¥4114
=======================
mimc 在 【MiMC 礦物底妝及水潤眼影液】... - Cosme Kitchen Hong Kong 的必吃
MiMC 的Minerial Liquid Foundation在美麗華G20號舖的Cosme KItchen發售。 ... 你好,MiMC 礦物質水潤粉底液補充裝$477,盒$87,礦物水潤眼影液$286,謝謝查詢^^. ... <看更多>
mimc 在 粉底液测评#6//MIMC日本有机小众养肤粉底液//敏感肌可用 ... 的必吃
无美颜无滤镜粉底液测评记得点赞 关注我,听见没 *** 日本有机无添加品牌: MIMC SPF22 PA++ 色号:101(黄一白可用) 205(粉一白可用)或是喜欢更 ... ... <看更多>