본문 바로가기
2023. 4. 27. SVG 이미지 NFT에 넣어서 민팅하기 본 포스팅은 2022.08.26에 작성된 이전 블로그의 포스팅을 아카이빙 용으로 가져온 것입니다. https://myumyu-ming.tistory.com/105 Quinoa 프로토콜에서는 Vault와 연관된 펀드 상품을 구매할 때, 구매한 증거로 NFT를 발급해 준다. 이 NFT의 이미지는 단순한 정적인 이미지가 아니라 Vault의 현재 상태나 Vault의 특징을 반영하는 이미지이다. 즉, on-chain 상에 있는 Vault의 정보를 NFT에 반영하게 해서 자동적으로 NFT 이미지를 만드는 것이다. 이를 위해 SVG 이미지를 이용하기로 했는데, SVG가 뭔지도 잘 모르고 써본 적도 없기 때문에 연습이 필요했다. 아직 NFT 디자인이 나오기 전이기 때문에, 디자인이 나오면 바로 Quinoa 컨트랙트의 ..
2023. 4. 27. Babylon Finance 본 포스팅은 2022.08.24에 작성된 이전 블로그의 TIL 포스팅을 아카이빙 용으로 가져온 것입니다. 📍 [2023.04.27 추가] 현재 Babylon은 운영되고 있지 않으니 참고 부탁드립니다📍 https://myumyu-ming.tistory.com/103 현재 진행하고 있는 Quinoa 프로젝트의 목표와 유사한 Babylon Finance를 한 번 살펴 보았다. Babylon은 커뮤니티가 주도하는 자산 관리 프로토콜이다. 이더리움을 기반으로 하고 있으며, 2 계층의 거버넌스 시스템을 가지고 있다. 우선 Babylon의 거버넌스 토큰인 $BABL 홀더들은 프로토콜에 대해 제안하고 투표하는 등의 거버넌스 활동을 할 수 있다. 또한, Babylon에서는 Garden이라고 하는 투자 커뮤니티를 만든 다..
2023. 4. 23. Proxy Pattern & Upgradeable Contract 블록체인에 한 번 저장된 데이터는 변경이나 삭제가 불가능합니다. 물론 특정 컨트랙트의 변수 값을 새로운 값으로 덮어씌울 수는 있지만 이전에 어떤 값이었는지 그 기록 자체가 변경되진 않습니다. 스마트 컨트랙트도 역시 블록체인에 저장되는 데이터이기 때문에 한 번 배포된 코드의 내용은 바꿀 수 없습니다. 다만, 소프트웨어 개발에 있어서 버그를 수정하고, 기능 업그레이드를 위해 코드를 수정하는 것은 중요한 일입니다. 이를 해결하기 위해 스마트 컨트랙트에 Proxy pattern을 이용해 업그레이드가 가능한 컨트랙트(Upgradeable Contract)를 구현할 수 있습니다. 해당 포스팅은 이전 포스팅 [Smart contract의 code size를 줄이는 방법]과 이어집니다. Smart contract의 c..
2023. 4. 18. 프로토콜 캠프(Protocol camp) 2기 후기 본 포스팅은 이전 블로그에 작성 했던 내용을 아카이빙 용으로 가져온 것입니다. https://myumyu-ming.tistory.com/107 프로토콜 캠프 3기 모집 소식을 듣고 부랴부랴 쓰는 프캠 2기 수료생 회고입니다. ㅎㅎ 사실 3기 모집은 한참 전부터 시작했었지만, 복학하랴 과제하랴 이사하랴 일에 치이다 이제야 작성하네요. 🥺 제가 2기 신청할 때에 궁금해서 이것 저것 검색해 보았지만, 잘 나오지 않아서 눈물짓던 때가 기억나는군요.. 그래서 혹시 신청하실 3기 분들을 위해서 조금 자세하게 회고록을 작성해보고자 합니다. 프로토콜 캠프에 합격하기까지 먼저, 저는 프로토콜 캠프를 지원하기 전 학교를 휴학하고 있던 상황이었고, 코드 스테이츠의 블록체인 엔지니어링 부트캠프 2기를 수료한 상태였습니다. 프..
2023. 4. 18. Error Report | Balancer에서 joinPool 할 때 <BAL#103> 에러 해결 문제 상황 Balancer는 분산화된 자동화 마켓 메이커(AMM; Automated Martket Maker)로, 여러 종류의 pool을 통합한 확장 가능한 프로토콜입니다. Balancer에서 사용할 수 있는 Pool의 종류는 Weighted Pools, Composable Stable Pools, Boosted Pools 등 여러 종류가 있는데요. 저는 스마트 컨트랙트 상에서 wstETH와 WETH를 사용하는 Composable Stable Pool에 유동성을 추가하는 joinPool 함수를 호출하다가 에러를 마주쳤습니다. Error: VM Exception while processing transaction: reverted with reason string 'BAL#103' at . (0x65fe9..
2023. 4. 13. Hardhat Test | 테스트 중간에 Hardhat network를 reset 하기 Hardhat에서는 Hardhat Network Helpers libaray를 제공하는데, 이를 이용하면 Hardhat에서 test code를 작성하고 실행할 때 네트워크 상황(블록 상황)을 제어할 수 있기 때문에 꽤 유용합니다. 컨트랙트 테스트를 실행할 때 유닛 별로는 각각 독립적으로 작동하지만 결국 블록체인 네트워크 상황 하에서 테스트가 진행되기 때문에 이전 테스트 유닛에서 네트워크의 state가 변경되고 새로운 블록이 생성된 경우에는 이전 테스트 때 변경된 상태가 다음 테스트 유닛에서도 영향을 줄 수 있습니다. 저는 이런 상황을 꽤 많이 직면했는데요. 항상 chai의 only 메서드를 이용해서 test를 진행하다가 이번에 Hardhat Network Helpers를 통해 실제 테스트 전에 네트워크를..
2023. 4. 11. 2023 이드콘 코리아(Ethcon Korea) 운영위원 지원 후기 올해 9월, 이드콘 코리아가 서울에서 열릴 예정입니다. 지난 3월 31일까지 이드콘 코리아를 이끌어나갈 운영위원을 모집했었는데요. 제가 창업을 목표로 프로젝트를 진행하고 있기에 지원 할까말까 꽤 오래 생각해보다가 결국 후회해도 지원해보고 후회해보자는 마음으로 지원했습니다. ㅎㅎ Apply now as a Mentor/Speaker or Volunteer on our website and let's create this conference together! Mentor/Speaker: https://t.co/QBHFnGiPqY Volunteer: https://t.co/2uO8ChIWfL — ethconKorea (@ethconkr) March 5, 2023 모집 분야는 DEV & Engineering, ..
2023. 4. 10. Smart contract의 code size를 줄이는 방법 EVM에서 스마트 컨트랙트로 작성 가능한 크기는 약 24.000 KiB로 한계가 있습니다. solidity optimizer의 runs 옵션을 이용해 배포할 때의 코드 크기를 어느 정도 줄일 수 있기는 하지만, 이 역시 무한정으로 줄일 수 있는 것이 아니기에 이 외에도 어떻게 스마트 컨트랙트의 코드 크기를 줄일 수 있을지 고민하는 것이 중요합니다. 해당 포스팅은 이전 포스팅 [Solidity Optimizer의 runs 옵션 이해하기]와 이어집니다. Solidity Optimizer의 runs 옵션 이해하기 스마트 컨트랙트를 작성한 후에 컴파일/배포하다 보면, 컨트랙트가 너무 크다는 경고를 마주할 때가 있습니다. Warning: 1 contracts exceed the size limit for main..
2023. 4. 4. Hardhat을 통해 Polygon Test network에서 swap test 진행하기 ERC20 토큰을 주고받는 스마트 컨트랙트를 작성하다 보면 swap이 필요한 순간들이 옵니다. 한 컨트랙트 내에서 A token을 B token으로 변환해야 하는 경우들이죠. 보통 이러한 swap 로직은 스스로 구현하기보다는 기존에 존재하고 있는 swap 서비스들의 contract를 import 하여 작성합니다. 예를 들어, Ethereum 네트워크에서는 Uniswap의 contract를 가져와 컨트랙트 내에서 swap을 진행할 수 있고, Polygon 네트워크에서는 Quickswap의 contract를 가져와 swap을 진행할 수 있습니다. 스마트 컨트랙트를 모두 작성한 후에는 Main network에 배포할 수 있는데요. 한 번 배포되면 수정할 수 없다보니 실제 배포 전에 철저하게 테스트를 진행하는 ..
2023. 3. 29. Ethers.js를 이용해서 Event logging하기 Solidity를 이용해서 스마트 컨트랙트를 작성할 때에 중요한 개념 중 하나는 바로 event입니다. 스마트 컨트랙트에서 event는 어떠한 특정 행동이 일어났음을 알려주는 지표인데요. 외부에서는 이 event를 구독(listen)하면서 대기하다가 해당 event가 발생하면(emit) 이에 알맞은 액션을 취하거나, event에 포함되어 있는 정보들을 분석하여 필요한 값을 추출할 수도 있습니다. 즉, event를 통해서 블록체인 상에 존재하는 스마트 컨트랙트와 외부 환경(ex. 유저 인터페이스)이 서로 상호작용할 수 있는 것이죠. 혹은 스마트 컨트랙트에서 발생한 event들은 모두 블록체인 상에 저장되므로 일종의 기록 용도로도 사용할 수 있습니다. 이번 포스팅에서는 ethers.js를 이용하여 블록체인에..