README
¶
GnoVM -- Gnolang Virtual Machine
GnoVM is a virtual machine that interprets Gnolang, a custom version of Golang optimized for blockchains, featuring automatic state management, full determinism, and idiomatic Go. It works with Tendermint2 and enables smarter, more modular, and transparent appchains with embedded smart-contracts. It can be used in TendermintCore, forks, and non-Cosmos blockchains.
Read the "Intro to Gnoland" blogpost.
This folder focuses on the VM, language, stdlibs, tests, and tools, independent of the blockchain. This enables non-web3 developers to contribute without requiring an understanding of the broader context.
Language Features
- Like interpreted Go, but more ambitious.
- Completely deterministic, for complete accountability.
- Transactional persistence across data realms.
- Designed for concurrent blockchain smart contracts systems.
Getting started
Install gno
and refer to the examples
folder to start developing contracts.
Check the Makefile to enhance GnoVM, Gnolang, and stdlibs.
Known Issues
- Switch varnames cannot be captured as heap items. test
Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var Package = amino.RegisterPackage(amino.NewPackage( "github.com/gnolang/gno/gnovm", "gnovm", amino.GetCallersDirname(), ).WithDependencies().WithTypes( MemFile{}, "MemFile", MemPackage{}, "MemPackage", ))
Functions ¶
func SplitFilepath ¶
Splits a path into the dirpath and filename.
Types ¶
type MemPackage ¶
type MemPackage struct { Name string `json:"name" yaml:"name"` // package name as declared by `package` Path string `json:"path" yaml:"path"` // import path Files []*MemFile `json:"files" yaml:"files"` }
MemPackage represents the information and files of a package which will be stored in memory. It will generally be initialized by package gnolang's ReadMemPackage.
NOTE: in the future, a MemPackage may represent updates/additional-files for an existing package.
func (*MemPackage) GetFile ¶
func (mempkg *MemPackage) GetFile(name string) *MemFile
func (*MemPackage) IsEmpty ¶
func (mempkg *MemPackage) IsEmpty() bool
func (*MemPackage) Validate ¶
func (mempkg *MemPackage) Validate() error
path must not contain any dots after the first domain component. file names must contain dots. NOTE: this is to prevent conflicts with nested paths.