Add cache to native contract executions V2#1766
Conversation
|
Also it was detected that in policy we used |
Transaction also have this problem, when nodes start to relay a transaction after verification. |
| base.OnPersist(engine); | ||
| StorageItem storage = engine.Snapshot.Storages.GetAndChange(CreateStorageKey(Prefix_NextValidators), () => new StorageItem()); | ||
| storage.Value = GetValidators(engine.Snapshot).ToByteArray(); | ||
| storage.Set(GetValidators(engine.Snapshot)); |
There was a problem hiding this comment.
I think it'd be nice to optimize this one also while we're here.
If you're to look at preview2 state change dump, you'll see something like
{
"block": 3,
"size": 1,
"storage": [
{
"state": "Changed",
"key": "ffffffff0e00000000000000000000000000000001",
"value": "e807023e9b32ea89b94d066e649b124fd50e396ee91369e8e2a6ae1b11c170d022256d03009b7540e10f2562e5fd8fac9eaec25166a58b26e412348ff5a86927bfac22a202ba2c70f5996f357a43198705859fae2cfea13e1172962800772b3d588a9d4abd03408dcd416396f64783ac587ea1e1593c57d9fea880c8a6a1920e92a25947780602a7834be9b32e2981d157cb5bbd3acb42cfd11ea5c3b10224d7a44e98c5910f1b0214baf0ceea3a66f17e7e1e839ea25fd8bed6cd82e6bb6e68250189065f44ff01030205e9cefaea5a1dfc580af20c8d5aa2468bb0148f1a5e4605fc622c80e604ba00"
}
]
},
for every block and this value obviously doesn't change often. I guess it would be same even with an updated (post-preview2) governance system. But we shouldn't update storage at all if this value doesn't change, it's not hard to do, actually the only reason we didn't do it immediately in neo-go is that it would break state change dumps compatibility for us (even though technically storage contents would be the same for each block).
There was a problem hiding this comment.
The problem is that TrackeableState is outside StorageItem, I know what you say, I will try to improve it in other PR.
|
I don't know why coveralls still failing |
|
Wait for #1775 |
* Allow call from native contract (#1700) * Fix MethodCallback (#1723) * Fix #1714 (#1715) * Add base64 SYSCALLs (#1717) * Neo.VM.3.0.0-CI00230 (#1725) * Allow to iterate buffer (#1726) * Buffer iterator * Rename * Remove using Co-authored-by: Erik Zhang <erik@neo.org> * Update StorageContext.cs (#1728) StorageContext needs to be public so it can be accessed by Neo Debugger Co-authored-by: Erik Zhang <erik@neo.org> * Fix return value check (#1730) Co-authored-by: Shargon <shargon@gmail.com> * Fix ContractEventDescriptor (#1733) * fix enumerator (#1744) Co-authored-by: Tommo-L <luchuan@neo.org> * Change json fields to all lower case for consistency (#1736) * Replace DataCache.Find by DataCache.Seek (#1740) * replace DataCache.Find by DataCache.Seek * fix order * optimize * Update ByteArrayComparer.cs * Update ByteArrayComparer.cs * Update DataCache.cs * fix comments * fix comments * fix comments * Update DataCache.cs * Update DataCache.cs * Reorder methods Co-authored-by: Tommo-L <luchuan@neo.org> Co-authored-by: erikzhang <erik@neo.org> Co-authored-by: Shargon <shargon@gmail.com> * Add MaxVerificationGas (#1745) Co-authored-by: Shargon <shargon@gmail.com> * Create KeyBuilder (#1748) * Speed up the initialization of ApplicationEngine. (#1749) * Change nef checksum to double SHA256 (#1751) * Change to double SHA256 * Clean code * Revert change * Clean code * Fix checksum * Update NefFile.cs * Fix compile * Clean code Clean code Fix checksum Update NefFile.cs Fix compile * Optimize * Optimize * Fix Co-authored-by: erikzhang <erik@neo.org> * Check witnesses on isStandard (#1754) * Check witness on isStandard * Add IsDeployed * Add IsPayable * Fix UT * format * Add coverage * Remove IsPayable, IsDeployed * Move NEP10 to manifest (#1729) * NEP10 abi * To lower case * Move to Manifest * Clean code * Update ContractManifest.cs * Update ContractManifest.cs * Fix native contracts Co-authored-by: Erik Zhang <erik@neo.org> * Capture fault Exception (#1761) * Capture faultException * Update Wallet error * Remove flag check * Clean code * Sender from signers (#1752) * Sender from signers * Remove co- * Move signers outside attributes * Fix UT and remove Signers class * Fix UT * Add FeeOnly scope * Remove orderBy * Remove _signersCache * Fix Signers * Fix WitnessScope * Fix Sender * Update TransactionAttributeType.cs * Update Wallet.cs * Fix Wallet * Rename * Update Wallet.cs * Update Wallet.cs * Partial UT fix * More UT fixes * Fix Sender's WitnessScope * Fix Wallet * Fix UT * Explicit FeeOnly for DeployNativeContracts * Same order as serialization * Test FeeOnly * dotnet format * format Co-authored-by: Erik Zhang <erik@neo.org> * IApplicationEngineProvider (#1758) * Remove the lock from SendersFeeMonitor and rename it to TransactionVerificationContext (#1756) * Add EffectiveVoterTurnout (#1762) * Remove AllowedTriggers from SYSCALLs (#1755) * fix validatorscount (#1770) Co-authored-by: Tommo-L <luchuan@neo.org> * workflows: use checkout action v2 (#1775) * Update git workflow * Update .github/workflows/main.yml Co-authored-by: Erik Zhang <erik@neo.org> Co-authored-by: Erik Zhang <erik@neo.org> * Add cache to native contract executions V2 (#1766) * cache v2 * More optimizations * Policy contract optimization * Remove interporable variable * Two more * Add Set * Optimizations * Optimize Co-authored-by: erikzhang <erik@neo.org> * Optimize attributes (#1774) * Add length before compression data (#1768) * Add length before compression * Optimize * Fix UT * Add UT * Add UT Co-authored-by: erikzhang <erik@neo.org> * Fix VerifyWitnesses (#1776) * Ensure non predictable peers (#1739) * Plugins from List to array * Move false to init * Fix UT * Refactor * Add Exception Message For CreateContract (#1787) * Add Exception Message When Create Contract * Add Exception Message * Code optimization * add UT Co-authored-by: Shargon <shargon@gmail.com> Co-authored-by: Qiao Jin <43407364+Qiao-Jin@users.noreply.github.com> Co-authored-by: Erik Zhang <erik@neo.org> Co-authored-by: Shargon <shargon@gmail.com> Co-authored-by: Harry Pierson <harrypierson@hotmail.com> Co-authored-by: Luchuan <luchuan@ngd.neo.org> Co-authored-by: Tommo-L <luchuan@neo.org> Co-authored-by: joeqian <qianzhuo@ngd.neo.org> Co-authored-by: cloud8little <34291844+cloud8little@users.noreply.github.com> Co-authored-by: Qiao Jin <43407364+Qiao-Jin@users.noreply.github.com>
Close #1764
Other version for share the snapshot
Based on #1764 (comment)
This cache avoid the second deserialization process
Benchmarks: