- Config: 확장성 있는 SW 개발을 위해, 개발 대상 object를 추상화하여 코드를 개발하고, 구체적인 object를 구현할 때에는 추상화하여 개발한 별도로 코드의 수정 없이 config를 활용하여 구현한다.
- 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 값을 변경할 수 없다.
- 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로 구현할 대상
- 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하여 처리하는 객체
- ERC20: 토큰의 규약