IoT SmartContract in Solidity 2

Mist에서 배포하고 Mist와 게스 콘솔에서 작동시키기

저번 포스팅에서 다룬 1편에 이은 실제 컴파일과 배포를 해보는 2편


실습환경 : Mist (private-net) & geth console

미스트를 처음 다룬다면 실습환경을 구축하는 것이 어려울수있다. 아래 링크에 이더리움 개발환경 구축에 대한 설명이 잘 나와있으니 참고!
https://steemit.com/ethereum/@dlgusdn616/ethereum01-01


  1. Mist, geth-console 창 띄우기
  2. 본인의 로컬 환경에 최소 3개 이상의 계정(EOA)을 만든다. 여기서 3개의 계정은 각각 스마트 컨트랙트를 배포하는 오너, 서비스를 이용하는 클라이언트, 이더를 수금할 수 있는 IoT디바이스가 된다.

    위와 같이 미스트를 실행 시켜 오너가 될 메인어카운트의 화면에서, 상단에 위치한 컨트랙트 버튼을 클릭한다. 그럼 아래 사진과 같이 신규 컨트랙트 설치를 누른다

deploy 하기



송신처(from) — ‘오너 계정’을 확인하고 상단의 화면 처럼 소스코드를 넣는 부분에 1편에서의 SmartController.sol을 넣는다. 사진 오른쪽에 보이는 컨트랙트와 생성시, IoT장치의 주소를 생성자의 매개변수로 갖으므로 IoT 디바이스 계정에 해당되는 주소 값을 넣는다.


코드와 주소를 잘 기입하고 나면 하단에 설치(deploy)를 하면 위 사진과 같은 화면이 나오고 해당 계정(오너계정)의 비밀번호를 기입하고 트랜잭션을 발생시킨다. 이때, private-net 환경내에서 채굴을 진행하고 있어야 블록이 생성되고 스마트 컨트랙트가 생기니 아래 사진 처럼 콘솔창에서 채굴명령으로 채굴을 하자!


오너 계정에 방금 생성한 컨트랙트가 표시된 화면 (red box click!)

오른쪽 하단에 위치한 ‘인터페이스 보기’를 클릭하면 컨트랙트의 ABI가 나오는데 복사해두자!

게스 콘솔에서 명령을 실행 하려면 생성된 계약의 정보가 필요하다. 콘솔 창에서 계약을 사용하기 위해 아래 사진 처럼 계약을 정의 한다.

var name = eth.contract(ABI).at(‘생성된 컨트랙트의 주소’)


계약을 정의하고 undefined가 나오면 변수 명을 입력하여 잘 생성 되었는지 확인해보자!

여기까지, 스마트컨트랙트를 배포하고 게스 콘솔에서 사용하기 위한 선행과정을 모두 끝냈다. 이제, 게스 콘솔에서 직접 트랜잭션을 발생시켜보고 작동하는 스마트 컨트랙트를 확인해보자!

지불하기

먼저, 클라이언트 계좌의 비밀번호를 풀어준다! 필자의 경우 클라이언트에 해당하는 계좌가 eth.accounts[2]였지만, 본인 환경에 맞게 []안에 있는 숫자를 조정하자!

sc.payToController.sendTransaction({from:eth.accounts[2], gas:3000000, value: web3.toWei(1, “ether”)})

위 명령어를 통해 클라이언트가 payToController함수를 호출하여 클라이언트 계좌로 부터 1이더를 송금한다.


게스 콘솔에서 실행한 명령어는 Mist 내부의 GUI환경에서도 위와같이 실행가능하다. 위 사진은 명령어로 pay를 하고 GUI로 pay를 하여 총 2ETH가 들어와있고, numPaid도 2가 되었다.

송금 후, 이용 등록 현황을 확인 하기 위해서 controllers 매핑의 키 0에 등록된 정보를 확인 할 수 있다. true 상태일 때, 이용자는 IoT장비를 사용 할 수 있다.

만약에, 클라이언트가 이더를 더 지불하면 컨트롤러의 인덱스 번호가 올라가고 sc.controllers(1)로 조회가 가능하다.

결제 횟수 확인

sc.numPaid()


현재까지, 콘솔에서 1번 + GUI에서 1번 진행했다.

이제, IoT 디바이스에서 updateStatus함수를 호출 하여 상태를 변경해보자!

sc.updateStatus.sendTransaction(0, {from:eth.accounts[1], gas: 3000000});

위 명령어로 상태를 변경하고 다시 인덱스0의 컨트롤러를 조회하면 false값으로 변경되엇다. 만약 두번째 만든 컨트롤러의 상태를 변경하고 싶다면, 0대신 1을 넣어주자!

이더 수납하기

이더를 수납할때는 오너계정에서 수행해야 하므로 accounts[0]이 된다. 차례로 계정의 lock을 풀고 withdrawFunds함수를 호출하면 아래 사진과 같이 GUI화면에서도 콘솔창에서도 안에서도 CA주소에는 남아 있는 이더가 없다.


끝! 직접 명령어를 쳐보면서 오너/클라이언트/IoT장치 간의 EOA주소 및 CA주소들 사이의 상호관계를 생각해보면서 실습해보자!!

Coin Marketplace

STEEM 0.20
TRX 0.16
JST 0.030
BTC 65726.71
ETH 2677.61
USDT 1.00
SBD 2.91