-
Notifications
You must be signed in to change notification settings - Fork 2.7k
contracts: Add storage deposits #10082
Conversation
|
/benchmark runtime pallet pallet_contracts |
|
Benchmark Runtime Pallet for branch "at-storage-deposit" with command cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_contracts --extrinsic="*" --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/contracts/src/weights.rs --template=./.maintain/frame-weight-template.hbs ResultsERROR: Unable to push ./frame/contracts/src/weights.rs |
fe1efe5 to
190b2fe
Compare
|
/benchmark runtime pallet pallet_contracts |
|
Benchmark Runtime Pallet for branch "at-storage-deposit" with command cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_contracts --extrinsic="*" --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/contracts/src/weights.rs --template=./.maintain/frame-weight-template.hbs Results |
c355e87 to
d36a09f
Compare
d36a09f to
8b92865
Compare
|
/benchmark runtime pallet pallet_contracts |
|
Benchmark Runtime Pallet for branch "at-storage-deposit" with command cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_contracts --extrinsic="*" --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/contracts/src/weights.rs --template=./.maintain/frame-weight-template.hbs ResultsERROR: Unable to commit file ./frame/contracts/src/weights.rs |
ascjones
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just more superficial comments, nearly done
ascjones
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Co-authored-by: Andrew Jones <[email protected]>
|
bot merge |
* WIP display all events * Clean up and generalize displaying events * Fix multiple event new lines * Fmt * Create wrapper types for Display, derive Debug for originals * Control indentation of pretty printing * Indent events display * More tuning of runtime events pretty printing * Fmt * Use Display impls for printing events * Add DisplayTransferEvent * Namespace events * Add CodeStored and Instantiated events * Refactor Deploy command and use verbosity for events display * Fix up string message return * Code hash LowerHex and println after events * Use LowerHex api for Bytes * Parse code hash with 0x prefix * Fmt * Spawn canvas node for integration test * Increment attempts * Get the test running with spawned canvas node * Instantiate deploy works with manual node * Test works locally and cleans up temp dir * Fmt * Fix duplicate import * Build before testing so cargo-contract bin available for testing * Separate line for build * Extract decode_hex util fn * WIP failing Literal tests for SS58 account ids * Upgrade to nom 0.6 * Use nom error in custom error, impl FromStr * Fmt * Update lockfile after merge * Make TryFrom take reference for verbosity conversion * Fix parsing literals * Plumbing for custom encoders * Implement AccountId32 custom encoder * Refactor: extract env types * Test for encoding ss58 literal * Fmt and add back failing struct test * Use AccountId type in test * TEMP: Use github dependencies of scale-info and ink * Err for 256 bit ints * Use new registry type enumeration * Extract type lookup and introduce Encoder * WIP: extract Transcoder and implement env type decoding * Implement env type decoding, removes generic Input. Custom env decoders are trait objects so can't have generic type parameters on its decode method. * Fix AccountId decoding, add some debug logging * Test for different AccountId aliasing * Passing tests for AccountId encoding and fmt * Update scale-info and ink deps, patch ink deps for now * Update scale-info and ink deps, patch ink deps for now * Remove extrinsics feature * Dependencies * More deps * Cargo.lock * Cargo.lock * WIP upgrading to latest subxt and scale-info * More upgrading to latest subxt * Fix more errors * Fix up extrinsic commands * Refactor transcoder decode, handle Compact * Refactor transcoder encode, initial compact support * Fmt * Fix metadata file loading * Constructor arg rename * Enable tokio * Make instantiate work * Update contracts runtime from substrate-contracts-node * Fix warnings and add todo * Update subxt * Add missing import * Use explicit substrate branch to match subxt import * Remove sp_rpc dependency * Remove sp_rpc dependency * Use metadata to decode events * Fmt * Pretty print events * WIP custom transcoders for events * Custom transcoders for events working * Fix some warnings * Slim down bat dependency * Decode contract events * Use correct field for instantiated contract account * Fix warnings * Fix multiple line warning * Update contracts RPC types * Fmt * Fix deploy contract account * Use ink! master branch * Oops * Remove patches * Bump ink deps to rc6 * Update to latest subxt * Update to latest subxt * Fix errors after subxt update * Fix instantiate_with_code.rs * Update subxt * Add deserializing context * Fmt * Expose public metadata fields * Implement full metadata decoding * Cargo.lock * Update calls to work with storage_gas_limit from paritytech/substrate#10082 * Cargo.lock * Update to latest subxt * Fmt * WIP unify instantiate command * Fix call command errors * Main warning unused result * Call and instantiate warns and errors and fmt * Update to ink rc7 * Default to local contract wasm if none specified * Change instantiate endowment to value * Use latest subxt branch * Update to latest subxt * Unify call and instantiate arg names * Instantiate and call args consistency * Add todo comment for encoding message args * Refactor, tidy up call and instantiate * Display decoded contract event separately * Register env types with and without aliases * Add pretty print flag * WIP add upload * Wiring up upload code extrinsic * Download latest contracts node metadata * Wire up upload command and WIP manifest path * in! default features and cargo update * Add manifest path argument for extrinsics * Only fetch crate metadata once * Fmt * Cargo upgrade * Update substrate dependencies * Pretty print code upload dry run values * Extract name value println macro * Print code hash from upload extrinsic * Refactor upload code command * Pretty print instantiate results * Add salt arg to instantiate command * WIP custom events display, removes big bat dep * Extract method for printing RPC contract result * Ugly printing of events * Fix contract event decoding * Fmt * Pretty print event fields * Only print event fields if verbose * More event prettification * Fmt * Resolve some todos * Remove some code comments, moved to follow ups in PR * Refactor: extract compact encoding function * Fix storage_deposit_limit and add todo re: compact primitives * Add todo re: compact primitives * Cargo.lock * Use released substrate crates and subxt master * Fix encoding compact, inline for each uint * Fix encoding compact, inline for each uint * Add extrinsics markdown outline * Dynamic compact encoding * Replace bitvec todos with errs, added follow up in PR * Remove todo about friendly encoding error, add to PR follow ups * Rename codec to scale for test contract, fix some transcoding tests * Attempt to fix linking with __ink_generate_metadata * Update to ink rc8 * Add test for out of order composite fields * Update ink metadata version * Update ink metadata types and methods * Fix metadata error message * Add std feature to fix test compilation with inline contract * Fix out of order struct fields * Improve encoding of field error message * Fmt imports * Rename TypeLookupId to TypeLookup * Remove alias matching for custom env type transcoding * Fix variant encoding for maps and out of order fields * Add failing test & impl for compact struct transcoding * Use released version of pallet-contracts primitives * WIP attempting to fix compact struct transcoding * Fix compact struct decoding * Add todo for integration test * Renamed SconParseError * Failing test for invalid integer * Use nom-supreme for combinators, error handling * Use released subxt * Refactor integer parsing * Refactor char parsing * Refactor seq parsing * Refactor tuple parsing * Refactor unit tuple parsing * Refactor map parsing * Refactor bytes parsing * Remove final nom `map` free function usage * Use some postfix recognizes * Remove final recognize combinator * Use postfix value combinator * Use opt postfix combinator * Move entry point and top level parser to the top of the file * Inline some string parsers * Inline some local helper functions * Fix failing integer tests * Fix Rust ident parsing * Fix up integration test * Make clippy happy * Fmt * Clippy clippy clippy * Ignore integration test for CI * Support parsing underscore separators for integer literals * + sign prefix parses to signed int * Allow underscores for balance CLI args * Add helper function for handling runtime errors * Add helper function for displaying runtime module errors * Elide lifetime * Add some basic module level docs for transcoding * Improve error message where metadata file not found * Adding common args section to extrinsics.md * Move --dry-run to extrinisic opts and more docs * Move --storage-deposit-limit to ExtrinsicOpts, move ExtrinsicOpts to extrinsics. * Add instantiate docs * Add call docs * Update Extrinsics docs * Update Cargo.toml Co-authored-by: Alexander Theißen <[email protected]> * Don't wait for finalization before displaying transaction success * Update docs/extrinsics.md Co-authored-by: Alexander Theißen <[email protected]> * Remove static error detail lookup, since it may be inaccurate if the target chain differs * CLIPPY * Print debug message lines * Display not Debug return value * Fmt Co-authored-by: Alexander Theißen <[email protected]>
* Frame no longer needs to be mutable (refactoring artifact) * Remove Contract/Tombstone deposit * Add StorageMeter * cargo fmt * Fix weight annotation * cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_contracts --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/contracts/src/weights.rs --template=./.maintain/frame-weight-template.hbs * Simplify keep check for contract accounts - Make sure that the "base deposit" for each contract >= ed - Remove now obsolete checks when sneding away free balance * Remove unused imports and functions * Rename storage_limit to storage_deposit_limit * cargo fmt * Fix typo Co-authored-by: Michael Müller <[email protected]> * Finish up rename of storage_limit * Fix rpc tests * Make use of `StorageDepositLimitTooHigh` * Add tests and fix bugs discovered by tests * Add storage migration * Don't use u128 in RPC * Fix weight of migration * Rename `endowment` to `value` * Fix bug where contract couldn't get funded by a storage deposit - Make sure that contract gets funded from deposits before value is transferred - Don't reserve value at origin because otherwise funding isn't possible - Just transfer free balance and reserve it after the transfer - When refunding make sure that this refund can't dust the contract - Can only happen after a runtime upgrade where costs where upped - Add more tests * Apply suggestions from code review Co-authored-by: Andrew Jones <[email protected]> * Remove unused `fn storage_meter` * Fix copy pasta doc error * Import `MaxEncodeLen` from codec * Beautify RPC trait bounds * Add re-instrument behaviour to dispatchable doc * Make sure a account won't be destroyed a refund after a slash * Apply suggestions from code review Co-authored-by: Andrew Jones <[email protected]> * Update `Storage::write` docs * Improve doc * Remove superflous conditional * Typos * Remove superflous clone (refactoring artifact) * Apply suggestions from code review Co-authored-by: Andrew Jones <[email protected]> Co-authored-by: Parity Bot <[email protected]> Co-authored-by: Michael Müller <[email protected]> Co-authored-by: Andrew Jones <[email protected]>
* Frame no longer needs to be mutable (refactoring artifact) * Remove Contract/Tombstone deposit * Add StorageMeter * cargo fmt * Fix weight annotation * cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_contracts --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/contracts/src/weights.rs --template=./.maintain/frame-weight-template.hbs * Simplify keep check for contract accounts - Make sure that the "base deposit" for each contract >= ed - Remove now obsolete checks when sneding away free balance * Remove unused imports and functions * Rename storage_limit to storage_deposit_limit * cargo fmt * Fix typo Co-authored-by: Michael Müller <[email protected]> * Finish up rename of storage_limit * Fix rpc tests * Make use of `StorageDepositLimitTooHigh` * Add tests and fix bugs discovered by tests * Add storage migration * Don't use u128 in RPC * Fix weight of migration * Rename `endowment` to `value` * Fix bug where contract couldn't get funded by a storage deposit - Make sure that contract gets funded from deposits before value is transferred - Don't reserve value at origin because otherwise funding isn't possible - Just transfer free balance and reserve it after the transfer - When refunding make sure that this refund can't dust the contract - Can only happen after a runtime upgrade where costs where upped - Add more tests * Apply suggestions from code review Co-authored-by: Andrew Jones <[email protected]> * Remove unused `fn storage_meter` * Fix copy pasta doc error * Import `MaxEncodeLen` from codec * Beautify RPC trait bounds * Add re-instrument behaviour to dispatchable doc * Make sure a account won't be destroyed a refund after a slash * Apply suggestions from code review Co-authored-by: Andrew Jones <[email protected]> * Update `Storage::write` docs * Improve doc * Remove superflous conditional * Typos * Remove superflous clone (refactoring artifact) * Apply suggestions from code review Co-authored-by: Andrew Jones <[email protected]> Co-authored-by: Parity Bot <[email protected]> Co-authored-by: Michael Müller <[email protected]> Co-authored-by: Andrew Jones <[email protected]>
Fixes #9807
Please refer to the linked issue for information on this PR. I updated it recently to reflect the current state of things.
Porting Guide
Client Update Required
This adds new RPCs and alters existing ones with new arguments. A client update is necessary for RPC nodes.
Storage
This PR includes changes to storage. A storage migration was added in this PR that will be executed automatically.
UI
@jacogr @statictype
This PR adds the new parameter
storage_deposit_limitto existing dispatchables and RPCs. The affected dispatchables arecall,instantiate,instantiate_with_code. Affected RPCs arecallandinstantiate.This PR adds two new dispatchables
upload_codeandremove_codeand the new RPCupload_code. The latter can be used to determine thestorage_deposit_limitrequired to upload some code. Those new functions should be supported eventually but do not break the UI if not added.Renamed
endowmenttovalueThis PR makes
0a valid value for theendowmentwhen instantiating the contract. It is no longer needed to keep the contract alive. Those costs will be deducted automatically and be limited by thestorage_deposit_limitwhich can be automatically estimated through RPC. This is why we renamedendowmenttovaluein order to makeinstantiateconsistent withcall.