본문 바로가기

전체 글84

[(주)한미약품 사내 챗봇 아라 개발 프로젝트 회고록] 개발자로서 회사에 임하는 자세 안녕하세요. 스마트컨트렉트 개발자 최원혁입니다. 백엔드 개발자에서 블록체인 개발자로 전향하기 이전에, 한미약품의 사내 챗봇 아라 개발 프로젝트에 참여한 경험이 개발자로서 크게 성장하는 계기가 되었습니다. 이제 프로젝트를 되돌아보며 회고록을 작성해보고자 합니다. 한미약품의 프로젝트는 제 첫 프로젝트였으며, 개발자로 일한 지 얼마 되지 않았던 때였습니다. 이전에 서비스를 공개적으로 배포하고 운영한 적이 없어, 열정과 야망으로 일에 임해야 했습니다. 하지만 프로젝트는 예상치 못한 어려움에 직면했습니다. 프로젝트를 진행하는 PM 과장님이 개발 경력이 부족했고, 원래는 보험회사에서 계약 및 고객응대를 담당하셨기 때문에, 초보 개발자인 제가 개발을 책임져야 했습니다. 고객사와의 커뮤니케이션도 중요했지만, 개발자로 .. 2023. 2. 24.
[Solidity] Payable, Fallback and Receive || Solidity 0.8 || 안녕하세요. 스마트 컨트렉트 개발자 개발이 체질의 최원혁입니다. 요즘 앱개발 프로젝트 계약을 하게 돼서, 블로그 작성할 시간이 많이 없네요. 하루에 한두 시간씩 공부하면서 정리노트에 정리 중이니, 시간 내서 작성해 보도록 하겠습니다. 오늘은 Solidity의 Payable(), Fallback(), Receive() 함수에 대해 알아보겠습니다. Smart Contract가 이더리움에 베포가된다면, 이더리움 네트워크의 네이티브 코인(Native Coin)인 이더(Ether)는 Smart Contract를 통해 사용자 또는 컨트렉트에 전송할 수 있습니다. 해당 기능을 위해 Solidity에서 기능을 구현해야 합니다. 그 역할을 하는 게 Payable(), Fallback(), Receive() 함수입니다. .. 2023. 2. 16.
[Hack Series] 컨트렉트 주소를 지갑주소로 속이는 방법 || Solidity 0.8 | Zero Code Size || Web3 Hack Series : Fake Address( CA | EOA ) With Zero Code Size 안녕하세요. 스마트 컨트렉트 개발자 개발이 체질의 최원혁입니다. 이번 Web3 Hack 시리즈는 Smart Contract의 Zero Code Size를 이용하여 컨트렉트 주소(CA)를 지갑주소(EOA)로 속이는 방법에 대해 알아보겠습니다. Solidity에서 Smart Contract를 구현할 때, 지갑주소(EOA)와 컨트렉트 주소(CA)를 구분하여 로직은 구현하는 경우가 많습니다. 특히, 디파이(DeFi)의 플래시론(Flash Loan)을 구현할 때, 트랜잭션과 트랜잭션을 하나로 이어, 하나의 블록체인에 데이터를 저장시킬 때, 트리거를 지갑주소, 즉 사람이 직접 실행하게 구현할 때 사용되.. 2023. 1. 31.
[Solidity] 머클트리 Merkle Tree Root & Proof || Solidity 0.8 | Openzeppelin || 안녕하세요. 스마트 컨트렉트 개발자 개발이 체질의 최원혁입니다. 최근 2주 동안 코드스테이츠에서 진행한 커리어 챌린지 4기에 참여하게 되어 게시글 작성을 하지 못했네요. 이번 게시글에서 해당 프로젝트에서 사용했던 Merkle Tree Root & Proof 설명드리고자 합니다. ❓ What is Merkle Tree & Merkle Root 머클트리(Merkle Tree)란 해시함수 keccak256를 활용하여 여러 데이터를 하나의 해시값으로 나타내는 데이터 구조입니다. 쉽게 말해, 여러 개의 데이터를 하나의 bytes32 해시값으로 만드는 데이터 구조입니다. 머클트리 데이터는 해시함수의 특성상 압축된 데이터 중 하나라도 다르게 되면 결과값이 다르게 나타나게 됩니다(충돌저항성). 때문에 머클트리를 활용하.. 2023. 1. 29.
[Solidity] 지갑주소(EOA)와 컨트렉트 주소(CA) 구분하기 || Solidity 0.8 | isContract || 안녕하세요. 스마트 컨트렉트 개발자 개발이 체질의 최원혁입니다. 이번 게시글에서 Solidity에서 지갑 주소(EOA : Externally Owned Account)와 컨트렉트 주소(CA : Contract Address)를 구분하여 예외처리하는 방법에 대해 알아보겠습니다. ❓ What is isContract() Solidity로 구현하는 코드에서 Address type의 변수에 주소를 저장할 때, 지갑주소와 스마트컨트렉트 주소를 구분하여 예외처리가 되도록 코드를 짜야할 때가 있습니다. https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol GitHub - OpenZeppelin/open.. 2023. 1. 13.
[Solidity] 비트마스크(BitMask) 연산 || Solidity 0.8 | Operators || 안녕하세요. 스마트 컨트렉트 개발자 개발이 체질의 최원혁입니다. 이번 게시글에서 Solidity에서 활용할 수 있는 비트마스크(BitMask) 연산에 대해 알아보겠습니다. 비트마스크(BitMask) 란? 10진수를 2진수로 표현하여 연산을 처리하는 기법입니다. 비트는 2진수(binary digit)를 뜻하는 말로 컴퓨터에서 사용되는 데이터의 최소 단위이며, 주로 Low-level 언어에서 사용하는 연산 기법입니다. 비트연산은 동작하는 메모리의 크기를 직접 설정할 수 있기에 메모리 사용량이 적습니다. 이는 Solidity 관점에서 더 적은 가스비를 사용하여 코딩을 할 수 있다는 걸 의미합니다. 또한 비트연산은 0(1)로 동작하여 수행속도가 아주 빠르고 코드가 짧습니다. 10진수와 2진수의 관계 비트마스크란.. 2023. 1. 9.
[Ethernaut Challenge] Fallout 문제풀이 안녕하세요. 스마트컨트렉트 개발자 개발이 체질의 최원혁입니다. 오늘은 The Ethernaut 퀴즈 풀이 세 번째 "Fallout" 문제를 풀어보겠습니다. 🔎 이번 "Fallout"의 문제해석은 마지막 목차 (5)[문제해석]에서 다루겠습니다. (1) 베포 및 준비 먼저 페이지 하단에 [Get new instance]버튼을 눌러 해당 문제의 컨트렉트를 베포 합니다. 베포가 끝나면 F12(Chrom기준)을 눌러서 개발자모드를 실행시켜 주세요. 베포 된 컨트렉트의 주소를 확인할 수 있습니다. (1)사진처럼 Ethernaut에서 제공한 문제의 코드를 복사해서 (2)사진의 초록색 부분처럼 Remix에 붙여 넣습니다. (2)사진의 빨간색 부분처럼 환경설정(ENVIRONMENT)을 메타마스크로 바꿔줍니다. 베포 된 .. 2023. 1. 6.
[DeFi Series] Time Weighted Average Price(TWAP) 알고리즘 파헤치기 || Math | DeFi || 안녕하세요. 스마트컨트렉트 개발자 개발이 체질의 최원혁입니다. 이번 게시글에서 소개해드릴 DeFi Series는 Time Weighted Average Price(TWAP) 알고리즘입니다. TWAP란 풀어서 'Time Weighted Average Price' 이며 직역하면 '시간가중평균가격'입니다. 시시각각 변하는 가격을 주기적으로 기록하여 평균을 계산하는 공식으로, 주로 디지털 거래소 또는 탈중앙화 거래소(DEX)에서 디지털 자산의 가격을 조회할 때 사용됩니다. Example 암호화폐 거래소에서 MTK코인의 가격을 1초마다 기록하고 있습니다. 위 그래프를 설명드리자면, time(0~6)일 때 MTK의 가격은 price로 기록되고 있습니다. 여기서 TWAP란 time동안의 평균 price을 말합니다. .. 2023. 1. 2.
[DeFi Series] Uniswap V3 집중화된 유동성(Concentrated Liquidity) || Math | DeFi || 안녕하세요. 스마트컨트렉트 개발자 개발이 체질의 최원혁입니다. 이번 게시글에서 소개해드릴 DeFi Series는 Uniswap V3 업데이트의 핵심 집중화된 유동성(Concentrated Liquidity)입니다. 기존의 Uniswap은 두 가지 암호화폐를 거래할 수 있는 거래의 장을 형성하여 CPMM 함수로 자동으로 거래가 이뤄지는 AMM 방식의 거래 구조를 구현했습니다. 하지만 CPMM 함수는 구매자가 의도했던 가격과 실제 거래 가격 사이에 차이가 발생하며 구매자의 손해를 보는 일이 발생했습니다. 이런 현상을 슬리피지라고 하며, 슬리피지는 유동성 풀의 규모가 작은 곳에서 특히 심하게 발생했습니다. 이런 문제점을 Uniswap V2의 게으른 유동성(Lazy Liquidity)이라고 합니다. Uniswa.. 2022. 12. 30.
반응형