기본 프로젝트를 세팅하기 위한 방법은 아래에 링크를 참고 [이더리움] Hardhat 설치 후 TypeScript 프로젝트 생성하기Hardhat 기존 프로젝트에 Hardhat 설치 npm install --save-dev hardhat # npm install --save-dev hardhat npm WARN deprecated request-promise-native@1.0.9: request-promise-native has been deprecated because it extends the now deprecated request packageheun.tistory.com hardhat.config.ts 작성hardhat.config.ts는 Hardhat 프로젝트의 주요 설정 파일이다. 이 파일을 ..
sedsed 명령어는 stream editor의 약자로 주로 텍스트 스트림을 변환하거나 조작하기 위한 목적으로 사용되는 명령어다. 이를 통해 파일의 내용을 읽어서 패턴 매칭, 치환, 삭제 등의 다양한 작업을 수행할 수 있다. sed는 원본 파일을 직접 변경하지 않고, 그 결과를 표준 출력(stdout)으로 보내는 특징이 있습니다. 따라서 원본 파일을 변경하려면 리다이렉션을 사용하여 출력 결과를 파일에 저장해야 한다. sed 예시: old 문자열을 new로 치환sed 's/old/new/g' filenamefilename 파일의 내용 중 old라는 문자열을 new로 전체 치환하고 표준 출력으로 보낸다. 10번째 줄에서 20번째 줄까지 내용을 출력sed -n '10,20p' filename특정 범위의 줄..
오류 새로운 Ubuntu 서버를 세팅하고 난 후 apt update 명령어를 사용하니 다음과 같은 오류가 발생하였다. E: The repository 'file:/cdrom focal Release' no longer has a Release file. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details. 이 오류 내용은 Ubuntu 서버에서 apt를 사용하여 패키지를 업데이트하려고 할 때 특정 소스가 더 이상 유효하지 않거나 접근할 수..

리눅스 서버에 geth를 세팅하고, geth attach로 console에 접속해서 명령어를 쳐본 경험이 있을 것이다.geth attach geth.ipc해당 명령어로 자바스크립트 콘솔에 접속하게 되면 여러 개의 web3, eth 명령어를 통해 이더리움 네트워크와 상호작용할 수 있게 된다. geth attach 명렁어geth attach는 이미 실행 중인 이더리움 노드에 JavaScript 콘솔을 연결하는 데 사용된다. 노드의 상태를 확인하거나 개발 중인 dApp과 상호작용하거나, 블록체인과 직접적으로 상호작용하는 등 다양한 작업을 수행할 수 있다. consolecmd.go의 remoteConsole 함수는 사용자가 입력한 endpoint (대개는 IPC 파일 경로 혹은 HTTP endpoint)에 연..

Geth를 리눅스 서버에 세팅하고 동기화를 완료하게 되면, 다음과 같은 로그가 나오는 것을 확인할 수 있다. 이 로그는 우리가 올바르게 Geth를 세팅하고 블록체인과 동기화를 잘 진행하고 있다는 것을 알려준다. 하지만 이 로그들은 그저 빠르게 스크롤되는 글자들일뿐, 어떤 의미를 갖는지 이해하기 어려웠다. 따라서 이번 블로그 포스팅에서는 이 로그들이 어떤 정보를 담고 있는지, 그리고 우리가 이를 어떻게 해석하고 활용할 수 있는지에 대해 알아보려고 한다. 이를 위해 우리는 geth의 소스 코드를 직접 들여다보며 블록이 블록체인에 추가되는 과정에서 어떤 단계를 거치는지 그리고 이 과정에서 어떤 데이터가 로그로 남게 되는지 살펴보려고 한다. Imported new potential chain segment, C..

샤펠라 업그레이드란? 이더리움 2.0 Merge 이후에 이루어진 첫 번째 주요 업데이트이며, validator는 이더리움 네트워크에서 스테이킹된 이더리움을 처음으로 인출할 수 있게 됐다. 샤펠라 업그레이드는 이더리움의 핵심 개발자들이 'The Merge'를 활성화하고 네트워크의 에너지 소비를 줄이는 것을 목표로 하는 작업을 시작한 지 7개월 만에 이루어졌다. 이로써 이더리움의 환경적 영향력이 크게 감소했으며, 트랜잭션 수수료를 태우는 메커니즘 덕분에 순환 공급량이 대폭 감소했다. Shapella는 상하이와 카펠라를 조합한 말로, 두 가지 네트워크 업그레이드가 동시에 이루어질 것을 의미한다. 주요 내용? Shapella 업그레이드는 메인넷 계층인 합의 계층 (비컨 체인)과 실행 계층의 코드를 개선한다. 이..

원인 분석 geth 메인넷을 이용하여 3개의 서버에서 동기화를 진행하던 중, 흥미로운 현상을 발견했다. 3개의 서버 모두 동일한 블록 번호인 17034872에서 동기화가 멈추는 것이다. 고려해볼 수 있는 원인은 서버들이 모두 동일한 버전(geth + lighthouse)을 사용하고 있어, 버전 문제로 인한 동기화 중단일 수 있다는 의심을 해보았다. lighthouse 로그를 살펴보면 다음과 같은 로그가 반복되는 것을 확인할 수 있었다. May 09 13:26:45 ubuntu lighthouse[775758]: May 09 04:26:45.907 ERRO Error updating deposit contract cache error: Failed to get remote head and new block..
unchecked? Solidity에서 unchecked 문법은 스마트 컨트랙트에서 오버플로우(overflow)와 언더플로우(underflow) 검사를 명시적으로 생략하도록 지시하는 기능이다. unchecked 블록 내부의 코드는 컴파일러에 의해 오버플로와 언더플로 검사가 수행되지 않는다. 오버플로우? 언더플로우? 오버플로우(overflow)는 컴퓨터 프로그래밍에서 정수형 변수가 표현할 수 있는 값의 범위를 초과하여 발생하는 현상이다. 오버플로우가 발생하면 변수는 예상치 못한 값으로 변경되며 프로그램의 잘못된 동작이나 오류를 일으킬 수 있다. 또한 스마트 컨트랙트 보안의 취약점이 발생할 수 있다. 오버플로우는 주로 두 가지 상황에서 발생한다. 1. 두 정수의 덧셈 연산에서 합이 최대 표현 가능한 값보다 ..
mint() 예시 /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address..
스마트 컨트랙트에서 소유권을 관리하고 변경하는 방법에 대해 살펴보겠다. 이를 위해 OpenZeppelin의 Ownable.sol 컨트랙트에서 제공하는 세 가지 함수 renounceOwnership, transferOwnership을 사용한다. Ownable.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an accou..
ERC20 토큰 컨트랙트의 핵심 기능 중 하나는 토큰 소유자가 다른 사용자에게 자신의 토큰을 사용할 수 있는 권한을 부여하는 것이다. 이를 위해 ERC20 표준에는 approve와 allowance라는 두 가지 중요한 함수가 포함되어 있다. ERC20.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./IERC20Metadata.sol"; import "./Context.sol"; /** * @dev Implementation of the {IERC20} inter..
예시 'use strict'; const nconf = require('nconf'); const models_maria = require(nconf.get('models_maria')); module.exports = async function(outCallback) { try { await models_maria.db.sync(); outCallback(null, '==> MariaDb Connect Complete!!!\n'); } catch (err) { outCallback(err); } }; 모듈과 라이브러리 불러오기 필요한 모듈과 라이브러리를 불러온다. 여기서는 구성 관리를 위한 nconf 라이브러리와 MariaDB와의 연결을 관리하기 위한 사용자 정의 모듈 models_maria를 사용한다..