Transaction이란?
: 일반적인 데이터에 transaction 생성자의 전자서명이 담긴 메시지라고 생각하면 쉽게 이해할 수 있다. EOA에 의해서 생성되기 때문에 private key를 가지지 않는 smart contract에서는 transaction을 만들지 못한다.
Transaction 구조
- Nonce : replay attack을 막기 위한 용도로, 하나의 account가 있을 때 몇 개의 transaction을 전송했는지 의미함.
- Gas price : 가스 하나의 가격(wei 단위)
- Gas limit : 최대 가스 소모량
- Recipient : target account
- Value : 얼마의 이더를 송금할 것인가?
- Data : contract 코드의 실행을 위한 필드
- v, r, s : 전자서명 서명 값(ECDSA 알고리즘)
Nonce란?
: 하나의 account에서 몇 개의 transaction을 전송했는지를 알 수 있으며, 성공된 transaction 개수만 카운트된다. (wallet에서 관리)
** nonce에 관한 이슈가 존재한다. 첫 번째로, 하나의 account를 하나의 wallet에서만 관리한다면?
짧은 시간에 여러 개의 transaction이 생성될 때 nonce 2번에서 문제가 발생할 경우, 정상적인 transaction 3, 4, 5 또한 처리되지 않고 보류 상태를 가지게 된다. 심각한 문제를 일으킬 정도는 아니나, 불편함을 가질 수 있다.
** 두 번째는, 하나의 account를 여러 개의 wallet에서 관리한다면?
주로 거래소 wallet들이 이러한 케이스일 수 있다. 하지만 동시에 transaction이 만들어지다 보면 중복되거나 차이가 발생하는 nonce가 생길 수도 있다. 현재는 하루 단위로 account를 rebalancing 하는 간헐적 방식을 취하고 있다.
Recipient란?
: target account로, 따로 체크하는 방법은 존재하지 않는다. 악의적인 사용자가 고의로 존재하지 않는 계정으로 target을 잡으면 ether를 burning 하게 되고, 방해하는 목적을 가지기도 한다.
Value와 Data란?
- value만 가질 경우 : EOA간의 ether를 전송하는 transction
(case 1) EOA -> EOA , 새로 생긴 transaction이거나 state가 변경되었다는 내용의 transaction
(case 2) EOA -> contract address, function 함수를 실행하거나 빈 callback함수를 실행하는 transaction
- data만 가질 경우 : smart contract
대부분의 경우 contract adress 값이 들어가지만, 특정한 EOA address가 들어갈 수 있다.
payload 구성은 Function selector + Function arguments로 구성된다.
** function selector : 어떤 function을 호출하는지
** function arguments : withdraw_amount들이 인코딩 되어 맨 뒤 serialized 된 hex값이 나옴.
- value와 data 모두 가질 경우 : transaction과 smart contract이 동시에 이뤄짐.
- value와 data 모두 가지지 않을 경우 : 가능은 함.
** transaction에서 전자서명을 하는 이유 : 본인 인증 용도
타원 곡선 상의 전자서명 알고리즘 중 하나인 ECDSA 알고리즘을 사용하는데 간단하게 과정을 이야기하면, 생성한 transaction에 대해 rip encoding을 한 다음, keccak256 hash를 돌리고 해시 값 자체에 대해 ECDSA 서명을 해준다.
이 과정 중에 chainID가 필요한데, chainID는 testnet에서 쓰인 transaction이 mainnet에서 사용되는 reply attack을 막기 위해서임.
'학교 공부 > 블록체인' 카테고리의 다른 글
[Ethereum] solidity언어 문법 (0) | 2021.06.11 |
---|---|
[Ethereum] Smart Contract이란? (0) | 2021.06.03 |
[Ethereum] 이더리움에서 사용하는 암호학 (0) | 2021.06.03 |
[Ethereum] 이더리움 Account와 이더리움 네트워크 (0) | 2021.03.19 |
[Ethereum] 이더리움 실습, 테스트넷에서 이더(ETH) 받기 (2) | 2021.03.19 |
댓글