Skip to content

Commit 4f3dd77

Browse files
committed
add kylacoin and lyncoin
1 parent f3013de commit 4f3dd77

File tree

7 files changed

+148
-2
lines changed

7 files changed

+148
-2
lines changed

electrumx/lib/coins.py

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
from typing import Sequence, Tuple
3939

4040
import electrumx.lib.util as util
41-
from electrumx.lib.hash import Base58, double_sha256, hash_to_hex_str
41+
from electrumx.lib.hash import Base58, double_sha256, double_sha3_256, hash_to_hex_str
4242
from electrumx.lib.hash import HASHX_LEN, hex_str_to_hash
4343
from electrumx.lib.script import (_match_ops, Script, ScriptError,
4444
ScriptPubKey, OpCodes)
@@ -4239,3 +4239,68 @@ class FerriteTestnet(Ferrite):
42394239
'enode2.ferritecoin.org s t',
42404240
'enode3.ferritecoin.org s t',
42414241
]
4242+
4243+
4244+
class Kylacoin(Coin):
4245+
NAME = "Kylacoin"
4246+
SHORTNAME = "KCN"
4247+
NET = "mainnet"
4248+
VALUE_PER_COIN = 1000000000000
4249+
DEFAULT_MAX_SEND = 8000000
4250+
XPUB_VERBYTES = bytes.fromhex("038f332e")
4251+
XPRV_VERBYTES = bytes.fromhex("038f2ef4")
4252+
P2PKH_VERBYTE = bytes.fromhex("1c")
4253+
P2SH_VERBYTES = bytes.fromhex("1a")
4254+
WIF_BYTE = bytes.fromhex("41")
4255+
GENESIS_HASH = ('0000000091ddc5a0b9f0ed098a4db06e'
4256+
'e9bc286a104f092f4fb476eb9364b7c9')
4257+
DESERIALIZER = lib_tx.DeserializerKylacoin
4258+
ESTIMATE_FEE = 0.0001
4259+
RELAY_FEE = 0.0001
4260+
TX_COUNT = 2237124
4261+
TX_COUNT_HEIGHT = 1463512
4262+
TX_PER_BLOCK = 1
4263+
RPC_PORT = 5110
4264+
REORG_LIMIT = 800
4265+
PEERS = [
4266+
'electrum.kcnxp.com t51001 s51002',
4267+
]
4268+
4269+
@classmethod
4270+
def header_hash(cls, header):
4271+
'''Given a header return hash'''
4272+
return double_sha3_256(header)
4273+
4274+
4275+
class Lyncoin(AuxPowMixin, Coin):
4276+
NAME = "Lyncoin"
4277+
SHORTNAME = "LCN"
4278+
NET = "mainnet"
4279+
VALUE_PER_COIN = 100000000
4280+
DEFAULT_MAX_SEND = 8000000
4281+
XPUB_VERBYTES = bytes.fromhex("019c354f")
4282+
XPRV_VERBYTES = bytes.fromhex("019c3115")
4283+
P2PKH_VERBYTE = bytes.fromhex("ea")
4284+
P2SH_VERBYTES = bytes.fromhex("37")
4285+
WIF_BYTE = bytes.fromhex("7e")
4286+
GENESIS_HASH = ('000000002b8761c63862f5047afb9ac5'
4287+
'fdd1c67e87cd376c387628bc772bb39d')
4288+
DESERIALIZER = lib_tx.DeserializerLyncoin
4289+
ESTIMATE_FEE = 1
4290+
RELAY_FEE = 1
4291+
TX_COUNT = 906114
4292+
TX_COUNT_HEIGHT = 555605
4293+
TX_PER_BLOCK = 1
4294+
RPC_PORT = 5053
4295+
REORG_LIMIT = 800
4296+
PEERS = [
4297+
'electrum.lcnxp.com t52001 s52002',
4298+
]
4299+
4300+
@classmethod
4301+
def header_hash(cls, header):
4302+
'''Given a header return hash'''
4303+
version = int.from_bytes(header[:4], 'little')
4304+
if version & 0x8000:
4305+
return double_sha3_256(header[:cls.BASIC_HEADER_SIZE])
4306+
return double_sha256(header[:cls.BASIC_HEADER_SIZE])

electrumx/lib/hash.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from electrumx.lib.util import bytes_to_int, int_to_bytes, hex_to_bytes
3333

3434
_sha256 = hashlib.sha256
35+
_sha3_256 = hashlib.sha3_256
3536
_new_hash = hashlib.new
3637
_hmac_digest = hmac.digest
3738
HASHX_LEN = 11
@@ -47,6 +48,16 @@ def double_sha256(x):
4748
return sha256(sha256(x))
4849

4950

51+
def sha3_256(x):
52+
'''Simple wrapper of hashlib sha3-256.'''
53+
return _sha3_256(x).digest()
54+
55+
56+
def double_sha3_256(x):
57+
'''SHA3-256 of SHA3-256.'''
58+
return sha3_256(sha3_256(x))
59+
60+
5061
def hash_to_hex_str(x):
5162
'''Convert a big-endian binary hash to displayed hex string.
5263

electrumx/lib/tx.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
from hashlib import blake2s
3232
from typing import Sequence
3333

34-
from electrumx.lib.hash import sha256, double_sha256, hash_to_hex_str
34+
from electrumx.lib.hash import sha256, double_sha256, double_sha3_256, hash_to_hex_str
3535
from electrumx.lib.script import OpCodes
3636
from electrumx.lib.util import (
3737
unpack_le_int32_from, unpack_le_int64_from, unpack_le_uint16_from,
@@ -1381,3 +1381,17 @@ def read_header(self, static_header_size):
13811381
header_end = self.cursor
13821382
self.cursor = start
13831383
return self._read_nbytes(header_end - start)
1384+
1385+
1386+
class DeserializerKylacoin(DeserializerSegWit):
1387+
TX_HASH_FN = staticmethod(double_sha3_256)
1388+
1389+
1390+
class DeserializerLyncoin(DeserializerSegWit, DeserializerAuxPow):
1391+
1392+
@staticmethod
1393+
def TX_HASH_FN(tx):
1394+
version = int.from_bytes(tx[:4], 'little')
1395+
if version == 8:
1396+
return double_sha3_256(tx)
1397+
return double_sha256(tx)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"hash": "000000000002186060cc90fe68881679e92fe2e35b0d9cdbbf750a2fd4e4cb13",
3+
"size": 308,
4+
"height": 1000000,
5+
"merkleroot": "98eee48ddcd0f2a938cc374af98b7a8584fa179b7a951b4b5763b8b4e4a98291",
6+
"tx": [
7+
"98eee48ddcd0f2a938cc374af98b7a8584fa179b7a951b4b5763b8b4e4a98291"
8+
],
9+
"time": 1709655186,
10+
"nonce": 13617342,
11+
"bits": "1b02a597",
12+
"previousblockhash": "000000000001526ac064bb157a19bdc04371c2483d2f6bd542ae1ab4a3cd66a8",
13+
"block": "00000020a866cda3b41aae42d56b2f3d48c27143c0bd197a15bb64c06a520100000000009182a9e4b4b863574b1b957a9b17fa84857a8bf94a37cc38a9f2d0dc8de4ee989244e76597a5021bbec8cf0001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff1c0340420f049244e76500f0003497ff070000095669706f722e6e657400000000030000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90065cd1d000000001600143635552e61f1c1e2b5e7f86e25ecf921f0fff973008d380c010000001976a914df3a6bf396ad1f5a419f10886477db3be3cdb0c788ac0120000000000000000000000000000000000000000000000000000000000000000000000000"
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"hash": "ed4d19d71e785da21b3bf2127175e8d7be68aab8143e6ae70637ca49f5cdc0dd",
3+
"size": 318,
4+
"height": 1200000,
5+
"merkleroot": "42f63e62a0c18c390f649c864267b9e5958176d03395534e54aa92f135ccb71f",
6+
"tx": [
7+
"42f63e62a0c18c390f649c864267b9e5958176d03395534e54aa92f135ccb71f"
8+
],
9+
"time": 1721606421,
10+
"nonce": 2363,
11+
"bits": "1d29d9f3",
12+
"previousblockhash": "7b92e3608d178eab8b1778374cf9380f7834cd54fdfbae0aa0291a05eddeb854",
13+
"block": "0080002054b8deed051a29a00aaefbfd54cd34780f38f94c3778178bab8e178d60e3927b1fb7cc35f192aa544e539533d0768195e5b96742869c640f398cc1a0623ef64215a19d66f3d9291d3b09000001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff2903804f120416a19d66110000001b1af18200cccccccccccccccccc0d2f6e6f64655374726174756d2f00000000030065cd1d000000001600143635552e61f1c1e2b5e7f86e25ecf921f0fff973008d380c01000000160014c5d660290e2b7151d0f7c650dd4eb28072ed48bb0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000"
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"hash": "fcd4d137334aedad9c8e821d4c09238b16cdc30a8e3d4f53c81922120f89f03f",
3+
"size": 1024,
4+
"height": 250000,
5+
"merkleroot": "59a4f0659dc94926e8f6aec5bc99212fc29627001dde569dea77cc44e3230e50",
6+
"tx": [
7+
"59a4f0659dc94926e8f6aec5bc99212fc29627001dde569dea77cc44e3230e50"
8+
],
9+
"time": 1720972424,
10+
"nonce": 0,
11+
"bits": "183b8a82",
12+
"previousblockhash": "f7cfeb94096b009fadb48b2fb575f5e4c20231b61ca32330eaf72644dcd32f0d",
13+
"block": "04010d0b0d2fd3dc4426f7ea3023a31cb63102c2e4f575b52f8bb4ad9f006b0994ebcff7500e23e344cc77ea9d56de1d002796c22f2199bcc5aef6e82649c99d65f0a45988f49366828a3b180000000001000000010000000000000000000000000000000000000000000000000000000000000000ffffffff5403e0090d042bf5936608fabe6d6d5437e041484859563f514a6e623a58ce0223e987f6ad4e79544e0dd03cece6f9000100000000000003e589fac63f2d004802132f4d696e696e672d44757463682f2d3130333700000000018dd0a012000000001976a914a24e2b67689c3753983d3b408bc7690d31b1b74d88ac00000000000000000000000000000000000000000000000000000000000000000000000006999a09bf39f98c6ff908719a32daa151d08f0107b85aba7b62a284384b6d0209c4e0f5d877d4f89430219ed9f10707cdab0b45b48eea2c10669cc90994e3ce0c204eb3239d3878f8a743189468950aaf1e7e423b14b426622a0ed49acfd48d6554ab0d4e330645dc4261644a700654b1bddfc3607f5f8dea8e3c768dd442f469008b193e7c9e62628c4a54a6b39adbe8281bbf1b5446643d4a6ce25b201aeb958a898b40df5357db9d8fca7a42d2707df1edabef3548809c809df725dcef468e00000000080000000000000000000000000000000000000000000000000000000000000000e2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf97d24db2bfa41474bfb2f877d688fac5faa5e10a2808cf9de307370b93352e54894857d3e08918f70395d9206410fbfa942f1a889aa5ab8188ec33c2f6e207dc73e83887992b04d582a613b22c8e2edeeeaeae1bb0d0c367197730412cba999741fa34e5af80f27d8014db5da00386812ae502b71aaa659db3f0272d52dff8819e5f44416174e65543977d99c0543adb6750a0eb20839df2c26d89414668ca185d3f4341264c3b3923f31c2a36c81dedd7e77e3b0d1e4ba7c34c93b86b58fd94d0700000000000020ca72bb7f46ef55a13c48ae3cf15bd375964dc17d1f5aad0100000000000000007fb737322cc8ef15f6d0bdba6d849c862b2870bd1f17597dab99a84c1c42aded2bf59366f94f0218494148a901010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050390d00300ffffffff03bc3a7deb670100001976a914822819cee971165c94bd2bfb33cc0323e0b58d8788acbf94b8fd27000000160014e278645407a9c322b0becef0b31762f32ec03a660000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000"
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"hash": "ce893f8b5ae49147388ca861c639389f168e4c2f1e7e2c64a626de1fb2800e3d",
3+
"size": 679,
4+
"height": 270000,
5+
"merkleroot": "40db3174838699d5f729244a4c762ff714d8d846bc2a990214f44dfe37005b52",
6+
"tx": [
7+
"40db3174838699d5f729244a4c762ff714d8d846bc2a990214f44dfe37005b52"
8+
],
9+
"time": 1722311594,
10+
"nonce": 0,
11+
"bits": "1d38cf5b",
12+
"previousblockhash": "71784cfaf36f9ffdcf25eca7f165b82b071494e3c8eb080174b08e11ef8f4a77",
13+
"block": "04810d0b774a8fef118eb0740108ebc8e39414072bb865f1a7ec25cffd9f6ff3fa4c7871525b0037fe4df41402992abc46d8d814f72f764c4a2429f7d59986837431db40aa63a8665bcf381d0000000008000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4303467a122dfa08656d6de4119dfb520882b11eecea2ada7685e3fedb4dda076c42d69bed34f0876a2f50020000000000000008421b40d805020104072f6d706f6f6c2fffffffff03008d380c01000000160014b2f37faf39c645f046d096cf722d715a480883d40065cd1d000000001600143635552e61f1c1e2b5e7f86e25ecf921f0fff9730000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf900000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000800020e35507bab061fc4f60414820d8e8df084de0a8a3c4febea601333ba9819fb30738e24ca4f3c2a9b6637c38f7011d945cb4b67c0cf58c2e8034d04b44869954d0d563a866452e1f1d950100f001080000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff1503b01e04080000000000000000072f6d706f6f6c2fffffffff03bc3a7deb67010000160014cb40dab2164d63d99dc71acb1628368fc5fea906bf94b8fd27000000160014e278645407a9c322b0becef0b31762f32ec03a660000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000"
14+
}

0 commit comments

Comments
 (0)