비쥬얼스튜디오(visual studio)로 이더리움 솔리디티(sol) 코드 개발하기 원래는 일반적으로 이더리움 솔리디티 즉 sol파일의 개발시 remix를 사용합니다. 리믹스는 브라우저 솔리디티로 말그대로 크롬 등의 브라우저에서 스마트컨트랙트 개발이 가능하게 해주는 IDE입니다. 그러나 한글깨짐과 가독성에 대한 문제가 있어서 코딩시에는 좀 불편한 점이 있는 것은 사실입니다. 그리고 사실 멋도 없기도합니다. 간지가 안나기 때문에 비쥬얼 스튜디오 코드라는 것을 사용해줍니다. 우선 비쥬얼스튜디오 대신에 우리는 Visual Studio Code를 사용하기 때문에 구글에서 검색하셔서 우선 설치를 진행하여 주시기 바랍니다. 비쥬얼스튜디오 코드란 무엇이냐면 그냥 간단한 코드 편집기라고 생각하시면되겠습니다. 설치를 끝..
이더리움 솔리디티 geth 사설서버 가동하기 .json파일 geth에서는 공용 이더리움 블록체인 서버는 물론이고, 개발자들을 위한 이더(요금, 가스)가 들지 않는 환경인 사설 이더리움 네트워크를 가동할 수 있도록 제공하고 있습니다. 원래는 DApp배포시 일정 현금을 내야하지만, 올리기 이전에 사설 네트워크에서 여러가지 테스팅을 진행해본 뒤에 올릴 수 있습니다. 그래서 이번 글에서는 사설 네트워크를 어떻게 구축하는지 알아보겠습니다. 사설 네트워크를 만들어 주기위해서는 genesis block 즉 가장 상위 블록을 먼저 만들어 주어야합니다. 최초블록이라고도 하는데 당연히 최초블록이 있어야 다음 블록들이 연결되면서 이어지게될 수 있겠죠. 그리고 최초이기 때문에 prev(이전)블록은 존재하지 않습니다. 이러한 ..
솔리디티(solidity) - overflow,underflow 방지 SafeMath 솔리디티(solidity) 에서도 마찬가지로 오버플로(overflow) 와 언더플로우(underflow)가 발생할 수 있다. uint16 등이 표현할 수 있는 최대치에 +1을 해주게되면 0이되거나 0에서 -1을 해주면 최대치가 되는 경우가 바로 그 경우입니다. 이럴 경우에 사용할 수 있는 것이바로 SafeMath 라이브러리(Library) 입니다. 라이브러리는 솔리디티에서 특수한 contract입니다. uint같은 데이터 형식에 함수를 사용할 수 있게됩니다. (ex, 100.add(1) ) 그리고 라이브러리를 사용할 때는 using 키워드를 사용합니다. 여기서는 using SafeMath for uint256 이런식으로..
이더리움(Ethereum) - ERC20 토큰, ERC721 표준 (다중상속) 이더리움에 관심이 좀 있으신 분들은 ERC20 토큰에 대해서 들어보았을 것입니다. ERC20이란 이더리움에서 정해진 공통적인 매서드를 가진 스마트 컨트랙트입니다. 즉 전송, 잔액확인 등의 매서드(함수,function)들을 오버라이딩해서 사용하게 됩니다. 사실 토큰은 그저 하나의 contract에 불과하기 때문에 해당 컨트랙트에서 누구는 몇개의 코인을 가지고있는지를 저장해 놓는 것 뿐입니다. 그리고 전송기능과 같은 함수를 통해서 코인을 전송하거나 등의 기능을 하게되는 것이죠. 예를 들어서 거래소에서도 토큰과 통신할 contract를 만든뒤에 그 contract로 전송을받고 고객들의 잔액을 관리하게 되는 것이죠. 또 ERC20표준..
솔리디티(solidity) - 난수 랜덤 생성(keccak256, random) 이번 글에서는 솔리디티(solidity) 개발언어에서 난수(랜덤수)를 생성하는 방법을 알아보도록하겠습니다. 솔리디티에서는 랜덤한 수를 생성할 때 해시함수를 사용해서 난수를 만들게됩니다. 캐깍(keccak256)은 SHA256의 해시를 생성하게되는데 내부테 위 예시 코드와 같이 now(현재시간, 저번 포스팅참고)와 msg.sender 그리고 1씩 증가하는 Nonce를 넣어주어서 해시를 발생시키게됩니다. 이 때 %100을 해주어 0부터 99까지의 랜덤한 숫자를 발생시키게됩니다. 이는 uint형으로 형변환을 해줌으로써 우리가 사용할용도에 맞게 가공해서 사용할 수 있습니다. 그러나 이러한 방법은 블록체인상에서 보안상 안전하지 않고 ..
솔리디티(solidity) - payable 솔리디티(solidity)에서는 특별한 키워드인 payable이 있습니다. 말 그대로 지불이 가능한 함수를 선언할 수 있습니다. payable이 붙은 함수는 이더리움을 전송받을 수 있으며, 원하는 이더리움의 value가 전송되었는지 위 예시에서처럼 require문을 통해서 확인할 수 있습니다. 위와 같은 함수를 사용할 때, 자바스크립트에서는 위 사진 아래에서처럼 value에 towei(wei를 eth로)값을 정해서 전송해 줄 수 있습니다. (참고로 from에는 기본으로 설정된 계좌를 넣어준 모습입니다.) 하지만, payable이 아닌 함수에 이더를 전송하려고 한다면, 함수 자체에서 트랜잭션을 거부하며 함수가 실행되지 않을 것 입니다.2018/06/18 - [E..
솔리디티(solidity) - 배열, memory 솔리디티(solidity)에서 배열을 사용하는 방법을 한 번 알아보도록 하겠습니다. 위 예시는 uint형 배열을 생성하는데, 배열길이는 3이며, memory키워드를 사용해서 함수 밖에서는 사라지도록 한 것 입니다.memory keyword 메모리 키워드는 storage에 내용을 저장하지 않고 그저 함수 내부에서만 사용되었다가 사라지는 메모리를 사용할 때 쓰는 키워드 입니다. 즉 위에서 선언해준 배열은 해당함수를 벗어나게되면 사라지게됩니다. 물론, storage 공간을 사용하지 않으므로 가스를 훨신 많이 절약할 수 있게됩니다. 위와 같은 예시로 반환값을 uint형 배열로 설정하고 반환해주는 모습입니다. 새롭게 생성시에는 new키워드를 사용하며 여기서는 기존..
솔리디티(solidity) - 포인터 storage, struct 전달 데이터를 직접 찾는 대신에 포인터를 즉 참조를 전달하게되면 직접 찾을 필요없이 바로 수정이가능하므로 아주 편리하다. 이더리움의 솔리디티도 그러한 기능을 가지고있다. 위와같이 좀비라는 구조체를 전달하는 함수가있는데, storage 키워드를 사용해서 포인터(참조)를 전달해줄 수 있다. 즉 위 함수에서는 외부에 있는 좀비 구조체를 참조하여 그 곳에 직접 저장(관리)이 가능한 것이다. modifier 내용추가 이전 글에서 modifier에 대해서 언급하지 않은 부분이 있어서 추가합니다. modifier는 인수도 전달받을 수 있고 그 인수를 활용해서 보다 구체적인 검사수행이 가능합니다. 위와같이 사용하는 방법은 간단한 예시입니다. 위에 있는 ..
솔리디티(solidity) - 시간단위 함수 now 사용하기 솔리디티에선 현재 시간을 나타낼 수 있는 now를 사용해서 시간과 관련된 개발이 가능합니다. (유닉스 시간을 사용합니다. 유닉스 시간이란 지정해준 년도시부터 지금까지의 초의합입니다.) 위는 간단한 예시입니다. 업데이트 타임스탬프를 사용해서 라스트업데이트 변수를 현재시간으로 업데이트 시켜주며 now를 사용했습니다. 그리고 5분이 지났는지를 판별할 수 있는 함수를 구현했습니다. 이때 minutes를 사용해서 분이라는 것을 명시할 수 있습니다. 추가적으로 seconds, minutes, hours, days, weeks, years 키워드가 있으니 필요에 맞게 사용하면 되겠습니다.now는 기본적으로 uint256반환 이때 now는 기본적으로 uint..
이더리움(Ethereum) Gas, 가스 사용료 줄이기를 위한 압축 이더리움 Dapp에 우리가 만든 함수를 다른 사람들이 이용하려면 그 사람들은 Gas(가스)를 지불해야한다. 가스란 일종의 연료로 이더리움(Ethereum)으로 구매해서 사용하게된다. 이러한 가스는 함수의 로직(구조)가 얼마나 복잡한 지에 따라서 지불 비용이 달라지게된다. 즉, 많은 연산을 수행해야하는 구조의 복잡한 함수는 더 많은 양의 가스(gas)가 필요하게되고, 간단한 함수는 그 양이 적을 것이다. 하지만, 최적화가 되지않은 함수에 대해서도 가스가 더 많이 지불 될 수 있으니 이더리움 컨트랙트 개발에서는 최적화가 필수라고 할 수 있다. 그래서 기본인 압축을 알아보려고한다. uint 8, 16, 32, 128, 256 일반적으로 uin..