Comments (7)
what is the difference with syscalls?
from neo-vm.
Erik, Interop layer is meant for interoperability with the blockchain level (for any other Neo-based blockchain). In this sense, System
will be useful for basic cross-chain/multi-chain information, such as System.GetPlatform
. This is part of Neo basic protocol. What we are discussing here is having cryptography on computation level for NeoVM even on scenarios where a blockchain core (ledger) is not directly involved, as we may use it for computing on lightweight IoT devices (please see our recently published paper at IEEE, discussing Home Ledger situations).
Extensions is meant to allow disabling unsupported features (on lightweight devices or even other Neo chains), but MainNet will have common accepted extensions (this extension number should be perhaps added to block itself, or after voting). What I propose here is a NeoVM mask, that may initially occupy an int
(32 bits):
Extensions mask: 00000111 00000000 00000000 00000000
. What does it mean (number 0x07
in little-endian)? We have three extensions activated, 0, 1 and 2.
MSBit will be reserved for future mask extensions, if in a near future we reach 31 extensions (this will take some time).
So, Neo 3 block should have an int
field that indicates NeoVM extensions version, accepted by 2f+1 CN. In the future, we could add more extensions, or even disable some (if some futurely added crypto is then considered insecure).
We need a strong NeoVM, focused on deterministic/verifiable and cryptographic computation, this is not the role of an Interop layer. This is very important for Neo, we need to defend its VM. I don't think this is clear for everyone, why NeoVM is so important for Neo, and for blockchain ecosystem itself. NeoVM is far superior to WASM or any other general-purpose computing VM that I know, as all of these technologies can be implemented directly on NeoVM.
from neo-vm.
@erikzhang I think NVM was dettached from Neo, at the moment IScriptContainer was removed. This was a great step indeed. However, I think a blockchain-inspired vm should be able to perform elaborate blockchain-related computation.
CheckWitness won't fit here, because Witness is a Neo Blockchain concept. But checking a digital signature, of any kind, is a very interesting thing to have here.
from neo-vm.
Good question Shargon. I think that syscalls are meant for interoperability with upper levels, not covered by NeoVM itself. On Neo Blockchain, this represents access to transactions, blocks, etc. On our neoresearch.io/nvm-learn tutorial,it allows to plot on browser canvas, emit javascript alerts, etc. So NeoVM is not affected by.choices on syscall.
Extensions are meant to be documented here, officially, and for all platforms that use NeoVM they will be available. It is a possibility to extend neovm in a controlled way, and allow upper platforms to keep certain control too (by disabling unwanted extensions, for example). For me, its perhaps native contracts, but for NEOVM.
from neo-vm.
I think we should use SYSCALL
. The SYSCALL
s with namespace System
should be implemented by all blockchains that use NeoVM.
from neo-vm.
Useful for Industry Standards: neo-project/neo#972
from neo-vm.
Erik, another practical way to implement this, is to separate all opcodes from 0xaa - 0xbf as extension opcodes. These can be easily disabled, and this way, we can take back CHECKSIG and CHECKMULTISIG for an Unified Entry Point, fully compatible to Neo2.
from neo-vm.
Related Issues (20)
- Nested Nested Nested Nested `StackItem`s could be Out Out Out Out of Memory Again in NeoVM HOT 7
- Optimise the performance of VM with ObjectPool or reusing the existing objects. HOT 4
- Shallow-copy problem for OrderedDictionary.CopyTo in case of Array & Map type HOT 6
- Add 'utf8Size' opcode HOT 4
- Script checks are incomplete
- Can I integrate this vm in to my custom projects? HOT 1
- Efficient way to pass Map type to contract method? OpCode.PACKMAP? HOT 1
- Adapt code documentation of UNPACK opcode
- ReferenceCounter can become negative HOT 18
- Is this `MEMCPY` expected to push nothing to the stack?
- ScriptBuilder should have an emitPush overload that takes a ReadOnlySpan<byte>
- How to customize an interface in interoperation service layer HOT 3
- Presssure test on v3.3.0 cause execution failed HOT 1
- v3.3.0 need more than 30 hours for syncing mainnet even it's just about 1.7million blocks HOT 2
- What is the purpose of the second assert of this test? HOT 1
- Missing push in APPEND?
- EmitPush(bool) should convert stackitem to right type
- Set Operation in a Get Function HOT 2
- Nullable Project HOT 5
- Script class crashes on `GetInstruction(i).Size` HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from neo-vm.