This guide aims to capture some of the high-level differences between v5 and v6 to help those migrating an existing app and those already familiar with v5 that just need a quick primer.
The biggest differnce in v6 is the use of modern ES6 features, so a lot of changes are largely internal.
One of the biggest changes in v6 is that the BigNumber class has been replaced with the built-in ES2020 BigInt offered by modern JavaScript environments.
There is plenty of online documentation to get you started with JavaScript ES2020 BigInt. Keep in mind, just like BigNumber, a ES2020 BigInt can only operate on integers.
The FixedNumber class still exists for performing fixed-point maths.
The Contract is an ES6 Proxy, which means it can resolve method names at run-time.
In v5, in the case of an ambiguous method, it was necessary to look up a method by its canonical normalized signature. In v6 the signature does not need to be normalized and the Typed API provides a cleaner way to access the desired method.
In v5, duplicate definitions also injected warnings into the console, since there was no way to detect them at run-time.
In v5, contracts contained a series of method buckets, which then in turn had all signatures and non-ambiguous names attached to them to perform less-common operations.
In v6, the methods each have their own less-common operations attached directly to them.
In v5, the project was maintained as a large set of sub-packages managed as a monorepo.
In v6 all imports are available in the root package, and for those who wish to have finer-grained control, the pkg.exports makes certain folders avilable directly.