stricter tx deserialization: forbid output amount values over 21 million btc
This commit is contained in:
@@ -38,6 +38,7 @@ from .crypto import Hash, sha256, hash_160
|
|||||||
|
|
||||||
COINBASE_MATURITY = 100
|
COINBASE_MATURITY = 100
|
||||||
COIN = 100000000
|
COIN = 100000000
|
||||||
|
TOTAL_COIN_SUPPLY_LIMIT_IN_BTC = 21000000
|
||||||
|
|
||||||
# supported types of transaction outputs
|
# supported types of transaction outputs
|
||||||
TYPE_ADDRESS = 0
|
TYPE_ADDRESS = 0
|
||||||
|
|||||||
@@ -534,6 +534,8 @@ def parse_witness(vds, txin, full_parse: bool):
|
|||||||
def parse_output(vds, i):
|
def parse_output(vds, i):
|
||||||
d = {}
|
d = {}
|
||||||
d['value'] = vds.read_int64()
|
d['value'] = vds.read_int64()
|
||||||
|
if d['value'] > TOTAL_COIN_SUPPLY_LIMIT_IN_BTC * COIN:
|
||||||
|
raise SerializationError('invalid output amount (too large)')
|
||||||
scriptPubKey = vds.read_bytes(vds.read_compact_size())
|
scriptPubKey = vds.read_bytes(vds.read_compact_size())
|
||||||
d['type'], d['address'] = get_address_from_output_script(scriptPubKey)
|
d['type'], d['address'] = get_address_from_output_script(scriptPubKey)
|
||||||
d['scriptPubKey'] = bh2u(scriptPubKey)
|
d['scriptPubKey'] = bh2u(scriptPubKey)
|
||||||
|
|||||||
Reference in New Issue
Block a user