비쥬얼스튜디오(visual studio)로 이더리움 솔리디티(sol) 코드 개발하기 원래는 일반적으로 이더리움 솔리디티 즉 sol파일의 개발시 remix를 사용합니다. 리믹스는 브라우저 솔리디티로 말그대로 크롬 등의 브라우저에서 스마트컨트랙트 개발이 가능하게 해주는 IDE입니다. 그러나 한글깨짐과 가독성에 대한 문제가 있어서 코딩시에는 좀 불편한 점이 있는 것은 사실입니다. 그리고 사실 멋도 없기도합니다. 간지가 안나기 때문에 비쥬얼 스튜디오 코드라는 것을 사용해줍니다. 우선 비쥬얼스튜디오 대신에 우리는 Visual Studio Code를 사용하기 때문에 구글에서 검색하셔서 우선 설치를 진행하여 주시기 바랍니다. 비쥬얼스튜디오 코드란 무엇이냐면 그냥 간단한 코드 편집기라고 생각하시면되겠습니다. 설치를 끝..
솔리디티(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 이런식으로..
솔리디티(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..
솔리디티(solidity) 생성자, modifier, import, 상속 솔리디티는 이더리움의 스마트컨트랙트 개발용 언어로 이더리움만의 자체 언어입니다. 스마트계약에서 그리고 이더리움네트워크 에서 돌아간다는 것 빼고는 다른 언어와 별 다른 차이점이 없지만, 알아야하는 문법은 존재합니다.생성자 위는 생성자 예시입니다. Ownable이라는 컨트랙트(contract)가 있고 그 이름을 똑같이 가지는 생성자(함수)는 바로 밑에 처럼 function으로 해주며 접근 지정자는 public으로 지정해줍니다. (다른 언어와 다른 점은 접근 지정자를 마지막에 붙여줍니다.) 함수 제어자(modifier) 함수제어자는 함수가 실행되기전에 요구조건을 만족시키는지 확인하는 작업을 해준다. 위에서는 오너와 현재 메세지 보내는 사..