Skip to content

Tags: gnolang/gno

Tags

chain/test5.0

Verified

This tag was signed with the committer’s verified signature.
zivkovicmilos Miloš Živković
Initial release for test5.gno.land

chain/test4.3

Verified

This tag was signed with the committer’s verified signature.
zivkovicmilos Miloš Živković
Release test4.3 for test4.gno.land

chain/test4.2

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix(gno.land): make gno store cache respect rollbacks (#2319)

This pull request modifies the current `defaultStore` to support
transactionality in the same way as our tm2 stores. A few new concepts
are introduced:

- A `TransactionStore` interface is added, which extends the
`gnolang.Store` interface to support a Write() method.
- Together with corresponding implementations allowing for
transactionality on its cache maps, this means that the Gno store
retained by the VM keeper is only modified atomically after a
transaction has completed.
- The tm2 `BaseApp` has the new "hooks" `BeginTxHook` and `EndTxHook`.
The former is called right before starting a transaction, and the latter
is called right after finishing it, together with the transaction
result.
- This allows us to plug in the Gno `TransactionalStore` in the
`sdk.Context` through the `BeginTxHook`; and commit the result, if
successful, in the `EndTxHook`.
## Overview of changes

- `gno.land`
- `pkg/gnoland/app.go`: the InitChainer is now additionally responsible
of loading standard libraries. To separate the options related to app
startup globally, and those to genesis, the InitChainer is now a method
of its config struct, `InitChainerConfig`, embedded into the
`AppOptions`.
- `pkg/gnoland/app.go`: `NewAppOptions` is only used in `NewApp`, where
most of its fields were modified, anyway. I replaced it by changing the
`validate()` method to write default values.
- `pkg/gnoland/node_inmemory.go`,
`pkg/integration/testing_integration.go`: these changes were made
necessary to support `gnoland restart` in our txtars, and supporting
fast reloading of standard libraries (`LoadStdlibCached`).
- `pkg/sdk/vm/keeper.go`: removed all the code to load standard
libraries on Initialize, as it's now done in the InitChainer. The hack
introduced in #2568 is no longer necessary as well. Other changes show
how the Gno Store is injected and retrieved from the `sdk.Context`.
- `gnovm/pkg/gnolang/store.go`
- Fork and SwapStores have been removed, in favour of BeginTransaction.
BeginTransaction creates a `TransactionalStore`; the
"transaction-scoped" fields of the defaultStore are swapped with
"transactional" versions (including the allocator, cacheObjects and
cacheTypes/cacheNodes - the latter write to a `txLogMap`).
- ClearObjectCache is still necessary for the case of a transaction with
multiple messages.
- The `Map` interface in `txlog` allows us to have a `txLog` data type
stacked on top of another. This is useful for the cases where we use
`BeginTransaction` in preprocess. (We previously used `Fork`.) See later
in the "open questions" section.
- I added an Iterator method on the `txlog.Map` interface - this will be
compatible with [RangeFunc](https://go.dev/wiki/RangefuncExperiment),
once we switch over to [go1.23](https://go.dev/doc/go1.23).
- `tm2/pkg/sdk`
- As previously mentioned, two hooks were added on the BaseApp to
support injecting application code right before starting a transaction
and then right after ending it; allowing us to inject the code relating
to the Gno.land store while maintaining the modules decoupled
- Other
- `gnovm/pkg/gnolang/machine.go` has a one-line fix for a bug printing
the machine, whereby it would panic if len(blocks) == 0.

## Open questions / notes

- TransactionalStore should be a different implementation altogether;
but decoupling the logic which is used within the stores without doing a
massive copy-and-paste of the entire defaultStore implementation is
non-trivial. See [this
comment](#2319 (comment)),
and [this PR](#2655) for a draft
proposed store refactor, which would render the store more modular and
testable.
- There is an alternative implementation, which in micro-benchmarks
would be somewhat faster, in place of the `txLog`; it's still in
`gnolang/internal/txlog/txlog_test.go` where it also has benchmarks. See
[1347c5f](1347c5f)
for the solution which uses `bufferedTxMap`, without using the
`txlog.Map` interface. The main problem with this approach is that it
does not support stacking bufferedTxMaps, thus there is a different
method to be used in preprocess - `preprocessFork()`.

chain/test4.1

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix(sdk/vm): re-load iavl store from backup if empty (#2568)

This is a hack; during initialization, the iavlStore is backed up to the
baseStore, and it is then recovered in Initialize if the iavlStore is
found to be empty (but there's supposed to be packages inside).

This is a hotfix for test4 non-validator nodes.

It still requires to start up the non-validator node once, with the new
changes applied, with a fresh db

chain/test4.0

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
feat: test4 `genesis.json` and suggested `config.toml` (#2508)

## Description

This PR adds the **test4** `genesis.json` and suggested `config.toml`.
It also includes a relevant README to highlight important `config.toml`
params.

⚠️  **IMPORTANT** ⚠️ 

You can view the genesis transactions that differ from the examples
folder here:

dev/zivkovicmilos/test4-genesis...dev/zivkovicmilos/test4-genesis-prepared

In case anyone is curious, I extracted the bech32 representation of the
public keys from the `genesis.json` using this script:

```go
package main

import (
	"fmt"

	_ "github.com/gnolang/gno/gno.land/pkg/gnoland"
	"github.com/gnolang/gno/tm2/pkg/bft/types"
)

func main() {
	path := "../gno/misc/deployments/test4.gno.land/genesis.json"

	doc, err := types.GenesisDocFromFile(path)
	if err != nil {
		panic(err)
	}

	for _, v := range doc.Validators {
		fmt.Printf("Name: %s\n", v.Name)
		fmt.Printf("Address: %s\n", v.Address)
		fmt.Printf("PubKey: %s\n", v.PubKey.String())

		fmt.Printf("\n===========================\n\n")
	}
}
```

<details><summary>Contributors' checklist...</summary>

- [x] Added new tests, or not needed, or not feasible
- [x] Provided an example (e.g. screenshot) to aid review or the PR is
self-explanatory
- [x] Updated the official documentation or not needed
- [x] No breaking changes were made, or a `BREAKING CHANGE: xxx` message
was included in the description
- [ ] Added references to related issues and PRs
- [ ] Provided any useful hints for running manual tests
- [ ] Added new benchmarks to [generated
graphs](https://gnoland.github.io/benchmarks), if any. More info
[here](https://github.com/gnolang/gno/blob/master/.benchmarks/README.md).
</details>

---------

Co-authored-by: Manfred Touron <94029+moul@users.noreply.github.com>
Co-authored-by: Salvatore Mazzarino <salvatore.mazzarino@tendermint.com>
Co-authored-by: Blake <104744707+r3v4s@users.noreply.github.com>

chain/test3.2

fix(website): help page and ffcli arg/flags ordering (#622)

chain/test3.1

fix: `unexpected type gnolang.BigdecValue` (#500)

fix: bigdevalue

chain/test3.0

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
feat: test3 (#385)

* feat: test3

Signed-off-by: Manfred Touron <94029+moul@users.noreply.github.com>

* chore: update home for test3 and local devnet

Signed-off-by: Manfred Touron <94029+moul@users.noreply.github.com>

* chore: update home

Signed-off-by: Manfred Touron <94029+moul@users.noreply.github.com>

Signed-off-by: Manfred Touron <94029+moul@users.noreply.github.com>

chain/test2.0

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
chore: use independence-day's genesis for test2.gno.land (#285)

chain/test1.0

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
Website: Add syntax highlighting + security practices (#167)

* feat(website/static): added highligh go script

* feat(website/static): added highlight go theme

* feat(website/views): added syntax highlighting for files

* feat(website/views): highlighjs throw on unescaped html

* feat(website/views): added sanitize for marked output

* feat(website/static): added dompurify

* feat(docs/security): added dependencies guide for website

* feat(website/views): sanitize marked output in home

* fix(docs/security): typos

* fix(webiste/views): <script> type for packae_file dependencies

* feat(docs/security): added DOMPurify dependency

* fix(docs/security): typos