อีกแค่อาทิตย์เดียว devcon two ที่เป็นงานใหญ่ประจำปีของ Ethereum Foundation ก็จะเริ่มแล้ว เป็นงานที่ Developer และ Researcher จะมาโชว์ความก้าวหน้าล่าสุดกันครับ [agenda]

devcon2

แม้ว่าโครงการใหญ่ๆ จะเก็บรายละเอียดไว้เปิดตัวในงาน แต่ก็มีโปรเจคเล็กๆ เปิดออกมาให้เห็นกันบ้างแล้วในอาทิตย์นี้ โดยอันหนึ่งที่ผมคิดว่าน่าสนใจคือ FlightDelay ซึ่งเป็นบริการ Travel Insurance ที่พัฒนาขึ้นมาเป็น Ethereum Smart Contract

แนวคิดและวิธ๊การใช้งานของเค้าก็ง่ายมากครับ

ถ้าจะลองทำตามตัวอย่างนี้ ต้องมี “เครื่องมือ” ที่จะติดต่อกับ Ethereum blockchain นะครับ ง่ายที่สุดคือใช้ MetaMask ซึ่งเป็น extension ของ Chrome หรือถ้าอยากลองแบบเต็มๆ ก็สามารถใช้ Mist Browser ได้ครับ แต่จะต้อง synchronize blockchain ครั้งแรกก่อน ซึ่งใช้เวลาหลายชั่วโมง

1. ขั้นแรกก็ไปที่ https://fdd.etherisc.com/ (ใน Mist หรือ Chrome+MetaMask)

step1
ในรูปประกอบผมใช้ Mist นะครับ เพราะตอนนี้ไม่มี ether เก็บไว้บน wallet ของ MetaMask

2. เลือก flight ที่ต้องการ

ลองเลือก TG662 บินจากกรุงเทพไปเซี่ยงไฮ้วันเสาร์ที่จะถึงนี้ (สมมุติว่าเราจะบินไปร่วมงาน devcon two กับเค้าด้วย)

step2

3. เลือกเบี้ยประกัน

หลังจากเลือก flight แล้ว ตัว smart contract จะไปดึงข้อมูลสถิติการดีเลย์จาก API ของ flightstats.com และบอกจำนวนเงินสินไหมชดเชยให้เราดูว่าพอใจหรือเปล่า

โดยจะมีเหตุการณ์ 5 อย่างซึ่งจ่ายชดเชยไม่เท่ากัน

  • Flight ล่าช้า 15 – 29 นาที
  • Flight ล่าช้า 30-44 นาที
  • Flight ล่าช้า 45 นาทีขึ้นไป
  • Flight ถูกยกเลิก
  • Flight ถูก divert

โดยจะบอกสถิติในอดีต ว่า Flight ที่เราเลือกมีโอกาสเกิดแต่ละเหตุการณ์มากแค่ไหน และถ้าเกิดขึ้นเราจะได้ค่าชดเชยเท่าไหร่ ซึ่งค่าชดเชยก็ขึ้นอยู่กับเบี้ยประกัน ที่เลือกได้ตั้งแต่ 0.5 ether ถึง 5 ether

step3

ผมเลือกเบี้ยประกัน 1 ether (ราคาวันนี้ประมาณ 400 บาท) เพื่อให้ดูได้ง่ายว่าเงินชดเชยเป็นกี่เท่าครับ จะเห็นว่าเครื่องมีโอกาสดีเลย์ 30-44 นาที เท่ากับ 5% และถ้ามันเกิดขึ้นเราจะได้เงินชดเชย 3.56 ether (ประมาณ 1,400 บาท)

4. Execute smart contract

ขึ้นต่อไปก็คือการ “ทำสัญญา” (execute) ด้วยการส่ง ether จำนวนที่เราต้องการไปที่ FlightDelay smart contract ซึ่งมี contract address อยู่ที่ 0x4D54bE5a62F5d9fcF4b17C7ab6e68822C142ec6B แต่เราไม่ต้องรู้หรอกนะครับ เพราะตัวเว็บจะจัดการให้ ในขั้นตอนนี้จะต้องใส่ password ของ Ethereum wallet ของเรา (ซึ่งต้องทำทุกครั้งที่จะส่ง ether)

step4

5. เรียบร้อย

รอประมาณ 2 นาทีให็ transaction ที่เรา broadcast ออกไปถูก confirm ก็จะเห็นจำนวน ETH ใน wallet ลดลง และ status ของ Policy ของเราขึ้นมาเป็น Applied และ Accepted ในที่สุดครับ

เมื่อถึงเวลาเดินทาง smart contract จะเช็คสถานะของ Flight ว่าออกตรงเวลาหรือช้าแค่ไหน และถ้าเข้าเงื่อนไข 1 ใน 5 ข้อด้านบน ก็จะโอน ether ที่เป็นเงินชดเชยมาให้เราโดยอัตโนมัติครับ

ซึ่งง่ายกว่าการเคลมจากบริษัทประกันมาก!

step5

Smart Contract นี้ทำงานยังไง

การทำสัญญาประกันด้านบนนี้ เราทำกับตัว smart contract โดยตรง ไม่ได้ทำกับบริษัทหรือบุคคลใดๆ ดังนั้นถ้าเราไม่เชื่อใจก็ไม่ควรส่ง ether ไปนะครับ แต่นักพัฒนาส่วนใหญ่ก็เข้าใจเรื่องนี้ จึงมักจะเปิด source code ให้เข้าไปตรวจสอบได้ ก็เป็นโอกาสให้เราเรียนรู้ได้ครับ

Limited Time

ก่อนอื่นเค้าออกตัวไว้ชัดเจน ว่า FlightDelay เป็นแค่ showcase เท่านั้น นะครับ ไม่ได้ตั้งใจจะทำเป็นธุรกิจจริงจัง ดังนั้นเค้าตั้งไว้ว่าให้ทำงานได้จนถึงวันที่ 26 กันยายนนี้เท่านั้น (หลังจบงาน devcon two)

Underwriting – Share the Risk

ไอเดียของ FlightDelay ก็เป็นไอเดียพื้นฐานของการทำประกันนั่นเองครับ คือการแชร์ความเสี่ยง โดยคนจำนวนมากทำประกัน แต่ละคนจ่ายเบี้ยประกันนิดหน่อย ถ้าเกิดเหตุการณ์ไม่ดีขึ้นกับบางคนในนั้น ก็จะได้รับการชดเชยจากเบี้ยประกันที่เอามารวมกัน ทุกคนมีค่าใช้จ่ายนิดหน่อย แต่จะไม่มีใคร suffer มาก

เบี้ยประกันที่ได้จะถูกหัก 3% ให้นักพัฒนาและไว้รองรับ tail risks

เวลาเรา execute contract เบี้ยประกัน (premium) ก็จะถูกหักไว้เป็น reward และ reserve ก่อน

ตอนจะ underwrite กรมธรรม์ใหม่ smart contract จะเช็คข้อมูลที่ผ่านมาของ Flight ที่เราเลือก แล้วนับจำนวนครั้งที่เคยเกิดการดีเลย์หรือยกเลิกเที่ยวบิน (ตัวแปร statistics[i])

(ส่วนต่อไปนี้รายละเอียดเยอะ ผมตัดมาเฉพาะส่วนหลักนะครับ ถ้าสนใจสามารถดูฉบับเต็มได้ที่นี่)

หลังจากนั้นก็จะเอา statistics มาคำนวณเป็นความน่าจะเป็น (ตัวแปร weight)

และกำหนดเงินชดเชย (ตัวแปร payout) จาก premium และ weight (ยิ่ง Flight นี้เคยดีเลย์บ่อย weight ก็จะยิ่งเยอะ และ payout ก็จะยิ่งน้อยลง)

การจ่ายค่าชดเชย

ส่วนนี้ตัว smart contract จะตรวจสอบสถานะของ Flight และดึงเอาระยะเวลาที่ดีเลย์มา

ถ้า delay = 0 ก็ถือว่าจบสัญญาโดยไม่ต้องจ่ายค่าชดเชย

ถ้า delay มากกว่า 0 ก็จะดูว่าเข้ากลุ่มเหตุการณ์ไหน, คำนวณ payout, และทำการจ่ายเงิน

โดยจะมี check ต่างๆ ก่อนจ่าย 2-3 อย่าง เช่น

  • จะจ่ายไม่เกิน maxPayout (ตอนนี้ตั้งไว้ที่ 150 ether)
  • เช็คก่อนว่ามีเงินเหลือพอจ่าย ก่อนจะพยายามจ่าย

Oracle

เวลา smart contract ต้องใช้ข้อมูลของโลกภายนอกเพื่อประกอบการทำงานของตัวเอง แหล่งข้อมูลที่ smart contract เชื่อถือพวกนี้เรียกว่า Oracle (คนละอย่างกับบริษัท IT ยักษ์ใหญ่นะครับ)

Oracle ที่ FlightDelay ใช้ก็คือ API ของ FlightStats โดยในส่วนการติดต่อกับ Oracle นี้เค้าใช้โค้ดของ Oraclize

oraclize

ป้องกัน wrong incentive

ถ้ามีคนใช้งานเยอะๆ อาจมีเหตุการณ์ที่ทำให้เกิด incentive ที่ผิดๆ ได้ เช่นถ้ามีคนจำนวนมากบน Flight เดียวกันทำประกันเครื่อง Delay ไว้ อาจทำให้เกิดแรงจูงใจที่จะช่วยกันทำให้เครื่องดีเลย์เพื่อรับค่าชดเชย ส่วนนี้ของ code มีไว้เพื่อป้องกันเหตุการณ์นี้ ด้วยการกำหนดไม่รับการประกัน “ความเสี่ยงเดียวกัน” มากเกินค่าค่าหนึ่ง ซึ่งความเสี่ยงเดียวกันนี้ก็คือการประกัน Flight เดียวกันนั่นเอง โดยเค้าสร้างตัวแปร riskId ขึ้นมาจาก

  • หมายเลข Flight
  • วันเดือนปีที่ออกเดินทาง
  • Arrival Time

ถ้ามีคนพยายามจะทำประกันเพิ่ม แต่ riskId นั้นมีมูลค่าประกันเกิน maxCumulatedWeightedPremium ตัว smart contract ก็จะไม่ยอมให้ทำ และ return error message “Cluster Risk”

ภาพสนามบินกัลกัตตา โดย Yuvipanda

LEAVE A REPLY