Skip to content

FORK: bitcore bitzeny (with node v0.10.48) for Insight Blockexplorer

cryptozeny edited this page Nov 20, 2018 · 13 revisions

포크

$ git clone https://github.com/cryptozeny/bitcore-bitzeny.git
$ cd bitcore-bitzeny

프로토콜 버젼 변경

$ git grep 'static const int PROTOCOL_VERSION ='
src/version.h:static const int PROTOCOL_VERSION = 70015;

litecoin-0.15.1 버젼은 70015 이므로 고친다. [OK]

알고리즘 변경

lib/Block.js 파일

이곳을 원래대로 util.twoSha256로 변경한다.

TODO >> 그런데 왜 알고리즘은 scrypt 인데 sha256에서 작동하는가? 라이트코인 개발자들이 그렇게 작업해 놓은걸로 추측된다.

Block.prototype.calcHash = function calcHash() {  
  var header = this.getHeader();  
 
  // return bitzeny_yescrypt.hash(header);  
  return util.twoSha256(header); 
};

일단 빌드 성공 [OK]

매직 넘버 수정

./networks.js 파일에서 magic을 찾는다.

// BitZeny Magic
magic: hex('daa5bef9'),

안즈코인 매직넘버

메인넷:		시마무라 우즈키
159	pchMessageStart[0] = 0x9f
38	pchMessageStart[1] = 0x26
59	pchMessageStart[2] = 0x3b
84	pchMessageStart[3] = 0x54

테넷:		혼다 미오
161	pchMessageStart[0] = 0xa1
84	pchMessageStart[1] = 0x54
58	pchMessageStart[2] = 0x3a
87	pchMessageStart[3] = 0x57

렉테스트: 	시부야 린 
165	pchMessageStart[0] = 0xa5
80	pchMessageStart[1] = 0x50
56	pchMessageStart[2] = 0x38
81	pchMessageStart[3] = 0x51

즉 메인넷은 9f263b54 다음과 같다.

magic: hex('9f263b54'),

어드레스버젼

./networks.js
addressVersion: 81,

이것을 48 (라이트코인) 로 바꾼다.

해시 바꾸기: 비트제니 >> 안즈코인

뒤집기:
https://unix.stackexchange.com/questions/321860/reverse-a-hexadecimal-number-in-bash

뒤집기방법:

$ echo 0005ab1f82e540826c218b634f82a99e292913303747244685d561d90bc06de5|fold -w2|tac|tr -d "\n"
e56dc00bd961d58546244737301329299ea9824f638b216c8240e5821fab0500

0005ab1f82e540826c218b634f82a99e292913303747244685d561d90bc06de5 (원본)
e56dc00bd961d58546244737301329299ea9824f638b216c8240e5821fab0500 (뒤집힘)

제네시스
BD3BE3716492DCE0CDEBF1B5D9D6E41A0D397F0FED7F8CEAF190936BB34CCCAB
뒤집기
ABCC4CB36B9390F1EA8C7FED0F7F390D1AE4D6D9B5F1EBCDE0DC926471E33BBD

머클루트
558B83412B6D2A258FC0A3BBAE504FF33AC2DD301DE6466A72A8F412866D6FAF
뒤집기
AF6F6D8612F4A8726A46E61D30DDC23AF34F50AEBBA3C08F252A6D2B41838B55

제네시스블럭 연관변수 수정

안즈코인

genesis = CreateGenesisBlock(`1514764800`, `3033548`, `0x1e0ffff0`, 1, 50 * COIN);  
        consensus.hashGenesisBlock = genesis.GetHash();  
        assert(consensus.hashGenesisBlock == uint256S("`0xbd3be3716492dce0cdebf1b5d9d6e41a0d397f0fed7f8ceaf190936bb34cccab`"));  
        assert(genesis.hashMerkleRoot == uint256S("`0x558b83412b6d2a258fc0a3bbae504ff33ac2dd301de6466a72a8f412866d6faf`"));  

메인넷 수정결과

exports.livenet = {  
  name: 'livenet',  
  // magic: hex('daa5bef9'),  
  magic: hex('`9f263b54`'),  
  // addressVersion: 81,  
  addressVersion: `48`,  
  privKeyVersion: 128,  
  P2SHVersion: 5,  
  hkeyPublicVersion: 0x0488b21e,  
  hkeyPrivateVersion: 0x0488ade4,  
  genesisBlock: {  
    // hash: hex('CEF5B89F4EBF38A73CD440439EDACA4AFA7C7AD82BE281473B9E5EE5F7090000'),  
    hash: hex('`ABCC4CB36B9390F1EA8C7FED0F7F390D1AE4D6D9B5F1EBCDE0DC926471E33BBD`'),  
    // merkle_root: hex('D2A4DB3BCE9F2044558211B401DC45C72806A9FFC7F8A3DF9C3A58B491E526A6'),  
    merkle_root: hex('`AF6F6D8612F4A8726A46E61D30DDC23AF34F50AEBBA3C08F252A6D2B41838B55`'),  
    height: 0,  
    // nonce: 369858,  
    nonce: `3033548`,  
    version: 1,  
    prev_hash: buffertools.fill(new Buffer(32), 0),  
    // timestamp: 1415384723,  
    timestamp: `1514764800`,  
    // bits: 507510783,  // 0x1e3fffff  
    bits: `504365040`,  // 0x1e3fffff(제니) >> 0x1e0ffff0(안즈)  
  },  
  dnsSeeds: [  
  ],  
  // defaultClientPort: 9253  
  defaultClientPort: `9333`  
};