이더리움(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..
솔리디티(solidity) 생성자, modifier, import, 상속 솔리디티는 이더리움의 스마트컨트랙트 개발용 언어로 이더리움만의 자체 언어입니다. 스마트계약에서 그리고 이더리움네트워크 에서 돌아간다는 것 빼고는 다른 언어와 별 다른 차이점이 없지만, 알아야하는 문법은 존재합니다.생성자 위는 생성자 예시입니다. Ownable이라는 컨트랙트(contract)가 있고 그 이름을 똑같이 가지는 생성자(함수)는 바로 밑에 처럼 function으로 해주며 접근 지정자는 public으로 지정해줍니다. (다른 언어와 다른 점은 접근 지정자를 마지막에 붙여줍니다.) 함수 제어자(modifier) 함수제어자는 함수가 실행되기전에 요구조건을 만족시키는지 확인하는 작업을 해준다. 위에서는 오너와 현재 메세지 보내는 사..
Delfino G3 버전 3.3.1.5 어떤 프로그램인가 삭제할까컴퓨터의 용량확보를 위해서 설치된 프로그램들을 보던 도중에 용량이 꽤 되는 delfino g3라는 프로그램을 발견했다. (자그마치 30메가다.)이게 보안때문에 nprotect등.. 깔린건지 아니면 내가 진짜 필요해서 깐 패키지 중에서 사용되고 있는 종속적인 녀석인지 모르기때문에 지울지 말지 갈등이신 분들을 위해 알아왔습니다.결론 부터 말하자면 지워도됩니다. 그래도 읽어보세요.. 힝 어떤프로그램인지우리나라의 보안개발사인 Wizvera에서 만든 보안프로그램입니다. 즉 공인인증같은 은행거래를 할 경우에 필요한 녀석중 하나가 바로 Delfino G3라는 녀석인데요.매일 같이 은행업무나 보안업무를 보는 분이 아닐 경우에 메모리 낭비와, 컴퓨터 속도가..
python ECDSA library Examples of use 이전 글에서 보았던 파이썬 ECDSA라이브러리 사용 예시를 보도록하겠습니다. 본 게시글은 ECDSA라이브러리의 사용방법을 설명하며, ECDSA에 대한 이론적인 내용은 따로 공부하시기바랍니다. step1: 5,6라인에서 키 쌍을 생성합니다. 그리고 7,8라인의 파일입출력을 통해서 확장자 .pem파일로 저장을 해줍니다. step2: 5번라인에서 사인키를 open해줍니다. (step1 에서 저장해주었던 파일이죠.) 그 후에 message를 열어서 사인키로 서명을 진행합니다.(6~7라인) 이 때 message파일은 없어서 제가 text로 작성해준뒤 따로 먼저 만들어 주었습니다. 8라인에서 signature파일에 서명을 저장합니다. step3: 5..