AdminWaw on Nostr: ...
quoting nevent1q…trsjมาเรียนเรื่องนี้กันเถอะเด็กๆ #Siamstr
NIP-13: Proof of Work - ป้องกันสแปมบน Nostr ด้วยการพิสูจน์พลังงาน
nevent1q…pmcw
NIP-13 เป็นข้อกำหนดที่ช่วยเพิ่มระบบ Proof of Work (PoW) เข้ามาใน Nostr เพื่อแก้ปัญหาเรื่องสแปม (โดยเฉพาะปัญหาบ็อท Reply Guy ที่กำลังระบาดอยู่ตอนนี้) จริงๆ มันมีมานานแล้วแต่ไม่ค่อยมีไคลเอนต์ไหนนำมาอิมพลีเม้นสักเท่าไหร่ จนกระทั่ง #Wherostr เอามาพัฒนาอย่างเป็นรูปธรรมนั่นแหละ..
# #PoW คืออะไร?
ลองนึกภาพว่าเราต้องการส่งจดหมายไปรษณีย์ แต่ก่อนส่งเราต้องแก้โจทย์ปริศนาคณิตศาสตร์ซับซ้อนๆ สักข้อเสียก่อน ใครที่แก้ได้ก็แสดงว่ามีความตั้งใจและใช้พลังงานในการส่งจดหมายจริงๆ ไม่ใช่แค่ส่งจดหมายแบบสุ่มๆ
ในโลกม่วงๆ นี้ PoW คือการพิสูจน์ว่าผู้ส่งข้อความได้ใช้พลังงานในการคำนวณ (หรือ "ขุด") ก่อนส่งข้อความนั้น ยิ่งข้อความนั้นยากที่จะคำนวณ ก็ยิ่งแสดงให้เห็นว่าผู้ส่งมีแรงจูงใจและความตั้งใจที่จะส่งข้อความนั้นจริงๆ
ก่อนที่เราจะส่งโน้ต เราต้อง "ขุด" (Mine) โน้ตนั้นก่อน โดยการใช้พลังประมวลผลของอุปกรณ์ของเราคำนวณหาค่าพิเศษที่ตรงตามเงื่อนไขที่กำหนด ค่าพิเศษนี้ถูกฝังอยู่ใน ID ของโน้ต ยิ่งความยากของ PoW สูงขึ้น ก็ยิ่งใช้พลังงานในการคำนวณมากขึ้น และ ID ของโน้ตก็จะเริ่มต้นด้วยเลข 0 จำนวนมากขึ้นตามไปด้วย
# ทำไมต้องใช้ PoW?
เพราะมันช่วยลดปัญหาสแปมได้อย่างมีประสิทธิภาพน่ะสิ!
- ลดบ็อท หรือโปรแกรมที่ส่งข้อความอัตโนมัติส่วนใหญ่จะไม่สามารถใช้พลังงานในการขุด PoW ได้มากเท่ากับมนุษย์ เนื่องจากบ็อทมักออกแบบมาเพื่อประหยัดทรัพยากร ดังนั้น.. เมื่อเราตั้งค่า PoW ไว้สูง บ็อทก็จะไม่สามารถสร้างโน้ตได้ง่ายๆ
- ลดการส่งโน้ตแบบสุ่ม ผู้ส่งโน้ตต้องใช้พลังงานในการขุดก่อนส่ง ทำให้พวกที่ตั้งใจส่งสแปมแบบไม่คิดอะไรจะลดลง เพราะการขุด PoW ต้องใช้เวลาและพลังงาน
- สร้างคุณค่าให้กับโน้ต โน้ตที่มี PoW แสดงว่าผู้ส่งใส่ใจและตั้งใจส่งจริง ไม่ใช่แค่ส่งแบบผ่านๆ ทำให้โน้ตมีความน่าเชื่อถือมากขึ้น
- แก้ปัญหา Reply Guy บ็อท Reply Guy ที่ส่งข้อความตอบกลับอัตโนมัติจำนวนมาก สามารถถูกจำกัดได้ด้วยการใช้ PoW หากเราตั้งค่า PoW ไว้ใน Relay หรือในแอปพลิเคชัน Nostr ของเรา (ใน Wherostr ตังได้สบายๆ) บ็อทเหล่านี้ก็จะไม่สามารถส่งข้อความตอบกลับได้อย่างง่ายดายอีกต่อไป
# NIP-13 ทำงานยังไง?
1. ความยาก (Difficulty) เราสามารถกำหนดความยากของ PoW ได้ ยิ่งยากก็ยิ่งต้องใช้พลังงานในการขุดมากขึ้น ความยากถูกกำหนดโดยจำนวนเลข 0 ที่อยู่ข้างหน้าของ ID โน้ต (ตาม NIP-01) ยิ่งมีเลข 0 มาก ความยากก็ยิ่งสูงขึ้น
2. การขุด (Mining) เราต้องใช้แอปพลิเคชั่น Nostr ที่รองรับ PoW (Wherostr อีกแล้ว) แล้วปรับแต่งค่าในโน้ตของคุณเรื่อยๆ จนกว่าจะได้ค่าที่ตรงตามเงื่อนไขที่กำหนด โดยปกติแล้วจะปรับแต่งค่าในแท็ก "nonce" แล้วคำนวณ ID โน้ตใหม่
3. การตรวจสอบ (Validation) รีเลย์และไคลเอนต์สามารถตรวจสอบได้ว่าโน้ตนั้นผ่านการขุด PoW แล้วหรือไม่ โดยการนับจำนวนเลข 0 ที่อยู่ข้างหน้าของ ID โน้ต
# ตัวอย่างการใช้งาน (ที่อยากเห็นทุกคนช่วยๆ กันลอง)
- ตั้งค่า PoW สำหรับการโน๊ตหรือตอบเม้น เราสามารถกำหนดค่า PoW ไว้ในโน้ตและเม้นของเราได้ เช่น โน๊ตหรือเม้นด้วยการตั้งค่า PoW ที่มีความยาก 8 ขึ้นไป
- ใช้ฟิลเตอร์ PoW ใน wherostr (nprofile…6759) แอป Wherostr มีฟีเจอร์ที่ช่วยให้เราสามารถกรองโน้ตและคอมเม้นท์ที่ผ่าน PoW มาแล้วเท่านั้นได้ เช่น เราสามารถตั้งค่าให้แสดงเฉพาะโน้ตหรือคอมเม้นท์ที่มี PoW อย่างน้อย 8 ขึ้นไป ซึ่งจะช่วยลดโน้ตสแปมจากบ็อทได้อย่างมีประสิทธิภาพ (โน๊ตและเม้นที่ไม่มี POW ของเราและของเพื่อนเราก็จะไม่ปรากฏด้วย แต่เราก็ปิด-เปิดฟีเจอร์นี้ได้ตามใจชอบไง)
- Relay ก็สามารถตั้งค่า PoW ได้เช่นกัน เช่น Relay อาจจะตั้งค่าว่าจะรับเฉพาะโน้ตที่มี PoW อย่างน้อย 4 ขึ้นไปไรงี้ เพื่อป้องกันการส่งสแปมในระดับ Relay
หมายเหตุ: การตั้งค่ากรองด้วย POW ไม่ใช่การฆ่าหรือลบข้อความของบ็อท แต่เป็นการสั่งไม่ให้ไคลเอนต์ของเราไปดึงเอาโน๊ตที่ไม่มี POW มาแสดงให้เห็นเท่านั้น
ประสบการณ์ส่วนตัว..
พี่เองก็ได้ลองทดสอบการสร้างโน้ตที่มี PoW ความยาก 48 ด้วยมือถือและพบว่ามันใช้เวลานานมาก บน Samsung S23+ ใช้เวลา 50 นาที แต่พึ่งจะขุดได้แค่ 25/48 เท่านั้น แสดงให้เห็นว่าความยากระดับนี้มันสูงมากจริง ๆ (ต่อให้ใช้คอมก็ยังยาก) ดังนั้น.. ไม่จำเป็นต้องเยอะขนาดนั้นก็ได้ 5555+
# ข้อเสนอแนะ
หากเราทุกคนหันมาใช้ PoW ในการสร้างโน้ตและคอมเม้นท์ โดยตั้งค่าความยากที่ไม่สูงจนเกินไป เช่น 8 ก็จะช่วยลดปัญหาสแปมรกหูรกตาได้โดยที่เราไม่ต้องสิ้นเปลืองพลังงานมากเกินไป และยังช่วยให้ Relay และแอปพลิเคชัน Nostr สามารถกรองโน้ตสแปมได้ง่ายขึ้นด้วย
ปล. โน๊ตเป็นเพียงการอธิบายเบื้องต้นเกี่ยวกับ NIP-13 เท่านั้น หากต้องการศึกษาเพิ่มเติม สามารถอ่านเอกสารประกอบเพิ่มเติมได้ที่นี่ครับ
https://github.com/nostr-protocol/nips/blob/master/13.md