Flow
1. Request를 받고 Transaction을 생성
- JSON / RPC 로 요청을 받고 SendTransaction OR SendRawTransaction 에서 처리
- 받은 요청값들에 대한 Transaction struct를 생성 후 submitTransaction 호출
- Transaction 내부의 txdata에 gasPrice, gas 관련 데이터가 존재
- pool에 추가 전 validate 체크
- 현재 pool에 대한 gas와 Transaction의 gas를 체크하는 부분 존재
- protocol 내 gas와 관련 고정 변수값들도 있음
- validate 및 pool slot 체크 후 sendCases에 있는 채널들에게 전파
2. Transaction을 전파, 실행하고 Block으로 생성
1) peer간의 트랜잭션 전파
- Node가 띄워지면서 트랜잭션 이벤트에 대한 채널을 세팅하고, 해당 채널로 트랜잭션을 받는 경우 해당 트랜잭션의 hash 값을 추가
- 새 peer가 연결 될땐 ProtocolManager에 peer 등록 후 broadcast 수행, 트랜잭션에 대해선 p2p 전파
2) 트랜잭션 핸들링 후 실행, 영수증 발행
- 트랜잭션 채널로 새로운 트랜잭션이 핸들링될 경우 수행
- Work struct 내부에 GasPool과 Header를 갖고 있으며, Header 안에 GasLimit, GasUsed 등의 정보가 있음
- Andamiro에서 Header 안의 Difficulty는 삭제
- GasPool은 트랜잭션에 대한 가스 비용값 (uint64)
- 트랜잭션을 EVM에서 실행시키기 위해 Message, Context, EVM 생성
- Message 안에는 트랜잭션에 있던 기본 데이터와 가스 세팅
- Context에도 동일하게 세팅, Andamiro에선 Diffculty는 삭제
- EVM 내 Interpreter가 별도로 있고 안에 EVM을 넣고... GasTable이 별도로 있음 (phase에 따라 값들이 다름)
- StateTransition을 생성, 트랜잭션에 대한 실행 Call 또는 스마트 컨트랙트 Create를 EVM에서 실행
- 트랜잭션 내 to가 있는지 없는지를 체크하여 Call 또는 Create 실행
- 실행 후 결과에 대한 Receipt 발행하여 리턴
- Receipt 안에는 트랜잭션 Hash, status와 Log, GasUsed 등의 데이터가 포함
3) 트랜잭션 실행 후 블록 생성