Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

contracts: Make Origin information available #13708

Merged
merged 70 commits into from
May 2, 2023

Conversation

juangirini
Copy link
Contributor

@juangirini juangirini commented Mar 24, 2023

Fix #13644

What does this PR do?

It allows root origin to call contracts, and add the caller_is_root method to the Ext trait to identify such a call. Note that Root is still not allowed in any of the other dispatchables (except for set_code that was unmodified).

What's changed?

  • A new enum has been created: Origin. It can be seen as a subset of the RuntimeOrigin with only the two accepted origins: Signed and Root. Note that Origin can only be Root if the caller is the origin.

  • A new function ensure_origin has been added to the Invokables trait to ensure that the given origin is allowed to invoke.

  • The ensure_signed in the dispatchables call, instantiate and instantiate_with_code has been removed and replaced with the Invokables::ensure_origin function that is called inside Invokables::run_guarded. This implies that calling one of any of these dispatchables would not be rejected at the top of the function but rather down the line, making the PostDispatchInfo.actual_weight be Some(x) instead of None (that was before).

New behaviours to consider

  • When the origin is root there is not any charge or refund of storage deposit.

@juangirini juangirini added A0-please_review Pull request needs code review. B0-silent Changes should not be mentioned in any release notes C1-low PR touches the given topic and has a low impact on builders. B1-note_worthy Changes should be noted in the release notes D5-nicetohaveaudit ⚠️ PR contains trivial changes to logic that should be properly reviewed. and removed B0-silent Changes should not be mentioned in any release notes B1-note_worthy Changes should be noted in the release notes labels Mar 28, 2023
@juangirini juangirini marked this pull request as ready for review March 28, 2023 10:35
@juangirini juangirini requested a review from athei as a code owner March 28, 2023 10:35
frame/contracts/src/exec.rs Outdated Show resolved Hide resolved
frame/contracts/src/exec.rs Outdated Show resolved Hide resolved
frame/contracts/src/exec.rs Outdated Show resolved Hide resolved
frame/contracts/src/lib.rs Outdated Show resolved Hide resolved
frame/contracts/src/storage/meter.rs Outdated Show resolved Hide resolved
@juangirini juangirini changed the title contracts: Make Origin information available [WIP] contracts: Make Origin information available Mar 28, 2023
@juangirini juangirini added A3-in_progress Pull request is in progress. No review needed at this stage. and removed A0-please_review Pull request needs code review. labels Mar 28, 2023
@paritytech-cicd-pr
Copy link

The CI pipeline was cancelled due to failure one of the required jobs.
Job name: test-linux-stable
Logs: https://gitlab.parity.io/parity/mirrors/substrate/-/jobs/2756749

@juangirini juangirini requested a review from athei May 1, 2023 15:15
@@ -534,6 +534,38 @@ benchmarks! {
let origin = RawOrigin::Signed(instance.caller.clone());
}: call(origin, instance.addr, 0u32.into(), Weight::MAX, None, vec![])

#[pov_mode = Measured]
seal_caller_is_root {
Copy link
Member

Choose a reason for hiding this comment

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

Yes you are right. Getters copy to memory not return on stack. Forgot about that. So you need to roll this back.

frame/contracts/src/wasm/runtime.rs Outdated Show resolved Hide resolved
@juangirini juangirini requested a review from athei May 2, 2023 09:37
Copy link
Contributor

@agryaznov agryaznov left a comment

Choose a reason for hiding this comment

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

overall, lgtm

frame/contracts/src/exec.rs Show resolved Hide resolved
frame/contracts/src/lib.rs Outdated Show resolved Hide resolved
frame/contracts/src/lib.rs Outdated Show resolved Hide resolved
frame/contracts/src/wasm/runtime.rs Outdated Show resolved Hide resolved
frame/contracts/src/wasm/runtime.rs Outdated Show resolved Hide resolved
@juangirini juangirini removed the A0-please_review Pull request needs code review. label May 2, 2023
@juangirini
Copy link
Contributor Author

bot merge

@paritytech-processbot
Copy link

Error: Statuses failed for b3c8445

@juangirini
Copy link
Contributor Author

bot merge

@paritytech-processbot
Copy link

Error: Statuses failed for b3c8445

@juangirini
Copy link
Contributor Author

bot rebase

@paritytech-processbot
Copy link

Rebased

@juangirini
Copy link
Contributor Author

bot merge

@paritytech-processbot
Copy link

Waiting for commit status.

@paritytech-processbot
Copy link

Merge cancelled due to error. Error: Statuses failed for fe39e1f

@juangirini
Copy link
Contributor Author

bot merge force

@paritytech-processbot paritytech-processbot bot merged commit f49b178 into master May 2, 2023
@paritytech-processbot paritytech-processbot bot deleted the jg/make-origin-available branch May 2, 2023 16:45
gpestana pushed a commit that referenced this pull request May 4, 2023
* contracts: allow root calls

* contracts: update ContractOrigin

* contracts: test allow root calls

* contracts: rustfmt

* contracts: test root caller traps

* contracts: add Caller enum

* contracts: improve some comments

* contracts: improve some comments

* contracts: format code with +nightly

* contracts: fix failing tests

* contracts: improve charte instantiate call when root origin

* contract: refactor common, call and instantiate inputs

* contracts: fix some failing test

* contracts: trap caller when there is no account id

* Update frame/contracts/src/lib.rs

Co-authored-by: PG Herveou <[email protected]>

* Update frame/contracts/src/exec.rs

Co-authored-by: PG Herveou <[email protected]>

* contracts: make `into_deposit` return zero when the origin is root

* contracts: cargo fmt

* contracts: charging and terminating tests refactored

* contracts: improved errors

* contracts: refactor & merge ContractOrigin cand Caller enums

* Update frame/contracts/src/lib.rs

Co-authored-by: Sasha Gryaznov <[email protected]>

* contracts: apply suggested pr changes

* contracts: rename Caller to Origin

* contracts: refactor run fn

* contracts: cr improvements

* contracts: allow root to use delegate call

* contracts: add caller_is_root weight

* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_contracts

* contracts: add caller_is_root benchmarking

* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_contracts

* contracts: add caller_is_root benchmarking

* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_contracts

* contracts: add some minor improvements

* contracts: make caller_is_root runtime fn unstable

* contracts: fix failing wasm test

* contracts: update benchmarking for origin_is_root

* contracts: improve seal_caller_is_root benchmarking

* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_contracts

* contracts: add small pr improvements

* contracts: fix broken tests after master merge

* contracts: acknowledge the default storage deposit limit

* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_contracts

* contracts: move origin to CommonInput

* contracts: add some extra tests

* contracts: move ensure origin logic inside invokable::run_guarded

* contracts: add minor improvements

* contracts: fix caller_is_root benchmarking

* contracts: improve function description

* Update frame/contracts/src/lib.rs

Co-authored-by: Sasha Gryaznov <[email protected]>

* Update frame/contracts/src/lib.rs

Co-authored-by: Sasha Gryaznov <[email protected]>

* Update frame/contracts/src/wasm/runtime.rs

Co-authored-by: Sasha Gryaznov <[email protected]>

* contracts: improve function description

---------

Co-authored-by: parity-processbot <>
Co-authored-by: PG Herveou <[email protected]>
Co-authored-by: Sasha Gryaznov <[email protected]>
nathanwhit pushed a commit to nathanwhit/substrate that referenced this pull request Jul 19, 2023
* contracts: allow root calls

* contracts: update ContractOrigin

* contracts: test allow root calls

* contracts: rustfmt

* contracts: test root caller traps

* contracts: add Caller enum

* contracts: improve some comments

* contracts: improve some comments

* contracts: format code with +nightly

* contracts: fix failing tests

* contracts: improve charte instantiate call when root origin

* contract: refactor common, call and instantiate inputs

* contracts: fix some failing test

* contracts: trap caller when there is no account id

* Update frame/contracts/src/lib.rs

Co-authored-by: PG Herveou <[email protected]>

* Update frame/contracts/src/exec.rs

Co-authored-by: PG Herveou <[email protected]>

* contracts: make `into_deposit` return zero when the origin is root

* contracts: cargo fmt

* contracts: charging and terminating tests refactored

* contracts: improved errors

* contracts: refactor & merge ContractOrigin cand Caller enums

* Update frame/contracts/src/lib.rs

Co-authored-by: Sasha Gryaznov <[email protected]>

* contracts: apply suggested pr changes

* contracts: rename Caller to Origin

* contracts: refactor run fn

* contracts: cr improvements

* contracts: allow root to use delegate call

* contracts: add caller_is_root weight

* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_contracts

* contracts: add caller_is_root benchmarking

* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_contracts

* contracts: add caller_is_root benchmarking

* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_contracts

* contracts: add some minor improvements

* contracts: make caller_is_root runtime fn unstable

* contracts: fix failing wasm test

* contracts: update benchmarking for origin_is_root

* contracts: improve seal_caller_is_root benchmarking

* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_contracts

* contracts: add small pr improvements

* contracts: fix broken tests after master merge

* contracts: acknowledge the default storage deposit limit

* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_contracts

* contracts: move origin to CommonInput

* contracts: add some extra tests

* contracts: move ensure origin logic inside invokable::run_guarded

* contracts: add minor improvements

* contracts: fix caller_is_root benchmarking

* contracts: improve function description

* Update frame/contracts/src/lib.rs

Co-authored-by: Sasha Gryaznov <[email protected]>

* Update frame/contracts/src/lib.rs

Co-authored-by: Sasha Gryaznov <[email protected]>

* Update frame/contracts/src/wasm/runtime.rs

Co-authored-by: Sasha Gryaznov <[email protected]>

* contracts: improve function description

---------

Co-authored-by: parity-processbot <>
Co-authored-by: PG Herveou <[email protected]>
Co-authored-by: Sasha Gryaznov <[email protected]>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
B0-silent Changes should not be mentioned in any release notes C1-low PR touches the given topic and has a low impact on builders. D5-nicetohaveaudit ⚠️ PR contains trivial changes to logic that should be properly reviewed.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

contracts: Make Origin information available
8 participants