* revert back to iavl v1 to avoid hash changes on new modules like
we are seeing on the v0.24.x to v0.25.x upgrade block. Also, add
replace statements for exp and rapid to match upstream cosmos-sdk
* fix sharding prune store logging and error return.
* add comment to clarify WithKeyTable usage
Add upgrade handler
Migrates from x/evmutil to x/precisebank:
- Fractional balances
- Reserve funds
- Mints or burns coins to ensure fractional balances are fully backed.
Initialize remainder if necessary to ensure valid state.
E2E test with fixed kvtool
* chore(nodejs): Use active LTS v20 for nodejs
This updates nodejs to use the active LTS v20 from the maintenance LTS
v18. This expands compatibility with packages, adds native support for
more features, etc.
In addition, the ci-seed-chain workflow was updated to use the
.tool-version file instead of hardcoded version.
* chore(hardhat): Update hardhat for nodejs 20 support
* chore(ci): update internal testnet genesis and seed to support committee voting
* chore(ci): update gov proposal voting period to 7 days
* chore: use auto gas calculation
This adds the precisebank protobuf generated swagger documentation to
the swagger combine configuration in order to be rendered in the
swagger.yaml file.
This adds the upstream ethermint swagger file to the proto-deps and adds
the swagger combine config to include it in the kava generated swagger.
Run `make proto-all` to update.
* feat!(precompile): Add registry and genesis tests
Based on evgeniy-scherbina's work, this adds a new precompile module
which defines a contract moudule with an example noop contract that
will be will be used for implementing test functions. In addition,
it defines a registry module that instantiates stateful precompile
contracts and associates them with an address in a global registry
defined in kava-labs/go-ethereum. See precompile/README.md for more
information.
The kava-labs/go-ethereum and kava-labs/etheremint replace statements
are updated to support these changes as well as an update to kvtool
which includes genesis state for the registry.NoopContractAddress and
initializes the contract's EthAccount with a non-zero sequence and
codehash set to keccak256(0x01), and sets the contract code to 0x01.
See tests/e2e/e2e_precompile_genesis_test.go for an overview of the
expected genesis state for an enabled precompile.
Co-authored-by: evgeniy-scherbina <evgeniy.shcherbina.es@gmail.com>
* chore: Precompile readme improvements
This fixes a typo (import -> important) and uses package terminology
instead of unclear module terminology. This aligns best with golang
terminology were modules and packages are distinctly different and
modules are defined using go.mod.
* chore: Improve noop contract godoc
Add a more meaningful godoc where the noop contract is constructed.
* chore(e2e): Improve comments around query checks
Improve the clarity of comments around where the error is checked for
accounts and why it is not checked directly.
In addition, improve comment on why both grpc and rpc code is fetched
and where they are used.
---------
Co-authored-by: evgeniy-scherbina <evgeniy.shcherbina.es@gmail.com>
This adds a regular expression that matches `func Test...` or
`func (suite *Suite) Test...` style functions and disables the length
check. An example from e2e tests that failed lint:
`func (suite *IntegrationTestSuite) TestEip712BasicMessageAuthorization()`
These should not be replicated to docker contexts as they are local to
the build host. In addition, the golangci-lint currently doesn't assume
the host user nor add other group read permissions when writing files,
so this causes permission errors when other docker processes attempt to
copy the files.
* chore(lint): Update local make lint to match CI
This updates the `make lint` behavior to match the command being
run in CI.
In addition, we refactor the make lint command to use docker in order to
to ease cross platform install, use a local build cache that integrates
with make clean, use the same version file, and encapsulate the logic in
its own make include.
We also remove the old lint logic as to not introduce a duplicate target
and avoid confusion from a difference in behavior.
While solutions like act for running github actions locally work, it is
not as straightfoward, is slower, and uses the local git repository
instead of a clone (though I am not sure how the checkout step works
within act).
* fix(lint): Use shared timeout with .golangci.yml
Instead of using a local and different timeout in the lint makefile
target we can rely on golangci to load this configuration from
.golangci.yml instead and share this setting with CI.
* fix(lint): Fix golangci-lint cache mount path
This uses the correct cache dir default of ~/.cache enabling use
of cache between lint calls.
* fix(lint): Fix lint caching
This includes a couple fixes - 1) It adds support for full caching of go
mod and go build, speeding up the lint process quite a bit. And 2) does
not mix lint cache with make clean files -- the docker container creates
root owned files that cause make clean to error and we choose not to
require make clean to run with higher permissions. The cache must be
deleted manually.
We use three sections through-out the codebase -- standard, default, and
localmodule. This change updates the linter to enforce this pattern as
files are added or modified.
This resolves ASA-2024-008. Patched in 0.37.7 but that version has a breaking change which was reverted in 0.37.8.
The replace for golang.org/x/exp prevents breaking change in slices package causing compile error with gogoproto
* update golinter + add go sec
* add golangci.yml
Co-authored-by: @faddat jacobgadikian@gmail.com
* update
* update
* fix release version
* remove sec, update from pr comments, cleanup golangci.yml to not break on master
* remove @faddat, not valid codeowner
* remove unnecessary make command
* remove incorrectly named golangci.yml file
* add --new-from-rev
* use master instead of main
* remove extra echo
* set the exports properly
* add setup go to work with act
* add some docs to golangci linter
* test new-from-rev
* enable more linters, but app.go back
* verify issues-exit-code being gone
* put it back
* enable more linters
* remove exclusions
* add additional tests that attempt to borrow funds from the insolvent market(should fail), and attempt to borrow funds from the not insolvent market (it will fail, but shouldn't). The not insolvent market should continue to processs borrows
* remove unused code
* make tests less specific for string contains
* add new get total reserves for denoms functionality
* start utilizing GetTotalReservesForDenoms in ValidateBorrow
* update tests for Borrow to not fail when borrowing from an insolvent market
* use get total reseves in GetTotalReservesForDenoms for reusability
* refactor GetTotalReservesForDenoms to GetTotalReservesByCoinDenoms for more clarity
* change the structure for new and old tests and add more verbosity for other tests
* remove print
* remove unneeded code
* add paren
* adjust structure again after initial PR
* remove duplicate test case with invalid test name, and update to use error contains in places where it was validating if true for strings contains
* no need for keeper method
* add additional tests that attempt to borrow funds from the insolvent market(should fail), and attempt to borrow funds from the not insolvent market (it will fail, but shouldn't). The not insolvent market should continue to processs borrows
* remove unused code
* make tests less specific for string contains
* change the structure for new and old tests and add more verbosity for other tests
* remove print
* remove unneeded code
* add paren
* remove duplicate test case with invalid test name, and update to use error contains in places where it was validating if true for strings contains
---------
Co-authored-by: Sam Sheffield <sam.sheffield@kavalabs.io>
Module reserve represents fractional balances, so it should be hidden to consumers to not have a misleading total balance that doubles the fractional balances. This modifies GetBalance() and SpendableCoin() to always return zero coins when fetching the reserve address balance for fractional amounts.
Change GetBalance() to return full balances instead of spendable to align behavior with x/bank. Add SpendableCoin() method with support of akava for use in x/evm.
Emits the **total** akava amount for both ukava and akava send/mint/burns. If both akava,ukava are sent (not possible via x/evm nor cosmos messages but still an edge case), then the sum is emitted. No other denoms are emitted by x/precisebank as they will be emitted by the underlying x/bank
Fix reserve minting an extra coin when the recipient module both carries fractional over to integer balance AND remainder is insufficient. Adjusts fractional carry to simply send from reserve, instead of doing an additional mint. Add invariant to ensure reserve matches exactly with fractional balances + remainder, failing on both insufficient and excess funds.