Blockchain/실습

20210813블록체인_트랜잭션에 대해 올바르게 알기

MI개발자 2021. 8. 13. 23:37

 

트랜잭션에 대해 올바르게 알기

 

 

 

 

목차 

1. 복습_ 트랜잭션 내부

2. 코드에 이더를 보내는 방법은 몇 가지인가?  (총 3가지)

3. 강사님 코드에서 이더를 빼갈 수  있는 코드를 작성하라.  

 

 

오늘은 트랜잭션에 대해 정리를한다. 

트랜잭션은 블록체인에서 엄~~청 중요하다. 

왜냐하면,  노드(참여자=마이너)간의 거래기록을 의미하기 때문이다.

 

우선, 블록체인에서는 크게 읽기/쓰기가 있는데, 

쓰기가 바로 트랜잭션에 해당되며, 1.Contract배포, 2.Contract함수 3.이더전송 이 일어났을때 트랜잭션이 일어난다. 

 

그럼 사전적인 트랜잭션의 의미는 무엇일까? 

데이터베이스가 항상 정확하고 일관된 상태를 유지할 수 있도록 다양한 기능을 제공하는데, 그 중심에는 트랜잭션이 있다. 트랜잭션이라는 것을 관리함으로써 데이터베이스의 회복과 병행 제어가 가능해져 결과적으로 데이터베이스가 일관된 상태를 유지할 수 있게 되는 것이다.

[네이버 지식백과] 트랜잭션의 개념 (데이터베이스 개론, 2013. 6. 30., 김연희)

https://terms.naver.com/entry.naver?docId=3431258&cid=58430&categoryId=58430 


 

1. 복습_ 트랜잭션 내부 

 

 

트랜잭션의 내부는 아래와같다. 

그리고, 트랜잭션을 하려면 개인키(서명) & 이더(가스) 가 꼭꼭 필요하다!

없으면 트랜잭션을 할 수 없다! 

그럼이제 내부를 살펴봤으니, 이제부터 나올 예시를 통해 더 다뤄보도록하겠다. 

 


2. 코드에 이더를 보내는 방법은 몇 가지인가?  (총 3가지) 

 

1. use 메타마스크 

2. use Remix (내가 배운 툴 이름)

3. use selfdestructor함수

 

 

1. use 메타마스크

메타 마스크로 이더 전송시,

1) 우선 send버튼을 누른다.

2) 보낼 컨트랙트 주소로 입력한다.

3) 보낼 이더의 양과 가스비를 적어준 후, Next하고 진행한다. 

 

 

2. use Remix (내가 배운 툴 이름)

1) Remix에서호출 할 컨트랙트 코드를 붙여놓는다 (Remix또한 abi의 정보가필요)

2) 컨트랙트 주소를 넣고, At Address를 눌러 조회한다 

3) 보내줄 이더의 양을 3에다가 입력해준 후에 

4) 함수를 호출하면, payable키워드가 붙어있으므로, 정상적으로 컨트랙트로 전송된것을 확인 할 수있다.  

 

 

3. use selfdestructor함수

1) 우선 constructor( )를 사용하여 배포할 때 원하는 이더의 양을 함께  배포한다. (그럼 우선 이더 전송은 되었다!)

2) 그럼 배포된 컨트랙트로 destination을 호출하여 매개변수에 받을 주소를 적어주면 이더를 다시 받아 올 수 있다. 

 

 

그럼 3번 use selfdestructor함수를 예로들어  위에서 말한 트랜잭션의 내부를 그려보도록하겠다. 

해석을 하자면, 

contract ForceHack을 실행하기까지 ,  총 2번의 트랜잭션이 일어났는데,

첫 번째는 배포할 때 한번, 두번 째는 함수 호출 할 때 한 번 이렇게 총 2번이 일어났다.

 

그리고,

첫번째는 to는 배포할 때는 이미정해져놓은 0x000... 이라는 곳으로 배포되어지고, 

넣을 이더의 양과 gas 그리고 date 전체코드를 넣게된다.

 

 

두번째는 배포된 컨트랙트의 함수 destination을 호출하게되면, to는 함수가 있는 컨트랙트 주소로 입력해줘서 그 함수에 접근 가능하도록 해줘야된다. 따라서 to는 호출할 함수가있는 컨트랙트주소가 입력된다고 생각하면된다! 

그리고 value는 첫 번째에 생성자를 통해 1이더를 보내줬으므로 이미 컨트랙트에는 1이 있으니까 보내지않는다.

gas는 알아서 적당한 양을 넣어주면된다. 

 


3. 강사님 코드에서 이더를 빼갈 수  있는 코드를 작성하라.  

 

왼쪽과 같은 코드는 코드 자체에 이더를 빼나갈 수 있게끔 작성한 코드가 1도 없기때문에 그 어떠한 누구도 이 컨트랙트 안에있는 돈은 빼나갈 수 없다. (해커라도 왼쪽과 같은 컨트랙트는 절 때 안에있는 이더를 빼 나갈 수 없다)