이더리움 대신 아르고로 DApp 쉽게 만들기2

이전 글 ‘이더리움 대신 아르고로 DApp 쉽게 만들기 1편‘에 이어서 게시글 생성 및 조회수 올리기, 게시글 수정과 삭제를 해보겠습니다.

 

1. 게시글 생성

/blockoBoard/src/main/resources/lua/sql_smartcontract.lua

  • contract에 게시글 생성 함수를 위와 같이 만들어줍니다.

 

  • contract 배포 전에 만든 함수를 abi에 잊지않고 추가해줍니다.

 

  • 생성한 contract를 그대로 재사용하기 위해 Athena IDE 중단에 Contract를 클릭합니다.

 

  • 우리가 생성한 contract 주소를 확인하고 선택합니다.

 

  • 우리가 만든 contract 주소가 import된 것을 확인할 수 있습니다.
  • Compile과 Deploy를 순차적으로 눌러줍니다.

 

  • Athena IDE Console 창에서 ReDeploy된 것을 확인할 수 있습니다.

 

  • 만약 Contract를 선택하지 않은 채 Deploy를 누르게 되면 아래 Console 화면과 같이
    ReDeploy가 아닌 Deploy가 되어 새로운 Contract가 생성됩니다.

 

/blockoBoard/src/main/java/board/board/controller/BoardController.java

  • controller의 wrtieBoard 함수를 위와 같이 변경해줍니다.
  • paramMap을 통해 key, value 형식으로 contract에 담을 수 있도록 넣어줍니다.
  • createDateTime 같은 경우 contract에서 처리한 시간을 기입하기위해 넣지 않습니다.
  • boardService의 기존의 save대신 write라는 이름으로 새로 생성한 service로 변경합니다.

 

/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java

  • 게시판 list와 다르게 ContractExecute를 사용해서 데이터를 전송할 수 있도록 controller에서 받은 데이터를 list 형식으로 변환시켜 줍니다.

 

http://localhost:8080/blocko/board/write

  • BoardWrite.html을 통해 화면에서 게시글을 등록해봅니다.

 

eclipse 결과값

  • 저장을 눌렀을 시 eclipse console 화면에선 위와 같은 결과를 볼 수 있습니다.

 

http://localhost:8080/blocko/board

  • 정상적으로 redirect 되었다면 위와 같이 write화면에서 list화면으로 이동되어 게시판 리스트에 추가된 것을 확인할 수 있습니다.

 

aergoscan.io

  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.

 

  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.

 

  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.

 

2. 상세화면 보기

/blockoBoard/src/main/resources/lua/sql_smartcontract.lua

  • contract에 게시글 생성 함수를 위와 같이 만들어줍니다.
  • boardIdx를 기준으로 읽어올 수 있도록 합니다.

 

/blockoBoard/src/main/java/board/board/controller/BoardController.java

  • controller를 기존에 JPA를 연동한 내역들을 위와 같이 변경해줍니다.
  • findById 대신 boardService.view()함수를 통해 contract로부터 데이터를 읽어오도록 가공 후 modelAndView에 담아줍니다.

 

/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java

  • 게시판 list와 마찬가지의 형식이며 contractQuery에 lua에서 만든 함수 이름 “selectBoardDetail”로 기입합니다.

 

http://localhost:8080/blocko/board

  • 이대로 게시글을 눌러보면 작성한 내용들을 볼 수 있는 것을 확인할 수 있습니다. 다만 조회수가 0인 문제가 있습니다.
  • 조회수가 올라가도록 만들어보겠습니다.

 

3. 조회수 올리기

/blockoBoard/src/main/resources/lua/sql_smartcontract.lua

  • contract에 해당 게시글을 boardIdx를 통해 조회하고, hitCnt를 1 올리도록 만들어 줍니다.

 

/blockoBoard/src/main/java/board/board/controller/BoardController.java

  • openBoardDetail 함수에 위와 같이 boardService.increaseHitCnt 라는 함수를 생성해줍니다.

 

/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java

  • 게시글 상세보기와 마찬가지로 boardIdx 값을 받아옵니다.
  • 게시글 작성처럼 contractExecute를 통해 contract가 실행될 수 있도록 boardIdx를 넣어줍니다.

 

eclipse 결과값

  • eclipse 실행시 contract를 2번 실행한 것을 확인할 수 있습니다.

 

aergoscan.io

  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.

 

  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.
  • 이때의 “2”는 boardldx 값 입니다.

 

http://localhost:8080/blocko/board/2

  • 위와 같이 조회수가 정상적으로 증가한 것을 확인할 수 있습니다.

 

4. 게시글 수정

/blokoBoard/src/main/resources/lua/sql_smartcontract.lua

  • contract에 수정할 데이터와 boardIdx를 받도록 합니다.
  • Board 컬럼에서 updatedDateTime을 만들지 않았기에 createdDateTime에 업데이트합니다.

 

/blockoBoard/src/main/java/board/board/controller/BoardController.java

  • 게시글 생성과 비슷한 형식으로 수정할 데이터들을 Map에 담아 service로 넘겨주도록 합니다.

 

/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java

  • service 역시 게시글 생성처럼 contractExecute를 사용하여 controller에서 받아온 데이터를 가공 후 ”editBoard”라는 contract 함수로 전달합니다.

 

http://localhost:8080/blocko/board/2

  • 수정하기 버튼을 눌러 줍니다.

 

  • 순서대로 변경하고자 하는 내용들을 입력 후 수정반영하기를 누릅니다.

 

eclipse 결과값

  • eclipse console 화면에서 contract가 execute된 것을 확인할 수 있습니다.

 

http://localhost:8080/blocko/board

  • 게시글을 수정하면 게시판 리스트 화면으로 이동되며, 바뀐 제목, 작성자, 시간을 확인할 수 있습니다.

 

http://localhost:8080/blocko/board/2

  • 상세화면으로 이동 시 내용 역시 변경된 것을 확인할 수 있습니다.

 

aergoscan.io

  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.

 

5. 게시글 삭제

/blokoBoard/src/main/resources/lua/sql_smartcontract.lua

  • contract에 삭제할 boardIdx를 받도록 합니다.

 

/blockoBoard/src/main/java/board/board/controller/BoardController.java

  • 기존의 게시글 삭제 함수인 deleteBoard에서 호출하는 service를 변경해줍니다.

 

/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java

  • contractExecute를 사용하여 controller에서 받아온 boardIdx를 통해 ”deleteBoard”라는 contract 함수에게 전달해줍니다.

 

http://localhost:8080/blocko/board/2

  • 삭제하기를 누릅니다.

 

  • 성공 시 위와 같은 알림창이 뜹니다.

 

eclipse 결과값

  • eclipse console 화면에서 contract가 execute된 것을 확인할 수 있습니다.

 

http://localhost:8080/blocko/board

  • 삭제 성공 시 게시판 리스트에서 사라진 것을 확인할 수 있습니다.

 

aergoscan.io

  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.

 

 

이어서 이더리움 대신 아르고로 DApp 쉽게 만들기 3편에서는 게시판에 파일을 업로드하는 것과 파일 수정과 삭제를 해보겠습니다.

이더리움 대신 아르고로 DApp 쉽게 만들기1
이더리움 대신 아르고로 DApp 쉽게 만들기3

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

필수 입력 사항입니다.
필수 입력 사항입니다.
유효한 이메일 주소를 입력해주세요.
You need to agree with the terms to proceed

메뉴