# Geth

Solidity ^0.8.0 - ABI Coder v2
ABI Coder v2가 기본적으로 활성화되어 있습니다. > ABI는 Application Binary Interface의 약자입니다. > soliditylang.org - abi-coder-pragma ABI coder v2는 기본적으로 활성화되어 있습니다. pragma abicoder v1; 키워드를 사용하여 이전 버전처럼 동작하도록 선택할 수 있습니다. 이전 버전에서는 ABI coder v2를 활성화하기 위해 pragma experimantal ABIEncoderV2; 를 사용했지만 더 이상 사용되지 않으며 효과가 없습니다. 명시적으로 사용하려면 pragma abicoder v2;를 대신 사용하세요 ABI coder v2는 v1보다 더 많은 데이터 Type을 지원
polygon - run a full node
폴리곤 2개의 레이어로 구성. Heimdall and Bor vote contract https://solidity-kr.readthedocs.io/ko/latest/solidity-by-example.html https://gist.github.com/maheshmurthy/3da385a42678c3e36a8328cbe47cae5b https://www.linkedin.com/pulse/election-voting-dapp-using-smart-contracts-block-part-vemulakonda-1f/ 폴리곤 컨트렉트 배포 폴리곤 컨트렉트는 이더리움 컨트렉트와 호환이 되기 때문에 솔리디티를 사용한 컨트렉트 작성후 배포하면 된다. 메타마스크를 사용해서 배포를 해도 되고 truffle과 같은 프레임워크 사용해도 좋다. > https://wiki.polygon.technology/docs/tools/ethereum/truffle 참고 1

geth - 모니터링 붙이기
필수 geth 설치. 도커 설치 1 influxdb 문서에는 influxDB 1.x 버전으로 작성되어 있다. > 2.x 버전은 기본적으로 gui가 제공된다. 나중에 바꾸자 2 grafana 3 prometheus docker prometheus.yml 시작 위 도커 셋다 실행 후 프로메테우스 포트로 접근하면 gui 페이지 확인 가능. 초기 아이디 비밀번호는 admin 프로메테우스에서 제공하는 geth 대시보드를 import 해서 사용하자. > https://grafana.com/grafana/dashboards/13877-single-geth-dashboard/ 알림도 된다고 한다. 나중에 해본다. > https://grafana.com/docs/grafana/latest/alerting/ 참고 https://geth.ethereum.org/docs/monitoring/dashboards
geth - poa rewards
/go-ethereum/core/state_processor.go StateProcessor.Process() 블록처리하면서 applyTransaction를 실행 후 usedGas를 반환하며 블록 보상? go-ethereum/core/blockchain.go insertChain 위 반환받은 가스를 ValidateState에 줌. POA에서 지불된 가스 비용은 소각되지않고 sealer에게 모아진다. 참고 https://ethereum.stackexchange.com/questions/66034/is-gas-burned-in-a-poa-network/66094#66094 https://github.com/ethereum/EIPs/issues/225#issuecomment-428911386
goquorum - private ibft
1 quorum은 geth fork 기본적인 geth 명령와 비슷하지만 기존에 사용하던 geth를 사용하면 안된다. https://github.com/Consensys/quorum.git 을 clone 후 build 해서 사용해야 한다. 나 같은 경우 qgeth로 PATH에 등록해서 사용 중이다. 2 기본적으로 가스비 0. Quorum에서 기본값으로 가스비는 무료다. https://docs.goquorum.consensys.net/concepts/free-gas-network 그렇다고 가스비 설정이 안되는 것은 아니다. 가스비 설정 genesis 파일에서 enableGasPriceBlock 옵션 설정. * 옵션을 재 설정하고 시작하는 경우 geth init으로 재실행 해주어야 한다. https://docs.goquorum.consensys.net/concepts/gas-enabled-network 문서에 genesis.json
Ethereum - erigon client 설치 및 sepolia testnet snapshot
개요 이더리움 생태계에서 사용하는 클라이언트가 Geth로 집중되어 있습니다. 이에 대해서 이더리움 재단도 심각성을 느끼고 있어서 (2023/05/17 링크 추가) https://ethereum.org/en/developers/docs/nodes-and-clients/client-diversity/, https://clientdiversity.org/ 에 관련 아티클을 작성해 주었습니다. 이를 위해 erigon 클라이언트를 사용해보려고 합니다. 문서가 github와 issues에 밖에 없는 것 같습니다.. 관련 자료가 많이 없어서 저도 헤매고 있습니다. 틀린점도 있을 수 있고, 잘못된 점이 있을 수 있다는 점 알아주시면 감사하겠습니다. 최대한 보완하겠습니다. erigon client 설치 [https://github.com/ledgerwatch/erigon](https://github.com/ledgerwat
window에서 docker 통해 ubuntu 올리기 간단정리
1. https://www.docker.com/ docker 다운로드 2. WSL 다운로드 참고 (https://learn.microsoft.com/ko-kr/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package) dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart Linux용 Windows 하위 시스템 사용 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart Virtual Machine 기능 사용 Linux 커널 업데이트 패키지 다운로드 http

TIL 36 - 스마트 컨트랙트란?
스마트 컨트랙트를 설명할 수 있다. 블록체인 네트워크에 호스팅되고 실행되는 프로그램이다. 조건을 지정해두고, 해당 조건이 충족되면 미리 정해둔 계약을 이행하는 방식으로 코드를 작성한다. 스마트 컨트랙트의 역사를 알 수 있다. 1994년 닉재보(Nick Szabo)에 의해 만들어졌다. > "계약 조건을 실행하는 전산화된 트랜잭션 프로토콜"은 "일반적인 계약 조건을 만족하고, 악의적이거나 우발적인 예외를 최소화하며, 신뢰할만한 중개자의 필요성을 최소화하는 것"을 목표로 한다. > 닉 재보는 스마트 컨트랙트를 위한 비트 골드를 제안했으나, 기술적 한계로 인해 실제로 구현되지는 못했다. 스마트 컨트랙트를 실제로 지원하기 시작한 첫 화폐는 비트코인이다. 스크립트 언어를 사용하여 화폐 거래와 관련된 특정 로직을 설정할 수 있다. 본질적으로 비트코인은 전자 화폐를 중점으로 둔 시스템이기에 제한적인 프로그래밍만 가능했다. 이후 프로그래밍이 가능한 이더리움이라는 블록체인이 등

Geth(2) - NFT 이벤트 리스닝(ERC-721, ERC-1155)
깃허브 참고 based on Window11 Geth 실행 이전 글 참고 Geth (1) - 설치 및 실행 아래 사항은 Geth를 실행한 상태에서 진행해야한다. Web3.js 설정 설치는 npm으로. 디렉토리 하나 만들어서 해당 코드 실행하고 js파일이 없다면 index.js 생성 1. 버전 확인 index.js 에서 다시 터미널에서 실행하면 버전 정보가 나온다. 이때 나오는 버전에 맞는 docs를 참고할 것. (위가 1.x 버전, 아래가 4.x버전, 나는 1.8.1 버전을 사용했다.) [web3.js - Ethereum JavaScript API - web3.js 1.0.0 documenta

Geth (1) - 설치 및 실행
based on Window 1. Geth 설치 Installing Geth | go-ethereum 해당 링크를 통해 접속하면 운영체제에 따라 설치하고 빌드할 수 있는 방법이 있다. 설치 Downloads | go-ethereum 해당 링크에서 윈도우에 맞는 geth를 설치한다. PATH는 자동으로 설정되며 안에서 developer tools를 설치할지 여부를 물어본다. cmd에서 geth —version을 쳤을때 동작하면 완료 빌드 빌드를 위해서는 3가지를 미리 설치

geth 계정생성, 트랜잭션 및 채굴
🤨 What is Geth? > From. 이더리움 공식 홈페이지 Ethereuim is a decentralized platform that runs smart contracts: applications that run exactly as programmed without any possibility of downtime, censorship, fraud or third party interference. > 이더리움이란 스마트 계약을 실행할 수 있는 플랫폼입니다. go, c++, python 등 다양한 언어로 이더리움을 구동할 수 있는 클라이언트가 개발되고 있으며 현재 가장 많이 사용되는 클라이언트가 go 언어로 개발된

Geth 사용하기 [TIL / 이더리움]
ethereum banner Geth를 사용하여 임의의 테스트넷을 만들어 본다. 과정 1. Geth 설치 도커로 새로운 ubuntu 환경을 만들어 사용해줬다. Geth를 돌리기 위한 환경설정은 다음과 같다. 이는 우선 도커로 실행되고 있는 ubuntu 가상환경의 터미널을 이용하고 있다는 가정에서 시작된다. [geth 설치] 2. 테스트넷 설정 우선 git으로 clone 해온 go-ethereum 으로 디렉터리를 옮긴다. 테스트넷을 만들 것이기 때문에 새로운 테스트넷에 필요한 제네시스 블록 정보를 저장하는 파일을 만들어준다. [genesis.json 파일 생성하기] [genesis 정보에 들어갈 계정 생성하기] [genesis 파일 접근하기] **

geth trie insert
우선 trie에서 사용되는 node들을 살펴보자 trie 패키지에의 node는 interface 타입이다. 구현은 다음과 같이 네 종류가 존재한다. shortNode는 key/val 형식이다. Val에는 fullNode나 hashnode,valuenode가 들어갈 수 있다. fullNode는 branch 노드이다. 0~15까지의 분기가 존재하고, 16은 value를 저장한다. 어떻게 작동할까? Update는 tryUpdate(key, value []byte)를 호출한다. insert는 내부에서 재귀적으로 호출된다. 여기서 key/value를 insert 할 때마다 구조가 trie 구조가 변경될 수 있다.(새로운 branch 생성) 이제 다시 테스트 코드의 코드를 한 줄씩 살펴보자 updateString(trie, "doe", "reindeer") 처음 호출에서 root는 nil이기 때문에 insert 메서드
geth rlp
rlp 방식을 사용하는 이유 구현의 단순성과 언제나 일관된 바이트 형태를 보장하기 때문에 사용한다. key/value 맵 구조는 순서가 정해져 있지 않다. 따라서 데이터의 순서에 따라 결과가 달라질 수 있다. 그래서 인코딩에 사용할 수 없다. float의 경우는 어디까지 소수점을 적용할지, 올림, 반올림은 어떻게 처리할지 등등 이슈가 존재한다. 따라서 항상 일관된 결괏값을 보장하기 위해서 rlp 방식을 이용한다. golnag으로 작성한 example
geth-Peer로 등록되는 과정
Peer로 등록되는 과정을 살펴보자 (srv *Server) Start() 메서드에서 시작된다 setupDiscovery에서 ListenV4를 호출하고 ListenV4는 newTable을 호출한다. newTable은 Table struct를 초기화하고 loadSeedNodes를 호출하여 db에 저장된 seed node를 테이블에 저장한다. 이제 setupDialScheduler()를 살펴보자 위에서 발견한 db에서 발견한 seednode들을 사용한다. newDialScheduler는srv.discmix의 seednode들을 이용하여 goroutine 을 실행한다. readNodes에서는 seednode를 nodesIn 채널에 넣어주고, loop에서는 이 채널에서 나온 node를 처리한다. startDial을 살펴보자 dialTask.dialer는 인터페이스 타입이고 여기서 구현체는 tcpDialer이다. d
geth handshake flow
흐름을 따라가보자 SetupConn에서 srv.setupConn을 호출 잠시 ECIES를 알아보자 이더리움 공식 ECIES doEncHandshake에서 실제 handshke 까지 살펴보자 위의 과정을 거치면 Adding p2p peer

mac OS에서 geth로 이더리움 노드 구성하기
💻 작업 환경 📡 geth란 >Go Ethereum의 약자로 이더리움 구현 프로토콜 중 하나이며 Go로 개발되었다. Json-rpc 서버 및 대화식 콘솔의 세가지 인터페이스를 제공한다. 💽 geth 설치 > 본 작업엔 Homebrew가 필요하다. 설치를 원한다면 아래 글을 참고. https://velog.io/@mng051/Homebrew 1. 아래 주소에서 geth 바이너리 압축 파일을 다운로드 한다. https://geth.ethereum.org/downloads/ 2. 압축을 해제하고 geth를 /usr/local/bin/ 으로 옮긴다. 은 이더리움 네트워크상의 모든 참여자가 합의하는 상태를 담고 있는 가상의 컴퓨터이다. 어떤 참여자든 트랜잭션의 처리를 위해 EVM에 임의의 코드를 실행하도록 요청할 수 있으며, 이는 EVM의 상태를 바꾼다. 이더리움 노드는 EVM 상태를 저장하고 있는 실제 머신을 말한다. 네트워크상에서 블록체인 데이터를 읽거나 트랜잭션을 보내기 위해서는 노드와 연결되어야만 한다. 노드는 다른 노드와 EVM 상태 및 상태 변화 정보를 주고받으며, 모든 노드의 집합은 곧 이더리움 네트워크가 된다. Geth로 Private Network 구축하기 > 이더리움 노드를 컴퓨터에서 실행하기 위해서는 이더리움 클라이언트 애플리케이션이 필요하다. 이 글에서는 GethGo Ethereum를 이용해 프라이빗 네트워크를 구축해본다. > > ⚙️ VE

[section4_블록체인 기술 실습] 지갑의 사용과 지갑 개발
Achievement Goals 지갑의 종류를 설명할 수 있다. 이더리움 또는 클레이튼 기반의 지갑을 구분할 수 있다. 메타마스크 지갑에서 네트워크를 변경할 수 있다. 마이이더월렛을 사용할 수 있다. 하드월렛을 연동할 수 있다. 리눅스 CLI를 통해 지갑과 키를 관리하고, 사용할 수 있다. HD 월렛과 니모닉 월렛을 이해할 수 있다. 니모닉 코드를 이용하여 니모닉 월렛을 개발할 수 있다. 니모닉 월렛과 HD 월렛의 차이를 이해할 수 있다. 1. 지갑의 종류 👛 지갑의 종류 알아보기 📌 스마트 컨트랙트 지갑이란? > - 스마트컨트랙트 기능을 통해 고유한 능력을 가진 지갑. 사용자를 위한 추가 보안 및 복구 기능을 사용할 수 있다 📌📌 스마트 컨트랙트 지갑의 특징? > - 2단계 인증 : 추가 보안 기능 ATM과 같은 인출 제한 : 트랜잭션 금액 제한 설정 **화이트리스트 및

프라이빗 메인넷 구축(Geth puppeth).
본 글은 Ethereum 기반의 private network를 구축하기 위한 기본적인 내용을 담고 있다. 클라이언트는 Geth(go-ethereum)이 사용되었다. 서론 프라이빗 네트워크를 왜 빌드하는가? 보안 블록체인을 사용하는 많은 이들은 프라이빗한 정보를 공개된 퍼블릭 체인에 보관하는 것보다 안전한 곳에 보관하려고 한다. 이것이 기업들이 자체 메인넷을 구축하는 이유이다. 동시에 메인넷을 구축한 이들은 누가 네트워크에 접근하는지 알고자 한다. 또한 이들은 원활한 네트워크 환경조성을 위해 때에 따라 네트워크와 상호작용하는 노드들을 제어하고자 한다. 네트워크 환경 기존의 블록체인은 확인과 검증에 집중하여 마이닝 속도는 느린 편이었다. 비트코인은 블록당 10분, 이더리움은 12~13초가 걸린다. 이는 송출금 혹은 dApp 작동에 있어 상당한 불편을 초래할 수 있다. 시장이 더 빠른 속도를 원하는 것은 자연스러운 수순이었다. 또한 기업, 개인