본문 바로가기

반응형

블록체인/솔라나

(10)
팬텀 지갑의 get cluster 지금까지의 결론: 팬텀 지갑이 어떤 네트워크에 접속되어있는지 알 수 없다. 메타마스트의 경우에는 isMetamask, 그리고 chainId 를 window.ethereum 객체를 통해 조회할 수 있다. 하지만 팬텀의 경우에는 window.solana 에서 isPhantom 은 제공하지만 chainId 처럼 연결된 cluster 정보는 제공하지 않는다. 팬텀 지갑에서 연결된 네트워크를 설정하면, 지갑 어플 내에서 변수로 관리하는 것 같고 explorer.solana.com 와 같은 사이트도 devnet/mainnet 설정 버튼을 누르면 cluster 를 선택할 수 있다. 다만 사이트에서 설정한 cluster 와 팬텀 지갑에 설정한 cluster 의 차이가 있을 때, 팬텀에서 이를 감지하지 않는다. "Tra..
web3 개발 애러 처리 솔라나 web3 개발을 하면서 소스코드상 어떻게 예외처리 로직을 짜야 좋은지 고민하게 된다. web3 호출에 대한 다양한 에러가 발생할 수 있는데, 1. 입력값을 내가 직접 필터링할 수도 있고 2. web3 호출의 에러 리턴 값을 try-catch 문으로 파싱해줄 수도 있다. 내가 직접 필터링하는 방법 장점 다양한 테스트케이스에 대해 생각해볼 수 있다. 에러를 직접 처리하는 과정에서 사용하는 web3 함수들과 친해질 수 있다. 직접 작성하여 정확한 에러 메세지를 리턴해줄 수 있다. 단점 소스코드가 복잡해진다. if-else 문이 중첩될 수 있다. web3 호출 에러를 리턴하는 방법 장점 불필요한 web3 호출을 줄여 함수 실행 속도를 개선한다. 에러 메세지를 파싱하기 위한 글로벌 핸들러를 개발할 수 있다..
팬텀 지갑 제공 정보 Metamask 연결시 연결된 네트워크를 확인할 수 있다. (mainnet-beta, rinkeby 등등...) window.ethereum.chainId '0x1' 솔라나 팬텀 지갑에서는 이런 기능이 없다. 보통 solana-web3 개발할 때 isConnected 또는 isPhantom 정도는 확인하지만 어떤 네트워크에 현재 팬텀이 접속되어있는지는 web3 코드로 분별할 수 없다. 이 검증을 하기 위해 오픈씨에서는 웹을 어떻게 구현했는지 확인해보았다. 링크비 네트워크에 현재 접속되어있다는 warning 이 표시된다. NFT 구매 요청을 하면 네트워크를 변경하라는 팝업이 뜬다. 그 팝업으로 인해 메타마스크에 네트워크 변경 요청도 호출할 수 있다. 반면 솔라나에서는 팬텀 지갑이 devnet..
서명 검증 함수 소개 솔라나 web3 개발 중에 키페어로 서버에서 서명하는 경우는 다음과 같은 코드를 활용한다. const keypair = Keypair.generate(); let tx = new Transaction(); tx.sign(keypair); keypair 객체는 public key / secret key 정보가 모두 있어 트랜잭션에 대한 서명을 만들 수 있다. 또는 Transaction 객체의 sign() 함수 대신 addSignature() 를 사용한다면 다음처럼 tweetnacl 함수를 사용해야 한다. const keypair = Keypair.generate(); let tx = new Transaction(); const buffer = tx.serializeMessage(); const signat..
[beet FixableBeetStruct.deserialize 에러]"offset" is out of range @metaplex-foundation/mpl-token-metadata 패키지의 Metadata.fromAccountInfo(accountInfo, 0)[0] 코드를 활용하던 중에 다음과 같은 에러가 발생했다. [Nest] 19781 - 05/18/2022, 3:26:17 PM ERROR [ExceptionsHandler] The value of "offset" is out of range. It must be >= 0 and = 0 and 33 -> 65 식으로 증가하다가 말도안되게 큰 값인 1653705784 로 설정되면서 Buffer 에서 수용 가능한 offset 을 초과하여 애러가 발생했다. 솔라나의 모든 PubKey 는 같은 SystemProgram 에 의해 생성되지만 어떤 프로그램에게 전가된 ..
sendAndConfirmTransaction 서명 오류 Transaction 객체를 생성하고 Keypair 객체를 제공하면, sendAndConfirmTransaction 함수를 통해 서명과 동시에 전송이 된다. HSM 처럼 개인키를 네트워크에 전송하지 못하는 경우에는 솔라나 서명 알고리즘 (Ed25519) 를 제공하는 tweetnacl 패키지를 통해서 서버사이드에서 서명하여 raw transaction 에 signature 를 동봉하여 보내게 된다. 이 때 사용하는 함수는 web3 의 sendAndConfirmRawTransaction 이다. 서명 오류 [Nest] 13400 - 05/16/2022, 6:16:46 PM ERROR [ExceptionsHandler] Signature verification failed Error: Signature veri..
솔라나 Generative Art 생성 방법 캔디머신을 사용한다 캔디머신을 사용하면 1만개의 NFT 들의 오프체인 url 정보들이 온체인 캔디머신 어카운트에 바이트코드로 존재한다. 캔디머신 V1 은 url 목록에 대해 순차적으로 민팅하기 때문에 민팅 속도가 느릴 경우 다음으로 얻게되는 NFT 를 알아낼 수 있다. 캔디머신 V2 는 이를 보완하여 랜덤한 순서로 NFT 를 민팅해준다. 프로그램 소스단에서 처리되는 로직이다. 일반 NFT 를 1만번 생성한다. 캔디머신을 사용할 때처럼 동일한 프로그램 함수를 포함한 트랜잭션으로 민팅할 수 없다. Layer 2 에서 선 민팅이 이루어진 경우에 민팅된 결과로 캔디머신 없이 마스터 에디션을 민팅할 수 있다. 프로젝트 단위로 묶을 수 있는 온 체인 콜렉션 정보를 담아서 민팅한다. 장점으로는 캔디머신처럼 온체인상 ..
솔라나 NFT on-chain metadata "tokenStandard" Metaplex 표준을 따르는 NFT 중에서 on-chain metadata 의 tokenStandard 필드가 0 에서 3인 값으로 표시된다. 공식 문서에서 언급된 TokenStandard enum 구조체의 NonFungible, FungibleAsset, Fungible, NonFungibleEdition 에 대한 순번을 의미한다. 그리고 이 값은 컨트랙트에서 특정 요구 조건에 따라 자동으로 설정하는 값이라고 한다. 이 글은 솔라나에서 Semi-Fungible Token 과 관련된 글이기도 하다. tokenStandard 러스트 구조체 pub enum TokenStandard { NonFungible, // This is a master edition FungibleAsset, // A token w..