Remix로 개발하기

허정·2022년 10월 13일

이더리움 스마트 컨트랙 개발을 위해 IDE(통합 개발 환경)인 Remix를 사용해보겠습니다. VScode를 사용하지 않는 이유는, 자체적으로 솔리디티 코드를 디버깅하거나 컴파일 하는 기능이 없기 때문입니다. Remix를 사용하면 다음의 4가지 기능을 사용할 수 있습니다.

  • 컴파일
  • 배포
  • 테스트
  • 디버깅

이제 Remix를 사용하여 개발하는 것을 보려고 합니다.

1. 탭 설명

  • 해당 링크에 접속하여 Web IDE인 Remix를 사용합니다.
    • remix.ethereum.org
  • 왼쪽 상단의 탭을 확인합니다.
    • file explorer
      • 새로운 파일, 폴더를 생성
      • 깃허브 연동
      • 로컬 컴퓨터의 파일을 업로드
    • solidity compiler
      • 작성한 컨트랙트 코드를 컴파일
    • deploy & run transactions
      • 컴파일한 컨트랙트 코드를 배포
      • 배포한 컨트랙트를 실행
    • plugin manager
      • 모듈 설치 및 관리

2. 탭 사용하기

(1) 코드 작성

  • file explorer 탭에서 코드를 작성할 수 있습니다.
  • contracts 폴더 내부에 코드를 작성합니다

(2) 코드 컴파일 하기

  • 작성이 완료된 코드를 compile 하기 위해서 solidity compiler 탭으로 이동합니다. (ctrl + s 단축키로 컴파일을 진행할 수도 있습니다.)
  • 컴파일러 버전, language, evm version을 확인한 후에 compile을 진행합니다.
  • evm version의 default는 byzantium 입니다.
  • 컴파일이 완료되면, CONTRACT 옵션 아래에 컴파일한 컨트랙트가 나타납니다.
    • 여기서 ABI, Bytecode를 확인할 수 있습니다.

(3) 컨트랙트 코드 배포

  • DEPLOY & RUN TRANSACTIONS 탭에서 배포를 진행할 수 있습니다.

  • 각 옵션을 살펴보면,

    • ENVIRONMENT: 컨트랙트 코드를 배포할 네트워크. 여기선 Remix VM을 사용하여 실제 네트워크가 아닌 Remix가 제공하는 네트워크를 사용.
    • ACCOUNT: 컨트랙트 코드를 배포할 계정. 여기선 Remix VM을 사용하고 있으므로, 가상의 계정을 사용.
    • GAS LIMIT: 컨트랙트 배포시 사용할 가스 한도
    • VALUE: 전송할 이더의 양
    • CONTRACT: 트랜잭션으로 올릴 컨트랙트를 선택.
  • 배포를 진행시, 다음과 같이 web3deploy 방법에 대해서도 확인할 수 있습니다.

var simplestorageContract = new web3.eth.Contract([{"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"}]);
var simplestorage = simplestorageContract.deploy({
     data: '0x608060405234801561001057600080fd5b50610150806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806360fe47b11461003b5780636d4ce63c14610057575b600080fd5b6100556004803603810190610050919061009d565b610075565b005b61005f61007f565b60405161006c91906100d9565b60405180910390f35b8060008190555050565b60008054905090565b60008135905061009781610103565b92915050565b6000602082840312156100b3576100b26100fe565b5b60006100c184828501610088565b91505092915050565b6100d3816100f4565b82525050565b60006020820190506100ee60008301846100ca565b92915050565b6000819050919050565b600080fd5b61010c816100f4565b811461011757600080fd5b5056fea264697066735822122042b56572a28752a1cb5318672477aa3db470e7dec8121b0a669bbbafea16f66c64736f6c63430008070033', 
     arguments: [
     ]
}).send({
     from: web3.eth.accounts[0], 
     gas: '4700000'
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 })
  • deployed contracts 옵션에서 우리가 배포한 컨트랙트를 확인할 수 있습니다.

  • state를 변경하는 함수는 주황색으로 표시됩니다.
  • 여기서 get 함수는 state를 변환하는 함수이기 때문에 남색으로 표시됩니다.
  • 해당 옵션에서 함수를 사용할 수 있습니다.

0개의 댓글