코인을 만들려면 어떤 프로그래밍 공부를 해야하나요?
코인을 만들려면 관련된 프로그래밍 공부 대해 알고싶습니다. 예를 들어 c언어라든지 관련된 공부 또는 교재같은게 따로 있는지 그리고 관련된 논문들은 어디서 볼 수 있는지 궁금합니다. 알려주세요!
코인을 개발하기 위해서는 기본적인 컴퓨터 공학의 내용은 기본으로 하고
블록체인 엔진의 원리를 이해할 필요가 있습니다.
블록체인 엔진에 사용되는 언어로는 주로 C++, Go, Rust 등의 언어가 있습니다.
엔진을 가볍게 학습하시고 토큰발행을 학습하려면, 이더리움의 스마트 컨트렉트에 사용되는 solidity 사용법을 배우는 것을 추천합니다블록체인을 공부하기 위해 아래 책을 추천합니다.
마스터링 이더리움 : http://www.yes24.com/Product/Goods/73165236
저도 하다 보니 대부분 C/C++로 짜여져 있습니다. 코어의 경우 그렇고,
전송 모듈 같은 경우 자바, 자바스크립트, 파이썬 등도 지원을 합니다.
그러나 뭐니뭐니 해도 C/C++이 메인입니다.
교재는 잘 모르지만 요즘 블록체인 학과가 생겨나고 있으니 그 쪽을 찾아 보시면 좋겠네요.
저도 사실 여유가 된다면 학교에서 다시 공부를 하고 싶습니다.
아래 내용대로 따라 해보지는 않았지만...
C++프로그래밍에 대한 기본적인 지식이 필요 한 걸로 나와 있네요...참고 하세요..^^;
아래 출처 링크 들어가셔서 댓글들도 같이 읽어보시길 추천드립니다..
출처 : https://steemit.com/kr/@elysia/4hs7fj
아직 가이드 대로 직접 만들어보진 않아서 완벽한 가이드인지는 모르겠지만
비트코인 관련 공부하다가 번역기 반, 어설픈 의역 반으로 올려봅니다원제 : Complete Guide on How to Create a New Alt Coin
출처 : https://bitcointalk.org/index.php?topic=225690.0저기 밖에 수많은 쓰레기 코인이 널려있어서 나는 새로운 알트코인 만드는 법을 가르쳐주기위해 이 코스를 만들기로 결정했다.
그것은 아주 쉽고, 나같은 경우에는 보통 2시간 내에 만들 수 있다.C++프로그래밍에 대한 기본적인 지식이 필요하다. 전문가일 필요는 없지만, 기본적인 컴파일링 에러와 이를 수정하는 방법은 이해해야 한다.
다음 단계를 따라서 새 알트코인을 만들어본다 :
준비단계 :
라이트코인의 전체 소스코드를 다운로드 한다.
github에서 찾을 수 있다.
구글에서 검색하면 찾을 수 있다.만약에 윈도우를 사용한다면, 이 스레드의 단계를 따른다 :
https://bitcointalk.org/index.php?topic=149479.0환경 및 라이브러리를 설정하고 라이트코인을 컴파일 한다.
컴파일 할 때(그리고 실행할 때) 성공하면, 환경 설정이 잘 된 것이다.코인설계 :
이제 코딩을 하기전에 환경을 설정했으므로, 코인을 설계해야 한다.
이는 간단한 수학계산이지만, 코딩의 매개변수가 필요하다.기본적으로 원하는 것을 결정해야 한다.
코인의 이름.
우리의 예제에서 Abc coin이라고 부르자.
또한, 기호를 경정하고, 우리는 이것을 "ABC"라고 부른다.블록타임.
블록 간의 평균 목표시간이다. 보통 15초에서 2분 사이로 설정한다.
원하는 경우 비트코인과 같이 10분을 할 수도 있지만 너무 길다.difficulty retarget time
이것은 심각한 instamine 문제를 일으킬 수 있기 때문에 중요하다.
보통 1시간에서 1일 사이다.
(diff retarget time)/(block time)은 블록의 수를 알려준다.
이것은 고려해야 할 중요한 매개변수다.블록 당 초기 코인
보통 2 ~ 100으로 설정된다. 원하는 것을 설정하면 된다.
또한 블록 수를 기준으로 블록 당 코인을 만들 수 도 있고 무작위로 (JKC/LKY 등) 코인을 만들 수도 있다.블록 당 코인이 반으로 줄어드는 기간
보통 6개월에서 3년이다. 원하는 것을 설정하면 된다.포트(2개)
연결 포트와 RPC 포트가 필요하다.
공통 앱에서 사용되지 않는 것을 선택한다.
구글에서 특정포트 사용에 대해서 검색할 수 있다.
초기 난이도 등 조정할 수 있는 몇가지 다른 것들이 있지만, 일반적으로 나는 이것들을 신경쓰고싶지 않다.
이제 이러한 매개변수가 정의되면, 한가지 중요한 점은 1달, 1년 등에서 생성된 블록/코인 수를 계산하고 총 동전이 생성된다는 것이다.
이것은 코인의 전반적인 작동방식을 알려주고 위의 매개변수를 다시 조정할 수 있다.
코드변경 부분 :
시작하기 전에 Litecoin의 전체 디렉토리를 Abccoin으로 복사한다.
그런 다음 Abccoin에서 코드를 수정한다.코드를 변경하려면 다음 단계를 따른다 :
#1. Abccoin / src dir에서 "litecoin"을 검색하고 대부분을 "abccoin"으로 변경한다.
대소 문자를 구별하여 교체해야 할 수도 있다.
모두를 대체 할 필요는 없지만 대부분을 교체해야 한다.
smallchange 코드를 참조하려면 먼저 필요한 변경 사항을 https://github.com/bfroemel/smallchange/commit/947a0fafd8d033f6f0960c4ff0748f76a3d58326 에 문의한다.참고 : smallchange 1 차 커밋에는 아래에서 개략적으로 설명 할 많은 변경 사항이 포함되어 있지 않지만 변경해야 할 사항에 대한 좋은 참조이다.
#2. Abccoin / src dir에서 "LTC"에 대한 검색을 수행하고 "ABC"로 변경한다.
#3. 포트를 변경한다 : 동전 디자인에서 정의한 포트를 사용하고 다음 파일을 변경한다 :
연결 포트 : protocol.h 및 init.cpp
rpc 포트 : bitcoinrpc.cpp 및 init.cpp
#4. main.cpp에서 매개 변수를 변경한다.
블록 값 (GetBlockValue ()에서)
블록 시간 (GetBlockValue () 직후)
diff retarget time (GetBlockValue () 직후)
instmine을 피하기 위해 diff retarget 스케일을 조정한다 (GetNextWorkRequired ()에서).
마지막 항목은 Luckycoin 코드를 참조한다. 그러면 어떻게 수행되는지 볼 수 있다.
블록 내의 임의의 코인 값에 대해서는 JKC 및 Luckycoin 코드의 GetBlockValue () 함수를 참조한다.#5. 코인 디자인에 따라 main.h의 값을 조정한다 :
max coin count
dPriority
#6. transactionrecord.h에 트랜잭션 확인 수를 변경한다 (3 확인 트랜잭션 등을 원할 경우).
또한 main.h / cpp에서 채굴 된 블록의 성숙 시간에 영향을주는 COINBASE_MATURITY를 변경한다.#7. 제네시스 블록을 만든다. 어떤 사람들은 거기에 머물러 있지만 정말 쉽다.
내부에서 LoadBlockIndex () 함수를 찾는다 :
최근 뉴스 단계로의 역설 (pszTimestamp).
최신 유닉스 시간을 얻고 (google을 사용하여) block.nTime을 입력한다.
nNonce를 설정한다 (실제로는 중요하지 않음).
당신은 그것을 사용하고 싶다면 testnet에 대해서도 time / nonce를 변경할 수 있다.
완료되면 저장한다.
이제 제네시스 블록은 해쉬 체크와 머클 루트 체크와 일치하지 않을 것이다.처음으로 컴파일 된 코드 (데몬 또는 qt)를 실행하면 "assertion failed"라고 표시된다. 프로그램을 종료하고 config.dir (AppData / Roaming 아래)으로 이동하여 debug.log를 열고 "block.GetHash () ="다음에 해시를 가져 와서 main.cpp, hashGenesisBlock의 beginnig에 복사하여 붙여 넣는다. 또한 같은 로그 파일에서 Merkle 루트를 가져 와서 LoadBlockIndex ()에서 다음 코드의 ... 위치에 붙여 넣는다.
Quote
###############################################
assert(block.hashMerkleRoot == uint256("0x..."));
###############################################코드를 재 컴파일하고 제네시스 블록을 만들었다!
그런데, "txNew.vout [0] .nValue ="를 정의한 블록 당 코인으로 변경하는 것을 잊으면 안된다. 50으로 남겨 두지 않아도 된다. 블록 당 코인과 일관성을 유지한다. (그전에 해시 및 m- root를 조절한다. 그렇지 않으면 다시 변경된다).
또한 알림 / 체크 포인트 키를 변경해야한다. 이것은 동전 유형 및 버전에 따라 다르며 main.cpp, main.h, alert.cpp 및 checkpoint.cpp에서 찾을 수 있다.
#8. base58.h에 올바른 주소 시작 문자를 설정한다. 원하는 letter을 찾으려면 시행 착오를 원할 수 있다. letter 위치를 정확히 계산할 수 없다.
-> List of address prefixes : https://en.bitcoin.it/wiki/List_of_address_prefixessendcoinsentry.cpp에서 해당하는 "starts with"로 변경한다.
signverifymessagedialog.cpp의 예를 변경한다.#9. 체크 포인트 : 처음 체크 포인트 검사를 사용하지 않으려는 경우 그렇지 않으면 멈추게된다.
여러 가지 방법으로 사용 중지 할 수 있다. 나의 방법은 :open checkpoints.cpp
함수가 3 개 있고, normal retrn을 주석 처리하고, 다음과 같이 true, 0 또는 null 중 하나를 반환한다.
다음과 같이 :
Quote
MapCheckpoints::const_iterator i = mapCheckpoints.find(nHeight); if (i == mapCheckpoints.end()) return true; // return hash == i->second; return true; } int GetTotalBlocksEstimate() { if (fTestNet) return 0; // return mapCheckpoints.rbegin()->first; return 0; } CBlockIndex* GetLastCheckpoint(const std::map<uint256, CBlockIndex*>& mapBlockIndex) { if (fTestNet) return NULL; BOOST_REVERSE_FOREACH(const MapCheckpoints::value_type& i, mapCheckpoints) { const uint256& hash = i.second; std::map<uint256, CBlockIndex*>::const_iterator t = mapBlockIndex.find(hash); if (t != mapBlockIndex.end()) // return t->second; return NULL; } return NULL; }
###############################################
bool CheckBlock(int nHeight, const uint256& hash)
{
if (fTestNet) return true; // Testnet has no checkpoints###############################################
이제는 사용할 수 없다. 모든 것이 작동하면 50 개의 블록을 사전 예약하고 일부 해시를 추출하여 검사 점에 넣고 이러한 기능을 다시 활성화 할 수 있다.
그게 끝이다. 끝까지 컴파일 할 필요가 없다. 컴파일 오류가 많이 발생할 수 있다.
아, 아이콘 :
#10. 코인에 대한 멋진 이미지를 찾은 다음 256x256 아이콘 / 이미지를 만든다. src / qt / res / icons에서 대체 할 5 개의 이미지가 있고 src / qt / res / images에서 1을 대체 (스플래시) 할 수 있다.
#11. 또한 Qt / 양식의 파일을 편집한다. 이 파일들은 도움 등을위한 파일이며, 멋지게 보이게하고, litecoin 것보다 코인 이름을 표시한다.
#12. 이제 편집을 위해 :
qt : abccoin에서 .pro 파일을 수정하고에서 make 프로세스를 수행한다.
https://bitcointalk.org/index.php?topic=149479.0데몬 : 시스템의 makefile 중 하나를 업데이트한다. 나의 경우에는 mingw32 쉘을 사용한다.
이제 끝이다, 짜잔, 당신은 이제 당신의 알트코인을 가지고있다!
코인을 만드는 데 보통 C언어를 많이 사용합니다.
하지만 완성도 있는 코인을 만들려면 C언어 만으로만은 힘듭니다.
파이썬도 사용하고 GO 언어, 어셈블리 등등 여러 언어들을 사용합니다.
깃허브에서 각 코인 마다 사용된 언어를 볼 수 있습니다.
유튜브에서 코인 만들기라고 치면 기본적인 코인 만드는 법을 볼 수 있습니다.
아래 주소는 비트코인 논문입니다.
TIOBE에서 선정한 2021년 2월 기준 검색어 점유율 상위 20개 프로그래밍 언어
1.C
2.Java
3.Python
4.C++
5.C#
6.Visual Basic
7.JavaScript
8.PHP
9.SQL
10.Assembly language
낮은 점유율의 언어 일수록 사용자가 없으니 학습시나 개발시 어려움이 생깁니다. 어디다 물어볼데가 없다보니 혼자서 자문자답까지 해야합니다.
우선 상위권의 언어를 배우시고 능숙하게 사용이 가능해지시면 다른 언어로 확장 하시길 추천드립니다
블록체인을 개발하기 위해서는 Go언어를 많이 사용하는 것으로 알고 있습니다.
이더리움이 Go라는 언어로 개발이 되었다고 합니다.
이더리움은 오픈소스이다보니 github에 공개가 되어 있습니다.
그렇다보니 몇몇 블록체인들이 처음부터 개발하는 것이 아니라 이더리움에서 포크해서 새로운 기능을 추가하고 수정하면서 새로운 블록체인을 만드는 것으로 알고 있습니다.