프로그래밍233 프로세스간 통신 프로세스 통신 개념 정리 네트워크에 연결된 모든 장치를 노드(Node)라고 한다. 이 중에서 네트워크 주소(IP주소)가 할당되어 있는 노드들을 호스트라고 한다. 한 호스트 내에는 여러 프로세스들이 존재한다. (앱, 프로그램, 어플리케이션, 소프트웨어들) 프로세스를 구별하기 위해 호스트 내부적으로 할당받은 번호를 포트(port)라고 한다. 호스트 내부에 있는 포트끼리 서로 데이터를 주고받음으로 데이터 교환이 일어난다. 이 프로세스간의 통신을 IPC라고 한다. 내부적으로 이루어지는 프로세스간 통신 외부 프로세스와 이루어지는 프로세스간 통신 = RPC 2022. 7. 7. [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. [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. 크립토좀비) 챕터3 개념 이더리움 네트워크에 컨트랙트를 배포하고나면 절대로 컨트랙트는 변하지 않는다. 컨트랙트를 소유하기 : OpenZeppelin의 Ownable 컨트랙트 컨트랙트가 생성되면 컨트랙트의 생성자가 owner에 컨트랙트를 배포한 사람을 대입함 특정한 함수들에 대해 오직 소유자만 접근하도록 onlyOwner 제어자 추가함 새로운 소유자에게 해당 컨트랙트의 소유권을 옮길 수 있도록 함. 생성자 - 컨트랙트와 동일한 이름을 가진, 생략할 수 있다. 함수가 실행될 때 한번만 실행된다. contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); // 생성자 f.. 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. [220629] * 메타마스크가 브라우저에 설치되어 있는 상태에서 작업 * window.ethereum $ npx create-react-app front 제네시스 블럭이 같아도 chainID가 다르면 다른 네트워크로 넘어간다. 제네시스 블럭과 chainID값이 같아야 온전히 같은 블록임. 이더리움 네트워크 상에서 고유한 식별자 역할을 함 chainId는 5글자 안 숫자로. $ $ npm install -g ganache-cli $ ganache-cli --chainId 7722 //useWeb3.js import { useEffect, useState } from "react"; const useWeb3 = () => { useEffect(()=>{ console.log(window.ethereum) }) return.. 2022. 7. 6. 크립토좀비) 챕터4 개념 / payable, transfer [ 함수 제어자 정리 ] 함수 제어자 사용예시 function test() external view onlyOwner anotherModifier { /* ... */ } 1) 함수가 언제 어디서 호출될 수 있는지 제어하는 접근 제어자. private : 컨트랙트 내부의 다른 함수들에서만 호출 될 수 있음. internal(뜻 = 내부) : private와 비슷하지만 자식 컨트랙트에서도 호출 될 수 있다는 점에서 다름. external(뜻 = 외부) : 오직 컨트랙트 외부에서만 호출 될 수 있음. public : 내외부 어디서든 호출 될 수 있다. 2) 블록체인과 상호작용하게 해주는 상태 제어자 view : 어떤 데이터도 저장/변경되지 않음. pure : 어떤 데이터도 블록체인에 저장하지않고, 블록체인으.. 2022. 7. 6. [220711] 솔리디티코드로 스마트 컨트랙트 작성하기 1. 솔리디티 코드로 스마트 컨트랙트 작성 2. 컴파일해서 ABI, BIN 파일 만들기 3. Geth로 트랜젝션 발동시키기 4. CA를 사용해 필요한 정보 가져오기 5. 스마트 컨트랙트 흐름 한 눈에 보기 1. 솔리디티 코드로 스마트 컨트랙트 작성 1.1 솔리디티 코드가 실행되는 원리 코드 -> 컴파일러 -> 바이트코드 -> tx 일으킴 우선 솔리디티 언어는 스마트 컨트랙트를 일으키기 위해서 만들어진 고급언어다. 그래서 이더리움 네트워크에서 코드를 해석하는 EVM이 이해하려면 저수준의 바이트코드로 번역(컴파일)되어야한다. 일단 컴파일되면 고유한 contract 생성 tx를 사용하여 이더리움 네트워크에 배포된다. 그리고 마이닝을 해야 그제서야 코드가 이동된다. 1.2 솔리디티 코드 기본형 // SPDX-L.. 2022. 7. 4. [220619] jsonwebtoken 라이브러리 사용방법 설치 & 세팅 $ npm install jsonwebtoken const jwt = require('jsonwebtoken'); jwt.sign = 토큰 생성 jwt.sign(payload, secretOrPrivateKey, [options, callback]) payload : 페이로드 값 secretOrPrivateKey : 시크릿키 또는 프라이빗키 = salt [options, callback] : 필요한 나머지 정보들을 모아서 만든 객체 (예 : 알고리즘, 유효시간, 발급자 정보...) 토큰 생성 : 실사용 예 const jwt = require('jsonwebtoken'); const secreatkey = 'saltRole'; const option = { algorithm: 'HS256',.. 2022. 6. 19. 이전 1 ··· 5 6 7 8 9 10 11 ··· 24 다음