Releases: blockapps/strato-getting-started
7.7.0
STRATO 7.7.0 Release Notes
August 29, 2022
Features, Improvements, and Updates
-
Added new SolidVM pragma version 3.3
-
Added the following functionalities in SolidVM:
- Added support for custom function modifiers
- Added support for salted contract creations
- Added support for number unit suffixes (wei, szabo, finney, ether)
- Implemented the use of the "e" scientific notation for exponents
- Implemented try/catch blocks
- Implemented builtin functions:
- sha256
- ripemd160
- blockhash
- selfdestruct
- tx.certificate
- Reworked mapping behavior to return a types default value when a key is not in a mapping
-
Added the following functionalities in X509:
- Added support for multi-root certs
- Added support for root certs to be used for cert validation
- Renamed references of "tx.group" to "tx.organizationalUnit"
- Reworked verifyCert builtin function to check that the root cert is signed by the public key
- Created function verifyCertAgainstCerts to compare a cert against a supplied list of root certs
- Added the following fields to the Certificate contract:
- bool isValid
- Certificate parent
- Certificate[] children
- Added revoke function in the Certificate contract
- Added revokeCert(address _cert) function to the CertificateRegistry Dapp
- Reworked Certificate Dapp to update the necessary children and parent pointers of all related Certificate contracts after Certificate is registered
-
Added check for single-member private chains in --drop-chains command for strato-getting-started
Bug Fixes
- Fixed bug that allowed “account” type name to be declared as a variable in SolidVM
Update from previous version
- For updating from STRATO Version 7.5 and older: Before any validator on a network is updated to 7.7 and any transactions are posted to the network, the rest of the nodes must be also updated to 7.7 to avoid the existing nodes running the older versions of STRATO becoming unhealthy
7.6.0
STRATO 7.6.0 Release Notes
June 27, 2022
New features, enhancements and additions:
- Updates to x509 including only allowing BlockApps user to use registerCert function
- Added support for x509 certificate chaining
- Updates to SolidVM for compatibility with latest Solidity version
- Multiple enhancements to state variables, function, and account types in SolidVM
- Added capability to allow multidimensional arrays of structs to be passed as function arguments in SolidVM
- Added support to parse JSON objects as Solidity structs for API function arguments in SolidVM
- Added support for mapping parser for API function arguments and support for allowing in-memory mappings to be altered in SolidVM
- Added more informative STRATO API error related messages for transaction endpoint
- Refactoring to have Total World Difficulty equal to the number of blocks in a network
- Deprecated the No Index option on the STRATO Management Dashboard
- Updates to documentation including x509 changes and SolidVM enhancements
Bug Fixes
- Fixed bug causing block creation delay when voting to remove validator
- Fixed bug causing multinode applications to fail
- Fixed bug causing VM to crash when accessing/assigning unallocated array values
- Fixed bug causing issues with chainId member access
- Fixed Query Builder STRATO Management Dashboard page bug causing incorrect population of the columns for a queried contract
- Fixed bug with syncing peers receiving private transaction information
- Fixed bloc /transaction endpoint bug causing endpoint to hit fetch limit
- Fixed bug that allowed contract state variables to be used as function return types in SolidVM
- Fixed bug causing SolidVM to fail when reading a string state variable from another contract
- Fixed bug where byte values passed as function arguments were not handled properly
- Fixed Contracts STRATO Management Dashboard page bug displaying contracts with an error state
- Fixed contract upload request details in blockapps-rest debug log output
Update from previous version
- Before any validator on a network is updated to 7.6 and any transactions are posted to the network, the rest of the nodes must be also updated to 7.6 to avoid the existing nodes running the older versions of STRATO becoming unhealthy
7.5.0
STRATO 7.5.0 Release Notes
April 4, 2022
New features, enhancements and additions:
- Removed External Storage feature
- Refactoring to add and support Joins feature, including upgrading PostgREST version from v0.4.3.0 to v9.0.0
- Security patches
- Refactoring to decrease Kafka message size
- Added a flag to enable/disable EVM indexing to Cirrus. EVM indexing is disabled by default.
- Added more informative argument-error related messages
- Updates to documentation and related tests
- Updated dependecies to comply with GitHub's new security policy
Bug Fixes
- Fixed bug causing high CPU usage occurring in specific rare situations
- Fixed memory leak occurring in specific rare situations
- Fixed 'Contracts' tile on the STRATO Management Dashboard main page to display proper Contracts count
- Fixed bug where contracts would fail to be stored in Cirrus due to contract int variable values being too large
- Fixed bug where Kafka errors were uncaught
Update from previous version
- No custom changes required to update from 7.4.0
7.4.0
STRATO 7.4.0 Release Notes
December 16, 2021
New features, enhancements and additions:
- Refactoring to support improved slipstream performance
- Updated instructions for VSCode extension
- Updated emojis used in node health
- Added documentation, tests and enhancements to auto fuzzing debugger tool
- Added tests for type checker and static analysis detectors
Bug Fixes
- Fixed security vulnerability in blockapps-rest
- Fix error in contracts panel
- Fix minor spelling error in VM logs
- Fix to type checker tool that skipped checking state during variable declaration
Update from previous version
- No custom changes required to update from 7.3.0
Known issues
- A possible memory leak is being investigated and may affect performance on networks with large amounts of data.
7.3.0
STRATO 7.3.0 Release Notes
November 18, 2021
New features, enhancements and additions:
- Add static analysis toolset to the IDE (and VSCode plugin) for smart contract development, and make infrastructure updates to support the same
- Add controls to prevent sending transactions until nodes of network are in sync
- Increase the contract lookup accuracy and efficiency
- Improve slipstream performance efficiency
- Widespread updates to documentation and related tests
- Refactoring to remove stale code
- Add error messaging to the /fill endpoint if called when gas is off
Bug fixes
- Fix bug in table expansion contract lookup
- Fix Kafka bug which interfered with syncing to a large network
- Fix Bloc API contract retrieval bug impacting chain creation when using code pointers
- Fix to remove excess vault-wrapper logs in production environments
- Fix to bloc /contracts endpoint
- Fix bug that crashes script when account is blank
- Fix to enum conversion failure
- Miscellaneous small fixes to VM and slipstream database
Update from previous version
- No custom changes required to update from 7.2.0
7.2.0
STRATO 7.2.0 Release Notes
September 15, 2021
Features, Improvements, and Updates
- Added new offline transactions feature and related tools to support offline transaction creation;
- Created raw transaction API endpoint to support offline transactions;
- Code optimization;
Bug Fixes:
- Fixed the format and reading of the faucet key;
- Fixed the node info tree view formatting;
Update from previous version
- No custom changes required to update from 7.1.0
7.1.0
STRATO 7.1.0 Release Notes
August 13, 2021
Minor Improvements, Updates and Bug Fixes:
- Add EVM compatibility flag
- Increase Postgres connection limit to support more query-intensive applications
- Enable flags on STRATO API for single threaded behavior and to avoid file descriptor errors
- Remove and replace error calls in x509 certification error handling to provide more graceful failure for improper cert formats
- Update Haskell LTS package and make related compatibility updates
- Fix conditions resulting in infinite loop (and add break to prevent infinite looping)
- Fix edge case for storage-related crash occurring in STRATO-API when using the creator field
- Fix type conversion bug in cirrus when versioned contracts contain uninitialized variables
- Fix calculation error in dashboard usage stats
Update from previous version
- No custom changes required to update from 7.0.0
7.0.0
STRATO 7.0.0 Release Notes
June 28, 2021
Features and Updates:
- Finish beta version of the x509 feature development, enabling association of users with an organization and contract versioning of applications and contracts. This included:
- Implementing naming schema and support for application-level versioning
- Applying the application versioning feature to contract events
- Introducing table expansion logic to support contract versioning
- Adding runtime logic for a
creator
field in SolidVM to keep track of the org of a contract's creator - Enhancing internal creator and org lookup logic
- Add paging for GET requests to /contracts endpoint to improve endpoint performance
- Add additional platform-side support for VS Code extension (that is coming soon)"
- Enhance features for the Solidity IDE, including improvements to expression evaluation functionality
- Enhance support for code Pointers including adding support in blockapps-rest
- Add buttons to allow dashboard users to compile contracts as SolidVM or EVM contracts
- Improve logic to enhance blockhash query speed and improve STRATO API performance
- Change default network parameters to transact with gas off
- Hide the "value" textbox in the modal when a contract function isn’t marked as payable
- Add support to be able to see and retrieve private chain transactions in the dashboard transactions table
- Enforce pragma version support requirement to support upgradability of network
Bug Fixes:
- Fix chainID field for method calls in dashboard
- Fix to SMD account detail display panel
- Fix bug with encoding of private chain governance contracts
- Fix bug causing flickering in uptime data on dashboard
- Fix bug in vault db migrations and resolve other migration issues
- Fix issues with token-getter
- Fix to query parameter of the chainID during contract creation
- Fix to disallow stateroot changes resulting from svmTrace parameter
- Fix to state root mismatch error during upgrade
Known Issues
- The SolidVM Debugger and IDE have been enabled on the platform but the extension has not yet been released in the marketplace. Installation of the VSCode extension is required in order for the feature to be used.
- If using the contract versioning feature without an x509 identity in place, users must instantiate all variables in the contracts. Failure to instantiate variables intermittently results in improper data typing and storage when contracts are updated. Investigation of this issue is underway.
- "ethereum-discover" is a service that all ethereum nodes run to find other peers. Communication between different servers is done via UDP datagrams. There was a bug in a third party library we use to accept UDP packets, where a blank packet would cause the executable to crash. We are updating to a newer version of that library where the bug was fixed
- The underlying data storage in Postgres is limited in its number of available connection threads. If Postgres connections are exhausted too rapidly, the STRATO container may crash. Investigation of this race condition is underway.
- If upgrading from a prior STRATO version to this release, all nodes must be upgraded before transactions using STRATO 7.0 features are performed. Failure to upgrade fully before using 7.0 features will result in container failure on non-upgraded nodes.
This release introduces a working beta version of the x509 identity feature as well as a SolidVM debugging tool.
x509 Identity
The x509 Identity feature (beta) allows you to post an x509 certificate and associate your account with an organizational identity. You accomplish this by creating and then registering an organizational x509 certificate. Users currently would need to generate an x509 certificate through external tools or utilize the x509 details of a certificate their organization already has. You would then create a record of this certificate on the blockchain and register its use.
A sample contract to create the certificate on the blockchain would look like this:
contract CreateACertificate {
address myAddress = tx.origin;
string myNewCertificate = "<paste certificate details here>";
string myCommonName = "";
string myCountry = "";
string myOrganization = "";
string myGroup = "";
string myPublicKey = "";
constructor() {
registerCert(myAddress, myNewCertificate);
myCommonName = parseCert(myNewCertificate)["commonName"];
myCountry = parseCert(myNewCertificate)["country"];
myOrganization = parseCert(myNewCertificate)["organization"];
myGroup = parseCert(myNewCertificate)["group"];
myPublicKey = parseCert(myNewCertificate)["publicKey"];
}
}
To register this certificate, a built-in platform method is used registerCert(tx.origin, cert1)
. This method could be used within the constructor to the sample contract, CreateACertificate, or it could be called in another contract. After this association of an account to an organization is created, any applications or contracts uploaded by the user will be associated with the related organization. This also allows users to restrict methods and contract function calls to only users associated with an organization.
Contract Naming and Versioning
In order to better support the development and evolution of applications and smart contracts, this release introduces a contract naming and versioning solution (in beta) to allow users to have multiple versions of the same contract with different values, without a name or version collision. In order to use the beta version of the contract naming and versioning feature, developers currently need to instantiate all variables in smart contracts that are being used and set variables to a non-empty value (even if immediately changed thereafter). This is a known issue in the beta version. Instantiating the variables ensures that the proper data type for the variables are stored for each contract of the same name.
SolidVM Debugger (coming soon)
The SolidVM debugger is a Visual Studio (VSCode) extension that helps to debug Solidity contract code while you are developing smart contracts. This release adds platform-side support for a VS Code extension (that is coming soon). To run a node with the Solidity Debugger extension enabled, you will need to do a few additional steps:
When starting your STRATO node to enable debugging on it, add these additional parameters to your startup script:
debugSolidVM=true \
wsDebug=true \
When starting VSCode, make sure that your VSCode is running on the same machine that your node is running on AND there is a GUI installed on the machine. [Typically this means you are developing on a local node (even if you are connected to a network for development), but this also works if you have VSCode on a remote machine with a GUI installed and a VNC server connection.]
- Open the strato-platform repository in your VSCode folder system. Under the subfolder blockapps-rest, install with 'yarn install' and build the images with
yarn build
- Change directories into the Strato-vscode folder and build the images in that directory using
yarn
. - To run the extension, open all the files under the strato-vscode directory using
code .
and then run debugging under the Run Extension configuration. This will open up a separate VSCode window with the extension enabled (You should see the BlockApps logo in the lefthand extension tray). - When the VSCode extension window is open, click on the BlockApps logo and you should see the opens to Create, Deploy, Run and Test code.
Create Project
will allow you to create a new track-n-trace project at a designated location on your file system. It will also close out whichever project you're currently working on.
Deploy Project
will deploy the dapp contracts to the node, using the node URL specified in the project's config.yaml file.
Run Project
currently only runs the server for the project. This means you'll still need to start the nginx container and the UI from your terminal
Test Project
runs the server test suite.
Upgrading
If you are upgrading to 7.0 from a previous version, this upgrade requires that all nodes of the network be upgraded before new transactions are added to the network (mixed version networks cannot be supported)
6.0.3
STRATO 6.0.3 Release Notes
April 20, 2021
Features and Updates:
- Add infrastructure and backend support for future x509 certificate feature
- Add infrastructure and backend support for future Solidity IDE extension
- Add backend support for Solidity debugging
- Revise the block hydration method and related tests
- Enable use of Unicode chars in contract string fields
- Add missing function parameters to typescript support
- Add RLP encoding for negative integers
- Add detailed usage reporting to server and API call counting
Bug Fixes:
- Fix subject JSON encodings and added JSON roundtrip tests
- Fix bug in escaping logic which was mishandling event arguments that used reserve words
- Fix bug in stats submission scheduler
- Fix issue with entering Unicode characters in Solidity source code
- Fix serialization bug in Merkle Patricia trees
- Miscellaneous bug fixes to tests
6.0.2
STRATO 6.0.2 Release Notes
March 8, 2021
Features and Updates:
- Refactoring and consolidation of Bloc and STRATO API endpoints.
- Change the default networkID parameter to reference the blockapps network
- Add a new network flag and additional support for network identification
- Increase the default settings for Kafka message limit and size
- Update default blockapps-rest package to 8.0.0
- Add support for building STRATO on nix0s
- Update serve module version in SMD and disable obsolete calls to mixpanel
- Add prelude "read" function that can accept a label used when the function fails to help identify issues more easily.
Bug Fixes:
- Fix bug that was failing to enforce proper enode formation
Notes:
- The refactoring to the API endpoints did not result in any functional change, but the prior API version can be accessed by adding the following to the run script:
USE_OLD_STRATO_API=true
blocHost=bloc:8000 \ - The default network ID changed between 6.0.1 and 6.0.2. If upgrading, add the following parameters to the run script when the node is upgraded:
networkID=6 \