본문 바로가기

이더리움24

[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.
[220630] 이더리움 private 네트워크 생성 / peer 연결하기 제네시스 블록을 생성하기 위한 초기값을 설정하기 // genesis.json { "difficulty": "200000", "gasLimit": "3100000", "alloc": {}, "config": { "chainId": 7722, "homesteadBlock": 0, "eip150Block":0, "eip155Block":0, "eip158Block":0 } } chainId 제네시스 블록 외에도 chainId가 맞아야 채널을 열 수 있다. 채널넘버는 7722로 작성했다. alloc 제네시스 블록을 생성할때 해당 계정에 밸런스(잔액)를 기본적으로 넣고 시작할 수 있는 요소. ( 예를 들어, 시작부터 다른 사람에게 금액을 보내야할때 생성해야할때 작성. ) homesteadBlock 이더리움은 총 .. 2022. 7. 8.
[220701] GETH로 RPC 통신하기 / 메타마스크 연결하기 사용할 디렉토리에 geth 세팅하기 node 파일 안에 keystore 디렉토리가 생성되며 account 파일이 생성하는 코드. $ mkdir `node` $ source ~/.bash_profile $ geth --datadir node account new node 파일 안에 keystore파일과 계정이 담긴 파일이 생성된걸 볼 수 있다. 터미널을 새로 켜고 go-ethereum이 설치된 위치로 가서 다음 코드를 실행하면 여러파일이 생긴다. $ make all 그 중에서 build/bin 디렉토리 안에 가면 puppeth와 bootnode가 설치되었는지 확인한다. puppeth은 설정을 도와주고, bootnode는 네트워크 피어연결을 도와주는 서버다. puppeth 세팅하기 네트워크 이름, 네트워크 .. 2022. 7. 6.
[220630] GETH를 통해 실제 이더리움 네트워크와 연결하기 geth 실행 geth가 잘 설치 되었다면 다음 경로에 keystore와 chaindata 디렉토리가 설치되어있을것이다. 이 장소에 블러온 블럭 정보들이 차곡차곡 저장된다. mac : ~/Library/Etherum linux : ~./ethereum $ geth // 실행이 안된다면 다음을 실행한 후 재실행 $ source ~/.bash_profile 블럭 동기화 geth를 실행시키면 이더리움 메인넷의 블럭 정보들을 가져오는게 이를 블럭동기화라고 한다. keystore : geth가 개인키를 저장하는 공간 geth/chaindata : 블럭헤더, 바디, 트랜젝션(tx) 같은 정보들이 저장되는 공간 블럭동기화 3가지 full sync : 모든 블럭,바디,트랜젝션(tx),헤더 같은 블록의 내용들을 모두 받.. 2022. 7. 6.
[220627] private 네트워크 생성 / GETH GETH란? GETH는 이더리움재단이 제공하는 공식 클라이언트 소프트웨어로, Go 언어로 개발되었다. Go ETHereum을 줄여서 GETH. 네트워크 내의 다른 이더리움 클라이언트(노드)에 연결하는 작업을 먼저 시작하며, 블록체인의 전체 사본을 내려받는다. 블록체인의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신하려한다. 블록을 채굴하며, 블록체인에 트랜젝션(tx)을 추가하고, 검증하고 실행한다. RPC를 통해 상호작용할 수 있는 API를 노출해 서버 역할을 하기도 한다. EVM을 생성할 수 있는 Geth Javascript console 프로그램이 포함되어 있다. EVM은 이더리움 기반의 가상머신에서 실행되는 이더리움 가상머신의 약자다. go 설치 $ go version // vers.. 2022. 7. 6.
[220616] 월렛(블록체인 지갑)의 개념과 구조, 직접 월렛 만들기 필요한 정보 코어 / 서버 / p2p && 월렛 월렛은 필수가 아니라서 따로 존재가 가능. 보내는사람 : 보내는 사람이 정말로 보내는게 맞는지 인증단계(트랜젝션) 받는 사람 : 받는 사림이 정말로 맞는가? 금액 : 이 금액을 보내는 장소가 정말로 맞는가? 송금/수취인 계좌번호들만 관리하는게 지갑 지갑의 구조 은행에서 사용하는 걔좌 = 개인키(OTP) + 공개키(은행들끼리 쓰는 코드분류값, 실제 거래에 쓰이는 값)+ 계정(계좌번호) 반드시 블록체인을 거쳐서 만들어야하는게 아님 개인키 (은행에서 OPT같은 역할) 랜덤으로 64자리의 16진수 문자열을 만들어낸것. 그런데 이 방식은 다른 메인넷을 가지고있는 블록체인, 이더리음같은 블록체인들도 사용하고있는 방식임. 이렇게 만들면 겹칠 위험이 있음. 그래서 다른 .. 2022. 6. 16.
[220518] 구매기능 만들기 SaleAnimalCard.tsx import { Box, Button, Text } from "@chakra-ui/react"; import React, { FC, useEffect, useState } from "react"; import { mintAnimalTokenContract, saleAnimalTokenContract, web3, } from "../web3Config"; import AnimalCard from "./AnimalCard"; interface SaleAnimalCardProps { animalType: string; animalPrice: string; animalTokenId: string; account: string; getOnSaleAnimalTokens: () =>.. 2022. 5. 18.