4.0.0
Pre-release
Pre-release
What's Changed
4.0.0 release introduces several sweeping changes to the Wallet Core, primarily centering on the shift from C++ to Rust for improved performance, security, and maintenance:
- Elliptic Curves in Rust: We've successfully migrated most of the currently supported elliptic curves to Rust. Implementation details are as follows:
secp256k1- using RustCrypto: k256ed25519,ed25519-blake2b,ed25519-cardano-extended- using curve25519-daleknistp256p1- using RustCrypto/p256
- Wallet Core Redesign: Exploiting Rust's robust type system, the Wallet Core design has been massively enhanced to promote easier implementation of features and long-term code maintainability.
- Ethereum Transition: We've shifted the main Ethereum functionality from C++ to Rust. The implementation encompasses Ethereum's basic operations, RLP and ABI interfaces, as well as EIP712 message signing. As it stands now, the Ethereum transition is fully executed.
- Bitcoin Transition: Progress is underway to move Bitcoin functionality from C++ to Rust. So far, this involves Bitcoin's basic operations and interface redesign. Pending tasks include:
- Establishing a bridge between the legacy and new Bitcoin protobuf interfaces for seamless transition.
- Shifting all tests to Rust.
- Implementing other Bitcoin-related functionality in Rust.
Progress
Breaking changes
VeChainandThetano longer support JSON signing. Initially, the chains inheritedEthereum::Entry, butEntry::signJSONwas not overridden with the chain specific implementation.UserOperationsigned transaction (JSON representation) now has thesender: Addressfield normalized with EIP55 checksum.- Removed
Ethereum::RLP::decodefunctionality as it's not used in C++. - Ethereum and all EVM-compatible chains no longer support
TWTransactionCompilerBuildInput.
Deprecated
TWEthereumAbiFunctionand all methods.TWEthereumAbiEncode. Consider usingTWEthereumAbiEncodeFunctionthrough Protobuf interface instead.TWEthereumAbiDecodeOutput. Consider usingTWEthereumAbiDecodeParamsthrough Protobuf interface instead.TWEthereumAbiDecodeCall. Consider usingTWEthereumAbiDecodeContractCallthrough Protobuf interface instead.TWEthereumAbiValueDecodeValue,TWEthereumAbiValueDecodeArrayand allTWEthereumAbiValueDecode*. Consider usingTWEthereumAbiDecodeValuethrough Protobuf interface instead.