공대생 정리노트

솔리디티로 간단한 컨트랙트 만들기 본문

블록체인/솔리디티

솔리디티로 간단한 컨트랙트 만들기

woojinger 2021. 12. 26. 16:18

본 내용은 인프런 강의인 이더리움 & 솔리디티 기반의 투표 dApp 구현하기를 들으면서 작성한 내용으로,

강의의 자세한 내용은 담고 있지 않습니다.


환경세팅

node를 사용하여 진행했다. npm으로 하단의 3개의 모듈을 다운받는다.

Ganache : 일종의 인 메모리 블록체인

web3.js : 블록체인과 상호작용하는 라이브러리

solc : 솔리디티 컴파일러

 

설치 이후 node_modules/.bin/ganache-cli로 가나쉬를 실행시키면 10개의 계정과 해당되는 개인키를 가진다.

가나슈는 8545 포트로 listen하고 있다.

블록체인 확인하기

 node를 실행하고 web3객체를 만든다.

web3의 도큐먼트를 잠시 보자

 

더보기

web3.js is a collection of libraries that allow you to interact with a local or remote ethereum node using HTTP, IPC or WebSocket.

....

After that you need to create a web3 instance and set a provider.

provider는 다음과 같이 설정하면 된다.

web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))

이제 web3로 가나슈가 만든 계정들을 이용할 수 있다

간단한 스마트 컨트랙트 만들기

https://remix.ethereum.org/

 

Remix - Ethereum IDE

 

remix.ethereum.org

리믹스 브라우저를 이용해서 작성한다.

 

솔리디티의 문법은 이 글에서 다루지 않겠다.

 

truffle 프레임워크를 이용해 컴파일하고 블록체인의 상호작용을 관리 할 수 있지만, 프레임워크를 사용하지 않고 작성한 컨트렉트를 프로젝트에 적용해보는 것부터 해보았다.

 

해당 소스 코드를 프로젝트 폴더로 옮기고, node에서 컨트랙트를 변수에 로드할 것이다.

먼저 소스 코드를 컴파일한다.

node_modules/.bin/solcjs --bin --abi sourceCode.sol

abi는 컨트랙트가 블록체인 밖이나 다른 컨트랙트와 인터랙트 하게할 수 있는 Contract Application Binary Interface이다.

https://docs.soliditylang.org/en/v0.5.3/abi-spec.html

 

Contract ABI Specification — Solidity 0.5.3 documentation

Basic Design The Contract Application Binary Interface (ABI) is the standard way to interact with contracts in the Ethereum ecosystem, both from outside the blockchain and for contract-to-contract interaction. Data is encoded according to its type, as desc

docs.soliditylang.org

명령어를 실행시키면 .abi 파일과 .bin 파일 두 개가 생성된 것을 확인할 수 있을 것이다.

.api 파일을 열어보면 변수 및 함수들의 input과 output을 포함한 여러 성질들이 명시가 되어 있는 것을 확인할 수 있을 것이다.

.bin 파일은 바이트 코드이다.

 

내가 배포한 방법은 다음과 같다

> Web3 = require('web3')
> web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
> bytecode = fs.readFileSync('./Voting_sol_Voting.bin').toString()
> abi = JSON.parse(fs.readFileSync('./Voting_sol_Voting.abi').toString())
> VotingContract = web3.eth.contract(abi)
> deployedContract = VotingContract.new(['Rama','Nick','Jose'],{data: bytecode, from: web3.eth.accounts[0], gas: 4700000})
> deployedContract.address
'0x9cc7ae72d3b0c28e8bebf7bc89971d9850ced38a'

가니슈의 콘솔창을 확인해보면 eth_sendTransaction이 실행된 것을 볼 수 있다.

 

이제 deployedContract 변수에서 우리가 만든 함수들을 사용할 수 있다.

'블록체인 > 솔리디티' 카테고리의 다른 글

Truffle과 KAS 연동(클레이튼)  (0) 2022.02.02
Comments