diff --git a/src/proto_alpha/lib_plugin/plugin.ml b/src/proto_alpha/lib_plugin/plugin.ml index 62afbe7ea6ca1cbe424c5636b0df6e4ab41b5362..fe5fdbded5a9989d4192bd3d8ff3b751d48903a6 100644 --- a/src/proto_alpha/lib_plugin/plugin.ml +++ b/src/proto_alpha/lib_plugin/plugin.ml @@ -1468,8 +1468,10 @@ module View_helpers = struct operation = Transaction { - transaction = - {destination; parameters; entrypoint = _; amount = _}; + destination = Contract destination; + unparsed_parameters; + entrypoint = _; + amount = _; parameters = _; parameters_ty = _; location = _; @@ -1478,8 +1480,8 @@ module View_helpers = struct nonce = _; }; ] - when Destination.equal destination (Contract callback) -> - ok parameters + when Contract.equal destination callback -> + ok unparsed_parameters | [] -> Environment.Error_monad.error (View_never_returns (entrypoint, callback)) diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index f5a24ee1a0775bf509a01424bb183cf55e8a53cf..2956d330962269a361f6a2d5f9d730eb51f1d651 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -2876,13 +2876,6 @@ val consensus_content_encoding : consensus_content Data_encoding.t val pp_consensus_content : Format.formatter -> consensus_content -> unit -type transaction = { - amount : Tez.tez; - parameters : Script.lazy_expr; - entrypoint : Entrypoint.t; - destination : Destination.t; -} - type origination = { delegate : Signature.Public_key_hash.t option; script : Script.t; @@ -2959,7 +2952,13 @@ and _ contents = and _ manager_operation = | Reveal : Signature.Public_key.t -> Kind.reveal manager_operation - | Transaction : transaction -> Kind.transaction manager_operation + | Transaction : { + amount : Tez.tez; + parameters : Script.lazy_expr; + entrypoint : Entrypoint.t; + destination : Destination.t; + } + -> Kind.transaction manager_operation | Origination : origination -> Kind.origination manager_operation | Delegation : Signature.Public_key_hash.t option diff --git a/src/proto_alpha/lib_protocol/apply.ml b/src/proto_alpha/lib_protocol/apply.ml index b3caabbcb873f4289272736a83150d120c39870c..63fa38d88d70a7c3e91baf5f99856bdf21973658 100644 --- a/src/proto_alpha/lib_protocol/apply.ml +++ b/src/proto_alpha/lib_protocol/apply.ml @@ -1185,8 +1185,10 @@ let apply_internal_manager_operation_content : match operation with | Transaction { - transaction = - {amount; parameters = _; destination = Contract contract; entrypoint}; + amount; + unparsed_parameters = _; + destination = Contract contract; + entrypoint; location; parameters_ty; parameters = typed_parameters; @@ -1209,8 +1211,10 @@ let apply_internal_manager_operation_content : operations ) | Transaction { - transaction = - {amount; destination = Tx_rollup dst; entrypoint; parameters = _}; + amount; + destination = Tx_rollup dst; + entrypoint; + unparsed_parameters = _; location = _; parameters_ty; parameters; diff --git a/src/proto_alpha/lib_protocol/apply_results.ml b/src/proto_alpha/lib_protocol/apply_results.ml index 065e5d6c4f0c0820d44b59769cc4b1f745aeaa94..25885de8ee7c824194f268be20bf5eae40f05c6d 100644 --- a/src/proto_alpha/lib_protocol/apply_results.ml +++ b/src/proto_alpha/lib_protocol/apply_results.ml @@ -47,7 +47,13 @@ let error_encoding = let trace_encoding = make_trace_encoding error_encoding type 'kind internal_manager_operation = - | Transaction : transaction -> Kind.transaction internal_manager_operation + | Transaction : { + amount : Tez.tez; + parameters : Script.lazy_expr; + entrypoint : Entrypoint.t; + destination : Destination.t; + } + -> Kind.transaction internal_manager_operation | Origination : origination -> Kind.origination internal_manager_operation | Delegation : Signature.Public_key_hash.t option @@ -71,7 +77,8 @@ let manager_operation_of_internal_operation (type kind) (operation : kind internal_manager_operation) : kind Alpha_context.manager_operation = match operation with - | Transaction transaction -> Transaction transaction + | Transaction {amount; parameters; entrypoint; destination} -> + Transaction {amount; parameters; entrypoint; destination} | Origination origination -> Origination origination | Delegation delegate -> Delegation delegate @@ -80,7 +87,9 @@ let contents_of_internal_operation (type kind) kind internal_contents = let operation : kind internal_manager_operation = match operation with - | Transaction {transaction; _} -> Transaction transaction + | Transaction {destination; amount; entrypoint; unparsed_parameters; _} -> + Transaction + {destination; amount; entrypoint; parameters = unparsed_parameters} | Origination {origination; _} -> Origination origination | Delegation delegate -> Delegation delegate in diff --git a/src/proto_alpha/lib_protocol/apply_results.mli b/src/proto_alpha/lib_protocol/apply_results.mli index cea567bab634944e8908b2b7cb4327e7ae33fb07..5b527e8a48178385f8e55e6a367c67dcc93f5369 100644 --- a/src/proto_alpha/lib_protocol/apply_results.mli +++ b/src/proto_alpha/lib_protocol/apply_results.mli @@ -34,8 +34,12 @@ open Alpha_context type 'kind internal_manager_operation = - | Transaction : - Alpha_context.transaction + | Transaction : { + amount : Tez.tez; + parameters : Script.lazy_expr; + entrypoint : Entrypoint.t; + destination : Destination.t; + } -> Kind.transaction internal_manager_operation | Origination : Alpha_context.origination diff --git a/src/proto_alpha/lib_protocol/operation_repr.ml b/src/proto_alpha/lib_protocol/operation_repr.ml index dec9abba76d0d7b20fdd652bfc6fcbd624f384d5..58daffd5848ccb75075786cf730846eea73d5e53 100644 --- a/src/proto_alpha/lib_protocol/operation_repr.ml +++ b/src/proto_alpha/lib_protocol/operation_repr.ml @@ -203,13 +203,6 @@ type raw = Operation.t = {shell : Operation.shell_header; proto : bytes} let raw_encoding = Operation.encoding -type transaction = { - amount : Tez_repr.tez; - parameters : Script_repr.lazy_expr; - entrypoint : Entrypoint_repr.t; - destination : Destination_repr.t; -} - type origination = { delegate : Signature.Public_key_hash.t option; script : Script_repr.t; @@ -286,7 +279,13 @@ and _ contents = and _ manager_operation = | Reveal : Signature.Public_key.t -> Kind.reveal manager_operation - | Transaction : transaction -> Kind.transaction manager_operation + | Transaction : { + amount : Tez_repr.tez; + parameters : Script_repr.lazy_expr; + entrypoint : Entrypoint_repr.t; + destination : Destination_repr.t; + } + -> Kind.transaction manager_operation | Origination : origination -> Kind.origination manager_operation | Delegation : Signature.Public_key_hash.t option diff --git a/src/proto_alpha/lib_protocol/operation_repr.mli b/src/proto_alpha/lib_protocol/operation_repr.mli index de7e706f444b378e08855d7613515e76a9b5721d..d669650e67cafd5aca7e9150270a7c1759fdfad5 100644 --- a/src/proto_alpha/lib_protocol/operation_repr.mli +++ b/src/proto_alpha/lib_protocol/operation_repr.mli @@ -185,13 +185,6 @@ type raw = Operation.t = {shell : Operation.shell_header; proto : bytes} val raw_encoding : raw Data_encoding.t -type transaction = { - amount : Tez_repr.tez; - parameters : Script_repr.lazy_expr; - entrypoint : Entrypoint_repr.t; - destination : Destination_repr.t; -} - type origination = { delegate : Signature.Public_key_hash.t option; script : Script_repr.t; @@ -316,7 +309,13 @@ and _ manager_operation = | Reveal : Signature.Public_key.t -> Kind.reveal manager_operation (* [Transaction] of some amount to some destination contract. It can also be used to execute/call smart-contracts. *) - | Transaction : transaction -> Kind.transaction manager_operation + | Transaction : { + amount : Tez_repr.tez; + parameters : Script_repr.lazy_expr; + entrypoint : Entrypoint_repr.t; + destination : Destination_repr.t; + } + -> Kind.transaction manager_operation (* [Origination] of a contract using a smart-contract [script] and initially credited with the amount [credit]. *) | Origination : origination -> Kind.origination manager_operation diff --git a/src/proto_alpha/lib_protocol/script_interpreter_defs.ml b/src/proto_alpha/lib_protocol/script_interpreter_defs.ml index 5f583d671aa8cd1264da030de49f4982abf1c858..d434ba18bfb019f330e73fce871ec6e9167746e3 100644 --- a/src/proto_alpha/lib_protocol/script_interpreter_defs.ml +++ b/src/proto_alpha/lib_protocol/script_interpreter_defs.ml @@ -562,14 +562,20 @@ let transfer (ctxt, sc) gas amount location parameters_ty parameters destination >>?= fun (unparsed_parameters, ctxt) -> Gas.consume ctxt (Script.strip_locations_cost unparsed_parameters) >>?= fun ctxt -> - let transaction = - let parameters = - Script.lazy_expr (Micheline.strip_locations unparsed_parameters) - in - {amount; destination; entrypoint; parameters} + let unparsed_parameters = + Script.lazy_expr (Micheline.strip_locations unparsed_parameters) in let operation = - Transaction {transaction; location; parameters_ty; parameters} + Transaction + { + destination; + amount; + entrypoint; + location; + parameters_ty; + parameters; + unparsed_parameters; + } in fresh_internal_nonce ctxt >>?= fun (ctxt, nonce) -> let iop = {source = sc.self; operation; nonce} in diff --git a/src/proto_alpha/lib_protocol/script_typed_ir.ml b/src/proto_alpha/lib_protocol/script_typed_ir.ml index f298844ec1a9f74c802faf38f705d5ef1101026b..6c7e45d3c81038642ce394879d25a8c82835842a 100644 --- a/src/proto_alpha/lib_protocol/script_typed_ir.ml +++ b/src/proto_alpha/lib_protocol/script_typed_ir.ml @@ -1368,10 +1368,13 @@ and ('input, 'output) view_signature = and 'kind manager_operation = | Transaction : { - transaction : Alpha_context.transaction; + destination : Destination.t; + amount : Tez.tez; + entrypoint : Entrypoint.t; location : Script.location; parameters_ty : ('a, _) ty; parameters : 'a; + unparsed_parameters : Script.lazy_expr; } -> Kind.transaction manager_operation | Origination : { diff --git a/src/proto_alpha/lib_protocol/script_typed_ir.mli b/src/proto_alpha/lib_protocol/script_typed_ir.mli index 74817a1020f202a73942b78291bdd78d0e2680b8..f2d0f2b2f7484771dbfb9bcd4a086a6b2ccebd67 100644 --- a/src/proto_alpha/lib_protocol/script_typed_ir.mli +++ b/src/proto_alpha/lib_protocol/script_typed_ir.mli @@ -1496,15 +1496,18 @@ and ('input, 'output) view_signature = and 'kind manager_operation = | Transaction : { - (* The [transaction.parameters] field may seem useless since we have + (* The [unparsed_parameters] field may seem useless since we have access to a typed version of the field (with [parameters_ty] and [parameters]), but we keep it so that we do not have to unparse the typed version in order to produce the receipt ([Apply_results.internal_manager_operation]). *) - transaction : Alpha_context.transaction; + destination : Destination.t; + amount : Tez.tez; + entrypoint : Entrypoint.t; location : Script.location; parameters_ty : ('a, _) ty; parameters : 'a; + unparsed_parameters : Script.lazy_expr; } -> Kind.transaction manager_operation | Origination : { diff --git a/src/proto_alpha/lib_protocol/test/integration/michelson/test_ticket_accounting.ml b/src/proto_alpha/lib_protocol/test/integration/michelson/test_ticket_accounting.ml index 5abb588441539aa305ae9aee2d37221acf6bdf93..0c1a1b0816ad0f59695a9a46483f46f7caa9d937 100644 --- a/src/proto_alpha/lib_protocol/test/integration/michelson/test_ticket_accounting.ml +++ b/src/proto_alpha/lib_protocol/test/integration/michelson/test_ticket_accounting.ml @@ -391,14 +391,11 @@ let transfer_operation ctxt ~src ~destination ~arg_type ~arg = operation = Transaction { - transaction = - { - amount = Tez.zero; - parameters = - Script.lazy_expr @@ Micheline.strip_locations params_node; - entrypoint = Entrypoint.default; - destination = Destination.Contract destination; - }; + amount = Tez.zero; + unparsed_parameters = + Script.lazy_expr @@ Micheline.strip_locations params_node; + entrypoint = Entrypoint.default; + destination = Destination.Contract destination; location = Micheline.dummy_location; parameters_ty = arg_type; parameters = arg; diff --git a/src/proto_alpha/lib_protocol/test/integration/michelson/test_ticket_operations_diff.ml b/src/proto_alpha/lib_protocol/test/integration/michelson/test_ticket_operations_diff.ml index 986c0c83fc2afd06afb97567fb57bd01a7b97b55..8a459257bc42dad2de8020d1622a601145e8d32b 100644 --- a/src/proto_alpha/lib_protocol/test/integration/michelson/test_ticket_operations_diff.ml +++ b/src/proto_alpha/lib_protocol/test/integration/michelson/test_ticket_operations_diff.ml @@ -298,14 +298,11 @@ let transfer_operation ~incr ~src ~destination ~parameters_ty ~parameters = operation = Transaction { - transaction = - { - amount = Tez.zero; - parameters = - Script.lazy_expr @@ Micheline.strip_locations params_node; - entrypoint = Entrypoint.default; - destination = Destination.Contract destination; - }; + amount = Tez.zero; + unparsed_parameters = + Script.lazy_expr @@ Micheline.strip_locations params_node; + entrypoint = Entrypoint.default; + destination = Destination.Contract destination; location = Micheline.dummy_location; parameters_ty; parameters; @@ -334,14 +331,11 @@ let transfer_operation_to_tx_rollup ~incr ~src ~parameters_ty ~parameters operation = Transaction { - transaction = - { - amount = Tez.zero; - parameters = - Script.lazy_expr @@ Micheline.strip_locations params_node; - entrypoint = Tx_rollup.deposit_entrypoint; - destination = Destination.Tx_rollup tx_rollup; - }; + amount = Tez.zero; + unparsed_parameters = + Script.lazy_expr @@ Micheline.strip_locations params_node; + entrypoint = Tx_rollup.deposit_entrypoint; + destination = Destination.Tx_rollup tx_rollup; location = Micheline.dummy_location; parameters_ty; parameters; diff --git a/src/proto_alpha/lib_protocol/ticket_operations_diff.ml b/src/proto_alpha/lib_protocol/ticket_operations_diff.ml index 373fb79f4dccf6e11b57a2734c894280d192acf1..f38d1aa7c21138fdeb79fc59130a054209f2dc7d 100644 --- a/src/proto_alpha/lib_protocol/ticket_operations_diff.ml +++ b/src/proto_alpha/lib_protocol/ticket_operations_diff.ml @@ -240,13 +240,10 @@ let tickets_of_operation ctxt match operation with | Transaction { - transaction = - { - amount = _; - parameters = _; - entrypoint; - destination = Destination.Contract destination; - }; + amount = _; + unparsed_parameters = _; + entrypoint; + destination = Destination.Contract destination; location; parameters_ty; parameters; @@ -260,13 +257,10 @@ let tickets_of_operation ctxt ~parameters | Transaction { - transaction = - { - destination = Destination.Tx_rollup tx_rollup_dest; - parameters = _; - entrypoint; - amount = _; - }; + destination = Destination.Tx_rollup tx_rollup_dest; + unparsed_parameters = _; + entrypoint; + amount = _; location = _; parameters_ty; parameters; diff --git a/src/proto_alpha/lib_protocol/tx_rollup_ticket.ml b/src/proto_alpha/lib_protocol/tx_rollup_ticket.ml index 066549e158d09a27236ee1b6eb635abd8cebe206..1813562a765a405d1de3396c3e60513d2318b70a 100644 --- a/src/proto_alpha/lib_protocol/tx_rollup_ticket.ml +++ b/src/proto_alpha/lib_protocol/tx_rollup_ticket.ml @@ -70,7 +70,7 @@ let parse_ticket_and_operation ~consume_deserialization_gas ~ticketer ~contents >>=? fun (parameters_expr, ctxt) -> Gas.consume ctxt (Script.strip_locations_cost parameters_expr) >>?= fun ctxt -> - let parameters = + let unparsed_parameters = Script.lazy_expr (Micheline.strip_locations parameters_expr) in fresh_internal_nonce ctxt >>?= fun (ctxt, nonce) -> @@ -82,8 +82,10 @@ let parse_ticket_and_operation ~consume_deserialization_gas ~ticketer ~contents operation = Transaction { - transaction = - {amount = Tez.zero; parameters; destination; entrypoint}; + amount = Tez.zero; + unparsed_parameters; + destination; + entrypoint; location = Micheline.location parameters_expr; parameters_ty = ticket_ty; parameters = ticket;