공대생 정리노트
솔리디티로 간단한 컨트랙트 만들기 본문
본 내용은 인프런 강의인 이더리움 & 솔리디티 기반의 투표 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로 가나슈가 만든 계정들을 이용할 수 있다
간단한 스마트 컨트랙트 만들기
리믹스 브라우저를 이용해서 작성한다.
솔리디티의 문법은 이 글에서 다루지 않겠다.
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
명령어를 실행시키면 .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 |
---|