IOTA note for baby like me : 2018.01.18 since 2018.01.11

in iota •  7 years ago  (edited)
기록하지는 않았지만 이제서야 대략적인 지갑 사용법을 익혔다.

이런 저런 정보들을 찾아보다보니 역시 대단한 사람들이 많다는 것도 여전히 느끼고 있다. 마이너가 없다고 했지만 역시나 대단한 인간들은 마이닝을 하고 있었다 ㅋㅋ 대다나다

IOTA 에 관심을 가지게 된 것은 IoT 때문인데 기술적인 부분, 프로젝트 샘플, 코드 등을 살펴보려던 것이 어쩌다보니 코인까지 보게되어서 지갑부터 살펴보게 되었다.
열심히 투자(?)해서 모은 얼마안되는걸 이리저리 전송해보면서 첨엔 꽤나 짜증나던 것이 이젠 좀 익숙해져가나보다...


한국내에서는 아직 기술적인 접근에 대한 자료는 찾기가 어려운 것 같다.

내가 못찾는거라고 자답하고 있는 상태...
인터넷으로만 정보를 보다보니 상당히 산발적이고 단편적이며 make money 중심의 이야기들이 많은 것 같아서... 하나 하나 찾아보면서 퍼즐 맞추기를 해야할 것 같다.


용어, 개념

송금을 하는 경우, TXID 조회 결과(Status) 유형

  1. Processing : 출금쪽(거래소)에서 아직 탱글 네트워크로 출금이 되지 않은 상태
  2. Pending : 탱글 네트워크에서 입금쪽(거래소)로 전송중인 상태
  3. Confirmed (혹은 Completed) : 입금 완료된 상태.

TXID를 조회하실 수 있는 사이트 : Tangle 네트워크를 살펴볼 수 있다는 것

  1. https://thetangle.org/
  2. https://iotasear.ch/

MISSION 01. 지갑(Wallet) 설치

공식 문서 : https://iota.readme.io/docs/general
윈도우 설치 안내 : https://iota.readme.io/docs/windows
설치 파일 받기 : https://github.com/iotaledger/wallet/releases
설치 시 요구사항 : Java 가 설치되어 있어야 한다.

  1. All installations require Java higher than 8u66.
  2. Make sure you have it installed, else the GUI Client can automatically install it for you.

IOTA 에서는 Tangle 이라는 네트워크 기반이라 하는데 이를 중계(?)하는 지점들을 node 라고 이야기하고 있다. 모든 지갑은 Tangle 네트워크에 접속하고 등록(attach)하기 위해 node 를 정해야 한다.

모바일 wallet 을 설치하면 기본 설정된 node 가 있다.
http://node.iotawallet.info:14265

근데 상당히 느리다... 나만 그런건지 기본 설정된 node 로는 "CONNECTION REFUSED" 나 "INVALID" 같은
error 가 자꾸난다. 이리저리 알아보니 node 를 바꿔보라는 내용들이 많아 node 들을 찾아보게 되었다.

node 정보

  1. 운영 중인 node 들의 정보를 찾아볼 수 있다. http://iota.dance/nodes
  2. thetangle.org 에서 제공하는 node : https://nodes.thetangle.org:443
    node 목록을 보고 건강(? ^^)한 node 를 찾아 변경해보니 훨씬 나아졌다.

엇 그런데... 이상하네 다른 하나는 Network 오류가 나네 안드로이드 폰 2개에 wallet 을 설치하고 각각 seed 를 등록하고 시험하는데 같은 공유기 내에서 사용해서 그런건지 동시에 접속이 안된다.


MISSION 02. 자신만의 SEED 값 만들기

지갑 실행 시 seed 값을 입력해야하는데 자신의 고유한(유일한) seed 값을 미리 만들어두어야 한다.
보안을 위해 사이트에 로그인하듯이 자신만의 일종의 비밀번호를 입력해야 한다.
IOTA 에서는 이를 seed 라고 하며, 절대 유출되어서는 아니되는 중요한 정보이다.
seed 값은 총 81자의 문자들로 생성되며, 영문 대문자 A ~ Z 까지 그리고 숫자 9 를 조합하여 만든다.
매우 길기 때문에 일일이 손으로 입력하기가 상당히 번거로울 것이며, 기억하기도 거의 불가능할 것이다.

윈도우에서 seed 값 생성하는 명령 ( Powershell on Windows 10 )

-join ([char[]](65..90+57..57)*100 | Get-Random -Count 81)

어느 가이드를 보니 윈도우에서 seed 를 생성하는 것은 안정성이 부족하니 추천하지 않는다고 하는데...
사실 seed 값의 중요성을 생각한다면 직접 만드는 것을 권장하고 싶고 위 명령을 통해 생성된 값을 직접 몇 개의 문자를 수정하는 것으로 보완하는 것을 추천한다.
아니라고는 하지만 여기 저기 웹 사이트에서 자동 생성해주는 seed 값은 그들이 내부적으로 어디로 빼먹지 않으리란 것 또한 불안하지 않은가 싶다.

seed 생성 및 관리를 위한 가이드

위 사이트에서는 seed 를 생성하고 관리하는 방법에 대한 안내가 되어 있다. 요약하면...

  1. seed 생성기로 seed 값을 생성한다.( 페이지가 열리면 마우스를 마구 흔든다 )
  2. 종이로 인쇄해두어라 .
  3. 별도 usb 에 암호화된 파일로 저장해 두어라.

즉 여러 군데 분산해서 보관하라는 이야기이다.
**주의 !! **seed 값을 생성하고 보관하는 작업은 충분히 안전하다고 생각하는 컴퓨터에서 진행되어야 한다.이미 바이러스나 스파이웨어 등에 감염된 컴퓨터에서 작업할 시 중요한 seed 값을 탈취당할 수도 있다.

현재 PC 및 안드로이드폰 Wallet 은 만족스럽지 않다.

지갑을 설치하고 seed 도 생성하고 일회용 계좌번호 개념의 주소(address)도 생성해서 거래(transaction)를 해보고 있지만 생각보다 느리다는 점( 항상 느린 것은 아니지만 자주 느리다 ) 잔액(balance) 표시가 일정치 못하다는 점0 이 되었다가 잠시 딴 일 보고 오면 잘 나오다가 이제 됐구나 하고 눈 돌린 사이 또 0 이 되어 있고이 조금 거슬린다. v2.5.6 을 사용 중 beta 라는걸 감안해야하지만... 그래도 버전이 2.x 인데....


MISSION 03. Javascript 예제 시도해보기

이제야 본격 스토리라인 시작되는구나

공식 사이트 부터 찾아보게 되겠지

아무래도 공식이니까 보다 정확하고 많은 정보가 있겠지 싶었다. 착각이었다.
사이트는 새로 개발 중인건지 간략한 소개와 별도 도메인으로 빠지는 링크들 뿐이었다.

메인페이지 우측에 DEVELOPERS 메뉴가 있다.

The IOTA Developer Hub 라고 쓰고 START DEVELOPING WITH IOTA 강조는 해두었지만 음냐... 이거야 원
그냥 내 실력이 부족한거라고 생각한다.

Javascript API 페이지를 찾았으나....

음... 역시 아직은 기다려야 하는건가.... API 소개와 예제들 친절한 내용이 있긴 하지만 벗뜨

It should be noted that the Javascript Library as it stands right now is an early beta release. As such, there might be some unexpected results. Please join the community (see links below) and post issues on here, to ensure that the developers of the library can improve it.
위와 같은 안내가 있다. 뭐 내가 대단한 전문가도 아니고 불평할 입장도 아니니 있는거부터 해본다.


Javascript API 의 예제는 사전 준비 없이 실습불가

위 페이지에서 소개하는 예제만으로는 실행이 되지 않으며 이에 대한 설명도 구체적이지 않다. 영어라서 내가 모르는거라고 생각하고 있다.

  1. 예제 그대로 실습을 해보고자 한다면 미리 준비할 것이 있다.
  2. IRI 설치할 것 ( Java 필요하고 설치라봐야 압축파일 받아서 압축 푸는게 전부 )
  3. Javascript 예제는 Node.js 를 기반으로 한다. 위 사이트에는 이런 설명 없이 간단한 코드 몇 줄만 보여주기 때문에 난감한 상황이 생기게 된다.
  4. Javascript API 를 다운받아야 하는데 공식 가이드 문서에는 Node 패키지 관리자(npm)를 이용토록 권장한다.
  5. 예제 코드에서 생략된 표현이 있는데 Node.js 의 경우 var IOTA = require(' ' ); HTML 문서 인 경우 <script src=''> 해줘야 한다.
    즉, 좀 해본 사람을 대상으로 정말 간단한 코드와 설명만을 해둔 것으로 보인다.
    치사하다 나처럼 뭣도 모르는 공부쟁이들을 어쩌라고....

IOTA 에서는 아직 C API 는 지원하지 않는 듯 하다... IoT 를 표방하고 있다면 당연히 지원해야 할텐데.. 커뮤니티에서도 해당 이슈가 있는 듯 하니 뭔가 반응이 있지 않을까 한다. Github Issue
당연히라는 것은 개인적 이유이며 기술적 need 는 아닌 것으로... 저전력, 낮은 사양의 센서 컨트롤러는 아직까지는 C 가 답이라 생각하기 때문이며 이에 대한 이견은 용납하고 싶지 않지만 난 전문가를 자처하지 않기에... 각자가 최선이라 생각하는 방법으로 프로젝트를 구현하고 그 실용을 보여주면 될뿐 소모적 글싸움, 말싸움은 낭비일 것... 라고 옆에서 회장님이 말씀하신다. - 글쓰는거 쳐다보지마세요 좀~ 퇴근하세요 그냥 쫌~


Node 정보 확인하기

제시되어 있는 예제들을 하나씩 해보는 중
기본적으로 각각의 지갑은 공개된 node 들 중에 하나와 연결이 되어야 하는데 연결된 node 의 간략한 정보를 확인할 수 있다.

  1. HTML 파일을 하나 만든다. ( 크롬 브라우저에서 열어 볼 수 있다 ) : node_info.html
<!DOCUMENT html>
<html>
    <head>
// iota.min.js 파일을 찾아 경로를 알려주어야 한다. 
// 이게 있어야 IOTA Javavscript API ( 라이브러리 )를 사용할 수 있다.
        <script src='node_modules/iota.lib.js/dist/iota.min.js'></script>
       </head>
    <body>

    <div id='nodeInfo' style='border: 1px solid #ff00ff;'> node 정보를 출력할 영역</div>

    <div id='tipsInfo' style='border: 1px solid #00ff00;'>tip 목록을 출력할 영역</div>
    
    </body>

</html>
  1. IOTA 객체를 생성하고 이것을 통해 node 와의 통신 처리를 수행한다. new IOTA( { 옵션들 } );
  2. 연결하려는 node 의 주소를 알아야한다.
  3. 예제에서는 localhost 를 사용하는데 실습 컴퓨터에 java -jar iri-[version] -p 14265 를 실행해야 한다.
  4. 연습만 할게 아니므로 실제 공개된 node 중에서 접속이 가능한 것을 찾아서 시험해 보았다.
// Create IOTA instance with host and port as provider
// https://iota.dance/nodes 에서 공개된 node 들의 주소를 확인할 수 있다. 
var iota = new IOTA({
// 'provider'  : 'http://localhost:14265'  <-- 이 주소를 사용하려면 실습하는 컴퓨터에 iri 를 실행하여야 한다.
 'provider'  : 'http://iri1.iota.fm:80'
});

공개된 node 를 시험 목적으로 이렇게 사용하는 것이 괜찮은지는 걱정이지만 결국은 해야하기에
'provider' : '주소:포트번호' 대신에
'host' : '주소',
'port' : 번호
형식으로 작성할 수도 있다.

작성 후 Chrome 브라우저로 열어(실행) 보았더니 음... 잘 나오는구나
node 제공자에게 감사하다는 얘길 드리고 싶다. 영어를 못해서... ㅜㅜ
iota_sample_01.JPG

node_info.html
<!DOCUMENT html>
<html>
    <head>
        <style>
            body { font-size : 10pt;    }
            a { font-size : 4pt;    }
        </style>
        <script src='node_modules/iota.lib.js/dist/iota.min.js'></script>
        <script>
        // Create IOTA instance with host and port as provider
        // see public nodes at https://iota.dance/nodes
        var iota = new IOTA({
//          'provider'  : 'http://localhost:14265'
            'provider'  : 'http://iri1.iota.fm:80'
        });
        iota.api.getNodeInfo(function(error, success) {
            s = '<h3>connected to node : http://iri1.iota.fm:80 </h3>';
            if (error) {
                s += error;
            } else {
                console.log(success);
                s += "<ul>";
                s += '<li>appName : '+success.appName+'</li>';
                s += '<li>appVersion : '+success.appVersion+'</li>';
                s += '<li>Neighbors : '+success.neighbors+'</li>';
                s += '<li>Tips : '+success.tips+'</li>';
                s += '<li>transactionsToRequest : '+success.transactionsToRequest+'</li>';
                s += '</ul>';
            }
            divNodeInfo = document.getElementById('nodeInfo');
            divNodeInfo.innerHTML = s;
        });
        iota.api.getTips(function(error, success){
            s = '<h3>Tips</h3>';
            if( error ){
                s += error;
            }else{
                console.log(success);
                resp = success;
                s += '<ul>';
                for(i=0;i<resp.length;++i){
                    s += '<li><a href="">'+resp[i]+'</a></li>';
                }
                s += '</ul>';
            }
            divTipsInfo = document.getElementById('tipsInfo');
            divTipsInfo.innerHTML = s;
        });
        </script>

        
    </head>
    
    <body>
    <div id='nodeInfo' style='border: 1px solid #ff00ff;'></div>
    <div id='tipsInfo' style='border: 1px solid #00ff00;'></div>
    
    </body>

</html>

정상적인 실행을 위해서는 예제에서 보여주는 함수들을 실제로는 정의를 해야한다.
예제에서는 iota.api.getNodeInfo(); 요렇게 써놨지만 r 이 function 이 아니다 라는 error 나오길래 고민했는데 대부분의 자바스크립트 api 들은 콜백을 사용한다는 점을 기억해냈다. 토닥토닥 (아래쪽에 그 내용이 써있긴 했다. 문서를 거꾸로 봐야하나보다)

iota.api.getNodeInfo(function(error, success) {
    if (error) {
        console.log(error); 응답 실패 시
    } else {
        console.log(success); 응답 성공 시
    }
});

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  
Loading...

Congratulations @armaway! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

You published your First Post
You made your First Vote
You got a First Vote

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!