Host-customized fork of https://github.com/tecnovert/basicswap/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.3 KiB
50 lines
1.3 KiB
# -*- coding: utf-8 -*- |
|
|
|
# Copyright (c) 2024 tecnovert |
|
# Distributed under the MIT software license, see the accompanying |
|
# file LICENSE or http://www.opensource.org/licenses/mit-license.php. |
|
|
|
|
|
OP_0 = 0x00 |
|
OP_DATA_1 = 0x01 |
|
OP_1NEGATE = 0x4f |
|
OP_1 = 0x51 |
|
OP_IF = 0x63 |
|
OP_ELSE = 0x67 |
|
OP_ENDIF = 0x68 |
|
OP_DROP = 0x75 |
|
OP_DUP = 0x76 |
|
OP_EQUAL = 0x87 |
|
OP_EQUALVERIFY = 0x88 |
|
OP_PUSHDATA1 = 0x4c |
|
OP_PUSHDATA2 = 0x4d |
|
OP_PUSHDATA4 = 0x4e |
|
OP_HASH160 = 0xa9 |
|
OP_CHECKSIG = 0xac |
|
OP_CHECKMULTISIG = 0xae |
|
OP_CHECKSEQUENCEVERIFY = 0xb2 |
|
|
|
|
|
def push_script_data(data_array: bytearray, data: bytes) -> None: |
|
len_data: int = len(data) |
|
|
|
if len_data == 0 or (len_data == 1 and data[0] == 0): |
|
data_array += bytes((OP_0,)) |
|
return |
|
if len_data == 1 and data[0] <= 16: |
|
data_array += bytes((OP_1 - 1 + data[0],)) |
|
return |
|
if len_data == 1 and data[0] == 0x81: |
|
data_array += bytes((OP_1NEGATE,)) |
|
return |
|
|
|
if len_data < OP_PUSHDATA1: |
|
data_array += len_data.to_bytes(1, 'little') |
|
elif len_data <= 0xff: |
|
data_array += bytes((OP_PUSHDATA1, len_data)) |
|
elif len_data <= 0xffff: |
|
data_array += bytes((OP_PUSHDATA2,)) + len_data.to_bytes(2, 'little') |
|
else: |
|
data_array += bytes((OP_PUSHDATA4,)) + len_data.to_bytes(4, 'little') |
|
|
|
data_array += data
|
|
|