본문 바로가기

Block Chain40

[Solidity] 비트 수 세기 SWAR (SIMD Within A Register) 알고리즘 || Algorithm | BitMask | Binary || 안녕하세요. 스마트 컨트렉트 개발자 개발이 체질의 최원혁입니다. 이번 게시글에서 Solidity에서 활용할 수 있는 SWAR (SIMD Within A Register) 알고리즘에 대해 알아보겠습니다. SWAR 알고리즘 이란? SWAR 알고리즘은 2진수 데이터에서 활성화된 1의 개수를 세는 것입니다. 비트 연산은 프로그래밍에서 시간 복잡도를 상당히 낮춰주기 때문에, 매우 우수한 성능을 발휘할 수 있습니다. SWAR 알고리즘은 비트 연산을 활용한 알고리즘입니다. Solidity에 적용할 경우, Smart Contract의 특성 상 발생하는 가스비(수수료)에 최적화된 로직을 만들 수 있습니다. SWAR 알고리즘은 다양한 종류가 있습니다. 그 중에서도 0x3F 모듈러스 연산을 활용한 방법에 대해 알아보겠습니다.. 2023. 3. 3.
[DeFi Series] Staking Reward 컨트렉트 파헤치기 || Math | Algorithm || (1) 안녕하세요. 스마트컨트렉트 개발자 개발이 체질의 최원혁입니다. 이번 게시글에서 소개해드릴 지분증명에 의한 스테이킹(Staking) 리워드(Reward) Smart Contract입니다. 스테이킹 리워드 컨트랙트는 유저에게 추가적인 수익과 더불어 토큰 가격을 상승시켜주는 컨텐츠입니다. 또한, 프로젝트 주최자는 상장 초기에 가격을 방어할 수 있으므로 양쪽 모두에게 이익을 가져다 주는 컨텐츠입니다. 이러한 이유로 프로젝트 초기에 많은 DApp에서 활용됩니다. 스테이킹을 진행하는 이유? 스테이킹이란, 특정 코인 또는 토큰을 일정 기간 동안 스마트 컨트랙트에 예치(Deposit)하여 락업(Lock Up)을 하는 것으로, 보상이 주어지는 탈중앙화된 금융 프로토콜(DeFi)입니다. 이때 보상(Reward)은 예치된 .. 2023. 2. 27.
[Hack Series] 51% 공격이란? || 고아 블록 Orphan Blocks | 체인재구성 Chain Reorganization || 51% 공격 이란? 51% 공격은 단일 주체나 조직이 다수의 해시 파워를 제어하여 네트워크를 중단시킬 수 있는 공격입니다. 블록체인에 데이터를 저장하는 방식은, 채굴자라고 불리는 사람들이 저장시킬 데이터를 만들고, 다수가 데이터를 검증하여 문제가 없다고 판단이 되면, 해당 데이터를 블록체인에 저장합니다. 이때 만약 51%이상의 단일 주체 또는 조직이 본인들이 만든 변조된 데이터를 본인들이 검증한 후, 블록체인에 저장시킬 경우, 블록체인의 통제권을 갖게 되는 것입니다. 블록체인의 통제권을 갖게 되면 데이터 위변조뿐만 아니라, 트랜잭션의 일부를 승인하지 못하게 하고, 채굴작업의 보상을 독점할 수 있습니다. ※ 그러나 51% 공격 주체는 채굴 보상을 변경하거나 코인을 새롭게 생성하거나, 소유가 아닌 코인을 가.. 2023. 2. 25.
[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.
반응형