본문 바로가기
반응형

분류 전체보기141

ERC1155 란 무엇일까?! 스마트 컨트랙트 코드로 이해해보기. 💡ERC1155 프로젝트에서 ERC1155를 기반으로 한 서비스를 제작하기로 했고, 이와 관련해서 계속해서 공부 중이다. 검색하다 보면 이런 말을 찾을 수 있다. ERC20 그리고 ERC721의 장점을 결합하여 만든 것이 ERC1155이다. 이게 말이 쉽지, 뭔가 명확하게 머릿속에 박히지는 않는다. https://docs.openzeppelin.com/contracts/4.x/erc1155 ERC1155 - OpenZeppelin Docs We’ll use ERC1155 to track multiple items in our game, which will each have their own unique attributes. We mint all items to the deployer of the cont.. 2022. 9. 12.
Try building your app with 'next build' before starting the production server. Next.js error 💡 이슈 해결하기 더보기 Try building your app with 'next build' before starting the production server. NextJS 파일을 실행하려고 하니 위와 같은 에러가 계속 발생했다. 내가 해결한 방법은 아래와 같다. npm run build npm start or npm run dev npm run build 후 npm start 혹은 npm run build 후 npm run dev 명령어를 실행하면 정상적으로 작동되는 것을 확인할 수 있다. 2022. 9. 12.
리액트 부트스트랩 버튼 클릭시 사이트 전체 reloading, refreshing 되는거 막는 법, e.preventDefault() 💡e.preventDefault() 리액트 부트스트랩에서 제공하는 버튼을 사용하면 버튼 클릭시 자동으로 사이트 전체가 리프레싱 되는 경우가 있다. 이게 내 코드상 필요하지 않은 부분이었고 이를 막기 위해 event handler에 e.preventDefault를 사용하였다. import React from "react"; export default function App() { const onSubmit = (e) => { e.preventDefault(); console.log("refresh prevented"); }; return ( submit ); } 위는 그냥 예제코드이다. onSubmit 함수 안에 e.preventDefault() 만 추가해주면 끝! 2022. 8. 30.
req.body가 undefined라면 express 미들웨어 body-parser 모듈을 확인하세요! 💡 Express 미들웨어 body-parser bodyParser 모듈 없이는 post, put 요청 메소드의 req.body를 읽어올 수 없다. body 데이터를 읽기 위해서는 이 모듈을 이용해야 한다. Parser란 가지고 있는 데이터를 내가 원하는 형태의 데이터로 가공하는 과정인 parsing을 수행하는 모듈 혹은 메소드를 일컫는 말이다. 원하는 형식에 맞춰서 해석하는 용도인데 bodyParser말고도 cookieParser, JSON.stringify 등 파서의 종류는 셀 수 없이 많다. 더보기 Contains key-value pairs of data submitted in the request body. By default, it is undefined, and is populated whe.. 2022. 8. 30.
NFT 거래소를 위한 스마트 컨트랙트 개발 1. mintNFT function mintNFT(address recipient, string memory tokenURI) public onlyOwner returns (uint256) { _tokenIds.increment(); uint256 newItemId = _tokenIds.current(); _mint(recipient, newItemId); _setTokenURI(newItemId, tokenURI); return newItemId; } ✓ 제대로 작동하는지 확인 MintNFT 함수를 이용해 NFT를 민팅한다. 민팅한 NFT 잘 출력되는 거 확인. 2. listUserNFTs // owner가 보유하고 있는 NFT List function listUserNFTs(address owner).. 2022. 8. 10.
인적 문제로 발생할 수 있는 블록체인의 보안적 이슈, 크립토재킹 & 더스팅 공격 & 시빌 공격 💡 인적 문제로 발생할 수 있는 보안적 이슈 해커들은 이익을 위해 블록체인을 공격한다. 51% 공격, 리플레이 공격, 이클립스 공격 외에도 다양한 보안적 이슈들이 발생한다. 그 중에서도 악의적인 공격자에 의해 발생할 수 있는 공격인 크립토재킹, 더스팅 공격, 시빌 공격에 대해 알아보자. ✓ 크립토재킹 공격 크립토재킹은 감염된 피해자의 장치를 사용해 암호화폐를 채굴하는 것을 의미한다. 공격자는 악성 채굴 프로그램을 사용하도록 유도하여, 해당 프로그램을 실행하면 악성 프로그램에 감염되어 눈치채지 못할 만큼 시스템 자원을 이용해 채굴을 하게 된다. 감염된 피해자도 자신도 모르는 새에 채굴을 시작하고 공격자는 피해자의 해시파워를 사용해 채굴 보상을 받는다. 암호화폐 채굴에는 많은 해시 파워가 필요하기 때문에 공.. 2022. 8. 5.
이클립스 공격 (Eclipse Attack) 💡이클립스 공격 (Eclipse Attack) 이클립스 공격은 공격자가 네트워크 상의 노드를 방해하기 위한 공격으로, 정교한 공격을 준비하기 위해 네트워크에 혼란을 야기시킬 때 주로 사용한다. 이클립스 공격은 전체 네트워크를 공격하기보다는 특정 노드를 격리해 정직한 다른 노드로부터 정보를 수신받지 못하게 여러 악의적인 공격자 노드가 네트워크를 독점한다. 이 공격 노드들은 가짜 트랜잭션이 담긴 블록을 격리한 노드들에 브로드캐스트하여 이중 지불 공격을 가능하여지도록 만든다. ✓ 이클립스 공격 동작 방식 블록체인에서 노드는 다른 노들과 동시적으로 연결될 수 없으며, 대신 제한된 인접 노드들과 연결되어 있다. 노드들이 데이터를 공유할 때는 모두가 동시에 공유하는 것이 아니라, 하나의 노드에서 주변 노드로 점점 .. 2022. 8. 5.
리플레이 공격 💡리플레이 공격 리플레이 공격이란 공격자가 보안 네트워크 통신을 가로채고, 해당 통신의 수신자에게 공격자가 원하는 일을 수행하도록 하기 위해 통신을 지연시키거나 재전송하는 방식이다. 리플레이 공격은 해커가 네트워크에서 메시지를 가로챈 후 메시지를 복호화하기 위한 별도의 과정이 필요하지 않으며, 메시지를 포함한 통신 전체를 다시 전송하는 것으로도 공격을 성공할 수 있다. ✓ 리플레이 공격 동작 방식 앨리스가 밥에게 100 달러를 송금해달라고 요청한다고 가정해보자. 일반적으로는 다음과 같이 요청과 응답이 이루어진다. 1. 앨리스는 밥에게 100달러를 송금해달라고 요청 "111-222-333으로 100달러를 보내세요" 메시지를 보낸다. 2. 밥은 앨리스를 신뢰하기 때문에 요청 메시지에 적힌 "111-222-3.. 2022. 8. 5.
51% 공격 💡 51% 공격 51% 공격을 이해하기 위해서는 채굴과 블록체인 시스템에 대한 이해가 필요하다. 비트코인의 주요가 강점이자 블록체인 기술의 근간을 이루는 특징은 데이터를 구축하고 검증하는 분산성이다. 탈중앙화 방식은 노드들이 프로토콜 규칙을 준수하고, 모든 네트워크 참여자가 블록체인의 현 상태에 동의하도록 한다. 따라서 모든 노드는 채굴 과정과 사용중인 소프트웨어의 버전, 트랜잭션의 유효성 등에 정기적으로 합의를 달성해야 한다. 비트코인 합의 알고리즘인 작업증명 방식은 채굴 노드가 새로운 트랜잭션 블록을 검증할 수 있도록 한다. 채굴의 결과인 논스로부터 나온 블록 해시는 채굴 노드가 충분한 작업을 완수했으며, 해당 블록에 대한 유효한 해결책을 찾았음을 증명한다. 작업 증명 기반 시스템에서의 채굴 과정은 .. 2022. 8. 4.
이중지불 문제 💡 이중지불 문제 이중 지불이란, 디지털 현금 시스템 내에 동일한 하나의 자신이 두 명의 수신자에게 동시에 전송되는 문제를 의미한다. 가령 A가 A 자신의 계좌에 있는 2,000원을 B에게 보내는데, 해당 송금이 처리되기 전 A가 다시 아직 자신의 계좌에 있는 2,000 원을 C에게 송금하도록 요청한다고 생각해보자. A가 자신의 2000원이라는 자산 데이터를 복제하여 B에게도 보내고 C에게도 보낸 것이다. 정상적이라면 A가 B에게 보내는 송금이 먼저 처리되어 C에게 보내는 송금은 완료되지 않을 것이다. 그러나 디지털 시스템의 허점으로 인해 C에게 보내는 송금도 처리가 될 수 있다. 이중 지불 문제를 해결하지 못한다면, 사용자는 자신이 전달받은 자금이 어딘가에서 이미 사용되지 않았다는 것을 검증할 방법이 .. 2022. 8. 4.
ABI (Application Binary Interface) 💡ABI (Application Binary Interface) ABI는 Application Binary Interface의 약자로, 런타임 시 바이너리 코드와 상호작용하기 위한 인터페이스이다. ABI는 바이너리 형태로 되어있는 스마트 컨트랙트가 어떤 인터페이스를 가지고 있는지 알려주는 역할을 한다. ✓ ABI를 사용해 Contract ABI Call 하기 아래와 같이 Hello World 코드를 작성해보자. // SPDX-License-Identifier: MIT pragma solidity 0.8.7; contract HelloWorld{ function renderHelloWorld () public pure returns (string memory greeting){ greeting = "Hew.. 2022. 8. 4.
암호화폐 시가총액 시세와 같은 다양한 데이터를 API 형태로 제공하는 Coingecko 💡Coingecko Coingecko에서는 실시간 가격, 거래량, 과거 데이터, 컨트랙트 정보와 같은 다양한 데이터를 API 형태로 제공한다. * CoinGecko API 공식 문서 https://www.coingecko.com/ko/api/documentation Crypto API Documentation | CoinGecko Power your application with our free & independently sourced crypto data such as live prices, trading volume, exchange volumes, trading pairs, & more. www.coingecko.com 가령, https://api.coingecko.com/api/v3/coins/.. 2022. 8. 3.
728x90