카테고리 없음

[1011] 스마트컨트랙트 간단 정리 /

문앵 2021. 10. 11. 09:29

오늘 수업 목적 - 스마트컨트랙트 심화 (가나쉬 사용)

◾ 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 번을 모두 설치해주고 이후 가나쉬를 실행해보쟈

 

가나쉬 실행하면

100 이더를 가진 공개키 10개 ! & 개인키 10개 던져줌/

🔅🔅

가나쉬 실행한 상태 = 데몬이니깐 rpc통신을 통해서 특정 주소에 있는 이더리움의 갯수를 구할 수 있다.

🔅🔅

Listening on 0.0.0.0:8545 > 8545번 포트에서 실행중이란 뜻!

❕ 이더리움 갯수 구해보쟈

 

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 환경설정을 손봐야 하는경우임

그래서 포스트맨으로 날려보면 될것이라고 하심

 

curl -X POST -d '{"jsonrpc":"2.0","method":"eth_accounts"}' http://127.0.0.1:8545 요거 ㅜㅜ
curl -X POST -d '{"jsonrpc":"2.0","method":"eth_getBalance", "params":["0xB7eF3776faA7ab385aE19a923EDf958B426F858f"]}' http://127.0.0.1:8545 얘는 요거

 


-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 파일 색깔 바꿔주는거

market에서 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 파일 생김

 

 

 

 

 

 

~ 내일은 스마트컨트랙트를 가지고 투표앱을 만들거라고 함!! ~

 

반응형