import json from http import HTTPStatus from cryptography.fernet import Fernet import base64 import base58 import struct from solana.publickey import PublicKey from solana.transaction import Transaction, AccountMeta, TransactionInstruction from solana.account import Account from solana.rpc.api import Client import solana.rpc.types as types from solana.system_program import transfer, TransferParams from spl.token._layouts import MINT_LAYOUT, ACCOUNT_LAYOUT from spl.token.instructions import ( get_associated_token_address, create_associated_token_account, mint_to, MintToParams, ) SYSTEM_PROGRAM_ID = '11111111111111111111111111111111' SYSVAR_RENT_ID = 'SysvarRent111111111111111111111111111111111' ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' TOKEN_PROGRAM_ID = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' BINARY_OPTION_PROGRAM_ID = 'betw959P4WToez4DkuXwNsJszqbpe3HuY56AcG5yevx' def initialize_binary_option_instruction( pool_account, escrow_mint_account, escrow_account, long_token_mint_account, short_token_mint_account, mint_authority_account, update_authority_account, token_account, system_account, rent_account, decimals ): keys = [ AccountMeta(pubkey=pool_account, is_signer=True, is_writable=True), AccountMeta(pubkey=escrow_mint_account, is_signer=False, is_writable=False), AccountMeta(pubkey=escrow_account, is_signer=True, is_writable=True), AccountMeta(pubkey=long_token_mint_account, is_signer=True, is_writable=False), AccountMeta(pubkey=short_token_mint_account, is_signer=True, is_writable=False), AccountMeta(pubkey=mint_authority_account, is_signer=True, is_writable=False), AccountMeta(pubkey=update_authority_account, is_signer=True, is_writable=False), AccountMeta(pubkey=token_account, is_signer=False, is_writable=False), AccountMeta(pubkey=system_account, is_signer=False, is_writable=False), AccountMeta(pubkey=rent_account, is_signer=False, is_writable=False), ] data = struct.pack("