Namecoin: Support indexing name scripts (#626)
* Namecoin: Extract addresses from name scripts. * Namecoin: Index transaction history by name in addition to by script hash.
This commit is contained in:
parent
c411de1f07
commit
6e300cf18b
@ -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):
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
Normal file
62
tests/transactions/namecoin_mainnet_037339.json
Normal file
@ -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
Normal file
52
tests/transactions/namecoin_mainnet_0c6867.json
Normal file
@ -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
Normal file
58
tests/transactions/namecoin_mainnet_460f2b.json
Normal file
@ -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
Normal file
63
tests/transactions/namecoin_mainnet_5e3495.json
Normal file
@ -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
Normal file
62
tests/transactions/namecoin_mainnet_cfc5d7.json
Normal file
@ -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…
Reference in New Issue
Block a user