블록체인2021. 7. 4. 13:35

전번편에서 간단하 geth를 다운로드 받아 구동하는 방법을 설명하였다. 사설망용 geth도 동일한 프로그램을 다운로드 받아 구성하면 된다.

 

아래 사이트에서 tar.gz 파일을 받아 역시 압축을 풀어보자. ubuntu linux/Geth 1.10.4 64 bit를 기준으로 하자.

 

https://geth.ethereum.org/downloads/ (처음에 로딩될때 버전을 참조하느라 조금 시간이 걸린다)

 

Downloads | Go Ethereum

Retrieving packages from release server...

geth.ethereum.org

전체적인 과정은 아래를 참조했다. 공식 페이지이며 버전이 올라갈때마다 적절히 수정되는 것을 기대할 수 있다.

https://geth.ethereum.org/docs/interface/private-network

 

A. 파일을 다운로드 한 후 계정을 생성해보자.

 

$ mkdir /work/                     #프로그램 압축을 풀 폴더

$ mkdir /work/neibcprv     #이더리움 데이터 파일을 보관할 폴더

$ cd /work/

$ tar xvfz geth-alltools-linux-amd64-1.10.4-aa637fd3.tar.gz   # /work/에 다운받은 tar.gz가 복사되어 있다고 가정

$ cd geth-alltools-linux-amd64-1.10.4-aa637fd3     #설치후 짧은 이름으로 변경해서 사용해도 좋다.

$ ls

... geth ...

 

우선 geth에서 기초적으로 쓸 계좌를 2개 생성한다. 계좌를 만든다는 것은 잘 알려진대로 비밀키와 공개키, 지갑주소를 만들어 파일로 보관하는 방법이다. 비밀키는 별도의 암호를 물어 암호화하여 저장한다.

 

$ cd /work/geth-alltools-linux-amd64-1.10.4-aa637fd3

$ ./geth account new --datadir "/work/neibcprv"

 <-- 암호를 입력하면 /work/neibcprv/keystore에 해당 정보가 저장된다. 암호는 잘 보관해주자. 나중에 송금을 할때 암호를 입력해야 해당 개인key를 쓸 수 있다.

$ ./geth account new --datadir "/work/neibcprv"

 

$ ls -al /work/neibcprv/keystore
total 16
drwx------ 2 neibc neibc 4096  7월  3 16:42 .
drwxrwxr-x 4 neibc neibc 4096  7월  4 01:28 ..
-rw------- 1 neibc neibc  491  7월  3 16:42 UTC--2021-07-03T07-42-11.924219581Z--2d75914e826c023beaa98a4c05db1be808c4aaa3
-rw------- 1 neibc neibc  491  7월  3 16:42 UTC--2021-07-03T07-42-31.709155899Z--2276b96e62c9394d76fbdc59f451688a55f99d1f

 

파일을 열어보면 아래와 같이 나옴을 알 수 있다. 2개 만든 계좌중의 하나에 대한 정보이다.

 

$ cd /work/neibcprv/keystore/

$ more UTC--2021-07-03T07-42-11.924219581Z--2d75914e826c023beaa98a4c05db1be808c4aaa3 
{"address":"2d75914e826c023beaa98a4c05db1be808c4aaa3","crypto":{"cipher":"aes-128-ctr","ciphertext":"f60bbcbe58da59504a8e1cebecafaf4
0125a4fc69420d15f4e50bc58540c6461","cipherparams":{"iv":"151a19efcd65491a1839cff7994e0099"},"kdf":"scrypt","kdfparams":{"dklen":32,"
n":262144,"p":1,"r":8,"salt":"f4fb417173cb2d53cb50226c14952d8994c5b4329e8dcc244c8f4a0f7c0c166f"},"mac":"b927a65a182f79e865eb30521dad
38ea712647bd60bdba14359e32ce9465c30c"},"id":"c4ea17f1-08cd-4ba2-b8d3-d1f6bfba8a2e","version":3}

 

이더리움 계좌는 이렇게 local에서 우선 네트워크에 접속되어 있지 않고 생성되어  datadir/keystore/에 관련 정보를 남기는 게 전부이다. 이런 과정들의 세부가 궁금한가? 그러면 아래 URL을 참조해보자.

https://medium.com/hexlant/%EC%9D%B4%EB%8D%94%EB%A6%AC%EC%9B%80-keystore-%ED%8C%8C%EC%9D%BC-utc-%EC%83%9D%EC%84%B1-%EB%B0%8F-%EC%95%94%ED%98%B8%ED%99%94-%EB%B3%B5%ED%98%B8%ED%99%94-%EC%9B%90%EB%A6%AC-1-2-d417cb605bf

 

이더리움 KeyStore 파일(UTC) 생성 및 암호화/복호화 원리 (1/2)

이더리움 플랫폼에서는 본인을 확인하는 수단으로 KeyStore 파일을 사용합니다. 사용자는 KeyStore 파일을 생성할 때 입력했던 비밀번호를 통해 유효한 사용자임을 인증하고 계좌에 접근할 수 있게

medium.com

 

 

B. 다음에는 사설로 이더리움을 구성하기 위해 genesis파일을 작성하여 geth를 실행해보자.

 

ethereum 사설망은 PoW방식의 ethash모드와 좀 다른 형태(Proof of Authority)의 고속의 clique 방식이 있는데, 보통 ethereum에서는 clique을 추천한다. 하지만 여기서는 실제 사용되는 ethash모드로 진행하도록 하자.(대규모 개발 시험을 위해서는 clique로 하면 편하겠다. 상세 내용이나 파라메터에 대해서는 해당 공식 문서를 참조한다.(https://geth.ethereum.org/docs/interface/private-network)

 

ethash모드로 사설 이더리움망을 구성하려면 json파일을 하나 구성해야 하는데, genesis.json이라고 칭해보자.

간단하게 하나 만들어준다.

 

$ cat > /work/neibcprv/genesis.json

{
  "config": {
    "chainId": 2125,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "ethash": {}
  },
  "difficulty": "1",
  "gasLimit": "8000000",
  "alloc": {
    "2d75914e826c023beaa98a4c05db1be808c4aaa3": { "balance": "10000000000000000000" },
    "2276b96e62c9394d76fbdc59f451688a55f99d1f": { "balance": "10000000000000000000" }
  }
}

그리고 아래와 같이 init을 해준다. 이렇게 하면 위 genesis파일에 기초하여 필요한 기초 파일을 생성해주고 초기 셋팅을 해준다. 초기 배정 금액 alloc/balance는 wei단위(10^18 wei = 1 이더리움)라서 100이더리움(100000000000000000000 wei)이 배정되었다

 

$ cd /work/geth-alltools-linux-amd64-1.10.4-aa637fd3

$ ./geth init --datadir "/work/neibcprv" /work/neibcprv/genesis.json

 

이렇게 실행하면 /work/neibcprv/에 geth폴더 등이 생긴다. 그리고 나서는? 실제로 실험을 해봐야한다.

아래와 같이 networkid 옵션에 위 genesis의 chainId인 2125를 그대로 넣어주고 여러가지 명령 수행을 위해 console이라고 입력한다. 그리고 나서 간단한 송금과 채굴을 해보자.

 

$ ./geth --datadir "/work/neibcprv" --networkid 2125 console

...

....

 

> primary = eth.accounts[0];    #여기서 만든 첫번째 계좌
"0x2d75914e826c023beaa98a4c05db1be808c4aaa3"
> secondary = eth.accounts[1];   #여기서 만든 두번째 계좌
"0x2276b96e62c9394d76fbdc59f451688a55f99d1f"

> miner.setEtherbase(primary);       #이체 채굴을 하면 첫번째 계좌로 돈이 들어간다.

> miner.start();                                  #채굴을 시작하자. 채굴을 하지 않으면 거래가 발생하지 않고 이더리움이 생기지도 않는다.

 

> personal.unlockAccount(primary);   #송금을 하기 위해 첫번째 계좌의 암호를 입력해보자.

> eth.sendTransaction({from: primary, to: secondary, value: web3.toWei(1, "ether")});  #1번계좌에서 2번계좌로 1이더리움을 송금한다.

 

> balance = web3.fromWei(eth.getBalance(primary), "ether");

첫번째 계좌의 현재 잔액이 표시된다.

> balance2 = web3.fromWei(eth.getBalance(secondary), "ether");

두번째 계좌의 현재 잔액이 표시된다.

 

 

자 간단하게 이더리움 서버를 사설로 구성하여 계좌를 만들고, 채굴도 하고, 돈을 송금하고 잔액을 확인해보았다.

마지막으로 nohup으로 백그라운드로 geth를 실행하는 예시다. mining도 실행되도록 mine옵션을 주었다.

 

$ ./geth --datadir "/work/neibcprv" --networkid 2125 --mine --minerthreads "1" 2>> /work/neibcprv/geth.log &

반응형
Posted by 작동미학
블록체인2021. 7. 4. 12:29

개인적으로 이더리움 노드에 참여해 볼수 없을까? 어려워보이지만 시작은 우선은 쉽다.

(하지만 정상적인 full mode sync를 위해서는 16gb이상, 500gb급 ssd가 필요하다. 사양이 떨어지면 light mode를 사용하자.)

 

 이더리움 노드 서버 혹은 클라이언트인 geth를 다운로드 받아 구동하면 된다. 여기서는 geth 1.10.4 버전 ubuntu linux에서 작동시켰다. 다만, geth는 go언어로 만들어져서 거의 모든 OS를 지원하므로, 다른 OS에서도 아래와 유사한 방식으로 구동할 수 있을 것이다.

 

https://geth.ethereum.org/downloads/

 

Downloads | Go Ethereum

Retrieving packages from release server...

geth.ethereum.org

 

여기서 Geth 1.10.4 Linux 64bit 버전을 다운로드 받자(Tools가 같이 있는 버전을 받아도 좋다. 아래는 geth & tools를 기준으로 한다.) 필자는 Ubuntu 18.04기반으로 작업하였다. 다운로드를 받아 적절한 디렉토리에 압축을 풀면 go로 된 단순한 명령어들을 볼 수 있다.

 

아래는 /work/gethdata에 여러가지 데이터를 저장하고, /work/밑에 프로그램을 압축 푼다고 가정해보자.

 

$ mkdir /work/        #프로그램 설치 폴더 생성

$ mkdir /work/gethdata  #데이터 폴더 생성, 각종 정보 파일과 계좌를 만들때의 정보 등을 담게 된다

$ cd work

$ tar xvfz geth-alltools-linux-amd64-1.10.4-aa637fd3.tar.gz

....

$ cd geth-alltools-linux-amd64-1.10.4-aa637fd3

$ ls

abigen bootnode clef COPYING evm geth puppeth rlpdum

 

이상태에서, 아래와 같이 실행하면 곧바로 이더리움 노드에 참여하게 된다(networkid 1)

단순 기능 확인만을 위한 저사양용 light mode와 일반 안정적인 채굴등을 위한 fast mode두가지 실행 방식을 적어본다.

 

 

$ ./geth --datadir "/work/gethdata"  --syncmode "light" console  #기본 기능만 테스트하기 위해서는 light mode를 추천

혹은

$ ./geth --datadir "/work/gethdata"  console    #fast mode이며 datadir을 지정하지 않으면 ~/.ethereum/에 생성된다.

 

이 datadir의 위치를 바꾸면 모든 것이 리셋되고 다시 해당 datadir을 기준으로 다운받아 작동하게 되니 쉽게 리셋할 수 있다.

 

(다음에는 이렇게 mainnet에 참여하는게 아니라 여러가지 시험을 해볼 수 있는 사설 네트워크를 구성해보자. 이렇게 되면 나만의 이더리움 네트워크를 구성할 수 있다.)

 

아래 console에서 다양한 실제 작업을 할 수 있다. 간단한 명령을 살펴보자.

주소를 몇개 정의한 후 밸런스를 확인하고 계정에 암호를 입력한 후 송금하는 예시이다. 이건 따로 조사를 해 본 후 실행하기를 바란다.

 

> secondary = '0xb98df66662a586461b668e9ab81383d2b0d341da';
> third = '0xfd0e3e0c475a2feddfd681c599721a1b273fa78d';
> balance = web3.fromWei(eth.getBalance(secondary), "ether");

> personal.unlockAccount('0xb98df66662a586461b668e9ab81383d2b0d341da');
> eth.sendTransaction({from: secondary, to: third, value: web3.toWei(4.95, "ether"), nonce:0, gas: 300000});

#sendTransaction의 nonce는 총 출금한 개수다. 처음에는 0, 그 다음에는 1을 붙이자.

 

다만 main net에 제대로 참여하기 위해서는 geth가 전체 blockchain의 block들이 전부 sync(다운로드)되어야 한다.

 

geth 홈페이지에 따르면 4 core / 16gb ram / 500gb 이상의 ssd를 추천사양으로 이야기한다. (필자가 100%정도 sync되었을때 용량이 360GB였다) 모두 sync하는 데에는 2~3일 정도 소요되었다. ssd를 추천하는 이유는 sync를 제대로 하기 위해서는 고속의 I/O가 필요하기 때문이라고 한다. sync여부는 위 geth console에서 아래와 같이 확인 가능하다

 

> eth.syncing

{

  currentBlock: 12780722

  highestBlock: 12780722

  ..

}

이렇게 currentBlock과 highestBlock이 같은 값이면 sync가 100%완료된 상태이다. 그런데 disk I/O가 충분히 빠르지 않으면 이것이 100%sync가 잘 되지 않는다.

 

geth는 내부적으로 fast mode, full mode, light mode 3가지가 존재하는데 디폴트는 fast mode이다. hardware사양이 낮고 적은 용량만 가진 서버에서는 light mode를 확인하여 해당 방식으로 구동하는 것이 가능하다. 10분에 기초 동기화가 되고 300mb정도의 용량만으로도 유지가 가능하다고 한다. 다만 이 light mode는 다른 노드의 도움을 받아야만 정상적인 처리가 가능하여 해당 노드에 의존하므로 처리 속도가 느리다고 알려져 있다. 채굴도 불가능하다. light mode는 geth실행시에 --syncmode "light" 만 추가하면 되어 소형 기기용으로 많이 추천되고 있는 모양이다.

 

$ ./geth --datadir "/work/gethdata"  --syncmode "light" console  

 

 

그리고 용량 문제는 main net에 붙을때만 그렇고 private node를 운영할때는 큰 용량을 필요로 하지 않는다. 마음껏 fast mode/full mode로 하면 된다.

 

그리고 ethereum main net의 상태는 아래 사이트를 통해 지갑 등을 확인할 수도 있으니 비교할시에 참고하기 바란다.

https://etherscan.io/

반응형
Posted by 작동미학
정보이론2021. 3. 28. 09:25

 정보이론 서적에서 언급되는 분야중에 흥미로운 것은 DNA 분야이다. DNA는 정보로 가득차있기 때문이다. 인간의 경우만 놓고 보아도 30억쌍의 ATGC... 배열로 된 유전자 정보를 1개의 세포가 온전히 매우 안정되게 포함하는 셈이고, 1개의 수정란에서 인간의 모든 것이 시작되어 생명을 형성한다.

 

 흥미롭게도 이 관점에서 왜 불로장생이 어려운지에 대해서 다양한 학설이 나왔는데, 아래가 간단히 정리해놓은 글이다.

 

scienceon.hani.co.kr/548962

 

세포 수준에서 일어나는 노화 현상, 그 원인들

[3] 세포 노화의 여러 원인들 인간을 대상으로 ...

scienceon.hani.co.kr

 

 핵심 논리는 이 DNA의 복제와 오류에 있다. 한 개의 수정란에서 시작된 인간의 세포체계는 지속 세포를 복제하여 신체를 만들어가는데 그 오류율이 상당히 낮고 잘못 복제된 DNA를 보정하는 기능까지 보유하고 있다. 그러나 오류율이 낮아도 없는 것은 아니다. 세포가 지속적으로 복제되고 교체되면서 작은 오류라도 점점 더 커지게 마련이다. 모든 세포에 대해 단일의 절대적인 기준을 두고 대사하면서 모든게 처리되지 않는다. 계속 복제되어 가면서 기존의 것과 최대한 같게 하려고 하지만 한번 오류가 발생하면 다시 복제될때는 그 오류가 전파된다. 따라서 생명체 입장에서 이 일관성 유지 문제는 난감한 일이다. 모든 세포가 하나의 원본을 수시로 참조할 수 없다. 그렇다고 DNA서열 전체를 hashing해서 비교해보고 버리지도 못한다.

 

 복제 과정에서 무엇이 정상적인 원본인지 알 수 없으며, 정보가 너무 크기 때문에(30억쌍) 비교하기도 어려운 것이다. 맨 처음 수정란에서 시작된 DNA정보는 오류의 축적을 피할 수가 없는 것이고, 이 부분에서 생명체는 공학적인 완성을 이루지는 못했다.

 

 이 전체적인 DNA의 정보전달 방식이나 변형 가능성은 노화와 암, 진화 모두에 영향을 끼치게 된다. DNA가 더 복잡할수록 더 많은 단계를 거칠수록 오류율이 높아진다. 오류율이 높아지면 오작동이 커지는데, 그 결과 새로 복제된 세포들은 필연적으로 불완전해진다. 더군다나 원본에서 더 멀어질수록(나이가 먹을수록) 더 불완전해진다.

 

 가끔씩은 생명을 진화시키는 돌연변이도, 이 불완전의 메카니즘을 바꾸지는 못했다. 아마도 유전자 시퀀싱 기술을 통해서 노화가 일어나는 단계별로 몸 전체 세포의 DNA 정보 불일치를 추적해나갈 수 있다면 더 자세히 이 과정의 진화를 알 수 있게 될 수 있겠다.

 

 그리고 태아 상태에서의 DNA 정보 변형은 치명적일 수 있다. 그 영향이 이후 복제된 수많은 세포들에 처음부터 영향을 끼치기 때문이다. 여하튼 또한 이러한 변형은 어떤 면에서는 돌연변이가 변화에 적응하여 진화하는 그 과정에도 기여하게 된다. 

 

 정보이론 관점에서 이러한 DNA문제를 파헤치면 여러가지 뜻깊은 사실들을 더 알 수 있지 않을까? 노화나 오류의 진전, 진화 이런 것들이 모두 영향을 받을 수 있다. 사실 그런 의미에서 간단히 이 이론들을 소개해 본 것이다.

 

 좀더 덧붙여보면 향후에 이 DNA 일관성을 외부 공학적인 방법을 사용해 유지할 수 있는가도 흥미로운 미래 이슈가 아닐 수 없다. 최근에 DNA변형된 세포를 찾아내 파괴하도록 하는 암 치료법이 소개되었는데, 이 방법은 변형된 DNA를 하나하나 검출해서 코딩해줘야만 파괴할 수 있다. 불행히도 아직 기술은 어떤 기준 원본 DNA를 만들어서 그것과 변형된 것을 찾아내어 파괴하지는 못한다.

 

www.monews.co.kr/news/articleView.html?idxno=301452

 

'세번째 CAR-T 등장' 4세대 면역세포 치료제 시대 도래 - 메디칼업저버

[메디칼업저버 양영구 기자] 세 번째 키메라항원수용체(CAR) T세포 치료제가 등장하면서 4세대 면역세포 치료제 시대가 앞당겨질 것이란 기대가 나온다.CAR-T 세포 치료제가 CD19 항원을 타깃해 다

www.monews.co.kr

이런 상황인데 만약에 DNA 변형이 전혀 불가능해지도록 하는(변형되면 무조건 파괴하는) 생명공학이 발견되면 어떨까?

그야말로 이론적으로는 불로불사의 시대가 열리게 되겠다(물론 다른 것도 해결되어야 할 수 있겠지만, 여하튼 기초가 되겠다. 오작동이 없어진다). 어느 정도의 기술발전이 되면 미래의 꿈의 기술 후보가 될 수 있지 않을까.

반응형
Posted by 작동미학