Oddbean new post about | logout
 มาเรียนเรื่องนี้กันเถอะเด็กๆ #Siamstr
NIP-13: Proof of Work - ป้องกันสแปมบน Nostr ด้วยการพิสูจน์พลังงาน
nostr:nevent1qqsqpzdr5390efejk7hc87g7m4rvpnfpdeuepdky7f4gclejkq53jsqzyzn7nvm07f9wwvrsvap92w62fgnn8vq32mnuncnpghumc6s57ps6jc4pmcw

https://image.nostr.build/569686588ec50d4cb6b0e4c8c966c557888d2f85baac3e4715fd2acfd6b4af86.jpg

NIP-13 เป็นข้อกำหนดที่ช่วยเพิ่มระบบ Proof of Work (PoW) เข้ามาใน Nostr เพื่อแก้ปัญหาเรื่องสแปม (โดยเฉพาะปัญหาบ็อท Reply Guy ที่กำลังระบาดอยู่ตอนนี้) จริงๆ มันมีมานานแล้วแต่ไม่ค่อยมีไคลเอนต์ไหนนำมาอิมพลีเม้นสักเท่าไหร่ จนกระทั่ง #Wherostr เอามาพัฒนาอย่างเป็นรูปธรรมนั่นแหละ.. 

https://image.nostr.build/72438059f68c317359a2cfb7b9ad4507f551f7248d8291ccf9877421c1668086.jpg

# #PoW คืออะไร?

ลองนึกภาพว่าเราต้องการส่งจดหมายไปรษณีย์ แต่ก่อนส่งเราต้องแก้โจทย์ปริศนาคณิตศาสตร์ซับซ้อนๆ สักข้อเสียก่อน ใครที่แก้ได้ก็แสดงว่ามีความตั้งใจและใช้พลังงานในการส่งจดหมายจริงๆ ไม่ใช่แค่ส่งจดหมายแบบสุ่มๆ

ในโลกม่วงๆ นี้ PoW คือการพิสูจน์ว่าผู้ส่งข้อความได้ใช้พลังงานในการคำนวณ (หรือ "ขุด") ก่อนส่งข้อความนั้น ยิ่งข้อความนั้นยากที่จะคำนวณ ก็ยิ่งแสดงให้เห็นว่าผู้ส่งมีแรงจูงใจและความตั้งใจที่จะส่งข้อความนั้นจริงๆ

ก่อนที่เราจะส่งโน้ต เราต้อง "ขุด" (Mine) โน้ตนั้นก่อน โดยการใช้พลังประมวลผลของอุปกรณ์ของเราคำนวณหาค่าพิเศษที่ตรงตามเงื่อนไขที่กำหนด ค่าพิเศษนี้ถูกฝังอยู่ใน ID ของโน้ต ยิ่งความยากของ PoW สูงขึ้น ก็ยิ่งใช้พลังงานในการคำนวณมากขึ้น และ ID ของโน้ตก็จะเริ่มต้นด้วยเลข 0 จำนวนมากขึ้นตามไปด้วย

# ทำไมต้องใช้ PoW?

เพราะมันช่วยลดปัญหาสแปมได้อย่างมีประสิทธิภาพน่ะสิ!

- ลดบ็อท หรือโปรแกรมที่ส่งข้อความอัตโนมัติส่วนใหญ่จะไม่สามารถใช้พลังงานในการขุด PoW ได้มากเท่ากับมนุษย์ เนื่องจากบ็อทมักออกแบบมาเพื่อประหยัดทรัพยากร ดังนั้น.. เมื่อเราตั้งค่า PoW ไว้สูง บ็อทก็จะไม่สามารถสร้างโน้ตได้ง่ายๆ 

- ลดการส่งโน้ตแบบสุ่ม ผู้ส่งโน้ตต้องใช้พลังงานในการขุดก่อนส่ง ทำให้พวกที่ตั้งใจส่งสแปมแบบไม่คิดอะไรจะลดลง เพราะการขุด PoW ต้องใช้เวลาและพลังงาน

- สร้างคุณค่าให้กับโน้ต โน้ตที่มี PoW แสดงว่าผู้ส่งใส่ใจและตั้งใจส่งจริง ไม่ใช่แค่ส่งแบบผ่านๆ ทำให้โน้ตมีความน่าเชื่อถือมากขึ้น

- แก้ปัญหา Reply Guy บ็อท Reply Guy ที่ส่งข้อความตอบกลับอัตโนมัติจำนวนมาก สามารถถูกจำกัดได้ด้วยการใช้ PoW หากเราตั้งค่า PoW ไว้ใน Relay หรือในแอปพลิเคชัน Nostr ของเรา (ใน Wherostr ตังได้สบายๆ) บ็อทเหล่านี้ก็จะไม่สามารถส่งข้อความตอบกลับได้อย่างง่ายดายอีกต่อไป

https://image.nostr.build/d21f0cc40ec636b100043f35e9233a60b8b156cfa5abfdd2d8fb4cb0ea259bf8.jpg

# NIP-13 ทำงานยังไง?

1. ความยาก (Difficulty) เราสามารถกำหนดความยากของ PoW ได้ ยิ่งยากก็ยิ่งต้องใช้พลังงานในการขุดมากขึ้น ความยากถูกกำหนดโดยจำนวนเลข 0 ที่อยู่ข้างหน้าของ ID โน้ต (ตาม NIP-01) ยิ่งมีเลข 0 มาก ความยากก็ยิ่งสูงขึ้น

2. การขุด (Mining) เราต้องใช้แอปพลิเคชั่น Nostr ที่รองรับ PoW (Wherostr อีกแล้ว) แล้วปรับแต่งค่าในโน้ตของคุณเรื่อยๆ จนกว่าจะได้ค่าที่ตรงตามเงื่อนไขที่กำหนด โดยปกติแล้วจะปรับแต่งค่าในแท็ก "nonce" แล้วคำนวณ ID โน้ตใหม่

3. การตรวจสอบ (Validation) รีเลย์และไคลเอนต์สามารถตรวจสอบได้ว่าโน้ตนั้นผ่านการขุด PoW แล้วหรือไม่ โดยการนับจำนวนเลข 0 ที่อยู่ข้างหน้าของ ID โน้ต

https://image.nostr.build/63e2fd2799b3e758ccc397dc4b48aa83773daed370499ffb3b0f708e22adab9c.jpg

# ตัวอย่างการใช้งาน (ที่อยากเห็นทุกคนช่วยๆ กันลอง)

- ตั้งค่า PoW สำหรับการโน๊ตหรือตอบเม้น เราสามารถกำหนดค่า PoW ไว้ในโน้ตและเม้นของเราได้ เช่น โน๊ตหรือเม้นด้วยการตั้งค่า PoW ที่มีความยาก 8 ขึ้นไป

- ใช้ฟิลเตอร์ PoW ใน nostr:nprofile1qqsdvl5ghyne55mzdj0hzmyhvuv26fzughl7y333r9py6xdnf0uyttq7e6759  แอป Wherostr มีฟีเจอร์ที่ช่วยให้เราสามารถกรองโน้ตและคอมเม้นท์ที่ผ่าน PoW มาแล้วเท่านั้นได้ เช่น เราสามารถตั้งค่าให้แสดงเฉพาะโน้ตหรือคอมเม้นท์ที่มี PoW อย่างน้อย 8 ขึ้นไป ซึ่งจะช่วยลดโน้ตสแปมจากบ็อทได้อย่างมีประสิทธิภาพ (โน๊ตและเม้นที่ไม่มี POW ของเราและของเพื่อนเราก็จะไม่ปรากฏด้วย แต่เราก็ปิด-เปิดฟีเจอร์นี้ได้ตามใจชอบไง)

https://image.nostr.build/55e64bfd412403c3f84a9923a59fad0bb4abcc87d5a9f6abe477a40527a96d8e.jpg

- 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 
 เยี่ยมไปเลยครับ 
 เหยดดดด เม้น pow-22 
 ตอนเสียบ usb ชาร์จแบตดูเหมือนจะสร้าง PoW สูง ๆ ได้ไว 
 https://image.nostr.build/0d0f176cea726e707bc746c99448de0fb14389a904e2183cf97fe43f4bd4098a.jpg

ไม่น่าห้าวเลยกู... 
 5555 16 กำลังดีครับ 
 เทส 
 เทส 
 ผ่านๆ 
 nostr:nprofile1qqsrmd0ph8d22lxx5l2492r2sat5a63xtcr4nh0tsl2yupe8770d3rglsd88e  แม่งต้องมีให้ตั้งค่า default pow ได้ด้วยว่ะ ขี้เกียจกด 5555

ปล. ยังเซฟรูปจากโน๊ตไม่ได้ 
 5555 จริงครับ 
 #wherostrsupport
- default PoW
- download image


nostr:nevent1qqsqqz24z584v6qe7jguftnwtq43kgsc0mjtdylgrev08jj9sda23yczyrvrpmnm0sc2xe93y39h0xhmknc4vuellwxgwg6ssm3xkz6wv8xkyypj26w 
 หมายถึงให้เลือก enable + adjustable เพราะบางคนก็ไม่ซื้อไอเดียนี้ เขาไม่ควรถูกบังคับให้ทำ 
 ครับพี่ จะเป็นการตั้งค่าที่ Settings ครับ ไม่ได้บังคับ 
 ตอนนี้เรารีเฟรชข้อมูลในแต่ละหน้าแบบไหน หรือรอมันดึงเองตามเวลาที่กำหนด? 
 noti ได้มั้ยของ ios 
 ถ้า push noti รอก่อนนะค้าบ (ไม่เปิด app แต่ได้รับ noti)
แต่ถ้าแสดงจำนวน noti ใน app อาจจะได้เลย รอบหน้า 
 รอได้ดิ เพราะเรารักนาย 
 อร๊ายยย 😍 
 เหมือนการ Filter PoW แค่ 8 จะแปลกๆนะครับ
หรือว่าขั้นต่ำของ PoW ควรจะเป็น 16 
 เพราะทำอะไร? 
 ตั้งค่า Filter PoW เป็น 8 มันควรจะแสดง PoW ที่มากกว่า 8 มาด้วยครับ
แต่เหมือน Relay จะคืนมาเฉพาะที่ เท่ากับ 8 
 อ่อ.. คือพี่ไมไ่ด้เขเาใจผิดใช่ไหม มันแค่ยังทำงานผิด? 
 พี่ตั้มเข้าใจและอธิบายถูกแล้วครับ
แต่ขั้นต่ำ อาจจะต้องเป็น 16 เพราะทดลองใช้ 8 แล้ว relay ตอบไม่ถูก 
 งั้นพี่ควรแก้ข้อความสักหน่อย? 
 จากที่ลอง ต้องเป็น 16 ครับ แต่ยังไม่ดูลึกๆ ว่าเพราะอะไร ทำไม relay ถึงไม่ยอม 
 nostr:nprofile1qqs9q24s92fktq69g07q0clzp6qfh6zsycmqu774dw8eaklw52rq89cuezpjg 
 โอเคครับ จัดไป 
 เพื่อที่จะเปิด filter ได้ คนจริงทุกคนต้องทำ POW ใช่ไหมครับ 

ดีที่ Wherostr ทำให้มันเห็นได้ง่ายๆ 
 Wherostr & Alby getting better 
 ขอบคุณครับ 
 Good job 🙏🧡⚡️ 
 nostr:nevent1qqsqqqqvfgrfkkrdxdlcrw7vz06t5lgg4d99fhlj7sm8s4skeek6a3cprpmhxue69uhhyetvv9ujumn0w3hhx6rf9emkjm30qgsdsv8w0d7rpgmykyjykau6lw60z4nn8laceper2zrwy6ctfesu6csrqsqqqqqp4zn236 
 nostr:nevent1qvzqqqqqqypzpkpsaeahcv9rvjcjgjmhntamfu2kwvllhry8ydggdcntpd8xrntzqy88wumn8ghj7mn0wvhxcmmv9uq36amnwvaz7tmwdaehgu3wvf5hgcm0d9hx2u3wwdhkx6tpdshsqgqqqqxy5p5mtpknxluph0xp8a9605y2kjj5mle0gdnc2ctvumdwcuaftrsj 
 ใช่เลยครับ แล้วเราพยายามทำมาตรฐานด้วย pow-16 ตามที่คุยกันในเม้นคุณตั้มนั้นเลย 
 ใช่เลยครับ แล้วเราพยายามทำมาตรฐานด้วย pow-16 ตามที่คุยกันในเม้นคุณตั้มนั้นเลย