본문 바로가기

Block Chain/Solidity12

[Solidity] 스마트컨트렉트 함수 호출 Call() || Solidity 0.8 | ethers.js | payload || 안녕하세요. 스마트컨트렉트 개발자 개발의 체질 최원혁입니다. 이번 게시글에서는 EVM 기반의 블록체인 네트워크에서 스마트컨트렉트의 함수가 호출되는 방법을 알아보고 Solidity의 Call() 함수에 를 활용하여 실습을 해보겠습니다. # 1. 트랜잭션의 데이터 페이로드 전달 트랜잭션에는 값(value)과 데이터(data)라는 2개의 필드를 포함하며 이를 페이로드(payload)라고 합니다. 값만 있는 경우 : 이더 지급(payment) 데이터만 있는 경우 : 스마트컨트렉트 호출 둘다 있는 경우 : 이더 지급 + 스마트컨트렉트 호출 트랜잭션은 크게 페이로드의 데이터 유무에 따라 위 3가지 형태의 목적을 갖게 됩니다. 이번 시간은 페이로드에 데이터를 담아 스마트컨트렉트의 함수를 호출하는 과정에 대해 알아보겠.. 2023. 5. 7.
[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.
[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.
[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.
[Solidity] Array Memory에서 사용하는 방법 || Solidity 0.8 || 안녕하세요. 스마트 컨트렉트 개발자 개발이 체질의 최원혁입니다. Solidity는 변수를 정할 때, 데이터가 저장되는 위치를 정의해야 합니다. EVM은 상태(States) 변수와 지역(Local) 변수 두 종류로 나뉩니다. 상태(States) 변수는 EVM의 Storage에 데이터가 저장되며, 스마트컨트렉트의 Data Storage에 보존됩니다. 지역(Local) 변수는 Memory에 저장되는 데이터로 EVM의 런타임이 실행되는 동안 저장되며, 실행이 끝나면 살아지는 휘발성 데이터입니다. EVM에서 함수 외부의 공간에 변수를 정의하면, 자동으로 데이터는 Storage에 저장됩니다. 하지만 함수(function) 내부에서 정의한 변수는 Memory에 저장되어, 함수가 실행되는 동안만 데이터를 보관하고, 실.. 2022. 12. 17.
[Solidity] Unchecked || Optimization of gas cost | Solidity 0.8 || 이번 게시글에서는 Solidity의 표현식 문법 중 하나인 unchecked에 대해 알아보겠습니다. Solidity의 0.7 버젼 이하는 Overflow와 Underflow 애러를 검사해주지 않았습니다. Overflow : 컴퓨터의 정수 연산의 계산 결과가 허용 범위를 초과할 때 발생하는 오류. Underflow : Overflow의 반대되는 개념으로서 컴퓨터의 정수 연산의 결과가 취급할 수 있는 수의 범위보다 작을 때 발생하는 오류 > 위 함수 코드 보기 더보기 // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Unchecked { function getMaxUint() public pure returns(uint) { return ty.. 2022. 11. 27.
[Solidity] Event || emit | indexed | ethers | Solidity 0.8 || EVM의 Solidity는 데이터를 저장할 때, 두 가지 방법이 있습니다. Data Storage Layout : uint256, array, mapping 등 전역 변수를 만들어 Storage에 저장하는 방법 Event : Event emit을 활용하여 트랜잭션 로그(Logs)에 담아 블록에 저장하는 방법 이번 게시글에서 예제 코드를 통해 Solidity Event 사용방법과 이더스캔 그리고 JacaScript를 통해 트랜잭션 로그(Logs)를 조회하는 방법에 대해 알아보겠습니다. 📜 Solidity Event 란? Event는 Solidity의 문법 중 하나입니다. Event를 이용하여 블록에 데이터를 저장할 수 있고, EVM Logging 기능을 사용하여 저장된 트랜잭션에 저장된 데이터를 호출할 수.. 2022. 11. 21.
반응형