diff --git a/_posts/2024-12-17-geth-external-access.md b/_posts/2024-12-17-geth-external-access.md new file mode 100644 index 0000000..27d57b2 --- /dev/null +++ b/_posts/2024-12-17-geth-external-access.md @@ -0,0 +1,78 @@ +--- +title: 외부 Application에서 Geth에 연결 +date: 2024-12-17 11:54:00 +/-TTTT +categories: [Security, Blockchain] +tags: [security, blockchain, geth, ethereum] +math: true +--- + +## 작업 환경 + +- masOS M1 +- Geth Version: 1.10.17-stable +- Solidity Version: 0.8.19+commit.7dd6d404.Emscripten.clang + +## Geth 콘솔 설정하기 + +콘솔이 아닌 Node.js와 같은 외부 프로그램에서 Geth에 접근할 수 있게 하기 위해 Geth를 실행할 때 다음 옵션들을 추가해야 함. + +- `--http` : HTTP-RPC 서버를 활성화 하여, 외부에서 블록체인 서버에 접근 가능하도록 함. +- `--http.addr` : +- `--http.port` : 외부에서 접근하기 위한 포트 번호 지정 +- `--http.api` : 외부에서 접근할 수 있는 명령어들을 지정 +- `--http.corsdomain` +- `--allow-insecure-unlock` : 외부에서 계좌 잠금 해제를 할 수 있게 하기 위한 명령어 + +예를 들어 다음과 같이 수행한다. +```shell +% geth --datadir "data" --http --http.addr "0.0.0.0" --http.port "7326" --http.api "web3,eth,personal,net" --http.corsdomain "*" --allow-insecure-unlock --nodiscover console +``` + +> --http 옵션은 Geth v1.10.0 부터 지원하고 있다! +{: .prompt-tip} + +## Node.js로 Geth에 접속 + +Node.js나 Javascript에서 geth로 접속하기 위해서는 Web3 모듈이 필요하다. + +> Web3 최신 버전이 버그로 연결이 잘 되지 않아... 옛날 버전인 0.20.0을 사용해줄 예정. + +```shell +% npm install web3@0.20.0 +``` + +Node.js를 사용하여 자바스크립트 코드를 작성하자. + +provider를 설정한 뒤, 마지막에 잘 연결되었는지 확인하기 위해 계정의 주소를 로그로 찍도록 설정하였다. + +```js +const Web3 = require("web3"); +const web3 = new Web3(); + +web3.setProvider(new web3.providers.HttpProvider("http://127.0.0.1:7326")); + +console.log(web3.eth.accounts[0]); +``` + +> provider 주소는 같은 컴퓨터이기에 localhost인 `127.0.0.1`로,
+> 포트 번호는 geth 콘솔을 실행하는 포트와 동일한 `7326`번으로 설정해주어야 한다. +{: .prompt-info} + +![img](/assets/img/2024-12-17-geth-external-access/0.png){: w="500" }{: .shadow } +_계정의 주소가 출력된다._ + +마찬가지로 geth콘솔에서 `eth.accounts[0]`를 통해 계정의 주소를 출력하면 Node.js로 확인했던 동일한 주소를 확인할 수 있다. + +![img](/assets/img/2024-12-17-geth-external-access/1.png){: w="600" } +_동일한 account[0] 주소 확인 가능_ + +다른 명령어(ex 계좌 확인)도 web3를 앞에 붙여 명령어를 확인할 수 있다! + +```js +console.log(web3.eth.getBalance(eth.accounts[0])); +``` + +```shell +% node test.js +Balance: 38000000000000000000 +``` diff --git a/_posts/2024-12-17-smart-contract-variable-update.md b/_posts/2024-12-17-smart-contract-variable-update.md index e263f7b..cc58d2c 100644 --- a/_posts/2024-12-17-smart-contract-variable-update.md +++ b/_posts/2024-12-17-smart-contract-variable-update.md @@ -4,8 +4,17 @@ date: 2024-12-17 10:04:00 +/-TTTT categories: [Security, Blockchain] tags: [security, blockchain, geth, ethereum, solidity] math: true +image: + path: /assets/img/2024-12-17-smart-contract-variable-update/1.png + alt: <스마트 컨트랙트 변수 업데이트> 썸네일 --- +## 작업 환경 + +- masOS M1 +- Geth Version: 1.10.17-stable +- Solidity Version: 0.8.19+commit.7dd6d404.Emscripten.clang + ## 스마트 컨트랙트 작성하기 다음 increase(), showCount() 함수를 작성해보자. @@ -13,9 +22,9 @@ math: true - count를 반환하는 `showCount()` 읽기 (view) 함수 ``` -// SPDX-License-Identifier : UNLICENSED +// SPDX-License-Identifier: UNLICENSED -pragma solidity 0.4.24; +pragma solidity 0.8.19; contract number { int8 private count = 0; @@ -247,4 +256,28 @@ INFO [12-17|11:14:54.745] Submitted transaction fullhash=0xa2 > miner.stop() > ni.showCount.call() 12 -``` \ No newline at end of file +``` + +![img](/assets/img/2024-12-17-smart-contract-variable-update/0.png){: w="700" } +_변수 변경 완료!_ + +## 블록 연결 상태 확인하기 + +만들어진 블록이 블록체인에 연결되었는지 어떻게 확인할까? + +먼저 트랜잭션이 실행되고 난 뒤, `eth.getTransaction()`을 통해 트랜잭션 정보를 확인하면? + +다음과 같이 `blockHash`값과 `blockNumber`값이 `null`로 표기되어있는 것을 확인할 수 있다. + +![img](/assets/img/2024-12-17-smart-contract-variable-update/1.png){: w="700" } + +채굴을 진행하고 나면? + +```shell +> miner.start() +> miner.stop() +``` + +다음과 같이 `blockHash`값과 `blockNumber`값을 확인할 수 있고, 또한 increase() 함수가 적용되어 `ni.showCount.call()`를 실행하였을 때 20이 더해진 32가 출력되는 것을 확인할 수 있다. + +![img](/assets/img/2024-12-17-smart-contract-variable-update/2.png){: w="700" } \ No newline at end of file diff --git a/assets/img/2024-12-17-geth-external-access/0.png b/assets/img/2024-12-17-geth-external-access/0.png new file mode 100644 index 0000000..e684e37 Binary files /dev/null and b/assets/img/2024-12-17-geth-external-access/0.png differ diff --git a/assets/img/2024-12-17-geth-external-access/1.png b/assets/img/2024-12-17-geth-external-access/1.png new file mode 100644 index 0000000..570c8a8 Binary files /dev/null and b/assets/img/2024-12-17-geth-external-access/1.png differ diff --git a/assets/img/2024-12-17-smart-contract-variable-update/0.png b/assets/img/2024-12-17-smart-contract-variable-update/0.png new file mode 100644 index 0000000..ce24799 Binary files /dev/null and b/assets/img/2024-12-17-smart-contract-variable-update/0.png differ diff --git a/assets/img/2024-12-17-smart-contract-variable-update/1.png b/assets/img/2024-12-17-smart-contract-variable-update/1.png new file mode 100644 index 0000000..9eccbc1 Binary files /dev/null and b/assets/img/2024-12-17-smart-contract-variable-update/1.png differ diff --git a/assets/img/2024-12-17-smart-contract-variable-update/2.png b/assets/img/2024-12-17-smart-contract-variable-update/2.png new file mode 100644 index 0000000..2c7f150 Binary files /dev/null and b/assets/img/2024-12-17-smart-contract-variable-update/2.png differ