ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

avatar
ZAN Team
6ชั่วโมงที่ผ่านมา
ประมาณ 6175คำ,ใช้เวลาอ่านบทความฉบับเต็มประมาณ 8นาที
NFT (โทเค็นที่ไม่สามารถทดแทนกันได้) ซึ่งเป็นโทเค็นที่ ไม่สามารถถูกแทนที่ได้ ตามชื่อของมัน เหมาะมากสำหรับใช้เป็นเครื่องมือตรวจสอบตัวตน

NFT (โทเค็นที่ไม่สามารถทดแทนกันได้) ซึ่งเป็นโทเค็นที่ ไม่สามารถถูกแทนที่ได้ ตามชื่อของมัน เหมาะมากสำหรับใช้เป็นเครื่องมือตรวจสอบตัวตน

ต่อไป ให้เราสำรวจความเป็นไปได้ของการใช้ NFT เป็นใบรับรองการจดทะเบียนผ่านตัวอย่างง่ายๆ

คำนำ

ก่อนที่เราจะเริ่ม ให้ฉันแนะนำเครื่องมือที่เราจะใช้ต่อไป

โทเค็น SPL

เราสามารถเขียนสัญญา Solana ใหม่ได้ตั้งแต่เริ่มต้น แต่เพื่อจุดประสงค์ที่เราต้องการบรรลุในปัจจุบัน เราสามารถใช้การใช้งานทั่วไปของ Solana: Token Program ได้โดยตรง

โปรแกรม Token เป็นส่วนหนึ่งของไลบรารีโปรแกรม Solana (SPL, https://spl.solana.com/) SPL มีการใช้งานโปรแกรมทั่วไปหลายอย่าง รวมถึง Token, Swap และ Memo และมีไลบรารีไคลเอ็นต์และ CLI ที่สมบูรณ์และเครื่องมืออื่นๆ ซึ่งอำนวยความสะดวกให้กับนักพัฒนา Solana อย่างมาก

ซอร์สโค้ดโครงการของ Token Program อยู่ที่: https://github.com/solana-labs/solana-program-library/tree/master/token/program

สนามเด็กเล่นโซลานา

Solpy (https://beta.solpg.io/) จัดเตรียมสภาพแวดล้อมสำหรับการเขียนและปรับใช้สัญญา Solana ทางออนไลน์ และรวมเครื่องมือที่ใช้กันทั่วไปตามค่าเริ่มต้น รวมถึง SPL Token ที่นำมาใช้ในส่วนก่อนหน้า ช่วยให้เราสร้างและจัดการ Token ได้อย่างง่ายดายผ่าน spl-token-cli

โทเค็นการรับรองความถูกต้อง

ในส่วนนี้เราจะสร้าง NFT Token หากผู้ใช้ Mint Token ที่อยู่กระเป๋าสตางค์จะถือว่าได้รับการลงทะเบียนในระบบของเรา มิฉะนั้นผู้ใช้จะได้รับแจ้งให้ลงทะเบียนก่อน

ตอนนี้ เรามาเริ่มกันที่ส่วน On-chain:

สร้างโทเค็น

เราใช้ spl-token เพื่อสร้างโทเค็นใหม่ และส่ง --decimals เพื่อระบุว่าเป็นโทเค็นที่แบ่งแยกไม่ได้ (เช่นเดียวกับ NFT)

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

บันทึกต่อไปนี้จะถูกส่งออก:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

ในหมู่พวกเขา 69yXraTu3FqXZkATg6MiRnWT2qHd4tRzWsfCHHE9j2XE มักเรียกว่า Mint Address ซึ่งเป็น ID ของ Token ที่เราสร้างขึ้น

ที่อยู่โทเค็นคือ:

https://solscan.io/token/69yXraTu3FqXZkATg6MiRnWT2qHd4tRzWsfCHHE9j2XE?cluster=devnet

สร้างบัญชีโทเค็น

ต่อไปเราต้องสร้างบัญชี Token สำหรับ Token ที่สร้างในขั้นตอนก่อนหน้า

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

สะระแหน่

ก่อนที่จะสร้างโทเค็นใหม่ด้วยที่อยู่กระเป๋าเงินอื่น ให้เราลองสร้างหน่วยโทเค็นสำหรับบัญชีโทเค็นที่สร้างขึ้นในขั้นตอนก่อนหน้าก่อน เพียงป้อน:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

บันทึกต่อไปนี้จะถูกส่งออก:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

อีกทางหนึ่ง:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

คุณยังสามารถลองใช้ค่ามินต์อื่น ๆ เช่น 1.9:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

เมื่อดูรายละเอียดธุรกรรม คุณจะพบว่าเนื่องจากเราระบุ --decimals เป็น 0 เมื่อสร้าง Token ในขั้นตอนแรก เมื่อดำเนินการ Mint จริง ส่วนทศนิยมจะถูกละทิ้ง ดังนั้นจำนวน Mint จะยังคงเป็น 1 .

คุณยังสามารถลองมอบโทเค็นเหรียญกษาปณ์ไปยังที่อยู่กระเป๋าสตางค์ได้โดยตรง ที่นี่เราใช้ 4wztJ4CAH4GbAUopZrVk7nLvoAC3KAF6ttMMWfnBRG1t เพื่อสาธิต:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

มิ้นท์สำหรับที่อยู่กระเป๋าเงิน

เป้าหมายของการดำเนินการ Mint ข้างต้นคือที่อยู่ Token Mint และตามแนวคิดเดิมของเรา Mint ควรมอบให้กับที่อยู่กระเป๋าเงินอื่นที่ไม่ได้เป็นของเรา

ต่อไป มาทำตามขั้นตอนเริ่มต้นด้านบนโดยใช้ที่อยู่กระเป๋าเงินของผู้ใช้ Web3

  • โทเค็นเราใช้โดยตรง 69yXraTu3FqXZkATg6MiRnWT2qHd4tRzWsfCHHE9j2XE ข้างต้น

  • ที่อยู่กระเป๋าเงิน: ใช้ 4wztJ4CAH4GbAUopZrVk7nLvoAC3KAF6ttMMWfnBRG1t

แต่เมื่อเราเปลี่ยนพารามิเตอร์โดยตรง เราก็จะได้ผลลัพธ์ที่ไม่คาดคิด:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

มีที่อยู่อยู่ แต่ที่อยู่ที่กำหนดโดย Mint ไม่ใช่ที่อยู่กระเป๋าเงินเดิม แต่เป็นบัญชีโทเค็นที่ต้องเชื่อมโยงด้วย

เราจำเป็นต้องดำเนินการตามกระบวนการเดียวกันกับข้างต้น: สร้างบัญชี Token สำหรับที่อยู่กระเป๋าเงิน จากนั้นใช้บัญชี Token ที่สร้างขึ้นเพื่อสร้างหน่วย Token ใหม่

กล่าวอีกนัยหนึ่ง หากเราต้องการสร้างหน่วยโทเค็นสำหรับที่อยู่กระเป๋าสตางค์หนึ่งๆ เราต้องสร้างบัญชีโทเค็นสำหรับที่อยู่กระเป๋าสตางค์นี้ก่อน สำหรับสาเหตุที่เราต้องทำเช่นนี้ เหตุผลหนึ่งก็คือ เราไม่มีอำนาจในการแก้ไขข้อมูลของที่อยู่บางแห่งโดยตรง

ในเอกสารของ Solana บางครั้งคุณอาจเห็นแนวคิดสองประการที่คล้ายกัน: บัญชีโทเค็น และบัญชีโทเค็นที่เกี่ยวข้อง (ATA) เอกสารดูเหมือนว่าทั้งสองจะเกี่ยวข้องกัน แต่ไม่ได้อธิบายสิ่งนี้ซึ่งทำให้สับสนมาก

แต่ถ้าคุณดูเอกสารของ Metaplex คุณจะพบว่าระบุไว้อย่างชัดเจนว่า: “บัญชีโทเค็นที่เกี่ยวข้อง ซึ่งบางครั้งเรียกง่ายๆ ว่าบัญชีโทเค็น”

เราจะไม่เจาะลึกสองสิ่งนี้ในที่นี้ ลองจินตนาการว่าบัญชีโทเค็นเป็นตัวกลางระหว่างโทเค็นและที่อยู่กระเป๋าเงิน

เราใช้คำสั่งต่อไปนี้เพื่อสร้างบัญชีโทเค็นสำหรับที่อยู่กระเป๋าเงิน:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

การสร้างซ้ำจะทำให้เกิดข้อผิดพลาด:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

นอกจากนี้ยังสามารถเห็นได้ในบันทึกว่าบัญชีโทเค็นที่ได้รับจากบัญชี Mint ที่กำหนดและที่อยู่กระเป๋าเงินถูกกำหนดไว้ (3JocyxV4LX4VbNU248CvNozZphgRW5JTyxn7FPWrF8bx) แต่เนื่องจากมีอยู่แล้ว ข้อความแสดงข้อผิดพลาดจึงถูกพิมพ์ออกมา

รับบัญชีโทเค็น

เราจำเป็นต้องใช้อินเทอร์เฟซ RPC เพื่อดูว่าที่อยู่กระเป๋าเงินบางแห่งมี Mint เป็น NFT ที่เราสร้างขึ้นหรือไม่ โดยเฉพาะ ค้นหาข้อมูลผ่านเมธอด getTokenAccountsByOwner ต่อไปนี้เป็นพารามิเตอร์ที่อินเทอร์เฟซต้องการ:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

คุณจะต้องแทนที่ _YOUR_RPC_PROVIDER_ ด้วยที่อยู่ที่ให้ไว้โดยผู้ให้บริการ RPC ที่คุณเลือก

คุณสามารถใช้ที่อยู่ที่ได้รับอย่างเป็นทางการจาก Solana หรือคุณสามารถค้นหาเครือข่าย RPC สาธารณะฟรีได้ที่นี่: https://zan.top/service/public-rpc/solana

หมายเหตุ: ที่อยู่สาธารณะอาจไม่เสถียร หากคุณต้องการบริการ RPC ที่เสถียร ขอแนะนำให้สร้างคีย์ API ของคุณเอง

สำหรับที่อยู่กระเป๋าเงินด้านบน ข้อมูลเฉพาะมีดังนี้:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

นอกเหนือจากการกรอกพารามิเตอร์คำขอด้วยตนเองผ่านโค้ดแล้ว คุณยังสามารถใช้เมธอด getParsedTokenAccountsByOwner บนการเชื่อมต่อที่ให้ไว้ใน @solana/web3.js ภายใน เมธอด getParsedTokenAccountsByOwner จริงๆ แล้วจะถูกเรียกผ่านอินเทอร์เฟซ RPC ที่ให้ไว้เมื่อสร้าง การเชื่อมต่อ.

หากเป็นกระเป๋าเงินที่สร้าง Account Token แล้ว มันจะส่งคืน:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

ข้อมูลที่ถูกลบซึ่งไม่เป็นประโยชน์สำหรับเราอีกต่อไป

ทำให้สำเร็จ

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

รหัสต่อไปนี้อยู่ที่https://github.com/gin-lsl/my-sol-token-auth-example

คุณสามารถดูตัวอย่างได้ที่นี่: https://my-sol-token-auth-example.vercel.app/

ฉันจะนำไปใช้โดยสร้างโปรเจ็กต์ Nextjs ง่ายๆ โดยใช้ Ant Design Web3 เพื่อเชื่อมต่อ Wallet:

เริ่มต้นโครงการ Nextjs

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

ใช้ค่าเริ่มต้นสำหรับตัวเลือกทั้งหมด:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

เพื่อเริ่มต้นอย่างรวดเร็ว เราใช้ @ant-design/web3-solana โดยตรงเพื่อเชื่อมต่อกับกระเป๋าเงิน และใช้ @solana/spl-token เพื่อโต้ตอบกับ Token Program

เพิ่มการอ้างอิงที่เกี่ยวข้อง:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

เราจำเป็นต้องรวม 3 หน้าไว้ในหน้าแรก สร้าง app/sign-in/page.tsx และ app/sign-on/page.tsx ใช้เพื่อเชื่อมต่อกับกระเป๋าเงินและตรวจสอบว่าผู้ใช้ได้ลงทะเบียนแล้ว (mint NFT หรือไม่) และให้ผู้ใช้ดำเนินการตามขั้นตอนการลงทะเบียน (mint NFT)

หลังจากเปิดหน้าสาธิต สิ่งแรกที่คุณเห็นคือข้อความต้อนรับและลิงก์ไปยังหน้าลงชื่อเข้าใช้:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

หลังจากเข้าสู่หน้าคุณต้องลงชื่อเข้าใช้ก่อน:

คลิก ดำเนินการต่อกับ Solana และกระเป๋าเงินจะปรากฏขึ้น

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

หากคุณยังไม่เคยลงทะเบียนมาก่อน คุณจะได้รับแจ้งให้ลงทะเบียนก่อน:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

เนื่องจากในตรรกะของ /api/sign-in บัญชีโทเค็นที่เกี่ยวข้องจะถูกค้นหาตามที่อยู่กระเป๋าเงินที่เชื่อมต่อ เนื่องจากเราไม่เคยใช้มาก่อน จึงไม่สามารถหาข้อมูลได้ ดังนั้นระบบจะคิดว่าที่อยู่กระเป๋าเงินนี้ยังไม่ได้ลงทะเบียน

จากนั้นเราปฏิบัติตามคำแนะนำและไปที่หน้าลงชื่อเข้าใช้ โดยทั่วไปหน้าลงทะเบียนจะคล้ายกับหน้าเข้าสู่ระบบ ยกเว้นว่าตรรกะการประมวลผลบนฝั่งเซิร์ฟเวอร์จะแตกต่างออกไป:

ในความเป็นจริง ตรรกะทั้งสองสามารถนำมารวมกันได้ แต่จะแยกออกจากกันที่นี่เพื่อความสะดวกในการสาธิตเท่านั้น

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

อย่างไรก็ตาม คลิก “เริ่มต้นด้วย Solana” เพื่อเชื่อมต่อกระเป๋าเงิน จากนั้น หากทุกอย่างเป็นไปด้วยดี คุณจะเห็นข้อความแสดงความสำเร็จ:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

เข้าสู่ Solscan แล้วดูว่าเกิดอะไรขึ้น ป้อน https://solscan.io/?cluster=devnet และตรวจสอบที่อยู่กระเป๋าเงินของคุณ หรือคุณสามารถตรวจสอบที่อยู่นี้: 79reVF46NyuuH7PADR3i6RpQ7hmBZgYkiieXNYPM1oLF

มีข้อมูลธุรกรรมชิ้นหนึ่ง:

ซีรี่ส์ Web3 Newbie: สำรวจการเข้าสู่ระบบด้วย Solana Token

โปรดทราบว่าในคำแนะนำ คุณจะเห็นว่าคำสั่ง CreateAccount ดำเนินการภายในธุรกรรม คลิกลิงก์เพื่อป้อนรายละเอียด และคุณจะพบว่าสิ่งที่สร้างขึ้นคือ TokenAccount: EXfDYkHw3UQw2VqiSLsRAfLMsxkgqnd3nhxbB4V5HAvA ค่า isOnCurve เป็นเท็จ ซึ่งบ่งชี้ว่าเป็นบัญชีที่เกี่ยวข้องกันโดยไม่มีคีย์ส่วนตัว

กลับไปที่หน้าก่อนหน้า ไปที่ Portfolio -> NFT และคุณจะเห็นการดำเนินการ Mint ที่เราเพิ่งทำในการลงชื่อเข้าใช้ เช่นเดียวกับ Mint NFT:

สรุป

เรามาสรุปกระบวนการทั้งหมดกันดีกว่า เราใช้ spl-token-cli เพื่อสร้าง NFT จากนั้นตรวจสอบว่าที่อยู่กระเป๋าสตางค์มีบัญชี Token และ Mint the Token เพื่อตรวจสอบว่าได้มีการลงทะเบียนบนเว็บไซต์ของเราหรือไม่

เมื่อผู้ใช้ Web3 เชื่อมต่อกับกระเป๋าเงิน เราจะส่งการลงชื่อเข้าใช้ไปยังแบ็กเอนด์โดยอัตโนมัติ สร้างบัญชีโทเค็นภายใน และสร้างหน่วยโทเค็นเป็นข้อมูลรับรองที่ลงทะเบียนของผู้ใช้

ในอนาคตผู้ใช้สามารถใช้ที่อยู่กระเป๋าเงินเดียวกันเพื่อเข้าสู่เว็บไซต์ของเราอีกครั้ง

บทความนี้เขียนโดย gin-lsl จากทีม ZAN (บัญชี X @zan_team )

บทความต้นฉบับ, ผู้เขียน:ZAN Team。พิมพ์ซ้ำ/ความร่วมมือด้านเนื้อหา/ค้นหารายงาน กรุณาติดต่อ report@odaily.email;การละเมิดการพิมพ์ซ้ำกฎหมายต้องถูกตรวจสอบ

ODAILY เตือนขอให้ผู้อ่านส่วนใหญ่สร้างแนวคิดสกุลเงินที่ถูกต้องและแนวคิดการลงทุนมอง blockchain อย่างมีเหตุผลและปรับปรุงการรับรู้ความเสี่ยงอย่างจริงจัง สำหรับเบาะแสการกระทำความผิดที่พบสามารถแจ้งเบาะแสไปยังหน่วยงานที่เกี่ยวข้องในเชิงรุก

การอ่านแนะนำ
ตัวเลือกของบรรณาธิการ