hdac 소스코드가 드디어 공개되었습니다 그러나...

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@hackyminer·
0.000 HBD
hdac 소스코드가 드디어 공개되었습니다 그러나...
오늘 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 */` 라는 커맨트를 모두 제거함... // 별것도 아닌 것 제거하는 습관은 한마디로 바보같은 짓입니다. 왜 흔적을 지울까요? 영업비밀? 상사에게 들킬까봐? 이해가 가지 않는 행동이며, 오히려 나중에 추적해서 이를 알아낸다면 출처를 의도적으로 감추려 했다는 비난을 면하기 어렵습니다.
![](https://cdn.steemitimages.com/DQmdurLuho4rSqCDwPM1S32QiYaVGQEKqwa44GGyo8GRZZW/image.png)

## 소스코드를 히스토리도 모두 공개해주세요
오픈소스에서 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 추가
👍 , , , , , , , , , , , , , ,