Data Science/New Tech
[solidity] 스마트컨트랙트 배포하기
anweh
2022. 2. 14. 15:31
스마트 컨트랙트 생성 순서
1. 스마트 컨트랙트 코드 작성 (.sol)
pragma solidity ^0.8.0;
// solcjs --version 로 버전확인
contract hello {
string value;
constructor(){
value = "hello solidity";
}
// 파일에 저장된 내용을 가져올 것인지? storage
// 메모리에 저장된 내용을 가져올 것인지? memory
function get() public view returns(string memory){
return value;
}
//solcjs --bin --abi .\hello.sol
// 파일명_확장자_컨트랙트명
}
- hello_sol.sol로 저장해준다
2. 스마트 컨트랙트 코드 컴파일
- 해당 컨트랙트가 위치한 경로로 이동해서 컴파일 해야함
-
solcjs --abi --bin [파일명]
- 성공적으로 컴파일 되었다면, 해당 폴더 안에 .abi, .bin파일이 생성되어야 함
- abi (Application Binary Interface) : 1에서 작성한 스마트 컨트랙트 코드의 설명이 담긴 JSON 파일
- bin : 바이너리 파일
3. 컴파일 결과를 배포
- '배포'한다라는 것은 블록체인 상에 컴파일한 스마트컨트랙트의 ByteCode를 Transaction에 실어 블록에 포함시킨 상태 (출처: https://lbm93.tistory.com/8)
- hello_sol.sol이 위치한 폴더에 hello_sol.js 파일 생성, 다음과 같이 입력 (출처: https://velog.io/@wlgus2134 )
onst Web3 = require('web3')
let connection = new Web3('http://127.0.0.1:8545')
// abi파일에 있는 정보들을 JSON형식으로 변형해서 ABI_CODE변수에 담아줌
const ABI_CODE = JSON.parse('[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"get","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]');
// bin 파일에 있는 정보들을 ''으로 감싸서 BYTECODE 변수에 담아줌
// bin 파일에 있는 것을 복붙하세요.
const BYTECODE = ' '
const contract = new connection.eth.Contract(ABI_CODE)
contract.deploy({
data:BYTECODE
})
// from 안에 Ganache를 돌려서 얻었던 Available Accounts중 하나를 ''로 감싸서 입력
// Gas(수수료)는 Gas Limit에 입력되어있던 6721975로 설정
.send({
from:'0x11eeC4232900708324D58ebca115566a02F59Ddd', // ganache-cli --host 0.0.0.0 입력 후 아무거나 선택
gas:'6721975'
},(error,result)=>{
console.log(error)
})
.then( data =>{
console.log(data.options.address)
})
- 터미널 창을 열어 다음 명령어 입력
-
node hello_sol.js
- 로컬 virtual 지갑을 생성하고 있는 ganache cmd창을 확인해보면, 다음과 같이 sendTransaction 결과가 나와있다.
--
얼렁뚱땅 따라하긴했는데 100% 이해가 안된다...
파이썬이 엄청 편한 언어였구나...