From 3d30e03168032fb68799bc0166d381361c3f1c66 Mon Sep 17 00:00:00 2001 From: Lucy Oh <56earls@gmail.com> Date: Fri, 13 Dec 2024 22:01:03 +0900 Subject: [PATCH] =?UTF-8?q?add:=201-4=EA=B0=95=20geth,=20solidity=20?= =?UTF-8?q?=EA=B8=B0=EB=B3=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _posts/2024-12-13-geth-command.md | 52 ++++++++++++++++++ _posts/2024-12-13-install-solidity.md | 32 +++++++++++ _posts/2024-12-13-private-ethereum-network.md | 2 +- assets/img/2024-12-13-geth-command/0.png | Bin 0 -> 16538 bytes 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 _posts/2024-12-13-geth-command.md create mode 100644 _posts/2024-12-13-install-solidity.md create mode 100644 assets/img/2024-12-13-geth-command/0.png diff --git a/_posts/2024-12-13-geth-command.md b/_posts/2024-12-13-geth-command.md new file mode 100644 index 0000000..df72dea --- /dev/null +++ b/_posts/2024-12-13-geth-command.md @@ -0,0 +1,52 @@ +--- +title: Geth 기본 명령어 +date: 2024-12-13 20:42:00 +/-TTTT +categories: [Security, Blockchain] +tags: [security, blockchain, geth] +math: true +--- + +## Ethereum 실행하기 + +```shell +% geth --datadir {경로} console +``` + +## Geth에서 자주 쓰이는 명령어 + +### 계좌 정보 + +모든 계좌 확인하기 +``` +> eth.accounts +``` + +특정 계좌 확인하기 +``` +> eth.accounts[숫자] +``` + +잔고 확인하기 +``` +> eth.getBalance(eth.accounts[숫자]) +``` + +### 계좌 잠금을 풀 때 + +``` +> personal.unlockAccount(eth.accounts[숫자]) +> personal.unlockAccount(eth.accounts[숫자], "기존 비밀번호") +``` + +### 채굴 + +``` +> miner.start() +> miner.stop() +``` + +채굴 전엔 잔액이 0이었으나, 채굴 후엔 아래 사진과 같이 잔액이 늘어난 것을 확인할 수 있음. + +![img](/assets/img/2024-12-13-geth-command/0.png){: w="500" }{: .shadow } + +- 0번째 계좌만 잔액이 늘어난 이유는 기본 계좌가 0번 계좌로 설정되어 있기 때문임. \ No newline at end of file diff --git a/_posts/2024-12-13-install-solidity.md b/_posts/2024-12-13-install-solidity.md new file mode 100644 index 0000000..6720e5b --- /dev/null +++ b/_posts/2024-12-13-install-solidity.md @@ -0,0 +1,32 @@ +--- +title: Solidity 설치하기 +date: 2024-12-13 19:19:00 +/-TTTT +categories: [Security, Blockchain] +tags: [security, blockchain, solidity, ethereum] +math: true +--- + +## Solidity Compiler 설치하기 + +npm을 이용하여 설치해보자. + +```shell +% sudo npm install -g solc +``` + +## 프로그래밍 예제 + +> VSC에서 `hello.sol` 파일을 만들고 프로그래밍 해보자. + +``` +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +contract hello{ + string message = "Hello world!"; + function showMsg() public view returns (string memory){ + return message; + } +} +``` + diff --git a/_posts/2024-12-13-private-ethereum-network.md b/_posts/2024-12-13-private-ethereum-network.md index ed7a5e0..492c681 100644 --- a/_posts/2024-12-13-private-ethereum-network.md +++ b/_posts/2024-12-13-private-ethereum-network.md @@ -124,7 +124,7 @@ INFO [12-13|19:00:41.038] Exported existing genesis block ### Genesis Block 생성하기 ```shell -% geth --datadir {경로} init {json 파일 위치} +% geth --datadir {경로} init {경로/파일이름.json} ``` ### Ethereum 실행하기 diff --git a/assets/img/2024-12-13-geth-command/0.png b/assets/img/2024-12-13-geth-command/0.png new file mode 100644 index 0000000000000000000000000000000000000000..3185a816dfab02cef8e4195172be6845dfc47989 GIT binary patch literal 16538 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