목록Dev/Solidity (9)
별은블로그
부동산분야에 스마트컨트랙트를 접목시킨다.부동산분야의 특징 : 속도는 빠르지 않아도 괜찮음, 신뢰성, 무결성이 필요 => 블록체인에 적절블록체인은 trustless라는 특성을 갖는데, 이는 신뢰라는 개념이 아예 없다는 것을 뜻한다.왜냐하면 기술적으로 신뢰를 이미 보증하기 때문이다. 스마트컨트랙트개발시 주의할 점1. 모든내용을 블록체인에 저장할 필요는 없다.2. 중요하지않은 부분은 데이터베이스를 사용하자3. 속도면에서는 분명 불리하다는 것을 명심한다.
가나슈를 사용하면 비주얼적으로 쉽게 진행상황을 알 수 있다.트러플과 잘맞는다고 할 수 있겠다. 가나슈에 연결하려면 truffle.js에서 module부분만 남겨둔후에 networks:{ganache:{host:"localhost",port:8545, // 가나슈에서도 설정에서 8545로 네트워크를 설정해준다. (둘이 일치만한다면 8545가 아니어도 된다.)network_id:"*" //어떤아이디도 접근가능하게한 것}}; 이후 콘솔에 접속하지 않은 상태에서 배포해보자. 트러플폴더에 접근한 후에 truffle migrate --compile-all --reset --network ganache 명령을 실행하자.이 명령으로 컨트랙을 다시 재컴파일 시키면서 새로운 주소에 컨트랙을 배포한다.컨트랙폴더에 있는 js..
트러플에서는 web3 api를 제공한다.내가 web3에 대해서는 잘 알지는 못하지만 명령어 사용법 몇개만 숙지하면 될 것 같다. web3.eth.accounts 명령을 실행하면 주소를 확인할 수 있다.web3.fromWei(web3.eth.getBalance(web3.eth.accounts[0]),"ether") 를 실행하면 0번째 주소의 ether 잔액을 확인할 수 있다. 전역변수에 MyContract객체를 넣어보자. MyContract.deployed().then(function(instance){app = instance;}) -> 전역변수 app에 MyContract 객체를 대입한다는 것undefined 라고 응답하면 제대로 된 것이다.이제 app을 통해 node에서 배포된 MyContract와 ..
솔리디티는 어떤 cpu에서 사용될지 모르기 때문에 소수점연산 사용을 지양한다. 우선 파워쉘을 열고 truffle이라는 폴더를 만든다.truffle init 명령을 실행 - 트러플을 초기화하는 것code . 명령으로 비주얼스튜디오 코드로 폴더를 연다. migration이라는 컨트랙이 있을텐데 migration폴더안에 있는 스크립트를 배포하게 한다.contract 폴더는 컨트랙을 보관한다. migration안에 있는 스크립트 파일은 배포하는 과정에서 사용되는 로직이 담겨있다.앞에 1_ 이라는 접두사처럼 다른 스크립트를 생성할 때에도 접두사를 붙여줘야 한다. => 숫자를 따라 순차적으로 실행되기 때문에 test폴더에 있는 파일들은 테스트하는데에 사용된다.truflle.js는 환경설정을 담당한다.truffle...
보통 알고리즘을 평가할 때 빅오표기법을 사용한다.하지만 솔리디티에서는 빅오보다 GAS가 중요하다. - opcode마다 소비되는 가스가 다름 1. 컨트랙을 배포할 때의 비용- 주석, 변수이름, 타입이름은 가스를 소모하지 않음- 불필요한 코드정리 필요 2. 컨트랙 내의 함수를 불러올 때의 비용- 비싼연산을 최대한 줄이기- SSTORE : 비용이 비싸다. storage의 상태를 변경할 때마다 사용됨.=> 해결법 : 로컬변수를 이용해서 계산을 다한 후 마지막에 storage변수를 변경한다.- for문 사용횟수 최소화- 문자를 저장할 때 bytes32 타입을 사용하는 것(고정된 크기의 배열)=> 가스비 절약 : 이더리움가상머신은 32bytes 타입에 최적화 되어 있음(256bits에 맞춰져 있기 때문에)3. 배열..
가스란? - 가스는 트랜잭션을 수행하는데에 있어 네트워크에 대한 수수료이다. - 채굴자들에게 보상금으로 지급된다. 수수료 내는 예시) - 다른 계정으로 돈을 보낼 때 - 스마트 컨트랙 배포할 때 - 함수에서 상태변수에 변화를 줄 때 - 함수를 실행 중인 계정에서 가스비를 지불한다. - 가스비도 eth를 사용한다. 가스단위를 사용하는 이유 - ETH는 화폐변동성이 있다. - 가스는 변동성이 거의 없다. 가스의 가격단위 : gwei 가스비용은 함수의 복잡성에 따라 결정 연산에 소모되는 비용 == 옵코드(opcode)- 네트워크 상태, 컴퓨팅 자원에 따라 비용결정 ethgasstation.info - 가스가격의 평균가를 볼 수 있는 사이트converter.murkin.me - 이더리움 단위변환 사이트 가스가격..
remix.etherium.org 사용 Environment - JavaScript VM, injected Web3, Web3 Provider 3가지가 제공됨 - JavaScript VM- 버츄얼머신으로 간단한 코드를 실행하며 빠른디버깅을하는 특징이 있다. - injected Web3- 메타마스크를 이용한다. - Web3 Provider- 가나슈나 게스를 이용한다. deploy - 컨트랙을 실행한다. 디버깅 - step over- 함수가 있을 때 함수넘어감 - step into- 함수가 있을 때 함수 안으로 들어감 - breakpoint 설정가능 instruction - 바이트코드가 옵코드(opcode)로 변환되어 표시되는 곳 solidity locals - 현재 진행 중인 곳의 지역변수 solidity..
솔리디티의 컨트랙? 자바의 클래스와 비슷한 개념이라고 생각하면 될 것 같다. 컨트랙의 구조 pragma solidity + 버전정보contract mycontract(컨트랙의 이름)상태변수 : 클래스의 멤버변수라고 생각하면 될 것 같다.생성자 생성 : constructor() public{ }함수 : 자바와 자바스크립트를 섞은 느낌 문법구조 접근제어자가시성(Visibility) - 4가지로 구분된다.external - 외부컨트랙만 접근가능(같은 함수 내부에서 호출되면 안됨) - 상태변수는 external 불가능internal - 컨트랙 내부호출가능 - 상속받은 컨트랙도 호출가능 - 상태변수는 디폴트로 internal 선언public - 컨트랙 내부호출 가능 - 상속받은 컨트랙도 호출가능 - 외부컨트랙도 ..