Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ink_e2e] resolve DispatchError error details for dry-runs #1994

Merged
merged 21 commits into from
Nov 16, 2023

Conversation

ascjones
Copy link
Collaborator

@ascjones ascjones commented Nov 15, 2023

Currently for dry runs we only get raw dispatch errors e.g. ModuleError { index: 21, error: [22, 0, 0, 0],. This PR will resolve the error message to a more useful e.g.InstantiateDryRun(DryRunError { debug_message: "", error: Module(ModuleError(<Contracts::StorageDepositNotEnoughFunds>)) })

The API for executing dry runs will be aligned with the transaction execution methods by returning a top level Result. The signatures for the dry_run methods are now:

pub async fn dry_run(&mut self) -> Result<CallDryRunResult<E, RetType>, B::Error>;
pub async fn dry_run(&mut self) -> Result<InstantiateDryRunResult<E>, B::Error>

InstantiateDryRunResult has been added in this PR to encapsulate the returned result, similar to the existing CallDryRunResult.

  • y/n | Does it introduce breaking changes?

@ascjones ascjones marked this pull request as ready for review November 16, 2023 13:05
crates/e2e/Cargo.toml Outdated Show resolved Hide resolved
Copy link
Contributor

@SkymanOne SkymanOne left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Just some nits

/// Returns the return value as raw bytes of the message from the dry-run.
///
/// Panics if the dry-run message call failed to execute.
pub fn return_data(&self) -> &[u8] {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can't we decode the data?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can already be done constructor_result above. That said I copied this from the CallDryRunResult, and I don't think this is super useful for constructors, so have deleted it.


/// Transforms a [`ContractResult`] from a dry run into a [`Result`] type, containing
/// details of the [`DispatchError`] if the dry run failed.
fn contract_result_to_result<V>(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't this be more generically be implemented with From trait?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case we need the &self to get the metadata for decoding the DispatchError

Copy link

github-actions bot commented Nov 16, 2023

🦑 📈 ink! Example Contracts ‒ Changes Report 📉 🦑

These are the results when building the integration-tests/* contracts from this branch with cargo-contract and comparing them to ink! master:

Contract Upstream Size (kB) PR Size (kB) Diff (kB) Diff (%) Change
basic-contract-caller 2.967 2.967 0 0
basic-contract-caller/other-contract 1.337 1.337 0 0
call-builder-return-value 8.735 8.735 0 0
call-runtime 1.769 1.769 0 0
conditional-compilation 1.209 1.209 0 0
contract-storage 7.171 7.171 0 0
contract-terminate 1.092 1.092 0 0
contract-transfer 1.444 1.444 0 0
custom-allocator 7.428 7.428 0 0
dns 7.249 7.249 0 0
e2e-call-runtime 1.058 1.058 0 0
e2e-runtime-only-backend 1.635 1.635 0 0
erc1155 13.962 13.962 0 0
erc20 6.687 6.687 0 0
erc721 9.64 9.64 0 0
events 4.763 4.763 0 0
flipper 1.393 1.393 0 0
incrementer 1.221 1.221 0 0
lang-err-integration-tests/call-builder-delegate 2.317 2.317 0 0
lang-err-integration-tests/call-builder 4.847 4.847 0 0
lang-err-integration-tests/constructors-return-value 1.773 1.773 0 0
lang-err-integration-tests/contract-ref 4.328 4.328 0 0
lang-err-integration-tests/integration-flipper 1.571 1.571 0 0
mapping-integration-tests 7.685 7.685 0 0
mother 9.508 9.508 0 0
multi-contract-caller 5.924 5.924 0 0
multi-contract-caller/accumulator 1.095 1.095 0 0
multi-contract-caller/adder 1.669 1.669 0 0
multi-contract-caller/subber 1.689 1.689 0 0
multisig 21.471 21.471 0 0
payment-channel 5.501 5.501 0 0
sr25519-verification 0.865 0.865 0 0
static-buffer 1.405 1.405 0 0
trait-dyn-cross-contract-calls 2.466 2.466 0 0
trait-dyn-cross-contract-calls/contracts/incrementer 1.305 1.305 0 0
trait-erc20 7.063 7.063 0 0
trait-flipper 1.209 1.209 0 0
trait-incrementer 1.37 1.37 0 0
upgradeable-contracts/delegator 2.908 2.908 0 0
upgradeable-contracts/delegator/delegatee 1.369 1.369 0 0
upgradeable-contracts/set-code-hash 1.464 1.464 0 0
upgradeable-contracts/set-code-hash/updated-incrementer 1.443 1.443 0 0
wildcard-selector 2.622 2.622 0 0

Link to the run | Last update: Thu Nov 16 17:30:11 CET 2023

@codecov-commenter
Copy link

Codecov Report

Attention: 2 lines in your changes are missing coverage. Please review.

Comparison is base (762730c) 53.24% compared to head (852aaeb) 53.25%.
Report is 2 commits behind head on master.

Files Patch % Lines
crates/e2e/src/error.rs 0.00% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1994      +/-   ##
==========================================
+ Coverage   53.24%   53.25%   +0.01%     
==========================================
  Files         219      220       +1     
  Lines        6838     6846       +8     
==========================================
+ Hits         3641     3646       +5     
- Misses       3197     3200       +3     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@ascjones ascjones merged commit cd0670a into master Nov 16, 2023
42 checks passed
@ascjones ascjones deleted the aj/e2e-dry-run-result branch November 16, 2023 16:14
@SkymanOne SkymanOne mentioned this pull request Nov 30, 2023
@SkymanOne SkymanOne mentioned this pull request Mar 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants