리믹스는 솔리디티 컨트랙트 온라인 IDE로 사이즈가 크지 않은 컨트랙을 테스팅하고 디버깅하기 용이하며 컨트랙 배포 또한 가능하다.
- JavaScript VM: 자바스크립트 버츄얼 머신, 간단한 테스팅시에는 JVM이 편리
- Injected Web3: 메타마스크 연동시 사용
- Web3 Provider: Geth나 가나슈의 엔드포인트를 연동시 사용
Compile 버튼을 클릭하여 컴파일하면 하단에 컨트랙트를 확인 가능함
컴파일된 컨트랙트를 선택 후 Deploy 버튼을 클릭하면 컨트랙트가 블록체인에 배포된다.
콘솔 화면에는 컨트랙트 어드레스를 포함한 배포된 트랜잭션 관련된 상세 정보를 확인할 수 있다.
좌측 하단에는 배포된 컨트랙트 패널이 생성되고 이 영역에서 테스트가 가능하다.
인풋창에 컨트랙트 인자를 넣고 좌측 버튼(함수명이 출력됨)을 클릭하면 컨트랙트 트랜잭션이 익스큐션되고 콘솔 화면에서 결과값을 포함한 상세 정보를 확인할 수 있다.
컨트랙트를 배포하면 트랜잭션 내역이 콘솔에 출력되는데 이때 우측에 디버그 버튼을 통해 디버깅을 진행할 수 있다.
Instructions
현재 실행중인 컨트랙의 바이트 코드가 옵코드로 변환되서 표시
디버깅시 스텝 오버 버튼을 클릭하면 코드의 영역에서 사용되는 옵코드들을 볼 수 있다.
이더리움 가상머신에서는 컨트랙이 배포되었을때 옵코드를 스택에 먼저 쌓고 해당 트랜잭션이 있을 때마다 필요한 옵 코드를 읽으면서 실행시킨다.
각각의 옵코드는 고유의 역할이 있으며 옵코드마다 소량의 가스비가 든다. 옵코드별 역할 정보는 아래의 링크에서 확인할 수 있다. https://ethereum.stackexchange.com/questions/119/what-opcodes-are-available-for-the-ethereum-evm
스텝 오버 버튼
한 줄 씩 위/아래로 처리
스텝 인투
한 라인에 다른 함수가 포함되어있으면 그 함수까지 건너가서 디버깅
점프 아웃
맨 마지막으로 이동
점프 투 브레이크 포인트
브레이크 포인트 설정시 그 전/후 브레이크 포인트로 이동
Solidity Locals
현재 디버깅 진행중인 위치의 지역변수 표시
Solidity States
현재 디버깅 진행중인 위치의 상태변수 표시
그외
현재 실행중인 로우레벨 정보들을 표시
메타마스크에서 트랜잭션을 처리할때의 예
연산에 소모되는 비용 == Opcode(Operation Code)
컨트랙트를 컴파일하면 바이트 코드로 변환이 되고 그 다음으로 옵코드로 분해되서 이더리움 가상 머신에 의해 실행이된다.
리믹스에서 트랜잭션 컴파일 후 Compilation Details 버튼을 클릭하면 상세 내용을 확인할 수 있는데,
BYTECODE 영역의 object 필드가 컴파일된 바이트 코드이다.
각각의 옵코드는 고유의 역할이 있으며 옵코드마다 소량의 가스비가 든다.
object 밸류값을 복사해 https://etherscan.io/opcode-tool 페이지 인풋에 붙여넣고 디코드를 하면 리믹스 상세 창에서 보이는 Opcode와 동일한 결과를 출력시킨다.
옵코드별 역할 정보는 다음의 링크에서 확인할 수 있다.
https://ethereum.stackexchange.com/questions/119/what-opcodes-are-available-for-the-ethereum-evm