Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: zeta supply checks #1358

Merged
merged 17 commits into from
Nov 10, 2023
Merged

feat: zeta supply checks #1358

merged 17 commits into from
Nov 10, 2023

Conversation

kingpinXD
Copy link
Contributor

@kingpinXD kingpinXD commented Oct 31, 2023

Description

  • Adds helper functions and a thread to the zetaclient to perform the zeta supply checks.

Closes: <#1352>

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Include instructions and any relevant details so others can reproduce.

  • Tested CCTX in localnet
  • Tested in development environment
  • Go unit tests
  • Go integration tests
  • Tested via GitHub Actions

Checklist:

  • I have added unit tests that prove my fix feature works

@kingpinXD kingpinXD linked an issue Nov 1, 2023 that may be closed by this pull request
@kingpinXD kingpinXD changed the title Zeta supply checks feat: zeta supply checks Nov 1, 2023
@kingpinXD kingpinXD marked this pull request as ready for review November 1, 2023 15:43
Copy link
Member

@lumtis lumtis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As far as I can tell CctxByStatus would be called every ticks?
It would be a very intensive operation iterating the cctxs in this query.

If we just need this query for aborted CCTXs we should think about a new indexing like we do for pending cctxs, or storing the result we want for the aborted cctxs directly onchain.

Another solution is to use a backend indexer for the data but in this case we should no longer consider observers posting invariant failure to the protocol because they should only rely on blockchain data in order to do this.

app/setup_handlers.go Outdated Show resolved Hide resolved
cmd/zetaclientd/start.go Outdated Show resolved Hide resolved
cmd/zetaclientd/start.go Outdated Show resolved Hide resolved
zetaclient/zeta_supply_checker_test.go Show resolved Hide resolved
@kingpinXD
Copy link
Contributor Author

As far as I can tell CctxByStatus would be called every ticks? It would be a very intensive operation iterating the cctxs in this query.

If we just need this query for aborted CCTXs we should think about a new indexing like we do for pending cctxs, or storing the result we want for the aborted cctxs directly onchain.

Another solution is to use a backend indexer for the data but in this case we should no longer consider observers posting invariant failure to the protocol because they should only rely on blockchain data in order to do this.

Yeah, I thought of this; since we only really need the amount, storing that separately might be a good idea. But we can let this run for sometime on athens3 to see how well it holds and implement a service to keep track of this amount only.
The GetCctxByStatus is just a good-to-have query, and I agree that it should not be used for this purpose.

Copy link
Member

@lumtis lumtis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I thought of this; since we only really need the amount, storing that separately might be a good idea. But we can let this run for sometime on athens3 to see how well it holds and implement a service to keep track of this amount only.

I think we can keep it as it for experimentation but we should have a more optimized solution for poroduction.

The GetCctxByStatus is just a good-to-have query, and I agree that it should not be used for this purpose.

I think we should avoid having queries reading extensively in the store, here going through all cctxs. We should use paginated read in the store which is here not possible since we read and filter the object. I think the best is to have an additional indexation for the specific cctx status that we need.

zetaclient/zeta_supply_checker.go Show resolved Hide resolved
Copy link
Contributor

@ws4charlie ws4charlie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good

@kingpinXD kingpinXD merged commit aaadff9 into develop Nov 10, 2023
15 checks passed
@kingpinXD kingpinXD deleted the zeta-supply-checks branch November 10, 2023 22:23
@gzukel gzukel mentioned this pull request Dec 19, 2023
11 tasks
CharlieMc0 added a commit that referenced this pull request Dec 19, 2023
* feat: zeta supply checks (#1358)

* chore: improve changelogs format (#1390)

* sort changelogs

* refactor format

* comment

* fix(`crosschain`): use event index in inbound tx digest (#1372)

* add event index in observer inbound

* rename messages

* update method usage

* use event index

* fix cosmos-gosec

* depositor contract

* smoketest refactor

* fix contracts

* mutiple deposits smoke tests

* fix depositor

* withdrawer contract

* fix smoketest deposits

* fix withdrawer contract

* multiple withdraw test

* fix contracts

* fix withdraws

* update changelog

* fix: cherry pick v10.1.x hotfix (minRelayTxFee and bitcoin mainnet/testnet address format) (#1367)

* skip some more recent garbage outTx trackers

* skip garbage trackers and increase btc gas fee

* skip mainnet addresses in cctxs

* cherry picked minRelayTxFee hotfix and bitcoin testnet/mainnet address format fix

* resolve conflict

* update CHANGELOG.md for v10.1.x hotfix

---------

Co-authored-by: charliec <charliec@zetachain.com>
Co-authored-by: brewmaster012 <88689859+brewmaster012@users.noreply.github.com>

* feat: update observer (#1384)

* chore: add chain id to localnet and open port 26657 to make local testing easier.  (#1401)

* added chain id to configs

* mapped port 26657 to localhost

* feat: Add HSM capability for zetaclient hot key - non production (#1387)

* initial commit

* Added sign function and unit test

* hsm config updates

* introduce hsm mode

* added commands to get address and generate key in hsm

* skipping unit test as it will fail in CI

* ran make generate and fixed lint errors

* Update cmd/zetaclientd/hsm.go

Co-authored-by: Lucas Bertrand <lucas.bertrand.22@gmail.com>

* Update zetaclient/broadcast.go

Co-authored-by: Lucas Bertrand <lucas.bertrand.22@gmail.com>

* Update zetaclient/broadcast.go

Co-authored-by: Lucas Bertrand <lucas.bertrand.22@gmail.com>

* Update zetaclient/hsm_signer.go

Co-authored-by: Lucas Bertrand <lucas.bertrand.22@gmail.com>

* Update zetaclient/hsm_signer.go

Co-authored-by: Lucas Bertrand <lucas.bertrand.22@gmail.com>

* Update zetaclient/hsm_signer.go

Co-authored-by: Lucas Bertrand <lucas.bertrand.22@gmail.com>

* cleanup

* added config for hsm hotkey name and moved hsm mode flag to zetabridge cfg

* add entry to changelog.

* moved hsm to new package and added build flag for unit test

* add changelog entry

* fix lint errors

---------

Co-authored-by: Lucas Bertrand <lucas.bertrand.22@gmail.com>

* fix: speed up evm outtx inclusion and improve log prints (#1406)

Co-authored-by: charliec <charliec@zetachain.com>

* docs: add code freeze note (#1414)

* zetaclient: allow one 1 event that remotely calls zEVM contract per tx

* revert the accidental last commit

* include bitcoin outtx regardless of the cctx status (#38)

* refactor: condense logging for a supply checker  (#9)

* chore: increment handler version (#5)

Co-authored-by: Lucas Bertrand <lucas.bertrand.22@gmail.com>

* test: add tests for out tx tracker (#10)

* add tests fro out ts tracker

* use getEthereumChainID function in tests

---------

Co-authored-by: Lucas Bertrand <lucas.bertrand.22@gmail.com>

* fix: Zellic-3.7 - Add check for existing contract address to avoid overwriting. (#13)

* add check for existing contract address to avoid overwriting.

* Added check for redeployment of gas and asset token contracts
Added unit test for this scenario

* update changelog

---------

Co-authored-by: Lucas Bertrand <lucas.bertrand.22@gmail.com>

* fix: Zellic-3.2 - prevent deposit when zrc20 is paused (#31)

* add pause check

* revert on paused

* update tests

* add smoke test check

* goimports

* changelog

* Update x/crosschain/keeper/evm_deposit.go

Co-authored-by: Charlie Chen <34498985+ws4charlie@users.noreply.github.com>

---------

Co-authored-by: Charlie Chen <34498985+ws4charlie@users.noreply.github.com>

* test: ballot tests (#17)

* refactor(`fungible`): use code hash in `MsgUpdateContractBytecode` to allow for rollback (#23)

* code hash request

* make generate

* udpate message

* add cli command

* udpate smoke tests

* changelog

* update message name

* add check for length

* replace log with event

* add is contract check

* refactor: consolidate builds (#22)

* remove begin block

* remove build from smoketest

* deploy system contracts message

* msg tx

* add system contract deployment in smoke tests

* start core params refactor

* changelog

* refactor chains

* config refactor

* remaining build tags

* lint issues

* lint issues 2

* gen docs

* gen docs 2

* gosec issues 1

* fix cosmos nosec

* lint issues

* fix core params check

* make generate

* fix assign

* use privnet chains by default

* fix chain fetching

* use local goerli for smoke tests

* remove unamed gosec

* address nosec

* other goerli net to rename in smoketests

* gosec

* nosec alerts

* nosec alert 2

* use Bitcoin specific network

* fix address system contracts

* add logs in test

* Add more logs

* test remaining smoke tests

* remove hardcoded ZetaChain chain ID

* remove bitcoin hardcoded values

* add back smoketests

* fix smoke test except cross chain swap

* make generate

* add log message

* fix evm swap contract

* fix unit test 1

* fix CLI tests

* make generate

* fix log error

* fix Bitcoin proof test

* fix address test

* remove network flag and improve smoke tests

* add admin group

* move core params out of genesis

* remove unnecessary RemoveInTxTrackerIfExists

* add check for contract failure

* Update x/crosschain/keeper/keeper_cross_chain_tx_vote_inbound_tx.go

Co-authored-by: Tanmay <tanmay@zetachain.com>

* fix install in action

* improve events for system contract deploy

* error handling for bitcoin net params

* add utility functions in common

* add stateful smoketest from source

* try test fix

* fix unit test

* fix tests

---------

Co-authored-by: Tanmay <tanmay@zetachain.com>

* refactor: disable zeta supply checker routine (#45)

* docs: update changelog with v11.0.0

* chore: update go releaser

---------

Co-authored-by: Tanmay <tanmay@zetachain.com>
Co-authored-by: Lucas Bertrand <lucas.bertrand.22@gmail.com>
Co-authored-by: Charlie Chen <34498985+ws4charlie@users.noreply.github.com>
Co-authored-by: charliec <charliec@zetachain.com>
Co-authored-by: brewmaster012 <88689859+brewmaster012@users.noreply.github.com>
Co-authored-by: Charlie <31941002+CharlieMc0@users.noreply.github.com>
Co-authored-by: kevinssgh <79858682+kevinssgh@users.noreply.github.com>
@gzukel gzukel mentioned this pull request Dec 19, 2023
11 tasks
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.

zetaclient : Add a new thread which runs the supply check
3 participants