hdac 소스코드가 드디어 공개되었습니다 그러나...
kr·@hackyminer·
0.000 HBDhdac 소스코드가 드디어 공개되었습니다 그러나...
오늘 hdac 블록체인 데몬 소스코드가 공개되었습니다 https://github.com/Hdactech/hdac hdac 소스코드는 multichain 소스코드를 기반으로 고쳐진 것이 거의 확실합니다. https://github.com/MultiChain/multichain 저같은 경우는 `git diff`를 통해서 훝어보고 나서 이 결론에 도달하였는데, 센스있는 사용자라면 깃허브에 공개된 라이선스 상단의 "2014-2017 Coin Sciences"를 구글로 검색해 보셨다면 원본 소스의 출처를 금방 찾으셨을 것입니다. 사실 소스 공개시점 하루 전인 어제, 몇가지 키워드를 조합해서 검색해보니 `multichain`이 검색 상단에 뜨더군요. (`~/.hdac/hdac/params.dat` 의 내용을 참고로 `"chain-protocol" "chain-description" github` 단어 조합으로 구글 검색. 상단에 노출됨) 이를 의심했었는데 맞았네요. multichain 소스코드는 당연히도 비트코인 소스코드를 기반으로 하며, 비트코인 소스코드 구버전 기반입니다. (비트코인 0.10.x) `git diff` 명령의 고쳐진 부분을 훝어보면 multichain이 그 소스코드 기반인 것이 더욱 분명해집니다. - 일부 multichain에서 남긴 커맨트 제거 // 커맨트 제거도 오픈소스 개발자라면 함부로 하지 않습니다. MCH 이라는 짧은 커맨트를 모두 삭제했네요. - copyright은 그대로 두었습니다. Hdac을 copyright에 추가한 형태로 고쳤습니다. - multichain 이라는 이름이 붙은 파일의 상당수는 hdac으로 바뀌었습니다. bitcoin 명칭 붙은 파일 명은 대부분 그대로 두었습니다. ## hdac 소스코드를 얼마나 고쳤을까? 블로그에 종종올린 git을 이용해 diff를 뜨는 방식으로 얼마나 바뀌었는지 테스트해보았습니다. 그 결과 multichain의 master 브랜치의 `0a428c7f74e6` 커밋이 가장 근접하며 (`0a428c7f74e6` == `master~1`) `$ git diff 0a428c7f74e6 |filterdiff -x "*.patch" -x "*.rc" -x "*README*" -x "*.sh" -x "*.m4" -x "*config.*"|diffstat` ~~~~ .gitignore | 11 LICENSE | 674 +++++ Makefile.am | 48 configure.ac | 25 depends/Makefile | 136 - doc/RUN.md | 183 + src/Makefile.am | 216 - src/chain/chain.h | 40 src/chain/epow.cpp | 991 ++++++++ src/chain/epow.h | 53 src/chain/pow.cpp | 19 src/chain/txmempool.cpp | 22 src/chain/txmempool.h | 7 src/chainparams/buildgenesis.cpp | 107 src/chainparams/chainparams.cpp | 193 - src/chainparams/chainparams.h | 13 src/chainparams/chainparamsbase.cpp | 28 src/chainparams/chainparamsbase.h | 8 src/chainparams/globals.h | 14 src/chainparams/hdac/paramlist.h | 308 ++ src/chainparams/hdac/params.cpp | 1646 ++++++++++++++ src/chainparams/hdac/params.h | 155 + src/chainparams/hdac/state.h | 317 ++ src/chainparams/multichain/paramlist.h | 323 ++ src/chainparams/multichain/params.cpp | 1924 ++++++++++++++++ src/chainparams/multichain/params.h | 154 + src/chainparams/multichain/state.h | 328 ++ src/chainparams/paramlist.h | 306 -- src/chainparams/params.cpp | 1962 ---------------- src/chainparams/params.h | 154 - src/chainparams/state.h | 271 -- src/core/init-cold.cpp | 241 -- src/core/init.cpp | 630 +++-- src/core/init.h | 4 src/core/main.cpp | 1937 ++++++---------- src/core/main.h | 32 src/crypto/Lyra2RE/Lyra2.c | 382 +++ src/crypto/Lyra2RE/Lyra2.h | 44 src/crypto/Lyra2RE/Lyra2RE.c | 110 src/crypto/Lyra2RE/Lyra2RE.h | 15 src/crypto/Lyra2RE/Sponge.c | 745 ++++++ src/crypto/Lyra2RE/Sponge.h | 108 src/crypto/Lyra2RE/blake.c | 1120 +++++++++ src/crypto/Lyra2RE/bmw.c | 958 ++++++++ src/crypto/Lyra2RE/cubehash.c | 718 ++++++ src/crypto/Lyra2RE/groestl.c | 3119 ++++++++++++++++++++++++++ src/crypto/Lyra2RE/keccak.c | 1824 +++++++++++++++ src/crypto/Lyra2RE/skein.c | 1254 ++++++++++ src/crypto/Lyra2RE/sph_blake.h | 327 ++ src/crypto/Lyra2RE/sph_bmw.h | 321 ++ src/crypto/Lyra2RE/sph_cubehash.h | 286 ++ src/crypto/Lyra2RE/sph_groestl.h | 329 ++ src/crypto/Lyra2RE/sph_keccak.h | 293 ++ src/crypto/Lyra2RE/sph_skein.h | 298 ++ src/crypto/Lyra2RE/sph_types.h | 1976 ++++++++++++++++ src/crypto/ctaes/COPYING | 21 src/crypto/ctaes/bench.c | 170 + src/crypto/ctaes/ctaes.c | 556 ++++ src/crypto/ctaes/ctaes.h | 41 src/crypto/ctaes/test.c | 110 src/crypto/scrypt-sse2.cpp | 136 + src/crypto/scrypt.cpp | 329 ++ src/crypto/scrypt.h | 45 src/entities/asset.cpp | 128 - src/entities/asset.h | 6 src/hdac/hdac-cli.cpp | 513 ++++ src/hdac/hdac-util.cpp | 191 + src/hdac/hdac.h | 25 src/hdac/hdacd-cold.cpp | 360 +++ src/hdac/hdacd.cpp | 401 +++ src/json/json_spirit_ubjson.cpp | 12 src/json/json_spirit_ubjson.h | 27 src/json/json_spirit_writer_template.h | 84 src/keys/pubkey.cpp | 1 src/leveldb/build_detect_platform | 2 src/miner/miner.cpp | 883 +++---- src/miner/miner.h | 10 src/multichain/multichain-cli.cpp | 51 src/multichain/multichain-util.cpp | 30 src/multichain/multichaind-cold.cpp | 84 src/multichain/multichaind.cpp | 116 src/net/net.cpp | 211 - src/net/net.h | 12 src/net/netbase.cpp | 4 src/permissions/permission.cpp | 156 - src/permissions/permission.h | 10 src/primitives/block.cpp | 33 src/primitives/block.h | 12 src/primitives/transaction.cpp | 2 src/primitives/transaction.h | 35 src/protocol/handshake.cpp | 536 ---- src/protocol/hdac/handshake.cpp | 537 ++++ src/protocol/hdac/hdacblock.cpp | 632 +++++ src/protocol/hdac/hdacscript.cpp | 2158 ++++++++++++++++++ src/protocol/hdac/hdacscript.h | 102 src/protocol/hdac/hdactx.cpp | 3100 ++++++++++++++++++++++++++ src/protocol/multichain/handshake.cpp | 536 ++++ src/protocol/multichain/multichainblock.cpp | 678 +++++ src/protocol/multichain/multichainscript.cpp | 2182 ++++++++++++++++++ src/protocol/multichain/multichainscript.h | 100 src/protocol/multichain/multichaintx.cpp | 3133 ++++++++++++++++++++++++++ src/protocol/multichainblock.cpp | 625 ----- src/protocol/multichainscript.cpp | 2382 -------------------- src/protocol/multichainscript.h | 113 src/protocol/multichaintx.cpp | 3151 --------------------------- src/protocol/netprotocol.cpp | 3 src/rpc/rpcassets.cpp | 558 +--- src/rpc/rpcblockchain.cpp | 137 - src/rpc/rpcclient.cpp | 19 src/rpc/rpcdump.cpp | 15 src/rpc/rpcexchange.cpp | 81 src/rpc/rpchelp.cpp | 717 ++---- src/rpc/rpclist-cold.cpp | 2 src/rpc/rpclist.cpp | 24 src/rpc/rpcmining.cpp | 105 src/rpc/rpcmisc.cpp | 167 - src/rpc/rpcnet.cpp | 132 - src/rpc/rpcpermissions.cpp | 25 src/rpc/rpcprotocol.cpp | 12 src/rpc/rpcrawdata.cpp | 1435 ------------ src/rpc/rpcrawtransaction.cpp | 342 +- src/rpc/rpcserver.cpp | 247 +- src/rpc/rpcserver.h | 16 src/rpc/rpcstreams.cpp | 755 ------ src/rpc/rpcupgrades.cpp | 78 src/rpc/rpcutils.cpp | 825 +------ src/rpc/rpcutils.h | 56 src/rpc/rpcwallet.cpp | 287 +- src/rpc/rpcwallet.h | 13 src/rpc/rpcwalletsend.cpp | 97 src/rpc/rpcwallettxs.cpp | 106 src/rpc/rpcwalletutils.cpp | 222 - src/script/interpreter.cpp | 138 - src/script/interpreter.h | 9 src/script/script.cpp | 22 src/script/script.h | 19 src/script/sigcache.cpp | 2 src/script/sign.cpp | 24 src/script/standard.cpp | 416 +-- src/script/standard.h | 2 src/secp256k1/build-aux/compile | 347 ++ src/secp256k1/build-aux/depcomp | 791 ++++++ src/secp256k1/build-aux/install-sh | 508 ++++ src/secp256k1/build-aux/missing | 215 + src/secp256k1/build-aux/test-driver | 148 + src/storage/addrman.cpp | 10 src/storage/addrman.h | 3 src/storage/coins.cpp | 17 src/storage/txdb.cpp | 7 src/storage/txdb.h | 6 src/structs/amount.cpp | 6 src/structs/amount.h | 2 src/structs/base58.cpp | 39 src/utils/core_read.cpp | 2 src/utils/dbwrapper.cpp | 7 src/utils/dbwrapper.h | 6 src/utils/declare.h | 7 src/utils/define.h | 6 src/utils/systemdependent.cpp | 4 src/utils/timedata.cpp | 4 src/utils/tools.cpp | 6 src/utils/util.cpp | 127 - src/utils/util.h | 3 src/utils/utility.cpp | 13 src/utils/utilmoneystr.cpp | 3 src/utils/utilparse.cpp | 128 - src/utils/utilparse.h | 20 src/utils/utilstrencodings.cpp | 4 src/utils/utilstrencodings.h | 2 src/utils/utilwrapper.cpp | 114 src/version/clientversion.h | 3 src/version/hdacversion.h | 42 src/version/version.cpp | 123 - src/version/version.h | 27 src/wallet/db.cpp | 3 src/wallet/wallet.cpp | 351 --- src/wallet/wallet.h | 110 src/wallet/wallet_ismine.cpp | 6 src/wallet/walletcoins.cpp | 252 -- src/wallet/wallettxdb.cpp | 37 src/wallet/wallettxdb.h | 23 src/wallet/wallettxs.cpp | 207 - src/wallet/wallettxs.h | 10 183 files changed, 44179 insertions(+), 19157 deletions(-) ~~~~ - `README` `/ *.sh` 스크립트, `*.rc` 리소스 등등의 파일은 제외시켰습니다. - 상당수 파일은 copyright에서 hdac를 추가한 것입니다. - `src/crypto/Lyra2RE` 소스는 통채로 추가된 것 - `"\*/rpc/\*", "\*/secp256k1/\*", "\*src/utils/\*", "\*src/wallet/\*", "\*script/\*", "\*/crypto/\*"` 제외하면 총 변경 파일 91개, 183개에서 절반으로 줄어듭니다. - `91 files changed, 24167 insertions(+), 12965 deletions(-)` ## 제발 히스토리 날리지 맙시다. 조금 자극적으로 제목을 달았습니다. 사실 이 문제는 별것 아닌 것으로 생각할 수는 있지만, 오픈소스 결벽증에 있는 개발자라면 정말 참기 힘든 부분입니다. - `/* MCH */` 라는 커맨트를 모두 제거함... // 별것도 아닌 것 제거하는 습관은 한마디로 바보같은 짓입니다. 왜 흔적을 지울까요? 영업비밀? 상사에게 들킬까봐? 이해가 가지 않는 행동이며, 오히려 나중에 추적해서 이를 알아낸다면 출처를 의도적으로 감추려 했다는 비난을 면하기 어렵습니다.  ## 소스코드를 히스토리도 모두 공개해주세요 오픈소스에서 git의 탄생과 더불어 github의 등장은 가히 혁명이었습니다. git은 모든 소스를 긁어갈 수 있기때문에 일부 개발자는 오히려 거부감을 가지기도 했고, git은 포크를 오히려 장려하기때문에 개발자가 소수인 경우는 오히려 git대신에 CVS나 svn을 고수하기도 했죠. git과 같은 버전관리 시스템을 잘 활용하기 위해서는 히스토리가 그대로 고스란히 남아있어야 합니다. 히스토리는 어떤 개발자가 실수를 하는지, 어떤 개발자가 제대로 고쳤는지를 그대로 까발리기때문에 개발자는 발가벗겨지는 기분을 느낄 수도 있습니다. 그러나 더 빨리 문제점을 찾을 수 있게 해주고, 더 빠르게 고쳐지게 될 가능성이 높아집니다. 내부적으로 hdac 소스코드 히스토리를 모두 가지고 있는 레포지터리를 별도로 운용하고 있다면 그렇게 하지 마시고 모든 히스토리를 가지고 있는 레포지터리를 공개해주시기 바랍니다. 그래야만 소스추적이 더욱 쉽고, 문제점이 발견되었을 때 그 원인이 무엇인지 더 찾기 쉽습니다. ## 살려낸 히스토리 다음은 소스 히스토리 추적을 쉽게 하기 위해 *급하게 수정해서* 올린 소스입니다. - 따라서 hdac개발팀이 수정한 부분과 multichain개발자가 수정한 부분이 섞여있는 부분이 있을 수 있습니다. https://github.com/OpenCommunityCoin/hdac/commits/master-hdac --------- 이상 간단한 `git diff`를 사용한 변경 윤곽을 살펴보았습니다. 댓글 및 추천은 제가 힘이 됩니다~ ※ 변경사항 - 5/24 오후 최초 작성 - 5/26 - 히스토리 급하게 되살린 repo 추가