Browse Source

zcash: update address, viewkey prefixes

MMGen 7 years ago
parent
commit
33fc67e241
3 changed files with 9 additions and 7 deletions
  1. 2 1
      mmgen/addr.py
  2. 6 6
      mmgen/protocol.py
  3. 1 0
      test/gentest.py

+ 2 - 1
mmgen/addr.py

@@ -92,6 +92,7 @@ class AddrGeneratorEthereum(AddrGenerator):
 class AddrGeneratorZcashZ(AddrGenerator):
 
 	addr_width = 95
+	vk_width = 97
 
 	def zhash256(self,s,t):
 		s = map(ord,s+'\0'*32)
@@ -121,7 +122,7 @@ class AddrGeneratorZcashZ(AddrGenerator):
 		vk[63] |= 0x40
 		from mmgen.protocol import _b58chk_encode
 		ret = _b58chk_encode(g.proto.addr_ver_num['viewkey'][0] + hexlify(''.join(map(chr,vk))))
-		assert len(ret) == self.addr_width,'Invalid Zcash view key length'
+		assert len(ret) == self.vk_width,'Invalid Zcash view key length'
 		return ZcashViewKey(ret)
 
 	def to_segwit_redeem_script(self,pubhex):

+ 6 - 6
mmgen/protocol.py

@@ -317,7 +317,7 @@ class ZcashProtocol(BitcoinProtocolAddrgen):
 		'p2pkh':   ('1cb8','t1'),
 		'p2sh':    ('1cbd','t3'),
 		'zcash_z': ('169a','zc'),
-		'viewkey': ('0b1c','V') }
+		'viewkey': ('a8abd3','ZiVK') }
 	wif_ver_num  = { 'std': '80', 'zcash_z': 'ab36' }
 	mmtypes      = ('L','C','Z')
 	dfl_mmtype   = 'L'
@@ -340,12 +340,12 @@ class ZcashProtocol(BitcoinProtocolAddrgen):
 			raise ValueError,'{}: incorrect pubkey_hash length'.format(hl)
 
 class ZcashTestnetProtocol(ZcashProtocol):
-	wif_ver_num  = { 'std': '??', 'zcash_z': 'ac08' }
+	wif_ver_num  = { 'std': 'ef', 'zcash_z': 'ac08' }
 	addr_ver_num = {
-		'p2pkh': ('??','t1'),
-		'p2sh':  ('??','t3'),
-		'zcash_z': ('16b6','??'),
-		'viewkey': ('0b2a','??') }
+		'p2pkh':   ('1d25','tm'),
+		'p2sh':    ('1cba','t2'),
+		'zcash_z': ('16b6','zt'),
+		'viewkey': ('a8ac0c','ZiVt') }
 
 # https://github.com/monero-project/monero/blob/master/src/cryptonote_config.h
 class MoneroProtocol(DummyWIF,BitcoinProtocolAddrgen):

+ 1 - 0
test/gentest.py

@@ -180,6 +180,7 @@ def compare_test():
 		if b == 'ext':
 			if addr_type.name == 'zcash_z':
 				b_wif,b_addr,b_vk = ext_sec2addr(sec)
+				vmsg_r('\nvkey: {}'.format(b_vk))
 				if b_vk != a_vk:
 					match_error(sec,sec.wif,a_vk,b_vk,a,b)
 			else: