Esempio n. 1
0
def __parse_and_validate_instruction(
    instruction: TransactionInstruction,
    expected_keys: int,
    expected_type: InstructionType,
) -> Any:  # Returns a Construct container.
    validate_instruction_keys(instruction, expected_keys)
    data = SYSTEM_INSTRUCTIONS_LAYOUT.parse(instruction.data)
    validate_instruction_type(data, expected_type)
    return data
Esempio n. 2
0
def decode_initialize_multisig(instruction: TransactionInstruction) -> InitializeMultisigParams:
    """Decode an initialize multisig account token instruction and retrieve the instruction params."""
    parsed_data = __parse_and_validate_instruction(instruction, 2, InstructionType.InitializeMultisig)
    num_signers = parsed_data.args.m
    validate_instruction_keys(instruction, 2 + num_signers)
    return InitializeMultisigParams(
        program_id=instruction.program_id,
        multisig=instruction.keys[0].pubkey,
        signers=[signer.pubkey for signer in instruction.keys[-num_signers:]],
        m=num_signers,
    )
Esempio n. 3
0
def __parse_and_validate_instruction(instruction: TransactionInstruction,
                                     instruction_type: InstructionType) -> Any:
    instruction_type_to_length_map: Dict[InstructionType, int] = {
        InstructionType.InitializeMarket: 9,
        InstructionType.NewOrder: 9,
        InstructionType.MatchOrder: 7,
        InstructionType.ConsumeEvents: 2,
        InstructionType.CancelOrder: 4,
        InstructionType.CancelOrderByClientID: 4,
        InstructionType.SettleFunds: 9,
    }
    validate_instruction_keys(instruction,
                              instruction_type_to_length_map[instruction_type])
    data = INSTRUCTIONS_LAYOUT.parse(instruction.data)
    validate_instruction_type(data, instruction_type)
    return data