본문 바로가기

반응형

All

(40)
[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 에 의해 생성되지만 어떤 프로그램에게 전가된 ..
npm dependency 고정하기 솔라나 오픈소스를 이용하여 개발하던 중 발생하지 않았던 에러가 발생했다. src/solana-nft/commands/mint-nftV2.ts:26:3 - error TS2305: Module '"@solana/web3.js"' has no exported member 'TransactionCtorFields'.내가 참고하고자 하는 "@metaplex-foundation/mpl-token-metadata": "^2.1.1" 소스코드에서는 TransactionCtorFields 객체를 사용하고 있으며, 해당 npm 프로젝트 (fixed-price-sale) 에서는 "@solana/web3.js": "^1.37.0" 를 dependency 로 가지고 있었다. 나도 그래서 "@sol..
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..
node_modules 로컬 파일 바라보기 노드js 오픈소스로 개발을 하다보면 dependency 로 받아온 패키지로부터 에러 로그가 발생하곤 한다. 필자는 솔라나 민팅 프로그램을 만들면서 "@metaplex-foundation/mpl-token-metadata": "^2.1.1" 패키지를 사용하는데, 이 패키지의 dependency 로 "@metaplex-foundation/beet-solana": "^0.1.1" 패키지를 받아온다. 그리고 아래와 같은 에러가 발생했다. [Nest] 20081 - 05/16/2022, 2:14:10 PM ERROR [ExceptionsHandler] value.toBytes is not a function TypeError: value.toBytes is not a function at Object.write ..
파이썬 코딩스타일 Class _ convention class Price: def __init__(self, price): self._price = price def _double_price(self): return self._price * self_hidden_factor def get_double_price(self): return self._double_price() 모듈 내에서만 사용하는 private 클래스/함수/변수/메서드를 선언할 때 _ 으로 시작한다. from module import * 으로 임포트할 때 이 컨벤션으로 시작한 것들은 무시가 된다. 다만, weak internal use indicator 라고 부르며 직접 가져다가 쓰는것은 가능한 정도로 완전한 private 을 강조할 수는 없다. self ..
async 함수 throw catch sync 함수의 경우에 기본적인 try { functionA() } catch (e) { console.error(e) } 문을 사용하고, async 함수의 경우에는 Promise 를 해결하기 위해 functionB().catch(e) { console.error(e) } 처럼 핸들해줘야 한다.
트랜잭션 hash 를 가장 빨리 받는 방법 웹에서 지갑 어플리케이션을 통해 트랜잭션을 발생했다고 치자 (제발 그냥 그랬다고 치자) 트랜잭션이 정상적으로 종료되고 나발이고 내가 발생시킨 트랜잭션 hash 값을 최대한 빨리 화면에 뿌려주고 싶다. 어떡할래? web3.eth.sendTransaction().on() 등의 async 함수를 await 할 경우, async 함수를 강제 종료시키는 방법은 없다. (자바스크립트 언어의 특성) 방법은 내가 호출하고자 하는 web3 async 함수를 Promise 객체 안에 담는 것이다. addBlockChain: async(u, n, c, e) => { const web3 = new Web3(App.web3Provider); const signed = await web3.eth.accounts.signTrans..
msg.sender vs _msgSender() 솔리디티 코딩을 하다보면 어떤 contract 에서는 컨트랙트 호출자로 msg.sender 를 사용하고 어디에는 _msgSender() 함수를 사용한다. 외국 빡빡이 말에 의하면 컨트랙트 간에 인터널 트랜잭션을 사용할 때 전달자가 (relayer) 가 아닌 초기 호출자에 대한 정보를 받아오기 위함이다. 그렇다면 아래 코드는 왜쓰는걸까? require(tx.origin == _msgSender(), "Caller cannot be a contract."); 해당 함수는 컨트랙 어드레스가 호출하지 못하게하여 미연의 악용을 방지한다.