All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Nibiru v2.17 hardens EVM transaction admission and proposal construction, introduces sudo-governed Wasm block hooks, and fixes event handling when EVM execution reverts. It also makes the ERC-2470 singleton factory part of default genesis and consolidates the Cosmos SDK, IBC Go, Wasm module, and Wasm VM into the Nibiru repository.
- Release Link: v2.17.0.
- Date: 2026-07-23
- Draft source range: non-Dependabot release work from
v2.16.0throughv2.17.0-test.5.
- Future-nonce flood protection - Nodes use an EVM-aware, sender-and-nonce-indexed application mempool. Each authenticated sender may hold at most 8 live nonce slots, and conflicting transactions for an occupied nonce are rejected. (#2702)
- Executable EVM proposals - Proposal construction selects contiguous nonce chains that begin at each sender's committed state nonce instead of packing unusable future-nonce gaps into blocks. The index remains node-local and does not become consensus state. (#2702)
- Wasm automation at block boundaries - A sudo-configured registry contract can plan privileged Wasm
Sudocalls duringBeginBlockandEndBlock, with bounded plans, isolated execution, and structured events. (#2667) - Correct events after EVM reverts - Reverting an EVM
StateDBsnapshot also removes Cosmos SDK events emitted after the snapshot, preventing events from reverted Bank, Wasm, or FunToken side effects from reaching indexers. (#2696, #2096) - Canonical deterministic deployment factory - Fresh genesis states include the ERC-2470 singleton factory at its standard address and the matching Cosmos
EthAccount, allowing permissionlessCREATE2deployment without a bootstrap transaction. (#2697) - First-party chain dependencies - Nibiru's Cosmos SDK, IBC Go, Wasm module, and Wasm VM implementations now live in the repository as first-class source under directories
lib/andx/wasm. (#2656, #2686, #2690, #2696) - Explicit missing FunToken mappings - EVM precompile method
IFunToken.getErc20Addressnow reverts when no mapping exists instead of returningaddress(0). (#2686) - Reliable release metadata - Release builds inject version information into the in-tree Cosmos SDK package used by
nibid, and CI rejects binaries with empty version fields. (#2713)
What it fixes: A sender could submit many transactions with random future nonces. The EVM ante flow accepted any nonce within its configured future window, CometBFT retained and gossiped those transactions, and proposers could include transactions that could not execute because earlier nonces were missing.
v2.17 adds type evm.Mempool, a node-local Cosmos SDK mempool that indexes
standard EVM transactions by authenticated sender, EVM nonce, and CometBFT
transaction key. The production application allows each sender to own at most
8 live nonce slots. An exact retransmission is idempotent, while a different
transaction for an occupied (sender, nonce) slot is rejected. Fee-based
same-nonce replacement is not part of this implementation.
(#2702)
Admission runs after EVM signature recovery so the index uses the authenticated sender. A slot is reserved only after the rest of the ante flow succeeds, which prevents an invalid transaction from consuming sender capacity.
Proposal construction uses the application mempool to select only executable nonce chains:
committed sender nonce N
-> select live transaction N
-> select N+1, N+2, ... while the chain remains contiguous
-> stop at the first missing nonce or block byte/gas limitThe proposer preserves the original outer Cosmos transaction bytes and keeps CometBFT ordering for non-EVM transactions. EVM sender heads compete by priority, but a higher future nonce cannot skip a missing predecessor. (#2702)
This protection does not fork CometBFT and does not add mempool contents to
consensus state. Different nodes may accept different same-nonce variants;
ProcessProposal and block execution validate the proposed bytes against chain
state without consulting local mempool membership.
CometBFT setting recheck = true should remain enabled. After a block advances
a sender's state nonce, recheck removes stale transactions and disconnected
nonce tails from both the CometBFT and application mempools. Proposal
construction still excludes disconnected tails if recheck is disabled, but
those transactions can remain stored on the node.
What it enables: Chain governance can configure one registry contract to plan privileged Wasm calls at the beginning and end of each block. This creates a controlled path for protocol automation without placing recurring operations in the public mempool.
The sudo root can set state field wasm_block_hooks_contract. When configured,
the Wasm module queries that registry with one of these messages:
{"begin_block_plan": {}}{"end_block_plan": {}}The returned plan may contain up to 32 target calls. Each call must use a valid
32-byte contract address and a JSON object payload no larger than 16 KiB.
Targets execute through method Keeper.Sudo in isolated cache contexts, so one
failed target rolls back its own writes without blocking valid sibling calls.
(#2667)
Hook execution emits event types wasm_block_hook/begin_block_failed,
wasm_block_hook/end_block_failed, and wasm_block_hook/summary. Summary
events report the total dispatch count and, when needed, a structured list of
individual failures for indexers and operators.
The registry is a chain-critical trust surface: it can request privileged
Sudo calls to arbitrary contracts every block. The default registry address
is empty, so no contract dispatch occurs until the sudo root configures one.
Hook execution uses the block execution context without a dedicated hook gas
budget in this initial version; governance should review registry and target
contracts accordingly.
What it fixes: EVM journal snapshots previously reverted EVM state but left Cosmos SDK events emitted after a snapshot in the transaction event manager. An EVM call that invoked Bank, Wasm, or FunToken behavior and then reverted could therefore expose events for side effects that did not persist.
v2.17 records the event count with each StateDB snapshot. Method RevertToSnapshot
truncates the SDK event list to that count while reverting the EVM journal, so
state and events follow the same rollback boundary.
(#2696,
#2096)
This is especially important for indexers and applications that derive activity from Cosmos event streams. They should no longer observe post-snapshot events from reverted EVM execution.
Fresh Nibiru genesis states include the canonical ERC-2470 singleton factory at
EVM address 0xce0042B868300000d44A59004Da54A005ffdcf9f. The EVM genesis entry
contains the canonical 308-byte runtime code, and auth genesis contains the
matching Cosmos EthAccount and code hash. (#2697)
This gives localnets and future genesis-based networks a well-known,
permissionless CREATE2 deployment surface without requiring the standard's
legacy, non-EIP-155 bootstrap transaction. Application-generated genesis and
command nibid init use the same paired auth and EVM account state.
The expected runtime code hash is:
0xc4d5542b53a8b779595a20a8ddd60e58a6c49d3c3decc2df83ced1c69c8ca807This code change does not insert the factory into existing mainnet or testnet
state during the v2.17 upgrade. Those networks already received the canonical
factory through the separate deployment transaction recorded in the release
work. Operators can verify the installed code with EVM JSON-RPC method
eth_getCode.
Nibiru now vendors IBC Go v7 and the 08-wasm light client under directory
lib/ibc-go. The application imports that first-party source directly, keeping
Nibiru-specific patches and version alignment in the same repository as the
chain. (#2686)
Inactive ICS-29 fee middleware has been removed from application wiring and the vendored source. Its historical store key remains as an inert tombstone, so the removal does not reuse or reinterpret existing state.
EVM precompile method IFunToken.getErc20Address now reverts with an explicit
error if the requested bank denomination has no FunToken mapping. Contracts
that treated address(0) as a not-found result must update their error handling.
(#2686)
v2.17 completes a large repository-layout transition:
- The chain's Cosmos SDK fork is first-party source under directory
lib/cosmos-sdk. - IBC Go and the 08-wasm light client are first-party source under directory
lib/ibc-go. - The chain Wasm module is first-party source under directory
x/wasm. - Go package
wasmvmand its nativelibwasmvmartifacts live under directorylib/wasmvm. - EVM modules, tools, embedded contracts, and end-to-end tests are grouped
under directory
evm.
The root Go module imports these packages through
github.com/NibiruChain/nibiru/v2/... paths instead of upstream Cosmos SDK and
IBC module paths. Local protobuf generation resolves the in-tree workspaces and
includes regression checks against reintroducing upstream generated imports.
Nibiru's custom inflation implementation also moves from package directory
x/inflation to package directory x/mint.
(#2644,
#2686,
#2690)
Wasm VM builds and releases are now owned by the same repository. Workflow
wasmvm.yml builds native libraries, and tags in the lib/wasmvm/vX.Y.Z
namespace publish the corresponding artifacts. The chain binary consumes the
in-tree Go package directly rather than relying on a root replace directive.
(#2656,
#2696)
These changes are primarily dependency ownership and repository architecture, but downstream Go users that imported fork internals or relied on old source paths should review their imports and module replacements.
The release build path now uses defensive script
contrib/scripts/build-nibiru.sh for local and CI builds. Release workflows use
the same build surface, reducing differences between developer binaries and
published artifacts. (#2652,
#2654)
Protobuf formatting and generation run with host-native tooling rather than the former Docker-based proto toolchain. Buf resolves the root, Cosmos SDK, and IBC proto trees as one workspace, and CI verifies that regeneration leaves a clean working tree. (#2690, #2694)
Wasm VM builder images pin the macOS cross-compilation toolchain and retry transient package installation, improving reproducibility for release assets. (#2708)
After the Cosmos SDK moved in-tree, release linker flags still targeted the
former upstream package and produced an empty result from command
nibid version. The build now injects metadata into package
github.com/NibiruChain/nibiru/v2/lib/cosmos-sdk/version, and a CI script
checks the short and long version outputs before artifacts are published.
(#2713)
The application registers v2.17.0 as a vanilla software upgrade. The upgrade
handler runs module migrations but does not contain release-specific mainnet
state writes.
Not every v2.17 behavior has the same consensus scope:
- The EVM mempool index and sender limit are node-local admission and proposal policy. Proposed transactions still pass consensus validation and execution against chain state.
- Wasm block-hook execution affects the state machine only after the sudo root configures a registry contract.
- SDK event rollback changes the observable event result of reverted EVM execution so events match persisted state.
- ERC-2470 default-genesis entries affect fresh or repaired genesis state, not an existing network upgraded in place.
- Removing inactive ICS-29 application wiring retains the old store-key tombstone.
- Pending EVM transactions - Do not assume a node accepts an arbitrary number of future nonces from one sender. Keep submitted nonce chains contiguous and account for the 8-slot per-sender node limit.
- Same-nonce replacement - v2.17 does not implement fee-based replacement in the application mempool. A different transaction for an occupied sender and nonce slot is rejected by that node.
- Deterministic deployment - Fresh chains expose ERC-2470 factory address
0xce0042B868300000d44A59004Da54A005ffdcf9f. - FunToken lookup errors - Treat a revert from
IFunToken.getErc20Addressas the not-mapped result; do not depend onaddress(0). - Event consumers - Events emitted after a reverted EVM snapshot should no longer appear in committed transaction results.
- Upgrade type: Software upgrade to
nibid v2.17.0with a vanilla upgrade handler and normal module migrations. - Mempool recheck: Keep CometBFT setting
recheck = trueso delivered and stale EVM nonce slots are reconciled automatically after each commit. - Post-upgrade binary check: Run commands
nibid versionandnibid version --long; version and commit fields should be populated. - Post-upgrade transaction check: Submit a short contiguous EVM nonce chain and verify that transactions are admitted, proposed, and removed after execution.
- Wasm hook configuration: An empty field
wasm_block_hooks_contractmeans no block-hook dispatch. If governance configures a registry, monitorwasm_block_hook/*events and review the registry as chain-critical code. - ERC-2470 verification: Existing networks can query EVM JSON-RPC method
eth_getCodeat the canonical factory address and compare its runtime code hash with the value above.
- Use in-tree package paths under directories
lib/cosmos-sdk,lib/ibc-go,lib/wasmvm, andx/wasm; avoid reintroducing upstream module imports into generated or application code. - Run command
just test-ibcfor the vendored IBC suite; default fast test recipes exclude the large directorylib/ibc-go. - Keep release linker flags aligned with in-tree package
lib/cosmos-sdk/version, and retain thenibidversion-output regression check. - Preserve original transaction bytes when changing EVM proposal selection; decoded and re-encoded SDK transactions are not guaranteed to have identical outer bytes.
- Keep
ProcessProposaland block execution independent of node-localevm.Mempoolmembership. - Treat Wasm hook plan bounds, cache-context isolation, event taxonomy, and sudo registry authority as state-machine interfaces when extending the initial implementation.
Nibiru v2.16 disables delegated x/authz execution, adds token-aware EVM
balance queries across the Bank and ERC20 representations, and shortens the
mainnet governance voting period from 48 hours to 24 hours. It also moves the
build baseline to Go 1.25 and refreshes core Go, JavaScript, and CI
dependencies.
- Release Link: v2.16.0.
- Date: 2026-07-02
- Draft source range: non-Dependabot release work from
v2.15.0throughv2.16.0.
- Authz execution disabled - Messages
MsgGrant,MsgExec, andMsgRevokedeterministically fail with errorErrAuthzDisabled. The restriction also applies when a Wasm contract attempts to dispatch those messages through Stargate. (#2629) - Compatibility without delegated authority - The authz module remains registered for codec and service compatibility, but authz queries return empty responses, CLI authz commands are removed, and genesis import/export no longer exposes stored grants. Existing grant state is retained rather than deleted. (#2629)
- Multi-VM token balances - EVM query
QueryBalanceaccepts an optional token identifier and returns Bank-side and ERC20-side balances with base-unit and human-readable metadata. It resolves native NIBI, WNIBI, FunToken mappings, bank-only denoms, ERC20-only contracts, and supported aliases. (#2630, #2631, #2551) - Correct WNIBI accounting - WNIBI balances come from the ERC20 contract's independent ledger rather than being inferred from native EVM gas balance. Token resolution also avoids treating short hex-like bank denoms as ERC20 addresses and preserves zero-decimal ERC20 metadata. (#2631)
- Faster mainnet governance - The v2.16 upgrade handler changes governance parameter
VotingPeriodfrom 48 hours to 24 hours on chaincataclysm-1. (#2632) - Go 1.25 build baseline - The root module and Docker builder move to Go 1.25, while CI reads the required Go version from file
go.mod. (#2623)
What changes: Applications can no longer create, execute, or revoke Cosmos SDK authz grants. This is a consensus and state-machine behavior change rather than a CLI-only restriction.
The authz message server rejects message types MsgGrant, MsgExec, and
MsgRevoke with module error ErrAuthzDisabled. The Wasm Stargate message
encoder rejects the same message type URLs, so a contract cannot bypass the
restriction by dispatching authz messages through x/wasm.
(#2629)
The module preserves enough wiring for compatibility:
- Authz protobuf types, interfaces, and gRPC services remain registered.
- Authz query methods return structurally valid empty responses.
- Existing grant key-value state is not deleted or rewritten.
- Genesis import ignores authz grants, and export emits default empty authz genesis.
- Begin-block pruning of expired grants no longer runs.
- Authz query and transaction commands are removed from
nibid.
Empty query results therefore mean that authz behavior is disabled; they do not prove that historical grant data was erased. Because pruning is disabled, historical grant state can remain stored after its expiration time.
This release narrows the available delegated-execution surface. It does not claim to complete broader rollback hardening or audits of every cross-module call path.
What it enables: One EVM query can describe a token balance across Nibiru's Cosmos Bank and ERC20 representations without requiring clients to reconstruct FunToken mappings and token metadata.
Request type QueryBalanceRequest adds optional field token. Response type
QueryBalanceResponse adds nullable sections bank and erc20. These sections
include base-unit and human-readable balances, symbol, decimals, and the
resolved bank denom or ERC20 contract address.
(#2630,
#2551)
The server resolves:
- Native NIBI and wrapped token WNIBI.
- Bank denoms and ERC20 contracts connected through FunToken mappings.
- Bank-only denoms and ERC20-only contracts.
- Supported aliases
WNIBIandUSDC.
Legacy requests without field token continue returning native field
balance_wei. If token resolution fails, the response also retains that legacy
native-balance shape. The new protobuf fields are additive.
Follow-up corrections make WNIBI read method balanceOf from the wrapped-token
contract instead of equating WNIBI with native NIBI. ERC20 detection requires a
full address, metadata calls preserve a real zero-decimal value, and the CLI
delegates token resolution to the query server.
(#2631)
The v2.16 upgrade handler changes mainnet governance parameter VotingPeriod
from 48 hours to 24 hours. The custom parameter write runs only when the chain
ID is cataclysm-1; other networks proceed directly to normal module
migrations. (#2632)
If the governance parameter update fails, the handler logs
v2.16.0 upgrade failure, emits event type upgrade_failure, and still runs
module migrations. The upgrade therefore does not halt solely because the
voting-period write failed. Operators must query governance params after the
upgrade rather than using continued block production as proof of success.
The release adds no store upgrades. Its state-machine changes come from the mainnet governance parameter write and the new binary's disabled authz behavior.
The 24-hour fixed voting period is separate from later fast-track governance designs. v2.16 does not add early proposal finalization, review-window extensions, or time-targeted software-upgrade execution.
The minimum Go version becomes 1.25.0, and the release Docker builder uses Go
1.25. CI setup reads the required toolchain version from file go.mod, reducing
version drift between local, container, and workflow builds.
(#2623)
Dependency maintenance includes:
- Go packages
golang.org/x/text,golang.org/x/crypto,golang.org/x/mod,cosmossdk.io/errors,btcutil, andtidwall/gjson. (#2605, #2606, #2624, #2625, #2626, #2627) - Go gRPC and network packages, plus JavaScript packages
ws,viem,qs,esbuild, Vite,form-data, andjs-yaml, through the synchronized dependency roll-up. (#2623) - GitHub Actions
actions/checkoutand Codecov action updates. (#2611, #2614)
The btcutil update also adapts the in-tree no-CGO secp256k1 signer to the
updated SignCompact function signature.
- Authz clients - Remove dependencies on grant creation, revocation, and delegated execution. Empty authz query results represent disabled behavior, not necessarily an empty underlying store.
- Wasm contracts - Do not dispatch authz messages through Stargate; the encoder rejects grant, exec, and revoke message URLs.
- Balance queries - Set request field
tokenwhen querying Bank and ERC20 representations. Continue omitting it when only nativebalance_weiis needed. - WNIBI - Treat wrapped NIBI as an ERC20 balance independent of native NIBI gas balance.
- Governance timing - Mainnet voting closes after 24 hours, so interfaces and alerting should not assume the prior 48-hour window.
- Upgrade type: Mainnet software upgrade to
nibid v2.16.0with a custom governance parameter write followed by module migrations. - Governance check: Query governance params and confirm parameter
voting_periodequals86400s. - Failure monitoring: Check upgrade logs and event type
upgrade_failure; continued block production does not prove the parameter write succeeded. - Authz check: Confirm authz transactions reject with module error 13 and queries return empty compatibility responses.
- EVM query check: Smoke-test both the legacy native balance request and a token-specific Bank/ERC20 balance request.
- Keep authz message, CLI, Wasm Stargate, genesis, simulation, and begin-block behavior aligned so delegated execution cannot be reintroduced through one surface unintentionally.
- Do not reuse or reinterpret retained authz store data without a deliberate migration and compatibility review.
- Preserve the protobuf-wire compatibility of optional token request and nullable Bank/ERC20 response fields.
- Use Go 1.25.0 or later for builds, and keep CI toolchain selection aligned
with file
go.mod.
Nibiru v2.15 restores the legacy EVM oracle precompile path needed by MIM OFT fee quoting, ships the patched Wasmer runtime needed for Sai Wasm deployment on ARM64, and makes local development and EVM end-to-end tests easier to run and debug.
- Release Link: v2.15.0.
- Date: 2026-06-25
- Draft source range: non-Dependabot release PRs from
v2.14.0throughv2.15.0.
- MIM OFT bridge recovery - The legacy EVM oracle precompile at
0x0801is restored as a narrow compatibility surface for deployed contracts that still callchainLinkLatestRoundData("unibi:uusd"). The precompile now reads a configuredx-oracleWasm adapter backed by Sai oracle data instead of nativex/oraclestate. (#2621) - No return to native oracle operations - Native oracle voting, feeder duties, slashing, messages, and stale module exchange-rate state remain deprecated. v2.15 restores only the EVM compatibility path needed by legacy Chainlink-like callers. (#2621)
- Upgrade-time EVM plugin wiring - The v2.15 upgrade handler configures EVM params field
wasm_pluginswith plugin namex-oracleand the verified deterministic adapter addressnibi1jc6cvkzj73mz685kfdydhugnx4evhn6mupngvhpmw5sapr98mp2sdshh3r. (#2621) - Patched Wasmer runtime -
Nibirunow consumes Nibiru-publishedgo-wasmvm v1.10.0, which carries the ARM64 Singlepass relocation fix needed to store and instantiate larger Sai Wasm contracts without theImpossibleRelocation(Dynamic(DynamicLabel(0)))panic. (#2618, #2617) - Darwin build support for the patched runtime - Build tooling downloads the Nibiru
go-wasmvmDarwin static library asset, removing the prior Darwin guard for this runtime line and making macOS validation part of the normal artifact path. (#2618) - Localnet in the binary -
nibid localnet --script | bashprints an embedded single-node localnet script, so developers can start a localnet from an installednibidbinary instead of findingcontrib/scripts/localnet.shin the repository. (#2616) - EVM E2E diagnostics - EVM end-to-end tests use a shared receipt polling helper with explicit query counts, block waits, tx hashes, receipt status, log counts, and elapsed time. This targets hanging
etherswaits and makes CI failures easier to interpret. (#2620)
What it enables: MIM OFT fee quoting can use the historical Chainlink-like
EVM oracle ABI again, while Nibiru continues to keep native x/oracle
operations disabled.
The production failure path was:
MIM OFT send(...)
-> FeeHandler.quoteNativeFee()
-> aggregator.latestRoundData()
-> 0x0801 chainLinkLatestRoundData("unibi:uusd")
-> revert because native x/oracle is disabledv2.15 restores precompile address 0x0000000000000000000000000000000000000801
for read-only compatibility. The revived precompile supports
queryExchangeRate and chainLinkLatestRoundData, preserves the old
18-decimal response shape expected by legacy Solidity callers, and returns
timestamps from the underlying Sai oracle update time where Chainlink consumers
typically perform freshness checks. (#2621)
The data path is intentionally narrow:
EVM precompile 0x0801
-> EVM params plugin "x-oracle"
-> x-oracle Wasm adapter
-> Sai oracle contractThe adapter owns legacy pair routing and Sai token-index mapping. The initial
supported legacy symbols are ubtc:uusd, ueth:uusd, uatom:uusd,
unibi:uusd, and uusdc:uusd. uusdt:uusd remains unsupported unless Sai adds
a deterministic USDT source. (#2621, sai-perps#379)
Why it matters: The EVM precompile needs a chain-configured adapter address, not a hard-coded side channel or a revived oracle module state store.
v2.15 adds EVM params field wasm_plugins, with plugin name x-oracle pointing
at the adapter contract address used by precompile execution. SetParams
validates plugin names and Bech32 addresses, rejects duplicate plugin names, and
derives EvmState.WasmPlugins from the ordered params slice so writes remain
deterministic. (#2621)
The v2.15 upgrade handler sets:
wasm_plugins:
- name: x-oracle
addr: nibi1jc6cvkzj73mz685kfdydhugnx4evhn6mupngvhpmw5sapr98mp2sdshh3rThat address is the deterministic instantiate2 address of the Sai x-oracle
adapter from Sai Wasm artifact release
wasm-contracts/v1.22.0.
The same adapter address exists on mainnet and testnet because the deployment
used the same Foundation Treasury CW3 creator, optimized Wasm code hash, fixed
salt x-oracle-nibiru, and fixed init JSON. Testnet then used a Treasury
UpdateConfig transaction to point the same adapter address at the testnet Sai
oracle. (#2621)
The handler follows the existing non-halting upgrade convention: if plugin
configuration fails, it logs v2.15.0 upgrade failure, emits an
upgrade_failure event, and still runs module migrations. Direct 0x0801 calls
then fail clearly until EVM params are corrected. (#2621)
What it fixes: ARM64 environments could panic while compiling larger
CosmWasm artifacts, including Sai perp Wasm, with error
ImpossibleRelocation(Dynamic(DynamicLabel(0))).
v2.15 bumps module github.com/CosmWasm/wasmvm to v1.10.0 and replaces it
with Nibiru-published module github.com/NibiruChain/go-wasmvm v1.10.0. This
keeps the public import path stable while consuming a Nibiru runtime build that
includes the ARM64 Singlepass relocation fix validated against the real Sai perp
Wasm artifact. (#2618, #2617)
Build tooling now downloads libwasmvm assets from
NibiruChain/go-wasmvm instead of upstream CosmWasm/wasmvm. Linux builds use
the patched musl archives, and Darwin builds fetch release asset
libwasmvmstatic_darwin.a. This narrows the runtime upgrade to the current
CosmWasm v1 stack and leaves the broader CosmWasm v2 / SDK migration as separate
work. (#2618)
Validation recorded in the issue and PR includes go mod tidy, go mod verify,
a clean just install, nibid version --long showing the module replacement,
and a local Sai deploy path that stored and instantiated Sai Wasm contracts
successfully. (#2618, #2617)
nibid localnet is now part of the installed binary. With --script, it prints
an embedded localnet setup script that can be piped into Bash:
nibid localnet --script | bashWithout --script, the command shows help. The embedded script is tuned for
CLI use, while contrib/scripts/localnet.sh also gained support for a BINARY
environment override and more reliable process detection when a custom binary
path is used. (#2616)
The nibid helper for decoding base64-encoded Stargate messages now emits
decoded protobuf message values as proper JSON objects instead of stringified
JSON. This makes multisig proposal payload inspection easier when reviewing
generated CW3 stargate messages. (#2618)
EVM E2E tests now use helper txWait instead of direct tx.wait(...) calls in
standard test files. The helper polls getTransactionReceipt, waits for new
blocks between bounded attempts, and logs enough context to see whether a test
is missing a receipt, waiting on block production, or observing a reverted
transaction. (#2620)
This change does not alter chain behavior. It reduces CI ambiguity for EVM tests around receipts, filters, logs, zero-gas flows, native transfers, and debug queries. Passkey-specific paths keep their direct wait behavior where appropriate. (#2620)
The release branch also registers v2.14.1 as a vanilla historical upgrade
before v2.15.0, so upgrade tests and local rehearsal paths know about the
intermediate release tag. (#2618)
Build metadata and release asset URL construction were cleaned up while moving
libwasmvm downloads to NibiruChain/go-wasmvm. This keeps the asset source
explicit and avoids mixing upstream CosmWasm/wasmvm release naming with
Nibiru-published runtime artifacts. (#2618)
- MIM OFT quotes - Legacy callers that reach precompile address
0x0801throughchainLinkLatestRoundData("unibi:uusd")should be able to receive Sai-backed oracle data after the v2.15 upgrade configures pluginx-oracle. - Oracle compatibility scope - This is not a full native oracle revival. The supported path is EVM precompile
0x0801backed by the configured x-oracle adapter. - Supported legacy symbols - Initial adapter mappings cover
ubtc:uusd,ueth:uusd,uatom:uusd,unibi:uusd, anduusdc:uusd. - Localnet startup - Installed binaries can start localnet with
nibid localnet --script | bash; source checkout ofcontrib/scripts/localnet.shis no longer required for the common path.
- Upgrade type: Mainnet software upgrade to
nibid v2.15.0. - Runtime change: The binary links against Nibiru-published
go-wasmvm v1.10.0, carrying the patched Wasmer runtime and updated native library assets. - Post-upgrade EVM check: Query EVM params and verify plugin name
x-oraclepoints atnibi1jc6cvkzj73mz685kfdydhugnx4evhn6mupngvhpmw5sapr98mp2sdshh3r. - Post-upgrade MIM check: Validate the MIM-shaped fee quote path through
0x0801, especiallychainLinkLatestRoundData("unibi:uusd"). - Upgrade-handler behavior: If x-oracle plugin configuration fails, the handler logs and emits an upgrade failure event but still runs module migrations. Monitor upgrade logs and EVM params rather than assuming a halt.
- EVM params now include repeated field
wasm_plugins; keep plugin writes deterministic by going through keeperSetParams. - The x-oracle adapter fixture is embedded under
x/oracle/x_oracle.wasmand shares schema types with the precompile tests. - Oracle precompile tests exercise a real adapter smart-query boundary and a FeeHandler-shaped Solidity caller instead of mocking the full MIM path.
- The Wasmer runtime fix depends on Nibiru-owned runtime release artifacts. Keep
contrib/make/build.mkasset naming aligned withNibiruChain/go-wasmvmreleases for Linux and Darwin. v2.14.1is registered as a vanilla historical upgrade beforev2.15.0; keep future upgrade lists ordered by executed release history.- EVM E2E tests should prefer
txWaitfor ordinary transaction receipt waits so failures carry tx hashes, query counts, blocks, status, logs, and elapsed time.
Nibiru v2.14 makes the Treasury multisig self-managing, hardens governance and tokenfactory safety around deposits and module accounts, and expands zero-gas EVM support so allowlisted applications work more cleanly with browser wallets and payable calls.
- Release Link: v2.14.0.
- Date: 2026-06-10
- Draft source range: non-Dependabot release PRs through
v2.14.0.
- Governance operations - Treasury CW3 becomes the admin for the Treasury CW4 voter group, removing the legacy SDK multisig from routine voter-set administration. Future voter changes can pass through normal CW3 proposals instead of depending on unavailable legacy signers. (#2602)
- Mainnet Treasury cleanup - The v2.14 upgrade handler updates Treasury wasm admin metadata, deprecates the dormant Hot Wallet on mainnet, sweeps its bank balance into Treasury, and leaves its contracts on chain without using them for new operations. (#2602)
- Governance safety - Governance deposits are restricted to the configured
MinDepositdenoms, tokenfactory mint and burn messages cannot target module accounts, and tokenfactory denom creation is limited to governance or sudoers. (#2603) - Zero-gas EVM UX - Eligible calls to
always_zero_gas_contractsare classified before fee-sensitive validation, so wallets that submit nonzero fee fields do not accidentally block otherwise valid gasless transactions. (#2596, #2601) - Wallet RPC compatibility - Wallet-facing EVM JSON-RPC fee hints now report zero fee surfaces for zero-gas flows, including gas price, EIP-1559 block fee fields, fee history, WebSocket heads, transactions, and receipts. Consensus fee rules and EVM execution semantics remain unchanged for non-exempt transactions. (#2601)
- Payable zero-gas calls - Allowlisted zero-gas contracts can receive nonzero native
msg.valuewithout requiring NIBI gas payment, while still enforcing that the sender has enough native EVM balance for the value transfer. (#2610) - Release wiring - Upgrade registration was tightened with shared helper wiring, historical
v2.13.0registration, stronger v2.14 contract-existence checks, and upgrade tests that use the app's real handler path. (#2612)
What it enables: Active Treasury CW3 voters can manage the CW4 voter set
through on-chain proposals, without depending on the legacy nibimultisig
keyring multisig.
The v2.14 upgrade handler performs the Treasury migration on cataclysm-1 and
nibiru-testnet-2. It removes unavailable legacy voters when present, adds the
new Treasury voter, and changes the Treasury CW4 group admin to the Treasury CW3
contract. The Treasury CW3 threshold remains 3-of-N. (#2602)
The same upgrade also aligns wasm module admin authority for Treasury CW3 and CW4 with the Treasury CW3 contract. On mainnet only, it deprecates the old Hot Wallet by sweeping its remaining bank balance into Treasury and moving Hot Wallet CW3/CW4 wasm admin authority to Treasury CW3. The Hot Wallet contracts remain on chain, but should not be used for new operations. (#2602)
Why it matters: Governance deposit escrow must not be burnable or stranded through custom tokenfactory denoms.
This release closes a failure path where a tokenfactory denom admin could burn
governance deposit escrow for a custom denom, leaving governance with refund
state but no coins and causing repeated EndBlock panics when deposits expired.
The forked SDK gov keeper now rejects deposits whose denom is not listed in
MinDeposit, covering both initial proposal deposits and later MsgDeposit
calls. (#2603)
Tokenfactory also rejects MsgMint and MsgBurn requests that target module
accounts, and MsgCreateDenom is restricted to the governance module authority
or addresses allowed by x/sudo. On Nibiru mainnet, this effectively keeps gov
deposits on unibi while reducing spam and defense-in-depth risk from
admin-controlled custom denoms. (#2603)
What it enables: Allowlisted applications can offer gasless EVM calls to users whose wallets still populate standard Ethereum fee fields or run native balance preflight checks.
The chain now classifies eligible EVM transactions before fee-sensitive ante and
message-server validation. For calls to always_zero_gas_contracts, execution
uses zero-gas-aware validation while preserving the raw signed Ethereum
transaction for identity, signature, hash, chain ID, nonce, transaction views,
and debugging. (#2596)
JSON-RPC simulation and tracing paths use the same zero-fee execution semantics
for allowlisted calls, including eth_call, eth_estimateGas,
debug_traceCall, and debug_traceTransaction. Receipts report zero applied
fee for classified zero-gas transactions, while raw submitted wallet fee fields
remain visible where clients expect them. (#2596, #2601)
Wallet-facing RPC hints also return zero fee surfaces across eth_gasPrice,
eth_feeHistory, eth_getBlockByNumber, eth_getBlockByHash, WebSocket
newHeads, transaction responses, and receipts. This targets browser wallet
preflight behavior without changing consensus rules, ante enforcement, EVM
execution, refunds, or BASEFEE semantics for non-exempt transactions. (#2601)
v2.14 removes the old tx.Value == 0 eligibility requirement for
always_zero_gas_contracts. Payable calls to allowlisted contracts can execute
without native NIBI gas payment, but the sender must still have enough native
EVM balance for msg.value. In short: zero-gas skips gas affordability, not
value solvency. (#2610)
The release adds regression coverage for nonzero-value classification, nil/zero/positive/negative value validation, exact-balance ante cases, and message-server value transfer without gas payment. (#2610)
The v2.14 release wiring adds a shared NewVanillaUpgrade helper for standard
migration-only releases, registers v2.13.0 in the historical upgrade list
before v2.14.0, and makes required Treasury CW3/CW4 contract lookups fail
loudly instead of silently skipping required mainnet or testnet updates. Upgrade
tests now reuse the shared EVM test upgrade runner so they exercise the app's
real handler wiring. (#2612)
The repository now also carries the official docs corpus under docs/, plus
local sync scripts, docs cleanup, and localnet developer-experience fixes.
contrib/scripts/localnet.sh gained safer shell settings, configurable log
levels, help text, and better color-output guards, while CI detects localnet
startup failures more directly. (#2609)
Security-report docs were refreshed with the Code4rena competitive audit PDF and direct report links. (#2612)
- Gasless app flows - Calls to allowlisted
always_zero_gas_contractsshould work more reliably with browser wallets that add fee fields or inspect EIP-1559 fee hints before signing. - Payable gasless calls - Allowlisted payable contracts can receive native value without requiring native NIBI gas payment, but senders still need enough balance for the transferred value.
- RPC expectations - Wallet-facing fee hints may show zero for compatibility, while raw submitted transaction fee fields remain available for debugging.
- Docs in repo - Official docs content now lives in
docs/, making chain docs easier to review alongside code changes.
- Upgrade type: Mainnet software upgrade to
nibid v2.14.0. - Governance checks: After upgrade, verify Treasury CW4 contract-state admin and wasm module admin point to Treasury CW3 on the expected chain.
- Safety checks: Watch for required Treasury contract lookup failures during upgrade rehearsal; v2.14 is designed to fail loudly if required contracts are missing.
- EVM checks: Validate allowlisted zero-gas flows through wallet RPC surfaces, transaction execution, receipts, and payable value-transfer cases.
- Upgrade definitions use shared helper wiring so custom handlers stand out from standard migration-only releases.
- The v2.14 multisig upgrade tests instantiate mainnet-derived CW3/CW4 wasm artifacts and assert membership, admin changes, bank sweep behavior, and expected events.
- Tokenfactory and gov tests cover deposit-denom restrictions, module-account mint/burn protection, and sudo-gated denom creation.
- Localnet and docs changes are intentionally included in this release branch but are not consensus-critical upgrade behavior.
- evm: remove oracle precompile registration, runtime implementation, and EVM address
0x...0801from the precompile address set. - evm-embeds: drop oracle Solidity interfaces/wrappers and generated oracle ABI/artifact outputs from
@nibiruchain/solidity. - evm-e2e: remove oracle precompile contract/tests and related helper wiring.
- evm: truncate leaked SDK events on VM-failed EVM transactions while preserving canonical EVM failure metadata. (#2543)
- npm:
@nibiruchain/solidityno longer ships the oracle precompile interface/ABI surfaces (IOracleandNibiruOracleChainLinkLike*).
EVM reliability got tighter, gasless onboarding got broader, and CometBFT got a critical security patch. Plus: passkey (ERC-4337) building blocks and better consensus determinism.
- Release Link: v2.11.0.
- Date: 2026-02-11
- The prior upgrade on mainnet was v2.9.0.
- Fixed - Successful EVM transactions were sometimes shown as failed due to Cosmos SDK gas-meter issues. No longer. (#2521)
- New - Governance-allowlisted "always zero gas" EVM contracts can be called by any sender without paying native NIBI gas fees. Nonzero
msg.valuestill requires sender balance. (#2517) - Improved - Precompiles now report gas cleanly with dynamic handling, and SDK out-of-gas panics are recovered into normal errors instead of crashing the node. (#2516)
- Security - Upgraded CometBFT to patched v0.37.18 for CSA-2026-001 (Tachyon), a critical consensus-level issue affecting block time guarantees. (#2512)
- Consensus safety - Removed nondeterministic Go map iteration in consensus-critical paths (oracle + EVM state commit), addressing intermittent apphash mismatches. (#2503)
- New - Passkey-secured smart accounts (ERC-4337 style) with P-256 signatures: contracts, SDK, and bundler tooling for developers. (#2443, #2493, #2500)
- New - Sai trading: EVM trader service. Trades against local network. (#2440)
What it enables: A passkey-secured smart account flow (ERC-4337 style) for Nibiru EVM development and end-to-end testing, built around P-256 signatures.
Includes:
PasskeyAccountandPasskeyAccountFactorycontracts (minimal ERC-4337 account abstraction, P-256–secured) (#2443)- TypeScript
passkey-sdkfor building UserOperations and talking to a bundler (#2443) - Bundler for passkey transactions (#2493)
- Published passkey-bundler package (#2500)
- Tooling and docs updates for deploying the factory, running a bundler, and E2E testing the flow
Status: This is primarily a developer-facing foundation (contracts + SDK + bundler workflow). Available for integrators today; coming to end-user surfaces as apps integrate.
What it enables: First-time onboarding and "no gas balance" execution for calls into governance-allowlisted contracts.
How it works:
- If a transaction calls a governance-allowlisted contract, the chain marks it as "zero gas" early in the ante handler.
- It then skips gas-related checks (fee deduction, balance-vs-cost checks, mempool min gas price checks, and
RefundGas) while still enforcing account checks andCanTransfer, including native value solvency formsg.value. - A governance-managed list
ZeroGasActors.always_zero_gas_contractsallows any sender to invoke specific EVM contracts with zero gas.
Governance: This is controlled by a governance-managed allowlist. Manage via sudo edit-zero-gas and the always_zero_gas_contracts field.
Key Takeaway: More predictable gas reporting around precompiles and fewer confusing failure modes under OOG.
- FunToken precompile now supports the dynamic-precompile flow so gas accounting and reporting match the EVM's expectations (better tracing and estimation behavior). (#2516)
- Removed redundant internal gas deductions that could double-report gas changes to tracers.
- SDK out-of-gas panics inside bounded meters are recovered and returned as normal out-of-gas errors, so execution fails cleanly instead of crashing the process. (#2447)
Symptom: Explorers and receipts could show failure even when the EVM execution actually succeeded, triggered by late Cosmos SDK gas-meter errors.
Fix: EVM execution is treated as the ground truth. If the SDK gas meter errors after a successful EVM result, the node logs the issue but does not flip the transaction to failed. (#2521)
What to expect after upgrading: Successful EVM transactions should no longer appear as failed solely due to gas-meter misalignment. Any remaining SDK gas-meter issues should surface as logs, not incorrect tx status.
Why it matters: Go map iteration is nondeterministic and can cause consensus failures when order affects state writes or event emission.
Fixes included:
- Sorted iteration for oracle validator performance processing and event emission
- Sorted account address processing in the EVM StateDB commit path
- Addresses intermittent apphash mismatches observed on long-running mainnet nodes (#2503)
This release upgrades CometBFT to v0.37.18, which includes the required fix for CSA-2026-001. (#2512)
What class of issue is this? A consensus-level vulnerability in CometBFT's "BFT Time" implementation, stemming from an inconsistency between commit signature verification and block time derivation. The advisory labels it Critical and notes it impacts validators and protocols that rely on block timestamps.
Operator guidance: Treat this upgrade as high priority if you run validators or timestamp-sensitive applications. Upgrade to nibid v2.11.0 (or later) to receive the patched CometBFT.
- Tx status correctness — Successful EVM calls should no longer be mislabeled as failed due to SDK gas-meter issues.
- Gasless calls — If your contract is allowlisted under
always_zero_gas_contracts, any sender can call it without paying native NIBI gas fees. Nonzeromsg.valuestill requires sender balance. - Precompile behavior — Expect cleaner out-of-gas error surfaces and more accurate gas reporting around dynamic precompiles.
- Passkeys / account abstraction — New contracts and SDK exist for passkey-secured ERC-4337 flows; good time to prototype onboarding without seed phrases.
- CLI flags — Transaction flags are more concise by default so developers can see command-specific flags more clearly. (#2449)
- Upgrade type: Release tag and GitHub release; mainnet upgrade applies the same workflow as other versions.
- Steps: Upgrade binary to
nibid v2.11.0, restart. Standard upgrade procedure—no extra state migrations or config changes known. - Priority: High. The CometBFT CSA-2026-001 fix is critical for consensus safety.
- Monitoring checklist:
- Watch for any lingering "gas-meter misalignment" logs (should not flip tx status).
- Validate precompile-heavy workloads (FunToken, Wasm, oracle precompiles) for expected behavior under load.
- Confirm determinism fixes reduce apphash mismatch risk on long-running nodes.
- Internal Cosmos-SDK moved under
internal/cosmos-sdkfor smoother core edits. (#2451) - Collections library merged into repo; gnark-crypto and go-kzg-4844 updated for compatibility. (#2490)
- CI / Docker workflow cleanup; release tag trigger fixes.
- Duplicate
nibid add-genesis-accountcommand removed (usenibid genesis add-genesis-account). (#2448)
- fix(ci): fix release tag trigger
- feat: upgrade v2.10 in #2504 - (5cfc50e)
- refactor: omit unnecessary reassignment in #2470 - (8916455)
- fix(Dockerfile): copy over files before "go mod download"
- fix(internal/cosmos-sdk): resolve ledger error in tests using build tags in #2505 - (9547d17)
- docs: remove duplicate word in comment in #2430 - (798b6d2)
- sai-trading: project scaffolding with script to deploy all Sai contracts in #2433 - (f77f32f)
- ci(docker): simplify workflows; free more disk space to fix docker builds; combine into docker.yml
- docs(changelog): update with version 2.9 and 2.8; fix(justfile/gen-changelog): use config from current branch, not main in #2465 - (9acdf4e)
- ci(dependabot.yml): ignore updates to Cosmos-SDK, CometBFT, and Wasmd, as they are often breaking changes
- Release Link: v2.9.0.
- Date: 2025-11-10
Changes:
- fix(evmante): use deterministic ResponseDeliverTx gas wanted and gas consumed on failed EVM tx; nonce increment on the ctx should only happen in DeliverTx and ReCheckTx, not CheckTx in #2434 - (68bb5ba)
- ci(golangci-lint): update linter version to latest (v2.6.1); improve CI caching in #2431 - (ba418d7)
v2.8.0 - 2025-10-28
- test(oracle): refactor oracle tests to not require running full blockchain networks, keeping them fast, deterministic, and stable in #2425 - (5ff2e08)
- evm: rewrite eth_estimateGas for panic safety and performance in #2424 - (37dba0a)
- chore: remove evm-core-ts and move it to ts-sdk in #2423 - (e1401f6)
- docs(bank): README fixes
- docs(bank): improve documentation and add section on Nibiru changes in #2421 - (172c008)
- feat: add recursive check for nested authz exec messages and enforce … in #2420 - (3cdc810)
- ci: simplify Go caching in CI to prevent file collisions in #2419 - (b1d1c22)
- fix(evmstate/test): stabilize trace tx tests with deterministic ERC20 transfer recipient in #2418 - (b47e3bd)
- feat: custom ante NewDeductFeeDecorator allowing 0 fee for zero gas actors in #2415 - (09e58ab)
- ci: add back coverage reporting using gocovmerge; bring README more up to date in #2416 - (63257f0)
- refactor(upgrades): simplify upgrade hanlder code to use less abstractions and combine micro-packages in #2413 - (74cb33e)
- fix(evm-rpc): remove unsafe debug API methods. in #2412 - (e2a1ee8)
- chore: v2.8.0 upgrade handler in #2411 - (9000cf3)
- fix(evm-trace-block): handle native tracer errors JSON-RPC errors for "debug_traceBlockByNumber". Fixes Nibiru#2400 bug in #2409 - (e44cbc5)
- docs: merge PR from @yinwenyu6 . Comments only
- feat(evm/grpc-query): Update the "/eth.evm.v1.Query/Balance" query to work with "0x" Ethereum hex and "nibi"-prefixed Bech32 address formats in #2410 - (1bfc24d)
- feat(proto): REST API doc generation for bank, auth, and txs in #2394 - (5dbb398)
- feat(sudo-ante): implement zero gas actors for invoking whitelisted contract in #2407 - (6316bcd)
- chore: added monad logo svg in #2406 - (90b951c)
- chore: additional coin logos which could be used externally in #2405 - (6bb649b)
- feat(epic-evm): rearchitecture for StateDB safety, fix for consensus failures, performance improvements, consistent simulations, and nonce resolution for pending txs in the mempool in #2397 - (a252c9b)
- chore: erc20 token registry new token: ynETHx in #2395 - (9219a94)
- feat(proto): impl script for gRPC Gateway REST doc generation in #2391 - (eb4b67e)
- chore: erc20 token registry new tokens: cbBTC, uBTC in #2388 - (c1229d0)
- feat(evm): 63/64 gas clamp for ERC20 calls. Improved VM error surfacing. Add composite Chainlink-like oracle in #2385 - (2f7dbb5)
- feat(.github/pr-title-lint): Enable "/", capital letters, and "evm" prefix in pull request titles in #2387 - (4d1e13d)
- feat(ai): start .cursorignore and Gemini code reviews in #2386 - (412abe7)
v2.7.0 - 2025-09-15
- #2345 - feat(evm): add "eth.evm.v1.MsgConvertEvmToCoin" tx for ERC20 to bank coin conversions with a non-Ethereum transaction. This change introduces new message types, CLI commands, and keeper logic to cover both directions of conversion, including special-case handling for NIBI via WNIBI.
- #2353 - refactor(oracle): remove dead code from asset registry
- #2371 - feat(evm): fix UnmarshalJSON to accept ASCII hex strings
- #2372 - feat(tokenfactory-cli): add CLI commands for set denom functions
- #2375 - feat(evm): Inject WNIBI.sol for non-mainnet networks in the v2.7.0 upgrade handler
- #2379 - fix(evm): disallow permissionless creation of FunToken mappings when tokens do not already have metadata.
- #2381 - feat(evm): Overwrite ERC20 metadata for stNIBI on Nibiru Testnet 2, and make the contract upgradeable.
- Bump
base-xfrom 3.0.10 to 3.0.11 (#2355) - Bump
pbkdf2from 3.1.2 to 3.1.3 (#2356) - Bump
sha.jsfrom 2.4.11 to 2.4.12 (#2366) - Bump
github.com/ulikunitz/xzfrom 0.5.11 to 0.5.14 (#2370) - Bump
cipher-basefrom 1.0.4 to 1.0.6 (#2367) - Bump
github.com/hashicorp/go-getterfrom 1.7.5 to 1.7.9 (#2364) - Bump
axiosfrom 1.9.0 to 1.12.1 (#2383)
v2.6.0 - 2025-08-05
- #2331 - test(evm-e2e): WNIBI tests for deposit, transfer and total supply
- #2334 - feat(evm-embeds): Publish new version for
@nibiruchain/solidity@0.0.6, which updatesNibiruOracleChainLinkLike.solto have additional methods used by Aave. - #2340 - fix: evm indexer proper parsing of the start block
- #2344 - feat(evm): Add some evm messages into the evm codec.
- #2346 - fix(buf-gen-rs): improve Rust proto binding generation script robustness and get it to work with a forked Cosmos-SDK dependency and exit correctly on failure
- #2348 - fix(oracle): max expiration a label rather than an invalidation for additional query liveness
- #2350 - fix(simapp): sim tests with empty validator set panic
- #2352 - chore(token-registry): Add bank coin versions of USDC and USDT from Stargate and LayerZero, and update ErisEvm.sol to fix redeem
- #2354 - chore: linter upgrade to v2
- #2357 - fix: proper statedb isolation in nibiru bank_extension
- Bump
form-datafrom 4.0.1 to 4.0.4 (#2347) - Bump
golang.org/x/oauth2from 0.16.0 to 0.27.0 (#2342) - Bump
undicifrom 5.28.5 to 5.29.0 (#2310) - Bump
base-xfrom 3.0.10 to 3.0.11 (#2307)
v2.5.0 - 2025-06-09
- #2311 - refactor: use Go's built-in min and max functions to simplify logic
- #2314 - refactor(upgrades): add public keepers to upgrade handlers + DRY improvements
- #2315 - feat(upgrades): implement v2.5.0 upgrade handler that modifies the stNIBI ERC20 and Bank Coin metadata in place
- #2316 - feat(ux): add GET behavior to the Ethereum JSON-RPC endpoints for Nibiru so they return info instead of a blank page or error.
- #2324 - fix(evm): adjust the v2.5.0 upgrade handler to maintain the original stNIBI ERC20 contract's state.
- #2327 - fix(eth): implement unmarshal json for TransactionReceipt
- #2329 - fix(eth): use evm RPC in tx_info_test
- #2328 - fix(evm): ensure StateDB doesn't persist between EVM calls
v2.4.0 - 2025-05-29
- #2274 - feat(evm)!: update to geth v1.13 with EIP-1153, PRECOMPILE_ADDRS, and transient storage support
- #2275 - feat(evm)!: update to geth v1.14 with tracing updates and new StateDB methods.
- This upgrade keeps Nibiru's EVM on the Berlin upgrade to avoid incompatibilities stemming from functionality specific to Ethereum's consensus setup. Namely, blobs (Cancun) and Verkle additions for zkEVM.
- The jump to v1.14 was necessary to use an up-to-date "cockroach/pebble" DB dependency and leverage new generics features added in Go 1.23+.
- #2289 - fix(eth-rpc): error propagation fixes and tests for the methods exposed by Nibiru's EVM JSON-RPC
- #2290 - refactor: use importas linter for consistent imports
- #2296 - chore(ci): use shell script for generating changelog in releases
- #2297 - fix(evm): fix error handling for revert errors
- #2298 - fix(eth-rpc): clean up error propagation and descriptions in eth namespace
- #2300 - refactor(eth-rpc): combine rpc/backend and rpc/rpcapi since they essentially one package
- #2301 - fix(.github): glob patterns broken in nibiru-go filter for dorny/paths-filter
- #2306 - feat(evm): add v2.4.0 upgrade handler
- #2303 - test(eth/rpc/rpcapi): increase coverage of the rpcapi package using JSON-RPC calls
- Bump
golang.org/x/netfrom 0.37.0 to 0.39.0. (#2284) - Bump
github.com/golang-jwt/jwt/v4from 4.5.1 to 4.5.2 (#2294)
v2.3.0 - 2025-04-22
- #2242 - feat(tokenfactory): tx msg SudoSetDenomMetadata
- #2244 - refactor(test): update how tests are wired with
NewNibiruTestApp - #2250 - refactor(ci): separate builds by platform and without goreleaser
- #2251 - feat(evm): add ERC20 contract with metadata updates
- #2249 - fix(evm): resetting gas meter for afterOp in bank extension
- #2257 - fix: simulation tests by register interfaces for vesting and use correct app keys field
- #2260 - feat(evm): add getErc20Address method to IFunToken
- #2268 - fix(evm): gas limit for erc20 deploy
- #2240 - feat: add depinject wiring and wire
x/authmodule - #2246 - feat: add depinject wiring for x/bank module
- #2248 - feat: add depinject wiring for x/staking module
- #2253 - feat: add depinject wiring for x/distribution module
- #2254 - feat: add depinject wiring for x/crisis module
- #2259 - feat: add depinject wiring for all sdk modules
- #2261 - feat: add depinject wiring for x/sudo module
- #2262 - feat: add depinject wiring for x/oracle module
- #2263 - feat: add depinject wiring for x/epochs module
- #2265 - feat: add depinject wiring for x/inflation module
- #2266 - feat: add depinject wiring for x/evm module
- #2272 - feat: add depinject wiring for x/tokenfactory module
- #2271 - fix(ci): update tag-pattern for changelog step in releases
- #2270 - refactor(app): remove private keeper struct and transient/mem keys from app
- #2288 - chore(ci): add workflow to check for missing upgrade handler
- #2278 - chore: migrate to cosmossdk.io/mathLegacyDec and cosmossdk.io/math.Int
- #2293 - ci(release): pack nibid binary with no enclosing directory
- #2292 - fix: use tmp directory for pre-instantiating app
v2.2.0 - 2025-03-27
- #2222 - fix(evm): evm indexer proper stopping of the indexer service
- #2224 - fix(evm): suppressing error on missing block bloom event
- #2238 - feat(evm-embeds): Add WNIBI.sol implementatino to contracts and related TypeScript and Solidity package updates for npm.
- #2239 - feat(funtoken): update
FunToken.sendToBankto accept EVM and nibi addresses. - #2241 - fix(evm): evm-tx-index cli fix to exclude most latest block
- #2236 - chore: make function comment match function name and fix linter errors
- #2243 - fix(deps): bump Go to v1.24, similar to #1698
- #2250 - fix(upgrades): add missing 2.2.0 upgrade handler
- Bump
axiosfrom 1.7.4 to 1.8.2 (#2230) - Bump
golang.org/x/netfrom 0.33.0 to 0.37.0 (#2233) - chore: update golangci-lint version to v1.64.8 (#2233)
- Bump
[golang.org/x/net](https://github.com/golang/net)from 0.33.0 to 0.37.0. (#2233) - Bump
github.com/golang/glogfrom 1.2.0 to 1.2.4 (#2182)
v2.1.0 - 2025-02-25
- #2104 - chore: update chain IDs
- #2202 - chore(build): add build tags and missing flags/variables
- #2206 - ci(chaosnet): fix docker image build
- #2207 - chore(ci): add cache for chaosnet builds
- #2209 - refator(ci): Simplify GitHub actions based on conditional paths, removing the need for files like ".github/workflows/skip-unit-tests.yml".
- #2211 - ci(chaosnet): avoid building on cache injected directories
- #2212 - fix(evm): proper eth tx logs emission for funtoken operations
- #2213 - chore(build): include lib versions on cache
- #2214 - chore(wasm): bump wasmvm to
v1.5.8 - #2068 - feat: enable wasm light clients on IBC (08-wasm)
- #2217 - fix: app-db-backend not recognized on prune command
- #2219 - fix(evm): disable unprotected tx check in EVM ante handler
- #2220 - fix(evm): improved marshaling of the eth tx receipt
v2.0.0-p1 - 2025-02-10
- fbcca386 fix: revert wasmvm to v1.5.0
- 533490d0 fix: revert testnet-1 chain id to 7210
- d8a10921 chore: update changelog for v2 EVM release
v2.0.0 - 2025-02-10
- #2119 - fix(evm): Guarantee that gas consumed during any send operation of the "NibiruBankKeeper" depends only on the "bankkeeper.BaseKeeper"'s gas consumption.
- #2120 - fix: Use canonical hexadecimal strings for Eip155 address encoding
- #2122 - test(evm): more bank extension tests and EVM ABCI integration tests to prevent regressions
- #2124 - refactor(evm):
Remove unnecessary argument in the
VerifyFeefunction, which returns the token payment required based on the effective fee from the tx data. Improve documentation. - #2125 - feat(evm-precompile):Emit EVM events created to reflect the ABCI events that occur outside the EVM to make sure that block explorers and indexers can find indexed ABCI event information.
- #2127 - fix(vesting): disabled built in auth/vesting module functionality
- #2129 - fix(evm): issue with infinite recursion in erc20 funtoken contracts
- #2130 - fix(evm): proper nonce management in statedb
- #2132 - fix(evm): proper tx gas refund
- #2134 - fix(evm): query of NIBI should use bank state, not the StateDB
- #2139 - fix(evm): erc20 born funtoken: properly burn bank coins after converting coin back to erc20
- #2140 - fix(bank): bank keeper extension now charges gas for the bank operations
- #2141 - refactor: simplify account retrieval operation in
nibid q evm account. - #2142 - fix(bank): add additional missing methods to the NibiruBankKeeper
- #2144 - feat(token-registry): Implement strongly typed Nibiru Token Registry and generation command
- #2145 - chore(token-registry): add xNIBI Astrovault LST to registry
- #2147 - fix(simapp): manually add x/vesting Cosmos-SDK module types to the codec in simulation tests since they are expected by default
- #2149 - feat(evm-oracle):
add Solidity contract that we can use to expose the Nibiru Oracle in the
ChainLink interface. Publish all precompiled contracts and ABIs on npm under
the
@nibiruchain/soliditypackage. - #2151 - feat(evm): randao support for evm
- #2152 - fix(precompile): consume gas for precompile calls regardless of error
- #2154 - fix(evm):
JSON encoding for the
EIP55Addrstruct was not following the Go conventions and needed to include double quotes around the hexadecimal string. - #2156 - test(evm-e2e): add E2E test using the Nibiru Oracle's ChainLink impl
- #2157 - fix(evm): Fix unit inconsistency related to AuthInfo.Fee and txData.Fee using effective fee
- #2159 - chore(evm): Augment the Wasm msg handler so that wasm contracts cannot send MsgEthereumTx
- #2160 - fix(evm-precompile): use bank.MsgServer Send in precompile IFunToken.bankMsgSend
- #2161 - fix(evm): added tx logs events to the funtoken related txs
- #2162 - test(testutil): try retrying for 'panic: pebbledb: closed'
- #2167 - refactor(evm): removed blockGasUsed transient variable
- #2168 - chore(evm-solidity): Move unrelated docs, gen-embeds, and add Solidity docs
- #2165 - fix(evm): use Singleton StateDB pattern for EVM txs
- #2169 - fix(evm): Better handling erc20 metadata
- #2170 - chore: Remove redundant allowUnprotectedTxs
- #2172 - chore: close iterator in IterateEpochInfo
- #2173 - fix(evm): clear
StateDBbetween calls - #2177 - fix(cmd): Continue from #2127 and unwire vesting flags and logic from genaccounts.go
- #2176 - tests(evm): add dirty state tests from code4rena audit
- #2180 - fix(evm): apply gas consumption across the entire EVM codebase at
CallContractWithInput - #2183 - fix(evm): bank keeper extension gas meter type
- #2184 - test(evm): e2e tests configuration enhancements
- #2187 - fix(evm): fix eip55 address encoding
- #2188 - refactor(evm): update logs emission
- #2192 - fix(oracle): correctly handle misscount
- #2197 - chore(evm): Create ethers v6 adapters for Nibiru. Publish as a library on npm (
@nibiruchain/evm-core) - #2200 - fix(test): evm e2e oracle test fixed pair name
The codebase went through a third-party Code4rena Zenith Audit, running from 2024-10-07 until 2024-11-01 and including both a primary review period and mitigation/remission period. This section describes code changes that occurred after that audit in preparation for a second audit starting in November 2024.
- #2074 - fix(evm-keeper): better utilize ERC20 metadata during FunToken creation. The bank metadata for a new FunToken mapping ties a connection between the Bank Coin's
DenomUnitand the ERC20 contract metadata like the name, decimals, and symbol. This change brings parity between EVM wallets, such as MetaMask, and Interchain wallets like Keplr and Leap. - #2076 - fix(evm-gas-fees): Use effective gas price in RefundGas and make sure that units are properly reflected on all occurrences of "base fee" in the codebase. This fixes #2059 and the related comments from @Unique-Divine and @berndartmueller.
- #2084 - feat(evm-forge): foundry support and template for Nibiru EVM development
- #2086 - fix(evm-precomples):
Fix state consistency in precompile execution by ensuring proper journaling of
state changes in the StateDB. This pull request makes sure that state is
committed as expected, fixes the
StateDB.Committo follow its guidelines more closely, and solves for a critical state inconsistency producible from the FunToken.sol precompiled contract. It also aligns the precompiles to use consistent setup and dynamic gas calculations, addressing the following tickets. - #2088 - refactor(evm): remove outdated comment and improper error message text
- #2089 - better handling of gas consumption within erc20 contract execution
- #2090 - fix(evm): Account for (1) ERC20 transfers with tokens that return false success values instead of throwing an error and (2) ERC20 transfers with other operations that don't bring about the expected resulting balance for the transfer recipient.
- #2091 - feat(evm): add fun token creation fee validation
- #2093 - feat(evm): gas usage in precompiles: limits, local gas meters
- #2092 - feat(evm): add validation for wasm multi message execution
- #2094 - fix(evm): Following
from the changs in #2086, this pull request implements a new
JournalChangestruct that saves a deep copy of the state multi store before each state-modifying, Nibiru-specific precompiled contract is called (OnRunStart). Additionally, we commit theStateDBthere as well. This guarantees that the non-EVM and EVM state will be in sync even if there are complex, multi-step Ethereum transactions, such as in the case of an EthereumTx that influences theStateDB, then calls a precompile that also changes non-EVM state, and then EVM reverts inside of a try-catch. - #2095 - fix(evm): This
change records NIBI (ether) transfers on the
StateDBduring precompiled contract calls using theNibiruBankKeeper, which is struct extension of thebankkeeper.BaseKeeperthat is used throughout Nibiru. TheNibiruBankKeeperholds a reference to the current EVMStateDBand records balance changes in wei as journal changes automatically. This guarantees that commits and reversions of theStateDBdo not misalign with the state of the Bank module. This code change uses theNibiruBankKeeperon all modules that depend on x/bank, such as the EVM and Wasm modules. - #2097 - feat(evm): Add new query to get dated price from the oracle precompile
- #2100 - refactor: cleanup statedb and precompile sections
- #2098 - test(evm): statedb tests for race conditions within funtoken precompile
- #2101 - fix(evm): tx receipt proper marshalling
- #2105 - test(evm): precompile call with revert
- #2106 - chore: scheduled basic e2e tests for evm testnet endpoint
- #2107 - feat(evm-funtoken-precompile): Implement methods: balance, bankBalance, whoAmI
- #2108 - fix(evm): removed deprecated root key from eth_getTransactionReceipt
- #2110 - fix(evm): Restore StateDB to its state prior to ApplyEvmMsg call to ensure deterministic gas usage. This fixes an issue where the StateDB pointer field in NibiruBankKeeper was being updated during readonly query endpoints like eth_estimateGas, leading to non-deterministic gas usage in subsequent transactions.
- #2111 - fix: e2e-evm-cron.yml
- #2114 - fix(evm): make gas cost zero in conditional bank keeper flow
- #2116 - fix(precompile-funtoken.go): Fixes a bug where the err != nil check is missing in the bankBalance precompile method
- #2117 - fix(oracle): The timestamps resulting from ctx.WithBlock* don't actually correspond to the block header information from specified blocks in the chain's history, so the oracle exchange rates need a way to correctly retrieve this information. This change fixes that discrepancy, giving the expected block timestamp for the EVM's oracle precompiled contract. The change also simplifies and corrects the code in x/oracle.
- #1837 - feat(eth): protos, eth types, and evm module types
- #1838 - feat(eth): Go-ethereum, crypto, encoding, and unit tests for evm/types
- #1841 - feat(eth): Collections encoders for bytes, Ethereum addresses, and Ethereum hashes
- #1855 - feat(eth-pubsub): Implement in-memory EventBus for real-time topic management and event distribution
- #1856 - feat(eth-rpc): Conversion types and functions between Ethereum txs and blocks and Tendermint ones.
- #1861 - feat(eth-rpc): RPC backend, Ethereum tracer, KV indexer, and RPC APIs
- #1869 - feat(eth): Module and start of keeper tests
- #1871 - feat(evm): app config and json-rpc
- #1873 - feat(evm): keeper collections and grpc query impls for EthAccount, NibiruAccount
- #1883 - feat(evm): keeper logic, Ante handlers, EthCall, and EVM transactions.
- #1887 - test(evm): eth api integration test suite
- #1889 - feat: implemented basic evm tx methods
- #1895 - refactor(geth): Reference go-ethereum as a submodule for easier change tracking with upstream
- #1901 - test(evm): more e2e test contracts for edge cases
- #1907 - test(evm): grpc_query full coverage
- #1909 - chore(evm): set is_london true by default and removed from config
- #1911 - chore(evm): simplified config by removing old eth forks
- #1912 - test(evm): unit tests for evm_ante
- #1914 - refactor(evm): Remove dead code and document non-EVM ante handler
- #1917 - test(e2e-evm): TypeScript support. Type generation from compiled contracts. Formatter for TS code.
- #1922 - feat(evm): tracer option is read from the config.
- #1936 - feat(evm): EVM fungible token protobufs and encoding tests
- #1947 - fix(evm): fix FunToken state marshalling
- #1949 - feat(evm): add fungible token mapping queries
- #1950 - feat(evm): Tx to create FunToken mapping from ERC20, contract embeds, and ERC20 queries.
- #1956 - feat(evm): msg to send bank coin to erc20
- #1958 - chore(evm): wiped deprecated evm apis: miner, personal
- #1959 - feat(evm): Add precompile to the EVM that enables transfers of ERC20 tokens to "nibi" accounts as regular Ethereum transactions
- #1960 - test(network): graceful cleanup for more consistent CI runs
- #1961 - chore(test): reverted funtoken precompile test back to the isolated state
- #1962 - chore(evm): code cleanup, unused code, typos, styles, warnings
- #1963 - feat(evm): Deduct a fee during the creation of a FunToken mapping. Implemented by
deductCreateFunTokenFeeinside of theeth.evm.v1.MsgCreateFunTokentransaction. - #1965 - refactor(evm): remove evm post-processing hooks
- #1966 - refactor(evm): clean up AnteHandler setup
- #1967 - feat(evm): export genesis
- #1968 - refactor(evm): funtoken events, cli commands and queries
- #1970 - refactor(evm): move evm antehandlers to separate package. Remove "gosdk/sequence_test.go", which causes a race condition in CI.
- #1971 - feat(evm): typed events for contract creation, contract execution and transfer
- #1973 - chore(appconst): Add chain IDs ending in "3" to the "knownEthChainIDMap". This makes it possible to use devnet 3 and testnet 3.
- #1976 - refactor(evm): unique chain ids for all networks
- #1977 - fix(localnet): rolled back change of evm validator address with cosmos derivation path
- #1979 - refactor(db): use pebbledb as the default db in integration tests
- #1981 - fix(evm): remove isCheckTx() short circuit on
AnteDecVerifyEthAcc - #1982 - feat(evm): add GlobalMinGasPrices
- #1983 - chore(evm): remove ExtensionOptionsWeb3Tx and ExtensionOptionDynamicFeeTx
- #1984 - refactor(evm): embeds
- #1985 - feat(evm)!: Use atto denomination for the wei units in the EVM so that NIBI is "ether" to clients. Only micronibi (unibi) amounts can be transferred. All clients follow the constraint equation, 1 ether == 1 NIBI == 10^6 unibi == 10^18 wei.
- #1986 - feat(evm): Combine both account queries into "/eth.evm.v1.Query/EthAccount", accepting both nibi-prefixed Bech32 addresses and Ethereum-type hexadecimal addresses as input.
- #1989 - refactor(evm): simplify evm module address
- #1996 - perf(evm-keeper-precompile): implement sorted map for
k.precompilesto remove dead code - #1997 - refactor(evm): Remove unnecessary params: "enable_call", "enable_create".
- #2000 - refactor(evm): simplify ERC-20 keeper methods
- #2001 - refactor(evm): simplify FunToken methods and tests
- #2002 - feat(evm): Add the account query to the EVM command. Cover the CLI with tests.
- #2003 - fix(evm): fix FunToken conversions between Cosmos and EVM
- #2004 - refactor(evm)!: replace
HexAddrwithEIP55Addr - #2006 - test(evm): e2e tests for eth_* endpoints
- #2008 - refactor(evm): clean up precompile setups
- #2013 - chore(evm): Set appropriate gas value for the required gas of the "IFunToken.sol" precompile.
- #2014 - feat(evm): Emit block bloom event in EndBlock hook.
- #2017 - fix(evm): Fix DynamicFeeTx gas cap parameters
- #2019 - chore(evm): enabled debug rpc api on localnet.
- #2020 - test(evm): e2e tests for debug namespace
- #2022 - feat(evm): debug_traceCall method implemented
- #2023 - fix(evm)!: adjusted generation and parsing of the block bloom events
- #2030 - refactor(eth/rpc): Delete unused code and improve logging in the eth and debug namespaces
- #2031 - fix(evm): debug calls with custom tracer and tracer options
- #2032 - feat(evm): ante handler to prohibit authz grant evm messages
- #2039 - refactor(rpc-backend): remove unnecessary interface code
- #2044 - feat(evm): evm tx indexer service implemented
- #2045 - test(evm): backend tests with test network and real txs
- #2053 - refactor(evm): converted untyped event to typed and cleaned up
- #2054 - feat(evm-precompile): Precompile for one-way EVM calls to invoke/execute Wasm contracts.
- #2060 - fix(evm-precompiles): add assertNumArgs validation
- #2056 - feat(evm): add oracle precompile
- #2065 - refactor(evm)!: Refactor out dead code from the evm.Params
- #2135 - feat(evm): add precompile for calling bank to evm from evm
- #1766 - refactor(app-wasmext)!: remove wasmbinding
CosmosMsg::Custombindings. - #1776 - feat(inflation): make inflation params a collection and add commands to update them
- #1872 - chore(math): use cosmossdk.io/math to replace sdk types
- #1874 - chore(proto): remove the proto stringer as per Cosmos SDK migration guidelines
- #1932 - fix(gosdk): fix keyring import functions
- #1573 - feat(perp): Close markets and compute settlement price
- #1632 - feat(perp): Add settle position transaction
- #1656 - feat(perp): Make the collateral denom a stateful collections.Item
- #1663 - feat(perp): Add volume based rebates
- #1669 - feat(perp): add query to get collateral metadata
- #1677 - fix(perp): make Gen_market set initial perp versions
- #1680 - feat(perp): MsgShiftPegMultiplier, MsgShiftSwapInvariant.
- #1683 - feat(perp): Add
StartDnREpochtoAfterEpochEndhook - #1686 - test(perp): add more tests for perp module msg server for DnR
- #1687 - chore(wasmbinding): delete CustomQuerier since we have QueryRequest::Stargate now
- #1705 - feat(perp): Add oracle pair to market object
- #1718 - fix(perp): fees does not require additional funds
- #1734 - feat(perp): MsgDonateToPerpFund sudo call as part of #1642
- #1749 - feat(perp): move close market from Wasm Binding to MsgCloseMarket
- #1752 - feat(oracle): MsgEditOracleParams sudo tx msg as part of #1642
- #1755 - feat(oracle): Add more events on validator's performance
- #1764 - fix(perp): make updateswapinvariant aware of total short supply to avoid panics
- #1710 - refactor(perp): Clean and organize module errors for x/perp
- #1893 - feat(gosdk): migrate Go-sdk into the Nibiru blockchain repo.
- #1899 - build(deps): cometbft v0.37.5, cosmos-sdk v0.47.11, proto-builder v0.14.0
- #1913 - fix(tests): race condition from heavy Network tests
- #1992 - chore: enabled grpc for localnet
- #1999 - chore: update nibi go package version to v2
- #2050 - refactor(oracle): remove unused code and collapse empty client/cli directory
- Bump
github.com/grpc-ecosystem/grpc-gateway/v2from 2.18.1 to 2.19.1 (#1767, #1782) - Bump
robinraju/release-downloaderfrom 1.8 to 1.11 (#1783, #1839, #1948) - Bump
github.com/prometheus/client_golangfrom 1.17.0 to 1.18.0 (#1750) - Bump
golang.org/x/cryptofrom 0.15.0 to 0.31.0 (#1724, #1843, #2123) - Bump
github.com/holiman/uint256from 1.2.3 to 1.2.4 (#1730) - Bump
github.com/dvsekhvalnov/jose2gofrom 1.5.0 to 1.6.0 (#1733) - Bump
github.com/spf13/castfrom 1.5.1 to 1.6.0 (#1689) - Bump
cosmossdk.io/mathfrom 1.1.2 to 1.4.0 (#1676, #2115) - Bump
github.com/grpc-ecosystem/grpc-gateway/v2from 2.18.0 to 2.18.1 (#1675) - Bump
actions/setup-gofrom 4 to 5 (#1696) - Bump
golangfrom 1.19 to 1.21 (#1698) - #1678 - chore(deps): collections to v0.4.0 for math.Int value encoder
- Bump
golang.org/x/netfrom 0.0.0-20220607020251-c690dde0001d to 0.33.0 (#1849, #2175) - Bump
golang.org/x/netfrom 0.20.0 to 0.23.0 (#1850) - Bump
github.com/supranational/blstfrom 0.3.8-0.20220526154634-513d2456b344 to 0.3.11 (#1851) - Bump
golangci/golangci-lint-actionfrom 4 to 6 (#1854, #1867) - Bump
github.com/hashicorp/go-getterfrom 1.7.1 to 1.7.5 (#1858, #1938) - Bump
github.com/btcsuite/btcdfrom 0.23.3 to 0.24.2 (#1862, #2070) - Bump
pozetroninc/github-action-get-latest-releasefrom 0.7.0 to 0.8.0 (#1863) - Bump
bufbuild/buf-setup-actionfrom 1.30.1 to 1.47.2 (#1891, #1900, #1923, #1972, #1974, #1988, #2043, #2057, #2062, #2069, #2102, #2113) - Bump
axiosfrom 1.7.3 to 1.7.4 (#2016) - Bump
github.com/CosmWasm/wasmvmfrom 1.5.0 to 1.5.5 (#2047) - Bump
docker/build-push-actionfrom 5 to 6 (#1924) - Bump
codecov/codecov-actionfrom 4 to 5 (#2112) - Bump
undicifrom 5.28.4 to 5.28.5 (#2174)
v1.5.0 - 2024-06-21
Nibiru v1.5.0 enables IBC CosmWasm smart contracts.
- [Release Link]
- [Commits]
- #1931 - feat(ibc): add
wasmroute to IBC router
v1.4.0 - 2024-06-04
Nibiru v1.4.0 adds PebbleDB support and increases the wasm contract size limit to 3MB.
- [Release Link]
- [Commits]
- #1906 - feat(wasm): increase contract size limit to 3MB
v1.3.0 - 2024-05-07
Nibiru v1.3.0 adds interchain accounts.
- [Release Link]
- [Commits]
- #1820 - feat: add interchain accounts
- #1864 - fix(ica): add ICA controller stack
- #1859 - refactor(oracle): add oracle slashing events