오늘 수업 목적 - 스마트컨트랙트 심화 (가나쉬 사용)
◾ 1교시 - 스마트컨트랙트 간단 정리
🔹 가나쉬 : 알트코인의 데몬을 간단하게 만듭니다 (이더리움) + 100이더를 가지고있는 주소 10개를 준다.
* 데몬? - p2p임. 데몬끼리 연결되어 있음. rpc통신 이용.
=> 가나쉬도 rpc통신을 이용가능.
❕ 목적
-> 이더리움 rpc 통신을 할 수 있는 데몬을 생성할 수 있다.
이를 통해서 스마트컨트랙트를 실행하는데, 솔리디티 언어로 작성한다.
-2교시-
❕ node.js 환경에서 세팅하기
1. npm install -g truffle
2. npm install -g ganache-cli
3. npm install web3
* web3란?
- rpc통신을 쉽게 구현할 수 있게 도와주는 라이브러리입니다. 설치는 npm init 해주고 npm install web3
❕ 정상적으로 설치 되었는지 확인하기
truffle version : 트러플 버전 확인
ganache-cli --host 0.0.0.0 : 가나쉬 실행 명령어임. 이렇게 쳤는데 실행이 안되면 앞에 npx 해줄것~
❕
# 가스 (gas)
- 이더리움 스마트 컨트랙트를 배포하고 실행할 떄 사용되는 수수료.
예를 들어 "hello"라는 글자를 특정 주소값에 보낸다고 했을때 -> 가스가 발생된다.
연산을 몇번 했느냐에 따라 가스 발생이 달라짐. 연산이 많을수록 가스비용이 높아짐!
# 가스 가격 (gas price)
스마트 컨트랙트를 발생할때, 이것을 작성한 사람이 설정하는 가스 가격입니다.
#가스 한도 (gas limit)
가스가 너무 많이 발생할 것 같을 때 한도를 정할 수 있음. 최대 수수료는 이정도까지~라는거!
1,2,3 번을 모두 설치해주고 이후 가나쉬를 실행해보쟈
가나쉬 실행하면
🔅🔅
가나쉬 실행한 상태 = 데몬이니깐 rpc통신을 통해서 특정 주소에 있는 이더리움의 갯수를 구할 수 있다.
🔅🔅
❕ 이더리움 갯수 구해보쟈
eth_getBalance > 이더리움 갯수를 뜻함.
현재 가나쉬에서는 하나의 공개키당 100만큼의 이더를 던져줬기 때문에 ,
데몬과 rpc 통신을 했을 때 포트 0.0.0.0:8545 eth_getBalance 가 100ETH 나와야 합니다!
이는 "curl shell 스크립트"에서 확인 가능!
-> "쉘"은 Linux에서 사용함. mac은 바로 터미널에서 가능하지만, window에서 쓰려면 wsl 들가야함.
❕ curl을 이용한 요청 - 1.
명령어 > curl -X POST -d ' ' [주소]
-X : 매소드가 뭐냐? -> 그뒤에 나오는거 = post
-d : 데이터 넘겨줄게
' ' : 요기 ' '안에 데이터 객체형태로 넣어줘야 함.
[주소] : 찾고싶은 주소 (http://[아이피]:[포트번호])
ex) curl -X POST -d '{"jsonrpc":"2.0","method":"eth_accounts"}' http://127.0.0.1:8545
ex)
curl -X POST -d '{"jsonrpc":"2.0","method":"eth_getBalance", "params":["0xB7eF3776faA7ab385aE19a923EDf958B426F858f"]}' http://127.0.0.1:8545
-> 매소드를 eth_getBalancefh 로 바꿔주고, 세번째 인자로 params 추가.
이때 params는 배열로 표현되고 그 안에는 스트링으로 가나쉬 공개키값 넣어줬음!
wsl 에서 curl 입력하자 오류가 뜸
csprout@LAPTOP-6QJJENI8:~$ curl -X POST -d '{"jsonrpc":"2.0","method":"eth_accounts"}' http://127.0.0.1:8545
curl: (7) Failed to connect to 127.0.0.1 port 8545: Connection refused
가나쉬 실행을 다시 실행하고 하면 된다고 함.
..다시 해봐도 왜 안될까 ㅜㅜ
아니면 포스트맨으로 해도 똑같은 결과를 얻을 수 있다고 함.
일단 브라우저에 http://localhost:8545/ 쳐봤을때 400 Bad Request가 뜸.
-> wsl 이랑 현재 윈도우랑 연결이 안되어있는것 같음. wsl 환경설정을 손봐야 하는경우임
그래서 포스트맨으로 날려보면 될것이라고 하심
-3교시-
=> 포스트맨으로 해보니
{
"jsonrpc": "2.0",
"result": "0x56bc75e2d63100000"
} 이렇게 나옴
여기서 0x56bc75e2d63100000 얘가 16진수인데 이건 10진수로 변환하면 100000000000000000000 이거임.
100,000,000,000,000,000,000 = 100ETH 임. 얘의 단위는 wei임
// 단위
1ETH = 10^18wei
0.000000000000000001 ETH = 1wei
rpc 통신을 curl을 하지않고
web3 라이브러리를 통해서 요청을 하고 거기에 대한 결과물을 받을 것임
즉,
javascript 코드를 작성해서 받아봅시다!
- web3 라이브러리가 설치되어있어야 합니다.
- example.js 파일 생성
.
.
.
컴파일 해주는 도구 solc 이용!
npm uninstall solc
npm install -g solc <- 요거 데몬말고 다른 터미널에다가 설치하심.. 상관은 없나? 암튼!
hello.sol 파일 생성
-4교시-
solidity 파일 색깔 바꿔주는거
hello.sol 코드작성 >
pragma solidity ^0.8.0;
contract hello{
string value;
constructor(){
value = "hello world!";
}
function get() public view returns(string memory){
return value;
}
}
solcjs --version -> 0.8.9+commit.e5eed63a.Emscripten.clang 이렇게 나옴
solcjs --abi --bin [파일명] -> 이게 컴파일 실행 명령어. 정상적으로 실행 시키면 abi , bin 파일 생김
~ 내일은 스마트컨트랙트를 가지고 투표앱을 만들거라고 함!! ~