Remix로 개발하기

허정·2022년 10월 13일
0

이더리움 스마트 컨트랙 개발을 위해 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개의 댓글