mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-04-24 06:38:03 +00:00
a07968205b
- Add the revive runtime function interface to minimize boiler plate code. - Outline heavily repeated code into dedicated functions to bring down code size. - The code size tests builds optimized for size. - Function attributes are passed as slices. This significantly brings down the code size for all OpenZeppelin wizard contracts (using all possible features) compiled against OpenZeppelin `v5.0.0` with size optimizations. |contract|| `-Oz` main | `-Oz` PR || `-O3` main | `-O3` PR | |-|-|-|-|-|-|-| |erc1155.sol||100K|67K||114K|147K| |erc20.sol||120K|90K||160K|191K| |erc721.sol||128K|101K||178K|214K| |governor.sol||226K|165K||293K|349K| |rwa.sol||116K|85K||154K|185K| |stable.sol||116K|86K||155K|192K| On the flip side this introduces a heavy penalty for cycle optimized builds. Setting the no-inline attributes for cycle optimized builds helps a lot but heavily penalizes runtime speed (LLVM does not yet inline everything properly - to be investigated later on). Next steps: - Modularize more functions - Refactor the YUL function arguments to use pointers instead of values - Afterwards check if LLVM still has trouble inline-ing properly on O3 or set the no-inline attribute if it does not penalize runtime performance too bad.
4.2 KiB
4.2 KiB
Changelog
Unreleased
v0.1.0-dev.12
This is a development pre-release.
Supported polkadot-sdk rev: 21f6f0705e53c15aa2b8a5706b208200447774a9
Added
Changed
- Improved code size: Large contracts compile to smaller code blobs using with size optimization.
Fixed
v0.1.0-dev.11
This is a development pre-release.
Supported polkadot-sdk rev: 274a781e8ca1a9432c7ec87593bd93214abbff50
Added
Changed
Fixed
- A bug causing incorrect loads from the emulated EVM linear memory.
- A missing integer truncate after switching to 64bit.
v0.1.0-dev.10
This is a development pre-release.
Supported polkadot-sdk rev: 274a781e8ca1a9432c7ec87593bd93214abbff50
Added
- Support for the
coinbaseopcode. - The resolc web JS version.
Changed
- Missing the
--overwriteflag emits an error instead of a warning. - The
resolcexecutable prints the help by default. - Removed support for legacy EVM assembly (EVMLA) translation.
- integration: identify cached code blobs on source code to fix potential confusions.
- Setting base, include or allow paths in emscripten is now a hard error.
- Employ a heuristic to detect
address.transferandaddress.sendcalls. If detected, the re-entrant call flag is not set and 0 deposit limit is endowed.
Fixed
- Solidity: Add the solc
--librariesfiles to sources. - A data race in tests.
- Fix
broken pipeerrors. - llvm-builder: Allow warnings.
- solidity: Fix the custom compiler warning messages.
v0.1.0-dev.9
This is a development pre-release.
Added
Changed
- Syscalls with more than 6 arguments now pack them into registers.
Fixed
- Remove reloading of the resolc.js file (fix issue with relative path in web worker)
v0.1.0-dev.8
This is a development pre-release.
Added
- The
revive-llvm-buildercrate with therevive-llvmhelper utility for streamlined management of the LLVM framework dependency. - Initial support for running
resolcin the browser.
Changed
- Suported contracts runtime is polkadot-sdk git version
d62a90c8c729acd98c7e9a5cab9803b8b211ffc5. - The minimum supported Rust version is
1.81.0. - Error out early instead of invoking
solcwith invalid base or include path flags.
Fixed
- Decouple the LLVM target dependency from the LLVM host dependency.
- Do not error out if no files and no errors were produced. This aligns resolc closer to solc.
- Fixes input normalization in the Wasm version.
v0.1.0-dev.7
This is a development pre-release.
Added
- Implement the
GASPRICEopcode. - Implement the
BASEFEEopcode. - Implement the
GASLIMITopcode.
Changed
- The
GASopcode now returns the remainingref_time. - Contracts can now be supplied call data input of arbitrary size.
- Some syscalls now return the value in a register, slightly improving emitted contract code.
- Calls forward maximum weight limits instead of 0, anticipating a change in polkadot-sdk where weight limits of 0 no longer interprets as uncapped limit.
Fixed
- A linker bug which was preventing certain contracts from linking with the PVM linker.
- JS: Fix encoding conversion from JS string (UTF-16) to UTF-8.
- The git commit hash slug is always displayed in the version string.
v0.1.0-dev.6
This is a development pre-release.
Added
- Implement the
BLOCKHASHopcode. - Implement delegate calls.
- Implement the
GASPRICEopcode. Currently hard-coded to return1. - The ELF shared object contract artifact is dumped into the debug output directory.
- Initial support for emitting debug info (opt in via the
-gflag)
Changed
- resolc now emits 64bit PolkaVM blobs, reducing contract code size and execution time.
- The RISC-V bit-manipulation target feature (
zbb) is enabled.
Fixed
- Compilation to Wasm (for usage in node and web browsers)
v0.1.0-dev.5
This is development pre-release.
Added
- Implement the
CODESIZEandEXTCODESIZEopcodes.
Changed
- Include the full revive version in the contract metadata.
Fixed
v0.1.0-dev-4
This is development pre-release.
Added
- Support the
ORIGINopcode.
Changed
- Update polkavm to
v0.14.0. - Enable the
a,fast-unaligned-accessandxtheadcondmovLLVM target features, decreasing the code size for some contracts.