BTC
ETH
HTX
SOL
BNB
ดูตลาด
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

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

ZAN Team
特邀专栏作者
2025-01-16 07:30
บทความนี้มีประมาณ 2265 คำ การอ่านทั้งหมดใช้เวลาประมาณ 4 นาที
NFT (โทเค็นที่ไม่สามารถทดแทนกันได้) ซึ่งเป็นโทเค็นที่ "ไม่สามารถถูกแทนที่ได้" ตามชื่อของมัน เหมาะมากสำหรับใช้เป็นเครื่องมือตรวจสอบตัวตน
สรุปโดย AI
ขยาย
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)

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

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

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

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

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

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

สะระแหน่

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

หากเป็นกระเป๋าเงินที่สร้าง Account 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

สรุป

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

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

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

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

Solana
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก
https://t.me/Odaily_News
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
บัญชีทางการ
https://twitter.com/OdailyChina
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
ค้นหา
สารบัญบทความ
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android