Skip to content

feat(sink)!: sink module - #2087

Open
troian wants to merge 60 commits into
mainfrom
release/feat/sink
Open

troian wants to merge 60 commits into
mainfrom
release/feat/sink

Conversation

@troian

@troian troian commented Nov 2, 2026

Copy link
Copy Markdown
Member

Description

Closes: #XXXX


Author Checklist

All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow-up issues.

I have...

  • included the correct type prefix in the PR title
  • added ! to the type prefix if API or client breaking change
  • targeted the correct branch (see PR Targeting)
  • provided a link to the relevant issue or specification
  • included the necessary unit and integration tests
  • added a changelog entry to CHANGELOG.md
  • included comments for documenting Go code
  • updated the relevant documentation or specification
  • reviewed "Files changed" and left comments if necessary
  • confirmed all CI checks have passed

chalabi2 and others added 21 commits October 19, 2026 10:53
x/sink escrows AKT for minting on Solana. MsgSink locks uakt in the sink
module account and writes an immutable 77-byte record under transfer/{id},
which the Solana program verifies with an IAVL proof of this store.

- keeper: params, totals, per-account daily count, pending and amount
  limits, minimum transfer, checked uint64 accounting and the exact bank
  invariant reserve + pending + minted + voided = sink balance
- settlement: reporter epochs and votes, void challenge windows, vetoes,
  governance resolution and guarded refunds to the original sender
- open/{8-byte id} index backing the paged OpenTransfers query
- pause guardian that can only turn deposits or refunds off
- send restriction that admits only the authorized deposit, reserve
  funding, refund or pre-install sweep, and an ante decorator that binds
  MsgSink to a sole top-level message
- PrepareInstall and FundLaunchReserve for the install upgrade
- genesis import/export, msg and query servers, REST gateway

Types, protobuf and CLI come from pkg.akt.dev/go/node/sink/v1.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Add the sink store key, keeper and module, initialize sink genesis after
bank, register the sink module account without mint or burn permissions
(which also blocks it as a bank recipient), append the sink send
restriction to bank and add the sink deposit decorator to the ante chain.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Run signed transactions through the app: deposits and their IAVL proof,
direct and legacy Amino signatures, atomic rollback on bank failure or
redirect, nested and multi-message rejection, module ingress, limits and
caps, reporter quorums, vetoes, conflicts, rotations, refund pause and cap,
open-transfer paging and the pause guardian.

SINK_PROOF_FIXTURE and SINK_REPORTER_FIXTURE optionally export a proof
fixture and replay reporter transactions signed outside Go.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
The handler adds the sink store, runs PrepareInstall, runs migrations (sink
InitGenesis with default params: deposits and refunds disabled, no
reporters), funds the 1,000,000 AKT launch reserve from the plan's
reserve_source and checks the bank invariant. Any account or balance already
at the sink address is adopted as the module account and its coins go to the
community pool.

The plan info must be one inline JSON object:
  {"binaries": {...}, "reserve_source": "akash1..."}
binaries is optional and other keys are rejected.

Decisions for maintainers before release:
- the upgrade name and height: v2.2.0-sink-provisional is a placeholder;
  rename the directory, package, UpgradeName, meta.json, test-cases.json and
  changelog entry, or fold the handler into the release's own handler
- the reserve source account, which must hold 1,000,000 AKT liquid at the
  upgrade height or the upgrade fails and the chain halts
- the community-pool disposition of preexisting sink balances, to be stated
  in the proposal
- the CI upgrade test builds plan info from the release tag only, so it
  needs reserve_source added before it can pass

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Placeholder: replace this commit before merging.

x/sink imports pkg.akt.dev/go/node/sink/v1 and the akash CLI uses the sink
commands from pkg.akt.dev/go/cli. Neither is in a tagged chain-sdk release
yet, so this branch does not build against the versions required here
(pkg.akt.dev/go v0.2.14, pkg.akt.dev/go/cli v0.2.4). This commit only adds
github.com/mr-tron/base58, which the sink tests import directly.

Once chain-sdk tags the sink API, replace this commit with:
  go get pkg.akt.dev/go@<go tag> pkg.akt.dev/go/cli@<cli tag>
  go mod tidy

Until then, build against a chain-sdk checkout with a scratch modfile:
  cp go.mod .cache/sink.mod && cp go.sum .cache/sink.sum
  go mod edit -modfile=.cache/sink.mod \
    -replace pkg.akt.dev/go=<chain-sdk>/go \
    -replace pkg.akt.dev/go/cli=<chain-sdk>/go/cli
  go mod tidy -modfile=.cache/sink.mod
  go test -modfile=.cache/sink.mod ./x/sink/... ./app/... ./upgrades/...

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Drop this commit before opening an upstream pull request if the file is not wanted there.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Artur Troian <troian@users.noreply.github.com>
Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
The Solana token launches with no genesis mint, so the upgrade no longer
moves 1,000,000 AKT from a reserve source. The handler ignores plan info,
so standard cosmovisor info works and no source address can halt the chain.
It still sweeps any balance at the sink address to the community pool and
leaves deposits off. Release tooling drops the reserve-source option.

BREAKING CHANGE: the upgrade plan no longer carries reserve_source.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
The Solana token launches with no genesis mint, so the upgrade no longer
moves 1,000,000 AKT from a reserve source. The handler ignores plan info,
so standard cosmovisor info works and no source address can halt the chain.
It still sweeps any balance at the sink address to the community pool and
leaves deposits off. Release tooling drops the reserve-source option.

BREAKING CHANGE: the upgrade plan no longer carries reserve_source.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
All sink state now uses cosmos collections with two-byte prefixes, as in
x/bme, and every integer key is an 8-byte big-endian value, so store
order is numeric order. Transfer records and void orders, the two keys
Solana proves, take their prefixes from the SDK. Values do not change:
the 77-byte record, the 9-byte void order and the proto messages. The
keeper reads and writes typed collections instead of raw byte keys.

BREAKING CHANGE: transfer records are proven at 0x02 0x00 and void orders
at 0x02 0x01, each followed by the 8-byte big-endian ID. State written
under the old keys is not migrated.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
All sink state now uses cosmos collections with two-byte prefixes, as in
x/bme, and every integer key is an 8-byte big-endian value, so store
order is numeric order. Transfer records and void orders, the two keys
Solana proves, take their prefixes from the SDK. Values do not change:
the 77-byte record, the 9-byte void order and the proto messages. The
keeper reads and writes typed collections instead of raw byte keys.

BREAKING CHANGE: transfer records are proven at 0x02 0x00 and void orders
at 0x02 0x01, each followed by the 8-byte big-endian ID. State written
under the old keys is not migrated.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Adds the AKT token program, the ICS07 light client patches, the relayer,
the reporters, deploy tooling, local network scripts and docs. The
transfer portal lives in its own repository.

The workspace keeps its own Cargo and npm workspaces, so the CosmWasm
workspace and Go module are unchanged. scripts/build-node.sh builds the
node it sits in against a chain-sdk checkout next to node.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Artur Troian <troian@users.noreply.github.com>
@troian
troian requested a review from a team as a code owner November 2, 2026 14:00
@coderabbitai

coderabbitai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

  • Run on-demand review

This review includes 289 billable files and costs up to $72.25.

View limit details

Learn how review limits work.

Review configuration:

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 5193e54 and 0ae3816.

Files ignored due to path filters: 5

  • contracts/solana/Cargo.lock is excluded by !**/*.lock
  • contracts/solana/package-lock.json is excluded by !**/package-lock.json
  • contracts/solana/programs/akt/tests/sbf/Cargo.lock is excluded by !**/*.lock
  • contracts/solana/tools/header-encoder/Cargo.lock is excluded by !**/*.lock
  • go.sum is excluded by !**/*.sum
Files selected for processing: 289

  • .github/workflows/tests.yaml
  • .goreleaser-docker.yaml
  • .goreleaser-test-bins.yaml
  • .goreleaser.yaml
  • Makefile
  • _docs/sink-deployment.md
  • _docs/sink-local-e2e.md
  • _docs/sink-local-setup.md
  • app/ante.go
  • app/app.go
  • app/app_configure.go
  • app/config.go
  • app/export.go
  • app/mac.go
  • app/modules.go
  • app/sim_test.go
  • app/types/app.go
  • client/docs/statik/statik.go
  • cmd/akash/cmd/config.go
  • cmd/akash/cmd/root.go
  • contracts/solana/.gitattributes
  • contracts/solana/.gitignore
  • contracts/solana/.npmrc
  • contracts/solana/.nvmrc
  • contracts/solana/.prettierignore
  • contracts/solana/Anchor.toml
  • contracts/solana/Cargo.toml
  • contracts/solana/README.md
  • contracts/solana/deploy/build-services.sh
  • contracts/solana/deploy/manifest.example.json
  • contracts/solana/deploy/programs.test.ts
  • contracts/solana/deploy/programs.ts
  • contracts/solana/deploy/rehearse-launch.sh
  • contracts/solana/deploy/service-config.test.ts
  • contracts/solana/deploy/service-config.ts
  • contracts/solana/deploy/service.sh
  • contracts/solana/deploy/systemd/akt-relayer.service
  • contracts/solana/deploy/systemd/akt-reporter.service
  • contracts/solana/deploy/test-build-services.py
  • contracts/solana/deploy/verify-program.sh
  • contracts/solana/docs/audit.md
  • contracts/solana/docs/bridge-protocol.md
  • contracts/solana/docs/deploy-program.md
  • contracts/solana/docs/deploy-services.md
  • contracts/solana/docs/header-scaling.md
  • contracts/solana/docs/hosting.md
  • contracts/solana/docs/implementation.md
  • contracts/solana/docs/local-stack.md
  • contracts/solana/docs/operators.md
  • contracts/solana/docs/production-deployment.md
  • contracts/solana/docs/reporter.md
  • contracts/solana/docs/reproduce.md
  • contracts/solana/docs/sdk-integration.md
  • contracts/solana/docs/setup.md
  • contracts/solana/docs/signature-batches.md
  • contracts/solana/docs/sink-migration-v2.md
  • contracts/solana/docs/sink-reporting.md
  • contracts/solana/docs/testnetify.md
  • contracts/solana/docs/token-metadata.md
  • contracts/solana/docs/verifier.md
  • contracts/solana/idls/README.md
  • contracts/solana/idls/access_manager.json
  • contracts/solana/idls/ics07_tendermint.json
  • contracts/solana/local/admin-instructions.test.ts
  • contracts/solana/local/admin-instructions.ts
  • contracts/solana/local/bridge-admin.ts
  • contracts/solana/local/client-fault-tests.ts
  • contracts/solana/local/client-status.ts
  • contracts/solana/local/common.ts
  • contracts/solana/local/consensus-prune.ts
  • contracts/solana/local/demo.ts
  • contracts/solana/local/durable.test.ts
  • contracts/solana/local/durable.ts
  • contracts/solana/local/governance.ts
  • contracts/solana/local/header-upload.ts
  • contracts/solana/local/light-client.ts
  • contracts/solana/local/lookup-cleanup.ts
  • contracts/solana/local/monitor.test.ts
  • contracts/solana/local/monitor.ts
  • contracts/solana/local/open-transfers.ts
  • contracts/solana/local/proof-job.ts
  • contracts/solana/local/reconcile-policy.test.ts
  • contracts/solana/local/reconcile-policy.ts
  • contracts/solana/local/reconcile.ts
  • contracts/solana/local/recovery-tests.ts
  • contracts/solana/local/relay-config.test.ts
  • contracts/solana/local/relay-config.ts
  • contracts/solana/local/relay-discovery.test.ts
  • contracts/solana/local/relay-policy.test.ts
  • contracts/solana/local/relay-policy.ts
  • contracts/solana/local/relay-recovery.test.ts
  • contracts/solana/local/relay-test-fixture.ts
  • contracts/solana/local/relay.ts
  • contracts/solana/local/scale.ts
  • contracts/solana/local/settlement-scenarios.test.ts
  • contracts/solana/local/settlement-scenarios.ts
  • contracts/solana/local/signature-batch-tests.ts
  • contracts/solana/local/stack.ts
  • contracts/solana/local/supervise.ts
  • contracts/solana/local/team-backend.test.ts
  • contracts/solana/local/team-contracts.ts
  • contracts/solana/local/team-finality.test.ts
  • contracts/solana/local/team-proxy.ts
  • contracts/solana/local/team-receipt.ts
  • contracts/solana/local/team-server.test.ts
  • contracts/solana/local/team.ts
  • contracts/solana/local/test-workspace.test.ts
  • contracts/solana/local/test-workspace.ts
  • contracts/solana/local/testnet-health.ts
  • contracts/solana/local/testnet-scenarios.test.ts
  • contracts/solana/local/testnet-scenarios.ts
  • contracts/solana/local/testnetify.ts
  • contracts/solana/local/token-metadata.ts
  • contracts/solana/local/transactions.test.ts
  • contracts/solana/local/transactions.ts
  • contracts/solana/metadata/akt.json
  • contracts/solana/package.json
  • contracts/solana/programs/akt/Cargo.toml
  • contracts/solana/programs/akt/ics07-tendermint-interface/Cargo.toml
  • contracts/solana/programs/akt/ics07-tendermint-interface/src/lib.rs
  • contracts/solana/programs/akt/src/authorization.rs
  • contracts/solana/programs/akt/src/constants.rs
  • contracts/solana/programs/akt/src/errors.rs
  • contracts/solana/programs/akt/src/events.rs
  • contracts/solana/programs/akt/src/instructions/bridge_admin.rs
  • contracts/solana/programs/akt/src/instructions/genesis.rs
  • contracts/solana/programs/akt/src/instructions/mint_transfer.rs
  • contracts/solana/programs/akt/src/instructions/mod.rs
  • contracts/solana/programs/akt/src/instructions/pause_guardian.rs
  • contracts/solana/programs/akt/src/instructions/proof_buffer.rs
  • contracts/solana/programs/akt/src/instructions/resolution.rs
  • contracts/solana/programs/akt/src/instructions/token_metadata.rs
  • contracts/solana/programs/akt/src/instructions/upgrade_authority.rs
  • contracts/solana/programs/akt/src/instructions/void_transfer.rs
  • contracts/solana/programs/akt/src/lib.rs
  • contracts/solana/programs/akt/src/light_client.rs
  • contracts/solana/programs/akt/src/proof_vectors.rs
  • contracts/solana/programs/akt/src/state.rs
  • contracts/solana/programs/akt/src/wire.rs
  • contracts/solana/programs/akt/tests/fixtures/README.md
  • contracts/solana/programs/akt/tests/fixtures/native_boundary_vectors.json
  • contracts/solana/programs/akt/tests/fixtures/proof_vectors.json
  • contracts/solana/programs/akt/tests/fixtures/settlement_vectors.json
  • contracts/solana/programs/akt/tests/fixtures/verify.py
  • contracts/solana/programs/akt/tests/sbf/Cargo.toml
  • contracts/solana/programs/akt/tests/sbf/src/buffer.rs
  • contracts/solana/programs/akt/tests/sbf/src/main.rs
  • contracts/solana/programs/akt/tests/sbf/src/resolution.rs
  • contracts/solana/relayer/config.example.json
  • contracts/solana/reporter/akash.test.ts
  • contracts/solana/reporter/akash.ts
  • contracts/solana/reporter/config.example.json
  • contracts/solana/reporter/config.ts
  • contracts/solana/reporter/policy.test.ts
  • contracts/solana/reporter/policy.ts
  • contracts/solana/reporter/run.test.ts
  • contracts/solana/reporter/run.ts
  • contracts/solana/reporter/scan.test.ts
  • contracts/solana/reporter/scan.ts
  • contracts/solana/reporter/signer.test.ts
  • contracts/solana/reporter/signer.ts
  • contracts/solana/reporter/solana.test.ts
  • contracts/solana/reporter/solana.ts
  • contracts/solana/reporter/testdata/fake-signer.mjs
  • contracts/solana/rust-toolchain.toml
  • contracts/solana/scripts/build-programs.sh
  • contracts/solana/scripts/check-portal-contract.sh
  • contracts/solana/scripts/doctor.sh
  • contracts/solana/scripts/fetch-light-client.py
  • contracts/solana/scripts/install-anchor.sh
  • contracts/solana/scripts/localnet.sh
  • contracts/solana/scripts/setup-light-client.sh
  • contracts/solana/scripts/setup-local.sh
  • contracts/solana/scripts/setup-metadata.sh
  • contracts/solana/scripts/test-build-conventions.py
  • contracts/solana/scripts/test-contract.sh
  • contracts/solana/scripts/test-sink.sh
  • contracts/solana/scripts/test-temp-paths.py
  • contracts/solana/scripts/verifiable-build.sh
  • contracts/solana/scripts/workspace.sh
  • contracts/solana/shared/id.ts
  • contracts/solana/shared/networks.ts
  • contracts/solana/shared/proof.test.ts
  • contracts/solana/shared/proof.ts
  • contracts/solana/shared/sink.test.ts
  • contracts/solana/shared/sink.ts
  • contracts/solana/shared/token-metadata.ts
  • contracts/solana/tests/bridge.ts
  • contracts/solana/tests/fixtures/deployed-interface.json
  • contracts/solana/tests/genesis.test.ts
  • contracts/solana/tests/helpers.ts
  • contracts/solana/tests/idl.test.ts
  • contracts/solana/tests/metadata.ts
  • contracts/solana/tests/program-vectors.test.ts
  • contracts/solana/tests/relocate-program.ts
  • contracts/solana/tests/reporter.ts
  • contracts/solana/tests/sink-fixtures.ts
  • contracts/solana/tests/sink-proof.ts
  • contracts/solana/tools/header-encoder/Cargo.toml
  • contracts/solana/tools/header-encoder/fixtures/template.json
  • contracts/solana/tools/header-encoder/src/fixture.rs
  • contracts/solana/tools/header-encoder/src/main.rs
  • contracts/solana/tools/proof-fixtures/main.go
  • contracts/solana/tools/proof-fixtures/vectors_test.go
  • contracts/solana/tools/verifiable-build/Dockerfile
  • contracts/solana/tools/verifiable-build/build.sh
  • contracts/solana/tsconfig.json
  • go.mod
  • make/releasing.mk
  • meta.json
  • script/shellcheck.sh
  • script/upgrades.sh
  • script/wasm2go.sh
  • tests/upgrade/README.md
  • tests/upgrade/docker-compose.sink.yaml
  • tests/upgrade/sink/Dockerfile
  • tests/upgrade/sink/identities.cjs
  • tests/upgrade/sink/setup.sh
  • tests/upgrade/test-cases.json
  • testutil/cosmos/keepers.go
  • testutil/cosmos/mocks/AccountKeeper_mock.go
  • testutil/state/suite.go
  • upgrades/CHANGELOG.md
  • upgrades/software/v2.2.0/contracts.go
  • upgrades/software/v2.2.0/escrow.go
  • upgrades/software/v2.2.0/escrow_test.go
  • upgrades/software/v2.2.0/export_test.go
  • upgrades/software/v2.2.0/upgrade.go
  • upgrades/software/v2.2.0/wasm_limits_test.go
  • upgrades/upgrades.go
  • x/epochs/keeper/keeper.go
  • x/epochs/keeper/keeper_test.go
  • x/escrow/keeper/keeper.go
  • x/escrow/keeper/keeper_same_height_test.go
  • x/market/handler/handler_withdraw_test.go
  • x/market/handler/server.go
  • x/oracle/keeper/genesis.go
  • x/sink/DECISIONS.md
  • x/sink/README.md
  • x/sink/handler/handler_test.go
  • x/sink/handler/server.go
  • x/sink/handler/server_test.go
  • x/sink/handler/settlement_test.go
  • x/sink/keeper/abci.go
  • x/sink/keeper/allocator_test.go
  • x/sink/keeper/ante.go
  • x/sink/keeper/canonical_test.go
  • x/sink/keeper/codec.go
  • x/sink/keeper/deposit.go
  • x/sink/keeper/epoch.go
  • x/sink/keeper/epoch_test.go
  • x/sink/keeper/genesis.go
  • x/sink/keeper/genesis_test.go
  • x/sink/keeper/grpc_query.go
  • x/sink/keeper/grpc_query_test.go
  • x/sink/keeper/guardian.go
  • x/sink/keeper/history_test.go
  • x/sink/keeper/install.go
  • x/sink/keeper/keeper.go
  • x/sink/keeper/key.go
  • x/sink/keeper/key_test.go
  • x/sink/keeper/open_test.go
  • x/sink/keeper/params.go
  • x/sink/keeper/policy_test.go
  • x/sink/keeper/refundq.go
  • x/sink/keeper/refundq_test.go
  • x/sink/keeper/settlement.go
  • x/sink/keeper/settlement_test.go
  • x/sink/module.go
  • x/sink/simulation/genesis.go
  • x/sink/simulation/genesis_test.go
  • x/sink/simulation/operations.go
  • x/sink/simulation/proposals.go
  • x/sink/sink_amount_cap_test.go
  • x/sink/sink_audit_test.go
  • x/sink/sink_bank_test.go
  • x/sink/sink_canonical_test.go
  • x/sink/sink_epoch_test.go
  • x/sink/sink_events_test.go
  • x/sink/sink_genesis_test.go
  • x/sink/sink_guardian_test.go
  • x/sink/sink_message_test.go
  • x/sink/sink_observer_test.go
  • x/sink/sink_open_test.go
  • x/sink/sink_param_limits_test.go
  • x/sink/sink_reporting_test.go
  • x/sink/sink_simulation_test.go
  • x/sink/sink_test.go
  • x/sink/sink_upgrade_test.go
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Tip

🎯 Customize your risk assessments

Guide how CodeRabbit assesses merge risk and security architecture risk. Highlight sensitive changes and explain your security boundaries using Merge Risk Instructions and Security Risk Instructions in your review settings. Security architecture risk assessments require the Advanced plan or above.

✅ Automatic approvals, with your rules

Let CodeRabbit approve pull requests once required threads are resolved, pre-merge checks pass, and your risk limits are met. Enable Automatic approvals in review settings, with overrides for teams or file paths.

@troian troian changed the title feat(sink): sink module feat(sink)!: sink module Nov 2, 2026
Signed-off-by: Artur Troian <troian@users.noreply.github.com>
troian and others added 27 commits November 3, 2026 10:16
Signed-off-by: Artur Troian <troian@users.noreply.github.com>
Validate incoming messages in the server while retaining keeper state guards.
Keep codecs, query prefixes, proof keys and refund queue selection in node.

The matching SDK dependency pin and new query API integration are deferred.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Add signed weighted deposit, report and refund operations, governance message
generators, randomized genesis and schema decoding. Check repeatable state,
accounting, quotas, composite sequences and export/import behavior.

SDK seeded runs and the longer refund lifecycle are separate test cases.
Governance voting and external Solana finality are outside this coverage.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Artur Troian <troian@users.noreply.github.com>
Signed-off-by: Artur Troian <troian@users.noreply.github.com>
Signed-off-by: Artur Troian <troian@users.noreply.github.com>
Derive vote quorum from the reporter fraction and migrate policy callers
and fixtures to the current SDK. Keep policy versions aligned with their
sequence, preserve stored member ordering, and load validated genesis
without replaying transaction accounting.

The query redesign remains separate; its existing failing tests are
preserved.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Artur Troian <troian@users.noreply.github.com>
Signed-off-by: Artur Troian <troian@users.noreply.github.com>
Transfers pages through cursors that carry their filter and rejects
forged ones; Reporters serves the current, any or all policy versions.
SetParams rejects reporter sets that fail the quorum rule, so a bad
policy can no longer break writes and export. Genesis requires the
current policy, checks vetoes, usage stamps, heights and an empty store,
creates the module account and writes in one cache. Block transfer
sequences start at 1 again.

Signed-off-by: Artur Troian <troian@users.noreply.github.com>
Use the existing state.TestSuite patterns from deployment and market.
Keep signed transaction, native bank, upgrade and recovery coverage under
x/sink, and place policy and settlement handler tests beside the handler.

Align recovery fixtures with the current genesis contract and update the
Solana test selectors. Correct the withdrawal test to match the existing
closed-lease guard. Production Sink code and dependency pins are unchanged.

Validation: make test and make test-full pass uncached across 29 packages.
The ten existing skips remain; independent conventions review found no
required correction.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Transfer IDs keep their deposit height, so a populated zero-height export
could never be imported and panicked at InitGenesis. Export now fails early
with guidance, using the same height rule as import. CI simulations export
and import at the exported height. Adds reporter alias tests for chain-sdk
ea3d90b3.

Signed-off-by: Artur Troian <troian@users.noreply.github.com>
Use the existing Akash Makefile and pin the merged IBC contracts source
through Cargo. Remove the alternate Go module build and verifier patches.

Add reviewed deployment manifests, finalized artifact verification, service
packaging and systemd entry points, with production and testnet runbooks.
Keep project scratch under the repository cache and cover the build paths
in the existing CI workflow.

Solana typechecks, 221 service tests, 8 deployment tests and 15 Python
build/packaging checks pass. Native compilation on the upstream fc2e532
baseline is blocked by its committed SDK mismatch. Complete Docker build
verification and on-chain launch acceptance remain release gates.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Use Solana's deployment CLI and node's existing upgrade harness instead of
custom upload orchestration and the obsolete sink-local-v1 runner.

Fold proof fixtures into node's Go module and use the generated MerkleProof
encoder. Share the locked CPI-proxy build, read toolchain pins from their
owners, and omit development-only npm packages from service archives.

Typecheck, release/config tests, build/packaging checks and all shell lint
pass. Actual proxy compilation and post-prune service imports pass. Five
canonical fixture roots and proof encodings remain byte-identical. The
upstream node/SDK build mismatch and full launch verification remain open.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Consume the split native queries and server-issued pagination cursors.
Support native owner lengths and decimal reporter policies without changing
node or SDK code. Generate boundary fixtures through the native codecs.

BREAKING CHANGE: owner encoding and every status PDA change. Use a fresh
Solana namespace with an unused Sink module; do not upgrade a live bridge.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Keep the README focused on the three operator tasks and use one release
directory throughout the deployment examples.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Use the native seven-reporter fixture with the existing proof verifier.
Correct the expiry assertion and owner-length diagnostic to match the
implemented behavior.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Link the README directly to the code walkthrough and program deployment
guide. Keep the walkthrough focused on transfer flow, source locations,
services and build tools. Scope proof validation to the planned deployment.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Record the rebased node revision, link the relocated Sink upgrade test,
and describe the seven-reporter fixture accurately.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Use Artur’s reporter identity fix in the native release build. Keep module resolution on committed pins with GOWORK disabled.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Add a CLI-only Compose overlay using the existing upgrade fixture and Solana
commands, plus a separate operator deployment guide. Document fixed native
ports, matching release pins, governance generation and unverified local
end-to-end prerequisites.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Keep generated header and checkpoint timestamps on the local validator clock.
Allow finalized uploads before prune expiry and the full lookup-table cooldown
on slower validators. Production time, proof and finality checks are unchanged.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Artur Troian <troian@users.noreply.github.com>
A module account cannot run a reporter, so listing one only shrinks the
set that can reach quorum; SetParams now rejects it in either spelling.
Add the export, height and reporter-spelling tests flagged in review.
Rebuild the swagger bundle from chain-sdk 4a0ecebb to include sink.
Align the x/sink and Solana operator docs with the code and the launch
plan: Akash upgrade first, one proposal opening transfers, the seed step
and seed-window caps. Mark the Minted-refund path as a known defect.

Signed-off-by: Artur Troian <troian@users.noreply.github.com>
chalabi2 and others added 2 commits November 4, 2026 11:52
Use the akt program name across builds, deployment manifests, services and
documentation. Set the approved token name and lowercase symbol, and include
the mainnet metadata JSON with the existing Cosmos AKT logo.

Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Artur Troian <troian@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants