스마트 컨트랙트 개발 환경

Ganache(가나슈)는 개인 PC에서 사용할 수 있는

블록체인 개발환경입니다.

 

이더리움 기반의 스마트 컨트랙트는

이더리움의 메인넷에 배포해야 하는데

한번 블록체인에 올라간 DApp은

삭제가 불가능합니다.

 

일반 응용프로그램을 개발하는 사람들에겐

다소 이해가 어려울지 모르겠습니다.

내가 개발한 프로그램을 삭제할 수 없다니?

 

블록체인을 이해하는 것은 어렵기 때문에

컴퓨터와 네트워크에 대한 지식을

총동원 해야 합니다.

 

블록체인은 거래의 장부(transaction ledger)이며

이는 데이터베이스의 또 다른 이름입니다.

사실 데이터베이스에 데이터만 저장하라는 법은 없습니다.

 

컴퓨터와 네트워크의 명령어를 집어 넣어서

어떤 조건이 발생하였을 때 블록체인의 컴퓨터들이

자동으로 실행시키는 프로그램이 스마트 컨트랙트입니다.

 

개발된 앱이 네트워크에 영구적으로

저장되다 보니 삭제가 불가능한 메인넷을

테스트에 사용할 수가 없습니다.

 

또 메인넷에서는 거래를 저장하기 위해서

채굴자의 해쉬비용 즉 수수료(gas fee)가

발생합니다.

 

해쉬파워를 사용하기 때문에

속도도 느리고 프로그램을 개발하다

잘못하면 암호화폐를 잃어버릴 위험도 있습니다.

 

그래서 이더리움 생태계는 테스트넷을

운영하고 있습니다.

 

하지만 처음부터 코드를 테스트하기엔

테스트넷도 거래에 시간이 걸리기 때문에

결국 로컬개발환경이 필요합니다.

 

가나슈는 로컬컴퓨터에 있는

블록체인 네트워크입니다.

일종의 가상머신과 같습니다.

 

여기서 개발과 테스트를 완료 후

테스트넷을 거쳐서 메인넷에 배포하는

방식으로 DApp 을 개발할 수 있습니다.

 

가나슈 + 메타마스크는

블록체인을 개발하기 위한

필수적 개발환경 설정입니다.

설치하기

 

아래 사이트에 접속해서

Download 후 설치합니다.

 

설치는 그냥 next 만 클릭하면

되니까 어렵지 않습니다.

 

https://www.trufflesuite.com/ganache

 

Ganache | Truffle Suite

Deploy contracts, develop your decentralized applications (dapps), and run tests on smart contracts. Available as a desktop application & command-line tool.

www.trufflesuite.com

처음 실행시 QuickStart 를 클릭하면

아래와 같이 실행됩니다.

 

가나슈에는 기본적으로 100개의 이더가

들어있는 10개의 지갑이 제공됩니다.

 

당연히 이는 가상환경의 지갑으로

실제 메인넷에서 사용은 불가능합니다.

만약 사용가능하면 100개 이더는

현재 가격으로 3억 정도 하겠네요;;;

 

Ganache 가나슈
Ganache 가나슈

 

중요한 것은 메인넷에서 사용할 스마트 컨트랙을

여기서 개발할 수 있다는 것입니다.

 

메타마스크(MetaMask) 연결

메타마스크는 이더리움 지갑관리 DApp입니다.

크롬 브라우저 익스텐션으로 설치할 수 있습니다.

 

설치는 아래 링크를 참고합니다.

 

Metamask 설치와 가입하기 - 암호화폐 이더리움 지갑 Crypto Ethereum Wallet

 

Metamask 설치와 가입하기 - 암호화폐 이더리움 지갑 Crypto Ethereum Wallet

Meatmask Metamask - 메타마스크는 이더리움 지갑입니다. 블록체인계의 기축통화라고 할 수 있는 이더리움을 보내거나 받을 수 있으며 구매도 가능하고 다양한 토큰으로 스왑 할 수 있는 이더리움 브

digiconfactory.tistory.com

 

메타마스크를 실행하고 네트워크를

설정합니다.

 

이더리움 메인넷이 실제 네트워크이고

아래에 보면 맞춤형 RPC가 있습니다.

이것을 클릭합니다.

메타마스크 맞춤형 RPC
메타마스크 맞춤형 RPC

 

맞춤형 RPC 네트워크 설정을 합니다.

 

네트워크 이름을 지어주고

새 RPC URL은 가나슈의 메인화면에서

확인할 수 있습니다.

로컬호스트(127.0.0.1) 입니다.

체인 ID는 1337입니다.

메타마스크 설정
메타마스크 설정

 

로컬 블록체인에 거래만들기

 

다음은 파이썬의 web3 모듈을 사용해서

로컨 블록체인에 거래를 만들어 보겠습니다.

 

가나슈를 설치하면 지갑은 있지만

거래내역은 없습니다.

따라서 블록의 숫자가 0입니다.

이는 블록 해쉬만 있는 최초의 블록이죠.

거래를 하면 블록이 만들어 집니다.

 

아래의 코드는 가나슈에 접속해서

한 계좌에서 다른 계좌로 암호화폐를

송금하는 코드입니다.

 

화폐를 보내는 은행과도 비슷하죠?

보내는이가 있고 받는이가 있습니다.

private key는 비밀번호와 같은 것입니다.

 

이 코드에 사용된 것은 가나슈 로컬용입니다.

당연히 메인넷에서는 사용이 불가합니다.

 

보안적으로 private key가 가장 중요합니다.

이 키가 노출되는 것은 나의 지갑이

털린다는 것과 같은 말이기 때문에

타인에게 노출시키면 안됩니다.

 

해커는 결국 private key 를 탈취하는게

목적입니다.

 

만약 키가 노출되면 즉시

다른 지갑으로 옮겨야 합니다.

 

이런 이유로 한번 더 보안이 되는

Cold Wallet 이 필요한 것이죠.

 

from web3 import Web3

ganache_url = "HTTP://127.0.0.1:7545"
web3 = Web3(Web3.HTTPProvider(ganache_url))

print("\n[ --- Ganache Local BlockChain --- ]")
print(" - Connection    : ", web3.isConnected())
print(" - Current Block : ", web3.eth.block_number)

account_sending = "0xB14aF6B2c0E015a63964EaaeD6D747F87a44Def5"
account_receiving = "0xC1b0cD3ca61e2c934008f9F07B210b641bf37d8F"

# to sign a transaction
private_key = "aa40557f5a725873f782d32e27d19ef24c5c3e212d5259b7414362cbce2d39c4"

# build - sign - send - get transaction hash
nonce = web3.eth.getTransactionCount(account_sending)
tx = {
    'nonce': nonce,
    'to': account_receiving,
    'value': web3.toWei(1, 'ether'),
    'gas': 2000000,
    'gasPrice': web3.toWei('50', 'gwei')
}

signed_tx = web3.eth.account.signTransaction(tx, private_key)
tx_hash = web3.eth.sendRawTransaction(signed_tx.rawTransaction)
print(tx_hash)
[ --- Ganache Local BlockChain --- ]
 - Connection    :  True
 - Current Block :  0
b'\xc2\xf8E\xb8{\x8b\xe69r\x83J\xbc\xd20\xd7\xfcg\x84+\xd5\xf1B^8v\xc5\xc2C\xa0\xb0{{'

 

Transaction 을 일으키기 위한

딕셔너리를 정의합니다.

 

nonce 는 중복 검사를 위해 사용합니다.

gas 는 gas fee 의 한계를 설정합니다.

 

함수를 사용해서 사인을 하면

거래가 발생되고 최종적으로

채굴자들에 의해 해쉬값이 생성됩니다.

메인넷이라면 실제 해쉬비용이

들겠지만 가나슈에서는 들지 않습니다.

 

이제 연결된 메타마스크를 보면

이더리움 1만큼이 전송되었습니다.

 

메타마스크 이더리움
메타마스크 이더리움

 

가나슈에서 장부를 보면 거래가

기록이 되있습니다.

 

이것은 Ganache 에서 한 것이지만

같은 방식으로 테스트넷과 메인넷에서

거래를 실행할 수 있습니다.

 

충분히 개발한 후에

테스트넷 -> 메인넷으로 가면 됩니다.

 

가나슈 거래
가나슈 거래

 

요약

이번 포스팅에서는 가나슈 설치 후

거래를 발생시키는 것 까지 진행해봤습니다.

 

블록체인의 개념 자체가 아주

이해못할 것은 아닙니다만,

블록체인은 인터넷 위에 탈중앙화

시스템이기 때문에 컴퓨터에 대한

상식을 총동원해야 합니다.

 

화폐의 개념을 이해하려면

약간의 경제학 지식도 있어야 합니다.

예를 들어 gas fee 는 왜 생겨났느냐?

같은 질문에 답하기 위해서 입니다.

 

혹 프로그래밍 전공이 아닌 사람들도

블록체인 프로그램을 실습함으로써

이 미래의 시스템에 대해서 더 잘

이해할 수 있을 것으로 봅니다.

 

사실 아직 저도 과연 탈중앙화가

진짜 미래의 모습일까? 라는 것에는

의구심이 있습니다.

 

블록체인은 매우 혁신적이기 때문에

인류가 그것에 적응할지는 아무도 모릅니다.

 

사람들은 항상 새로운 기술이 나오면

그것이 된다는 것은 알면서도

몸적으로 경험적으로 받아들이기가

쉽지 않다고 합니다.

 

그 예로 사피엔스가 존재한게 30만년

이전부터인데 지구가 태양을 돈다는 것은

30만년 후인 16세기에 겨우 알았습니다.

 

문제는 지구가 돈다는 사실을 주장하는

이들에게 심한 말을 하고

심지어 세계관을 깨는 것에 대하여

재판까지 했습니다.

 

블록체인이 그렇게 되지 않으리란

보장은 없습니다.

 

항상 사람들은 변화를 두려워하죠.

 

저도 블록체인을 공부하면서 부터

생각이 바뀌기 시작했는데

 

'아~ 20년전에 인터넷이 나올때

그건 정보시대의 시작조차 아니었구나.'

 

라는 생각을 불러일으킬 정도로

충격을 받았습니다.

 

한대의 컴퓨터를 통제하는 것은

OS(운영체제)이지만 수많은 컴퓨터를 통제하는 것이

블록체인 플랫폼이며 이더리움이 지금까지는

가장 네트워크 컴퓨터들의 운영체제로

알려져 있습니다.

 

이더리움은 아직 그 능력의 10000분의 1도

개발되지 않았다고 생각합니다.

 

사람들의 의견이 일치하지 않을때

불안감을 느낄 때

그 때 새로운 시대가 열리는 겁니다.

 

어떠한 미래가 올지 아무도 알 수 없기 때문에

될때까지 존나게 열심히 뭔가 만들어 보고

시도해 보는 것이 중요합니다.

 

콜드월렛과 핫월렛 |차가운 지갑 뜨거운 지갑 | 비트코인 지갑(bitcoin wallet) 

 

콜드월렛과 핫월렛 |차가운 지갑 뜨거운 지갑 | 비트코인 지갑(bitcoin wallet)

비트코인 지갑(Bitcoin Wallet) 비트코인을 사용하기 위해서는 비트코인 지갑(Bitcoin Wallet)이 있어야 합니다. 이 지갑이라는 말을 처음에 들었을 때 약간 혼동이 올수가 있는데요. 그 이유는 우리가

digiconfactory.tistory.com

블록체인과 비트코인 탈중앙화 금융 시스템 (decentralized finance) | 블록체인 소개 영상 모음

 

블록체인과 비트코인 탈중앙화 금융 시스템 (decentralized finance) | 블록체인 소개 영상 모음

블록체인 비트코인 - 블록체인 기술의 하나 비트코인이 불과 몇개월만에 7000만원대를 넘어가면서 너도나도 비트코인에 뛰어들고 있습니다. 언론이 비트코인에 대해서 다루는 방식은 별로 진지

digiconfactory.tistory.com

 

공유하기

facebook twitter kakaoTalk kakaostory naver band