반응형 ETC38 [알고리즘] 재귀함수 (Recursive Function) 재귀함수 재귀함수란 함수 내에서 자기 자신을 호출하여 작업을 수행하는 방식의 함수이다. 재귀함수를 작성할 때는 함수 내에서 자기 자신을 다시 호출한 후, 그 함수가 끝날 때까지 함수 호출 이후의 명령문이 수행되지 않는다는 사실과 종료조건이 꼭 포함되어야한다는 부분을 인지하고 작성하면 오버플로우를 피할 수 있다. 다시말해 재귀함수에서 중요한 부분은 실행을 마무리짓는 부분과, 계속 재귀를 실행하는 부분이 존재한다는것이다. 또한 그것이 일반적으로는 n이 0이나 1이 되면 종료하게 되게끔 구성이 되어있다. 1. 카운트다운 def countdown(n) : # 0 이 되는순간 end 출력 if n==0 : print("end") # 받은 인자 출력 및, n-1 한값을 다시 재귀 else : print(n) cou.. ETC/알고리즘 이론 2021. 8. 2. [DeFi] Unlimited Minting Exploit 2020년 12월 28일 +UTC 오전 8시 8분 12초, Cover Protocol의 shield mining contract인 Blacksmith.sol이 털렸다. 해커는 mining contract의 버그를 악용해 COVER token을 무한정 발행하였고, 440만달러 이상을 탈취하였다. 원인 L118의 코드때문에 입금할 때 L121의 pool state를 업데이트하는 과정에서 문제를 발생시켰다. 결론부터 이야기하자면, L118 코드가 저곳에 위치했기때문에, Blacksmith contract가 miner에게 초기 설계 또는 기획보다 많은 보상을 주게 되었고, 이러한 취약점이 결국 큰 손실로 이어지게 된것이다. Timeline The initial attacker's timeline Blacksmi.. ETC/프로젝트 2021. 7. 8. [DeFi] 디파이 해킹? 먹튀? Rug Pull 글을 시작하기에 앞서 러그풀(rug pull) 이란? Rug Pull | CoinMarketCap A rug pull is a type of scam where developers abandon a project and take their investors' money. coinmarketcap.com 직역하면 양탄자를 쭉 땡긴다는것. 개발자들이 프로젝트를 접고 투자자들의 자금을 탈취하는 악의적인 행위를 말한다. Wallstreetswap.finance 에 대한 간략한 정보 Address Owner Address WallStreetSwapFactory WallSTToken TheFarmerofWallStreet WallSteetSwapRouter WallStreetSwapPair (BNB/BUSD) Ti.. ETC/프로젝트 2021. 7. 8. [NFT Code] ERC-721 컨트랙트 리뷰 기본적인 ERC-20, ERC-721과 같은 이더리움 표준의 개념들은 리포트에 자세하게 정리되어있다. (사실 그냥 봐주시면 좋겠습니다.. 열심히 썼거든요..) NFT : 메타버스 시대로 가는 첫번재 발판 이번에 발간된 헥슬란트 이슈 리포트 주제는 ‘NFT : 메타버스 시대로 가는 첫번재 발판’입니다. medium.com 따라서 기본 개념을 건너뛰고, 코드레벨단 리뷰를 간단하게 해보려고 한다. 기본적으로 ERC-20를 알고있다는 가정 하에 작성하였고, ERC-721에 대한 포스팅을 작성하고, 추후 ERC-20 등 대표적인 ERC 표준들을 코드레벨단에서 리뷰할 예정이다. ERC-721 Interface /// @title ERC-721 Non-Fungible Token Standard /// @dev See.. ETC/프로젝트 2021. 6. 15. [NFT Research] erc-20, erc-721 그리고 리포트 발간까지 2016년 블록체인을 처음 알게되었다. 학부 1학년이던 나는, 짧은 지식이였지만 블록체인이 갖고있는 안정성, 신뢰성, 보안성 등 여러가지 특성에 매료되었고 "기술적인 관점"에서 블록체인을 바라보기 시작했다. 2017년 본격적으로 이더리움 스마트 컨트랙트를 공부하기 시작했다. 당시, 이더리움 기반의 ICO들이 굉장히 성행하였고, 이더리움 표준인 ERC-20을 이루는 근본적인 스마트 컨트랙트 코드를 한줄한줄 뜯어 분석하고 직접 이더리움으로 ICO에 참여하며 내가 전송한 이더리움이 어떻게 어디로 전송되는지 모든 트랜잭션을 하나하나 뜯어 분석했다. 그리고 2021년, 몇년전부터 관심을 갖고있던 블록체인 기업에서 일을 할 수 있는 기회가 주어졌고, 나는 그 기회를 놓치지 않고 꽉 쥘 수 있었다. NFT : 메타버.. ETC/프로젝트 2021. 6. 15. [Project_Beans Party] 앱 개발 인재양성 프로그램 마무리 2020년 9월~12월 약 4개월간 참여한 앱 개발 인재양성 프로그램을 최종 마무리 하였다. 학교 SW중심대학사업단 에서 진행한 프로그램이었고, 아래 일정을 토대로 프로그램이 진행되었다. 비즈니스 모델링 교육과 앱 개발 교육이 생각보다 흥미롭고 알차게 진행되어서 좋았다. 평소 갖고있던 아이디어들을 어떻게 구체화할 수 있을까 고민을 많이 했는데 해당 교육을 듣고 도움이 많이 되었다. 이후 앱 개발, 기획, 설계에 관한 교육을 들었고 동기 4명과 함께 팀을 꾸려 프로젝트를 시작했다. 하지만..코로나로 인해 시험기간이 약 2주에서 3주, 길게는 한달까지 지속되었고, 캡스톤디자인 프로젝트를 진행중이던 내 개인 스케줄로 인해 실질적으로 어플리케이션을 개발할 수 있는 기간이 굉장히 짧았다.. 애초에 개발 역량을 보.. ETC/프로젝트 2021. 1. 2. [컴퓨터구조] ch.2-4 MIPS Two Key Principles of Machine Design (컴퓨터 설계의 두가지 핵심 원칙) 명령어는 숫자로 표현이 되므로 데이터와 구분할 수 없다. 데이터와 표현 방법이 같으므로, 표현 원칙이 달라야 구분할 수 있다. 명령어들의 집합을 프로그램이라고 하고, 프로그램도 데이터처럼 메모리에 저장되어 읽고 쓰여진다. 이를 Stored-program concept 라고 한다. 프로그램들은 바이너리 숫자 파일로써 저장이 된다 -> 바이너리 호환이 된다. MIPS Logical Operations Overview (MIPS 논리 연산) 산술명령어들은 레지스터에 들어있는 값 전체를 하나의 부호가 있거나 없는 정수로 취급하였다. 하지만, 레지스터에 들어있는 32bit의 값을 개별적으로 처리하는 방법이 필요하.. ETC/CS 2020. 10. 26. [컴퓨터구조] ch.2-3 MIPS MIPS ( RISC ) Design Principles (설계 원칙) 막 외우자고 생각하지말고 한번 슥 보고 지나가자. 단순하게 만들어 규칙성을 확보하라 고정된 크기 (32 bite) 명령어 형식을 많이 만들지 말라. 동작을 나타내는 코드는 앞에 6 bits 에 표현 작은것이 더 빠르다 명령어 셋 많이 쓸 필요 없다. 레지스터들의 집합 수 32개정도로 제한 주소 지정 방식(연산에 필요한 값을 어디로부터 어떻게 가져올 것인가를 지정하는 방식) 많이 만들지 마라. 자주 사용되는것 빠르게 실행되게 하자 메모리에 접근하는 경우는 load-store 명령어만을 통해서 사전에 레지스터 파일을 가져다놓으면 그 값에 대해서 연산하도록 하자. immediate operands를 명령어상에 가지도록 하자 좋은 설계란 적.. ETC/CS 2020. 10. 25. [컴퓨터구조] ch.2-2 산술 동작 간단한 산술동작 add a, b, c # a = b + c sub a, b, c # a = b - c 간단한 산술동작으로부터 규칙성을 가지도록 하면, 구현함에 있어 굉장히 간단해진다. 조금 복잡한 산술동작 f = (g+h) - (i+j); 각각의 부분 결과를 저장할 수 있어야한다. 즉 add t0, g, h # temp t0 = g + h add t1, i, j # temp t1 = i + j sub f, t0, t1 # f = t0 - t1 t0 와 t1은 각각의 계산을 잠깐 저장할 임시저장소이다. 즉. 임시 결과를 저장하는 요소가 필요한데, 그것을 레지스터(register) 라고 한다. 그리고 컴파일러가 각각의 값들을 여러 레지스터 중 어디로 매핑할것인지 작업하게된다. 연산에 필요한 값을 메모리로부터.. ETC/CS 2020. 10. 24. [컴퓨터구조] Ch.2-1 컴퓨터 언어 - Language of the Compute The Instruction Set : a Critical Interface 유저들은 하드웨어가 이해할 수 있는 언어를 사용해서 작업을 지시하게된다. 이 언어에 대해서 생각해보자. Functions of Instruction Set 모든 프로세서는 최소한 아래의 기본 기능들은 수행할 수 있어야 한다. 산술 논리 연산 메모리와 데이터를 주고받는것 ( load / store ) 조건부 분기(Conditional Branches) 조건을 결정하는 방법이 필요하다. 조건이 충족된다면 분기할 대상의 메모리 주소가 필요하다. 충족되지 않는다면 다음 Instruction으로 이동한다. 점프 또는 서브루틴 연결에 대한 프로시저 호출(Procedure call)에 관한 명령어가 있어야 한다. return address .. ETC/CS 2020. 10. 24. [컴퓨터구조] Ch.1 컴퓨터 추상화와 기술 - Computer Abstractions and Technology Classes of Computers Personal computers 다양한 소프트웨어 설치 가능, 범용 환경을 갖춤 가성비 고려대상 Server computers (= cloud computing) 네트워크 기반 대용량, 성능, 안정성 고려 소규모 서버에서 빌딩 규모에 이르는 범위 Supercomputers 과학 계산이나 엔지니어링 계산 성능은 가장 좋지만, 전체 컴퓨터 시장에서 작은 부분을 차지한다. Embedded computers 시스템 구성 요소로 숨겨져있음 적은 비용(전력)으로 최고의 성능을 내기 위함 Notations Used in Textbook Processor Core cpu 기능을 하는 코어 모듈을 하는 기능과 센서로서의 역할을 하는데 필요한 기능들을 하나의 칩에 넣을 수 있다는 점.. ETC/CS 2020. 10. 21. [알고리즘] 피보나치 수열(Fibonacci Sequence) 알고리즘 (JAVA) 본 포스트는 여러 피보나치 수열 알고리즘 관련 게시글 중 해당 포스트를 참고하여 Python to Java로 작성해본 포스트입니다. 피보나치 수열이란? 피보나치 수열(Fibonacci Sequence)은 단순한 단조 증가(monotonically increasing) 수열로 0번째 항은 0, 1번째 항은 1, 그 외 항은 전번, 전전번 항의 합으로 표현된다. 바로 위 그림은 피보나치 수열의 첫 10항 정도를 보여주고있다. 흔히 나오는 문제는, 0 이상의 정수 n이 주어질 때 n번재 피보나치 수를 구하는것이다. n번째 피보나치 수를 구하는 fibo함수는 다음과 같이 정의할 수 있을 것이다. 기본 재귀적 풀이 앞서 만든 fibo함수를 그대로 구현하면 된다. public class FibonacciTest {.. ETC/알고리즘 이론 2020. 10. 16. 이전 1 2 3 4 다음 반응형