일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 프로그래머스
- 블록체인
- Crash
- reentrancy
- 알고리즘
- 이더리움
- ethereum
- POS
- solidity
- 재진입공격
- 비트코인
- 분산원장
- view 이동
- Algorithm
- DEFI
- 백준
- 블록체인 기술
- External Call
- Mining
- pow
- .dsym
- DPOS
- viewcontroller
- ios
- Xcode
- Blockchain
- PBFT
- 암호화폐
- dsYM
- Report
- Today
- Total
목록이더리움 (8)
개발하기좋은날
이전 포스팅에서 Checks Effects Interaction, Mutex Pattern 알아보고 재진입 공격에 대해서 포스팅을 하였습니다 이번엔 그밖에 다양한 시큐리티 패턴에 대해 알아보고자 합니다 1. Emergency Stop Pattern - 블록체인에 배포된 스마트컨트랙트는 수정이 불가능합니다 그래서 예기치 못한 버그로 인해서 큰 피해를 줄 수 있는데 Emergency Stop Pattern은 특정 함수들이 실행되지 않도록 제어할 수 있도록 프로그래밍하는 패턴입니다. 쉽습니다 contract EmergencyStop is Owned { bool public contractStopped = false; modifier haltInEmergency { require(contractStopped) ..
Fallback, Receive 함수에 대해 알아보겠습니다 Fallback - 대비책 함수 - 무기명 함수 즉 이름이 없는 함수 - external과 payable이 필수 어떤 경우에 사용이 되는가? - 스마트 컨트랙트가 이더를 받을수 있게함 - 이더를 받고 난 후 어떠한 행동을 취하게 할 수 있음 - Call 함수로 없는 함수가 불려질떄, 어떠한 행동을 취하게 할 수 있음 0.6 이전 버전의 Fallback은 아래와 같이 사용 function() external payable { } 0.6 이후 fallback Fallback은 Recevie와 Fallback 두가지 형태로 나뉨 Receive: 순수하게 이더만 받을때 작동 Fallback : 함수를 실행하면서 이더를 보낼때, 불려진 함수가 없을 때 작..
External call에 이어서 관련된 재진입 공격에 대해 알아봅시다. 이더리움의 DAO 해킹 사건이후 가장 요구되는 기본 보안 사항이다 보통 재진입 공격같은 경우 External Call의 address.call에 의해 발생한다 DAO 사건또한 이러한 문제 떄문에 발생한 이슈입니다 1. 단일 함수에 대한 재진입 입니다 // INSECURE mapping (address => uint) private userBalances; function withdrawBalance() public { uint amountToWithdraw = userBalances[msg.sender]; (bool success, ) = msg.sender.call.value(amountToWithdraw)(""); // At t..
모든 체인의 Contract는 보안성이 중요하다 순식간에 자본금이 사라질수있기 떄문이다. 시큐리티 코딩은 기본적으로 스마트컨트랙트 개발자라면 알아두어야할 사항이라 생각하여 포스팅을 시작한다 External Call 신뢰성 - External Call 잠재적인 위험에 노출되어있다고 생각해도 무방 하다. - External Call은 해당 계약및 의존하는 다른 계약에서 악성 코드를 실행 할 수 있기 때문이다. - 그래서 모든 External Call은 잠재적인 보안 위험으로 취급되어 최대한 외부호출을 제거하거나 권장 사항을 사용하여 위험을 최소화 해야한다 1. 신뢰할 수 없는 계약의 표시 - 가장 먼저 외부 계약에 관련해서 상호 작용이 잠재적으로 안전하지 않다는 것을 분명히 하자 // bad Bank.wit..
블록체인에서 흔히 '채굴' 이라는 단어는 블록체인 네트워크에 노드로 트랜잭션을 검증하여 분산원장을 기록하고 보상으로 암호화폐를 얻는 것을 말함 여기서 블록체인 네트워크에서 새로운 블록을 생성하고 그 대가로 암호화폐를 지급받는 노드들이 '채굴자' 라고 얘기하조 그럼 우리 노드들은 채굴을 왜하는걸까? (당연히 돈이 되니깐 하조..ㅋㅋ) 이익이 되니깐 하는거다 이건 비트코인 게임 이론이랑도 연관이 있다 대표적으로 비트코인의 Pow에 대해 알아봅시다 이 노드(채굴자)는 어떤일 을 하나면 (이것도 일이조) - 네트워크 동기화 : 새로운 노드가 비트코인 네트워크에 합류하면, 다른 노드에게 과거의 블록들을 요청해 블록체인을 다운로드 할수있게 해주조 - 트랜잭션 검증 : 새로운 트랜잭션을 수신한 노드는 반드시 해당 트..
블록체인에서 블록은 헤더(Header) + 바디(Body)로 구성되어있다 - 헤더(Header)는 메타데이터 - 바디(Body)는 트랜잭션의 리스트로 구성 메타 데이터는 - 해당 블록은 체인에서 몇 번째 블록인지 - 해당 블록에서 몇 개의 트랜잭션이 있는지 - 해당 블록 생성은 누가 했는가 - 해당 블록의 크기, 총 전송량은 얼마인가 블록(Block)을 설명하기위해 필요한 데이터들이 들어있다 * 참고로 헤더에 Nonce 값은 Body Nonce랑은 다른 역할 그럼 Body에서 트랜잭션은 무엇인가? 먼저 트랜잭션이란, 위키 설명에서는 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 블록체인에서 마찬가지로 상호작용 및 작업 수행의 논리적 단위, 블록체인에서 일어나는 모든 활동..
블록체인은 활용되는 목적 또는 공개 범위에 따라 여러 방법으로 블록체인 네트워크를 구축할수있다 1. 퍼블릭 블록체인 (Public Blockchain) 2. 프라이빗 블록체인 (Private Blockchain) 3. 컨소시엄 블록체인(Consortium Blockchain) 퍼블릭 블록체인 (Public Blockchain) - 개방형 블록체인은 누구나 트랜잭션을 생성 프라이빗 블록체인 (Private Blockchain) - 폐쇄형 블록체인은 서비스 제공자 (기업, 기관)의 승인을 받아야만 참여할수있다 - 엔터프라이즈 블록체인 이라고도함 - 리눅스 재단 오픈소스 프로젝트인 "하이퍼레저" 또한 프라이빗 블록체인 컨소시엄 블록체인(Consortium Blockchain) - 동일한 목적이나 가치를 가지고..
최초의 암호화폐이자 암호화폐의 대표자 비트코인의 핵심 기술은 무엇이고 어떤 의미를 지니고 있을까? 블록체인의 핵심은 인터넷 상에 있는 사람들과 동일한 데이터를 가지는것 간단하게 A, B, C 컴퓨터가 블록체인 기반 어플리케이션을 사용중이라면 또는 네트워크 구성원이라면 A, B, C 모두 동일한 데이터를 저장및 유지 해야한다는 말이다 블록체인은 아래와같은 특징을 가집니다 누구나 데이터를 추가 가능 데이터는 한 번 추가되면, 수정하거나 삭제할 수 없다 개인이나 단체가 데이터를 관리하는 것이 아니라, 블록체인 네트워크에 있는 모든 사람들이 함께 관리 블록체인은 블록(block) 체인(Chain) 으로 그 의미를 어느정도 파악할수있다 블록(Block) - 블록이란 데이터를 저장하는 공간 - 자산에 대한 정보, ..