📜 [專欄新文章] 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.
👏 歡迎轉載分享鼓掌
同時也有2部Youtube影片,追蹤數超過2,290的網紅Youji,也在其Youtube影片中提到,お客様の中にJavaScriptに詳しい方はいらっしゃいませんか? セレクトボックスの選択肢の配列を切り替える方法がワーカリーマセーン よってフェス用ステージと通常ステージの切り替えにはツールの再起動を要します。悪しからず ~~~~~~~~~~~~ 日本語 / Japanese ~~~~~~~~~...
「javascript if and」的推薦目錄:
- 關於javascript if and 在 Taipei Ethereum Meetup Facebook 的最佳貼文
- 關於javascript if and 在 Vietcetera Facebook 的最讚貼文
- 關於javascript if and 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
- 關於javascript if and 在 Youji Youtube 的最佳解答
- 關於javascript if and 在 Youji Youtube 的精選貼文
- 關於javascript if and 在 How to use OR condition in a JavaScript IF statement? 的評價
- 關於javascript if and 在 JS 用邏輯判斷||(OR) 及&&(AND) 來改寫if (短路求值Short ... 的評價
- 關於javascript if and 在 JavaScript if statements - YouTube 的評價
- 關於javascript if and 在 JavaScript if...else Statement By Examples 的評價
- 關於javascript if and 在 Use Conditional Logic with If Statements.md - GitHub 的評價
javascript if and 在 Vietcetera Facebook 的最讚貼文
𝐉𝐨𝐛 𝐃𝐞𝐬𝐜𝐫𝐢𝐩𝐭𝐢𝐨𝐧:
As a FE Developer, you will be working with Designers to implement UI/UX and support development of products as requested. We are looking for someone who is hard-working, has a strong willingness to learn new tech stack and fluent in English.
Please scroll to the end to see the Application Process.
Probation Period: 2 months
𝐑𝐞𝐪𝐮𝐢𝐫𝐞𝐦𝐞𝐧𝐭𝐬:
- 2+ years of experience with modern front-end development.
- Familiar with Agile development process, esp. Scrum framework
- Proficiency in JavaScript and CSS and an understanding of how web technologies work.
- React: component-based architecture is what you must know to get things done in the right way.
- Familiarity with working with REST API.
- Have experience working with search engine optimization (SEO)
- A Linux or Mac user is a huge plus.
Our tech stacks:
- React & Redux
- Next.js as a framework for server side rendering
𝐀𝐛𝐨𝐮𝐭 𝐲𝐨𝐮:
- Team player
- Quick learner
- Excellent communication & documentation skills
- Excellent time management
- Good English skill is a plus
𝐁𝐞𝐧𝐞𝐟𝐢𝐭𝐬:
- Competitive base salary + 13th month-salary
- Subsidised healthcare
- Dynamic and active work environment
- Catered lunch from Monday to Thursday.
- Opportunity to build a product from the ground up that will reach tens of millions of Vietnamese, other countries in Southeast Asia, and globally
- Access to meet and collaborate with experts and brands; just take a look at the content on Vietcetera to see for yourself!
🕧 Working time: from Monday – Friday, from 9.00 a.m. to 6.00 p.m.
🌐 Work location: Centec Tower, Ground Floor, 72 Nguyen Thi Minh Khai, District 3, Ho Chi Minh City.
𝐀𝐩𝐩𝐥𝐢𝐜𝐚𝐭𝐢𝐨𝐧 𝐏𝐫𝐨𝐜𝐞𝐬𝐬: Send your CV, with the subject "[Full-Time] FE Developer" to careers@vietcetera.com
If your CV passed our screening, we will send you 02 technical tests. You must pass these tests to be qualified for our interview round.
Thank you for your interest and we can't wait for you to be part of the team!
javascript if and 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
มีข้อมูลอยู่ในมือก็ไร้ประโยชน์ ถ้าคุณไม่โค้ดแสดงผลออกมาเป็นภาพได้
.
การทำ visualization กับ data จุดประสงค์เพื่อนำข้อมูลมาแสดงผลเป็นกราฟฟิกสวยงาม สามารถเล่าเรื่องได้ตามภาพ ซึ่งจะเข้าใจมากกว่าอธิบายเป็นตัวอักษร หรือพูดปากเปล่า
.
ลองนึกถึงเวลาเราไปพรีเซนต์งานให้ลูกค้าหรือ users ดูซิ
ยืนหน้าห้องประชุม สบตาคุยกันไปคุยกันมา
มัวแต่คุยภาษาเทคนิค ยิ่งไม่เห็นภาพด้วย
.
users ฟังจะงงแค่ไหน???
เดี่ยวมาบ่นคนไอที .....พูดอะไรไม่รู้เรื่อง....
เดี่ยวไม่จ่ายเงินจ้างเรา ...เอ๊ะเกี่ยวกันไปเปล่า
.
พอดีผมได้มีโอกาสแตะ ได้มีโอกาสเล่นไลบรารี่ฝั่ง JavaScript
เอาไว้แสดงผลข้อมูล หรือก็คือการทำ visualization กับข้อมูลนั่นเอง
แล้วเราแสดงผลหน้าเว็บบราวเซอร์ได้เลยครับ
.
ใช้งานได้ฟรีนะ เลยมาแชร์ให้ดู
ชื่อไลบรารี่คือ "d3.js" ลองอ่านคู่มือการใช้งานได้ที่นี้
https://d3js.org/
.
ตัวนี้นิยมมาก ตัวโค้ดเผยแพร่อยู่ใน github
มีคน fork ไปเกือบ 2 หมื่น ให้ดาว 8 หมื่น เกือบๆ 9 หมื่น
เอกสารถูกแปลไปหลายภาษา
https://github.com/d3/d3/wiki
(ยกเว้นภาษาไทยไม่มีนะครับ ให้ตายซิผับผ่า)
.
ไลบรารี่ตัวนี้ใช้ JavaScript ในการเขียนแสดงกราฟต่างๆ
แต่เป็น ES6 ขึ้นต่ำขึ้นไปนะ
.
ใครไม่เคยเขียน JavaScript อาจงงเล็กน้อยถึงขั้นมาก
เพราะจะเจอไวยากรณ์ชวนปวดหัวเล่นๆ
เจอทั้งวงเล็บ และปีกกาซ้อนหลายตลบ
.
ถ้าใครไม่เป็น javaScript ซื้อหนังสือของผมมาอ่านได้เลย
(โปรโมทขายหนังสือหน่อย ไม่ได้โฆษณานาน)
.
https://docs.google.com/…/1FAIpQLSfZp0Vz-p6Oj1cDA…/viewform…
It's useless to have information on hand. If you don't have a code, you can show it as a picture.
.
Visualization with data. Purpose to show information as graphics. Beautiful graphics. You can tell stories in a picture which is more understood than describing letters or empty words.
.
Think about when we went to present a presentation for customers or users.
Standing in front of the conference room. Eye contact. Let's talk.
Just talking in technical language. The more I don't see the picture.
.
How confused will the users listen???
I will complain about IT people..... I don't know what to say....
I won't pay for you to hire me... eh, related.
.
I have a chance to touch it. I have a chance to play the JavaScript library.
Is it for visualization or is it visualization with information?
And we can show you the results of the browser web page.
.
It's free to use. Let's share.
The name of the library is ′′ d3 js ′′ Check out the usage manual here
https://d3js.org/
.
This one is very popular. The code is published on github.
There are people fork going to be almost 2 ten thousand to give 8 ten thousand stars. Almost 9 ten thousand.
Documents are translated in many languages
https://github.com/d3/d3/wiki
(Except Thai, I don't have it. Damn. Pub)
.
This library uses JavaScript to write graphs
But ES6 is going to get lower.
.
Who has never written JavaScript. A little to much.
Because I will find grammar to make me feel headache for fun.
Found both brackets and wing stacked.
.
If anyone isn't javaScript, buy my book, read it.
(Promote to sell books. I haven't advertised for long time)
.
https://docs.google.com/forms/d/e/1FAIpQLSfZp0Vz-p6Oj1cDAKIXfmexAbTh2vFDymFYlCIn8JwkA7UIrA/viewform?c=0&w=1Translated
javascript if and 在 Youji Youtube 的最佳解答
お客様の中にJavaScriptに詳しい方はいらっしゃいませんか?
セレクトボックスの選択肢の配列を切り替える方法がワーカリーマセーン
よってフェス用ステージと通常ステージの切り替えにはツールの再起動を要します。悪しからず
~~~~~~~~~~~~ 日本語 / Japanese ~~~~~~~~~~~~
< ご挨拶 >
初めまして。ヨージです。アメリカに住んでいる純日本人です。
主にスコープ付きチャージャーを使います。
【フレンドコード】: SW-3516-9899-0870
* フレンド申請を送ったら”必ず”Switchで使っているお名前を教えて下さい!
* たまにフレンド整理が必要な時がありますが、消去されても次に遊ぶ時にまた送ってくだされば幸いです。
< 配信について >
気分に合わせてレギュラー、リグマやレーティングプラベをやります。
まれにサモランもやります。たつじん限定でおねがいします。
レギュラーマッチ以外は人数が多ければ交代などしていきます。
【パスワード(リグマとサモラン)】: 3745
# レーティングプラベについて
可能な限りウデマエ差をなくしてチーム分けを行うプラベです。
もっと詳しい説明などはプラベ開催時に行います。
【パスワード(プラベ専用)】: 0541
* いずれかのルールのウデマエがB-以上の方限定です。
* 初参戦時、過去に到達した一番高いウデマエを教えて下さい。
XならXパワー、S+ならその後の数字も一緒に教えて下さい。
* 初参戦後にウデマエを更新した場合は報告してください。
* 武器編成は真面目に頼みますよ!譲り合いは平和の象徴です。
< 決まりごと >
# ざっくりなルール
* 暴言・煽りはそっちの自由。だが、裁くのはこっちの自由だ。
* (回線落ちなどで)他人に迷惑を掛けたら謝りましょう!幼稚園で習いましたよね。
* 英語圏リスナーさんのチャットの翻訳は受け付けておりません。
例外として、伝える必要がある内容だと判断した場合は自発的に翻訳します。
* ナワバリ合流時に連続で待機になったり、レーティングプラベの準備に時間が掛かっても忍耐強く待てるリスナーさんは理想的です!
* 人数合わせが大変なので、リグマやプラベを抜ける際は一言下さい。
可能であれば前もって言ってくださるととても助かります。
* 不良ではないのでタイマンはしません。大人なのでかくれんぼもできません。
# 禁止事項
ここに書かれていないことでも一度注意されたら辞めてもらえると助かります。
* 放置や意図的な回線切断
* 裏部屋の作成・やり取り
* 他プレイヤーに対する指示
* 自分や他人の個人情報の開示
* 個人的なネガティブな話
* リスナー同士の他人が混ざれない会話
* 似た・同じ内容の発言の繰り返し
* 宣伝・売名行為
* その他公序良俗に反する発言
それでは、健闘を祈る!
~~~~~~~~~~~~ English / 英語 ~~~~~~~~~~~~
{ Greeting }
Hello. My name is Youji. I'm full Japanese who living in U.S. Nice to meet you. I use chargers at most of the time.
[My Friend Code] SW-3516-9899-0870
* If you sent a friend request, you MUST tell me your name on Switch!
* I need to organize my friends sometimes, but you may resend it when you play next time.
{ About Stream }
I play regular, league or rating private mainly. I play salmon occasionally with Profreshional only. We’ll take turns if there are many players who want to join.
[Password (league or salmon]: 3745
# About Rating Private
It;’s a special private battle that makes no rank gaps between the both team. I’ll explain the detail when we actually playing it.
[Password (only for private)] 0541
* You must be at least B- for any of the rules.
* Tell me what was your highest rank in the past. Tell me your X Power or a number among S+ if applicable.
* If you raised your rank after the last time you played this, tell me.
* Please be serious to choose your weapon. The concession is very important for a peaceful stream.
{ Rules }
# General
* It’s your choice to disrespect others or squidbagging, but it’s my choice to penalize you.
* If you annoy others (eg. disconnect), it’s a manner to apologize. I assume you already learned that at kinder garden.
* It’s helpful if you say you want to leave in advance when we playing league, salmon or private.
# Prohibitions
Please watch out your actions even it’s not wrote on here if I warned you.
* AFK while playing the game / Disconnect on purpose
* Telling others what to do
* Telling your or others’ personal information
* Talking about your personal negative stories
* Talking to other viewers about personal topics that no one else can join
* Posting the same or similar message over and over
* Advertising
* Any other inappropriate talks
Have a good luck!
~~~~~~~~~~~~ アドバタイズ / Advertise ~~~~~~~~~~~~
このチャンネルのメンバーになるには下のURLにアクセスすればいいかもよ。
You can join as a member from the link below.
https://www.youtube.com/channel/UC8UO9XDFb2MedQFptOBUlIw/join
Twitch
メイン配信サイト。ワンピースの世界ではラフテルと呼ばれる。
My main streaming platform. The final destination for all of my viewers.
https://www.twitch.tv/youjiman
Twitter (JPN)
誰か分かる人ならフォロー返しするかもよ。
https://twitter.com/youjiman
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#NintendoSwitch#スプラトゥーン2#Splatoon2#視聴者参加型#PlayingwithViewers
Support the stream: https://streamlabs.com/youjiman
javascript if and 在 Youji Youtube 的精選貼文
お客様の中にJavaScriptに詳しい方はいらっしゃいませんか?
セレクトボックスの選択肢の配列を切り替える方法がワーカリーマセーン
よってフェス用ステージと通常ステージの切り替えにはツールの再起動を要します。悪しからず
~~~~~~~~~~~~ 日本語 / Japanese ~~~~~~~~~~~~
< ご挨拶 >
初めまして。ヨージです。アメリカに住んでいる純日本人です。
主にスコープ付きチャージャーを使います。
【フレンドコード】: SW-3516-9899-0870
* フレンド申請を送ったら”必ず”Switchで使っているお名前を教えて下さい!
* たまにフレンド整理が必要な時がありますが、消去されても次に遊ぶ時にまた送ってくだされば幸いです。
< 配信について >
気分に合わせてレギュラー、リグマやレーティングプラベをやります。
まれにサモランもやります。たつじん限定でおねがいします。
レギュラーマッチ以外は人数が多ければ交代などしていきます。
【パスワード(リグマとサモラン)】: 3745
# レーティングプラベについて
可能な限りウデマエ差をなくしてチーム分けを行うプラベです。
もっと詳しい説明などはプラベ開催時に行います。
【パスワード(プラベ専用)】: 0541
* いずれかのルールのウデマエがB-以上の方限定です。
* 初参戦時、過去に到達した一番高いウデマエを教えて下さい。
XならXパワー、S+ならその後の数字も一緒に教えて下さい。
* 初参戦後にウデマエを更新した場合は報告してください。
* 武器編成は真面目に頼みますよ!譲り合いは平和の象徴です。
< 決まりごと >
# ざっくりなルール
* 暴言・煽りはそっちの自由。だが、裁くのはこっちの自由だ。
* (回線落ちなどで)他人に迷惑を掛けたら謝りましょう!幼稚園で習いましたよね。
* 英語圏リスナーさんのチャットの翻訳は受け付けておりません。
例外として、伝える必要がある内容だと判断した場合は自発的に翻訳します。
* ナワバリ合流時に連続で待機になったり、レーティングプラベの準備に時間が掛かっても忍耐強く待てるリスナーさんは理想的です!
* 人数合わせが大変なので、リグマやプラベを抜ける際は一言下さい。
可能であれば前もって言ってくださるととても助かります。
* 不良ではないのでタイマンはしません。大人なのでかくれんぼもできません。
# 禁止事項
ここに書かれていないことでも一度注意されたら辞めてもらえると助かります。
* 放置や意図的な回線切断
* 裏部屋の作成・やり取り
* 他プレイヤーに対する指示
* 自分や他人の個人情報の開示
* 個人的なネガティブな話
* リスナー同士の他人が混ざれない会話
* 似た・同じ内容の発言の繰り返し
* 宣伝・売名行為
* その他公序良俗に反する発言
それでは、健闘を祈る!
~~~~~~~~~~~~ English / 英語 ~~~~~~~~~~~~
{ Greeting }
Hello. My name is Youji. I'm full Japanese who living in U.S. Nice to meet you. I use chargers at most of the time.
[My Friend Code] SW-3516-9899-0870
* If you sent a friend request, you MUST tell me your name on Switch!
* I need to organize my friends sometimes, but you may resend it when you play next time.
{ About Stream }
I play regular, league or rating private mainly. I play salmon occasionally with Profreshional only. We’ll take turns if there are many players who want to join.
[Password (league or salmon]: 3745
# About Rating Private
It;’s a special private battle that makes no rank gaps between the both team. I’ll explain the detail when we actually playing it.
[Password (only for private)] 0541
* You must be at least B- for any of the rules.
* Tell me what was your highest rank in the past. Tell me your X Power or a number among S+ if applicable.
* If you raised your rank after the last time you played this, tell me.
* Please be serious to choose your weapon. The concession is very important for a peaceful stream.
{ Rules }
# General
* It’s your choice to disrespect others or squidbagging, but it’s my choice to penalize you.
* If you annoy others (eg. disconnect), it’s a manner to apologize. I assume you already learned that at kinder garden.
* It’s helpful if you say you want to leave in advance when we playing league, salmon or private.
# Prohibitions
Please watch out your actions even it’s not wrote on here if I warned you.
* AFK while playing the game / Disconnect on purpose
* Telling others what to do
* Telling your or others’ personal information
* Talking about your personal negative stories
* Talking to other viewers about personal topics that no one else can join
* Posting the same or similar message over and over
* Advertising
* Any other inappropriate talks
Have a good luck!
~~~~~~~~~~~~ アドバタイズ / Advertise ~~~~~~~~~~~~
このチャンネルのメンバーになるには下のURLにアクセスすればいいかもよ。
You can join as a member from the link below.
https://www.youtube.com/channel/UC8UO9XDFb2MedQFptOBUlIw/join
Twitch
メイン配信サイト。ワンピースの世界ではラフテルと呼ばれる。
My main streaming platform. The final destination for all of my viewers.
https://www.twitch.tv/youjiman
Twitter (JPN)
誰か分かる人ならフォロー返しするかもよ。
https://twitter.com/youjiman
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#NintendoSwitch#スプラトゥーン2#Splatoon2#視聴者参加型#PlayingwithViewers
Support the stream: https://streamlabs.com/youjiman
javascript if and 在 JS 用邏輯判斷||(OR) 及&&(AND) 來改寫if (短路求值Short ... 的推薦與評價
用||、 && 來改寫if 用|| 來設定變數的預設值用&& 來檢查物件屬性是否存在. ... 在Javascript中,非Boolean的物件是可以被判斷為 真值(truthy) ,但 ... ... <看更多>
javascript if and 在 JavaScript if statements - YouTube 的推薦與評價
javascript if else if else statements tutorial example explained# javascript # if #statements. ... <看更多>
javascript if and 在 How to use OR condition in a JavaScript IF statement? 的推薦與評價
... <看更多>