All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
- Allow
contract_build::executeto specify how cli arguments are passed to verifiable builds ‒ 2177 - Allow specifying directory name for contract ‒ 2176
- Make
cargo-contractcompatible with Rust 1.92 ‒ 2178 - Allow verifiable builds from CLIs that are not
cargo-contract‒ 2172
- Event decoding when interacting with a contract - 2162
- Accept plain string call arguments by inferring types from metadata - 2161.
- Only use
--all-featuresincargo contract testwhen no feature specified - 2164
- Heuristic to distinguish ink! vs. Solidity contracts on-chain ‒ 2147
- Added more output to
cargo contract info‒ 2148
- Re-enable
clippy::cast_possible_truncationlint ‒ #2138 - Synchronize with
polkadot-sdk/1b1cef306d9ceebf963fd15a04b5c79ee2618bce‒ 2675 - Synchronize with
polkadot-sdk/cbab8ed4be1941420dd25dc81102fb79d8e2a7f0‒ 2153
- Handle Rust >= 1.91 change of
target-pointer-widthJSON type ‒ 2131 - Retrieve the contract address from the
Instantiatedevent ‒ 2134
Compatibility of this release:
- Rust >= 1.88
- ink!
v6.0.0-alpha.3 ink-nodev0.45.1polkadot-sdkfromuse-ink/polkadot-sdk/a71ec19a94702ea71767ba5ac97603ea6c6305c1
We have to use a slight fork of polkadot-sdk for the moment. It's just polkadot-sdk/master plus two
commits on top with pre-compiles. Those two commits are PRs to polkadot-sdk. but haven't been merged yet.
- Upgrade to
subxt0.44‒ 2127 - Synchronized with
polkadot-sdk/c40b36c3a7c208f9a6837b80812473af3d9ba7f7‒ 2102 - Re-enable
rustcoverflow checks - #2116 - chore: Upgrade to Rust edition 2024 - #2125
- Removed chain extension functionality ‒ 2120
- Remove
MAX_EVENT_TOPICSfromEnvironmentimplementations - #2122
- Support setting ABI in
Cargo.tomland propagate ABI into build environment viacfgflag - #2033 - Add
cargo contract testsubcommand - #2034 - Show cost of mapping an address in
cargo-contractprompt - #1990
- Fixed erroneous "[lib] name" warnings - #2035
- Fix Solidity metadata generation for overloaded functions and events - #2082
- Bump the version of
subxtandsubxt-signer- #2036 - Add
--nocaptureflag tocargo contract testsubcommand - #2037 - Mark
rustcwrapper crate as a non-member of any workspace - #2038 - Reusable
rustcwrapper - #2039 - Validate metadata spec arg against specified ABI for contract build - #2043
- Make metadata spec arg optional for contract build - #2047
- Update Solidity metadata generation to support
SolEncodeandSolDecodeimplementing arbitrary types - #2048 - Declare
ink_abias an expectedcfgin new projectCargo.tomltemplate - #2058 - Allow setting target directory for contract builds - #2063
- Include ABI declaration in new project template - #2066
- Synchronized with
polkadot-sdk/cb629d46ebf00aa65624013a61f9c69ebf02b0b4- #2077 - ABI specific target directories for intermediate build artifacts - #2089
- Add errors to Solidity metadata - #2098
This is our first alpha release for cargo-contract v6. We release it together
with ink! v6.0.0-alpha.
The biggest change is that we are in the process of migrating from pallet-contracts +
WebAssembly (executed in wasmi) to pallet-revive +
RISC-V (executed in PolkaVM).
This is a major breaking change, cargo-contract will only be compatible with ink! >= v6
and chains that include pallet-revive.
We did a detailed write-up of the background to this development and the reasoning
here.
Compatibility of this release:
- ink!
v6.0.0-alpha substrate-contracts-node/9c020a2polkadot-sdk/f8c90b2a01ec77579bccd21ae17bd6ff2eeffd6a
In the following we'll describe some breaking changes on a high-level. The
context to understand them is that the pallet-revive team has Ethereum/Solidity
support as the number one priority. All their design decisions derive from that,
they don't want to maintain code that is unnecessary for that objective.
We had to change a number of structs and function arguments. Some notable ones:
SourceWasm -> SourceContractBytecode
dest_wasm -> dest_polkavm
optimization_result -> linker_size_result
And v5 ExecuteArgs →
v6.0.0-alpha ExecuteArgs.
We won't describe the other ones here. The best course is to see if you encounter
compilation errors upon upgrading to 6.0.0-alpha. If so, please check our Rust
docs or the cargo-contract source code for how the new format looks and what
the comments say.
The commit that applied the majority of naming changes was this one.
For the type of a contract's balance, pallet-revive uses depending on the context
- either the configured
pallet_revive::Config::Currencytype (which corresponds to theink::Environment::Balancetype. - or a hardcoded
U256(which corresponds to what Ethereum uses). In this alpha release we just adhere to requiring the types thatpallet-reviveuses. In an upcoming beta release this could be simplified to reduce UX friction by just using one type everywhere and converting to thepallet-reviveone.
For a contract's account, pallet-revive is using either the configured AccountId type
of the polkadot-sdk runtime, or H160.
Finding the H160 for an AccountId is done via an address derivation scheme derived in
#7662.
After instantiating a contract, the address is no longer returned by pallet-revive.
Instead one has to derive it from given parameters (see the linked PR). cargo-contract
does that automatically.
For contract instantiations and contract calls the pallet requires that a 1-to-1 mapping
of an AccountId to a H160 has been created. This can be done via the map_account/
unmap_account API.
The PR #6096 contains more
information.
Besides the publicly exposed crate functions, we've introduced a new subcommand
cargo contract account that allows resolving the H160 contract address to the
Substrate AccountId which it is mapped to.
For a contract's hash value, pallet-revive uses a fixed H256, Previously,
the ink::Environment::Hash type referenced the hash type being used for the
contract's hash. Now it's just a fixed H160.
In #7164, Parity removed
most smart-contract-specific events: Called, ContractCodeUpdated, CodeStored,
CodeRemoved, Terminated, Instantiated, DelegateCalled,
StorageDepositTransferredAndHeld, StorageDepositTransferredAndReleased.
The ContractEmitted event (for events a contract emits) is still available.
Previously, pallet-contracts returned a debug_message field with contract
instantiations and dry-runs.
Whenever ink::env::debug_println was invoked in a contract, ink! wrote debugging
info to this field. This functionality has been removed. Instead pallet-revive now
supports other means of debugging.
The most relevant for this release is the tracing API. There are a number of PRs
that implemented it, so we won't link a specific one here. A good starting point
to look deeper into it is the tracing.rs.
We have implemented barebones support for this tracing API in the 6.0.0-alpha
versions of ink! + cargo-contract. But it's really barebones and should
certainly be improved before a production release.
The heuristic detection of a contract's language in cargo contract info
has been temporarily disabled; it's not yet implemented.
Contracts compiled with v6.0.0-alpha will have a large file size. This is due to a number
of bugs in PolkaVM that prohibit us from using e.g. LTO. The contract sizes will eventually
get much smaller again, once those bugs are fixed.
Linting of a contract can be executed by running the lint command:
➜ cargo contract lint --help
Lint a contract
Usage: cargo contract lint [OPTIONS]
Options:
--manifest-path <MANIFEST_PATH>
Path to the `Cargo.toml` of the contract to build
--quiet
No output printed to stdout
--verbose
Use verbose output
--extra-lints
Performs extra linting checks during the build process. Basic clippy lints are deemed important and run anyway.
-h, --help
Print help (see a summary with '-h')Or can be executed programmatically:
let crate_metadata = CrateMetadata::collect(manifest_path)?;
let verbosity = TryFrom::<&VerbosityFlags>::try_from(&self.verbosity)?;
contract_build::lint(extra_lint, &crate_metadata, &verbosity);Please see #2013 for more information.
ink! v6 will have the ability to speak Solidity, you'll be able to integrate with tools like Metamask and call ink! contracts from Solidity as if they were a pre-compile.
We added a new subcommand for this:
cargo contract build ---metadata <ink|solidity>Please see #1930 for more information.
- Target
pallet-reviveinstead ofpallet-contracts- #1851 - Retrieve PolkaVM target spec from linker - #1939
- Add option to generate Solidity compatible metadata (via
cargo contract build ---metadata <ink|solidity>) - #1930 - Deny overflowing (and lossy) integer type cast operations - #1895
- Remove linting by default,
--skip-lintingand--lintflag incargo contract buildand add a new commandlint- #2013
- Resolved verifiable-build image failures within
release-verifiable-imageworkflow - #2018
- Bumped the ink! dependencies to ink! 5.1.0 - #1837
- Synchronized the
sp-*dependencies with the ones used in ink! 5.1.0 - #1837
This release concludes the migration of ink! from Parity to the outside world. It doesn't come with any new features, we just:
- …changed the Parity URLs to ones for our new GitHub organization @use-ink.
- …upgraded many dependencies to newer versions, which results in two particular
breaking changes regarding compatibility:
- We had to remove support for Substrate metadata that is below
V14in #1722. Metadata formats belowV14are quite old and we hope this doesn't affect anyone. cargo-contractv5 works only with Rust >= 1.81.
- We had to remove support for Substrate metadata that is below
For the linter in cargo-contract the Rust toolchain version changed.
To upgrade:
export TOOLCHAIN_VERSION=nightly-2024-09-05
rustup install $TOOLCHAIN_VERSION
rustup component add rust-src --toolchain $TOOLCHAIN_VERSION
rustup run $TOOLCHAIN_VERSION cargo install cargo-dylint dylint-link
- Updated the toolchain version used by
ink_linting- #1616 - Update repository URLs & references from
paritytechGitHub organization to newuse-inkone ‒ #1663 - Bump the version of
subxtandsubxt-signer- #1722
- Remove support for
V11metadata #1722
- Remove mention of non-existent argument, improve clarity of warning message - #1590
- Fix the
instantiatecommand for Substrate0.9.42based chains - #1564
- Add
cargo contract storage --versioncommand - #1564 - Add
cargo contract verify --wasmargument - #1551 - Add
cargo contract instantiate --chainwith production chain endpoints - #1290 - Warn when uploading unverifiable contract builds to production - #1290
- Fix installation instructions for
ink_linting- #1546
- Fix e2e tests in the contract template - #1537
This cargo-contract release is compatible with Rust versions >=1.70and ink! versions >=5.0.0
ℹ️ We've created a migration guide from ink! 4 to ink! 5. It also contains an
overview over newly added features in this release of cargo-contract and explains
e.g. the newly added contract verification in more detail.
👉 You can view it here.
Notable changes:
- Verifiable builds inside a docker container - #1148
- Extrinsics extracted to separate crate - #1181
- Fix building contracts with Rust >= 1.70: enable
sign_extWasm opcode - #1189 - Support for multiple versions of
pallet-contracts- #1399
- Export
ink_metadatatypes intranscodecrate - #1522 - Improved error message for Strings as CLI arguments - #1492
- Add a user-friendly view of contract storage data in the form of a table - #1414
- Add
rpccommand - #1458 - Add schema generation and verification - #1404
- Compare
Environmenttypes against the node - #1377 - Detect
INK_STATIC_BUFFER_SIZEenv var - #1310 - Add
verifycommand - #1306 - Add
--binaryflag forinfocommand - #1311 - Add
--allflag forinfocommand - #1319 - Add contract language detection feature for
infocommand - #1329 - Add warning message when using incompatible contract's ink! version - #1334
- Add workspace support -#1358
- Add
Storage Total Deposittoinfocommand output - #1347 - Add dynamic types support - #1399
- Basic storage inspection command - #1395
- Standardised verifiable builds - #1148
- Enable Wasm sign_ext #1189
- Expose extrinsics operations as a library - #1181
- Suggest valid message or constructor name, when misspelled - #1162
- Add flag -y as a shortcut for --skip-confirm - #1127
- Add command line argument --max-memory-pages - #1128
- Show Gas consumption by default for dry-runs - #1121
- Print type comparison warning only on
--verbose- #1483 - Mandatory dylint-based lints - #1412
- Add a new tabular layout for the contract storage data - #1485
- Run wasm-opt first, remove sign_ext feature - #1416
- Bump
subxtto0.32.0- #1352 - Remove check for compatible
scaleandscale-infoversions - #1370 - Dry-run result output improvements - 1123
- Display build progress with --output-json, print to stderr - 1211
- Upgrade wasm-opt to 0.113 - #1188
- Update substrate dependencies - #1149
- Make output format of cargo contract info consistent with other subcommands - #1120
- set minimum supported
rust-versionto1.70- #1241
- Fix parsing of docker STDOUT - #1526
- Remove docker container on build failure - #1531
- Fix build
--verifiablecommand #1511 - Do not allow to execute calls on immutable contract messages - #1397
- Improve JSON Output for Upload and Remove Commands - #1389
- Fix for a Url to String conversion in
infocommand - #1330 - Configure tty output correctly - #1209
- Set
lto = "thin"for metadata build to fixlinkmeon macOS - #1200 - fix(build): An error when running with
--lint- #1174 - Dry-run result output improvements - #1123
- feat: use
CARGO_ENCODED_RUSTFLAGSinstead ofRUSTFLAGS- #1124
- Export
ink_metadatatypes intranscodecrate - #1522
- Fix build
--verifiablecommand #1511
- Improved error message for Strings as CLI arguments - #1492
- Add a user-friendly view of contract storage data in the form of a table - #1414
- Add
rpccommand - #1458
- Print type comparison warning only on
--verbose- #1483 - Mandatory dylint-based lints - #1412
- Add a new tabular layout for the contract storage data - #1485
- Run wasm-opt first, remove sign_ext feature - #1416
- Add schema generation and verification - #1404
- Compare
Environmenttypes against the node - #1377 - Detect
INK_STATIC_BUFFER_SIZEenv var - #1310 - Add
verifycommand - #1306 - Add
--binaryflag forinfocommand - #1311 - Add
--allflag forinfocommand - #1319 - Add contract language detection feature for
infocommand - #1329 - Add warning message when using incompatible contract's ink! version - #1334
- Add workspace support -#1358
- Add
Storage Total Deposittoinfocommand output - #1347 - Add dynamic types support - #1399
- Basic storage inspection command - #1395
- Bump
subxtto0.32.0- #1352 - Remove check for compatible
scaleandscale-infoversions - #1370 - Bump
inkto5.0.0-rc- #1415
- Do not allow to execute calls on immutable contract messages - #1397
- Improve JSON Output for Upload and Remove Commands - #1389
- Fix for a Url to String conversion in
infocommand - #1330
Replaces the yanked 3.1.0 due to issues with supporting both Rust versions < 1.70
and >= 1.70.
If you intend to use cargo-contract with Rust >= 1.70, and deploy to a node with a
version of pallet-contracts at least polkadot-1.0.0, then this is the release to use.
If you still want to compile with 1.69 and target an older version of pallet-contracts
then use the previous 3.0.1 release.
Notable changes:
- Verifiable builds inside a docker container - #1148
- Extrinsics extracted to separate crate - #1181
- Fix building contracts with Rust >= 1.70: enable
sign_extWasm opcode - #1189
- Standardised verifiable builds - #1148
- Enable Wasm sign_ext #1189
- Expose extrinsics operations as a library - #1181
- Suggest valid message or constructor name, when misspelled - #1162
- Add flag -y as a shortcut for --skip-confirm - #1127
- Add command line argument --max-memory-pages - #1128
- Show Gas consumption by default for dry-runs - #1121
- Dry-run result output improvements - 1123
- Display build progress with --output-json, print to stderr - 1211
- Update
subxtto0.30.1with newsubxt-signercrate - #1236 - Upgrade wasm-opt to 0.113 - #1188
- Update substrate dependencies - #1149
- Make output format of cargo contract info consistent with other subcommands - #1120
- set minimum supported
rust-versionto1.70- #1241 [extrinsics]update metadata tosubstrate-contracts-node 0.29- #1242
- Configure tty output correctly - #1209
- Set
lto = "thin"for metadata build to fixlinkmeon macOS - #1200 - fix(build): An error when running with
--lint- #1174 - Dry-run result output improvements - #1123
- feat: use
CARGO_ENCODED_RUSTFLAGSinstead ofRUSTFLAGS- #1124
[contract-build]flush the remaining buffered bytes - 1118
- Experimental support for RISC-V contracts - #1076
- Contracts are build as
bincrate now (we usedcdylibbefore) - #1076- BREAKING CHANGE: Make sure that your contract is
no_mainby having this on top of your contract:#![cfg_attr(not(feature = "std"), no_std, no_main)]- This will be detected and suggested for
error[E0601]- #1113
- BREAKING CHANGE: Make sure that your contract is
- Update contracts node metadata (#1105)
- Compatible with
substrate-contracts-node 0.25.0-a2b09462c7c
- Compatible with
- Fix original Wasm artifact path #1116
- Revert "Bump tracing from 0.1.37 to 0.1.38" - #1096
- Minimum requirements of
ink!dependencies all updated to4.2.0- #1084 - Upgrade
subxtto0.28#1039 - Upgrade
scale-infoto2.5#1057
- Dry-run
instantiate,callanduploadcommands by default - #999
- Add
cargo contract encodecommand - #998
- Limit input length for
decodecommand - #982 - Pass contract features to metadata gen package - #1005
- Custom AccountId32 impl, remove substrate deps - #1010
- Fixes issue with with incompatible
wasmtimeversions when dependant project has old substrate dependencies.
- Fixes issue with with incompatible
- Explicitly enable
stdfeature for metadata generation #977 - Return artifact paths when contracts unchanged #992
- Minimum requirements of
ink!dependencies all updated to4.0.1
- Return correct contract id for
instantiatecommand with subcontracts ‒ #777 - Bump template to ink! 4.0 ‒ #971
Major release compatible with ink! 4.0.0. All the changes in aggregate since 1.5:
- Add support for ink!'s
versionmetadata field - #641 - Add Rust specific build info to metadata - #680
- Log code hash if contract is already uploaded - #805
- Add remove command - #837
- Build contracts and dylint driver with stable - #698
- Compile dylints when compiling the contract - #703
- Move transcode example to doc test, add helper method - #705
- Note that alongside this PR we released
contract-transcode@0.2.0
- Note that alongside this PR we released
- Replace custom RPCs by
state_call- #701 - Removed requirement to install binaryen. The
wasm-opttool is now compiled intocargo-contract- #766. - Make linting opt in with
--lint- #799 - Update to weights v2 - #809
- Update validation for renamed FFI functions - #816
- Denominated units for balances in events - #750
- Upgrade wasm-opt to 0.110.2 - #802
- Pass
--featuresthrough tocargo- #853 - Bump minimum requirement of
scale-infoin template to2.3- #847 - Remove
unstablemodule check, add--skip-wasm-validation- #846 - Extract lib for invoking contract build - #787
- Upgrade wasm-opt to 0.111.0 #888
- Enable
wasm-optMVP features only #891 - Require env_type transcoders to be Send + Sync #879
- Extrinsics: allow specifying contract artifact directly #893
- Upgrade
subxtto0.26#924 - Display detailed cause of an error #931
- Use package name instead of lib name, default to "rlib" #929
- Rename
metadata.jsonto{contract_name}.json- #952 - Do not postprocess or generate metadata if contract unchanged #964
- Update
subxtand substrate dependencies #968
- Fix
tracing_subscriberfiltering - #702 - Sync version of transcode crate to fix metadata parsing - #723
- Fix numbering of steps during
build- #715 - Skip linting if running building in --offline mode - #737
- Fix storage deposit limit encoding - #751
- Rewrite relative path for
dev-dependency- #760 - Log failure instead of failing when decoding an event - #769
- Fixed having non-JSON output after calling
instantiatewith--output-json- #839 - add
-C target-cpu=mvprust flag to build command - #838 - Miscellaneous extrinsics display improvements #916
- Fix decoding of
LangError#919 - Respect the lockfile #948
- Error if mismatching # of args for instantiate/call #966
- Pretty-print call dry-run return data #967
Second release candidate compatible with ink! 4.0.0-rc.
- Upgrade
subxtto0.26#924 - Display detailed cause of an error #931
- Use package name instead of lib name, default to "rlib" #929
First release candidate for compatibility with ink! 4.0-rc.
- Extrinsics: allow specifying contract artifact directly #893
- Add
cargo contract removecommand #837
- Upgrade wasm-opt to 0.111.0 #888
- Enable
wasm-optMVP features only #891 - Require env_type transcoders to be Send + Sync #879
- Add determinism arg to upload TX #870
- Pass
--featuresthrough tocargo- #853 - Remove rust toolchain channel check - #848
- Bump minimum requirement of
scale-infoin template to2.3- #847 - Remove
unstablemodule check, add--skip-wasm-validation- #846 - Extract lib for invoking contract build - #787
- Fixed having non-JSON output after calling
instantiatewith--output-json- #839 - add
-C target-cpu=mvprust flag to build command - #838
This release supports the ink! v4.0.0-beta release.
- Update to weights v2 - #809
- Update validation for renamed FFI functions - #816
- Denominated units for balances in events - #750
- Upgrade wasm-opt to 0.110.2 - #802
- Log code hash if contract is already uploaded - #805
- Add Rust specific build info to metadata - #680
- Removed requirement to install binaryen. The
wasm-opttool is now compiled intocargo-contract- #766. - Make linting opt in with
--lint- #799
- Log failure instead of failing when decoding an event - #769
This release supports compatibility with the v4.0.0-alpha.3
release of ink!. It is not backwards compatible with older versions of ink!.
--output-jsonsupport forcall,instantiateanduploadcommands - #722- Denominated units for Balances - #750
- Use new ink entrance crate - #728
- Skip linting if running building in --offline mode - #737
- Sync version of transcode crate to fix metadata parsing - #723
- Fix numbering of steps during
build- #715
This release brings two exciting updates! First, contracts can now be built using the
stable Rust toolchain! Don't ask us how we managed to do this 👻.
Secondly, it allows you to build ink! v4.0.0-alpha.1, which introduced a small - but
breaking - change to the ink! ABI as part of use-ink/ink#1313.
- Add support for ink!'s
versionmetadata field - #641
- Build contracts and dylint driver with stable - #698
- Compile dylints when compiling the contract - #703
- Move transcode example to doc test, add helper method - #705
- Note that alongside this PR we released
contract-transcode@0.2.0
- Note that alongside this PR we released
- Replace custom RPCs by
state_call- #701
- Fix
tracing_subscriberfiltering - #702
- Dry run gas limit estimation - #484
- Bump
ink_*crates tov3.3.1- #686 - Refactor out transcode as a separate library - #597
- Sync
metadataversion withcargo-contract- #611 - Adapt to new subxt API - #678
- Replace log/env_logger with tracing/tracing_subscriber - #689
- Contract upload: emitting a warning instead of an error when the contract already existed is more user friendly - #644
- Updated
cargo contract newtemplate dependencies to ink!version = "3"- #569 - Improved documentation on how to invoke
cargo contract decode- #572
- Make constructor selector look for exact function name - #562 (thanks @forgetso!)
- Fix dirty directory issue when crate installation had been interrupted - #571
- Allow hex literals for unsigned integers - #547
- Display
H256instances in events as hex encoded string - #550 - Fix extrinsic params for contract chains - #523
- Fix
Vec<AccountId>args - #519 - Fix
--dry-runerror deserialization and report error details - #534
decodecommand for event, message and constructor data decoding - #481
- Fix usage of
check-onlyand remove need forFromStrimpl - #499
- Fix linting support for Apple Silicon (and some other architectures) - #489
- Allow multiple args values for call and instantiate commands - #480
- Fix event decoding -
c721b1
--skip-lintingflag that allows to skip the linting step during build process - #468
- Improved error reporting during installation - #469
- Updated
cargo contract newtemplate dependencies to ink!3.0- #466
We added commands to upload, instantiate and call contracts!
This allows interacting with contracts on live chains with a compatible
pallet-contracts.
For command-line examples on how to use these commands see #79.
We are introducing a linter for ink! smart contracts in this release!
From now on cargo-contract checks if the ink! smart contract that is
build or check-ed follows certain rules.
As a starting point we've only added one linting rule so far; it asserts correct
initialization of the ink_storage::Mapping
data structure.
In order for the linting to work with your smart contract, the contract has to be written in at least ink! 3.0.0-rc9. If it's older the linting will just always succeed.
- Interact with contracts: upload, instantiate and call commands - #79
- Add linting to assert correct initialization of
ink_storage::Mapping- #431
- Upgrade
subxt, SCALE crates, and substrate primitivesp-*crates #451. - Updated
cargo contract newtemplate dependencies to ink!3.0.0-rc9- #443
- Updated
cargo contract newtemplate dependencies to ink!3.0.0-rc8- #402 - Reverted the disabled overflow checks in the
cargo contract newtemplate - #376 - Migrated to 2021 edition, enforcing MSRV of
1.56.1- #360
- For contract size optimization added
workspacesection to override parentworkspace- #378
- Updated
cargo contract newtemplate dependencies to ink!3.0.0-rc7- #374 - Disabled overflow checks in the
cargo contract newtemplate - #372 - Use
-Clinker-plugin-ltoifltois enabled (reduces the size of a contract) - #358 - Deserialize metadata - #368
- Added a
--offlineflag to build contracts without network access - #356
- Update to
scale-info1.0 and support new metadata versioning - #342 - Update
cargo contract newtemplate dependencies to ink!rc6- #342
- Add option for JSON formatted output - #324
- Use new dependency resolver for template contract - #325
- Do not strip out panic messages in debug builds - #326
- Fixed a Windows issue with contract files in sub-folders - #313
- Convenient off-chain testing through
cargo contract test- #283 - Build contracts in debug mode by default, add
--releaseflag - #298 - Add
--keep-symbolsflag for better Wasm analysis capabilities - #302
- Change default optimizations pass to focus on code size - #305
- Suggest
binaryeninstallation from GitHub release on outdated version - #274
- Always use library targets name for contract artifacts - #277
- Fixed
ERROR: The workspace root package should be a workspace memberwhen building a contract under Windows - #261
- Remove support for
--binaryen-as-dependency- #251 - Remove support for the deprecated
cargo contract generate-metadatacommand - #265 - Remove pinned
funtydependency from "new project" template - #260
- Fix
wasm-opt --versionparsing - #248
- Improve error output for
wasm-optinteraction - #244 - Check optimized Wasm output file exists - #243
- Detect
wasm-optversion compatibility and improve error messages - #242 - Detect version mismatches of
parity-scale-codecin contract and ink! dependency - #237 - Support specifying
optimization-passesin the release profile - #231 - Support specifying
optimization-passeson the CLI - #216 - Use
ink::testattribute in "new project" template - #190
- Only allow new contract names beginning with an alphabetic character - #219
- Upgrade
cargo-metadataand fix usages - #210
- no periods in new contract names - #192
- Update
cargo contract newtemplate dependencies forink!rc3- #204
- Fix linker error when building complex contracts - #199
- Implement Wasm validation for known issues/markers - #171
- Use either
binaryen-rsdep orwasm-optbinary - #168 - Update to scale-info 0.5 and codec 2.0 - #164
- Put build artifacts under
target/ink/- #122
- Fix
wasm-optregression - #187 - Generate metadata explicitly for the contract which is build - #174
- Fix bug with empty Wasm file when using system binaryen for optimization - #179
- Suppress output on
--quiet- #165 - Do not generate build artifacts under
targetforcheck- #124 - update wasm-path usage name - #135
- Exit with 1 on Err #109
- Use package name instead of lib name for metadata dependency #107
- Do not prettify JSON for bundle #105
- Make
source.hashnon-optional, remove metadata-only #104 - Implement new commands
buildandcheck+ introduce bundles (.contract files) #97 - Replace xbuild with cargo build-std #99
- Use binaryen-rs as dep instead of requiring manual wasm-opt installation #95
- Specify optional --manifest-path for build and generate-metadata #93
- Update new command template to ink! 3.0-rc2 #85
- Fix deprecation warnings #82
- Use ink 3.0.0-rc1 #82
- [template] now uses ink_env and ink_storage #81
- Update new command template to ink! 3.0 syntax #80
- Extract contract metadata to its own crate #69
- Fix ManifestPath compiler errors #73
- Upgrade cargo-xbuild and other dependencies #71
- Update subxt and async-std dependencies #66
- Generate extended contract metadata #62
- Autogenerate abi/metadata package #58
- Extract workspace to module directory #59
- Add preferred default release profile settings #55
- Add option to build with unmodified original manifest #51
- Update cargo-xbuild #54
- Fix LTO regressions in nightly toolchain #52
- First release to crates.io
- Use
subxtrelease from crates.io
- Fix: fail the whole build process if the contract build fails.
- Minimize contract wasm binary size:
- Run
wasm-opton the contract Wasm binary. - Uses
cargo-xbuildto build custom sysroot crates without panic string bloat. - Automatically removes the
rlibcrate type fromCargo.toml, removing redundant metadata.
- Run
- Removes requirement for linker args specified in
.cargo/config. - Added
--verboseand--quietflags forbuildandgenerate-metadatacommands.