Skip to content

4.0.0

Pre-release
Pre-release
Compare
Choose a tag to compare
@Milerius Milerius released this 13 Oct 12:42
· 95 commits to master since this release
b530432

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:

  1. Elliptic Curves in Rust: We've successfully migrated most of the currently supported elliptic curves to Rust. Implementation details are as follows:
  2. 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.
  3. 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.
  4. 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

  • VeChain and Theta no longer support JSON signing. Initially, the chains inherited Ethereum::Entry, but Entry::signJSON was not overridden with the chain specific implementation.
  • UserOperation signed transaction (JSON representation) now has the sender: Address field normalized with EIP55 checksum.
  • Removed Ethereum::RLP::decode functionality as it's not used in C++.
  • Ethereum and all EVM-compatible chains no longer support TWTransactionCompilerBuildInput.

Deprecated

  • TWEthereumAbiFunction and all methods.
  • TWEthereumAbiEncode. Consider using TWEthereumAbiEncodeFunction through Protobuf interface instead.
  • TWEthereumAbiDecodeOutput. Consider using TWEthereumAbiDecodeParams through Protobuf interface instead.
  • TWEthereumAbiDecodeCall. Consider using TWEthereumAbiDecodeContractCall through Protobuf interface instead.
  • TWEthereumAbiValueDecodeValue, TWEthereumAbiValueDecodeArray and all TWEthereumAbiValueDecode*. Consider using TWEthereumAbiDecodeValue through Protobuf interface instead.