튜토리얼 : Geth를 사용하여 자체 ICO 토큰 배포 (파트 I)

안녕하세요! 이 튜토리얼을 여러분과 공유하게되어 매우 기쁩니다. 지난 몇 주 동안 우리는 Remix, Truffle 및 많은 테스트 도구와 같은 스마트 계약 개발과 관련된 일련의 블로그를 게시했습니다. 이번에는 평소와 같이 Ethereum 프로토콜의 공식 golang 구현 인 Geth 사용에 대한 초보자 자습서를 작성하기로 결정했습니다. 이 도구를 사용하면 강력한 기능이 지원하는 모든 네트워크에 자체 스마트 계약을 배포 할 수 있습니다. 이제 시작하겠습니다!

Geth 설치

Linux

OSX

그런 다음 geth --help 를 입력하여 geth가 성공적으로 설치되었는지 확인할 수 있습니다. 도움말 정보가 표시되면 좋습니다.

새 계정 만들기

이제 Geth가 준비되었으며 거래를하려면 계정이 필요합니다. 이미 자체 계정이있는 경우 다음 명령을 사용하여 개인 키 파일을 Geth로 가져올 수 있습니다.

그런 다음 지침을 따르기 만하면됩니다.

하지만 계정이없는 경우 Geth에서 새 계정을 만들 수 있습니다. 간단히 입력 :

그 후에 Geth는 전역 방식으로 개인 키 파일을 저장합니다. 이 위치에서 운영 체제별로 확인할 수 있습니다.

예를 들어 새 계정을 만들고 공개 주소는 다음과 같습니다.

0x2f5e0ff2c960852e76be73b7cff8ea20d42d2ec

입력하는 경우 :

현재 하나의 계정이 있음을 알게됩니다. 새로 만든 공개 주소를 잊어 버려도 걱정하지 마세요. 이런 방식으로 확인할 수 있습니다.

genesis.json 만들기

이제 우리는 먼저 genesis.json을 사용하여 초기 블록을 만들 수 있습니다.

기본적으로 genesis.json은 chainID, 난이도, gasLimit 등을 포함하여 전체 블록 체인에 대한 일련의 규칙과 구성을 지정하는 파일입니다. 각 거래는이 규칙을 따릅니다. 지금은 여기에서 계정 주소를 변경하고 다른 모든 정보는 그대로두면됩니다.

원하는 곳에이 파일을 저장할 수 있습니다. 블록 체인을 초기화하는 다음 단계에는 영향을 미치지 않습니다.

블록 체인 만들기

우리 모두 알고 있듯이, 노드가 완전히 동기화되면 블록 체인의 모든 블록이 각 노드의 로컬 디스크에 저장됩니다. 따라서 전체 블록 체인을 저장할 폴더도 지정해야합니다. 이를 위해 다음 명령을 사용할 수 있습니다.

먼저 현재 폴더에 LocalNode1 이라는 폴더를 만든 다음 genesis.json으로 블록 체인을 초기화하고 데이터 파일을 LocalNode1 에 저장합니다. 여기에서 genesis.json의 경로를 올바르게 지정해야합니다. 그렇지 않으면 작동하지 않습니다.

모든 것이 순조롭게 진행되면 “성공적으로 생성 상태를 작성했습니다”라는 메시지가 표시됩니다. 그리고 LocalNode1 폴더를 살펴보면 geth keystore 폴더 두 개와 geth.ipc 파일 하나가 있습니다. em>.

블록 체인과 상호 작용

방금 만든 블록 체인과 상호 작용하려면 다음을 입력하면됩니다.

이 명령은 몇 가지 사항을 지정합니다.

기존 계정 추가

현재로서는 LocalNode1 내에 계정이 없습니다. 이전에 새 계정을 만들었지 만 현재 LocalNode1 에서 데이터를 실행 중이므로 Geth에서 찾을 수 없습니다. LocalNode1에 기존 계정을 추가하려면 새 터미널을 열고 다음을 입력해야합니다.

좋습니다. 다음을 통해 LocalNode1 내부의 계정을 확인하십시오.

계정 잔액도 확인할 수 있습니다.

계정 잔액을 위해 genesis.json에 10¹¹을 지정합니다.

다른 노드에 연결

이제 새 터미널을 열고 LocalNode1 의 동일한 폴더 아래에 LocalNode2 라는 새 폴더를 만듭니다. 두 개의 노드를 연결하려면 정확히 동일한 블록 체인 정보가 필요하기 때문에 이전 노드와 동일한 프로세스를 수행합니다. 즉, 새 노드는 모든 정보를 genesis.json으로 초기화하고이 블록 체인 내의 모든 과거 트랜잭션을 동기화해야합니다.

새 데이터 폴더를 만들고 genesis.json으로 초기화 :

Geth 콘솔 열기 :

포트 번호는 이전 번호와 달라야합니다.

node2에 대한 새 계정 만들기 :

알겠습니다. 이제 연결 프로세스부터 시작할 수 있습니다. 자습서를주의 깊게 따르면 이전에 nodiscover 를 설정했다는 사실을 알게되어 혼란 스러울 수 있습니다. 예, nodiscover 속성은 노드가 다른 노드와 자동으로 상호 작용하지 못하게합니다. 즉, 노드를 적극적으로 추가해도 괜찮습니다.

먼저 node2의 터미널에서 다음을 통해 node2의 정보를 가져옵니다.

둘째, node1의 터미널에서 다음과 같이 node2의 정보를 추가합니다.

그런 다음 다음 방법으로 연결을 확인하세요.

또는

광부 설정

광부는 보상을 얻기 위해 계산 능력을 제공하는 노드입니다. 모든 거래는 블록을 만들기 위해 채굴되어야합니다. 따라서 거래를 실행하기 위해 서로 경쟁하는 수천 명의 채굴자가 있습니다. 때로는 거래가 제공하는 가스의 양이 많을수록 경쟁이 더 치열 해집니다.

광부를 설정하려면 node1의 터미널에 다음을 입력하면됩니다.

즉, eth.accounts [0] 는 발신자의 역할을 할뿐만 아니라 광부의 역할도합니다. 우리는 확실히 다른 계정을 광부로 설정할 수 있습니다.

또한 node2의 터미널에서 광부를 설정합니다.

결론

그렇습니다! 이러한 도구를 사용하면 블록 체인이 실제로 작동하는 방식, 노드가 서로 상호 작용하는 방식 등을 더 깊이 이해하는 데 도움이됩니다. 다음 시간에는 계약을 컴파일하고 계약 생성 트랜잭션을 수행하고 채굴자를 시작하여 트랜잭션을 채굴하는 방법에 대한 자세한 내용을 공유 할 것입니다. 다음 주에 뵙겠습니다!

Zhiyuan Li Quan Sun , HaloBlock.io의 보안 연구원