본문 바로가기
블록체인/WEB3 개발

Geth를 사용해 스마트 컨트랙트 빌드하기

by 제이제이_은재 2022. 7. 13.
반응형

 

💡 Geth를 사용해 스마트 컨트랙트 빌드하기

 

아래 방법대로 하면 Geth console과 Web3를 사용해 스마트 컨트랙트를 이더리움 Ropsten Testnet에 배포할 수 있다.

 

1. simpleStorage.sol 코드를 디렉토리에 저장한다.

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.4.16 <0.9.0;

contract SimpleStorage {
    uint storedData;

    function set(uint x) public{
        storedData = x;
    }

    function get() public view returns (uint){
        return storedData;
    }
}

 

2. 배포할 스마트 컨트랙트 코드를 solc를 이용해 컴파일한다. 터미널에 다음과 같이 입력하면 콘솔창에 ABI와 바이트코드가 출력되는 것을 확인할 수 있다.

solc --abi --bin simpleStorage.sol

 

3. geth console을 실행한다. 이더리움 ropsten 테스트넷에 배포할 예정이기 때문에 --ropsten 옵션을 포함한다.

(이 옵션은 이전에 만들어둔 도커에서 실행한다. => https://study-with-ej.tistory.com/73)

geth console 2> /dev/null --ropsten

 

 

4. simpleAbi 변수를 선언하고, 위에서 컴파일한 결과값 중 ABI로 초기화한다.  터미널에 simpleAbi를 입력하여 변수가 잘 초기화되었는지 확인할 수 있다.

var simpleAbi = [{"inputs":[],"name":"get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"}]

 

5. simpleBytecode 변수를 선언하고, 위에서 컴파일한 결과값 중 Bytecode로 초기화한다. 터미널에 Bytecode를 입력하여 변수가 잘 초기화되었는지 확인할 수 있다.

var simpleBytecode = "608060405234801561001057600080fd5b50610150806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806360fe47b11461003b5780636d4ce63c14610057575b600080fd5b610055600480360381019061005091906100c3565b610075565b005b61005f61007f565b60405161006c91906100ff565b60405180910390f35b8060008190555050565b60008054905090565b600080fd5b6000819050919050565b6100a08161008d565b81146100ab57600080fd5b50565b6000813590506100bd81610097565b92915050565b6000602082840312156100d9576100d8610088565b5b60006100e7848285016100ae565b91505092915050565b6100f98161008d565b82525050565b600060208201905061011460008301846100f0565b9291505056fea2646970667358221220ba8e22447413aa9f935626eed33180a70f0e33f20d20fe8506edc2ecf02d467664736f6c634300080f0033"

 

6. eth.contract()를 사용해 ABI를 설정한다. simpleContract에는 컨트랙트와 관련된 정보가 들어간다.

var simpleContract = eth.contract(simpleAbi)

 

7. 컨트랙트를 배포하기 위해서는 가스가 필요하다. 컨트랙트를 배포할 계정의 락을 풀어준다. 비밀번호를 입력한 후, true 가 반환되면 정상적으로 락이 풀린 것이다.

personal.unlockAccount(eth.accounts[0])

 

8. simpleContract.new() 를 이용해 배포를 할 수 있다. new()에는 객체가 인자로 들어가며 객체에는 from, data, gas 가 들어간다.

 

➤ from : 컨트랙트를 배포할 계정

➤ data : 컨트랙트 바이트코드

➤ gas : 계정에서 소비할 가스

 

var contractObj = simpleContract.new({from: eth.accounts[0], data: simpleBytecode, gas: 2000000})

 

반응형

댓글