New Payment objects in blackbox execution#2285
Conversation
|
Contract comparison - from cb80fcb to 8686df9
|
There was a problem hiding this comment.
Pull request overview
This PR updates the scenario/interaction payment plumbing to use the newer Payment / PaymentVec types when generating scenario tx-steps, replacing the legacy “full payment data” representation.
Changes:
- Rename
TxPayment::into_full_payment_data()toTxPayment::into_scenario_payments()and replaceFullPaymentDatawithScenarioPayments. - Switch scenario tx-step generation (
call,transfer,deploy) to consumeScenarioPaymentsand buildTxESDTentries fromPayment. - Add conversions to support
Payment/PaymentVecin scenario/VM paths (e.g.,TxESDT: From<Payment>,MultiEsdtPayment::into_payment_vec()), plus corresponding import/usage updates.
Reviewed changes
Copilot reviewed 26 out of 26 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| framework/scenario/src/scenario/tx_to_step/tx_to_step_transfer.rs | Use into_scenario_payments() when building transfer steps. |
| framework/scenario/src/scenario/tx_to_step/tx_to_step_deploy.rs | Use into_scenario_payments() when building deploy steps. |
| framework/scenario/src/scenario/tx_to_step/tx_to_step_call.rs | Use into_scenario_payments() and convert Payment items into TxESDT. |
| framework/scenario/src/scenario/model/transaction/tx_esdt.rs | Add From<Payment> to support scenario conversion. |
| framework/base/src/types/managed/wrapped/token/esdt_token_payment.rs | Add MultiEsdtPayment::into_payment_vec() conversion. |
| framework/base/src/types/interaction/tx_payment/tx_payment_vec_ref.rs | Update blanket AsRef<PaymentVec> impl to produce ScenarioPayments. |
| framework/base/src/types/interaction/tx_payment/tx_payment_triple.rs | Update tuple-payment conversion to return ScenarioPayments. |
| framework/base/src/types/interaction/tx_payment/tx_payment_single_esdt_ref.rs | Update single-ESDT(ref) to produce ScenarioPayments using Payment. |
| framework/base/src/types/interaction/tx_payment/tx_payment_single_esdt.rs | Update single-ESDT to produce ScenarioPayments using Payment. |
| framework/base/src/types/interaction/tx_payment/tx_payment_payment_refs.rs | Update PaymentRefs conversion to ScenarioPayments. |
| framework/base/src/types/interaction/tx_payment/tx_payment_payment_ref.rs | Update payment-ref macro impl to into_scenario_payments(). |
| framework/base/src/types/interaction/tx_payment/tx_payment_payment_option.rs | Update Option<P> payment conversion to ScenarioPayments. |
| framework/base/src/types/interaction/tx_payment/tx_payment_payment.rs | Update Payment conversion to ScenarioPayments. |
| framework/base/src/types/interaction/tx_payment/tx_payment_not_payable.rs | Update “no payment” marker to return ScenarioPayments::default(). |
| framework/base/src/types/interaction/tx_payment/tx_payment_none.rs | Update () payment to return ScenarioPayments::default(). |
| framework/base/src/types/interaction/tx_payment/tx_payment_multi_transfer_marker.rs | Update multi-transfer marker to return ScenarioPayments backed by PaymentVec. |
| framework/base/src/types/interaction/tx_payment/tx_payment_multi_esdt.rs | Update multi-ESDT payment to return ScenarioPayments backed by PaymentVec. |
| framework/base/src/types/interaction/tx_payment/tx_payment_multi_egld_or_esdt.rs | Update multi-(EGLD/ESDT) payment to return ScenarioPayments backed by PaymentVec. |
| framework/base/src/types/interaction/tx_payment/tx_payment_egld_or_multi_esdt_refs.rs | Update dual-type refs conversion to ScenarioPayments. |
| framework/base/src/types/interaction/tx_payment/tx_payment_egld_or_multi_esdt.rs | Update dual-type conversion to ScenarioPayments. |
| framework/base/src/types/interaction/tx_payment/tx_payment_egld_or_esdt_refs.rs | Update dual-type refs conversion to ScenarioPayments. |
| framework/base/src/types/interaction/tx_payment/tx_payment_egld_or_esdt.rs | Update dual-type conversion to ScenarioPayments. |
| framework/base/src/types/interaction/tx_payment/tx_payment_egld.rs | Update EGLD conversion to ScenarioPayments. |
| framework/base/src/types/interaction/tx_payment.rs | Rename the trait API + rename the intermediate struct to ScenarioPayments and switch to PaymentVec. |
| framework/base/src/types/interaction/expr/test_esdt_transfer.rs | Update test helper to implement into_scenario_payments(). |
| chain/vm/src/host/context/managed_type_container/tx_managed_buffer.rs | Update error message text for malformed managed-vec payment payloads. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| fn into_scenario_payments(self, _env: &Env) -> ScenarioPayments<Env::Api> { | ||
| ScenarioPayments { | ||
| egld: None, | ||
| multi_esdt: self.clone(), | ||
| multi_esdt: self.clone().into_payment_vec(), | ||
| } |
There was a problem hiding this comment.
into_scenario_payments() uses self.clone().into_payment_vec() to reinterpret MultiEgldOrEsdtPayment (which stores BigUint amounts and supports zero/no-payment entries) as PaymentVec (which semantically requires non-zero amounts). This can violate Payment’s non-zero invariant. Consider converting each element to Payment with validation/filtering instead of using into_payment_vec() here.
Pull request overview
This PR updates the scenario/interaction payment plumbing to use the newer
Payment/PaymentVectypes when generating scenario tx-steps, replacing the legacy “full payment data” representation.Changes:
TxPayment::into_full_payment_data()toTxPayment::into_scenario_payments()and replaceFullPaymentDatawithScenarioPayments.call,transfer,deploy) to consumeScenarioPaymentsand buildTxESDTentries fromPayment.Payment/PaymentVecin scenario/VM paths (e.g.,TxESDT: From<Payment>,MultiEsdtPayment::into_payment_vec()), plus corresponding import/usage updates.