testrpc에 영구적으로 데이터를 기록해보자.
testrpc는 기본적으로 메모리에 데이터를 저장하므로, 실행 시 마다 새로운 블럭체인 환경이 실행된다.
지속적인 개발을 위하여 데이터를 파일에 저장해보록 하겠다. 물론 이 과정은 geth을 이용하여 테스트 네트웍에서 진행할 수 있지만, 테스트 네트웍은 생각만큼 빠르지 않으면, 개발 초기 단계에서는 testrpc로 개발하는 것이 개발 생산성이 낫다.
시나리오는 다음과 같이 단순하다.
- testrpc 실행
- 데이터 저장
- testrpc 종료
- testrpc 재실행
- 저장한 데이터 확인
testrpc 실행
먼저 testrpc에 데이터를 영구적으로 저장하려면 입력한 데이터를 메모리가 아닌 디스크에 보관하여야 한다.
testrpc 실행 옵션 중 --db 옵션을 이용하여 저장할 디렉터리를 지정해주면 이부분은 해결된다.
아울러 로그인 계정을 고정하기 위하여 -m 니모닉 옵션을 사용한다.
-m 옵션으로 지정하는 니모닉은 12단어이기만 하면어떤 것을 사용해도 된다.
여기서는 testrpc를 옵션없이 실행했을 때 나온 값을 저장했다가 이를 사용했다.
그 다음 생성/저장 트랜잭션을 위하여 초기 ether 값을 100을 주어 Gas비로 사용하도록 하였다.
testrpc --db db_files -e 100 -m "lawsuit grab tobacco audit net news conduct school diamond response arch math"
위의 예제를 위해서 db_files라는 디렉터리를 미리 만들어둔다.
mkdir db_files
자 이제 명령어를 실행하면 다음과 같은 화면이 주욱 나올 것이다. 실제 주소나 키는 환경에 따라 다를 수 있다.
데이터 저장
그 다음 개발 환경인 리믹스를 실행하여 지난번에 작성한 SalaryStorage.sol을 호출하자.
"Run" 탭에서 선택하여 Envionment에서 Web3 Provider로 http://localhost:8545 로 연결하고 Create 버튼을 클릭하여 SalaryStorage 모듈을 생성한다.
모듈이 정상적으로 생성되었다면 그림 상에서 1번 왼쪽에 있는 아이콘을 클릭하여 생성된 모듈 주소를 복사한다.
참고로 위 예제에서 SalaryStorage 스마트컨트렉트 주소는 0x156146db65637eb1f5d1052aeac809e0244216f2 이다.
트랜잭션에 대한 로그는 아래 콘솔 박스에 나온다.
스마트컨트렉트를 생성하는 것도 하나의 트랜잭션이기 때문에 여기서 확인할 수 있다.
2번 표기된 Details 버튼을 클릭해보면 트랜잭션에 대한 자세한 내용을 볼 수 있다. 각각이 무엇을 의미하는지는 스스로 알아보기 바란다.
자 다시 본론으로 돌아가서, 앞 강좌에서 했던 것처럼 set 함수에 아래와 같이 값을 저장해보자.
"홍길동", 1000
"이순신",2000
각 트랜잭션의 Details 을 클릭하여 사용된 가스비가 얼마인지 등 상세한 내용을 확인해보기 바란다.
testrpc 종료
트랜잭션이 반영되었는지 확인한 다음 이제 testrpc 실행을 다음의 명령어로 종료해보자.
Ctrl-z
kill %1
testrpc 재실행
그리고 다시 testrpc를 앞에서 실행한 동일한 명령어로 실행한다.
testrpc --db db_files -e 100 -m "lawsuit grab tobacco audit net news conduct school diamond response arch math"
저장한 데이터 확인
리믹스를 다시 연결하고, 이번에는 Create가 아니라 At Address에 좀 전에 저장했던 주소를 입력하고 호출한다.
get 에 "이순신"을 입력하고 조회해보자,
2000이라는 값이 나오는가?