what Solidity, solc, web3.js, Ganache versions combination is currently working - solidity

What combination of the latest versions of Solidity, solc, web3.js and Ganache is really working at the moment?
I'm trying to use the following:
Solidity ˆ0.8.0
solc ˆ0.8.9
web3.js ˆ1.6.0
ganache-cli ˆ6.1.8
The problem is:
I call a really primitive function to read a public value in my smart contract and I get this error:
"VM Exception while processing transaction: invalid opcode"
I googled and haven't found a working solution. Some answers suggested to change the version of Ganache, that's why I'm trying to find a 'happy' combination of the latest versions.
Maybe, not the latest versions but the ones really working without substantial problems. Have you got any success with it?

Needed to update the version of Ganache to 6.5.0 or higher. This solves the problem.

Related

reSolve and React Native integration

Is there any working example available involving reSolve in React Native?
Suggestions of comparable solutions (running without any back-end connectivity in place) either in React Native or Flutter are also most appreciated.
GitHub contains an example in the reimagined/react-native-example repository but unfortunately it isn't working. It seems the current version is pretty outdated.
Referring to that repository, the command yarn create resolve-app -e shopping-list-advanced shopping-list-advanced results in the following error message.
Error: No such example, shopping-list-advanced. The following examples are available
So you are unable to download the sample code since it does not appear to exist.
So I tried downloading and inflating the ZIP manually. Afterwards I ran yarn install (which takes a while and reports quite a lot of warnings). Next, I used the command yarn start:native. This doesn't work either and results in the following error message.
ERROR: Node.js version 16.13.2 is no longer supported.expo-cli supports following Node.js versions: >=10.13.0 <11.0.0 (Active LTS) >=12.0.0 <13.0.0 (Active LTS) >=13.0.0 <14.0.0 (Current Release)
In an attempt to solve the problem, I updated the expo-cli version in the native\package.json file to 5.0.3. Running yarn install and yarn start:native again results in a new error message being thrown error.
Invalid regular expression:
/(ui[\]node_modules[\]react-native[\].|ui[\]node_modules[\]expo[\].|node_modules[\]react[\]dist[\].|website\node_modules\.|heapCapture\bundle.js|.\tests\.)$/:
Range out of order in character class.
This doesn't seem to go anywhere... In other words, I am a bit stuck here since I don't know what this message actually means.
Thank you for your feedback.
The team decided to extract the React Native example to a separate repository and postpone its maintenance to keep focused on more important tasks like polishing the server-side.
As you mentioned, the example is outdated, there are many changes in the client configuration since then. In the future, we may work on some guide on how to use reSolve in React Native and other frameworks.
In the meantime, you can try to add reSolve in your ReactNative app using our docs.
We provide several client libraries that can be helpful:
https://reimagined.github.io/resolve/docs/api/client/resolve-client/
https://reimagined.github.io/resolve/docs/api/client/resolve-react-hooks/
https://reimagined.github.io/resolve/docs/api/client/resolve-redux/
Feel free to contact us through Github in case of any difficulties, we'll be glad to help you.

Given an npm package, how do I know whether it will work in browser?

I've recently installed some npm package (recommended Kubernetes client) for my react app.
After writing code that uses the package and deploying the code for testing I got some weird errors about missing functions or packages. Then I've read the documentation and realized that the package was Node-only.
Is there any way to check that the npm package works in browser before writing code that uses the package?
Python packages specify compatible python versions. Do npm packages have something like this whether they indicate support for particular Node versions and the browsers?
Some packages/libraries contain .browserlistrc file which I've found to be a starting point to find out the browsers and platforms the devs intend to support or have their code compile for. While it may not always be true and the package might just be able to support a browser that isn't mentioned, it's a good starting point. It surely helps to find out if IE (the bane of front-end dev) is supported or not.
Then again many packages don't necessarily include a .browserlistrc. You can then check the package.json for a "browserslist" field.
If neither are found, you can always clone the repo and add your own .browserlistrc in the root with queries that will let you know if the package supports your intended browser or platform - little more work but yeah it can help. Not full proof but a decent enough way to find out.
Though the best answer is really to just ask the maintainers.

Warning Regarding extcodehash in Remix for openzeppelin-contracts

I have compiled the openzeppelin-contracts code in Remix IDE. Meanwhile, I have obtained the following warning.
Warning: The "extcodehash" instruction is not supported by the VM version "byzantium" you are currently compiling for. It will be interpreted as an invalid instruction on this VM. assembly { codehash := extcodehash(account) }
I am obtaining this warning for all recent versions of the EVM, and not just the byzantium one. I have tried to search for a solution regarding this warning, but without success. Would anyone know how to "fix" this issue?
The issue is that the contract imports from the OpenZeppelin Contracts GitHub master branch which needs a later compiler version.
You should only use code published in an official release of OpenZeppelin Contracts, the latest release is 2.3. When importing via GitHub on Remix you can specify the release tag, (otherwise you will get the latest code in the master branch).
The warning is caused by:
Compiler 0.5.3 has a default EVM version of byzantium whilst Compiler 0.5.11 has a default EVM version of petersburg. You may also want to use Compiler version 0.5.11.
The imports using version 2.3.0 of OpenZeppelin Contracts would be:
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v2.3.0/contracts/token/ERC721/ERC721Full.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v2.3.0/contracts/math/SafeMath.sol";
Alternatively to using Remix, have a look at the Getting Started guide for information on how to setup a development environment.
If you have questions on using OpenZeppelin you can ask in the Community Forum: https://forum.openzeppelin.com/
Disclosure: I am the Community Manager at OpenZeppelin

How to make npm use the lowest version that matches all requirements

We're using NodeJS for some projects and are faced with an issue that must have a simple solution (seeing as nobody else seems to have the problem).
In the packages.json there are a bunch of dependencies mentioned with a minimum version, each of which may have overlapping dependencies of their own. The default way a dependency is added is using the ^ operator which seems to mean 'compatible with' or 'same major version, but minor versions may differ'.
The way I understand npm to work is on npm install to take the highest minor version available that matches. Unfortunately 'compatible with' is not quite as enforced as you'd hope.
The situation this puts us in is that for instance on a developer machine version 1.1.0 is installed, but between development and publishing a new version 1.2.0, that has a bug, is introduced. On our build machine a fresh build is made which ends up using 1.2.0 and we've introduced a bug that wasn't there in development.
We tried changing the ^ operator to = for instance, but this gives us trouble when dependencies have subdependencies that aren't compatible with the requested version.
All in all I'm a bit confused, but this thing keeps biting us anytime something changes since the development machines don't do anything on npm install if the package is already there, but the build machine always gets fresh copies.
I know from NuGet that it always takes the lowest version that matches all combined requirements. Since this is always the same for a given set of dependencies, I much prefer this approach. Is there a way to make npm work like this too?
To answer my own question:
npm has introduced a new command npm ci which does something similar to npm install but enforces that the specific versions are used that were also used when a package was initially added by using the package-lock file.
See https://docs.npmjs.com/cli/ci for more information

RazorJS - Could not load type 'System.Web.Razor.Parser.MarkupParser'

When I try to use #Html.RazorJSInline() function I get
Could not load type 'System.Web.Razor.Parser.MarkupParser'
When I try to use #Html.RazorJSInclude() RazorJs is generating path to JS file but then I get the same error when trying to open the file with browser.
edit
I think it is caused by that the RazorJS was designed for Razor 1...
Does anybody find out some nice workaround?
Got here a bit late, but I hit a similar problem when trying to call RazorEngine's Razor.Parse(). I also got this message:
Could not load type 'System.Web.Razor.Parser.MarkupParser'
I was at the time using RazorEngine version 3.0.8. This issue was apparently resolved in a later version of RazorEngine (3.1.0)
So upgrading the package to this version fixed it for me.
I used the following command in the NuGet Package Manager Console to upgrade to the fixed version:
PM> Update-Package RazorEngine -Version 3.1.0
At the moment, RazorEngine is already a bunch of versions further (I think currently 3.7.2) but upgrading all the way to this version wasn't really an option for us, as this would've required quite a bit of refactoring in existing code. If this isn't an issue for you, you could always try the latest version.