Browse Source

Namecoin: Support indexing name scripts (#626)

* Namecoin: Extract addresses from name scripts.

* Namecoin: Index transaction history by name in addition to by script hash.
patch-2
JeremyRand 6 years ago
committed by Neil
parent
commit
6e300cf18b
  1. 103
      electrumx/lib/coins.py
  2. 30
      electrumx/server/block_processor.py
  3. 16
      tests/test_transactions.py
  4. 62
      tests/transactions/namecoin_mainnet_037339.json
  5. 52
      tests/transactions/namecoin_mainnet_0c6867.json
  6. 58
      tests/transactions/namecoin_mainnet_460f2b.json
  7. 63
      tests/transactions/namecoin_mainnet_5e3495.json
  8. 62
      tests/transactions/namecoin_mainnet_cfc5d7.json

103
electrumx/lib/coins.py

@ -709,6 +709,109 @@ class Namecoin(AuxPowMixin, Coin):
PEERS = [
'elec.luggs.co s446',
]
BLOCK_PROCESSOR = block_proc.NamecoinBlockProcessor
@classmethod
def split_name_script(cls, script):
from electrumx.lib.script import _match_ops, Script, ScriptError
try:
ops = Script.get_ops(script)
except ScriptError:
return None, script
match = _match_ops
# Name opcodes
OP_NAME_NEW = OpCodes.OP_1
OP_NAME_FIRSTUPDATE = OpCodes.OP_2
OP_NAME_UPDATE = OpCodes.OP_3
# Opcode sequences for name operations
NAME_NEW_OPS = [OP_NAME_NEW, -1, OpCodes.OP_2DROP]
NAME_FIRSTUPDATE_OPS = [OP_NAME_FIRSTUPDATE, -1, -1, -1,
OpCodes.OP_2DROP, OpCodes.OP_2DROP]
NAME_UPDATE_OPS = [OP_NAME_UPDATE, -1, -1, OpCodes.OP_2DROP,
OpCodes.OP_DROP]
name_script_op_count = None
name_pushdata = None
# Detect name operations; determine count of opcodes.
# Also extract the name field -- we might use that for something in a
# future version.
if match(ops[:len(NAME_NEW_OPS)], NAME_NEW_OPS):
name_script_op_count = len(NAME_NEW_OPS)
elif match(ops[:len(NAME_FIRSTUPDATE_OPS)], NAME_FIRSTUPDATE_OPS):
name_script_op_count = len(NAME_FIRSTUPDATE_OPS)
name_pushdata = ops[1]
elif match(ops[:len(NAME_UPDATE_OPS)], NAME_UPDATE_OPS):
name_script_op_count = len(NAME_UPDATE_OPS)
name_pushdata = ops[1]
if name_script_op_count is None:
return None, script
# Find the end position of the name data
n = 0
for i in range(name_script_op_count):
# Content of this loop is copied from Script.get_ops's loop
op = script[n]
n += 1
if op <= OpCodes.OP_PUSHDATA4:
# Raw bytes follow
if op < OpCodes.OP_PUSHDATA1:
dlen = op
elif op == OpCodes.OP_PUSHDATA1:
dlen = script[n]
n += 1
elif op == OpCodes.OP_PUSHDATA2:
dlen, = struct.unpack('<H', script[n: n + 2])
n += 2
else:
dlen, = struct.unpack('<I', script[n: n + 4])
n += 4
if n + dlen > len(script):
raise IndexError
op = (op, script[n:n + dlen])
n += dlen
# Strip the name data to yield the address script
address_script = script[n:]
if name_pushdata is None:
return None, address_script
normalized_name_op_script = bytearray()
normalized_name_op_script.append(OP_NAME_UPDATE)
normalized_name_op_script.extend(Script.push_data(name_pushdata[1]))
normalized_name_op_script.extend(Script.push_data(bytes([])))
normalized_name_op_script.append(OpCodes.OP_2DROP)
normalized_name_op_script.append(OpCodes.OP_DROP)
normalized_name_op_script.append(OpCodes.OP_RETURN)
return bytes(normalized_name_op_script), address_script
@classmethod
def hashX_from_script(cls, script):
name_op_script, address_script = cls.split_name_script(script)
return super().hashX_from_script(address_script)
@classmethod
def address_from_script(cls, script):
name_op_script, address_script = cls.split_name_script(script)
return super().address_from_script(address_script)
@classmethod
def name_hashX_from_script(cls, script):
name_op_script, address_script = cls.split_name_script(script)
if name_op_script is None:
return None
return super().hashX_from_script(name_op_script)
class NamecoinTestnet(Namecoin):

30
electrumx/server/block_processor.py

@ -681,3 +681,33 @@ class DecredBlockProcessor(BlockProcessor):
start -= 1
count += 1
return start, count
class NamecoinBlockProcessor(BlockProcessor):
def advance_txs(self, txs):
result = super().advance_txs(txs)
tx_num = self.tx_count - len(txs)
script_name_hashX = self.coin.name_hashX_from_script
update_touched = self.touched.update
hashXs_by_tx = []
append_hashXs = hashXs_by_tx.append
for tx, tx_hash in txs:
hashXs = []
append_hashX = hashXs.append
# Add the new UTXOs and associate them with the name script
for idx, txout in enumerate(tx.outputs):
# Get the hashX of the name script. Ignore non-name scripts.
hashX = script_name_hashX(txout.pk_script)
if hashX:
append_hashX(hashX)
append_hashXs(hashXs)
update_touched(hashXs)
tx_num += 1
self.db.history.add_unflushed(hashXs_by_tx, self.tx_count - len(txs))
return result

16
tests/test_transactions.py

@ -11,8 +11,9 @@ from binascii import unhexlify
import pytest
from electrumx.lib.coins import Coin
from electrumx.lib.coins import Coin, Namecoin
from electrumx.lib.hash import hash_to_hex_str
from electrumx.lib.script import OpCodes, Script
TRANSACTION_DIR = os.path.join(
os.path.dirname(os.path.realpath(__file__)), 'transactions')
@ -57,3 +58,16 @@ def test_transaction(transaction_details):
assert spk['hex'] == tx_pks.hex()
assert coin.address_to_hashX(spk['address']) == \
coin.hashX_from_script(tx_pks)
if issubclass(coin, Namecoin):
if "nameOp" not in spk or "name" not in spk["nameOp"]:
assert coin.name_hashX_from_script(tx_pks) is None
else:
OP_NAME_UPDATE = OpCodes.OP_3
normalized_name_op_script = bytearray()
normalized_name_op_script.append(OP_NAME_UPDATE)
normalized_name_op_script.extend(Script.push_data(spk["nameOp"]["name"].encode("ascii")))
normalized_name_op_script.extend(Script.push_data(bytes([])))
normalized_name_op_script.append(OpCodes.OP_2DROP)
normalized_name_op_script.append(OpCodes.OP_DROP)
normalized_name_op_script.append(OpCodes.OP_RETURN)
assert coin.name_hashX_from_script(tx_pks) == Coin.hashX_from_script(normalized_name_op_script)

62
tests/transactions/namecoin_mainnet_037339.json

@ -0,0 +1,62 @@
{
"txid": "037339b97cf38d0fd8d68046c0ce7661a3d0117fac1da802c1d4c13056a74096",
"hash": "037339b97cf38d0fd8d68046c0ce7661a3d0117fac1da802c1d4c13056a74096",
"version": 28928,
"size": 568,
"vsize": 568,
"locktime": 411806,
"vin": [
{
"txid": "4e6adc779e9d6d359c131a6c162fda9ab6822c829ed85e6461eca09a7f2da860",
"vout": 0,
"scriptSig": {
"asm": "30450221009934d4cef1c24141e5d74d825f1d50cc199bd9daf76e15024ff6119bc86fb8da02200d648a0c0dff5b4d091fdd8562a2f4a4cde243d460708565c1c96b2a3c1db786[ALL] 02beb88ae836bc254ef277e0911c8affe248d1e6a893bba6ce7da6cd9aee6079e4",
"hex": "4830450221009934d4cef1c24141e5d74d825f1d50cc199bd9daf76e15024ff6119bc86fb8da02200d648a0c0dff5b4d091fdd8562a2f4a4cde243d460708565c1c96b2a3c1db786012102beb88ae836bc254ef277e0911c8affe248d1e6a893bba6ce7da6cd9aee6079e4"
},
"sequence": 4294967294
},
{
"txid": "d269af00988e45ed9a5fe085884b8f729afac4a5ccaaf8e1ee601439e7bcc125",
"vout": 1,
"scriptSig": {
"asm": "3045022100d2c96c88ceff7653e741c40e011d0253a7426f29af68097f6c0af45878f83bc8022008908f2a63ab0230caec18443c034478ce32367fcdcf810998293f6bb6808225[ALL] 02d514d8b84fe28a4f5b998fb15d931456dd98365df9576dbcc47f787412eec1a6",
"hex": "483045022100d2c96c88ceff7653e741c40e011d0253a7426f29af68097f6c0af45878f83bc8022008908f2a63ab0230caec18443c034478ce32367fcdcf810998293f6bb6808225012102d514d8b84fe28a4f5b998fb15d931456dd98365df9576dbcc47f787412eec1a6"
},
"sequence": 4294967294
}
],
"vout": [
{
"value": 1477675940,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 224538b431f8deb3fddccc433ebc1327017634e7 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a914224538b431f8deb3fddccc433ebc1327017634e788ac",
"reqSigs": 1,
"type": "pubkeyhash",
"address": "Myha6mFMZV7u9Yvj6X43cidZocas5Xhq3E"
}
},
{
"value": 1000000,
"n": 1,
"scriptPubKey": {
"nameOp": {
"op": "name_update",
"name": "dd/domob",
"value": "{\"ip\":\"176.31.184.255\",\"map\":{\"*\":{\"ip\":\"176.31.184.255\",\"tor\":\"wivfwn64tm3uaeig.onion\"}},\"fingerprint\":[\"6969C8037D2318BEDBC8111474B0A6E66E73BDB9\"],\"tor\":\"wivfwn64tm3uaeig.onion\"}"
},
"asm": "OP_NAME_UPDATE 64642f646f6d6f62 7b226970223a223137362e33312e3138342e323535222c226d6170223a7b222a223a7b226970223a223137362e33312e3138342e323535222c22746f72223a2277697666776e3634746d3375616569672e6f6e696f6e227d7d2c2266696e6765727072696e74223a5b2236393639433830333744323331384245444243383131313437344230413645363645373342444239225d2c22746f72223a2277697666776e3634746d3375616569672e6f6e696f6e227d OP_2DROP OP_DROP OP_DUP OP_HASH160 57fd3c4a6a417c17f8d902e90e2bfb97b1a12e11 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "530864642f646f6d6f624cb47b226970223a223137362e33312e3138342e323535222c226d6170223a7b222a223a7b226970223a223137362e33312e3138342e323535222c22746f72223a2277697666776e3634746d3375616569672e6f6e696f6e227d7d2c2266696e6765727072696e74223a5b2236393639433830333744323331384245444243383131313437344230413645363645373342444239225d2c22746f72223a2277697666776e3634746d3375616569672e6f6e696f6e227d6d7576a91457fd3c4a6a417c17f8d902e90e2bfb97b1a12e1188ac",
"reqSigs": 1,
"type": "pubkeyhash",
"address": "N4bcMSxUL7jNDAJa34DpkdZPp9faHRJeaP"
}
}
],
"hex": "007100000260a82d7f9aa0ec61645ed89e822c82b69ada2f166c1a139c356d9d9e77dc6a4e000000006b4830450221009934d4cef1c24141e5d74d825f1d50cc199bd9daf76e15024ff6119bc86fb8da02200d648a0c0dff5b4d091fdd8562a2f4a4cde243d460708565c1c96b2a3c1db786012102beb88ae836bc254ef277e0911c8affe248d1e6a893bba6ce7da6cd9aee6079e4feffffff25c1bce7391460eee1f8aacca5c4fa9a728f4b8885e05f9aed458e9800af69d2010000006b483045022100d2c96c88ceff7653e741c40e011d0253a7426f29af68097f6c0af45878f83bc8022008908f2a63ab0230caec18443c034478ce32367fcdcf810998293f6bb6808225012102d514d8b84fe28a4f5b998fb15d931456dd98365df9576dbcc47f787412eec1a6feffffff02a48b1358000000001976a914224538b431f8deb3fddccc433ebc1327017634e788ac40420f0000000000db530864642f646f6d6f624cb47b226970223a223137362e33312e3138342e323535222c226d6170223a7b222a223a7b226970223a223137362e33312e3138342e323535222c22746f72223a2277697666776e3634746d3375616569672e6f6e696f6e227d7d2c2266696e6765727072696e74223a5b2236393639433830333744323331384245444243383131313437344230413645363645373342444239225d2c22746f72223a2277697666776e3634746d3375616569672e6f6e696f6e227d6d7576a91457fd3c4a6a417c17f8d902e90e2bfb97b1a12e1188ac9e480600",
"blockhash": "1453f1744573abc329a116d071f9041bea5639f51c6e9bb2463fcb21f0638d2c",
"confirmations": 10342,
"time": 1533902501,
"blocktime": 1533902501
}

52
tests/transactions/namecoin_mainnet_0c6867.json

@ -0,0 +1,52 @@
{
"txid": "0c686779a1dcc867039a3c71934d6cde487c4eabd9cd2efd0bdcf15262ed9886",
"hash": "0c686779a1dcc867039a3c71934d6cde487c4eabd9cd2efd0bdcf15262ed9886",
"version": 28928,
"size": 280,
"vsize": 280,
"locktime": 421976,
"vin": [
{
"txid": "0b9468e87947debbf999ac9290fcd25af7eff5f4d6df4773be2a89fd31009078",
"vout": 1,
"scriptSig": {
"asm": "304402203b3d10f8ba91fb477fdcbeb0354016bce97fcdf7d050191c7958a7d174ae4e76022064bd96fb14fcfc535320dd9eafd9a6c6dd9410937afa4fdb1064e2d8cc1110fa[ALL] 0421c34686d12da7331dcf876a61b58cdfa9bb892120fa8e699daac1333ad7325ed09a37432a414ccc2bed6506b3badd0413cd35469dcfda23ebadca86929f59c1",
"hex": "47304402203b3d10f8ba91fb477fdcbeb0354016bce97fcdf7d050191c7958a7d174ae4e76022064bd96fb14fcfc535320dd9eafd9a6c6dd9410937afa4fdb1064e2d8cc1110fa01410421c34686d12da7331dcf876a61b58cdfa9bb892120fa8e699daac1333ad7325ed09a37432a414ccc2bed6506b3badd0413cd35469dcfda23ebadca86929f59c1"
},
"sequence": 4294967294
}
],
"vout": [
{
"value": 280480622,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 b7db2908b47c32f4b8864caf2522d2eb1ed3d50b OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a914b7db2908b47c32f4b8864caf2522d2eb1ed3d50b88ac",
"reqSigs": 1,
"type": "pubkeyhash",
"address": "NDLWQGyHyhneB7ySsL6na2QBPK1T2i1WSQ"
}
},
{
"value": 1000000,
"n": 1,
"scriptPubKey": {
"nameOp": {
"op": "name_new",
"hash": "2dbe200657c5c3cce22f0637480865d5db3aaaac"
},
"asm": "OP_NAME_NEW 2dbe200657c5c3cce22f0637480865d5db3aaaac OP_2DROP OP_DUP OP_HASH160 6985a7f580409d4fdaf223f34848212955d371eb OP_EQUALVERIFY OP_CHECKSIG",
"hex": "51142dbe200657c5c3cce22f0637480865d5db3aaaac6d76a9146985a7f580409d4fdaf223f34848212955d371eb88ac",
"reqSigs": 1,
"type": "pubkeyhash",
"address": "N6CKGNr6iBDriS6iwZBAFswM2auAQnjd5K"
}
}
],
"hex": "007100000178900031fd892abe7347dfd6f4f5eff75ad2fc9092ac99f9bbde4779e868940b010000008a47304402203b3d10f8ba91fb477fdcbeb0354016bce97fcdf7d050191c7958a7d174ae4e76022064bd96fb14fcfc535320dd9eafd9a6c6dd9410937afa4fdb1064e2d8cc1110fa01410421c34686d12da7331dcf876a61b58cdfa9bb892120fa8e699daac1333ad7325ed09a37432a414ccc2bed6506b3badd0413cd35469dcfda23ebadca86929f59c1feffffff026ecbb710000000001976a914b7db2908b47c32f4b8864caf2522d2eb1ed3d50b88ac40420f00000000003051142dbe200657c5c3cce22f0637480865d5db3aaaac6d76a9146985a7f580409d4fdaf223f34848212955d371eb88ac58700600",
"blockhash": "15b3979258287d26becc021b265bcccc964b9863d44a8a5802b9f6ce53d9509d",
"confirmations": 170,
"time": 1539845549,
"blocktime": 1539845549
}

58
tests/transactions/namecoin_mainnet_460f2b.json

@ -0,0 +1,58 @@
{
"txid": "460f2b0a6f480b0d16b99fd4ea55afbf7ee628365a2a32d54b56422163e7660b",
"hash": "460f2b0a6f480b0d16b99fd4ea55afbf7ee628365a2a32d54b56422163e7660b",
"version": 28928,
"size": 688,
"vsize": 688,
"locktime": 422150,
"vin": [
{
"txid": "33991d6cc33c2f9d85484086d0e9dcb93717be11e89bb315c5f0233d0fc0fc01",
"vout": 1,
"scriptSig": {
"asm": "3045022100c26ad0e826c1759a02a4bb3a8f816841b6330b44d3bba5ace371af7aeb736cae02205e6e9927d5e8279d32e741fbcd567c08f6dda8bdd0e3597c85b85831c3a73090[ALL] 03a7c03fa10f4ffa393a2e90ba098bf1f9b5d0cf84f83bc006fc9902884f22a5b5",
"hex": "483045022100c26ad0e826c1759a02a4bb3a8f816841b6330b44d3bba5ace371af7aeb736cae02205e6e9927d5e8279d32e741fbcd567c08f6dda8bdd0e3597c85b85831c3a73090012103a7c03fa10f4ffa393a2e90ba098bf1f9b5d0cf84f83bc006fc9902884f22a5b5"
},
"sequence": 4294967293
},
{
"txid": "4632320203dddc75cac6e0078a040b6601de73b95d0069c8ef37f34e085f883c",
"vout": 0,
"scriptSig": {
"asm": "304402205bf9d8fe538d18d2f589f818acfc66efb3d7c563a6d0ce94379761e3ad5de4bb02204841c4f51cdb4433991f73fcff41fc82afd0a4411a89b09de30e6fb603ddf5a1[ALL] 0284741f8ca6ab581a46ae0ba5edfbfd134378c41e576c9267ca99054ecdf121cb",
"hex": "47304402205bf9d8fe538d18d2f589f818acfc66efb3d7c563a6d0ce94379761e3ad5de4bb02204841c4f51cdb4433991f73fcff41fc82afd0a4411a89b09de30e6fb603ddf5a101210284741f8ca6ab581a46ae0ba5edfbfd134378c41e576c9267ca99054ecdf121cb"
},
"sequence": 4294967293
}
],
"vout": [
{
"value": 1000000,
"n": 0,
"scriptPubKey": {
"nameOp": {
"op": "name_update",
"name": "test/6",
"value": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"asm": "OP_NAME_UPDATE 746573742f36 787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878 OP_2DROP OP_DROP OP_DUP OP_HASH160 734b00d1b31f3c3a89bcd6d302b820d4c0459fc1 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "5306746573742f364d2c017878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878786d7576a914734b00d1b31f3c3a89bcd6d302b820d4c0459fc188ac",
"reqSigs": 1,
"type": "pubkeyhash",
"address": "N75ym2CibThuKTtR4eRRZAMvkcLybL77fS"
}
},
{
"value": 354398,
"n": 1,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 3b9cde2101e9da0fbf47d98ed859b0ad8fa886b5 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a9143b9cde2101e9da0fbf47d98ed859b0ad8fa886b588ac",
"reqSigs": 1,
"type": "pubkeyhash",
"address": "N21ZzKiuLLQ5pZnoJrqaSNZSbipQUtAaGt"
}
}
],
"hex": "007100000201fcc00f3d23f0c515b39be811be1737b9dce9d0864048859d2f3cc36c1d9933010000006b483045022100c26ad0e826c1759a02a4bb3a8f816841b6330b44d3bba5ace371af7aeb736cae02205e6e9927d5e8279d32e741fbcd567c08f6dda8bdd0e3597c85b85831c3a73090012103a7c03fa10f4ffa393a2e90ba098bf1f9b5d0cf84f83bc006fc9902884f22a5b5fdffffff3c885f084ef337efc869005db973de01660b048a07e0c6ca75dcdd0302323246000000006a47304402205bf9d8fe538d18d2f589f818acfc66efb3d7c563a6d0ce94379761e3ad5de4bb02204841c4f51cdb4433991f73fcff41fc82afd0a4411a89b09de30e6fb603ddf5a101210284741f8ca6ab581a46ae0ba5edfbfd134378c41e576c9267ca99054ecdf121cbfdffffff0240420f0000000000fd52015306746573742f364d2c017878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878786d7576a914734b00d1b31f3c3a89bcd6d302b820d4c0459fc188ac5e680500000000001976a9143b9cde2101e9da0fbf47d98ed859b0ad8fa886b588ac06710600"
}

63
tests/transactions/namecoin_mainnet_5e3495.json

@ -0,0 +1,63 @@
{
"txid": "5e349540789309a088f9ede78c2e42e233e670aabbbd79886adc541389cfa4fa",
"hash": "5e349540789309a088f9ede78c2e42e233e670aabbbd79886adc541389cfa4fa",
"version": 28928,
"size": 478,
"vsize": 478,
"locktime": 421921,
"vin": [
{
"txid": "4748ec1d3acad8bdb357b5499530ce1c3ada97ae9952475e3901e8f75dd55506",
"vout": 1,
"scriptSig": {
"asm": "30450221008eff8db772c8018181ccb1355d29e32436982f13d032d6ad72191139f7d9790402201a98c67c368b2c389156cb20b88aef251ec4e22535d830cea7986bcf62815059[ALL] 04e1c4b9e1cb0090fb6f55b98da47ed030a9e6383f6dd7d17089237abf10e5d939147dae8da00fc0840cf452c0e1a1001a56691abaa2cf07dc03c5477a586be6e2",
"hex": "4830450221008eff8db772c8018181ccb1355d29e32436982f13d032d6ad72191139f7d9790402201a98c67c368b2c389156cb20b88aef251ec4e22535d830cea7986bcf62815059014104e1c4b9e1cb0090fb6f55b98da47ed030a9e6383f6dd7d17089237abf10e5d939147dae8da00fc0840cf452c0e1a1001a56691abaa2cf07dc03c5477a586be6e2"
},
"sequence": 4294967294
},
{
"txid": "0c686779a1dcc867039a3c71934d6cde487c4eabd9cd2efd0bdcf15262ed9886",
"vout": 1,
"scriptSig": {
"asm": "3045022100d242038864fc1b09ccdf4707b4ba828289c946c1c8681cff6347708332b9f6630220425d2dc3e4bd608efa82c6392e9732502ccffeba8c037ebf22ba035fc959cda6[ALL] 046cd0bf29656995ca841923f30f4b7ac9ae7cb4265da65ca8bd38363387b9317449cb1a0d6a11bc71d70a571ca7ee5b6a5dfe37cac10ccb4ed5cdb82751ceaa4b",
"hex": "483045022100d242038864fc1b09ccdf4707b4ba828289c946c1c8681cff6347708332b9f6630220425d2dc3e4bd608efa82c6392e9732502ccffeba8c037ebf22ba035fc959cda60141046cd0bf29656995ca841923f30f4b7ac9ae7cb4265da65ca8bd38363387b9317449cb1a0d6a11bc71d70a571ca7ee5b6a5dfe37cac10ccb4ed5cdb82751ceaa4b"
},
"sequence": 4294967294
}
],
"vout": [
{
"value": 280384718,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 9a52d8b8f425031b6ef40a847e771f6134af9804 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a9149a52d8b8f425031b6ef40a847e771f6134af980488ac",
"reqSigs": 1,
"type": "pubkeyhash",
"address": "NAeMWUDKZAjbDXM7BryV3Wa9Lp3C3aG7oq"
}
},
{
"value": 1000000,
"n": 1,
"scriptPubKey": {
"nameOp": {
"op": "name_firstupdate",
"name": "d/heretostay",
"value": "{}",
"rand": "ca7d07e0aa9d23c2dc7efe5f2902f0e2ec22fe7c"
},
"asm": "OP_NAME_FIRSTUPDATE 642f68657265746f73746179 ca7d07e0aa9d23c2dc7efe5f2902f0e2ec22fe7c 32123 OP_2DROP OP_2DROP OP_DUP OP_HASH160 ce26e759dbb966466446aab6e48cf39a23badd75 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "520c642f68657265746f7374617914ca7d07e0aa9d23c2dc7efe5f2902f0e2ec22fe7c027b7d6d6d76a914ce26e759dbb966466446aab6e48cf39a23badd7588ac",
"reqSigs": 1,
"type": "pubkeyhash",
"address": "NFNQ1Ez6ZYVQpvsWcePBQMSiA3LB4BT9o1"
}
}
],
"hex": "00710000020655d55df7e801395e475299ae97da3a1cce309549b557b3bdd8ca3a1dec4847010000008b4830450221008eff8db772c8018181ccb1355d29e32436982f13d032d6ad72191139f7d9790402201a98c67c368b2c389156cb20b88aef251ec4e22535d830cea7986bcf62815059014104e1c4b9e1cb0090fb6f55b98da47ed030a9e6383f6dd7d17089237abf10e5d939147dae8da00fc0840cf452c0e1a1001a56691abaa2cf07dc03c5477a586be6e2feffffff8698ed6252f1dc0bfd2ecdd9ab4e7c48de6c4d93713c9a0367c8dca17967680c010000008b483045022100d242038864fc1b09ccdf4707b4ba828289c946c1c8681cff6347708332b9f6630220425d2dc3e4bd608efa82c6392e9732502ccffeba8c037ebf22ba035fc959cda60141046cd0bf29656995ca841923f30f4b7ac9ae7cb4265da65ca8bd38363387b9317449cb1a0d6a11bc71d70a571ca7ee5b6a5dfe37cac10ccb4ed5cdb82751ceaa4bfeffffff02ce54b610000000001976a9149a52d8b8f425031b6ef40a847e771f6134af980488ac40420f000000000041520c642f68657265746f7374617914ca7d07e0aa9d23c2dc7efe5f2902f0e2ec22fe7c027b7d6d6d76a914ce26e759dbb966466446aab6e48cf39a23badd7588ac21700600",
"blockhash": "5b8c0254e59018d9cba170efccec0e1909898b8552ab581ba73a482d5693d25b",
"confirmations": 145,
"time": 1539853690,
"blocktime": 1539853690
}

62
tests/transactions/namecoin_mainnet_cfc5d7.json

@ -0,0 +1,62 @@
{
"txid": "cfc5d7e6280af21ce96f016826080490106dbf53f12ed1e38737595564b125c1",
"hash": "cfc5d7e6280af21ce96f016826080490106dbf53f12ed1e38737595564b125c1",
"version": 28928,
"size": 513,
"vsize": 513,
"locktime": 422067,
"vin": [
{
"txid": "29c4c6c3443395a675111f7d809f192874d574425c014bb30ba8b6d4958fce2a",
"vout": 1,
"scriptSig": {
"asm": "30440220545b4eb23ddd3053580b58ef445092135a39a102cd858c3f46a8e3bbd68c0bb302200eb29decfaf4d189ca6dcae6cf4d86ddee5a2e2122fc504179e84c119873b014[ALL] 04d9fb2666d199134a53392189011a1aac0942d21299d338c274ae46f35cbeb631f4a413810d43fc1f968d7abc07b4181e56a5042e9f134538f8208b648d3bc5c7",
"hex": "4730440220545b4eb23ddd3053580b58ef445092135a39a102cd858c3f46a8e3bbd68c0bb302200eb29decfaf4d189ca6dcae6cf4d86ddee5a2e2122fc504179e84c119873b014014104d9fb2666d199134a53392189011a1aac0942d21299d338c274ae46f35cbeb631f4a413810d43fc1f968d7abc07b4181e56a5042e9f134538f8208b648d3bc5c7"
},
"sequence": 4294967294
},
{
"txid": "5e349540789309a088f9ede78c2e42e233e670aabbbd79886adc541389cfa4fa",
"vout": 1,
"scriptSig": {
"asm": "3045022100f446e902ad3218d9d14ea2328f3ee5432b8f3a20224c2fc5fd9919b1c3d4362f022072fa9b4f840f53795f96336fadb79af2fb8c1e750a6cd84a5189fc381b5d8d56[ALL] 040df31f5db8614a8178e6d0785a56118c4f7d8fed10e80156e47934bd486f71ad1e81da5fbca360507eadc12e6c6b082bc6bee9f30fe64e235ea1127e28dfdf9c",
"hex": "483045022100f446e902ad3218d9d14ea2328f3ee5432b8f3a20224c2fc5fd9919b1c3d4362f022072fa9b4f840f53795f96336fadb79af2fb8c1e750a6cd84a5189fc381b5d8d560141040df31f5db8614a8178e6d0785a56118c4f7d8fed10e80156e47934bd486f71ad1e81da5fbca360507eadc12e6c6b082bc6bee9f30fe64e235ea1127e28dfdf9c"
},
"sequence": 4294967294
}
],
"vout": [
{
"value": 1000000,
"n": 0,
"scriptPubKey": {
"nameOp": {
"op": "name_update",
"name": "d/heretostay",
"value": "{\"ip\":\"185.234.217.36\",\"map\":{\"*\":{\"ip\":\"185.234.217.36\"}}}"
},
"asm": "OP_NAME_UPDATE 642f68657265746f73746179 7b226970223a223138352e3233342e3231372e3336222c226d6170223a7b222a223a7b226970223a223138352e3233342e3231372e3336227d7d7d OP_2DROP OP_DROP OP_DUP OP_HASH160 584e13c024ce2eac261902a3c9508731a3dfa143 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "530c642f68657265746f737461793b7b226970223a223138352e3233342e3231372e3336222c226d6170223a7b222a223a7b226970223a223138352e3233342e3231372e3336227d7d7d6d7576a914584e13c024ce2eac261902a3c9508731a3dfa14388ac",
"reqSigs": 1,
"type": "pubkeyhash",
"address": "N4dHCRYVP8oQa6ZXLC1DPnzbvuvq29hy6v"
}
},
{
"value": 279093004,
"n": 1,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 09804e98bc777f101343fcd3c67044742e785bf6 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a91409804e98bc777f101343fcd3c67044742e785bf688ac",
"reqSigs": 1,
"type": "pubkeyhash",
"address": "MwSbzJTK1Dc2dBcE4u6nLJ95ZmEnzPUtSE"
}
}
],
"hex": "00710000022ace8f95d4b6a80bb34b015c4274d57428199f807d1f1175a6953344c3c6c429010000008a4730440220545b4eb23ddd3053580b58ef445092135a39a102cd858c3f46a8e3bbd68c0bb302200eb29decfaf4d189ca6dcae6cf4d86ddee5a2e2122fc504179e84c119873b014014104d9fb2666d199134a53392189011a1aac0942d21299d338c274ae46f35cbeb631f4a413810d43fc1f968d7abc07b4181e56a5042e9f134538f8208b648d3bc5c7fefffffffaa4cf891354dc6a8879bdbbaa70e633e2422e8ce7edf988a00993784095345e010000008b483045022100f446e902ad3218d9d14ea2328f3ee5432b8f3a20224c2fc5fd9919b1c3d4362f022072fa9b4f840f53795f96336fadb79af2fb8c1e750a6cd84a5189fc381b5d8d560141040df31f5db8614a8178e6d0785a56118c4f7d8fed10e80156e47934bd486f71ad1e81da5fbca360507eadc12e6c6b082bc6bee9f30fe64e235ea1127e28dfdf9cfeffffff0240420f000000000065530c642f68657265746f737461793b7b226970223a223138352e3233342e3231372e3336222c226d6170223a7b222a223a7b226970223a223138352e3233342e3231372e3336227d7d7d6d7576a914584e13c024ce2eac261902a3c9508731a3dfa14388ac0c9fa210000000001976a91409804e98bc777f101343fcd3c67044742e785bf688acb3700600",
"blockhash": "182f4fbdac2309b8f3333802ff81008178661662bf2d7bd385a2e93d3ac493a4",
"confirmations": 3,
"time": 1539945678,
"blocktime": 1539945678
}
Loading…
Cancel
Save