본문 바로가기

프로그래밍/solidity40

런치패드란? 런치패드(LaunchPad) 뜻 암호화폐 거래소가 특정 코인 프로젝트를 선정해 해당 프로젝트의 코인을 투자자에게 판매하는 것이다. 암호화폐 투자자가 블록체인 프로젝트를 초기단계에 투자할 수 있는 기회를 제공하는 것. 주식과 비교하자면 기업공개, 즉 상장과 비슷한 의미. 2017년 개별 블록체인 프로젝트들이 진행한 ICO와 달리 런치패드는 암호화폐 거래소가 주도하는 것이 특징. ICO : Initial Coin Offering의 약자, 개별 프로젝트가 진행하는 코인 판매 방식 IDO : Initial Dex Offering, 탈중앙화거래소(DEX)에서 진행하는 코인 판매 방식 IEO : Initial Exchange Offering, 거래소가 특정 코인 프로젝트를 선정해 해당 프로젝트의 코인을 투자자에게 .. 2022. 11. 15.
ERC-20 ( Ethereum Request for Comment 20 ) : 대체 가능한 토큰 솔리디티 파일을 이더리움 네트워크에 배포한 상태에서 시작한다. 만약 배포할 줄 모른다면 다음 글을 참고해서 따라하면 된다. [220713] 스마트 컨트랙트 구현하기 - 1) 트러플로 구현하기 개발환경 설치&세팅하기 // truffle 설치&세팅 $ npm init -y $ mkdir truffle $ cd truffle $ npm install -g truffle $ npx truffle init // react를 사용하는 front 디렉토리 만들기 $ npx create-react-app front // ganache 네트워크 실 hancoco.tistory.com 오픈제플린 라이브러리 설치 솔리디티 기반의 스마트 계약을 개발하는 표준 프레임워크인 오픈제플린 라이브러리를 설치해준다. $ npm inst.. 2022. 11. 2.
web3/dist/web3.js 이슈 / window.ethereum 이슈 web3/dist/web3.min을 가져다가 써야하는데 web3/dist가 없는 이슈 import Web3 from "web3/dist/web3.min" web3/dist/web3.min이나 web/dist/web3.min.js가 없다고 뜰 경우, 다음을 설치해주자. $ npm install --save-dev react-app-rewired crypto-browserify stream-browserify assert stream-http https-browserify os-browserify url buffer process config-overrides.js을 루트 디렉토리에 만들어 주고 다음 내용을 넣자. const webpack = require('webpack'); module.exports =.. 2022. 8. 22.
ERC721토큰 토큰이란? 이더리움에서 토큰이란 기본적으로 몇몇 공통 규약을 따르는 스마트 컨트랙트. 즉, 다른 모든 토큰 컨트랙트가 사용하는 표준 함수 집합을 구현하는것. 누가 얼마나 가지고 있는지 기록하는 하나의 컨트랙트. ERC20 토큰을 사용하는 이유는? ERC20 토큰들이 동일한 함수 집합을 공유하기 때문에 이 토큰들에 같은 방식으로 상호작용이 가능하기때문. 예) 내부적으로 스마트 컨트랙트는 각 주소에 잔액이 얼마나 있는지 기록하기 위해 다음과 같은 매핑을 가지고 있다. mapping(address => uint256) balances 이런 식으로 같은 구조를 갖고있기 때문에 특정 함수를 사용해서 토큰을 주고받기가 가능하다. 거래소에서 새로운 토큰을 상장하면 그저 새로운 스마트 컨트랙트를 거래소에 추가하는것과 .. 2022. 7. 18.
[220714] 스마트 컨트랙트 구현하기 - 3) 이벤트 (프런트 / 백) [ 프런트 ] 매번 새로 생기는 트러플 네트워크 id 확인 $ truffle migration --reset 가끔 트러플이 꺼져서 재배포를 할경우 간혹 이렇게 networks에 네트워크 id가 두개가 생겨있을 수 있다. 트러플을 새로 켤때 네트워크 id가 새로 생성되어서 그런거니까 고유 id값을 확인해서 아닌걸 지우면 된다. $ truffle console $ web3.eth.net.getId() CA 데이터가 자동갱신 되도록 만들기 저번 블로그 글에서 CA값을 json파일에서 찾아서 직접 붙여넣었다. const Deployed = new web3.eth.Contract( CounterContract.abi, "0xE538196bCb40F7cc12E3e041D24A9b04FA3A16A8" ); 하지만 트.. 2022. 7. 17.
[220713] 스마트 컨트랙트 구현하기 - 2) 백엔드에서 요청보내기 React로 프런트 구조 짜기 트랜잭션을 일으키려면 개인키(privateKey)가 필요하다. 하지만 프런트에서 직접적으로 개인키를 사용하기엔 보안이 위험하다. 집적적으로 사용하지 않기 위해 메타마스크(월렛)를 사용해 서명 처리를 할 것이다. 따라서 화면 -> 메타마스크 -> 이더리움 네트워크 이렇게 거쳐가도록 구성을 짤 것이다. React로 메타마스크와 web3 연결하기 메타마스크와 연결해서 계정 정보를 가져오고 web3를 연결하는 코드를 작성한다. // react/src/hooks/useWeb3/jsx import React,{useEffect, useState} from 'react' import Web3 from "web3/dist/web3.min" const useWeb3 = () => { con.. 2022. 7. 14.
[220713] 스마트 컨트랙트 구현하기 - 1) 트러플로 구현하기 개발환경 설치&세팅하기 // truffle 설치&세팅 $ npm init -y $ mkdir truffle $ cd truffle $ npm install -g truffle $ npx truffle init // react를 사용하는 front 디렉토리 만들기 $ npx create-react-app front // ganache 네트워크 실행 $ ganache-cli // 없을경우는 설치해주자 npm install ganache-cli 메타마스크에 ganache 네트워크 생성해서 계정 불러오기 트러플로 사용할 코드 작성하기 // truffle/contracts/Counter.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.15; contract C.. 2022. 7. 13.
[220712] 트러플로 스마트 컨트랙트 만들기 트러플 설치하기 install을 한 후에 잘 설치되었으면 truffle version의 결과가 나온다. $ npm init -y // 편한대로 둘 중에 하나 골라서 설치 $ npm install truffle $ npm install -g truffle (전역설치) $ truffle version // 이게 안되면 아래코드 사용 $ npx truffle version //트러플이 전역설정이 안 되어있어서 npx를 사용하는것 메타마스크에 ganache 네트워크 생성해서 계정 불러오기 트러플 세팅하기 $ npx truffle init 코드를 작성하면 트러플로 개발환경을 만들어주는데, 다음과 같은 파일과 디렉토리가 생성된다. 여기서 트러플을 사용하는 목적이 솔리디티 코드 작성과 배포관리라는 것을 알 수 있다... 2022. 7. 12.
[220712] JSON 컴파일을 구현해서 abi, bytecode 파일 생성, 배포하기 abi와 bin파일이 생성되는 흐름을 JS로 알아보기 이전에 이렇게 코딩하면 알아서 abi 파일과 bin 파일을 만들어서 저장해줬다. 어떤 과정을 거쳐서 만들어지는건지 JS 컴파일을 통해서 알아보자. 앞으로 truffle을 사용할건데, 트러플이 어떻게 굴러가서 각 파일을 생성하는지 흐름을 알기 위해서. npx solc --bin --abi HelloWorld.sol web3 라이브러리를 가지고 막코딩보다 조금 더 수월하게 작성하게 해줌 예전에 만들었던 geth 과정 중에서 node/keystore을 보면 UTC 파일들이 있다. 자바스크립트로 스마트 컨트랙트를 만들때 privateKey가 있어야 서명도 만들고 거래가 가능했었다. geth에서 그 privateKey기능을 해주는게 UTC파일이다. 양방향 암호.. 2022. 7. 6.
크립토좀비) 챕터3 개념 이더리움 네트워크에 컨트랙트를 배포하고나면 절대로 컨트랙트는 변하지 않는다. 컨트랙트를 소유하기 : OpenZeppelin의 Ownable 컨트랙트 컨트랙트가 생성되면 컨트랙트의 생성자가 owner에 컨트랙트를 배포한 사람을 대입함 특정한 함수들에 대해 오직 소유자만 접근하도록 onlyOwner 제어자 추가함 새로운 소유자에게 해당 컨트랙트의 소유권을 옮길 수 있도록 함. 생성자 - 컨트랙트와 동일한 이름을 가진, 생략할 수 있다. 함수가 실행될 때 한번만 실행된다. contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); // 생성자 f.. 2022. 7. 6.