별은블로그

Solidity 5_1. 트러플콘솔로 컨트랙배포하기 본문

Dev/Solidity

Solidity 5_1. 트러플콘솔로 컨트랙배포하기

beul_eun 2018. 11. 11. 05:38

솔리디티는 어떤 cpu에서 사용될지 모르기 때문에 소수점연산 사용을 지양한다.


우선 파워쉘을 열고 truffle이라는 폴더를 만든다.

truffle init 명령을 실행 - 트러플을 초기화하는 것

code . 명령으로 비주얼스튜디오 코드로 폴더를 연다.


migration이라는 컨트랙이 있을텐데 migration폴더안에 있는 스크립트를 배포하게 한다.

contract 폴더는 컨트랙을 보관한다. 

migration안에 있는 스크립트 파일은 배포하는 과정에서 사용되는 로직이 담겨있다.

앞에 1_ 이라는 접두사처럼 다른 스크립트를 생성할 때에도 접두사를 붙여줘야 한다. => 숫자를 따라 순차적으로 실행되기 때문에


test폴더에 있는 파일들은 테스트하는데에 사용된다.

truflle.js는 환경설정을 담당한다.

truffle.config.js라는 파일도 볼 수 있는데, 윈도우에서 명령프롬프트를 사용하는 사람들을 위해 만든 파일이다.

cmd 는 truffle.js  를 잘 인식 못하기 때문에 우리는 파워쉘을 사용한 것이다. truffle.config.js 파일은 삭제하도록한다.


MyContract파일을 contract 폴더안에 작성 후 migration 폴더안에 2_deploy_contract.js를 만든다.

1_파일과 거의 동일하고 migration을 MyContract로 바꿔준다.


새로운 파워쉘을 열고 트러플을 초기화한 폴더로 이동한다.


truflle develop 명령을 실행하여 트러플내부에서 이더리움 노드를 실행시키고 트러플 계정 10개를 생성한다.

http주소와 포트를 확인한다.

실행된 파일들을 확인한다.


그 다음에 노드의 로그를 보는 파워쉘을 하나 더 실행한다.

폴더로 이동 후 truffle develop --log 명령을 실행한다.

내부의 노드에 연결되었다. 


원래 파워쉘로가서 migrate를 실행한다.


migration 컨트랙을 배포시켰고 MyContract도 배포시켰다.

로그를 보는 파워쉘에 가보면 4개의 트랜잭션을 확인가능하다. 


일치하지않는 주소는 last_completed_migration 변수를 변경하며 실행된 트랜잭션주소이다.

이 값이 변경되면서 스크립트 접두사를 따라가는 것이다.


블록체인은 수정이 불가능하기 때문에 수정시 아예새로운 주소로 배포해야 된다.

=> 이는 메인넷에 배포하기전에 철저한 검토가 필요하다는 것을 뜻한다.


이를 위한 테스트용 명령이 있는데

m,igrate --compile-all --reset 명령을 실행하면 새로운 주소에 재컴파일된 컨트랙이 생성된다.


build 폴더아래에 있는 contract 안에 두개의 json파일이 생성된 것을 알 수 있다.

컨트랙과 상호작용할 수 있는 방법을 정의한 것이다. 


MyContract.sol

pragma solidity ^0.4.24;

contract MyContract {
   struct Student {
       string studentName;
       string gender;
       uint age;
   }
  
   mapping(uint256 => Student) studentInfo;
  
   function setStudentInfo(uint _studentId, string _name, string _gender, uint _age) public {
       Student storage student = studentInfo[_studentId];
      
       student.studentName = _name;
       student.gender = _gender;
       student.age = _age;
   }
  
   function getStudentInfo(uint256 _studentId) public view returns (string, string, uint) {
       return (studentInfo[_studentId].studentName, studentInfo[_studentId].gender, studentInfo[_studentId].age);
   }
}


Comments