[Web3.0]/블록체인 30

Wyvern Protocol

1. Atomic - NFT와 토큰 간의 거래는 트랜잭션 하나로 한번에 이루어 져야 한다. 2. Decentralized - 탈중앙화 형태의 P2P 거래가 가능해야 한다. (신뢰해야만 하는 중간 매개체가 없다) 3. Efficient - 거래는 최대한 효율적이어야 한다. 4. Revokable - 언제든지 사용자는 원하는 시점에 거래 컨트랙트에 모든 권한을 취소하고, 떠날 수 있다. Process(트랜잭션) 1. 거래 매칭 2. 거래에 대한 유효성 검증 3. 거래 후 실행되는 calldata 검증 4. 바이어, 셀러에게 요금 지불, 거래소에 수수료 지불 5. 함수 실행 6. 함수 실행 후 데이터 검증

COSMOS

코스모스란? 탈중앙화 방식으로 이종의 블록체인을 연결 및 상호 운용 가능할 수 있도록 구축하는 블록체인 네트워크 Tendermint BFT컨센서스 엔진으로, DPOS 방식을 취하고 있음 DPOS - 스테이킹 토큰을 가진 모든 사람이 노드를 돌리는 것 보다, consensus효율의 측면에서 선발된 몇명의 대표자에게 위임 - 텐더민트의 경우에는 100~130여개의 대표 노드에게 위임하여 동작, 검증인이 많아질수록 합의속도가 느려짐 Finality - 블록이 revert될 수 없다는 것을 나타내는 블록체인의 성격으로, Pow체인에서는 일정수준의 Confirmation이 지나야 블록이 revert 되지 않는다는 것을 확률적으로 확정할 수 있음 (비트코인의 경우 6번) - 텐더민트는 One Block Finali..

Re-entrancy attack

재진입 공격 - 이더를 전송하는 Send, Transfer 함수는 2300이라는 고정 가스비 소모 때문에 현재는 Call 함수를 권장하고 잇다. - 하지만 Call 함수는 재진입 문제가 있기때문에 컨트랙트 작성에 있어 시큐리티 코딩이 필요하다 Receive : 순수 이더만 받을때 작동하는 함수 Fallback : 함수를 실행하면서 이더를 보낼 때, 존재하지 않는 함수를 호출할 때 작동하는 함수 - 공격은 CA(공격자) 가 CA(컨트랙트) 에 가하는 것 - 공격자의CA의 Receive 함수를 통해 공격 - 따라서 입금과 출금 함수가 있는 컨트랙트에 대한 공격을 의미 - 공격자 CA는 한번 입급을 한 뒤, 출금함수를 실행하고 공격자 CA의 Receive 함수를 통해 재귀적으로 출금 함수를 계속 실행 prag..

Structure of CryptoKitties

- KittyAccessControl: 크립토키티의 관리자 계정 설정 및 긴급 상황시 크립토키티를 pause/unpause하는 전반적인 관리 기능 - KittyBase: 크립토키티 구조체 정의 및 생성, 전송 기능 - KittyOwnership: 크립토키티의 ERC721 토큰화 기능 - KittyBreeding: 크립토키티의 교배 기능 - KittyAuction: 크립토키티를 옥션과 연동시키는 기능 - KittyMinting: Gen 0 및 프로모션 키티를 생성하는 기능 - KittyCore: 크립토키티 정보를 조회하는 기능

이더리움 GAS

Block Gas Limit - 해당 블록에 들어간 전체 Transaction Gas Used의 합 Transaction Gas Used(Gas Limit) - 해당 트랜잭션 실행에 들어간 Gas 양의 총합 Gas Price - 해당 트랜잭션을 얼마나 빠르게 실행할지를 결정하기 위한 값 거래 수수료 Gas Limit x Gas Price - Gas Limit은 최초 트랜잭션에는 예상 Limit이 들어가고, 트랜잭션 실행 후에 실제 사용된 Gas Limit으로 수수료를 지급(남은금액 환급) Block 보상 - 블록채굴 보상(신규발행 ETH) + 거래 수수료 총합(기존 ETH) Uncle 보상 - 이더리움 상에는 Fork를 일부 허용하는 방식을 사용하고 있기 때문에 Uncle Block에 대해서 특정 계산에..

이더리움 Transaction 구조

트랜잭션이란 1. EOA가 EOA에게 Eth를 전송하거나 2. EOA가 CA를 호출할 때 사용되는 구조이다. EOA-EOA - value에 보내는 Eth양이 들어가고 - Input Data에는 빈 값이 들어간다 EOA-CA - value에는 보내는 값이 없는 경우가 0이 들어가고(Defi 등의 서비스의 경우 value 존재) - Input Data에 호출하는 함수명과 파라미터 값이 들어간다. CA-CA - 간의 호출 정보는 Internal Transaction 이라고 부르며 Contract 코드 상에서 Delegatecall, StaticCall, call 함수를 통해 발생한다. Transaction 서명 - 이더리운은 secp256k1 기반의 타원곡선암호(ECC)를 사용하여 서명하고 검증한다. - 트..

이더리움 Block 구조

Block Header 구조 1. Merkle Root Hash 값으로 블록 내 Tx의 위변조를 증명하고 2. Parent Hash 를 통해 Block간의 연결성을 증명한다. Block 생성 과정 1. Mempool(Tx-Pool) 에서 Tx들을 선택 (가스 리밋이 넘지 않는 트랜잭션의 조합들로) 2. EVM 실행, 이전에 있던 트리(parent trie load) 3. Tracsaction 실행(Receipt, Log 생성) 4. Block Header 생성 5. Find Nonce, MixHash (ethHash) 생성 (POW 일 경우) 6. Block 전파

이더리움의 Account Structure (2) - 자료구조

각각의 블록헤더에는 StateRoot가 있는데, 이더리움은 많은 상태의 효율적으로 계산과 변경을 위해 Merkle Patricia Trie 구조를 사용하기 때문이다. 위 다이어그램의 월드 스테이트 트리(World State Trie)에는 EOA와 CA의 1. nonce(이중지불 방지) 2. balance(잔고) 3. codeHash 4. storageRoot 라는 또 다른 해시트리의 루트값 이 있다. transactionRoot는 트렌젝션들의 해시트리 루트값 (트랜잭션 실행 명세) receiptRoot는 이벤트 로그들의 해시트리 루트값이다 (트랜잭션 결과값) storageRoot - Account storage contents Trie라고 하는 해시트리의 루트값 - CA들의 stroage 정보를 저장한다..

이더리움의 Account Structure (1)

Account의 종류 1. EOA - 사용자가 프라이빗 키로 직접 관리 - eth 전송, contract 호출 등 다양한 활동을 할 수 있다. - 계정 생성에 비용이 발생x 2. CA - 생성한 사용자의 정보에 의해서 네트워크에서 Account를 생성 - 사용자의 호출에 따라 State변경, 함수 호출 ,eth 전송 등 다양한 활동을 할 수 있다. - 계정 생성에 코드의 크기에 따른 비용이 발행, 이 비용은 생성자가 지불 Account의 State 저장 타입 1. noce - 계정에서 전송한 트랜잭션의 수를 기록, 0부터 시작 2. balance - 계정의 잔고(잔액)을 표시한다. Wei 단위로 표기 3. codeHash - CA만 가진 데이터이며, EOA는 빈 공간으로 가지고 있다. - 컨트랜트 코드의..

Compile Smart Contract(스마트 컨트랙트 컴파일)

Smart Contract 를 컴파일 하게 되면 1. Bytecode 2. OPCODE 3. ABI 를 얻게 된다. 컨트랙트를 네트워크에 배포할 때는 Bytecode 컨트랜트를 실행할 때 Gas 계산을 위해 OPCODE 클라이언트에서 정해진 Interface로 Contract와 통신을 할 때는 ABI를 사용 1. Contract Deploy - Smart Contract Compile 후 생성된 Bytecode를 이더리움 네크워크 상에 배포하게 되면 Contract Address 생성과 함께 해당 주소에 블록체인상에 저장된다. 2. Contract Access - 스마트 컨트랜트에 접근하기 위해서 필요한 것은Contract Address 와 ABI 이다. 이를 통해서 Dapp 상에서 Smart Contr..