이것저것 기록

[solidity] 스마트컨트랙트 배포하기 본문

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% 이해가 안된다... 

파이썬이 엄청 편한 언어였구나... 

Comments