TIL55

shnae·2024년 1월 11일
0
post-thumbnail

총 4개의 트라이가 존재한다

헤더에 들어있는 3가지 트라이

안 들어가는 1가지 트라이: storage trie (특정 컨트랙트에 대한 상태 변수를 알고 싶다면 4개 트라이 중에 storage trie를 참고하면 된다)

이더가 저장되어 있는 곳은 state trie

  • balance → 머클 패트리시아 트라이에서 → state trie → 내 계정에 매핑되어 있는 잔액.

나의 이더 잔액과 ERC-20 잔액이 저장되어 있는 곳은 완전히 다르다. 저장되는 주체가 완전히 다르다.

  • 내 이더를 확인하고 싶다면 필요한 재료 2개: 나의 지갑주소가 필요하다.
  • 내 ERC-20 잔액을 확인하고 싶다면, 그 ERC-20 컨트랙트 주소가 필요하다. (balanceOf 함수를 사용하여 → 매핑에서 확인해서)

즉, 이더를 지키려면 개인키를 지키면 된다.

  • 이더리움은 코어단에서 블록생성 시 자동으로 생성된다 (스마트 컨트랙트에서 생성되지 않는다. 관련없다.)
  • 다른 ERC-20, ERC-721은 스마트컨트랙트를 통해 발행. (그 이상, 그 이하도 아니다.)

체크된 것은 CA
A가 D에게 이더를 보내면 ABCD에서 어느 곳에 저장될까?

ERC-20 토큰을 A가 D에게 보내면 A~F 중에 어느 곳에 변화가 일어날까?
ERC-20 스마트컨트랙트인 E! 모든 정보는 스마트컨트랙트인 E에 저장된다.

USDC 를 A가 D에게 보내면, A~F 중에 어느 곳에서 변화가 일어날까?
USDC CA인 F가! B, C 리프 노드에는 전혀 영향이 없다.

메타마스크에서 토큰을 추가하는 이유는? 모르니까! 얘기 안해주면 모르니까.

EOA는 ERC-20 정보는 알 수 없다. ERC-20 USDT 정보는 스마트 컨트랙트에만 저장되어 있고, 다른 유저들의 정보도 스마트 컨트랙트에 저장되어 있다. state trie와 다른 곳에 저장되어 있다.

설계 시, 🤔 토큰을 스마트컨트랙트가 가지고 있게 할까? 고민을 했겠지.

지갑 안에서 이더리움 네이티브 코인 컨트랙트 주소가 내장되어 있어서 for 문으로 확인해주기 때문에 불러와진다.

개인키가 안 털려도 장난칠 수 있는 방법이 있다 (코드로)


ERC-20 파헤쳐보기

이름을 정하지 않으면 0x주소로 불러야하기 때문에 어렵다.

이름과 심볼을 바로 정하도록 하고 있다. 이름이 중복될 수 있다.

유명한 밈코인도 제대로 확인하고 들어가지 않으면 이상한 컨트랙트 코인을 매매하게 될 수도 있으니 주의.

transfer

  • 보내는 주소 확인
  • 받는 주소 확인
  • _update
    • 받는 주소는 잔액에 받는 만큼 추가해준다
    • 보내는 주소가 돈이 없으면 오류 발생시키기
    • 보내는 주소가 0 이면 민팅으로 여기고 totalsupply량을 늘린다
    • unchecked: 보내는 사람의 잔액 업데이트
      • 오버플로우를 슬쩍 넘어가게끔한다 → What is the implications of using this?
      • 2^256 -1 까지만 계산할 수 있다. 2의 256승은 0으로 추리한다.
    • emit: interface에 있는 event를 불러온다
    • 새로 발행되는게 아니기 때문에 totalSupply에는 영향이 없다
      • mint나 burn을 하면 총발행량은 변한다
  • _allowances
  • ERC-20 스마트컨트랙트에 이 정보를 모두 가지고 있다 (개인키, 잔액 등등)
    • 개인키가 있어야 _balance에 접근할 수 있기 때문에 보내고 받기가 가능하다 → 돈에 대한 접근 권한을 위임할 수 있음.
      • 스마트컨트랙트는 접근권한을 위임하는 기능이 전제되어야한다
    • 이더는 불가하다. 이더는 각각의 계정에 저장되기 때문에.

transfer from

  • distribute
  • approve
  • transferFrom
  • allowance 확인

0개의 댓글