• Config: 확장성 있는 SW 개발을 위해, 개발 대상 object를 추상화하여 코드를 개발하고, 구체적인 object를 구현할 때에는 추상화하여 개발한 별도로 코드의 수정 없이 config를 활용하여 구현한다.
    • 따라서, 구체적인 설정 내용(Ex: 서버 url, api 주소, port 번호)등이 변경되어도 코드 수정 없이 구체적인 object를 새롭게 구현할 수 있다.
    • https://hi098123.tistory.com/332
  • api: Application Programming Interface, 소프트웨어 구성 요소가 통신할 수 있게 하는 매개체
    • Solidity
      • function name은 대부분 동사로 이루어져 있다.
      • Visibility: Smart Contract의 외부 혹은 내부에 state를 공개할 것인지 결정
        • External: Smart Contract 외부에서 사용하는 Interface
        • Public: Smart contract 외부, 내부 모두에서 사용하는 Interface
        • Internal: Smart contract 내부에서만 사용하는 함수 -> 해당 내용 비공개
          • State variable은 internal이 기본값
        • Private: Smart contract 내부에서도 자신(private)만 사용하는 함수
        • https://caileb.tistory.com/140
      • View / Pure: Visibility 키워드 앞에 정의
        • View: storage state를 읽을 수 있지만, state 값을 변경할 수 없다.
        • Function 밖의 변수들을 읽을 수 있으나 변경 불가능
      • Pure: storage state를 읽으면 안되고, 그 state 값을 변경할 수 없다.
        • Function 밖의 변수들을 읽지 못하고, 변경 불가능
        • https://velog.io/@kich555/Solidity-View-Pure
        • https://dayone.tistory.com/7
  • abi: Code(Smart Contract)를 실행하기 위한 인코딩 방식
    • 포괄적인 의미의 abi: 두 소프트웨어 모듈의 인터페이스 역할을 하고, 보통 그 중 하나는 기계어 레벨에 있다.
      • 기계어란 사람이 개발한 코드를 컴퓨터가 이해할 수 있는 언어로 컴파일한 결과물
    • ABI 인터페이스는 데이터를 기계 코드로 인코딩/디코딩 하기 위한 방법이다.
    • 이더리움에서 기본적으로 EVM에 Solidity Contract를 호출할 때 인코딩하거나 transaction들로부터 데이터를 decoding할 때 쓰이는 방법이다.
    • 이더리움 smart contract는 ETH에 배포된 바이트 코드.
    • ABI는 Contract 내의 어떤 함수를 호출할 지를 지정하는데 필요하다.
    • 컨트랙트 함수와 매개변수들을 JSON 형식으로 나타낸 리스트
    • ERC20 프로토콜은 몇가지 컨트랙트 함수 interface 규격을 정해서 이에 만족하는 함수들을 모아 놓은 것
      • ERC20 코인의 totalSupply, balanceOf 같은 함수들이 존재하고, ABI를 통해 이들을 호출
    • 컨트랙트는 블록체인의 특정 주소에 바이트코드로 저장되어 있고, ABI는 컨트랙트와 low level에서 통신할 수 있게하는 통신 규약 같은 역할 수행
    • https://velog.io/@younghwan/ABI
    • https://opentutorials.org/module/3136/19273
  • json: key/value 쌍으로 이루어져 있는 파일 형식
  • Class: SW로 구현할 대상을 만들어 내기 위한 설계도
    • 연관되어 있는 변수와 메서드(함수) 집합
  • Interface / Abstract Class: 모두 abstract method를 가진다.
    • Interface: 해당 Interface를 구현하는 Class들에 대한 method(동작)을 구현하게끔 강제하는 설계도
      • 상속 관계를 쭉 타고 올라 갔을 때, 다른 부모 클래스를 가져도 같은 기능이 필요할 경우 (Swimable)
    • Abstract Class: 부모-자식 관계에서 Abstract Class를 상속받으며 같은 부모 Class를 갖는 자식 Class들 간의 공통된 메서드(abstract method) 구현 강제
      • 구현하는 Class에서의 method들은 Interface의 method를 override한 것
      • 상속 관계를 쭉 타고 올라 갔을 때, 기능까지 완전히 똑같은 기능이 필요한 경우 (Animal)
  • Object: SW로 구현할 대상
    • Class 설계도 대로 생성된 실체
  • Instance: 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체
  • Core: DeFI에서는 Pool
    • Ex: 어떻게 LP를 만들지, 어떻게 SWAP을 발생시킬지
    • Tokenomics
  • Pheriphery
    • 많이 쓰는 Core의 함수를 모아서 User가 쓰기 편하도록 만든 객체
    • Ex) Router: Protocol 개발자들이 client들이 Pool 간 swap을 지원하도록 만든 객체
    • User Interface
  • Layer1,2
    • Layer1: ETH
      • EVM: Etherium Virtual Machine
        • Virtual Machine: 서로 다른 os를 같은 pc에서 사용할 수 있도록 지원하는 SW
        • ETH: Block Genesis 15초, 가스비가 너무 비쌈
    • Layer2: Polygon, Avalanche
      • ETH에 올릴 계산들을 Layer2에서 다 실행하고 계산한 결과만 Layer 1인 ETH에 적용을 시킨다.
      • 싸다, 빠르다
  • Call by value: 함수를 호출할 때, 매개변수의 값만! 전달한다.
    • 함수로 전달된 매개변수 값이 함수의 dummy 변수에 복사되고, 함수 내 dummy 변수에 대한 변경은 원래 매개 변수의 값을 변경시키지 않는다.
  • Call by Reference: 함수를 호출할 때, 매개변수가 저장된 메모리 주소를 전달한다.
    • 함수로 전달된 매개변수의 주소가 함수의 dummy 변수에 복사되고, 함수 내 dummy 변수가 변경되면 원래 매개 변수 값도 변경된다.
  • Web Socket
    • 실시간으로 client와 server가 연결되어 있고, 지속적으로 서로의 연결을 확인한다. 그리고 client와 server 모두 데이터를 송/수신할 수 있다.
  • http: 브라우저와 서버 간에 데이터를 받기 위한 방식
    • Client는 Request를 보내고, Server는 Request에 대한 Response만 하면 된다.
    • 실시간 통신이 아니다.
  • Vault: Asset(Token)을 모아 놓는 저장고
    • Ex: Flash Loan을 위한 Vault
    • Ex: Asset Management를 위한 Vault
  • Treasury: 프로젝트 팀 또는 DAO에 의해 통제되는 온체인 상의 자금 풀
    • 서비스 사용 수수료로부터 확보하는 Vault
    • 초기 토큰 유동성 풀 형성
    • 생태계 참여자에 대한 보상
    • 프로젝트 운영에 필요한 각종 지출
    • 토큰 바이백 또는 소각
  • Staking: User가 Staking을 하면 Reward를 준다.
    • Liquidity 제공 측면: 시장 참여자들이 Price Impact가 적어지므로 시장 참여자들의 참여를 고취시킬 수 있다.
    • Circulation 감소: 토큰 가격 안정성을 위해 유통량을 제어해야 하는데 Staking하면 Circulation이 감소한다.
  • Proxy: Contract를 delegate하여 처리하는 객체
    • 한번 배포된 Smart Contract는 수정이 불가능하다
    • 배포 이후 변경사항을 적용하기 위해서 특정 기능과 Contract를 서로 연결해두고, 특정 기능에서 수정사항이 발생하면, 수정된 Contract를 배포하고 Proxy에서 특정 기능과 새로운 Contract를 연결시키는 방식으로 작업한다.
    • https://candykick.kr/solidity/
    • https://steemit.com/kr/@kblock/64-upgradable-smart-contract
  • ERC20: 토큰의 규약