study/BlockChain (9) 썸네일형 리스트형 부동산 dapp 미리보기 및 주의점 스마트 계약이 적용될 수 있는 사례중 부동산 분야에 이 기술을 접목시킬 것이다. 부동산 시나리오 예) 1. 부동산 중계인 통해 매수의사 전달. 2. 계약 요청 3. 상호 동의 4. 계약 완료 5. 대금 지불 6. 명의 이전 7. .. 단계별로 블록체인에 영구 저장. 상대가 조작이 불가능하게 된다. 간단하게 블록체인 안에 저장된 내용을 추적하면 거래에 대한 내용이 나오고, 블록에 저장된 자체만으로 효력 발생. 주의점* 1. 사업모델을 디지털화시키면서 블록체인을 선택했을 떄, 어플리케이션에서 보여지는 모든 내용들을 처음부터 끝까지 블록체인 안에 저장해서 불러올 것인가? no!!!!!!!!!1 - 블록체인에는 꼭 필요한 내용만 저장하고, 나머지는 DB 사용하자. 2. 퍼포먼스가 중요한 어플리케이션이라면, 블록.. 컨트랙 최적화 빅오 표기법*보다 가스문제가 더 중요하다... 옵코드에 따라 가스가 좌지우지되기때문이다. 스마트컨트랙 디자인시에는 가스비용을 어떻게하면 줄일 수 있을지 고민해야한다. 1. 컨트랙 배포할 때의 비용 - 주석, 변수이름, 타입이름은 가스 소모 없음. - 불필요한 코드 정리 ex) function useless(uint a) public { if(a> 10){ if(a+a 가스란? 가스는 수수료를 내는 것과 같다. 수수료는 우리가 보낸 트랜잭션의 유효성을 검증하고, 블록체인에 추가하려고 노력하는 채굴자에게 보상으로 돌아간다. 수수료 지불의 예: 1. 다른 계정으로 돈 보낼 때 2. 스마트 컨트랙 배포할 때 3. 함수에서 상태 변수에 변화를 줄 때 ... 함수 실행중인 계정에서 가스비를 지불한다. 가스비도 ETH를 사용한다. 실제돈!! 그렇다면, 에더를 사용해서 그냥 내면 되는걸 왜 굳이 가스라는 단위를 만들었을까? 1. 에더는 화폐 변동성이 있다. 2. 가스 가격은 거의 변동하지 않는다. 가스 비용은 함수의 복잡성에 따라 결정된다. 연산에 소모되는 비용 == 옵코드(opcode) 네트워크 상태, 컴퓨팅 자원에 따라 비용이 결정된다. 메타마스크는 gas limit을 미리 보여준다. .. 값 타입 Boolean 형 타입 값 bool true/ false bool x = false; 정수형 타입 값 추가설명 ex int 8 bit~ 256 bit int == int256 int32 x = -27462; uint 8 bit~ 256 bit uint ==uint256 uint256 x= 24557867; 주소형 타입 값 추가설명 address 20 byte 값 이더리움 계정 주소 두개의 멤버 소유: balance, transfer address x= 0x123; function send() public { if (x.balance 함수 타입 제어자 view 1. 데이터 read-only 2. 가스 비용 없음 uint numOfStudents; function getNumOfStudents() public view returns (uint) { return numOfStudents; } pure 1. 데이터 읽지 않음 2. 인자 값만 활용해서 반환 값 정함 3. 가스비용 없음 function multiply(uint x, uint y) public pure returns (uint) { return x*y; } constant 1. 0.4.17버전 이전에는 view/pure 대신 쓰임 function getNumOfStudents() public constant returns (uint) { return numOfStudents; } payable .. 접근 제어자 external 1. 외부 컨트랙만 호출 가능. 2. 상태 변수는 external 사용불가. pragma solidity ^0.4.23; contract Mycontract{ uint external count; //상태변수. 이것도 에러남. constructor() public { //... } function numOfStudent(address_teacher) public view return(uint) { test(); //에러남. 밑의 external붙은 함수를 같은 컨트랙내부에 있는 함수에서 호출했기 때문. } function test() external { //... } } contract YourContract { MyContract myContract; function callTest().. 컨트랙의 구조 솔리디티의 컨트랙은 객체지향 언어들의 클래스와 비슷한 개념이다. 문법은 자바스크립트와 비슷하지만 솔리디티에는 타입을 구분할 수 있고, 상속같은 객체지향의 개념도 존재한다. pragma solidity ^0.4.23; //solidity버전 contract Mycontract{ uint count; //상태변수 , 클래스의 멤버변수라고 생각하면 된다. constructor() public { // 생성자 //... } // 함수 이름 매개변수함수타입리턴타입 function numOfStudents(address_teacher) public view returns(uint) { // ... } } nodestart.cmd /DAG파일 생성 geth //geth실행시킨다~ --networkid 4386 //네트워크식별자 명시하는 파라미터 --mine // 이 노드에서 채굴을 시작하게 하는 파라미터 --minerthreads 2 // 몇개의 스레드에서 채굴을 할 것인지, 너무 높게 설정하면 과부하걸린다. --datadir "./" // 우리 체인파일을 어디에 저장할것인지 --nodiscover // 탐색 프로토콜을 해지하는 것, 다른 노드가 우리 체인에 연결하는 것을 못하게. 테스팅목적이라 붙임 --rpc // 나중에 메타마스크에서 geth로 실행된 노드에 연결 가능. --rpcport "8545" // 어떤 포트에 접속해야하는지 명시하는 파라미터 --rpccorsdomain "*" //아무 도메인에서나 우리 rpc엔드포인트에 접속할 수 있도.. 이전 1 2 다음