Open jeremyandrews opened 5 years ago
The design of bech32 should be such that it's easy to turn a bitcoin bech32 address to a litecoin one. Can you give me an example of a bech32 segwit address that is known to be valid in Litecoin (or a reference)?
I opened Litecoin-Qt and asked for a new testnet bech32 address from the UI:
# ./litecoin-0.16.3/bin/litecoin-cli validateaddress tltc1qd9hf4rh9zlrdxqwvqwa88nq67pzz0agstxmql6
{
"isvalid": true,
"address": "tltc1qd9hf4rh9zlrdxqwvqwa88nq67pzz0agstxmql6",
"scriptPubKey": "0014696e9a8ee517c6d301cc03ba73cc1af04427f510",
"ismine": false,
"iswatchonly": false,
"isscript": false,
"iswitness": true,
"witness_version": 0,
"witness_program": "696e9a8ee517c6d301cc03ba73cc1af04427f510"
}
main network human-readable part: https://github.com/litecoin-project/litecoin/blob/master/src/chainparams.cpp#L142
testnet human-readable part: https://github.com/litecoin-project/litecoin/blob/master/src/chainparams.cpp#L247
Fixing the hrp seems to be all that's required. Patching the latest release:
diff --git a/pycoin/networks/all.py b/pycoin/networks/all.py
index 226672d..e245188 100644
--- a/pycoin/networks/all.py
+++ b/pycoin/networks/all.py
@@ -39,7 +39,7 @@ BUILT_IN_NETWORKS = [
b'\xb0', b'\x30', b'\5',
h2b('019d9cfe'), h2b('019da462'),
tx=BitcoinTx, block=BitcoinBlock,
- bech32_hrp='lc'
+ bech32_hrp='ltc'
),
# LTC litecoin testnet : ttpv/ttub
@@ -48,7 +48,7 @@ BUILT_IN_NETWORKS = [
b'\xef', b'\x6f', b'\xc4',
h2b('0436ef7d'), h2b('0436f6e1'),
tx=BitcoinTx, block=BitcoinBlock,
- bech32_hrp='tl'
+ bech32_hrp='tltc'
)
]
And then use ku
to generate a new address again:
# ku -n XLT create
input : create
network : Litecoin testnet
netcode : XLT
wallet key : ttpv96BtqegdxXceQXFhoStBaKzFjvEog4jEPK4kVPHauWHw848DrEZZhNBdEhFo2f\
kGNzeFTc4MJSq7EU5mXqN3d6T5B7jhcuW2vsHZk1ExZBn
public version : ttub4XNESS7BCg9c2PxY44NZeupUBUvzkKHtTqAnAN3sqh5XiRKJB9bzhyHtV7X3DR\
2ZxUZPs186C4MuBFtMHYu6ELCwwPRGoP9kX9FJ5ai1wB9
tree depth : 0
fingerprint : 3ba90ead
parent f'print : 00000000
child index : 0
chain code : 62d462eaa55673c34dd229f00a461998696ae4bf9ecab91140a5af2e42c320c3
private key : yes
secret exponent : 37845038028144807838782098839695447733144991305567581675650470884727922533025
hex : 53ab884e451ad794918c83d7a79c24a1a89b7fe6b97b81abff4e9f8bcac2a2a1
wif : cQPLynCWKZvrtdCamfFo9st6rVdxccZg3eRsxL4iqTwzjHBQcqMN
uncompressed : 92DmQHasbZqTFsLqtMT1VHxz4WbeyZ5ENtyqhdVV4H5JcVEy263
public pair x : 115612213902909738356147523281262529626938256905006807182595770100463653277001
public pair y : 39383233902995793223829679229674137839833719027401491347391704629409519538459
x as hex : ff9a31b5085a2f9435a4a47d2d6ad60c10f63ff9246b76eceb8077c52b96cd49
y as hex : 57121ed645002a41e9961cbeb69c4dce44b3d9c7282e513fc2acf8d65450911b
y parity : odd
key pair as sec : 03ff9a31b5085a2f9435a4a47d2d6ad60c10f63ff9246b76eceb8077c52b96cd49
uncompressed : 04ff9a31b5085a2f9435a4a47d2d6ad60c10f63ff9246b76eceb8077c52b96cd49\
57121ed645002a41e9961cbeb69c4dce44b3d9c7282e513fc2acf8d65450911b
hash160 : 3ba90ead2430d08638e75e659162ee4aa4da1184
uncompressed : 221c9f818f5f5df5f9908f05b2d3d3f803def4d7
Litecoin address : mkxQggTnD6BGF6xxBkaquRR4N3LiHrD9Ra
Litecoin address uncompressed : midKZLnyvAZnCQSjy2iD2cDNi3qZ1VjuMQ
Litecoin segwit address : tltc1q8w5satfyxrggvw88tejezchwf2jd5yvynnhs6z
p2sh segwit : 2N7o2145iQQtQkf8xriu756SVPdmPTPKWAA
corresponding p2sh script : 00143ba90ead2430d08638e75e659162ee4aa4da1184
This bech32 address validates:
# ./litecoin-0.16.3/bin/litecoin-cli validateaddress tltc1q8w5satfyxrggvw88tejezchwf2jd5yvynnhs6z
{
"isvalid": true,
"address": "tltc1q8w5satfyxrggvw88tejezchwf2jd5yvynnhs6z",
"scriptPubKey": "00143ba90ead2430d08638e75e659162ee4aa4da1184",
"ismine": false,
"iswatchonly": false,
"isscript": false,
"iswitness": true,
"witness_version": 0,
"witness_program": "3ba90ead2430d08638e75e659162ee4aa4da1184"
}
Also experiencing same issue, would be great if PR could be merged in, the fix is really simple. Thank you.
Generating addresses with
ku
or the underlying code does not seem to produce valid segwit addresses. For example, with Litecoins:The
Litecoin address
ofLToeNsqvhD5uC6irm7Pd9QkSUF2HpiHvtH
validates fine:The
Litecoin segwit address
oflc1qcsh3058zcn2rdnn85a9kv7jefpm36zw6udaza9
does not:And while the
p2sh segwit
address validates, litecoin-cli claims it's not segwit: