Skip to content

Commit

Permalink
Add Bitcoin Atom support (kyuupichan#378)
Browse files Browse the repository at this point in the history
  • Loading branch information
erasmospunk authored and Neil committed Feb 21, 2018
1 parent 790385c commit dfea542
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 0 deletions.
40 changes: 40 additions & 0 deletions lib/coins.py
Expand Up @@ -1324,3 +1324,43 @@ class Bitcore(BitcoinMixin, Coin):
TX_COUNT_HEIGHT = 126946
TX_PER_BLOCK = 2
RPC_PORT = 8556


class BitcoinAtom(Coin):
NAME = "BitcoinAtom"
SHORTNAME = "BCA"
NET = "mainnet"
P2PKH_VERBYTE = bytes.fromhex("17")
P2SH_VERBYTES = [bytes.fromhex("0a")]
WIF_BYTE = bytes.fromhex("80")
GENESIS_HASH = ('000000000019d6689c085ae165831e93'
'4ff763ae46a2a6c172b3f1b60a8ce26f')
STATIC_BLOCK_HEADERS = False
DESERIALIZER = lib_tx.DeserializerBitcoinAtom
HEADER_SIZE_POST_FORK = 84
BLOCK_PROOF_OF_STAKE = 0x01
BLOCK_PROOF_OF_STAKE_FLAGS = b'\x01\x00\x00\x00'
TX_COUNT = 295158744
TX_COUNT_HEIGHT = 589197
TX_PER_BLOCK = 10
RPC_PORT = 9136
REORG_LIMIT = 5000

@classmethod
def header_hash(cls, header):
'''Given a header return hash'''
header_to_be_hashed = header[:cls.BASIC_HEADER_SIZE]
# New block header format has some extra flags in the end
if len(header) == cls.HEADER_SIZE_POST_FORK:
flags, = struct.unpack('<I', header[-4:])
# Proof of work blocks have special serialization
if flags & cls.BLOCK_PROOF_OF_STAKE != 0:
header_to_be_hashed += cls.BLOCK_PROOF_OF_STAKE_FLAGS

return double_sha256(header_to_be_hashed)

@classmethod
def block_header(cls, block, height):
'''Return the block header bytes'''
deserializer = cls.DESERIALIZER(block)
return deserializer.read_header(height, cls.BASIC_HEADER_SIZE)
11 changes: 11 additions & 0 deletions lib/tx.py
Expand Up @@ -390,3 +390,14 @@ def read_header(self, height, static_header_size):
header_end = static_header_size
self.cursor = start
return self._read_nbytes(header_end)


class DeserializerBitcoinAtom(DeserializerSegWit):
FORK_BLOCK_HEIGHT = 505888

def read_header(self, height, static_header_size):
'''Return the block header bytes'''
header_len = static_header_size
if height >= self.FORK_BLOCK_HEIGHT:
header_len += 4 # flags
return self._read_nbytes(header_len)
15 changes: 15 additions & 0 deletions tests/blocks/bitcoinatom_mainnet_586900.json
@@ -0,0 +1,15 @@
{
"hash": "0000000000000000da3df1b019576a00d93974818b392b4c1a0a15f3df7c66fb",
"size": 510,
"height": 586900,
"merkleroot": "296a6318fb26dd39534acbe2f2c4cd82d0a9ce00d727d37deb0684748f7b73a7",
"tx": [
"31417678bfbfb9784494974a1b5a7fc5b072c2fc1077f7951158cba43452d0af",
"253b8c15e7d5449dd604f07b5923a59ea35c6d0db0c0603497fec51cac317533"
],
"time": 1518611740,
"nonce": 2909803309,
"bits": "1903fffc",
"previousblockhash": "0000000000000003060c045d260d64f50cbd03f827630974fc7686d7b0ed002f",
"block": "000000202f00edb0d78676fc74096327f803bd0cf5640d265d040c060300000000000000a7737b8f748406eb7dd327d700cea9d082cdc4f2e2cb4a5339dd26fb18636a291c2d845afcff03192d1370ad000000800201000000010000000000000000000000000000000000000000000000000000000000000000ffffffff200394f408041c2d845a0877ffb4bff7f26d020d2f6e6f64655374726174756d2f00000000020000000000000000266a24aa21a9ed370b337f1e15c7e0159715ea1707ec27b4a123f1a8810ad88e3b24ae412cd764288e814a000000001976a9143c0b217ab4208ab437dfc49c96d7d6f9e6608c2788ac000000000200000001af692cd7d8192a3b80f405e528d4cb4bc49efcad44c6d290a11cd21134a3bb82010000006a4730440220721a2935cc808b96ab20685c4bff77a1c253c5827c9fec4e7a54f2170c44870e02203fd847b15b449f3154acad12ed2f1d29b067cf73640e678a4b847d851441f4b0412103e0d0b2ea7fe2b07a3e26957a995190e4cbbd590653c8b118e161bcbcdbf52c4cfeffffff021d1db709000000001976a914035e3987787b71e772366787e087c8e9351dd1a888acb6d84c00000000001976a9143acea32e9ebc212a858c28a9624fb8924f35d8f288ac93f40800"
}
15 changes: 15 additions & 0 deletions tests/blocks/bitcoinatom_mainnet_586956.json
@@ -0,0 +1,15 @@
{
"hash": "27b7efad91a595c0717a2e9fc4fb252545000c18a6610130d15382be83c402e3",
"size": 541,
"height": 586956,
"merkleroot": "81aa679f1878a93367dad062c8a6964847881260c19320b4e3664c63deabac7f",
"tx": [
"789dda752eecf22056a93e8bcdf89eb31ac8102485124a7488fa0472250ac382",
"0f35c0b9bbf661787bfc920b5f4571440602e5723144c10b8fa5629dc3279abf"
],
"time": 1518630315,
"nonce": 0,
"bits": "1d00ffff",
"previousblockhash": "0000000000000002c32c76bc7971dd10adf28abd4ff45c1b23c5b74d0265ffcc",
"block": "00000020ccff65024db7c5231b5cf44fbd8af2ad10dd7179bc762cc302000000000000007facabde634c66e3b42093c1601288474896a6c862d0da6733a978189f67aa81ab75845affff001d00000000010000800202000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0603ccf4080101ffffffff02ca000000000000002321034055f219c9619e18ef193c0def3e43ebffea827c950f0e78ee8f146b9f4c8102ac0000000000000000266a24aa21a9ed164fe82b7473bf82cfdd7c28f90668f9fe78200022bafe159f293b4fe5e10832000000000200000001bef5797f980f07ba3bc619d2eef2ad728737709a747c4adf477dfb05186e7fe2010000006a47304402201fbef43b1877a013291effd9d9da882d128109d89db28ddd96f0bcb65ac4aab002206893640e754a9d147355474229af237581956fa191cb806648744e2d6ba989664121034055f219c9619e18ef193c0def3e43ebffea827c950f0e78ee8f146b9f4c8102ffffffff01b67b814a000000002321034055f219c9619e18ef193c0def3e43ebffea827c950f0e78ee8f146b9f4c8102ac000000004630440220413932292b5e1cc5ae8cc019b11e5db7ec4432d260e8fee0f9c0a195a5aec28902204a90b318cb1b4f77ebd678db45fc0fce5ab3f0cc2d89aacaa523d8b6cd82f29e"
}

0 comments on commit dfea542

Please sign in to comment.