Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

avatar
ZAN Team
1일 전
이 글은 약 2856자,전문을 읽는 데 약 4분이 걸린다
NFT(대체불가 토큰)는 이름에서 알 수 있듯이 대체 불가능한 토큰으로서 신원 인증 도구로 사용하기에 매우 적합합니다.

NFT(대체불가 토큰)는 이름에서 알 수 있듯이 대체 불가능한 토큰으로서 신원 인증 도구로 사용하기에 매우 적합합니다.

다음으로, 간단한 예시를 통해 NFT를 등록증으로 활용하는 타당성을 살펴보겠습니다.

머리말

시작하기 전에 다음에 사용할 도구를 소개하겠습니다.

SPL 토큰

우리는 처음부터 새로운 솔라나 계약을 작성할 수 있지만, 현재 달성하려는 목적을 위해서는 솔라나에서 제공하는 일반 구현인 토큰 프로그램을 직접 사용할 수 있습니다.

토큰 프로그램은 솔라나 프로그램 라이브러리(SPL, https://spl.solana.com/)의 일부입니다. SPL은 토큰, 스왑, 메모를 포함한 여러 공통 프로그램 구현을 제공하며 완전한 클라이언트 라이브러리와 CLI 및 기타 도구를 제공합니다. , 이는 Solana 개발자를 크게 촉진합니다.

토큰 프로그램의 프로젝트 소스 코드는 https://github.com/solana-labs/solana-program-library/tree/master/token/program에 있습니다.

솔라나 놀이터

Solpy(https://beta.solpg.io/)는 온라인으로 Solana 계약을 작성하고 배포할 수 있는 환경을 제공하며, 이전 섹션에서 소개한 SPL 토큰을 포함하여 일반적으로 사용되는 일부 도구가 기본적으로 포함되어 있습니다. spl-token-cli를 통해 토큰을 쉽게 생성하고 관리할 수 있습니다.

인증 토큰

이 부분에서는 NFT 토큰을 생성하겠습니다. 사용자가 민트 토큰인 경우 지갑 주소가 우리 시스템에 등록된 것으로 간주됩니다. 그렇지 않으면 사용자에게 먼저 등록하라는 메시지가 표시됩니다.

이제 온체인 부분부터 시작해 보겠습니다.

토큰 생성

spl-token을 사용하여 새 토큰을 생성하고 --decimals를 전달하여 분할할 수 없는 토큰임을 지정합니다(NFT와 마찬가지로).

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

다음 로그가 출력됩니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

그 중 69yXraTu3FqXZkATg6MiRnWT2qHd4tRzWsfCHHE9j2XE는 Mint Address라고도 불리며, 우리가 생성한 Token의 ID이기도 합니다.

토큰 주소는 다음과 같습니다:

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

토큰 계정 만들기

다음으로 이전 단계에서 생성한 토큰에 대한 토큰 계정을 생성해야 합니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

박하

다른 지갑 주소로 새 토큰을 발행하기 전에 먼저 이전 단계에서 생성한 토큰 계정에 대한 토큰 단위를 발행해 보겠습니다. 다음을 입력하세요.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

다음 로그가 출력됩니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

또는:

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

1.9와 같은 mint의 다른 값을 사용해 볼 수도 있습니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

거래 내역을 보면 첫 번째 단계에서 Token을 생성할 때 --decimals를 0으로 지정했기 때문에 실제로 mint가 실행될 때 소수 부분은 버려지므로 mint의 양은 여전히 1인 것을 알 수 있습니다. .

민트 토큰을 지갑 주소에 직접 제공할 수도 있습니다. 여기서는 4wztJ4CAH4GbAUopZrVk7nLvoAC3KAF6ttMMWfnBRG1t를 사용하여 다음을 보여줍니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

지갑 주소는 민트

위의 Mint 운영 대상은 Token Mint Address이며, 우리의 원래 아이디어에 따르면 Mint는 우리 소유가 아닌 다른 지갑 주소에 부여되어야 합니다.

다음으로 Web3 사용자의 지갑 주소를 사용하여 위의 민트 단계를 완료해 보겠습니다.

  • 토큰은 위의 69yXraTu3FqXZkATg6MiRnWT2qHd4tRzWsfCHHE9j2XE를 직접 사용합니다.

  • 지갑 주소: 4wztJ4CAH4GbAUopZrVk7nLvoAC3KAF6ttMMWfnBRG1t 사용

하지만 단순히 매개변수를 직접 바꾸면 예상치 못한 결과가 발생합니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

주소는 존재하지만 민트가 요구하는 주소는 원래 지갑 주소가 아니고, 연동이 필요한 토큰 계정입니다.

위와 동일한 과정을 수행해야 합니다. 지갑 주소에 대한 토큰 계정을 생성한 다음 생성된 토큰 계정을 사용하여 새 토큰 단위를 발행해야 합니다.

즉, 특정 지갑 주소에 대한 토큰 단위를 발행하려면 먼저 이 지갑 주소에 대한 토큰 계정을 만들어야 합니다. 이렇게 해야 하는 이유 중 하나는 특정 주소의 데이터를 직접 수정할 권한이 없기 때문입니다.

솔라나의 문서에는 토큰 계정과 ATA(Associated Token Account)라는 두 가지 유사한 개념이 나오는 경우가 있습니다. 문서에는 두 가지가 서로 관련되어 있는 것처럼 보이지만 이에 대한 설명이 없어 매우 혼란스럽습니다.

그러나 Metaplex의 문서를 보면 연결된 토큰 계정, 때로는 간단히 토큰 계정이라고도 함이라고 명확하게 명시되어 있음을 알 수 있습니다.

여기서는 두 가지에 대해 자세히 다루지 않고 토큰 계정이 토큰과 지갑 주소 사이의 중개자라고 상상해 보세요.

지갑 주소에 대한 토큰 계정을 생성하려면 다음 명령을 사용합니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

반복해서 생성하면 오류가 발생합니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

결정된 Mint Account와 지갑 주소에서 파생된 Token Account가 결정된 것을 로그에서도 볼 수 있는데(3JocyxV4LX4VbNU248CvNozZphgRW5JTyxn7FPWrF8bx) 이미 존재하기 때문에 오류 메시지가 출력됩니다.

토큰 계정 받기

특정 지갑 주소에 우리가 만든 NFT가 발행되어 있는지 확인하려면 RPC 인터페이스를 사용해야 합니다. 특히 getTokenAccountsByOwner 메소드를 통해 데이터를 쿼리합니다. 인터페이스에 필요한 매개변수는 다음과 같습니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

_YOUR_RPC_PROVIDER_을 선택한 RPC 공급자가 제공한 주소로 바꿔야 합니다.

솔라나가 공식적으로 제공하는 주소를 사용하거나 여기에서 무료 공개 RPC 네트워크를 찾을 수 있습니다: https://zan.top/service/public-rpc/solana

참고: 공개 주소가 불안정할 수 있습니다. 안정적인 RPC 서비스가 필요한 경우 자체 API Key를 생성하는 것이 좋습니다.

위 지갑 주소의 구체적인 내용은 다음과 같습니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

코드를 통해 요청 매개변수를 수동으로 채우는 것 외에도 @solana/web3.js에 제공된 Connection에서 getParsedTokenAccountsByOwner 메소드를 사용할 수도 있습니다. 내부적으로 getParsedTokenAccountsByOwner 메소드는 생성 시 제공되는 RPC 인터페이스를 통해 실제로 호출됩니다. 연결.

이미 계정 토큰을 생성한 지갑인 경우 다음을 반환합니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

더 이상 유용하지 않은 삭제된 데이터

성취하다

위의 시도를 통해 우리는 기존의 역량을 활용하여 우리가 원하는 기능을 달성할 수 있음을 알 수 있습니다. 그런 다음 클라이언트 코드 작성을 시작합니다.

다음 코드는 https://github.com/gin-lsl/my-sol-token-auth-example에 있습니다.

여기에서 미리 볼 수 있습니다: https://my-sol-token-auth-example.vercel.app/

지갑을 연결하기 위해 Ant Design Web3를 사용하여 간단한 Nextjs 프로젝트를 생성하여 이를 구현하겠습니다.

Nextjs 프로젝트 초기화

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

모든 옵션에 기본값을 사용하십시오.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

빠르게 시작하기 위해 @ant-design/web3-solana를 직접 사용하여 지갑에 연결하고 @solana/spl-token을 사용하여 토큰 프로그램과 상호 작용합니다.

관련 종속성을 추가합니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

홈페이지에 3개의 페이지를 포함해야 하며 app/sign-in/page.tsx 및 app/sign-on/page.tsx를 생성해야 합니다. 지갑에 연결하여 사용자가 이미 등록했는지 여부(민트 NFT 여부)를 확인하고 사용자가 등록 프로세스(민트 NFT)를 거치도록 하는 데 사용됩니다.

데모 페이지를 연 후 가장 먼저 보게 되는 것은 환영 메시지와 로그인 페이지 링크입니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

페이지에 들어간 후 먼저 로그인해야 합니다.

Continue with Solana를 클릭하면 지갑이 호출됩니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

이전에 등록하지 않은 경우 먼저 등록하라는 메시지가 표시됩니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

이는 /api/sign-in 로직상 연결된 지갑 주소를 기준으로 연결된 Token Account를 검색하기 때문입니다. 이전에 사용한 적이 없기 때문에 당연히 데이터를 찾을 수 없으므로 시스템에서는 이 지갑 주소가 등록되지 않은 것으로 간주하게 됩니다.

그런 다음 프롬프트에 따라 로그인 페이지로 이동합니다. 등록 페이지는 서버 측의 처리 논리가 다르다는 점을 제외하면 일반적으로 로그인 페이지와 유사합니다.

실제로 두 논리를 결합할 수도 있지만 여기서는 설명의 편의를 위해 분리했습니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

아무튼 Start with Solana를 눌러 지갑을 연결해 보도록 하겠습니다. 그런 다음 모든 것이 잘 진행되면 성공 메시지가 표시됩니다.

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

Solscan에 들어가서 무슨 일이 일어나는지 살펴보겠습니다. https://solscan.io/?cluster=devnet에 접속하여 지갑 주소를 확인하세요. 또는 다음 주소를 확인할 수도 있습니다: 79reVF46NyuuH7PADR3i6RpQ7hmBZgYkiieXNYPM1oLF

거래 데이터가 있습니다:

Web3 초보자 시리즈: 솔라나 토큰으로 로그인 살펴보기

지침에서 CreateAccount 지침이 트랜잭션 내에서 실행되는 것을 볼 수 있습니다. 링크를 클릭하여 세부 정보를 입력하면 생성된 것이 TokenAccount: EXfDYkHw3UQw2VqiSLsRAfLMsxkgqnd3nhxbB4V5HAvA임을 알 수 있습니다. isOnCurve 값은 False이며, 이는 개인 키가 없는 연결된 계정임을 나타냅니다.

이전 페이지로 돌아가서 포트폴리오 -> NFT로 이동하면 방금 사인온 내에서 수행한 Mint 작업과 Mint NFT를 볼 수 있습니다.

요약

전체 과정을 요약해 보겠습니다. 우리는 spl-token-cli를 사용하여 NFT를 생성한 다음 지갑 주소에 토큰 계정이 있는지 확인하고 토큰을 발행하여 웹 사이트에 등록되었는지 확인합니다.

Web3 사용자가 지갑에 연결하면 자동으로 백엔드에 로그인을 보내고, 내부적으로 토큰 계정을 생성하고, 사용자의 등록 자격 증명으로 토큰 단위를 발행합니다.

향후 사용자는 동일한 지갑 주소를 사용하여 당사 웹사이트에 다시 로그인할 수 있습니다.

이 글은 ZAN팀(X 계정 @zan_team )의 gin-lsl이 작성했습니다.

창작 글, 작자:ZAN Team。전재 / 콘텐츠 제휴 / 기사 요청 연락처 report@odaily.email;违규정 전재 법률은 반드시 추궁해야 한다.

ODAILY는 많은 독자들이 정확한 화폐 관념과 투자 이념을 수립하고 블록체인을 이성적으로 바라보며 위험 의식을 확실하게 제고해 달라고 당부했다.발견된 위법 범죄 단서에 대해서는 관련 부서에 적극적으로 고발하여 반영할 수 있다.

추천 독서
편집자의 선택