<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Nattapon Nimakul on Medium]]></title>
        <description><![CDATA[Stories by Nattapon Nimakul on Medium]]></description>
        <link>https://medium.com/@totkiz?source=rss-3877c77a5c4f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/2*9pih7vrzG7ppvbJLQre5xA.jpeg</url>
            <title>Stories by Nattapon Nimakul on Medium</title>
            <link>https://medium.com/@totkiz?source=rss-3877c77a5c4f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 18:43:22 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@totkiz/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Uniswap ปฐมบทโลกเสรีการเงินที่ทุกคนต้องจับตา]]></title>
            <link>https://medium.com/kulapofficial/uniswap-%E0%B8%9B%E0%B8%90%E0%B8%A1%E0%B8%9A%E0%B8%97%E0%B9%82%E0%B8%A5%E0%B8%81%E0%B9%80%E0%B8%AA%E0%B8%A3%E0%B8%B5%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%87%E0%B8%B4%E0%B8%99%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%97%E0%B8%B8%E0%B8%81%E0%B8%84%E0%B8%99%E0%B8%95%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B8%88%E0%B8%B1%E0%B8%9A%E0%B8%95%E0%B8%B2-11517eb471d1?source=rss-3877c77a5c4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/11517eb471d1</guid>
            <dc:creator><![CDATA[Nattapon Nimakul]]></dc:creator>
            <pubDate>Mon, 21 Sep 2020 15:19:42 GMT</pubDate>
            <atom:updated>2020-10-29T05:03:55.309Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*xiArMzHPnXc2WYDd9sb5Xg.jpeg" /></figure><p>บทความนี้ผมตั้งใจที่จะเขียนมาได้สักพักแล้ว แต่เนื่องด้วยการทำงานใน KULAP ที่เข้มข้นทำให้ยังไม่มีเวลาลงมือเขียนสักที แต่เนื่องจาก 2 วันที่ผ่านมีมีปรากฎการณ์ครั้งสำคัญเกิดขึ้นกับ Uniswap เลยถือโอกาสเขียนบทความนี้ตามที่ได้ตั้งใจไว้สักที (พอมีอะไรมา trigger งานมันก็จะเสร็จนั้นแหละ 555)</p><blockquote>ขายของ: สนใจเขียนโปรแกรมภาษา <strong>Solidity</strong> สามารถติดตาม Course ของทาง <strong>KULAP Skill</strong> ได้ที่นี้ครับ <a href="https://www.kulapskill.com/">https://www.kulapskill.com/</a></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*gYfUM9qd3iuc_Rulk3GqXQ.jpeg" /></figure><h3><strong>Uniswap คืออะไร</strong></h3><p><strong>Uniswap</strong> เป็นหนึ่งในโปรเจคชื่อดังในโลก <strong>DeFi</strong> (Decentralized Finance) <strong>Uniswap</strong> คือระบบการซื้อขายแลกเปลี่ยนสินทรัพย์ดิจิทัลแบบไร้ศูนย์กลาง ไร้คนควบคุม ไร้องค์กรควบคุม ทุกคนสามารถแลกเปลี่ยนจากสกุลหนึ่งไปอีกสกุลหนึ่งได้เสรี ทุกคนสามารถนำสินทรัพย์ดิจิทัลใหม่เข้ามา List ในระบบได้อย่างเสรี ทุกคนสามารถเป็นผู้ให้สภาพคล่อง (<strong>Liquidity provider</strong>) ได้อย่างเสรี และระบบสามารถปันผลได้อัตโนมัติ ทั้งหมดที่ว่ามานี้ไม่มีคนจัดการเลยทั้งระบบ แต่เป็น <strong>“Source code”</strong> หรือ <strong>DApp</strong> ที่ทำงานบนระบบ <strong>Blockchain</strong> แบบไร้ศูนย์กลางอีกที</p><p><strong>Uniswap</strong> เป็นระบบ <strong>Decentralized Exchange (DEX) </strong>ประเภท <strong>Instance exchange</strong> กล่าวคือ เป็นระบบซื้อขายเหรียญดิจิทัลแบบทันที คล้ายกับเวลาเราซื้อขายทองคำ ที่จะมีราคารับซื้อ / ขาย ให้ตลอดเวลา โดยผู้ใช้งานจำเป็นต้องมีกระเป๋าเงินดิจิทัล (<strong>Crypto wallet</strong>) เช่น Metamask / Ledger / Trezor เพื่อใช้ในการส่งคำสั่งซื้อขาย โดยคำสั่งซื้อขายจะประมวลผลโดยตรงไปที่ <strong>Smart contract</strong> (App) ที่ทำงานอยู่บน Blockchain โดย <strong>“ไม่ผ่านตัวกลาง”</strong> ตรงนี้เราเทียบเคียงว่า Smart contract คล้ายแอพช้อปปิ้งออนไลน์ และ Blockchain คล้าย App Store / Play store ก็ได้</p><blockquote><strong>DeFi</strong> คือระบบการเงินบนโลกเสรี ที่ทำงานด้วยหุ่นยนต์ (Automation) ทั้งระบบ ให้นึกภาพเหมือนโรงงานผลิตรถยนต์ที่เต็มไปด้วยหุนยนต์ แล้วตัดภาพมาธนาคารที่ไม่มีคนทั้งในสาขาธนาคาร และสำนักงานใหญ่</blockquote><blockquote><strong>Blockchain</strong> คือระบบฐานข้อมูลแบบไร้ศูนย์กลาง ที่สามารถเก็บข้อมูลทางการเงินได้ทั้งระบบ ทั้งบัญชีผู้ใช้ รายการธุรกรรม และฟังก์ชั่นการใช้งาน (Application) โดยคอมพิวเตอร์ทั่วโลกช่วยกันประมวลผล ยืนยันความถูกต้อง และเก็บบันทึกข้อมูลที่ตรงกันเสมอ (Public Blockchain ปัจจุบันยังไม่ 100% finality แต่ได้ที่ 99.99% ถ้ารอระยะ confirm เพียงพอ)</blockquote><h3><strong>Liquidity Provider</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/621/1*gAgJhIp8J2CzvrLz_S0TEQ.jpeg" /><figcaption>1) Uniswap — Providing Liquidity Flow</figcaption></figure><p>ด้วยความที่ <strong>Uniswap</strong> เป็น <strong>Instance exchange</strong> ทำให้ระบบต้องมี <strong>Maker</strong> หรือผู้เสนอราคาซื้อ / ขาย ตลอดเวลา จึงได้มีระบบ <strong>“Liquidity provider (LP)”</strong> เข้ามา ซึ่งมันคือกองทุน (<strong>Reserve</strong>) ที่มี <strong>Smart contract</strong> เป็นตัวจัดการ ทำหน้าที่ถือเหรียญของผู้ลงทุนเอาไว้ เช่น เหรียญ ETH-UNI (ถือเป็นคู่) ถ้าหาก user ต้องการแลกจาก <strong>ETH -&gt; UNI</strong> ระบบก็จะเก็บ ETH ของ user เพิ่มเข้าไปใน <strong>Reserve</strong> และนำเหรียญ UNI ออกจาก <strong>Reserve</strong> ส่งไปให้ user</p><p>ด้วยหลักการง่าย ๆ นี้ ทำให้สามารถเขียนเป็นสมการคณิตศาสตร์ <strong>x * y = k</strong>เพื่อใช้ในการควบคุมราคาด้วย <strong>Smart contract</strong> ที่เขียนด้วยภาษาคอมพิวเตอร์สุดพิเศษชื่อ <strong>Solidity</strong> นั้นเอง</p><p>ใคร ๆ ก็สามารถเป็น <strong>Liquidity provider</strong> ด้วยการเชื่อมกระเป๋าเงินดิจิทัล และนำเงินทั้งสองฝั่ง เช่น ETH-UNI ในมูลค่าที่เท่ากัน (ณ เวลานั้น) ฝากเข้าไปใน <strong>Reserve</strong> และผู้ฝากจะได้เหรียญ <strong>LP</strong> กลับมา เปรียบเสมือนตัวแทนหน่วยลงทุน ที่สามารถนำมา <strong>claim</strong> เงินคืนได้ทุกเมื่อ และเต็มจำนวน เพราะระบบไม่ได้นำเงินดิจิทัลเราไปลงทุนที่ไหนต่อนั้นเอง</p><p>จากภาพจะเห็นว่าตอนแรกใน <strong>Reserve</strong> มี <strong>ETH-UNI</strong> อยู่ก่อนแล้วที่ 15 / 1,000 พอ <strong>User</strong> ต้องการลงทุนใน <strong>Reserve</strong> นี้ด้วย เราก็จำเป็นต้องลงในอัตราส่วนเดียวกัน นั้นก็คือ <strong>15 : 1,000</strong> จากในภาพ <strong>User</strong> จึงเพิ่มเข้าไป <strong>10: 666.66</strong> นั้นเอง และ User ก็จะได้รับเหรียญ <strong>LP</strong> กลับมา คิดเป็นหุ้นส่วนที่ <strong>40%</strong> ของจำนวนเหรียญ <strong>LP</strong> ทั้งหมดของ <strong>Reserve</strong> นี้</p><p>การถอนเงินออกจาก <strong>Reserve</strong> ระบบจะทำการคำนวณยอดเงินใน Pool ณ ตอนถอนที่เป็นส่วนของเรา ซึ่งจะรวมค่าธรรมเนียมการซื้อขาย<strong>ที่เราได้ส่วนแบ่ง</strong>เอาไว้ให้แล้ว ทำให้ ณ ตอนถอนเราจะได้เงินต้น + กำไรออกมาด้วย (แต่ก็สามารถขาดทุนได้ หากราคาเหรียญลง ณ ตอนถอน)</p><h3><strong>สมการ x * y = k</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tmtLrKu7Glak7XlXWM7MGA.jpeg" /><figcaption>2) x * y = k : Trade</figcaption></figure><p>สมการนี้ถูกนำเสนอโดยนาย <a href="https://twitter.com/VitalikButerin"><strong>Vitalik Buterin</strong></a> และ <a href="https://twitter.com/haydenzadams"><strong>Hayden Adams</strong></a><strong> </strong>(Uniswap) นำมาพัฒนาจริงโดยสมการคณิตศาสตร์นี้มีหลักการออกแบบโดยคำนึงถึง ผู้ลงทุน <strong>‘’Liquidity provider”</strong> เป็นสำคัญ และการันตีว่า <strong>ผู้ลงทุนจะไม่เสียหายในทุกกรณี</strong> กล่าวคือหากระบบมีการขึ้นลงของราคาเหรียญ และสุดท้ายกลับมา ณ จุดราคาเดิม ระบบจะไม่มีทางสูญเสียเงินต้นเด็ดขาด จะมีแต่ได้ค่าธรรมเนียมการเทรดส่วนเพิ่มเข้ามา</p><blockquote>อย่างไรก็ตาม Liquidity provider จะมีความเสี่ยงเรื่อง <strong>Impermanent loss</strong> หากราคาขึ้นลงมากเกินไป</blockquote><blockquote>ประวัติ <strong>Hayden Adams</strong> น่าสนใจมากครับ ถ้ามีโอกาสผมอาจได้เขียนถึงในบทความอื่น</blockquote><h4>การซื้อขายทำให้ราคาเปลี่ยนอัตโนมัติ</h4><p>ตามภาพที่ 2) จะเห็นว่า User ต้องการแลกเปลี่ยน Token A ไปเป็น Token B และหลังจากแลกเปลี่ยนแล้ว สมการ <strong>x * y = k</strong> ก็จะทำการคำนวนราคาใหม่ถัดไปทันที ทำให้ราคาเหรียญ B แพงขึ้นเมื่อเทียบกับ A (เป็นไปตามหลัก Supply and Demand) เพราะ Token A เพิ่มขึ้น และ Token B ลดลงใน <strong>Reserve</strong> นั้นเอง</p><blockquote>ตัวสมการ x * y = k จากภาพ 2) เราจะแทนสมการนี้ด้วย “จำนวน Token A *จำนวน Token B = k” และพอมีการเทรดเกิดขึ้น ระบบจะคำนวณราคาซื้อขายอัตโนมัติ โดยที่ค่า k หลังจากซื้อขายต้องมากกว่าเดิม 0.3% เสมอ (รายได้ของ LP) ซึ่งจากข้อมูลนี้ ทำให้ราคาขึ้นกับปริมาณที่ต้องการขายด้วย ยิ่งขายเยอะ เรทจะยิ่งแย่นั้นเอง</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ysSqbLybguwvgQSok7_dMg.jpeg" /><figcaption>3) x * y = k : LP</figcaption></figure><h4>Reserve ยิ่งใหญ่ ราคายิ่งดี</h4><p>ด้วยสมการ x * y = k นี้เอง ทำให้เราสามารถ Proof ทางคณิตศาสตร์ได้ว่า ยอดฝากใน Reserve ยิ่งใหญ่เท่าไหร่ ราคา ณ ตอนซื้อขายก็จะยิ่งดีเท่านั้น เพราะเป็นการลด ช่วงราคา (<strong>Price Spread</strong>) ลงนั้นเอง</p><blockquote>หากใครสนใจเพิ่มเติม แนะนำให้อ่าน White paper ตาม ref ด้านล่างได้เลยครับ</blockquote><h3><strong>ระบบ Smart contract</strong></h3><p><strong>Smart contract</strong> ถือเป็นหัวใจสำคัญของระบบ DeFi เพราะเปิดโอกาสให้ทุกคนสามารถอ่าน Source code ของระบบได้อย่างเปิดเผย และตรวจสอบธุรกรรมทั้งหมด ที่ทุกคนกระทำกับระบบได้ ทำให้มีความโปร่งใส<strong> (Transparency</strong>) ตรวจสอบได้ และที่สำคัญคือไม่ต้องใช้คนประมวลผลเลย ทำให้ต้นทุนระบบลดไปได้อย่างมหาศาลทั้งในแง่ <strong>Fix cost</strong> และ <strong>Operation cost</strong> (เข้าใกล้ศูนย์) และในอีกทางหนึ่ง ต้นทุนธุรกรรม user เป็นคนจ่ายเอง ตามหลักการออกแบบ <strong>Public Blockchain</strong> ในปัจจุบัน</p><p>ด้วยต้นทุนธุรกรรมมีวิธีการคำนวณที่ผิดแปลกไปจากธุรกิจเดิม ๆ ที่ผู้ประกอบการเป็นคนจ่ายต้นทุน และหาวิธีสร้างรายได้จากการเก็บเงินจาก user โดยตรง หรือคู่ค้า ไปเป็น user เป็นคนออกค่าใช้จ่ายเอง และจ่ายเป็นรายธุรกรรม ทำให้ระบบนี้ถูกเรียกว่า <strong>Decentralized Finance</strong> ที่ผู้ใช้ไม่ต้องกังวลว่าผู้ให้บริการจะปิดระบบเมื่อไหร่ เพราะหาก user มีเงินจ่ายค่าธรรมเนียม ก็สามารถทำธุรกรรมได้ตลอดเวลาที่ต้องการ หรือสรุปได้ว่าหากตัว <strong>Smart contract</strong> ไม่มีคำสั่งปิดการใช้งาน ระบบนี้ก็ไม่มีใครสั่งปิดได้ แม้กระทั้งผู้สร้างเองก็ทำไม่ได้</p><h3><strong>การ Listing</strong></h3><p>ตัวระบบ <strong>Uniswap</strong> ได้สร้างปรากฎการณ์ใหม่ ที่ไม่เคยมีใครทำได้มาก่อน (ในระดับ mass ขนาดนี้) ก็คืออนุญาตให้ใครก็ได้สามารถ <strong>List</strong> เหรียญอะไรก็ได้ ได้อย่างอิสระเสรี โดยหากเป็นการ <strong>List</strong> ครั้งแรก จะนับเป็นการเปิด <strong>Pool</strong> ใหม่ด้วยราคาที่เรากำหนด และหลังจากนั้นหากใครต้องการลง <strong>Pool</strong> นี้ด้วยก็สามารถทำได้ตามที่อธิบายไปข้างต้น โดยมีข้อสังเกตคือ หากคนที่เปิด <strong>Pool</strong> คนแรกกำหนดราคาไม่เป็นไปตามตลาด ก็จะมี <strong>Arbitragers</strong> มาทำการ ซื้อ / ขาย จนราคาเท่ากับตลาดนั้นเอง (<strong>Arbitrager</strong> ได้กำไรจากส่วนต่างราคาไป)</p><p>แม้ว่าการ List จะทำได้อิสระในระดับ <strong>Smart contract</strong> แต่ในการขึ้นหน้าเว็บ <strong>app.uniswap.org</strong> ต้องขอความเห็นชอบจาก <strong>Community</strong> ก่อนเสมอ เพื่อป้องกันการ List เหรียญ Scam เข้ามาในระบบนั้นเอง</p><blockquote>แต่หากผู้ใช้เป็น Smart Contract developer / DApp อื่นที่ต้องการใช้งานระบบ Uniswap จะไม่เจอข้อจำกัดด้านความเห็นชอบจาก Community นี้ สามารถ List และใช้งานได้เลยทันที (เช่น Lending / Margin trading)</blockquote><h3>การใช้งานจาก User</h3><p>สำหรับผู้ใช้ที่ต้องการซื้อขาย และแลกเปลี่ยนถือว่ามีขั้นตอนที่ง่ายมาก ๆ เพียงแค่ผู้ใช้มีกระเป๋าเงินดิจิทัล เช่น Metamask / Ledger / Trezor และมีเงินดิจิทัลที่ต้องการขายรอไว้ก่อนแล้ว ก็เปิดเว็บ <a href="https://app.uniswap.org/#/swap">app.uniswap.org</a> และเลือกเหรียญที่ต้องการซื้อได้เลย ตรงนี้สมการ x * y = k จะทำการคำนวนราคาให้อัตโนมัติในทุกครั้งที่มีการซื้อขาย (ยิ่งขายมาก ราคาจะยิ่งแย่ ลองสังเกตุดูกันได้ครับ) และระบบจะหักค่าธรรมเนียม 0.3% ให้กับ LP ครับ</p><h3><strong>Revenue Sharing</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/797/1*R1V5UWnE2iJpzUXQJMhDVA.jpeg" /></figure><p>จากตรงนี้เราจะเห็นว่าระบบ Uniswap จะประกอบไปด้วย Stakeholder 2 ส่วนคือ</p><ol><li><strong>Liquidity provider (LP)</strong></li><li><strong>Trader</strong></li></ol><p>โดยในส่วนของ <strong>LP</strong> นั้นจะได้ 0.3% ของปริมาณการซื้อขายทุกครั้ง ทำให้คนเริ่มนิยมนำเหรียญดิจิทัลของตัวเอง มาวางลงใน Pool เพื่อรับรายได้ส่วนนี้นั้นเอง สำหรับผลตอบแทนสามารถดูได้ที่ <a href="https://uniswap.info/">Uniswap.info</a> ครับ</p><p>ตรงส่วน <strong>Revenue sharing</strong> นี้เองที่ผมมองว่าเป็นจุดเปลี่ยนสำคัญของระบบการเงินในโลกยุคใหม่ เพราะแต่เดิมรายได้ส่วนของผู้ให้บริการ คนทั่วไปไม่สามารถเข้าไปมีส่วนแบ่งได้เลย สามารถทำได้จากการถือหุ้นของกิจการเท่านั้น ซึ่งก็เข้าถึงได้ในวงจำกัด (ง่ายสุดก็คือบริษัทมหาชนในตลาดหลักทรัพย์) แต่ระบบ LP นี้ ทำให้บุคคล หรือองค์กรทั่วไป สามารถมีส่วนแบ่งได้อย่างเสรี และลงในจำนวนเท่าไหร่ก็ได้ และด้วยตัว Uniswap แบ่งออกเป็นหลาย Pool (เช่น <strong>USDC-USDT,</strong> <strong>ETH-MKR,</strong> <strong>ETH-UNI</strong>) ทำให้เราสามารถเลือกลงตามใจชอบใน Pool ที่เรารับความเสี่ยงได้</p><h3><strong>ค่าธรรมเนียม (Fee)</strong></h3><p>ค่าธรรมเนียมเป็นสิ่งที่ไม่พูดถึงไม่ได้เลย เพราะเป็นต้นทุนที่ user ทุกคนต้องจ่าย ในทุกธุรกรรม โดยค่า fee นี้จะแบ่งออกเป็น 2 ส่วน ดังนี้</p><p>1) <strong>ค่าธรรมเนียมการเทรด</strong> ตรงนี้ง่าย ๆ ตรง ๆ ก็คือ 0.3% ของมูลค่าการซื้อขาย ในระบบ <a href="https://app.uniswap.org/#/swap">app.uniswap.org</a> ราคาที่แสดงเป็นราคาที่รวมค่าธรรมเนียมตรงนี้ให้แล้ว</p><p>2) <strong>ค่าธรรมเนียม Blockchain</strong> อันนี้เป็นค่าธรรมเนียมที่ไม่ตายตัว และเป็นไปตามสภาพตลาด ตามความหนาแน่นของธุรกรรมที่รอการ confirm ณ ขณะนั้น หากมีปริมาณมากก็จะแพงมากเช่นกัน ตรงนี้ตัวกระเป๋าเงินดิจิทัลของเราจะคำนวนให้อัตโนมัติก่อน confirm ทุกครั้ง</p><p>ค่าธรรมเนียมในข้อสองต้องใส่ใจมาก ๆ เพราะบางช่วงเวลาส่วนนี้แพงมาก ๆ จนทำให้อาจไม่คุ้มที่จะทำธุรกรรมเลยด้วยซ้ำ เช่น 100–1,000 บาทต่อธุรกรรม แต่ข้อสังเกตุคือ ค่าธรรมเนียมในส่วนนี้ไม่ว่าจะทำธุรกรรมมูลค่ามากหรือน้อย ค่าธรรมเนียมก็จะเท่ากัน ทำให้ผู้ที่ซื้อขายปริมาณมากก็จะคุ้มมาก ๆ นั้นเอง</p><h3><strong>Impermanent loss</strong></h3><p>หากใครที่ต้องการฝากเงินใน LP เพื่อรับรายได้ ประเด็น <strong>Impermanent loss </strong>ถือว่าสำคัญ และไม่รู้ไม่ได้เลยครับ เพราะหากไม่คำนวณความเสี่ยงตรงนี้เข้าไปด้วย อาจทำให้ขาดทุน หรือขาดทุนกำไรโดยไม่รู้ตัวครับ</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6fh6YIi2ojXMAWN56qTxJg.png" /><figcaption>4) Impermanent loss</figcaption></figure><p><strong>Impermanent loss</strong> จะเกิดขึ้นเมื่อมีการเปลี่ยนแปลงราคา จะทำให้เราขาดทุนเมื่อเทียบกับการถือเอาไว้เฉย ๆ เช่น ถ้าผมฝาก ETH-USDT มูลค่ารวม $1,000 (500+500) เข้าไปใน <strong>Reserve</strong> แล้วปรากฎว่าราคาสูง ETH ขึ้น 500% แทนที่มูลค่าใน <strong>Reserve</strong> จะเป็น $3,000 (2,500+500) แต่จะได้ $2,250 แทน ได้ต่ำกว่าถือไว้เฉย ๆ 25% (เป็นตัวเลขตัวอย่างของจริงจะต่างจากนี้) โดยสมการ <strong>Impermanent loss</strong> คือ</p><blockquote>impermanent_loss = 2 * sqrt(price_ratio) / (1+price_ratio) – 1</blockquote><p>แต่ถ้าหากราคากลับมา ณ จุดเดิม คือ 100% (ไม่เพิ่มไม่ลด) มูลค่าของเราใน <strong>Reserve</strong> จะกลับมาจุดเดิมที่ $1,000</p><h4>ตาราง Impermanent loss</h4><blockquote>“a 1.25x price change results in a 0.6% loss relative to HODL”</blockquote><blockquote>“a 1.50x price change results in a 2.0% loss relative to HODL”</blockquote><blockquote>“a 1.75x price change results in a 3.8% loss relative to HODL”</blockquote><blockquote>“a 2x price change results in a 5.7% loss relative to HODL”</blockquote><blockquote>“a 3x price change results in a 13.4% loss relative to HODL”</blockquote><blockquote>“a 4x price change results in a 20.0% loss relative to HODL”</blockquote><blockquote>“a 5x price change results in a 25.5% loss relative to HODL”</blockquote><h3><strong>UNI Token</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JresVQJY05XNai1BxP318w.jpeg" /></figure><p><strong>UNI Token</strong> หรือเหรียญของ <strong>Uniswap</strong> เป็นเหรียญที่มีจุดหมายในการ “แสดงสิทธิ” ในการบริหารจัดการ กำหนดความเป็นไป กำหนดค่า Parmeters ต่าง ๆ ในระบบ กำหนดการแจกจ่ายปันผล กำหนดการนำเงินกองทุนไปใช้ ซึ่งทุกกระบวนการที่กล่าวมานั้น กระทำผ่าน <strong>On-chain governance</strong> (ระบบการ vote ผ่าน Smart contract) ที่มีความโปร่งใส ตรวจสอบได้ โดย 1 เหรียญมีค่าเท่ากับ 1 เสียง</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gn5calWXsUF1dFXhtIXd_g.png" /><figcaption>5) UNI — Genesis Allocation</figcaption></figure><p>การดำเนินการใด ๆ ที่มีการเปลี่ยนแปลงระบบ จะกระทำผ่าน Smart contract อีกชุด ที่ถูกนำเสนอเข้ามาพร้อมกับ Proposal เพื่อให้ทุกคนได้โหวตกัน และเมื่อผ่านการโหวต (Win) ระบบจะ Execute คำสั่ง <strong>Smart contract</strong> นั้น ๆ ทำให้การันตีได้ว่า ผลลัพธ์ในเชิงปฏิบัติจะเป็นไปตามการโหวตจริง ๆ</p><h3>วิธีการได้รับเหรียญ UNI Token (ที่ไม่ใช่การซื้อ)</h3><h4><strong>1) Airdrop</strong></h4><p>ในขั้นแรกตอน UNI Token เปิดตัว มีการแจกเหรียญ (Airdrop) ให้กับคนที่เคยใช้ระบบอย่างน้อย 1 ธุรกรรม เช่นการเทรด และคนที่ให้สภาพคล่อง (LP) โดยในส่วนคนที่เคยใช้ระบบ จะได้ 400 UNI ทุก address ส่วนคนที่ให้สภาพคล่องจะเป็นไปตามการคำนวน “มูลค่า * ระยะเวลาที่ฝาก”</p><blockquote>ข้อนี้ได้เฉพาะคนที่ทำตามเงื่อนไขก่อน September 1, 2020, at 12:00 am UTC. เท่านั้น</blockquote><h4><strong>2) Farming</strong></h4><p>อีกวิธีคือการนำเหรียญ LP ไป Stake (ล็อคไว้ในระบบ) เพื่อรับเหรียญ UNI ตามปริมาณที่เราฝากไว้ โดยจะแจกจ่ายเป็นราย 15 วินาที (1 block) โดยผู้ใช้สามารถ ฝาก / ถอน ได้ตลอดเวลา วิธีนี้เรียกกันทั่วไปว่าการ <strong>Farming</strong></p><p>คู่เหรียญที่เข้าร่วมการ <strong>Farming</strong> ปัจจุบันดังภาพนี้ครับ</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/685/1*KjIcusQBUIAnUuvZRrIQHw.png" /><figcaption>6) UNI — Farming</figcaption></figure><h4>UNI Token Detail</h4><ul><li>Total Supply: 1,000,000,000 UNI</li><li>Price: ~$5.5 (ราคา ณ 21 กันยายน 2020)</li><li>Inflation: 2% ต่อปี</li><li>Governance: 1 เสียง 1 โหวต</li></ul><h3><strong>Architecture</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/811/1*wsAE3NzAt2LYd1kBruMY3w.png" /><figcaption>8) Uniswap Architect</figcaption></figure><p>Smart contract ของ Uniswap หลัก ๆ จะมี 3 <strong>Components</strong> ประกอบด้วย <strong>Factory, Pair</strong> (Reserve) และ <strong>Router</strong></p><h4>1. Pair</h4><p>ทำ 3 ฟังก์ชั่นหลักของระบบ ก็คือ Trade, Deposit และ Withdraw กับตัว Reserve และเป็น Smart contract ที่ทำหน้าที่ถือสินทรัยพ์ดิจิทัลแทนทุกคน และออกเหรียญ​ LP แทนหน่วยลงทุนให้กับทุกคน</p><h4>2. Factory</h4><p>เป็น Component หลัก ที่ทำหน้าที่ <strong>“โรงงานผลิต”</strong> ตัว Reserve หรือคู่ Pair อีกที โดยระบบมีการกำหนด Blueprint (bytecode) สำหรับใช้ในการสร้าง Pair เอาไว้แล้ว ทำให้มั่นใจได้ว่าทุก <strong>Reserve</strong> มีการทำงานเหมือนกันทุกอย่าง</p><h4>3. Router</h4><p>ทำหน้าที่ <strong>“อำนวยความสะดวก”</strong> ให้กับ <strong>Reserve</strong> อีกที เพราะด้วยการออกแบบ Source code ของระบบ <strong>Reserve</strong> ที่เน้นความเรียบง่าย เพื่อลดความเสี่ยงที่จะเกิดช่องโหว่ในระบบ ทำให้ตัว <strong>Reserve </strong>ขาดฟังก์ชั่นงานสำคัญเช่น <strong>Price discovery </strong>ตรงนี้ <strong>Router</strong> จะทำตรงนี้ให้</p><p>และที่สำคัญ หาก User ต้องการแลกเปลี่ยน แต่ไม่มีในคู่เหรียญ (<strong>Reserve</strong>) ไหนเลย เช่นดังภาพที่ 8) User ต้องการแลก <strong>DAI -&gt; MKR</strong> สิ่งที่ Router ทำให้คือแลก <strong>DAI -&gt; ETH</strong> ก่อน หลังจากนั้นนำ <strong>ETH -&gt; MKR</strong> อีกที ซึ่งทั้งสองคำสั่งนี้ทำเสร็จภายใน 1 transaction บน Blockchain</p><blockquote><strong>Factory</strong> และ <strong>Pair</strong> นับเป็น Core components เนื่องจากเกี่ยวกับระบบงานสำคัญเช่น ซื้อ / ขาย และ ถือสินทรัพย์ดิจิทัล ส่วน <strong>Router</strong> ถือเป็น Optional มีไว้เพื่ออำนวยความสะดวกให้กับ User ที่มาเรียกใช้</blockquote><blockquote>จนถึงปัจจุบัน <strong>Router</strong> มีการออกมา 2 version แล้ว และอนาคตก็จะมีการอัพเดตได้เรื่อย ๆ ส่วน <strong>Factory</strong> และ <strong>Pair</strong> หากมีการออก version ใหม่ ผู้ใช้มีสิทธิเลือกจะใช้ระบบเดิมต่อไปก็ได้ (คือย้ายหรือไม่ย้าย user เป็นคนเลือก)</blockquote><h3><strong>IPFS</strong></h3><p>ด้วยความที่ Uniswap เป็นระบบที่ขับเคลื่อนส่วนงานสำคัญทั้งระบบด้วย Smart contract แต่ก็ยังมีส่วนหนึ่งมีความ Centralized (รวมศูนย์) อยู่ นั้นก็คือเว็บไซต์ <a href="https://app.uniswap.org/#/swap">https://app.uniswap.org/</a> ถึงแม้ว่าตัวเว็บไซต์จะไม่สามารถจัดการเงินของ User ได้โดยตรง แต่ก็สามารถถูกโจมตีหรือ Censor ระบบได้</p><p>ทำให้ Uniswap ได้เอาระบบเว็บไซต์ อัพโหลดเอาไว้ในระบบ <strong>IPFS</strong> ที่เป็น Distributed File Storage Systems ที่มีการออกแบบระบบตรวจสอบความถูกต้องของเนื้อหา และตัวเว็บไซต์กระจายตัวอยู่ตาม Nodes ต่าง ๆ ทั่วโลก ทำให้เพิ่มขีดความสามารถด้าน Avaibility และ Censorship resistance ไปในตัว ใครสนใจก็เข้าใช้งานได้ที่ <a href="https://uniswap.eth.link/">https://uniswap.eth.link/</a> ครับ</p><blockquote>ในอนาคต Browser จะเริ่มรองรับ ipfs:// ทำให้ลดการรวมศูนย์ของ TLD Manager (ระบบจัดการ Domain) ลงไปอีก และเพิ่มการตรวจสอบที่เข้นข้นกว่า https://</blockquote><h3><strong>Smart contract audit</strong></h3><p>มีการ Audit ตัว Smart contracts ของระบบ ที่เขียนด้วยภาษา Solidity ด้วย Engineer จำนวน 6 คน จากทีม klab (ไม่ใช่ KULAP นะครับ lol) สามารถดู Audit report ได้ทีนี้ครับ <a href="https://uniswap.org/audit.html#orgbd4e765">https://uniswap.org/audit.html#orgbd4e765</a></p><blockquote>ส่วนตัวผมได้อ่าน Source code ทุกบรรทัด เทียบระหว่าง version 1 ที่เขียนด้วยภาษา Vyper กับ version 2 (ปัจจุบัน) ที่เขียนด้วยภาษา Solidity ผมค่อนข้างชอบความ Lean ใน Style การเขียน และสัมผัสได้ถึงความใส่ใจในความปลอดภัย ที่มีมากขึ้นใน version 2 อย่างชัดเจนครับ</blockquote><h3><strong>Regulation</strong></h3><p>ปัจจุบันยังไม่มีการกำกับดูแลจากหน่วยงานใด ๆ ณ จุดนี้หากใครใช้งานก็ให้พึงระวังว่าจะไม่ได้รับความช่วยเหลือใด ๆ จากหน่วยงาน</p><p>ในมุมมองส่วนตัว คิดว่า Regulator ทั่วโลกเริ่มให้ความสนใจตัว Uniswap หรือโปรเจคที่ใกล้เคียงกันมากขึ้น เนื่องด้วยปริมาณสินทรัพย์ และปริมาณการซื้อขาย ที่สูงขึ้นอย่างก้าวกระโดด และด้วยอัตราเร่งนี้เอง ทำให้เงินทุน หรือ Productivity จะเริ่ม Adopt การใช้งานมากขึ้นเรื่อย ๆ และปัจจุบันก็ได้พิสูจน์แล้วว่า สามารถเป็นจุดซื้อขายแลกเปลี่ยนได้จริง (สำหรับ Volume ที่สูงจนคุ้มค่า Fee)</p><h3><strong>Risk ความเสี่ยง และการบริหารความเสี่ยง</strong></h3><p>ความเสี่ยงในการใช้งานระบบ Uniswap ถ้าให้พูดเทียบกับระบบอื่น ๆ ในโลก DeFi ผมก็จะบอกว่าปลอดภัยมาก แต่หากเทียบกับระบบการเงินเดิม (tradiational finance) ก็ถือว่ามีความเสี่ยงกว่ามาก อาทิเช่น ไม่มีใครกำกับดูแลตลาด (ไม่มี regulator) ไม่มีการประกันความเสี่ยง ไม่มีการดำรงกองทุน รวมไปถึงอัตราผันผวนที่สูงมากในหลายสินทรัพย์ดิจิทัล และที่สำคัญ User จำเป็นต้องบริหารจัดการ <strong>Crypto Wallet</strong> ด้วยตัวเอง</p><p>หากเรารับความเสี่ยงตามที่บอกข้างต้นได้แล้ว อีกจุดที่ควรระวังก็คือตัวเหรียญที่เราถือ และเอามาลงใน <strong>Reserve</strong> นั้น ๆ ว่าเหรียญมีความน่าเชื่อถือแค่ไหน เพราะทุกเหรียญก็ล้วนสร้างด้วย <strong>Smart contract</strong> กันหมด หากมีความเสี่ยงเรื่อง <strong>Technical</strong> หรือ <strong>Business</strong> ก็จะกระทบมูลค่ามหาศาลได้ครับ</p><p>อีก 1 ความเสี่ยงที่ไม่พูดถึงไม่ได้ ก็คือตัว Uniswap เอง ว่าหากวันนึงมี Attacker สามารถหาช่องโหว่ของระบบ Smart contract ได้ ก็อาจโจมตีระบบจน LP สูญเสียเงินต้นได้</p><h4><strong>Crypto wallet ที่แนะนำ</strong></h4><p>หากต้องการแค่ทดสอบ ผมมองว่า Metamask ทั้งบนคอม และมือถือ ก็เพียงพอ แต่หากต้องการลงทุนจริงจัง (แนะนำให้เป็น % ที่น้อย หรือเป็นเงินเย็นนะครับ) ต้องใช้ <strong>Hardware wallet</strong> เท่านั้น ไม่งั้นวันนึงอาจตื่นมาแล้วเงินหายได้ครับ</p><blockquote>ที่ผมเน้นว่าเงินเยอะให้ใช้ <strong>Hardware wallet</strong> เท่านั้น เพราะความเสี่ยงในตัว Software wallet มีสูงมาก มีหลายจุดที่ป้องกันยาก และที่สำคัญตัว <strong>Hardware wallet</strong> ก็ราคาไม่แพงมากนัก เช่น Trezor, Ledger ราคาไม่ถึง 5,000 บาท</blockquote><h3><strong>มูลค่าตลาด</strong></h3><p>ณ กันยายน 2020 มูลค่าสินทรัพย์ที่ Lock เอาไว้ในระบบ (LP) <strong>$2.15 พันล้านดอลล่าร์ </strong>หรือราว 6 หมื่นกว่าล้านบาท มีปริมาณการซื้อขายต่อวันมากกว่า <strong>$300 ล้านดอลล่าร์ </strong>หรือราว 9 พันล้านบาท</p><p>Liquidity: <strong>$2,150,000,000</strong></p><p>Trading volume per day : <strong>$300,000,000</strong></p><p>Reserve: <strong>10,042 คู่เหรียญ</strong></p><p>การเติบโตค่อนข้างหวือหวา ทั้งในแง่ Liquidity และ Trading volume เป็นสิ่งที่ทุกคนต้องจับตากันต่อไป หากยังรักษาการเติบโตเช่นนี้เอาไว้ได้ อนาคตตลาดการเงินโดยภาพรวมคงเริ่มมีการเปลี่ยนแปลงในระยะเวลาอันใกล้</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ygWueFcYO3GK5yX1Zn5fSQ.png" /></figure><p>ref: <a href="https://uniswap.info/home">https://uniswap.info/home</a></p><h3><strong>ทิศทางในอนาคต</strong></h3><p>ในอนาคตอันใกล้ เราจะเริ่มเห็น Productivity อื่น ๆ เริ่มนำ Uniswap protocol ไปใช้ ถ้าพูดให้เห็นภาพง่าย ๆ ก็มองว่า Uniswap คือ ตลาดหลักทรัพย์ดิจิทัล ที่ใครต้องการระบบนี้ไป Plug &amp; Play ก็ทำได้เลย เช่นระบบ Ecommerce ที่ให้ลูกค้าชำระด้วยเหรียญอะไรก็ได้ ระบบ E-Salary ที่ให้ลูกจ้างต่างประเทศเลือกรับเป็นสกุลตัวเอง (ระบบแปลงเรทอัตโนมัติ ณ วันจ่าย) ระบบ Real Estate ที่ให้ผู้ซื้อ / เช่า วางเงินประกัน และชำระด้วยสกุลที่ต้องการ ในขณะที่ผู้ลงทุนอสังหาริมทรัพย์ ก็รับเป็นเงินที่ตัวเองเลือกได้</p><h3><strong>สรุป</strong></h3><p>บทความนี้ผมต้องการให้ผู้อ่านได้ตระหนักรู้ ถึงศักยภาพ และความสามารถในเทคโนโลยีใหม่นี้ ที่เริ่มใกล้ตัวเรามากขึ้นทุกวัน ๆ โดยเฉพาะในธุรกิจการเงิน ที่ตัวเทคโนโลยีใหม่นี้มา Disrupt โดยตรง แม้จะพึ่งเริ่มต้น แต่จากที่ผมติดตามการเติบโตอย่างใกล้ชิดในอุตสาหกรรมนี้ บอกได้เลยว่า ณ วันที่ทุกอย่างพร้อม การเปลี่ยนแปลงจะเกิดขึ้นอย่างรุนแรง และรวดเร็วมากครับ</p><p>สำหรับ Innovator นับเป็นจังหวะดี ที่จะเริ่มศึกษา ทั้งความเป็นไปได้ในแง่ Technology และในมุม Business เพื่อสร้างความได้เปรียบในการแข่งขัน ในยุคใหม่ที่กำลังมา ที่ผมเองก็ตื่นเต้นกับมันมาก ๆ ครับ</p><h3>เกี่ยวกับผู้เขียน</h3><p>ผมโต๊ด นัฐพล นิมากุล เป็น CTO ของ <a href="https://www.kulap.io/">KULAP.io</a> ที่ให้บริการซื้อขายแลกเปลี่ยนสินทรัพย์ดิจิทัลน้องใหม่ ที่ได้ใบอนุญาติจาก ก.ล.ต. ผ่านความเห็นชอบจากกระทรวงการคลัง ปัจจุบันผมเป็น Researcher ที่ศึกษา Blockchain ทั้ง Bitcoin, Ethereum, Libra และอื่น ๆ แบบ Full time หากใครสนใจด้านนี้ ทักมาคุยกับผมได้ครับ ถ้าเรื่อง Blockchain นี้คุยได้ทั้งวัน ^_^</p><p><a href="https://www.facebook.com/totiz">https://www.facebook.com/totiz</a></p><h3>KULAP Skill</h3><p>สนใจศึกษาการทำงานของระบบ <strong>Ethereum Blockchain</strong> หลักการทำงานของ <strong>Smart Contract</strong> และการเขียนโปรแกรมภาษา <strong>Solidity</strong> สามารถติดตาม Course ของทาง <strong>KULAP Skill</strong> ได้ที่นี้ครับ <a href="https://www.kulapskill.com/">https://www.kulapskill.com/</a></p><p>ref:<strong> </strong><a href="https://uniswap.org/docs/v2/core-concepts/pools/">https://uniswap.org/docs/v2/core-concepts/pools/</a></p><p>ref2: <a href="https://m.youtube.com/watch?v=b2qRD1cm57s">https://m.youtube.com/watch?v=b2qRD1cm57s</a></p><p>ref3: <a href="https://uniswap.org/whitepaper.pdf">https://uniswap.org/whitepaper.pdf</a></p><p>ref4: <a href="https://uniswap.org/blog/uni/">https://uniswap.org/blog/uni/</a></p><p>ref5: <a href="https://tokenlists.org/">https://tokenlists.org/</a></p><p>ref6: <a href="https://uniswap.org/docs/v2/advanced-topics/understanding-returns">https://uniswap.org/docs/v2/advanced-topics/understanding-returns</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=11517eb471d1" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kulapofficial/uniswap-%E0%B8%9B%E0%B8%90%E0%B8%A1%E0%B8%9A%E0%B8%97%E0%B9%82%E0%B8%A5%E0%B8%81%E0%B9%80%E0%B8%AA%E0%B8%A3%E0%B8%B5%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%87%E0%B8%B4%E0%B8%99%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%97%E0%B8%B8%E0%B8%81%E0%B8%84%E0%B8%99%E0%B8%95%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B8%88%E0%B8%B1%E0%B8%9A%E0%B8%95%E0%B8%B2-11517eb471d1">Uniswap ปฐมบทโลกเสรีการเงินที่ทุกคนต้องจับตา</a> was originally published in <a href="https://medium.com/kulapofficial">KULAPofficial</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ปรัชญาการออกแบบ Ethereum 2.0 ด้วยระบบ Validation]]></title>
            <link>https://medium.com/kulapofficial/%E0%B8%9B%E0%B8%A3%E0%B8%B1%E0%B8%8A%E0%B8%8D%E0%B8%B2%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%AD%E0%B8%AD%E0%B8%81%E0%B9%81%E0%B8%9A%E0%B8%9A-ethereum-2-0-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%A3%E0%B8%B0%E0%B8%9A%E0%B8%9A-validation-cca52496e17d?source=rss-3877c77a5c4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/cca52496e17d</guid>
            <dc:creator><![CDATA[Nattapon Nimakul]]></dc:creator>
            <pubDate>Thu, 20 Aug 2020 10:32:57 GMT</pubDate>
            <atom:updated>2020-08-22T03:10:16.405Z</atom:updated>
            <content:encoded><![CDATA[<p>Vitalik Buterin หนึ่งในผู้สร้าง Ethereum ที่มีบทบาทสำคัญต่อการพัฒนา Ethereum เสมอมาจนถึงปัจจุบัน ด้วยแผนการพัฒนา <strong>Ethereum 2.0</strong> ที่ได้วางไว้ตั้งแต่วันแรกที่ Ethereum เปิดตัว ว่าจะเปลี่ยน Consensus จาก <strong>Proof-of-Work</strong> (PoW) ไปเป็น <strong>Proof-of-Stake</strong> (PoS)* ในอนาคต</p><blockquote>* เปลี่ยนกระบวนการสร้าง Block จากเดิมที่ใช้คอมพิวเตอร์สมรรถนะสูง ไปเป็นการ<strong>วางหลักทรัพย์ </strong>และกำหนดบทลงโทษหากก่อกวนระบบ ด้วยการ<strong>ยึดทรัพย์ที่วางไว้</strong></blockquote><p>วันนี้ผมจะพาทุกท่านมาดูมุมมองของการพัฒนาครั้งนี้ไปด้วยกัน เนื่องจากหนทางยังอีกยาวไกล (ปัจจุบันยังอยู่ในเฟส 0 จาก 4 เฟส 😂) โดยนาย Vitalik ได้พูดถึงปรัชญา “หลักการยืนยันความถูกต้องของ Blockchain” ไว้อย่างน่าสนใจ</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/648/1*o-B5XfdLm7jeAhaGlTKNjg.png" /><figcaption>1) การโจมตี 51% ด้วยข้อมูลที่ไม่ถูกต้อง ภาพจาก <a href="https://vitalik.ca/general/2020/08/17/philosophy.html">https://vitalik.ca/general/2020/08/17/philosophy.html</a></figcaption></figure><h3>ทำไมเราถึงต้องรัน Full Node?</h3><p>การทำงานของ Blockchain สาธารณะ (Bitcoin, Ethereum) จะอาศัย Node (~คอมพิวเตอร์) ทำงานกันเป็นเครือข่าย พูดคุยกันแบบ <strong>Peer-to-peer </strong>ทำให้มีอิสระในการทำงาน และไม่มีคน กลุ่มคน หรือองค์กรใด ๆ สามารถควบคุมได้ แต่เพื่อให้ทุกคนมีข้อมูลตรงกัน จึงมีการกำหนดหลักการสร้างชุดข้อมูลใหม่ (Block) และให้ทุก Node ในเครือข่ายช่วยกันตรวจสอบความถูกต้อง</p><blockquote>Node ที่ทำหน้าที่สร้าง Block เราจะเรียกว่า <strong>Miner / Validator</strong> ส่วน Node ที่ทำหน้าที่ตรวจสอบ เราจะเรียกว่า <strong>Full Node</strong></blockquote><p>จากภาพ 1) เราจะเห็นว่ามี Miner / Validator พยายามสร้าง Block ที่ไม่ถูกต้อง (เช่นแอบโอนเงินชาวบ้านให้ตัวเอง) พอ Block สีแดงนี้ถูกส่งมาให้ Full Node ที่กระจายอยู่ทั่วโลกทำการตรวจสอบ Full Node ก็จะทำการปฏิเสธ Block นี้ ทำให้ Blockchain จะวิ่งต่อในสายล่าง (สีเขียว) ที่เป็นสายที่มีแต่ข้อมูลที่ถูกต้องเท่านั้น</p><p>แต่กลับกัน หากทุกคนพร้อมใจกันไม่ตั้ง Full Node ของตัวเอง แต่เชื่อถือ <strong>Miner / Valiator</strong> เลย Blockchain จะวิ่งต่อในสายบน (สีแดง) ส่งผลให้ทุกคนใน Blockchain ตกอยู่ในความเสี่ยงทันที</p><p><strong>สรุปได้ว่า</strong> หากไม่มี <strong>Full Node </strong>หรือมีไม่เพียงพอ การโจมตีระบบโดย Miner / Validator จะสำเร็จได้โดยง่าย แต่หากมี <strong>Full Node</strong> เพียงพอ ต่อให้มีการสร้าง Block สีแดงสำเร็จ เครือข่ายก็จะไม่นับรวมเข้ามาในสาย Blockchain อยู่ดี</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*ZchDcxz5Mi7vHu3buFPNPw.jpeg" /><figcaption>2) PoW vs PoS ภาพจาก <a href="https://www.skalex.io/proof-of-work-vs-proof-of-stake/">https://www.skalex.io/proof-of-work-vs-proof-of-stake/</a></figcaption></figure><h3>ทำไมระบบ Proof-of-Stake ถึงน่าสนใจกว่า Proof-of-Work</h3><blockquote>ในระบบ <strong>PoW</strong> คนสร้าง Block จะเรียกว่า <strong>Miner</strong> ที่ต้องอาศัยเครื่องขุด และได้รับผลตอบแทนเป็นเหรียญดิจิทัล</blockquote><blockquote>ในระบบ <strong>PoS</strong> คนสร้าง Block จะเรียกว่า <strong>Validator</strong> ที่ต้องวางหลักทรัพย์เป็นเหรียญดิจิทัล และได้รับผลตอบแทนเป็นเหรียญดิจิทัล แต่หาก<strong>กระทำผิดจะถูกยึดทรัพย์</strong></blockquote><p><strong>เปรีบเทียบกระบวนการลงโทษ</strong></p><p>ในการสร้าง Block ของระบบ PoW หาก Miner พยายามสร้าง Block ที่ผิด จะแค่ถูกปฏิเสธจากเครือข่าย* ส่วนระบบ PoS หาก Block ถูกระบุว่าผิด Validators ที่ลงความเห็นต่อ Block นั้น จะถูกยึดทรัพย์ (ทั้งหมดหรือบางส่วน)</p><blockquote>Miner ในระบบ PoW ต้นทุนหลัก ๆ คือค่าไฟ และค่าเสื่อมของเครื่องขุด</blockquote><p>จากข้อมูลนี้ หากบทลงโทษของ PoS ถูกกำหนดเอาไว้อย่างเหมาะสม จะทำให้<strong>ต้นทุนในการโจมตีระบบ PoS สูงกว่า PoW เป็นอย่างมาก</strong> และถึงแม้สามารถสร้าง Block ที่ผิดได้สำเร็จแล้ว การที่ Full Node ทั่วโลกจะยอมรับ ก็จะยิ่งยากขึ้นไปอีก</p><h3>Sharding และ Validation</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*c_IDPt1wyRNz6O_ZPAiDXw.png" /><figcaption>Ethereum Sharding ภาพจาก <a href="https://medium.com/nearprotocol/detailed-overview-of-ethereum-2-0-shard-chains-committees-proposers-and-attesters-a9992d2fd103">https://medium.com/nearprotocol/detailed-overview-of-ethereum-2-0-shard-chains-committees-proposers-and-attesters-a9992d2fd103</a></figcaption></figure><p><strong>Sharding</strong> คือหนึ่งในจุดขายของ <strong>Ethereum 2.0</strong> ที่จะแตก Blockchain ออกเป็นหลายสาย (มองเป็นถนนที่มี 100 เส้นขนานกันไป) ทำงานไม่ขึ้นต่อกัน (แต่คุยไปมาหากันได้) ถ้าเรากำหนดให้ทุก Full Node ต้องตรวจสอบทุกธุรกรรมของทุกสาย (<strong>Validation</strong>) การทำงานคงไร้ประสิทธิภาพ และไม่ตอบโจทย์การแตกเป็นหลายสายตั้งแต่แรก ดังนั้นการออกแบบที่เหมาะสมควรจะเป็น “<strong>ตรวจสอบเท่าที่จำเป็น</strong>” แทน</p><p><strong>ตรวจสอบเท่าที่จำเป็น</strong> ถือเป็นพัฒนาการที่สำคัญในระบบ Blockchain เพราะแต่เดิมการจะเป็น Full Node ได้ ต้องตรวจสอบทุกธุรกรรมเท่านั้น แต่ Ethereum 2.0 มองต่างออกไป ว่าเราสามารถทำระบบ <strong>False Alarm</strong> ที่มีแนวคิดว่า แต่ละ shard มี Full Node ที่ตรวจสอบทุกธุรกรรมของสายตัวเอง แล้วส่งสัญญาณ <strong>False Alarm</strong> ออกมาหากเจอธุรกรรมที่ไม่ถูกต้อง พอ Node ไหนที่ได้รับสัญญาณนี้ ก็จะทำการขอ <strong>Fraud Proof</strong> ไปที่เครือข่าย และทำการ re-validate (ตรวจสอบอีกครั้ง) ว่าผิดจริง แล้วจึงส่ง <strong>False Alarm </strong>ออกไปเป็นทอด ๆ จนทุก Node ในเครือข่ายได้รับสัญญาณนี้จนครบ</p><blockquote><strong>False Alarm</strong> นี้ทำให้ลดภาระการตรวจสอบทุกธุรกรรม (Computing power) ลงไปได้มาก จนสามารถรัน Full Node บนเครื่องโน๊ตบุ๊คก็ยังได้</blockquote><h3>Light clients</h3><blockquote>Light client คือโปรแกรม Blockchain ที่ขนาดเบา และสามารถรันอยู่บนอุปกรณ์ขนาดเล็กได้</blockquote><p>สิ่งที่เป็นความฝันของผู้พัฒนา Blockchain สาธารณะเสมอมา แต่ยังไม่เกิดขึ้นจริงในปัจจุบันก็คือ การให้มือถือ / ตู้เย็น / แอร์ / และ<strong>ทุกอุปกรณ์ IoT (Internet of things) </strong>สามารถรัน Blockchain ได้โดยปลอดภัย จากแต่เดิม Light client ได้ข้อมูลจาก Full Nodes ที่ตัวเองเชื่อมต่ออยู่เท่านั้น* เป็น Light client จะ subscribe (รับข้อมูล) <strong>fraud proof package</strong> ด้วยอีกทางหนึ่ง (คล้าย ๆ ระบบ push notification เวลา facebook มีข้อความใหม่) ทำให้ระบบมีความแข็งแกร่ง และสามารถใช้งานได้จริง</p><blockquote>* Light client สามารถโดนโจมตีได้โดยง่ายจาก Miner / Validator หากปราศจาก Fraud proofs</blockquote><h3>สรุป Ethereum 2.0</h3><p>Ethereum 2.0 นอกจากเปลี่ยนระบบ Consensus จาก PoW ไปเป็น <strong>PoS</strong> แล้ว ยังมีการเร่งประสิทธิภาพด้วยระบบ <strong>Sharding</strong> ที่แตก Blockchain ออกเป็นหลายสาย และสร้างระบบ <strong>False Alarm / Fraud Proof</strong> ขึ้นมาเพื่อให้ Full Node สามารถรันบนคอมพิวเตอร์ส่วนบุคคลได้ เพิ่มความแข็งแกร่งของระบบไปอีกระดับ เพราะใคร ๆ ก็รัน Full Node ได้ ผสมกับ Light client ที่เอา Blockchain ไปรันบนอุปกรณ์ขนาดเล็กเช่นมือถือได้อย่างมั่นใจ ทำให้เราสามารถสรุปได้ว่า Ethereum 2.0 ถือเป็นเป้าหมายสำคัญของการยกระดับ Blockchain สาธารณะ ให้ดียิ่งขึ้น จนเข้าใกล้ Mass Adoption (การมี Blockchain อยู่ในชีวิตประจำวัน) ในเร็ววัน</p><p>Ref: <br>A Philosophy of Blockchain Validation (Vitalik Buterin) <a href="https://vitalik.ca/general/2020/08/17/philosophy.html">https://vitalik.ca/general/2020/08/17/philosophy.html</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cca52496e17d" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kulapofficial/%E0%B8%9B%E0%B8%A3%E0%B8%B1%E0%B8%8A%E0%B8%8D%E0%B8%B2%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%AD%E0%B8%AD%E0%B8%81%E0%B9%81%E0%B8%9A%E0%B8%9A-ethereum-2-0-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%A3%E0%B8%B0%E0%B8%9A%E0%B8%9A-validation-cca52496e17d">ปรัชญาการออกแบบ Ethereum 2.0 ด้วยระบบ Validation</a> was originally published in <a href="https://medium.com/kulapofficial">KULAPofficial</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Maker DAO (DAI) เตรียมอัพเดตระบบ ป้องกันการโจมตีจาก Flash Loan]]></title>
            <link>https://medium.com/kulapofficial/maker-dao-dai-%E0%B9%80%E0%B8%95%E0%B8%A3%E0%B8%B5%E0%B8%A2%E0%B8%A1%E0%B8%AD%E0%B8%B1%E0%B8%9E%E0%B9%80%E0%B8%94%E0%B8%95%E0%B8%A3%E0%B8%B0%E0%B8%9A%E0%B8%9A-%E0%B8%9B%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B8%81%E0%B8%B1%E0%B8%99%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%88%E0%B8%A1%E0%B8%95%E0%B8%B5%E0%B8%88%E0%B8%B2%E0%B8%81-flash-loan-99f4009408c6?source=rss-3877c77a5c4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/99f4009408c6</guid>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[flash-loan]]></category>
            <category><![CDATA[dai]]></category>
            <category><![CDATA[makerdao]]></category>
            <category><![CDATA[bzx]]></category>
            <dc:creator><![CDATA[Nattapon Nimakul]]></dc:creator>
            <pubDate>Thu, 20 Feb 2020 11:41:49 GMT</pubDate>
            <atom:updated>2020-02-20T17:16:07.253Z</atom:updated>
            <content:encoded><![CDATA[<h3>MakerDAO (DAI) เตรียมอัพเดตระบบ ป้องกันการโจมตีจาก Flash Loan</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ica-TRkmmhHG6LGLXLrbCQ.png" /></figure><p>จากเหตุการณ์โจมตี <strong>bZx</strong> ทั้งสองครั้งติด ๆ กัน ในไม่กี่วันที่ผ่านมา มูลค่าความเสียหายราว 28 ล้านบาท (ประมาณการ) ถือเป็นการโจมตี DeFi ครั้งใหญ่ครั้งแรก และใช้ DeFi หลายโปรโตคอลรวมกัน (DeFi composability) ในการโจมตีทั้งสองครั้ง</p><p><strong><em>หมายเหตุ:</em></strong><em> สำหรับโปรโตคอลอื่นนอกเหนือจาก bZx เป็นการทำกำไรจาก ระบบการเงินปกติ แต่ส่วนของ bZx เกิดจาก Bug ใน Smart Contract</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VNX-Iswowko4IXxhevw31A.jpeg" /><figcaption>โจมตีครั้งแรก ใช้ 5 โปรโตคอล ได้ไป ~1,271 ETH</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fQBnpPRNjGLVT0vaFm8l9g.jpeg" /><figcaption>โจมตีครั้งที่สอง ใช้ 5 โปรโตคอล ได้ไป ~2,378 ETH</figcaption></figure><p>ref: <a href="https://thedefiant.substack.com/p/arbs-exploit-defi-to-make-900k-in">https://thedefiant.substack.com/p/arbs-exploit-defi-to-make-900k-in</a></p><p>หากคนสนใจในรายละเอียดเชิงลึก ลองศึกษาจาก ref ด้านบน หรือค้นหา “bzx attack” ได้ครับ มีบทความวิเคราะห์ไว้หลากหลายทีเดียว</p><h3>การตื่นตัวในการมาของ Flash Loan</h3><p>Flash loan เป็นอีกหนึ่ง DeFi (Decentralized Finance) โปรโตคอล ที่พึงมีการพูดถึงกันไม่นาน ผู้เล่นในปัจจุบันมี dYdX, Aave และ bZx โดยการเข้าใจหลักการทำงานของโปรโตคอลนี้เป็นสิ่งสำคัญที่ผู้ออกแบบ DeFi ทุกคนควรศึกษา เพื่อที่จะได้เตรียมพร้อมรับมือกับเหตุการณ์ที่ไม่คาดฝันเช่นนี้</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*t2nAT6zQpVf-P79wyE770w.png" /></figure><h3>Flash Loan คืออะไร?</h3><p>Flash loan คือโปรโตคอลการกู้ยืมแบบไม่ต้องค้ำประกัน (unsecured loan) โดยสามารถกู้เหรียญจำนวนเท่าใดก็ได้ (ตามที่ Pool มี) โดยมีเงื่อนไขเดียว คือต้องคืนเงินกู้เต็มจำนวนภายใน<strong>เสี้ยววินาที!!!</strong> ฟังไม่ผิดครับ ต้องคืนเงินกู้ ณ เวลาเดียวกับตอนที่ยืมเลย</p><p>หรือถ้าอธิบายในภาษาเทคนิคคือ <strong>ต้องคืนภายใน Transaction เดียวกัน</strong> ดังนั้นคนธรรมดาทำไม่ได้แน่นอน (ยกเว้นคุณเป็น The Flash!) ต้องทำผ่าน Smart Contract เท่านั้น เพราะด้วยคุณสมบัติของ Smart Contract ที่ทำงานได้หลายคำสั่งใน Transaction เดียว ทำให้ Flash Loan ถือกำเนิดขึ้นมาได้ <strong>โดยผู้ปล่อยกู้จะเช็คว่าก่อนจบ Transaction ได้เงินกู้คืนมาครบหรือไม่</strong> ถ้าไม่จะทำการยกเลิก (Revert) ทั้ง Transaction</p><p><strong><em>หมายเหตุ:</em></strong> <em>ผู้กู้ก็เป็น Smart Contract เช่นกัน และตอนคืนต้องคืนพร้อมดอกเบี้ย (ถ้ามี)</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*lrgqObX-6-WypVzNJf2f2w.png" /><figcaption>Aave Flash Loan Market size</figcaption></figure><h3>Flash Loan ทำอะไรได้บ้าง</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/605/1*jD7aOQ0OI3-B9k4PkmPvyA.png" /></figure><ol><li>ใช้เพื่อทำ <strong>Arbitrage</strong> หรือทำกำไรจากราคาที่ต่างกันสองตลาด เช่นกู้ DAI ไปซื้อ ETH จาก Kyber ในราคาที่ถูกกว่า แล้วนำไปขายที่ Uniswap ในราคาที่แพงกว่า</li><li><strong>Collateral swap </strong>หรือ กู้เพื่อไปคืนเงินกู้ แล้วเอา Asset ที่ค้ำไว้ถอนออกมา แล้วเอาไปค้ำเพื่อกู้ต่อในอีกระบบนึง (Interest Rate Swap)</li><li><strong>Liquidation</strong> กู้เพื่อไปคืนเงินกู้ (เหมือนข้อ 2) แล้วเอา Asset ที่ค้ำไว้ไปขายในตลาด แล้วเอาส่วนนึงไปคืนเงินกู้ ส่วนมากวิธีนี้ใช้เพื่อป้องกันไม่ให้ถูก liquidate ที่จะเสียค่า penalty ที่สูง</li></ol><p>ref: <a href="https://medium.com/aave/flash-loans-one-month-in-73bde954a239">https://medium.com/aave/flash-loans-one-month-in-73bde954a239</a></p><h3>เอา Flash Loan มาสร้างให้ระบบการเงินผิดปกติ</h3><blockquote>ตรงนี้ผมจะอธิบายคร่าว ๆ นะครับ ไม่ลงรายละเอียดมาก</blockquote><p>ทั้ง 2 เคสที่โจมตี bZx คือ ผู้โจมตีเขียน Smart Contract เพื่อกู้เงินจาก Flash loan แล้วเอาไปทำ Arbitrage ในระบบ แต่แทนที่จะเป็นการทำ Arbitrage ธรรมดา กลับใช้เงินส่วนนึงที่กู้ ไปทำการปั่นราคา (Price Manipulation) ส่งผลให้ WBTC ราคาเกินจริงไปมาก ทำให้ได้กำไรจากการทำ Arbitrage โดยแทบไม่ต้องลงทุนอะไรเลย (เสียค่า gas ให้ Ethereum เล็กน้อย)</p><h3>Maker Dao ตั้งการ์ดรับมือ ป้องกันไว้ดีกว่าแก้</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/858/1*7nK_cmYZz71v7UTjmWqEBQ.png" /><figcaption>Maker Dao ตั้งการ์ดรับโดยระดมเสียงโหวตไปที่ Hat</figcaption></figure><p>เนื่องด้วยโปรโตคอล MakerDAO อาศัยเหรียญ <strong>MKR</strong> แทนเสียงโหวตเพื่อปรับค่า Parameters ต่าง ๆ ของระบบ ที่เรียกว่า <strong>Executive Vote</strong> โดยอำนาจของเหรียญนี้มีมาก (ถึงขนาดโหวตให้เสกเหรียญ MKR เพิ่มขึ้นมาก็ได้) ทำให้มีการกังวลว่าหลังจากเหตุการณ์ bZx เกิดขึ้นแล้ว อาจมีคนพยายามทำ Proposal ประสงค์ร้าย แล้วกู้ MKR จาก Flash loan มาโหวตให้ผ่านได้</p><p>วิธีการป้องกันก็เรียบง่ายมากครับทาง Maker ได้มีการร้องขอผ่าน Community ให้รวมเสียงของทั้ง Community มาไว้ที่ <strong>Hat</strong> ซึ่งเป็น Proposal ตั้งรับ โดยเสียง ณ ตอนนี้รวมกันได้ 150,000 เสียงแล้ว คิดเป็น 76% ของผู้มีสิทธิออกเสียงในปัจจุบัน หรือคิดเป็น 15% ของเหรียญที่มีอยู่ทั้งระบบ</p><p>โดยการทำแบบนี้ทำให้หากต้องการจะโจมตี ต้องมีเสียงมากกว่า 150,000 เสียงถึงจะชนะ ซึ่ง Flash loan pool ที่ผมเช็ค มีแค่ 890 เหรียญเท่านั้นเอง</p><p><strong><em>หมายเหตุ:</em></strong><em> Hat คือ Proposal ตัวล่าสุดที่ได้รับการ Activated อยู่</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/870/1*ZvY9pZQQJGRCmwpoYF-31w.png" /><figcaption>Aave MKR Pool</figcaption></figure><h3>MakerDAO Next Step</h3><p>วันนี้ MakerDAO จะทำการเปิดโหวต <a href="https://forum.makerdao.com/t/agenda-discussion-scientific-governance-and-risk-gsm-edition-thursday-february-20-9am-pst-5-00-pm-utc/1321">Proposal</a> เพื่อ Implement ระบบที่เรียกว่า GSM (Governance Security Module) ใช้ในการหน่วงเวลา Proposal ที่ชนะแล้ว ไม่ให้ทำการ Active ได้ทันที เช่น หน่วงเวลาเอาไว้ 24 ชั่วโมง เพียงเท่านี้ Flash loan ก็ทำอะไรไม่ได้แล้ว</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6XnveIUhEOBJkHdfo-XjZg.png" /></figure><h3>สรุป สิ่งที่เราได้จากเหตุการณ์นี้</h3><p>DeFi เป็น Ecosystem ที่ใหม่มาก และมีแนวโน้มว่าจะมีอัตราการเติบโตที่สูง (สูงกว่าที่ใครหลาย ๆ คนคิดไว้) การมี DeFi Protocol ที่มากขึ้นในอนาคต ก็อาจก่อให้เกิดความเสี่ยงที่มากขึ้นตาม โดยเฉพาะอย่างยิ่งการมี Bug ใน Smart Contract เมื่อเกิดความเสียหายแล้วก็ยากที่จะเอาเงินคืนกลับมาได้</p><p>สำหรับนักพัฒนา เราต้องตระหนักถึงเรื่องนี้ และเตรียมรับมือกับเหตุการณ์เหล่านี้ให้ได้ ขอให้ศึกษาระบบ DeFi แต่ละเจ้าให้ดี ทั้งหลักการทำงาน ทีมงาน และความปลอดภัยที่ระบบออกแบบไว้ อีกทั้งไม่ควรลงทุนในจำนวนที่มาก (ตามความเสี่ยงที่รับได้)</p><p>ต่อไปนี้ใครทำระบบอาจต้องคำนึงถึง Flash Loan ด้วยว่าระบบเราจะถูกโจมตีด้วยวิธีนี้หรือไม่ อย่าง MakerDAO ก็รีบหาทางป้องกันทันที เพราะถ้าหากวันหนึ่งใน Pool มีเหรียญ MKR มากพอแล้วถูกยืมมา Vote ตัว Proposal ที่ประสงค์ร้ายก็จะเกิดความเสียหายได้</p><p><em>ขอบคุณพี่ฮ้อ </em><a href="https://medium.com/u/e5590dde9540"><em>TonHor</em></a><em>ที่ช่วยตรวจบทความ</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=99f4009408c6" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kulapofficial/maker-dao-dai-%E0%B9%80%E0%B8%95%E0%B8%A3%E0%B8%B5%E0%B8%A2%E0%B8%A1%E0%B8%AD%E0%B8%B1%E0%B8%9E%E0%B9%80%E0%B8%94%E0%B8%95%E0%B8%A3%E0%B8%B0%E0%B8%9A%E0%B8%9A-%E0%B8%9B%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B8%81%E0%B8%B1%E0%B8%99%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%88%E0%B8%A1%E0%B8%95%E0%B8%B5%E0%B8%88%E0%B8%B2%E0%B8%81-flash-loan-99f4009408c6">Maker DAO (DAI) เตรียมอัพเดตระบบ ป้องกันการโจมตีจาก Flash Loan</a> was originally published in <a href="https://medium.com/kulapofficial">KULAPofficial</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[☕ Libracoffee.io ระบบสั่งซื้อกาแฟด้วยเหรียญ Libra เป็น Use case แรกของโลก]]></title>
            <link>https://medium.com/kulapofficial/libracoffee-io-f9060d2423a8?source=rss-3877c77a5c4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/f9060d2423a8</guid>
            <category><![CDATA[point-of-sale]]></category>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[libras]]></category>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[blockchain]]></category>
            <dc:creator><![CDATA[Nattapon Nimakul]]></dc:creator>
            <pubDate>Wed, 31 Jul 2019 11:44:59 GMT</pubDate>
            <atom:updated>2019-07-31T13:27:37.365Z</atom:updated>
            <content:encoded><![CDATA[<h3>☕ Libracoffee.io ระบบสั่งซื้อกาแฟด้วยเหรียญ Libra เป็น Use case แรกของโลกกับการนำเหรียญ Libra มาใช้จริง (Testnet)</h3><p>ต่อเนื่องจากงาน <strong>Libra Developer Bangkok</strong> ที่จัดกันไปเมื่ออาทิตย์ที่ผ่านมา ได้เสียงตอบรับจากนักพัฒนาชาวไทยอย่างล้นหลาม ชนิดที่ว่าเกินความคาดหมายไปเยอะมาก ตั้งแต่บัตรหมดภายใน 1 วินาที!!! ใช่ครับ ผมยังตกใจเลย แบบถาม “พี่ฮ้อ ระบบัตรเรามีปัญหาหรือเปล่า” ก็ได้รับคำตอบว่า “หมดแล้ว มันหมดภายใน 1 วินาที” O_O และมียอดชมผ่าน Live และดูย้อนหลังกว่า 20,000 views</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bDs1OJYVyWugsj8zxQomfQ.jpeg" /><figcaption>ภาพบรรยากาศงาน Libra Blockchain Developer</figcaption></figure><p>อีก 1 ไฮไลท์ในงานก็คือ การเปิดตัว <a href="https://www.libracoffee.io/"><strong>LibraCoffee.io</strong></a> ซึ่งเป็นระบบ Libra Merchant แรกของโลก ที่พยายามแสดงให้เห็นถึง Use case เวลาใน Libra มาใช้จริงในการซื้อกาแฟ ว่ามีประสบการณ์ใช้งานอย่างไร โดยผู้ที่ได้เข้าร่วม ก็ได้ใช้ Libra Wallet POC ในการจ่ายค่ากาแฟ โดยมีให้เลือก 4 เมนูด้วยกัน และชำระเงินด้วยเหรียญ Libra Coins จบภายใน 3 วินาที!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/768/1*-Q0GKXcmXQlhXgSB8YXDqQ.jpeg" /><figcaption>ภายบรรยากาศการใช้ <strong>LibraCoffee.io </strong>(CR. คุณบีม siamblockchain)</figcaption></figure><h3>การใช้งาน LibraCoffee.io</h3><ul><li>ร้านค้าเปิด <a href="https://www.libracoffee.io/"><strong>LibraCoffee.io</strong></a> ด้วย Web browser เช่น Safari หรือ Chrome บน iPad, Notebook หรือ PC จากนั้นให้ผู้ใช้ จิ้มไปที่เมนูที่ แล้วกด “PAY”</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*E8Ei6aw4CKlmlsfTBTag9Q.png" /><figcaption>หน้าร้าน Libra Coffee</figcaption></figure><ul><li>ระบบทำการสร้าง QR Payment สำหรับใช้งานครั้งเดียว ที่ระบุค่า 3 อย่างใน QR นี้คือ 1) address ของร้านค้า 2) จำนวนยอดที่ต้องชำระ 3) ชื่อร้านค้า</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*82HAKpZdy54juugWlJT6QQ.png" /><figcaption>Libra Coffee QR Payment</figcaption></figure><ul><li>ผู้ใช้เปิด <a href="https://dev.kulap.io/libra"><strong>Libra Wallet POC</strong></a> กด “Send/Pay” แล้ว Scan QR โค้ดที่หน้าจอ</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/1*mPPv5fk_0mrN-bqIjoFEng.jpeg" /><figcaption>Libra Wallet Scan QR To Pay</figcaption></figure><ul><li>ผู้ใช้ยืนยันการชำระเงิน</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/1*F-DXV48cYWN43v7AKUjE2w.png" /><figcaption>Libra Wallet Confirm Payment</figcaption></figure><ul><li>ร้านค้าได้รับเงิน และแสดง E-Receipt ที่หน้าผู้ใช้ทันที</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AdJsuhXDnCjtun4LCOqbGw.png" /><figcaption>Libra Coffee Payment Received</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/1*b6YzOKnj75fukb1gMjDJIQ.jpeg" /><figcaption>Libra Wallet Payment Slip E-Receipt</figcaption></figure><h3>เทคนิคการทำงานเบื้องหลัง</h3><p>ตัว <a href="https://www.libracoffee.io/">LibraCoffee.io</a> ถูกพัฒนาในรูปแบบ Open Source แบบ MIT License อยู่ที่นี้ครับ <a href="https://github.com/kulapio/libra-merchant">https://github.com/kulapio/libra-merchant</a> โดยสร้างขึ้นด้วย Vuejs และใช้ <a href="https://documenter.getpostman.com/view/1671913/S1a32SZ5?version=latest">Libra Service APIs</a> (ในส่วนนี้ ผมเขียนอธิบายไว้ใน <a href="https://medium.com/kulapofficial/the-first-libra-wallet-poc-building-your-own-wallet-and-apis-3cb578c0bd52">blog</a> นี้) ในการสร้าง Address เพื่อรับเงิน และเช็คยอดเงิน</p><h4>Step 1 ผู้ใช้กดจ่ายเงิน</h4><p>ทันทีที่ผู้ใช้กดจ่ายเงิน ระบบจะทำการเรียก <strong>Creat Wallet API</strong> เพื่อให้ได้ Address ใหม่มา และยอดเงินเป็น 0</p><p><strong>Request <br></strong>Method: POST<br>URL: <a href="https://libraservice2.kulap.io/createWallet">https://libraservice2.kulap.io/createWallet</a></p><pre>curl --location --request POST &quot;https://libraservice2.kulap.io/createWallet&quot; \<br>  --header &quot;Content-Type: application/json&quot; \<br>  --data &quot;{<br>    \&quot;minting\&quot;: false<br>}&quot;</pre><p><strong>Response</strong></p><pre>{<br>  &quot;address&quot;: &quot;e79fa865dd12d554312..&quot;,<br>  &quot;balance&quot;:&quot;0&quot;<br>}</pre><p>เราจะได้ <strong>Address</strong> เพื่อใช้ในการชำระเงินครั้งเดียวมา (ผู้ใช้คนละคน และชำระเงินคนละครั้ง ก็จะเป็น Address ต่างกันไปทุกครั้ง)</p><h4>Step 2 ระบบทำการเช็คว่ามีเงินโอนเข้าหรือยัง</h4><p>ตัวระบบ Libra Merchant จะทำการเรียก <strong>Get Balance API</strong> เพื่อทำการเช็คทุก 2 วินาที ว่ามีเงินโอนเข้ามาหรือยัง และเกินยอดที่กำหนดไว้หรือไม่</p><p><strong>Request <br></strong>Method: POST<br>URL: <a href="https://libraservice2.kulap.io/createWallet">https://libraservice2.kulap.io/createWallet</a></p><pre>curl --location --request POST &quot;https://libraservice2.kulap.io/getBalance&quot; \<br>  --header &quot;Content-Type: application/json&quot; \<br>  --data &quot;{<br>	\&quot;address\&quot;: \&quot;e79fa865dd12d554312...\&quot;<br>}&quot;</pre><p><strong>Response</strong></p><pre>{<br>  &quot;address&quot;: &quot;e79fa865dd12d554312..&quot;,<br>  &quot;balance&quot;:&quot;14.5&quot;<br>}</pre><p>หากยอดที่ชำระเข้ามาถึงแล้ว ก็แสดงหน้า Thank you พร้อมแสดงยอดที่ได้รับ</p><h4>Step 3 ฝั่งผู้ใช้ชำระเงินแล้ว</h4><p>พอผู้ใช้ได้ชำระเงินเสร็จแล้ว ก็จะแสดงหน้า E-Receipt เพื่อแสดงเลขอ้างอิง โดยจะใช้ Unique Address ของผู้รับ 6 ตัวอักษรแรก เป็น Reference id ครับ</p><h3>สรุปปิดท้าย</h3><p>จะเห็นได้ว่า Flow การทำงานเรียบง่ายมาก แทบไม่มีอะไรซับซ้อน แต่กลับสร้างผลตอบรับที่ดีจากผู้ใช้ เพราะทำให้ผู้ใช้สามารถทดลองจ่ายเงินซื้อกาแฟ (แบบจำลอง) และได้ประสบการณ์ผู้ใช้จริง หากมีการนำไปต่อยอดจนใช้งานจริงได้ เราอาจได้เห็นการท่องเที่ยวไทยที่มีเม็ดเงินมหาศาลอยู่แล้ว ลูกค้าต่างชาติสามารถซื้อกาแฟ เข้าร้านสะดวกซื้อ หรือจับจ่ายในห้าง ได้ด้วย Libra Wallet ได้เลย โดยไม่ต้องยุ่งยากในการแปลงเงินไปมา ทำให้เพิ่มยอดขายให้กับร้าน เพื่อเป็นอีก 1 ทางเลือกในการจับจ่ายได้ครับ</p><p>ใน Step ถัดไป ผมจะพัฒนาตัว Libra Merchant ให้ร้านค้าสามารถเก็บเงินได้จริง ๆ ใน Wallet ของร้านเอง แทนที่จะใช้ Create Wallet API ที่สร้างจากฝั่ง Client เพื่อความปลอดภัยในการใช้งาน และยังคงประสบการณ์การใช้งาน ให้ง่ายหมือนเดิม ครับผม</p><p>หากใครสนใจอยากศึกษาและพัฒนา Libra Blockchain มากกว่านี้ทางเราจัดคอร์สเรียน Libra Blockchain แบบเต็มวันที่มีเนื้อหาครบถ้วนก็ลองไปดูรายละเอียดกันได้ครับ <a href="https://www.facebook.com/events/632037597290421/"><strong>Build DApps on Libra Blockchain</strong></a></p><p>หากใครชอบบทความ ฝากกดติดตาม <a href="https://www.facebook.com/KULAP.io">Kulap Official</a> กันได้นะครับ ทีมงาน Kulap เราเป็นทีมที่สนใจศึกษาด้าน Blockchain โดยเฉพาะ และกำลังทำ <strong>Decentralized Exchange</strong> (Dex) กันอยู่ครับ</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f9060d2423a8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kulapofficial/libracoffee-io-f9060d2423a8">☕ Libracoffee.io ระบบสั่งซื้อกาแฟด้วยเหรียญ Libra เป็น Use case แรกของโลก</a> was originally published in <a href="https://medium.com/kulapofficial">KULAPofficial</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[พัฒนา Libra Wallet ใช้เอง กันง่าย ๆ ด้วย libra-core.js ที่ทำงานได้ทั้งบน Browser และ Nodejs — Part1]]></title>
            <link>https://medium.com/kulapofficial/%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2-libra-wallet-%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B9%80%E0%B8%AD%E0%B8%87-%E0%B8%81%E0%B8%B1%E0%B8%99%E0%B8%87%E0%B9%88%E0%B8%B2%E0%B8%A2-%E0%B9%86-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-libra-core-js-%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%97%E0%B8%B3%E0%B8%87%E0%B8%B2%E0%B8%99%E0%B9%84%E0%B8%94%E0%B9%89%E0%B8%97%E0%B8%B1%E0%B9%89%E0%B8%87%E0%B8%9A%E0%B8%99-browser-%E0%B9%81%E0%B8%A5%E0%B8%B0-nodejs-part1-fa7493d0f9a3?source=rss-3877c77a5c4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/fa7493d0f9a3</guid>
            <category><![CDATA[libras]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Nattapon Nimakul]]></dc:creator>
            <pubDate>Mon, 29 Jul 2019 05:26:22 GMT</pubDate>
            <atom:updated>2019-07-29T05:26:22.311Z</atom:updated>
            <content:encoded><![CDATA[<h3>พัฒนา Libra Wallet ใช้เอง กันง่าย ๆ ด้วย libra-core.js ที่ทำงานได้ทั้งบน Browser และ Nodejs — Part1</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MwmD-rsnhJNNdSL4iQsiAA.jpeg" /></figure><p>สวัสดีครับทุกท่าน จบไปแล้วกันง่าย Libra Developer Bangkok ที่จัดโดย เหล่านักพัฒนาจากคนไทย รวมไปถึงเหล่า contributes ให้กับโปรเจค Open Source Libra หลายตัว ที่ค่อนข้าง active กันมาก เดือนเดียวมีโปรเจคที่ทีมผมทำกันทั้ง contributes / watch เพียบเลย ซึ่งผมเองก็มีโอกาสได้พูดในหัวข้อ “The First Libra Wallet: how to build your own wallet”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fsYCs9lb4TN1ZWQoSuGiGQ.png" /><figcaption>Libra Contributors</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rxQ5xJS9FYBSF8XI5rQYBw.png" /><figcaption>Open Source Libra Projects</figcaption></figure><p>โอเคมาเข้าประเด็นกันเลย ทางทีมงาน <a href="https://www.facebook.com/KULAP.io">kulap.io</a> เราได้มีโอกาสทำ Libra Wallet POC <a href="https://dev.kulap.io/libra/#/">https://dev.kulap.io/libra/</a> ไปตั้งแต่วันแรก ๆ ที่ Libra เปิดตัวออกมา แต่ ณ ตอนนั้นทุกอย่างยัง early มาก เราเลยใช้วิธี hack ๆ กัน โดยการรัน express.js ตัวหนึ่งมารับ api create / query balance / transfer แล้วเบื้องหลังไปเรียก docker มาทำงานอีกที ใครสนใจลองอ่านบทความ <a href="https://medium.com/kulapofficial/the-first-libra-wallet-poc-building-your-own-wallet-and-apis-3cb578c0bd52">The First Libra Wallet POC</a> นี้ได้ครับ</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/845/1*y_gRWpJQ97nm454Mb3bq1g.png" /><figcaption><a href="https://dev.kulap.io/libra/">https://dev.kulap.io/libra/</a></figcaption></figure><p>ซึ่งได้รับความสนใจเยอะมาก จนตอนนี้มีผู้ใช้งานมากกว่า 17,000 คน และมีธุรกรรมมากว่า 140,000 ธุรกรรมที่เกิดขึ้นในระบบ Libra Blockchain</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/650/1*tG2uYJUBcAq7c2jP9xqelw.png" /><figcaption><a href="https://dev.kulap.io/libra/#/stats">https://dev.kulap.io/libra/#/stats</a></figcaption></figure><p>แต่ระบบนี้ก็มีความปลอดภัยที่ต่ำ เนื่องจากมีการสร้าง <strong>secret key</strong> (mnemonic phrase / private key) ที่เป็นกุญแจลับในการเข้าถึงบัญชี Libra จาก server แล้วส่งให้ผู้ใช้ แล้วพอผู้ใช้จะโอนเงิน ก็ต้องส่ง <strong>secret key</strong> ไปที่ server อีก ตรงนี้หาก server โดนโจมตี หรือโดนดักฟัง เงินในบัญชีก็จะมีความเสี่ยงทันที</p><h3>Introduce npm i kulap-libra 🔱</h3><p>พอมีผู้ใช้สูงขึ้น เราก็เลยคิดว่าถึงเวลาอัพเกรดให้เข้าใกล้ Production grade ด้วยการทำให้มันเป็น Crypto Wallet จริง ๆ เลยด้วยการใช้ <strong>kulap-libra npm package</strong> ในการ create / transfer จาก Browser และ nodejs ได้โดยไม่ต้องพึง Server อีกต่อไป (ตัว Kulap Libra Wallet อัพเกรดมาใช้ตัวนี้เรียบร้อย)</p><p>ก็เลยอยากจะพาเพื่อน ๆ มาลองเขียน Wallet ใช้เองกันดู โดยจะเริมตั้งแต่ต้นเลย ใครอยากดูแบบ VDO เพื่อทำตามก็ได้นะครับ อันนี้เลย</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FiNDt--GspA4%3Fstart%3D20%26feature%3Doembed%26start%3D20&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DiNDt--GspA4&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FiNDt--GspA4%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/e95cbbe20cf5e74ca5bd7009a4abfaa5/href">https://medium.com/media/e95cbbe20cf5e74ca5bd7009a4abfaa5/href</a></iframe><h3>Step 1) npm i kulap-libra</h3><pre>mkdir myfirstwallet<br>cd myfirstwallet</pre><pre>npm init -y<br>npm install kulap-libra</pre><h3><strong>Step 2) สร้างบัญชี Libra</strong></h3><p>สร้างไฟล์ index.js จากนั้นเขียนคำสั่งสร้าง Wallet โดยใช้ new LibraWallet()</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/f50f767e6eee4d7a5ef4c0ff3d2f13bc/href">https://medium.com/media/f50f767e6eee4d7a5ef4c0ff3d2f13bc/href</a></iframe><p><strong>บรรทัดที่ 2</strong> ทำการโหลด <strong>kulap-libra</strong> javascript library</p><p><strong>บรรทัดที่ 5 </strong>เป็นจังหวะการสร้างรหัสลับด้วย Crypto Random เพื่อหาเลขสุ่ม และสร้างออกมาเป็น mnemonic phrase (ชุดคำ 24 คำ ที่เป็นความลับ) ขั้นตอนนี้ยังไม่มีการติดต่อกับ Blockchain แต่อย่างใด ทำให้ไม่มี Internet ก็สร้างได้</p><p><strong>บรรทัดที่ 6</strong> เป็นการสร้างบัญชีจาก mnemonic phrase ที่อยู่ใน wallet object โดย account ที่ได้จะประกอบไปด้วย Address, Public key และ Secret key (private key)</p><h4>ลองรันด้วยคำสั่ง</h4><pre>node index.js</pre><p>จะได้คำตอบประมาณนี้</p><pre>{ <br>    address:  &#39;2ebdbe44a375c668d3d83d51adbb4fc118ec3754e6cdb5cae3612d933c7d7b5f&#39;,<br>    mnemonic: &#39;small bring zero feed found angle impose symptom scatter file category fee gentle orient fork gorilla robot van regret luxury almost garage wine illness&#39; <br>}</pre><p><strong>หรือถ้าใครรันไม่ได้ ให้แก้ package.json ตรง scripts ตามนี้</strong></p><pre>&quot;scripts&quot;: {<br>    &quot;test&quot;: &quot;echo \&quot;Error: no test specified\&quot; &amp;&amp; exit 1&quot;,<br>    &quot;start&quot;: &quot;node index.js&quot;<br>},</pre><p>แล้วลอง</p><pre>npm run start</pre><p><strong>เย้!!</strong> เราสร้าง Libra Wallet เป็นของตัวเองได้ง่าย ๆ แล้ว หากเรารันอีกครั้งก็จะได้ Wallet ใหม่ทุกครั้ง ถ้าอยากใช้ Wallet เดิมต้อง load menmonic phrase เข้าไป ใครสนใจศึกษาเพิ่มเติมได้ที่นี้ครับ <a href="https://github.com/kulapio/libra-core">https://github.com/kulapio/libra-core</a></p><h3>Step 3) รับเหรียญฟรี 1,000 เหรียญจาก Libra Testnet Faucet</h3><p>ก่อนอื่นต้องลง bignumber.js เพราะต้องใช้ในการแปลง Micro LIB &lt;-&gt; LIB</p><pre>npm install bignumber.js</pre><p>- แก้ไฟล์ <strong>index.js</strong> ตามนี้ เพิ่มส่วน mint เข้าไป</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/10249ad751c42a5cc5faf943e63cc33f/href">https://medium.com/media/10249ad751c42a5cc5faf943e63cc33f/href</a></iframe><p><strong>บรรทัดที่ 16</strong> เป็นการสร้าง client เชื่อมไปยัง Libra Testnet</p><p><strong>บรรทัดที่ 17</strong> จะเห็นว่ามีการ * 10⁶ เพราะว่าเหรียญ Libra Coins หรือ LIB จะมีทศนิยมทั้งหมด 6 หลัก ถ้าเราสั่งเสกเหรียญ 12 เหรียญ ต้องระบุเป็น 12000000</p><p>จะได้คำตอบประมาณนี้</p><pre>...<br>mintingResult 188168</pre><p>** ตัวเลข 188168 เป็นตัวเลข Transaction ID ของคนเสกเหรียญ ไม่ใช่ยอดเงินนะ</p><p>ทีนี้เราก็เอา address ของเราไปเช็คยอดเงินที่ <a href="https://libexplorer.com/">https://libexplorer.com/</a> ด้วยการใส่ address ไปในช่อง search</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*PFZ4FTbpnvTD54T1RFcW-w.png" /><figcaption>Libra Explorer with minting</figcaption></figure><p><strong>อูฮูยย เราได้เงินแล้ว!! </strong>👼 ง่ายจัง เป็น Dev นี้ดีจริง ๆ ทีนี้เราก็เอาเงินตรงนี้ไปซื้อบ้าน ซื้อรถ กันเถอะ…. เดี่ยว ๆ ตื่น ๆ อันนี้เงิน Testnet ครับ ไม่มีมูลค่าอะไร เพราะเสกให้กันฟรี ๆ ต้องรอ Mainnet อันนั้นแหละเงินจริง (แล้วก็ต้องใช้เงินเราไปซื้อเช่นกัน)</p><h3>Step 4) เพิ่มโค้ดเช็คยอดเงิน Balance</h3><p>ดูผ่าน Libra Explorer มันก็ง่ายดี แต่ไม่ geek เราสาย Dev ต้องอ่านด้วยโค้ดสิ งั้นมาเพิ่มโค้ดกัน</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/eb26a4659ad1d4a70c1e7dbe0b5a45e7/href">https://medium.com/media/eb26a4659ad1d4a70c1e7dbe0b5a45e7/href</a></iframe><p><strong>บรรทัดที่ 25</strong> ทำการเช็คสถานะล่าสุดของบัญชี address ที่เรากำหนด (เบื้องหลังจะทำการ Update to latest ledger) เราจะได้หลายค่ากลับมา เช่น balance, sequence number, sent/receive events count</p><p><strong>บรรทัดที่ 28, 31 </strong>ทำการแปลงไปมาระหว่างหน่วย LIB &lt;-&gt; Micro LIB</p><p>run แล้วจะได้คำตอบแบบนี้</p><pre>...<br>balanceResult 1000</pre><h3>Step 5) สั่งโอนเงิน</h3><p>การโอนเงินบนโลก Blockchain เราจะใช้ Private key เซ็นคำสั่งโอนเงิน (transaction script) บน client แล้วค่อยส่งผ่านไปยัง Admission Control ผ่าน LibraClient ดังนี้</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/69b8161d1f4e7d2399867cb92af39a26/href">https://medium.com/media/69b8161d1f4e7d2399867cb92af39a26/href</a></iframe><p>ผมปรับ <strong>บรรทัดที่ 7</strong> ให้โหลดค่าจาก mnemonic phrase ที่เราได้จากจากขั้นตอนก่อนหน้า เราจะได้เข้าถึงบัญชีเดิมทุกครั้งไม่ต้องสร้างใหม่</p><p><strong>บรรทัดที่ 11</strong> เพิ่มให้ return account object ออกมาด้วย</p><p><strong>บรรทัดที่ 38</strong> เป็น function โอนเงิน โดย ณ บรรทัดที่ 40 ด้านใน lib kulap-libra จะทำการลงลายเซ็นดิจิตอลด้วย private key ของเรา และทำการส่งไปยัง ac.testnet.libra.org (Admission Control ของ Libra Testnet) ให้</p><p><strong>บรรทัดที่ 58</strong> ทำการเรียกใช้คำสั่งโอนเงิน โดยระบุ address ผู้รับ ตรงนี้อาจใช้ <a href="https://dev.kulap.io/libra/#/">https://dev.kulap.io/libra/</a> เพื่อเป็น wallet ผู้รับ กด Receive แล้ว copy address มาใช้ได้ (พอโอนเสร็จ กด refresh เพื่อเช็คยอดเงินเข้า)</p><p>ผลลัพธ์</p><pre>...<br>balance Before 927.999976<br>transferResult 0<br>balance After 915.999976</pre><p><strong>เย้!! </strong>😄 เราโอนเงินสำเร็จแล้ว และยอดเงินก็ได้ลดแล้ว ทีนี้ก็อย่าลืมลองเช็คที่ผู้รับกันด้วยนะครับ</p><h3>สรุปส่งท้าย</h3><p>เราจะเห็นได้ว่าในโลก Blockchain ในทีนี้คือ Libra Blockchain สามารถที่จะเขียนโปรเจคสั่งงาน เพื่อทำระบบ Crypto Wallet ได้ด้วยตัวเอง และเป็น Protocol กลางที่ทุก ๆ โปรแกรมของทุก ๆ คนสามารถที่จะติดต่อสื่อสารกันได้ กล่าวคือ ผมอาจสร้าง Wallet ของตัวเองชื่อว่า Kulap Wallet แล้วเพื่อนผมสร้างชื่อ TonHor Wallet ทั้ง 2 ผู้ให้บริการนี้ไม่เคยคุยกันมาก่อน แต่ก็สามารถส่งเงินหากันได้ เพราะเราใช้ Protocol ในการสื่อสารที่เหมือนกันนั้นเอง</p><p>หากใครสนใจที่จะสร้าง Wallet ต่อยอดจาก <strong>kulap-libra javascript </strong>ตัวนี้ ก็อย่าลืมแบ่งปั่นให้เพื่อน ๆ ใน <a href="https://web.facebook.com/groups/425807021332236/"><strong>Libra and Move Developers Thailand</strong></a> ได้ลองเล่นก้นด้วยนะคร้บ และหากให้อยากต่อยอดมากกว่านี้ทางเราจัดคอร์สเรียน Libra Blockchain แบบเต็มวันที่มีเนื้อหาครบถ้วนก็ลองไปดูรายละเอียดกันได้ครับ <a href="https://www.facebook.com/events/632037597290421/"><strong>Build DApps on Libra Blockchain</strong></a></p><p>หากใครชอบบทความ ฝากกดติดตาม <a href="https://www.facebook.com/KULAP.io/?source=post_page---------------------------">Kulap Official</a> กันได้นะครับ ทีมงาน Kulap เราเป็นทีมที่สนใจศึกษาด้าน Blockchain โดยเฉพาะ และกำลังทำ <strong>Decentralized Exchange</strong> (Dex) กันอยู่ครับ</p><p>หมายเหตุ: ขอบคุณพี่ฮ้อ <a href="https://medium.com/u/e5590dde9540">TonHor</a> ที่ช่วยตรวจบทความให้</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fa7493d0f9a3" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kulapofficial/%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2-libra-wallet-%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B9%80%E0%B8%AD%E0%B8%87-%E0%B8%81%E0%B8%B1%E0%B8%99%E0%B8%87%E0%B9%88%E0%B8%B2%E0%B8%A2-%E0%B9%86-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-libra-core-js-%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%97%E0%B8%B3%E0%B8%87%E0%B8%B2%E0%B8%99%E0%B9%84%E0%B8%94%E0%B9%89%E0%B8%97%E0%B8%B1%E0%B9%89%E0%B8%87%E0%B8%9A%E0%B8%99-browser-%E0%B9%81%E0%B8%A5%E0%B8%B0-nodejs-part1-fa7493d0f9a3">พัฒนา Libra Wallet ใช้เอง กันง่าย ๆ ด้วย libra-core.js ที่ทำงานได้ทั้งบน Browser และ Nodejs — Part1</a> was originally published in <a href="https://medium.com/kulapofficial">KULAPofficial</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The First Libra Wallet  POC— Building your own Wallet and APIs]]></title>
            <link>https://medium.com/kulapofficial/the-first-libra-wallet-poc-building-your-own-wallet-and-apis-3cb578c0bd52?source=rss-3877c77a5c4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/3cb578c0bd52</guid>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[libras]]></category>
            <category><![CDATA[move-programming]]></category>
            <category><![CDATA[crypto-wallet]]></category>
            <category><![CDATA[blockchain]]></category>
            <dc:creator><![CDATA[Nattapon Nimakul]]></dc:creator>
            <pubDate>Sun, 23 Jun 2019 13:55:06 GMT</pubDate>
            <atom:updated>2019-09-13T01:47:00.813Z</atom:updated>
            <content:encoded><![CDATA[<h3>The First Libra Wallet POC— Building your own Wallet and APIs</h3><p>(28/06/2019) Now, we have users more than 3,000 with more than 21,000 transactions using our wallet.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dSIjHHJVv9JbKwswRFXJwg.png" /><figcaption>Libra Wallet on Testnet</figcaption></figure><p>It’s been almost a week since <strong>Facebook</strong> announced <strong>Libra Blockchain</strong> which has <strong>Libra Coin</strong> run on it. <strong>Libra Coin</strong> is a Stable coin backed by a basket of fiat currencies. <strong>Libra Coin</strong> itself is created by <strong>Move language </strong>that <strong>Facebook</strong> announced alongside with its blockchain.</p><p><strong>Libra</strong> is an open source project so we can look inside, play around with it or create a custom module (by <strong>Move language</strong>). So for Developers it just easy to get started with <strong>Libra-CLI</strong> to create an account, mint some coins and send it to your friends (of course Developers).</p><blockquote>Just try this one, <a href="https://developers.libra.org/docs/my-first-transaction">https://developers.libra.org/docs/my-first-transaction</a></blockquote><blockquote>And <a href="https://medium.com/kulapofficial/libra-%E0%B8%A1%E0%B8%B2%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%99%E0%B8%AA%E0%B8%81%E0%B8%B8%E0%B8%A5%E0%B9%80%E0%B8%87%E0%B8%B4%E0%B8%99%E0%B8%94%E0%B8%B4%E0%B8%88%E0%B8%B4%E0%B8%95%E0%B8%AD%E0%B8%A5%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88-%E0%B9%82%E0%B8%AD%E0%B8%99%E0%B9%80%E0%B8%87%E0%B8%B4%E0%B8%99%E0%B8%97%E0%B8%B1%E0%B9%88%E0%B8%A7%E0%B9%82%E0%B8%A5%E0%B8%81%E0%B8%A0%E0%B8%B2%E0%B8%A2%E0%B9%83%E0%B8%99%E0%B8%A7%E0%B8%B4%E0%B8%99%E0%B8%B2%E0%B8%97%E0%B8%B5-%E0%B8%84%E0%B9%88%E0%B8%B2%E0%B8%98%E0%B8%A3%E0%B8%A3%E0%B8%A1%E0%B9%80%E0%B8%99%E0%B8%B5%E0%B8%A2%E0%B8%A1%E0%B8%95%E0%B9%88%E0%B8%B3-%E0%B9%82%E0%B8%94%E0%B8%A2-facebook-8517d267717b">Thai version here</a>.</blockquote><p><strong>What about normal users?</strong> who might interest Libra right now? do they have a chance to get some Libra coins? of course not because we no have a user interface for now (Yeah it just getting started 🎉).</p><h3>Introduce Libra Wallet POC</h3><p>You can try the first Libra wallet here =&gt; <a href="https://dev.kulap.io/libra/#/">https://dev.kulap.io/libra/</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/770/1*GuTXzyNAuSQannY-YtUv3g.png" /><figcaption>Libra Wallet Proof of concept</figcaption></figure><p>At <a href="https://www.kulap.io/">Kulap.io</a> as we’re smart contract developers for Ethereum that building Dex (Decentralized Exchange). we see a lot of opportunities here, and we think mass users should have a chance to try it out so we create <strong>Libra Wallet POC</strong> that easy to use on hands of all users.</p><p><strong>Libra Wallet POC</strong> is a web wallet that allows users to create their wallets (with 100 Libra Coins) as just open a web page, and send it to their friends with <strong>QR Code!</strong></p><h3>Quick walkthrough</h3><h4><strong>1. Open this page</strong> <a href="https://dev.kulap.io/libra/#/">https://dev.kulap.io/libra/</a></h4><p>It will be creating your wallet with 100 Libra coins on it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/770/1*GuTXzyNAuSQannY-YtUv3g.png" /><figcaption>Libra Wallet Proof of concept</figcaption></figure><blockquote>If don’t get 100 coins to please clear browser local storage and try again.</blockquote><h4>2. Send to your friends (or other browsers)</h4><p>Select “<strong>Send</strong>” to scan <strong>QR</strong> or use “<strong>Manual</strong>” to provide target address yourself (you can use an account on <strong>Libra-CLI</strong> here), then “<strong>Confirm</strong>”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/760/1*1xN29X_I1-Fq0hJKpA2K5g.png" /><figcaption>Libra Wallet — Transfer with QR</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/764/1*JZeJttEzZqLuD3FUHMsvNw.png" /><figcaption>Libra Wallet — Transfer with address</figcaption></figure><h4>3. Done</h4><p>Then, you should see now your wallet remain balance’s 90 Libra coins.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/574/1*gcINWDQPcxxEIYKWvgJQjg.png" /><figcaption>Libra Wallet — Balance</figcaption></figure><p>And the destination address received 10 Libra coins.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2QRjSELq0zvUZwRq-CT22g.png" /><figcaption>Libra Wallet — Balance on Libra-CLI</figcaption></figure><h3><strong>Libra wallet APIs</strong></h3><p>Right now Libra project hasn’t officially announced any <strong>APIs</strong> that we can use with frontend so we decide to make our own <strong>APIs</strong> that routing any requests to <strong>Libra-CLI</strong> and return the result from it.</p><h3>1. Creating a wallet</h3><p>[<strong>POST</strong>] https://libraservice3.kulap.io/createWallet</p><p><strong>Request Params:</strong> <br>// not thing or {}</p><p><strong>Return:</strong></p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/7667a1c0f677859213a29b84908ec267/href">https://medium.com/media/7667a1c0f677859213a29b84908ec267/href</a></iframe><p>You will get the <strong>mnemonic phrase</strong> (secret) and <strong>public address.</strong></p><p>Will call <strong>Libra-CLI</strong> as following below.</p><blockquote>1. account create</blockquote><blockquote>2. account mint 0 100</blockquote><blockquote>3. query balance 0</blockquote><blockquote>4. account write (to get your <strong>mnemonic phrase)</strong></blockquote><pre>curl --location --request POST &quot;https://libraservice3.kulap.io/createWallet&quot; \<br>  --header &quot;Content-Type: application/json&quot; \<br>  --data &quot;{}&quot;</pre><h3>2. Transfer</h3><p>[<strong>POST</strong>] https://libraservice3.kulap.io/transfer</p><p><strong>Request:</strong></p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/77bc2f425f951ca889aca6a117f1737e/href">https://medium.com/media/77bc2f425f951ca889aca6a117f1737e/href</a></iframe><p><strong>Return:</strong></p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/dd72decc37f9ee7657162baa0cd4c47f/href">https://medium.com/media/dd72decc37f9ee7657162baa0cd4c47f/href</a></iframe><p>Will call <strong>Libra-CLI</strong> as following below.</p><blockquote>1. account recover</blockquote><blockquote>2. transferb 0 31c70925…14144b 11 (suffix ‘b’ is for waiting transaction to be committed to the blockchain)</blockquote><pre>curl --location --request POST &quot;https://libraservice3.kulap.io/transfer&quot; \<br>  --header &quot;Content-Type: application/json&quot; \<br>  --data &quot;{<br>	\&quot;fromAddress\&quot;: \&quot;91f63f777d8fc5294a4a19a4631a1af4a7e3ae4829cf6b021275773b25782dc7\&quot;,<br>	\&quot;mnemonic\&quot;: \&quot;burger trust skirt hotel duck recipe vivid token south hero illness memory entry way property caution auto cram quality aisle choose erosion crane army;1\&quot;,<br>	\&quot;toAddress\&quot;: \&quot;31c7092554bb804a4e25bd24399859428404c28cbc3b44dea5dc2a9f2314144b\&quot;,<br>	\&quot;amount\&quot;: \&quot;11\&quot;<br>}&quot;</pre><h3>3. Get balance</h3><p>[<strong>POST</strong>] <a href="https://libraservice2.kulap.io/getBalance">https://libraservice3.kulap.io/getBalance</a></p><p><strong>Request:</strong></p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/b7b4be98c475968f810440db3282adfb/href">https://medium.com/media/b7b4be98c475968f810440db3282adfb/href</a></iframe><p><strong>Return:</strong></p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/0f1532d8143ee9c662d1fe738ca2f2e0/href">https://medium.com/media/0f1532d8143ee9c662d1fe738ca2f2e0/href</a></iframe><p>Will call <strong>Libra-CLI</strong> as following below.</p><blockquote>1. query balance 08c7bdf6…0e18c3</blockquote><pre>curl --location --request POST &quot;https://libraservice3.kulap.io/getBalance&quot; \<br>  --header &quot;Content-Type: application/json&quot; \<br>  --data &quot;{<br>	\&quot;address\&quot;: \&quot;91f63f777d8fc5294a4a19a4631a1af4a7e3ae4829cf6b021275773b25782dc7\&quot;<br>}&quot;</pre><h3>Postman</h3><p><a href="https://documenter.getpostman.com/view/1671913/S1a32SZ5?version=latest">https://documenter.getpostman.com/view/1671913/S1a32SZ5?version=latest</a></p><h3>Libra Wallet Service Architect</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bpTSkmetebvE-icm_1xuVg.png" /><figcaption>Libra Service API (stateless)</figcaption></figure><p>To build that APIs we need shell interactive that can send requests to <strong>Libra-cli </strong>so we use <strong>Node.js</strong> with <strong>child_process </strong>and<strong> rauschma/stringio</strong> libs to run a <strong>Libra-cli container</strong> every time when the user makes a request (stateless).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6b5r8w47RWPA3lOJIU2mIg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7WhDK_IWoBse2fMmnDellA.png" /><figcaption>Libra shell interactive example 1</figcaption></figure><p>For example, <strong>createAccount</strong>() function will spawn a process of <strong>libra-cli container</strong> and pipe writableSteam and readableSteam to <strong>createAccountWriteToWritable</strong> and <strong>createAccountReadable </strong>accordingly to simulate shell command inout / output<strong>.</strong></p><p>Inside “<strong>createAccountWriteToWritable”, </strong>will call each <strong>libra-cli</strong> commands step by step and use sleep() between each step to make sure that command from previous step has done.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JDRr3lY5RtolykQusKAEoQ.png" /><figcaption>Libra shell interactive example 2</figcaption></figure><p>Finally <strong>createAccountReadable</strong> we use to parse command output, record it to states, then return output to API caller (output return in <strong>createAccount() </strong>scope<strong>)</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4PhwabupVbLtg2oAcrlkqw.png" /><figcaption>Libra shell interactive example 3</figcaption></figure><p>You can see all complete code here <a href="https://github.com/kulapio/libra-service">https://github.com/kulapio/libra-service</a>.</p><h3>The Frontend project</h3><p>We use <strong>Vue.js</strong> and <strong>Axios</strong> for API calling so nothing fancy here if you interesting please have a look at <a href="https://github.com/kulapio/libra-wallet-poc">https://github.com/kulapio/libra-wallet-poc</a>.</p><blockquote><strong>Mnemonic phrase</strong> is saved on local storage, so you can just open another browser to have two wallets.</blockquote><h3>Conclusion</h3><p>This POC Libra wallet focusses on users to show how it works by allowing them to play it on their smartphone, laptop or desktop. This’s not safe wallet so please don’t use this technique to your production wallet because sending <strong>mnemonic phrase</strong> around is not secure at all.</p><p><strong>To building a production-grade</strong> wallet we should generate <strong>mnemonic phrase </strong>on the client and never sent it to anyone when the user needs to make a transaction wallet itself need to implement private key singing mechanism and use signed transaction to board cast to the network. Might implementing <strong>mnemonic phrase encryption</strong> with password as well.</p><h3>Thank you</h3><p>Thank you very much for your time reading. If you like this article feel free to share this article with your friends or someone who might be interested ^_^.</p><p>Thanks to <a href="https://bitcoin-addict.com/2019/06/21/world-first-libra-wallet-by-kulap/?fbclid=IwAR0qeWr8tAsG2N2gJzMYM5tskGmtF8cxutVJlY_ivW7Kb9VYYga8NDU6HFs">Bitcoin-Addict Thailand</a> for mentioning this Wallet as The first Libra Wallet in the world ^^.</p><p>Any questions please feel free to comments.</p><h3>Feedback</h3><p>After we launched our application until now (23 June) We have active users that create a wallet in our app &gt; 1,000+ wallets. With 5,000+ transactions.</p><h3>Welcome to contributing</h3><h3>Github</h3><p>API Service: <a href="https://github.com/kulapio/libra-service">https://github.com/kulapio/libra-service</a></p><p>Frontend: <a href="https://github.com/kulapio/libra-wallet-poc">https://github.com/kulapio/libra-wallet-poc</a></p><h4>Ref</h4><p><a href="https://developers.libra.org/docs/my-first-transaction">https://developers.libra.org/docs/my-first-transaction</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3cb578c0bd52" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kulapofficial/the-first-libra-wallet-poc-building-your-own-wallet-and-apis-3cb578c0bd52">The First Libra Wallet  POC— Building your own Wallet and APIs</a> was originally published in <a href="https://medium.com/kulapofficial">KULAPofficial</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Libra มาลองเล่นสกุลเงินดิจิตอลใหม่ โอนเงินทั่วโลกภายในวินาที ค่าธรรมเนียมต่ำ โดย facebook]]></title>
            <link>https://medium.com/kulapofficial/libra-%E0%B8%A1%E0%B8%B2%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%99%E0%B8%AA%E0%B8%81%E0%B8%B8%E0%B8%A5%E0%B9%80%E0%B8%87%E0%B8%B4%E0%B8%99%E0%B8%94%E0%B8%B4%E0%B8%88%E0%B8%B4%E0%B8%95%E0%B8%AD%E0%B8%A5%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88-%E0%B9%82%E0%B8%AD%E0%B8%99%E0%B9%80%E0%B8%87%E0%B8%B4%E0%B8%99%E0%B8%97%E0%B8%B1%E0%B9%88%E0%B8%A7%E0%B9%82%E0%B8%A5%E0%B8%81%E0%B8%A0%E0%B8%B2%E0%B8%A2%E0%B9%83%E0%B8%99%E0%B8%A7%E0%B8%B4%E0%B8%99%E0%B8%B2%E0%B8%97%E0%B8%B5-%E0%B8%84%E0%B9%88%E0%B8%B2%E0%B8%98%E0%B8%A3%E0%B8%A3%E0%B8%A1%E0%B9%80%E0%B8%99%E0%B8%B5%E0%B8%A2%E0%B8%A1%E0%B8%95%E0%B9%88%E0%B8%B3-%E0%B9%82%E0%B8%94%E0%B8%A2-facebook-8517d267717b?source=rss-3877c77a5c4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/8517d267717b</guid>
            <category><![CDATA[language-moves]]></category>
            <category><![CDATA[facebook-coin]]></category>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[libra-blockchain]]></category>
            <category><![CDATA[blockchain]]></category>
            <dc:creator><![CDATA[Nattapon Nimakul]]></dc:creator>
            <pubDate>Wed, 19 Jun 2019 02:23:19 GMT</pubDate>
            <atom:updated>2019-06-19T05:04:36.028Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*MZ6hxodBOqUVM0lZ2ONj7A.png" /><figcaption>เหรียญดิจิตอลโดย facebook ทำงานบน Blockchain</figcaption></figure><p><a href="https://libra.org/">Libra</a> เป็นสกุลเงินดิจิตอลแบบ Open source ที่ให้คนทั้งโลกใช้รับส่งเงินกันได้อิสระ และสามารถใช้ชำระค่าสินค้า และบริการได้ ใช้ Blockchain เป็นเทคโนโลยีเบื้องหลังในการจัดการ ตั้งแต่การสร้างบัญชี ฝากเงิน โอนเงิน ชำระเงิน และ Business logic (ใช่แล้วครับ มันคือธนาคารโดย facebook)</p><p>ตัวเหรียญจะถูกค้ำด้วยสกุลเงินต่าง ๆ ทั่วโลก ในการผลิต เช่น ผมส่งเงิน $100 เข้าไปยัง Libra Association ผมก็จะได้เหรียญ Libra กลับมาในมูลค่าเท่ากัน ในทางกลับกันหากผมส่งเหรียญ Libra กลับเข้า Libra Association (หน่วยงานที่รับแลก) ก็จะได้ $100 กลับคืนมา ทั้งนี้เหรียญ Libra จะมี rate ค่าเงินเป็นของตัวเอง (ใครสนใจอ่านต่อใน white paper ด้านล่างได้)</p><h3>เตรียมเครื่องให้พร้อม</h3><ul><li>ใช้งานได้บน Linux (Red Hat or Debian-based) หรือ macOS system เท่านั้น</li><li>หากเป็น Mac ให้ลง <a href="https://brew.sh/">Homebrew</a> ให้เรียบร้อย</li><li>Windows ไม่เขียนไว้ว่ารองรับ (T_T) ใครใช้ Windows ก็อ่านบทความนี้ไปพลาง ๆ ก่อน</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qMdmDm918Bx6veec2wm8Cg.png" /></figure><h3>มาลองเล่น Libra CLI กัน</h3><h4>1. เริ่มด้วยดาวน์โหลดโปรเจคจาก Github</h4><pre>git clone https://github.com/libra/libra.git</pre><h4>2. ติดตั้ง Libra Core</h4><pre>cd libra <br>./scripts/dev_setup.sh</pre><p>การติดตั้ง Libra Core จะดาวน์โหลดและติดตั้ง software ที่เราต้องใช้ เช่น rustup (ตัวติดตั้งภาษา Rust) protoc (protocol buffers) และก็ Go lang</p><p>ใครติดขั้นตอนนี้ ให้ลองดูที่ <a href="https://developers.libra.org/docs/my-first-transaction#setup">Troubleshooting</a></p><h4>3. ติดตั้ง Libra CLI และเชื่อมต่อสู่ Libra Testnet</h4><pre>./scripts/cli/start_cli_testnet.sh</pre><blockquote>ขั้นตอนนี้ค่อนข้างนาน แนะนำให้ไปอาบน้ำ กินข้าวรอได้เลย ฮ่า ๆ</blockquote><p>ตัวคำสั่งนี้จะ build และ run ตัว cargo และเชื่อมต่อไปยัง Validator node บน Libra Testnet</p><p>หากสำเร็จจะขึ้นแบบนี้</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yv-rPYQjbfadduliTVBhEw.png" /><figcaption>Libra Blockchain first time setup</figcaption></figure><p>เย้ ๆๆๆ เราเชื่อมต่อกับ Blockchain ได้แล้ว ที่นี้ก็มาต่อด้วยการสร้าง Account และรับเหรียญ Libra ฟรีเป็นครั้งแรก (อันนี้ Testnet นะ ท่องไว้ ๆ)</p><p>ใครติดขั้นตอนนี้ ให้ดูที่ <a href="https://developers.libra.org/docs/my-first-transaction#client-build-and-run">Troubleshooting</a>.</p><h4>4. สร้าง Account</h4><pre>libra% account create</pre><pre>&gt;&gt; Creating/retrieving next account from wallet<br>Created/retrieved account #0 address 0fd8527664496198346580b316ef68b9eb636f8f5a3c25322008e0a4e10c0326</pre><ul><li>การสร้าง Account จะถือเป็นการสร้าง Key-pair บนเครื่องเรา ยังไม่บันทึกลงบน Blockchain</li></ul><h4>5. เสกเหรียญ</h4><p>เนื่องด้วยเป็น Testnet เราเลยสร้างเหรียญเองได้ ด้วยคำสั่ง mint</p><pre>libra% account mint 0 99</pre><pre>&gt;&gt; Minting coins<br>Mint request submitted</pre><ul><li>0 หมายถึง Account #0 ซึ่งตรงนี้จะใส่ full address จากด้านบนก็ได้</li></ul><h4>6. เช็คยอดเงิน</h4><pre>libra% query balance 0</pre><pre>Balance is: 99</pre><h4>7. สร้าง Account ที่ 2</h4><pre>libra% account create</pre><pre>&gt;&gt; Creating/retrieving next account from wallet</pre><pre>Created/retrieved account #1 address 6f0643a3a16ca18215bc8146d3d28c2f86101a4573181d175444e1b5ffdf881d</pre><h4>8. โอนเงินระหว่าง Accounts</h4><pre>libra% transfer 0 1 10</pre><pre>&gt;&gt; Transferring</pre><pre>Transaction submitted to validator</pre><pre>To query for transaction status, run: query txn_acc_seq 0 0 &lt;fetch_events=true|false&gt;</pre><blockquote>สั่งโอน account #0 -&gt; account #1 จำนวน 10 เหรียญ เช่นกัน ตรงนี้จะแทน 0 1 ด้วย address แบบเต็มก็ได้</blockquote><h4>9. เช็คยอดใน Account ที่ 2</h4><pre>libra% query balance 1</pre><pre>Balance is: 10</pre><h4>10. ดู Transaction ที่โอนไปแล้ว</h4><pre>libra% query txn_acc_seq 0 0 true</pre><blockquote>0 แรกคือ account #0, 0 ที่สองคือ transaction sequence เช่นถ้าทำธุรกรรมครั้งถัดไป ค่านี้จะเป็น 1 2 3 4 ไปเรือยๆ</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uByDVVuzJx9EaMCridSvTw.png" /><figcaption>Libra Blockchain Transaction Result</figcaption></figure><p>ก็เป็นอันจบเท่านี้ กับการเล่น Libra CLI จากที่เห็นการใช้งานค่อนข้างง่าย หากใครต้องการเล่นอะไรเพิ่มเติม ก็พิพม์ help ลงไป หรืออ่านต่อใน <a href="https://libra.org/en-US/open-source-developers/">Libra Developer</a></p><h3><strong>Programmable money</strong></h3><p>สิ่งที่ไม่พูดถึงไม่ได้คือ ตัว Libra ถือเป็น <strong>Programmable money</strong> ประเภทหนึ่ง กล่าวคือ เราสามารถเขียนโปรแกรมควบคุมการไหลของเงินได้ เช่น ทำสัญญาเงินกู้ ระบบอนุพันธ์ หรือระบบ Exchange โดยเราจะเขียนด้วย <strong>Smart contract</strong> (ภาษา <strong>move</strong>) และรันบน Blockchain โดยตรง</p><h3><strong>ภาษา Move</strong></h3><p>เป็นภาษาที่ถูกออกแบบมาให้รันบน Libra โดยเฉพาะ โดยตัว bytecode จะ deploy ลง Libra Blockchain และรันโดย <strong>Move VM</strong> เพื่อทำ Business logic ตามที่เราต้องการ เช่น การสร้างสกุลเงิน (<strong>resource type</strong>) ที่เราสามารถกำหนดเงื่อนไขการผลิต และทำลาย ได้ตามต้องการ ทั้งหมดควบคุมด้วยภาษา Move โดยเหรียญ Libra เองก็สร้างด้วยวิธีนี้</p><blockquote>ภาษา Move เทียบเท่า Solidity และ Move VM ก็เทียบเท่า EVM บน Ethereum</blockquote><p>ลองดูตัวอย่างกันสักหน่อย</p><h4>1. ตัวอย่าง Peer-to-Peer Payment</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OKL9TkLW2fe5N6JfHxeelw.png" /><figcaption>Libra Blockchain Peer-to-Peer Payment Transaction Script</figcaption></figure><h4>2. ตัวอย่าง Deposit</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*N5VyXjwuATdvuOS4KMJEQA.png" /><figcaption>Libra Blockchain Deposit</figcaption></figure><h4>3. ตัวอย่าง Withdraw</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*b--nsB0-gz5iCwKawLZiRw.png" /><figcaption>Libra Blockchain Withdraw</figcaption></figure><h3>ปิดท้าย</h3><p>เราจะเห็นได้ว่า Libra ใช้งานค่อนข้างง่าย แถมมีภาษา <strong>Move</strong> รองรับการควบคุมเงินเพื่อตอบโจทย์ <strong>Fintech</strong> สำหรับองค์กรต่าง ๆ หรือบุคคลทั่วไป ที่ต้องการความง่ายในการรับส่งเงิน สำหรับชาว Dev ก็ขอให้จับตาดูตัวนี้ไว้ให้ดี ตามข่าวคาดว่าจะเปิดตัวในปี 2020 ถ้าใครจับกระแสดี ๆ เขียนโปรแกรมรองรับ อาจรวยได้นะครับ ฮ่า ๆ</p><p>หากใครชอบบทความ ฝากกดติดตาม <a href="https://www.facebook.com/KULAP.io/">Kulap Official</a> กันได้นะครับ ทีมงาน Kulap เราเป็นทีมที่สนใจศึกษาด้าน Blockchain โดยเฉพาะ และกำลังทำ <strong>Decentralized Exchange</strong> (Dex) กันอยู่ครับ</p><p>Ref1: Libra White Paper <a href="https://developers.libra.org/docs/assets/papers/the-libra-blockchain.pdf?fbclid=IwAR0mj3f4ZmodUOP5GZzRXFgccyGrGIzCWpFopcYZDgCXOkYBTiCTR04wTLw">https://developers.libra.org/docs/assets/papers/the-libra-blockchain.pdf?fbclid=IwAR0mj3f4ZmodUOP5GZzRXFgccyGrGIzCWpFopcYZDgCXOkYBTiCTR04wTLw</a></p><p>Ref2: Move White Paper <a href="https://developers.libra.org/docs/assets/papers/libra-move-a-language-with-programmable-resources.pdf">https://developers.libra.org/docs/assets/papers/libra-move-a-language-with-programmable-resources.pdf</a></p><p>Ref3: My First Transaction <a href="https://developers.libra.org/docs/my-first-transaction">https://developers.libra.org/docs/my-first-transaction</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8517d267717b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kulapofficial/libra-%E0%B8%A1%E0%B8%B2%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%99%E0%B8%AA%E0%B8%81%E0%B8%B8%E0%B8%A5%E0%B9%80%E0%B8%87%E0%B8%B4%E0%B8%99%E0%B8%94%E0%B8%B4%E0%B8%88%E0%B8%B4%E0%B8%95%E0%B8%AD%E0%B8%A5%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88-%E0%B9%82%E0%B8%AD%E0%B8%99%E0%B9%80%E0%B8%87%E0%B8%B4%E0%B8%99%E0%B8%97%E0%B8%B1%E0%B9%88%E0%B8%A7%E0%B9%82%E0%B8%A5%E0%B8%81%E0%B8%A0%E0%B8%B2%E0%B8%A2%E0%B9%83%E0%B8%99%E0%B8%A7%E0%B8%B4%E0%B8%99%E0%B8%B2%E0%B8%97%E0%B8%B5-%E0%B8%84%E0%B9%88%E0%B8%B2%E0%B8%98%E0%B8%A3%E0%B8%A3%E0%B8%A1%E0%B9%80%E0%B8%99%E0%B8%B5%E0%B8%A2%E0%B8%A1%E0%B8%95%E0%B9%88%E0%B8%B3-%E0%B9%82%E0%B8%94%E0%B8%A2-facebook-8517d267717b">Libra มาลองเล่นสกุลเงินดิจิตอลใหม่ โอนเงินทั่วโลกภายในวินาที ค่าธรรมเนียมต่ำ โดย facebook</a> was originally published in <a href="https://medium.com/kulapofficial">KULAPofficial</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[โปรเจคระดมทุน Katinrun Fundraising Platform เพื่อสังคมที่ดีขึ้น]]></title>
            <link>https://medium.com/kulapofficial/%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%80%E0%B8%88%E0%B8%84%E0%B8%A3%E0%B8%B0%E0%B8%94%E0%B8%A1%E0%B8%97%E0%B8%B8%E0%B8%99-katinrun-fundraising-platform-%E0%B9%80%E0%B8%9E%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%AA%E0%B8%B1%E0%B8%87%E0%B8%84%E0%B8%A1%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%94%E0%B8%B5%E0%B8%82%E0%B8%B6%E0%B9%89%E0%B8%99-cb0521b4da4e?source=rss-3877c77a5c4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/cb0521b4da4e</guid>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[makerdao]]></category>
            <category><![CDATA[katinrun]]></category>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[dai]]></category>
            <dc:creator><![CDATA[Nattapon Nimakul]]></dc:creator>
            <pubDate>Mon, 27 May 2019 03:56:50 GMT</pubDate>
            <atom:updated>2019-05-27T06:46:51.677Z</atom:updated>
            <content:encoded><![CDATA[<p><a href="https://www.facebook.com/hashtag/surge">SURGE</a> Bangkok คืองาน blockchain hackathon จัดขึ้นวันที่ 24–26 พฤษภาคม 2019</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qYn-8bwRqZWgrp-t5IxQzA.jpeg" /><figcaption>ถ่ายรูปรวมตอนท้ายงาน</figcaption></figure><p>อาทิตย์นี้ทีม Kulap เราได้มีโอกาสเข้าร่วมงาน #SurgeBangkok เป็นงาน Hackathon จัดขึ้นโดย Unicef ในธีมงาน Financial Inclusion ซึ่งมุ่งหวังให้ผู้เข้าร่วมได้คิดไอเดียในการช่วยเหลือสังคม ด้วยการนำเทคโนโลยี Blockchain มาใช้ให้เกิดประโยชน์ในงานครั้งนี้</p><p>รูปแบบงานจะเป็นวันศุกร์จัด Workshop ที่สอนการใช้ Blockchain ในรูปแบบต่าง ๆ และวันเสาร์กับวันอาทิตย์เป็นเวลาให้แต่ละทีมมาแข่ง Hackahton กันโดยทีมเรามีด้วยกันทั้งหมด 5 คน ได้แก่ <a href="https://medium.com/u/3877c77a5c4f">Nattapon Nimakul</a>, <a href="https://medium.com/u/a1988ee71b72">Phuwanai Thummavet</a>, <a href="https://medium.com/u/6990e55e0f25">Pongsatorn Nitithammawoot</a>, <a href="https://medium.com/u/6f94e1799568">Sarun Saengsomboon</a> และ <a href="https://medium.com/u/e5590dde9540">TonHor</a></p><h3>ก่อนอื่นขอเล่าถึงบรรยากาศงานกันสักหน่อยครับ</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nkrhhq2FXfsD7z3e78CDyQ.jpeg" /><figcaption>รายชื่อ Sponsor และผู้ร่วมจัดการ</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*v6JoW5sqZlWfni1lzlP3lg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DtYDZpvUo0AxH_zsI22NVg.jpeg" /></figure><p>Workshop ของ <strong>OmiseGO</strong> เล่าถึง Plasma ที่พึ่งขึ้น Testnet ทั้งสองตัว Ari (อารีย์) และ Samrong (สำโรง) ซึ่งในเวอร์ชั่น Samrong มีการเพิ่มส่วน Meta-data เข้าไปตอนทำธุรกรรมช่วยให้ DApps สามารถใส่ข้อมูลลงไปในธุรกรรมได้ และ EIP-712 ที่เปิดให้ Wallet เซ็นต์ชื่อธุรกรรมได้</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ihs7YVeRPoXy8Y6Pl_FzPQ.jpeg" /></figure><p>ในส่วน Workshop ของ <strong>MakerDao</strong> ที่ทำเหรียญ Dai รอบนี้มาสอน Dai.js เพื่อใช้ในการสร้างเหรียญ Dai โดยใช้ Eth มาค้ำมูลค่าไว้ ตัว Dai.js จะส่งคำสั่งตรงเข้า Smart Contract ซึ่งเป็นส่วนที่ใช้ในโปรเจคของทีม Kulap เราด้วยในงานนี้</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/720/1*uhOmEbgHFOGrKyf7qRx7eQ.jpeg" /></figure><p>ในส่วน Workshop ของ <strong>Status </strong>ได้แจก <a href="https://keycard.status.im/">Keycard</a> ที่ใช้เก็บเหรียญคริปโต และจัดการ Private key ได้ในตัว ร่วมถึงรองรับ NFC ในการสั่งงาน</p><h3>โอเค มาพูดถึงตัวระบบ Katinrun Fundraising Platform กัน</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LHEmGOnJyHWeW5K14hbFRA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Gl1W59Ujas8LRxbroF2Uyg.png" /></figure><ul><li>ตัวระบบเข้ามาหน้าแรกก็จะเจอ รายการรับบริจาคต่างๆ ที่ Active อยู่ รอให้ผู้ใจดีมาบริจาค</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9e6m7CPOo-lzdcfLRmYUrg.png" /></figure><ul><li>หากเราสนใจโครงการไหนเช่น โครงการก้าวคนละก้าวของพี่ตูนที่โด่งดังไปทั่วโลก หากเราอยู่อีกมุมโลกและอยากบริจาคด้วย ก็สามารถกด <strong>Donate now</strong> ได้ทันที</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ik1sW_6_B36bnxtic-CscA.png" /></figure><ul><li>ผู้บริจาคสามารถเลือกเหรียญที่ระบบรองรับได้ ซึ่งรองรับทั้งหมด 6 สกุลด้วยกัน</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*w904rXpXNdYNxdy_Pu4Pgg.png" /></figure><ul><li>หลังจากเลือกเหรียญที่เราต้องการบริจาค และระบุจำนวนเงินแล้ว ระบบจะคำนวณเป็นหน่วย Dai (เทียบเท่า USD) พร้อมแปลงให้อัตโนมัติผ่านระบบ DEX (Decentralized Exchange)</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/734/1*uv6R9VORV1iJ9q6uXGsuIA.png" /></figure><ul><li>สุดท้ายผู้บริจาคทำการยืนยันที่ตัว Crypto wallet ของตัวเอง เช่น Metamask, Coinbase wallet หรือ Trust wallet เพื่อบริจาคเข้าสู่โครงการนั้น ๆ โดยตรงผ่านระบบ Smart Contract ทำให้มั่นใจได้ว่าไม่มีใครเข้าถึงเงินบริจาค นอกจากผู้รับที่ระบุไว้ในโครงการเท่านั้น</li></ul><h3>รูปแบบการทำงานในเชิงเทคนิค</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DiuD8nu2Zpjja2YlmACRow.png" /></figure><h3>ตัวระบบจะแบ่งส่วนการทำงานหลัก ๆ เป็นทั้งหมด 3 ส่วนด้วยกัน</h3><ol><li><strong>Frontend</strong> ส่วนนี้เขียนด้วย Vue.js ทำหน้าที่แสดงรายการโครงการที่รอรับการบริจาค และมีส่วน web3.js ที่ใช้ติดต่อ Smart contract เพื่อทำการบริจาคโดยตรงจาก Crypto wallet</li><li><strong>Dex</strong> ระบบตัวนี้เป็นแก่นกลางสำคัญที่ทำให้ Platform นี้ทรงพลังมากขึ้น เนื่องด้วยโครงการต่าง ๆ ใน Platform นี้มีเป้าหมายการระดมทุนเป็นหน่วยดอลล่าร์เหรียญ Dai (=$1) แต่เพื่ออำนวยความสะดวกให้กับผู้สนับสนุนโครงการ เราได้รองรับ 6 สกุลเหรียญหลักบน Ethereum ประกอบไปด้วย Dai, Omg, Knc, Snt, Mesg และ Mkr โดยทุกเหรียญจะถูกส่งไปยัง Dex (Decentralized Exchange) เพื่อทำการแปลงเป็น Dai ณ ราคาปัจจุบัน แล้วจึงส่งไปบริจาคยังโครงการ โดยทั้งหมดนี้ทำจบภายใน 1 ธุรกรรมบน Blockchain ครับ (เรียกว่าเทคนิค Atomic)</li><li><strong>Smart Contract</strong> ตัวนี้เป็นหัวใจของระบบ ทำหน้าที่จัดการ Logic ต่าง ๆ ในการทำโครงการรับบริจาค เช่น สร้างโครงการใหม่ กำหนดเป้าหมายโครงการ (จำนวนเหรียญ Dai ที่ต้องการ) บันทึกการบริจาคของทุกคน ส่งเงินให้ผู้รับบริจาคเมื่อโครงการระดมทุนสำเร็จ และทำการคืนเงินทันทีให้กับทุกคนเมื่อการบริจาคไม่ถึงเป้าหมาย ตรงนี้เขียนด้วย Smart Contract ในภาษา Solidity ทั้งหมดครับ</li></ol><h3>รางวัลที่เราได้รับ</h3><p>ในงานนี้เราได้ 2 รางวัลด้วยกัน คือ</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LYETf8vdhq0PueoD2RgDKQ.png" /></figure><ol><li>รางวัลจากโจทย์การนำระบบ MakerDAO ไปใช้ในประเทศเศรษฐกิจเกิดใหม่ ที่ผู้คนจำนวนมากยังเข้าถึงระบบทางการเงินได้ยาก ซึ่งในตัวโปรเจคเราใช้เหรียญ Dai (สร้างโดยระบบ MakerDAO) เป็นสื่อกลางสำคัญในการระดมทุนให้โครงการ</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sq1ih-tSucE9Lfby8ZsbeQ.png" /></figure><p>2. รางวัลจากการนำระบบ Embark ซึ่งเป็นระบบจัดการตัว Smart Contract ที่ช่วยตั้งแต่ขึ้นโปรเจค ทำ automated testing ร่วมไปถึงมีระบบ Dashboard ที่ช่วย Debug ตัว Smart Contract ได้โดยตรงจากเว็บเลย ส่วนตัวผมค่อนข้างชอบตัว Embark นี้หลังจากได้ลองใช้ในงานนี้เป็นครั้งแรก ให้ความรู้สึกเหมือนมี Truffle + Remix ในตัวเดียวกัน</p><p>ขอบคุณผู้จัดงาน และทีมทุกคนครับ</p><p><strong>Github</strong>: <a href="https://github.com/kulapio/surge-hack-fundraising-platform">https://github.com/kulapio/surge-hack-fundraising-platform</a></p><p><strong>Demo</strong>: <a href="https://katinrunfoundation.github.io/">https://katinrunfoundation.github.io/</a></p><p>ลาไปกับรูปบรรยากาศของงาน 📷</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HfiMuxQ-X3YFZVnzuAIZnA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lV0LmHvbtf3m0SoFZzWeXg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LF8U46hM-Pfygg75Nz9UrQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Sz0BxxH_vnW-gMa7A8oSsw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4rx4o9mqHknro5Cs6EjrMA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HHx_JYXYQKYtQdD_2wD_Hg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hPjefT2OfOq-cVI9timKzw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*R5UHJ6mpEwJ4lf7gP4RMxQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7_HxJFpFr1AKdE3DiG6LNQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*S_BCBwhqOrtnsJ-58W_FgA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6n83nTST4KeMFaYE9vCu5Q.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jCeFggOf72sz6x2yjnxaBQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eyTHr0rTPfmr85qo8jK1Hg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U11A0bI8TNejyWb8M4UmXQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kDE6_Gpw2S6Ew0f0HKNY1w.jpeg" /></figure><p>ภาพทั้งหมดสามารถเข้าไปดูได้ที่<a href="https://www.facebook.com/pg/KULAP.io/photos/?tab=album&amp;album_id=2217793251612997">อัลบั้ม</a>เลยจ้า</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cb0521b4da4e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kulapofficial/%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%80%E0%B8%88%E0%B8%84%E0%B8%A3%E0%B8%B0%E0%B8%94%E0%B8%A1%E0%B8%97%E0%B8%B8%E0%B8%99-katinrun-fundraising-platform-%E0%B9%80%E0%B8%9E%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%AA%E0%B8%B1%E0%B8%87%E0%B8%84%E0%B8%A1%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%94%E0%B8%B5%E0%B8%82%E0%B8%B6%E0%B9%89%E0%B8%99-cb0521b4da4e">โปรเจคระดมทุน Katinrun Fundraising Platform เพื่อสังคมที่ดีขึ้น</a> was originally published in <a href="https://medium.com/kulapofficial">KULAPofficial</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[RTHB — Thai Baht Stable Coin in the 1st RSK Hackathon in Bangkok]]></title>
            <link>https://medium.com/kulapofficial/rthb-thai-baht-stable-coin-in-the-1st-rsk-hackathon-in-bangkok-3598dd62be8a?source=rss-3877c77a5c4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/3598dd62be8a</guid>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[english]]></category>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[stable-coin]]></category>
            <category><![CDATA[rsk]]></category>
            <dc:creator><![CDATA[Nattapon Nimakul]]></dc:creator>
            <pubDate>Thu, 13 Dec 2018 04:29:17 GMT</pubDate>
            <atom:updated>2018-12-13T04:29:17.182Z</atom:updated>
            <content:encoded><![CDATA[<h3>RTHB — Thai Baht Stable Coin in the 1st RSK Hackathon in Bangkok</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/758/1*13IHzcpCpclf2_k0_5iZBw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4g-otmL78IfVAO7HFYCbFw.jpeg" /></figure><p>Our team at <a href="https://www.kulap.io/">Kulap</a> won the first runner-up in <a href="https://rsk-thailand.devpost.com/">the 1st RSK Hackathon in Bangkok</a> which was held at the Knowledge Exchange Center. Most of the teams participated in the event came from abroad countries. There were only two teams from Thailand, one is ours.</p><h3>Understanding Stable Coin</h3><p>USDT is one of the well-known stable coin. The way it works is that they claim that every USDT have the real USD (or related with) backed in their bank account (i.e., fiat money). With the USDT, however, it is hard to prove and verify that the rate ratio is always 1:1.</p><p>Recently, the project called <a href="https://makerdao.com/">MakerDAO</a> has come. They aim to create the pure USD stable coin on a smart contract called <a href="https://etherscan.io/token/0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359">DAI</a> with the so-called Crypto-Asset-Backed mechanism. The project is just 1 year old but gain popularity among decentralized exchanges as the main token.</p><p>The DAI system provides more transparency as everyone can look up at Ethereum Blockchain to see all activities such as issuing, repaying, list of all contracts, collateral ratio and etc.</p><h3>What is RTHB — ThaiBahtCoin?</h3><p>We believe that the crypto-asset-backed stable coin is the future. If we organize it in the right way, it will unlock much more financial services and bring trust to the crypto ecosystem, resulting in the mass adoption.</p><p>Introduce RTHB, is a proof of concept for securely issuing Thai Baht Stable Coin which is backed by Bitcoin (BTC). Anyone can issue RTHB by lock up their BTC. In this case we use RBTC (Native BTC on RSK Blockchain Network) to back RTHB with the ratio 1.5:1.</p><p>We believe that BTC has potential to be the new gold standard, and RTHB that backed by BTC could be a strong stable coin.</p><h3><strong>How RTHB Works?</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/602/1*U8L3KGVZlIsF8LSul_wXDw.png" /></figure><ol><li>Alice sends 1 RBTC at a rate 1,500 THB/BTC to RTHB Smart Contract (calling issue()).</li><li>Alice receives 1,000 RTHB back (at 1.5:1 ratio).</li></ol><p>Now Alice can freely transfer any amount of RTHBs to anyone. This’s the real usage of this protocol.</p><p>3. Alice decides to return 1,000 RTHB to get her own RBTC back (calling claim()).</p><p>4. Fortunately the rate is still the same as when the RBTC was deposited, so the RTHB Smart Contract would return 1 RBTC back to Alice.</p><p>More scenarios are available here: <a href="https://github.com/kulapio/RTHB-ThaiBahtCoin#example-scenarios-of-rthb">https://github.com/kulapio/RTHB-ThaiBahtCoin#example-scenarios-of-rthb</a></p><h3><strong>RTHB Use Case</strong></h3><p>To prove the concept of RTHB adoptions, we developed the IoT-featured device called <a href="https://github.com/kulapio/RTHB-ThaiBahtCoin/tree/master/iot">Candoreum</a> which is a candy machine connected to RSK blockchain network to accept the proposed RTHB.</p><p>That is, users can buy some candy from the machine by simply scanning QR-Code to sending 10 RTHB to Candoreum address and wait for seconds to get their candy.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*izF1PcNHITboAMJrA-wvIA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*menpIO7RS8sw2LQ4azRxIA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QL8j9Od4YH7mU_S0gMcp_Q.jpeg" /></figure><p>There’re many more use cases, for example, buy a cup of coffee at coffee shop, buy movie ticket, loan, and so on.</p><h4><strong>Conclusion</strong></h4><p>RTHB (Thai Baht Stable Coin) is just one use case of smart contracts on the blockchain. There are also many awesome projects out there. We hope this project would inspire you to create some exciting projects to bring the world to the Decentralized era.</p><h4><strong>Team</strong></h4><p>Tot — <a href="https://www.facebook.com/totiz">https://www.facebook.com/totiz</a></p><p>Q — <a href="https://www.facebook.com/Qsinseongyag">https://www.facebook.com/Qsinseongyag</a></p><p>Bright — <a href="https://www.facebook.com/br1gh7n4ry">https://www.facebook.com/br1gh7n4ry</a></p><h4><strong>Open Source</strong></h4><p><a href="https://github.com/kulapio/RTHB-ThaiBahtCoin">kulapio/RTHB-ThaiBahtCoin</a></p><h4><strong>Follow Us</strong></h4><p><a href="https://www.facebook.com/KULAP.io/">https://www.facebook.com/KULAP.io/</a></p><p><a href="https://medium.com/kulapofficial">https://medium.com/kulapofficial</a></p><p><a href="https://www.kulap.io/">KULAP The best rate protocal</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3598dd62be8a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kulapofficial/rthb-thai-baht-stable-coin-in-the-1st-rsk-hackathon-in-bangkok-3598dd62be8a">RTHB — Thai Baht Stable Coin in the 1st RSK Hackathon in Bangkok</a> was originally published in <a href="https://medium.com/kulapofficial">KULAPofficial</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Swift Lazy]]></title>
            <link>https://medium.com/swifty-coffee/swift-lazy-922f9c576c7f?source=rss-3877c77a5c4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/922f9c576c7f</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[swift]]></category>
            <dc:creator><![CDATA[Nattapon Nimakul]]></dc:creator>
            <pubDate>Mon, 23 May 2016 12:18:09 GMT</pubDate>
            <atom:updated>2018-09-12T09:47:50.827Z</atom:updated>
            <content:encoded><![CDATA[<p>updated 12 Sep 2018 for Swift 4.2</p><p>Lazy เป็นอีกหนึ่งตัวช่วยสำคัญในภาษา Swift ที่ทำให้การเขียน App ง่ายขึ้น ลดการใช้หน่วยความจำและทำงานได้เร็วขึ้นอีกด้วย</p><h3>ทำความรู้จัก Lazy ในภาษา Swift กัน</h3><p>Lazy พูดกันง่ายๆ คือการชะลอการทำงาน หรือการคำนวณบางอย่างออกไป ช่วยลดการหน่วงของแอพ (กระตุก) รวมทั้งการจัดการ Code ก็ง่ายขึ้นด้วย</p><p>โดย Lazy ใน Swift แบ่งออกเป็น 2 ส่วนใหญ่ๆ ดังนี้</p><h3>1. Lazy Var</h3><p>ตัวแปรแบบ Lazy จะพบได้บ่อยสุด ทั้งในตัวแปรระดับออปเจค ตัวแปรระดับคลาส ตัวแปรระบบ รวมทั้งยังใช้ในสตรัคได้อีกด้วย</p><h3><strong>lazy var ในคลาส หรือสตรัค</strong></h3><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/ff67f9515eb46ae512af74dd3136e0c5/href">https://medium.com/media/ff67f9515eb46ae512af74dd3136e0c5/href</a></iframe><blockquote>บรรทัด 15: คำนวณหาระยะทางโดยใช้ lazy โดยจะคำนวณในบรรทัด 22 ครั้งเดียว ส่วนบรรทัด 23 จะเรียกค่าที่คำนวณไว้แล้วแทน</blockquote><p>ข้อดีของ Lazy var แบบนี้คือ จะไม่มีคำนวณระยะทางเลยหากไม่มีการเรียกใช้ และหากมีการขอข้อมูลระยะทางหลายครั้ง ก็จะคำนวณแค่ครั้งเดียวเท่านั้น</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/7c3e5318e3d3af9f5672be487a934512/href">https://medium.com/media/7c3e5318e3d3af9f5672be487a934512/href</a></iframe><blockquote><strong>ข้อควรรู้ในการใช้ lazy</strong></blockquote><ul><li>ใช้กับคลาสต้องใส่ <strong>[unowned self] in</strong> ภายใน { … } ทุกครั้งหากมีการเรียกตัวแปรภายใน เพื่อป้องกัน Reference Cycle</li><li>เหมาะที่จะใช้กับคลาสลูกของ UIViewController เพราะจะทำให้ตัวแปรต่างๆ ไม่ถูก Load ขณะ Init ส่งผลให้ ViewDidLoad ถูกเรียกได้เร็วขึ้น</li><li>สามารถเรียกเมธอดต่างๆ ภายใน { … }() ได้</li><li>สำหรับสตรัค ตัวแปรที่สร้างจากสตรัคต้องใช้ var เท่านั้น เช่น var line = Line(…) เพราะว่าค่าใน lazy เริ่มแรกจะไม่มีค่า จะมีก็ต่อเมื่อเรียกครั้งแรก ถือว่าเป็นการ mutating (อัพเดตค่าตัวแปร)</li></ul><h3>static let, varในคลาส สตรัค หรือระดับ App</h3><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/8fea5394a6672d4bc6138c5df9bdda86/href">https://medium.com/media/8fea5394a6672d4bc6138c5df9bdda86/href</a></iframe><blockquote>บรรทัด 2: สร้างตัวแปร Global ภายในคลาส AppController ในกรณีนี้ไม่จำเป็นต้องใส่ lazy ลงไป ทุกตัวแปรที่ประกาศด้วย static จะเป็น lazy อัตโนมัติ</blockquote><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/f4dfd1b47c5c1c387bec2dc1f1aed340/href">https://medium.com/media/f4dfd1b47c5c1c387bec2dc1f1aed340/href</a></iframe><blockquote>บรรทัด 5: คล้ายตัวอย่างก่อนหน้า โดยกรณีจะเป็นการสร้าง Array แบบ lazy</blockquote><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/6250ecdb685644c25cfc67f083fd0809/href">https://medium.com/media/6250ecdb685644c25cfc67f083fd0809/href</a></iframe><blockquote>ประกาศตัวแปรระบบ สังเกตุว่าไม่ต้องระบุ static แล้ว เพราะหากประกาศในสโคปนอกคลาส หรือสตรัค ทุกอย่างจะถือเป็น lazy หมดโดยอัตโนมัติ</blockquote><h3>2. Collection Lazy</h3><p>Lazy แบบที่สองจะมีคนรู้จักและใช้น้อยกว่าแบบแรก ซึ่งหากท่านใดได้อ่านมาถึงตรงนี้ ถือว่าคุณคือผู้โชคดีครับ ^^เพราะจะได้รู้ถึงเคล็ดลับในการเขียน Swift ให้เร็วขึ้น แถมยังลด Ram พีคจนแอพปิดตัวได้อีกด้วย โดยที่ไม่ต้องเพิ่มโค้ดสักบรรทัด</p><p>.lazy สามารถเรียกใช้ได้ทั้ง Array และ Diciontary โดยจะเรียกใช้ร่วมกับ map, flatMap, filter, forEach หรืออื่นๆ</p><p><strong>ตัวอย่าง</strong></p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/abf47dfcf67088ad8df37ee83ebc3c84/href">https://medium.com/media/abf47dfcf67088ad8df37ee83ebc3c84/href</a></iframe><blockquote>บรรทัด 3–5: ถ้าไม่มี .lazy จะทำให้คำนวณเลขยกกำลังทั้ง Array ก่อนค่อยส่งไปแสดงผล<br>บรรทัด 3–5: พอใส่ <strong><em>.lazy</em></strong> โค้ดส่วน pow(x, 2) จะดีเลย์ออกไปคำนวณตอนแสดงผล ทำให้ลดการใช้หน่วยความจำเก็บผลลัพธ์ค่ายกกำลังทั้ง Array ลงไปได้</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/907/1*lqulfSy5mh9ToMEIlRvgFQ.png" /><figcaption>บรรทัด 3–5</figcaption></figure><blockquote>บรรทัด 7–12: เหมือนกับด้านบน ต่างกันที่ใช้ for .. in แทน forEach { .. }<br>บรรทัด 16: ผสมการใช้ map และ filter เพื่อหาเส้นรอบวง &gt; 40<br>* บรรทัด 17: ลองเอา Array (…) ออก แล้วสังเกตผลลัพธ์ดูครับ<br>บรรทัด 20: ตัวอย่างการใช้ maxElement เพื่อหาค่าสูงสุดแบบ lazy</blockquote><p>จากตัวอย่างจะเห็นว่า เราสามรถใช้ lazy ได้ในหลายสถาณการณ์ และไม่ได้เพิ่มบรรทัดของโค้ดเลย เพียงแค่เติม .lazy ลงไป และจะเห็นผลชัดเจนหาก Array หรือ Dictionary เราใหญ่มากๆ ก็ยิ่งลดการพีคของหน่วยความจำจน App ปิดตัวไปได้</p><p>จะมีบางสถาณการณ์ที่ลดการใช้ CPU ลงได้อย่างมาก เช่น</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/c206808901697af553cf3d430eb26ab5/href">https://medium.com/media/c206808901697af553cf3d430eb26ab5/href</a></iframe><blockquote>บรรทัด 5–19: สร้าง Array (count: 50,000) เก็บค่า JSON-Style <br>บรรทัด 24–28: กด hitMap(..) จะทำการหาชื่อ “Cat” แบบไม่ใช่ Lazy ใช้เวลาเฉลี่ย 0.129<br>บรรทัด 32–36: กด hitLazyMap(..) จะทำการหาชื่อ “Cat” แบบ Lazy ใช้เวลาเฉลี่ย 0.000168</blockquote><p>จากข้อมูลทดสอบนี้ ปรากฎว่าแบบ lazy สามารถหาข้อมูลโดยใช้ indexOf(..) เร็วกว่าถึง ~700 เท่าเลยทีเดียว</p><blockquote><strong>Tips</strong><br>ตัวที่ทำให้ช้าคือ .map{ $0[“name”] as! string } เพราะต้องแปลงข้อมูลปริมาณมากก่อนนำไปใช้ ให้ลองนึกถึงในการใช้งานจริง เราอาจต้องแปลงข้อมูลที่รับมาจาก Api ก่อนนำไปใช้ ซึ่ง .lazy ในตัวอย่างนี้ จะช่วยให้ไม่ต้องแปลงทั้งหมดก็หาผลลัพธ์ได้</blockquote><p><strong>วัดการใช้งาน CPU โดยใช้ Time Profile</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/379/1*CFDmn0TLL59tSLCwaf3cXg.png" /></figure><p><strong>วัดการใช้งาน Ram โดยใช้ Allocations (Allocation Density)</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/256/1*A3vRpC-RKE9FyGepJHWdmg.png" /></figure><ul><li>เนื่องจากดาต้าเซตใหญ่ ถ้าเขียนแบบปกติจะเห็นช่วง spike ของหน่วยความจำ ส่วนแบบ lazy ไม่เห็นการพีคของหน่วยความจำเลย</li></ul><h3>สรุป</h3><p>การใช้ lazy ช่วยให้โค้ดเรารันได้เร็วขึ้น และลดการพีคของหน่วยความจำลงได้ หากคนที่ใช้ map, flatMap, forEeah, filter, … เป็นประจำอยู่แล้ว ไม่ต้องปรับโครงสร้างโค้ดใดๆ ก็สามารถใช้ lazy ได้เลย แต่ถ้าใครยังไม่แม่น syntax หรือยัง ใช้ for .. in .. ในการแปลงค่า หรือหาผลลัพธ์ ลองศึกษาแนวทางนี้ดูครับ จะทำให้โค้ดสั้นลง และเร็วขึ้นอีกด้วย</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=922f9c576c7f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/swifty-coffee/swift-lazy-922f9c576c7f">Swift Lazy</a> was originally published in <a href="https://medium.com/swifty-coffee">Swifty Coffee</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>