diff --git a/docs/images/stability_report/blacklist_user/Screen Shot 2022-11-30 at 10.38.26 AM.png b/docs/images/stability_report/blacklist_user/Screen Shot 2022-11-30 at 10.38.26 AM.png new file mode 100644 index 0000000..c2f090e Binary files /dev/null and b/docs/images/stability_report/blacklist_user/Screen Shot 2022-11-30 at 10.38.26 AM.png differ diff --git a/docs/images/stability_report/blacklist_user/Screen Shot 2022-11-30 at 10.39.11 AM.png b/docs/images/stability_report/blacklist_user/Screen Shot 2022-11-30 at 10.39.11 AM.png new file mode 100644 index 0000000..f0abe1f Binary files /dev/null and b/docs/images/stability_report/blacklist_user/Screen Shot 2022-11-30 at 10.39.11 AM.png differ diff --git a/docs/images/stability_report/blacklist_user/Screen Shot 2022-11-30 at 10.42.41 AM.png b/docs/images/stability_report/blacklist_user/Screen Shot 2022-11-30 at 10.42.41 AM.png new file mode 100644 index 0000000..96fc653 Binary files /dev/null and b/docs/images/stability_report/blacklist_user/Screen Shot 2022-11-30 at 10.42.41 AM.png differ diff --git a/docs/images/stability_report/configure_mint_controller/Screen Shot 2022-11-28 at 2.44.55 PM.png b/docs/images/stability_report/configure_mint_controller/Screen Shot 2022-11-28 at 2.44.55 PM.png new file mode 100644 index 0000000..cf89768 Binary files /dev/null and b/docs/images/stability_report/configure_mint_controller/Screen Shot 2022-11-28 at 2.44.55 PM.png differ diff --git a/docs/images/stability_report/configure_mint_controller/Screen Shot 2022-11-28 at 2.46.09 PM.png b/docs/images/stability_report/configure_mint_controller/Screen Shot 2022-11-28 at 2.46.09 PM.png new file mode 100644 index 0000000..67368ac Binary files /dev/null and b/docs/images/stability_report/configure_mint_controller/Screen Shot 2022-11-28 at 2.46.09 PM.png differ diff --git a/docs/images/stability_report/configure_minter/Screen Shot 2022-11-28 at 4.47.25 PM.png b/docs/images/stability_report/configure_minter/Screen Shot 2022-11-28 at 4.47.25 PM.png new file mode 100644 index 0000000..076f718 Binary files /dev/null and b/docs/images/stability_report/configure_minter/Screen Shot 2022-11-28 at 4.47.25 PM.png differ diff --git a/docs/images/stability_report/configure_minter/Screen Shot 2022-11-28 at 4.47.37 PM.png b/docs/images/stability_report/configure_minter/Screen Shot 2022-11-28 at 4.47.37 PM.png new file mode 100644 index 0000000..29c8f35 Binary files /dev/null and b/docs/images/stability_report/configure_minter/Screen Shot 2022-11-28 at 4.47.37 PM.png differ diff --git a/docs/images/stability_report/configure_minter/Screen Shot 2022-11-28 at 5.01.38 PM.png b/docs/images/stability_report/configure_minter/Screen Shot 2022-11-28 at 5.01.38 PM.png new file mode 100644 index 0000000..7f69b49 Binary files /dev/null and b/docs/images/stability_report/configure_minter/Screen Shot 2022-11-28 at 5.01.38 PM.png differ diff --git a/docs/images/stability_report/mint_asset/Screen Shot 2022-11-29 at 8.24.50 AM.png b/docs/images/stability_report/mint_asset/Screen Shot 2022-11-29 at 8.24.50 AM.png new file mode 100644 index 0000000..f60fd01 Binary files /dev/null and b/docs/images/stability_report/mint_asset/Screen Shot 2022-11-29 at 8.24.50 AM.png differ diff --git a/docs/images/stability_report/mint_asset/Screen Shot 2022-11-29 at 8.28.48 AM.png b/docs/images/stability_report/mint_asset/Screen Shot 2022-11-29 at 8.28.48 AM.png new file mode 100644 index 0000000..7379279 Binary files /dev/null and b/docs/images/stability_report/mint_asset/Screen Shot 2022-11-29 at 8.28.48 AM.png differ diff --git a/docs/images/stability_report/mint_asset/Screen Shot 2022-11-29 at 8.29.56 AM.png b/docs/images/stability_report/mint_asset/Screen Shot 2022-11-29 at 8.29.56 AM.png new file mode 100644 index 0000000..e4e1fa6 Binary files /dev/null and b/docs/images/stability_report/mint_asset/Screen Shot 2022-11-29 at 8.29.56 AM.png differ diff --git a/docs/images/stability_report/mint_asset_over_allowance/Screen Shot 2022-11-30 at 10.08.37 AM.png b/docs/images/stability_report/mint_asset_over_allowance/Screen Shot 2022-11-30 at 10.08.37 AM.png new file mode 100644 index 0000000..5643aca Binary files /dev/null and b/docs/images/stability_report/mint_asset_over_allowance/Screen Shot 2022-11-30 at 10.08.37 AM.png differ diff --git a/docs/images/stability_report/mint_asset_over_allowance/Screen Shot 2022-11-30 at 10.09.29 AM.png b/docs/images/stability_report/mint_asset_over_allowance/Screen Shot 2022-11-30 at 10.09.29 AM.png new file mode 100644 index 0000000..1dc762c Binary files /dev/null and b/docs/images/stability_report/mint_asset_over_allowance/Screen Shot 2022-11-30 at 10.09.29 AM.png differ diff --git a/docs/images/stability_report/mint_asset_to_blacklisted_user/Screen Shot 2022-11-30 at 11.45.20 AM.png b/docs/images/stability_report/mint_asset_to_blacklisted_user/Screen Shot 2022-11-30 at 11.45.20 AM.png new file mode 100644 index 0000000..b9887be Binary files /dev/null and b/docs/images/stability_report/mint_asset_to_blacklisted_user/Screen Shot 2022-11-30 at 11.45.20 AM.png differ diff --git a/docs/images/stability_report/mint_asset_to_blacklisted_user/Screen Shot 2022-11-30 at 11.45.29 AM.png b/docs/images/stability_report/mint_asset_to_blacklisted_user/Screen Shot 2022-11-30 at 11.45.29 AM.png new file mode 100644 index 0000000..38acbf5 Binary files /dev/null and b/docs/images/stability_report/mint_asset_to_blacklisted_user/Screen Shot 2022-11-30 at 11.45.29 AM.png differ diff --git a/docs/images/stability_report/mint_asset_while_paused/Screen Shot 2022-12-09 at 4.10.29 PM.png b/docs/images/stability_report/mint_asset_while_paused/Screen Shot 2022-12-09 at 4.10.29 PM.png new file mode 100644 index 0000000..10cd8cd Binary files /dev/null and b/docs/images/stability_report/mint_asset_while_paused/Screen Shot 2022-12-09 at 4.10.29 PM.png differ diff --git a/docs/images/stability_report/mint_asset_while_paused/Screen Shot 2022-12-09 at 4.11.13 PM.png b/docs/images/stability_report/mint_asset_while_paused/Screen Shot 2022-12-09 at 4.11.13 PM.png new file mode 100644 index 0000000..2822aae Binary files /dev/null and b/docs/images/stability_report/mint_asset_while_paused/Screen Shot 2022-12-09 at 4.11.13 PM.png differ diff --git a/docs/images/stability_report/pause/Screen Shot 2022-12-09 at 4.05.35 PM.png b/docs/images/stability_report/pause/Screen Shot 2022-12-09 at 4.05.35 PM.png new file mode 100644 index 0000000..966f6e4 Binary files /dev/null and b/docs/images/stability_report/pause/Screen Shot 2022-12-09 at 4.05.35 PM.png differ diff --git a/docs/images/stability_report/pause/Screen Shot 2022-12-09 at 4.05.45 PM.png b/docs/images/stability_report/pause/Screen Shot 2022-12-09 at 4.05.45 PM.png new file mode 100644 index 0000000..bc08475 Binary files /dev/null and b/docs/images/stability_report/pause/Screen Shot 2022-12-09 at 4.05.45 PM.png differ diff --git a/docs/images/stability_report/pause/Screen Shot 2022-12-09 at 4.06.34 PM.png b/docs/images/stability_report/pause/Screen Shot 2022-12-09 at 4.06.34 PM.png new file mode 100644 index 0000000..9040544 Binary files /dev/null and b/docs/images/stability_report/pause/Screen Shot 2022-12-09 at 4.06.34 PM.png differ diff --git a/docs/images/stability_report/send_non_tokenfactory_asset_while_paused/Screen Shot 2022-12-09 at 4.20.56 PM.png b/docs/images/stability_report/send_non_tokenfactory_asset_while_paused/Screen Shot 2022-12-09 at 4.20.56 PM.png new file mode 100644 index 0000000..49338d3 Binary files /dev/null and b/docs/images/stability_report/send_non_tokenfactory_asset_while_paused/Screen Shot 2022-12-09 at 4.20.56 PM.png differ diff --git a/docs/images/stability_report/send_tokenfactory_asset_from_bl_user/Screen Shot 2022-12-01 at 8.41.37 AM.png b/docs/images/stability_report/send_tokenfactory_asset_from_bl_user/Screen Shot 2022-12-01 at 8.41.37 AM.png new file mode 100644 index 0000000..146273d Binary files /dev/null and b/docs/images/stability_report/send_tokenfactory_asset_from_bl_user/Screen Shot 2022-12-01 at 8.41.37 AM.png differ diff --git a/docs/images/stability_report/send_tokenfactory_asset_to_bl_user/Screen Shot 2022-11-30 at 12.08.59 PM.png b/docs/images/stability_report/send_tokenfactory_asset_to_bl_user/Screen Shot 2022-11-30 at 12.08.59 PM.png new file mode 100644 index 0000000..10e6b40 Binary files /dev/null and b/docs/images/stability_report/send_tokenfactory_asset_to_bl_user/Screen Shot 2022-11-30 at 12.08.59 PM.png differ diff --git a/docs/images/stability_report/send_tokenfactory_asset_to_bl_user/Screen Shot 2022-11-30 at 12.09.11 PM.png b/docs/images/stability_report/send_tokenfactory_asset_to_bl_user/Screen Shot 2022-11-30 at 12.09.11 PM.png new file mode 100644 index 0000000..2174c0d Binary files /dev/null and b/docs/images/stability_report/send_tokenfactory_asset_to_bl_user/Screen Shot 2022-11-30 at 12.09.11 PM.png differ diff --git a/docs/images/stability_report/send_tokenfactory_asset_to_bl_user/Screen Shot 2022-12-01 at 8.49.43 AM.png b/docs/images/stability_report/send_tokenfactory_asset_to_bl_user/Screen Shot 2022-12-01 at 8.49.43 AM.png new file mode 100644 index 0000000..a96255a Binary files /dev/null and b/docs/images/stability_report/send_tokenfactory_asset_to_bl_user/Screen Shot 2022-12-01 at 8.49.43 AM.png differ diff --git a/docs/images/stability_report/send_tokenfactory_asset_while_paused/Screen Shot 2022-12-09 at 4.19.20 PM.png b/docs/images/stability_report/send_tokenfactory_asset_while_paused/Screen Shot 2022-12-09 at 4.19.20 PM.png new file mode 100644 index 0000000..76a588f Binary files /dev/null and b/docs/images/stability_report/send_tokenfactory_asset_while_paused/Screen Shot 2022-12-09 at 4.19.20 PM.png differ diff --git a/docs/images/stability_report/un_pause/Screen Shot 2022-12-09 at 4.26.05 PM.png b/docs/images/stability_report/un_pause/Screen Shot 2022-12-09 at 4.26.05 PM.png new file mode 100644 index 0000000..553e246 Binary files /dev/null and b/docs/images/stability_report/un_pause/Screen Shot 2022-12-09 at 4.26.05 PM.png differ diff --git a/docs/images/stability_report/un_pause/Screen Shot 2022-12-09 at 4.26.21 PM.png b/docs/images/stability_report/un_pause/Screen Shot 2022-12-09 at 4.26.21 PM.png new file mode 100644 index 0000000..141c6d5 Binary files /dev/null and b/docs/images/stability_report/un_pause/Screen Shot 2022-12-09 at 4.26.21 PM.png differ diff --git a/docs/images/stability_report/un_pause/Screen Shot 2022-12-09 at 4.27.23 PM.png b/docs/images/stability_report/un_pause/Screen Shot 2022-12-09 at 4.27.23 PM.png new file mode 100644 index 0000000..63eecaf Binary files /dev/null and b/docs/images/stability_report/un_pause/Screen Shot 2022-12-09 at 4.27.23 PM.png differ diff --git a/docs/images/stability_report/unblacklist_user/Screen Shot 2022-12-09 at 3.24.43 PM.png b/docs/images/stability_report/unblacklist_user/Screen Shot 2022-12-09 at 3.24.43 PM.png new file mode 100644 index 0000000..775dc78 Binary files /dev/null and b/docs/images/stability_report/unblacklist_user/Screen Shot 2022-12-09 at 3.24.43 PM.png differ diff --git a/docs/images/stability_report/unblacklist_user/Screen Shot 2022-12-09 at 3.25.29 PM.png b/docs/images/stability_report/unblacklist_user/Screen Shot 2022-12-09 at 3.25.29 PM.png new file mode 100644 index 0000000..6e04747 Binary files /dev/null and b/docs/images/stability_report/unblacklist_user/Screen Shot 2022-12-09 at 3.25.29 PM.png differ diff --git a/docs/images/stability_report/update_blacklister/Screen Shot 2022-11-30 at 10.12.16 AM.png b/docs/images/stability_report/update_blacklister/Screen Shot 2022-11-30 at 10.12.16 AM.png new file mode 100644 index 0000000..c5baf0b Binary files /dev/null and b/docs/images/stability_report/update_blacklister/Screen Shot 2022-11-30 at 10.12.16 AM.png differ diff --git a/docs/images/stability_report/update_blacklister/Screen Shot 2022-11-30 at 10.13.00 AM.png b/docs/images/stability_report/update_blacklister/Screen Shot 2022-11-30 at 10.13.00 AM.png new file mode 100644 index 0000000..98316f2 Binary files /dev/null and b/docs/images/stability_report/update_blacklister/Screen Shot 2022-11-30 at 10.13.00 AM.png differ diff --git a/docs/images/stability_report/update_blacklister/Screen Shot 2022-11-30 at 10.14.32 AM.png b/docs/images/stability_report/update_blacklister/Screen Shot 2022-11-30 at 10.14.32 AM.png new file mode 100644 index 0000000..14d783a Binary files /dev/null and b/docs/images/stability_report/update_blacklister/Screen Shot 2022-11-30 at 10.14.32 AM.png differ diff --git a/docs/images/stability_report/update_master_minter/Screen Shot 2022-11-28 at 10.56.28 AM (1).png b/docs/images/stability_report/update_master_minter/Screen Shot 2022-11-28 at 10.56.28 AM (1).png new file mode 100644 index 0000000..e91c368 Binary files /dev/null and b/docs/images/stability_report/update_master_minter/Screen Shot 2022-11-28 at 10.56.28 AM (1).png differ diff --git a/docs/images/stability_report/update_master_minter/Screen Shot 2022-11-28 at 10.56.28 AM.png b/docs/images/stability_report/update_master_minter/Screen Shot 2022-11-28 at 10.56.28 AM.png new file mode 100644 index 0000000..e91c368 Binary files /dev/null and b/docs/images/stability_report/update_master_minter/Screen Shot 2022-11-28 at 10.56.28 AM.png differ diff --git a/docs/images/stability_report/update_master_minter/Screen Shot 2022-11-28 at 11.33.37 AM.png b/docs/images/stability_report/update_master_minter/Screen Shot 2022-11-28 at 11.33.37 AM.png new file mode 100644 index 0000000..7f45805 Binary files /dev/null and b/docs/images/stability_report/update_master_minter/Screen Shot 2022-11-28 at 11.33.37 AM.png differ diff --git a/docs/images/stability_report/update_master_minter_nonPrivlidged/Screen Shot 2022-11-28 at 4.28.14 PM.png b/docs/images/stability_report/update_master_minter_nonPrivlidged/Screen Shot 2022-11-28 at 4.28.14 PM.png new file mode 100644 index 0000000..504f615 Binary files /dev/null and b/docs/images/stability_report/update_master_minter_nonPrivlidged/Screen Shot 2022-11-28 at 4.28.14 PM.png differ diff --git a/docs/images/stability_report/update_master_minter_nonPrivlidged/Screen Shot 2022-11-28 at 8.31.20 AM.png b/docs/images/stability_report/update_master_minter_nonPrivlidged/Screen Shot 2022-11-28 at 8.31.20 AM.png new file mode 100644 index 0000000..5c0517d Binary files /dev/null and b/docs/images/stability_report/update_master_minter_nonPrivlidged/Screen Shot 2022-11-28 at 8.31.20 AM.png differ diff --git a/docs/images/stability_report/update_pauser/Screen Shot 2022-12-09 at 3.46.01 PM.png b/docs/images/stability_report/update_pauser/Screen Shot 2022-12-09 at 3.46.01 PM.png new file mode 100644 index 0000000..4cc8018 Binary files /dev/null and b/docs/images/stability_report/update_pauser/Screen Shot 2022-12-09 at 3.46.01 PM.png differ diff --git a/docs/images/stability_report/update_pauser/Screen Shot 2022-12-09 at 3.46.11 PM.png b/docs/images/stability_report/update_pauser/Screen Shot 2022-12-09 at 3.46.11 PM.png new file mode 100644 index 0000000..ebaf811 Binary files /dev/null and b/docs/images/stability_report/update_pauser/Screen Shot 2022-12-09 at 3.46.11 PM.png differ diff --git a/docs/images/stability_report/update_pauser/Screen Shot 2022-12-09 at 3.51.26 PM.png b/docs/images/stability_report/update_pauser/Screen Shot 2022-12-09 at 3.51.26 PM.png new file mode 100644 index 0000000..91fbda9 Binary files /dev/null and b/docs/images/stability_report/update_pauser/Screen Shot 2022-12-09 at 3.51.26 PM.png differ diff --git a/docs/stability_report.md b/docs/stability_report.md new file mode 100644 index 0000000..9280f88 --- /dev/null +++ b/docs/stability_report.md @@ -0,0 +1,160 @@ +# Stability Report + +Written by: Strangelove Ventures + +Published: January 6, 2023 + + +## Abstract +Hero chain is an application specific Cosmos chain developed and tested by the team at Strangelove and designed to host the deployment of real world assets native to the IBC ecosystem. This chain is expected to be deployed using Interchain Security provided by the Cosmos Hub – a $3.5B market cap blockchain. A feature-complete snapshot of the chain development was deployed as part of an incentivized public testnet that was stewarded by the Cosmos community, primarily by the teams at Informal Systems and Hypha Cooperative. The team found that in most critical ways both the application written in the Cosmos SDK and the Interchain Security mechanism behaved reliably. Exceptions and their remediations are noted in the document below as is the plan for further testing. + +The key properties related to compliance features, integration with IBC, and governance were all tested in real world conditions. + + +## About this Report + +This stability report covers testing undertaken on the Hero chain by the Strangelove Team. The majority of the testing took place during the public incentivized testnet – Game of Chains [[Leaderboard](https://interchainsecurity.dev/game-of-chains-2022), [Announcement Blog Post](https://blog.cosmos.network/announcing-game-of-chains-open-for-registration-d1818662de8e)]. The testnet started on November 7, 2022 and finished on December 9, 2022. While this report covers some critical aspects of [Interchain Security](https://github.com/cosmos/interchain-security) (ICS) and the [Admin Module](https://github.com/Ethernal-Tech/admin-module/), this report will focus on the [Tokenfactory Module](https://github.com/strangelove-ventures/hero/tree/main/x/tokenfactory). This module provides the key functionality of Hero allowing privileged accounts to mint assets and blacklist users. The module was also the one piece that was directly developed by Strangelove. + + +#### Approaches for the stability analysis +* Game of Chains monitoring +* IBC unit testing and CI/CD workflow +* Manual code reviews +* Audit of Tokenfactory module/middleware, Admin Module, Packet Forward Middleware (to begin Jan 17, 2023) + + +## Induction into Game Of Chains + +On November 21, 2022, using [Interchain Security](https://github.com/cosmos/interchain-security), Hero was successfully added as a consumer chain to the testnet. In a real world-context, the provider chain is a large market cap proof-of-stake chain which will be able to offer high security guarantees to Cosmos blockchains in return for a fee paid to validators. In this testnet, the provider chain was a [forked version of Gaia](https://github.com/cosmos/gaia/tree/goc-dec-7), Gaia being the chain binary that runs the Cosmos Hub. This fork was necessary because it included the [pre-release of Interchain Security](https://github.com/cosmos/interchain-security/releases/tag/v0.1). + +After being on-boarded as a consumer chain, Hero acted as expected: + +* Hero properly adopted the provider chains validator set +* IBC transactions and IBC functionality worked as expected +* Chain output logs were stable + + +## Provider Chain Halt and Eventual Hero Halt + +On December 8, 2022, the provider chain halted while the community tested out a “slash throttle” feature. At the time of the halt, research was being tracked [here](https://github.com/hyphacoop/ics-testnets/tree/goc-dec-halt-incident/game-of-chains-2022/incidents). The bug has since been found and [fixed](https://github.com/cosmos/interchain-security/pull/605). + +In the current version of ICS, if a provider chain halts, consumer chains continue to produce blocks and accept IBC transactions until the trusting period of the [light-client](https://github.com/cosmos/ibc/tree/main/spec/core/ics-002-client-semantics) expires. + +During the client trusting period of 1 week, Hero continued to run smoothly without the provider chain. + +On December 14, 2022, one week after the halt of the provider chain, the light-client between Hero and the provider expired, causing Hero to also halt. + +This is extremely unlikely in a real world scenario as Hero is intended to launch as a consumer chain of the Cosmos Hub. To our knowledge, the Cosmos Hub has not had any unplanned downtime since launch in March 2019. Other precautions can also be taken, such as specifying a longer client trusting period between consumer and provider. + +It is possible to recover a consumer chain in this situation, but requires code changes and cooperation from validators. + + + +## Tokenfactory Module + + +The [Tokenfactory Module](https://github.com/strangelove-ventures/hero/tree/main/x/tokenfactory) in the Hero chain binary allows generic assets to be minted and controlled by privileged accounts. Privileged accounts can also place a pause on all transactions to and from the chain. + +A list of all possible privileges tied to the Tokenfactory can be seen [here](../readme.md#access-control). + +Throughout the duration of the Game of Chains Testnet, Strangelove manually tested many Tokenfactory commands. At a high level, we tested: + +* Delegation and creation of all privileged accounts (Master Minter, Minter, Blacklist, etc,) +* Minting of assets +* Blacklisting functionality +* Pause functionality + + +A detailed list of all commands and their outcomes are available in this [table](#testnet-commands) + +In addition to the Game of Chains tests, there is a CI/CD pipeline using [ibctest](https://github.com/strangelove-ventures/ibctest) built into the GitHub repo to continuously validate Tokenfactory functionality as features are added and changed. + + +## Tokenfactory Module Discoveries + + +During the course of the testnet, we discovered and fixed three critical bugs: + +* [[PR #1]](https://github.com/strangelove-ventures/hero/pull/1) It was impossible to burn assets minted by Tokenfactory +* [[PR #4]](https://github.com/strangelove-ventures/hero/pull/4) A non-blacklisted user was able to send Tokenfactory assets to a blacklisted user +* [[PR #4]](https://github.com/strangelove-ventures/hero/pull/4) A blacklisted user was unable to send/receive assets not minted by the Tokenfactory + + +Due to the Game of Chains halt, we were unable to incorporate these changes during the testnet. However, rigorous test cases were added to the [ibctest CI pipeline](https://github.com/strangelove-ventures/hero/blob/main/ibctest/ibctest_test.go) to validate the fixes and prevent future regressions. Since the complexity of these bugs were minimal, we found these ibctest cases sufficient to ensure confidence. + + +## Testnet commands + +Below are the Tokenfactory commands manually run during the Game of Chains Testnet. + + +For the below commands, "user1" and "user2" are normal unprivileged accounts. The remaining accounts should be self explanatory from their name via the [Access Control Table](../readme.md#access-control). For situations where the wallet address was needed instead of the key name, simply hover over the address to see the tool tip describing what privileged account the address is tied to. + + +The linked images are there to show what the output of the command looks like in either a blockchain explorer or the command line. + + + +[owner]: ## "Owner" + +[master_minter]: ## "Master Minter" + +[mint_controller]: ## "Mint Controller" + +[minter]: ## "Minter" + +[blacklister]: ## "Blacklister" + +[pauser]: ## "Pauser" + +[user1]: ## "User1" + +[user2]: ## "User2" + +| Description | Summary | Pass/Fail | Command | UI Screenshots | +|:---:|:---:|:---:|:---:|:---:| +| Update Master Minter from Non-Privleged Account | This tx correctly failed due to the tx being signed from an account without the “owner” privilege. | 🟢 | herod tx tokenfactory update-master-minter [cosmos1fmtkwd7awdyavzk78yh75wt0tl7vcme89f42xg][master_minter] --from user1 --fees 500uhero | [images](./images/stability_report/update_master_minter_nonPrivlidged/) | +| Update Master Minter | Successfully updated Master Minter account using privileged “owner” account | 🟢 | herod tx tokenfactory update-master-minter [cosmos1fmtkwd7awdyavzk78yh75wt0tl7vcme89f42xg][master_minter] --from owner --fees 500uhero | [images](./images/stability_report/update_master_minter/) | +| Configure Mint Controller | Successfully updated the “Mint Controller” and “Minter” account using the privileged “Master Minter” account. | 🟢 | herod tx tokenfactory configure-minter-controller [cosmos1erqarmzn2ae5vd4j6sk77hccs0yfs854jee8wd][mint_controller] [cosmos1uydlnqjz5mjfgafs9gxm5lhww4hdffldmu2j6y][minter] --fees 500uhero --from masterminter | [images](./images/stability_report/configure_mint_controller/) | +| Configure Minter | Successfully enabled Minter account to have an allowance of 1,000,000 udrachma. | 🟢 | herod tx tokenfactory configure-minter [cosmos1uydlnqjz5mjfgafs9gxm5lhww4hdffldmu2j6y][minter] 1000000udrachma --fees 500uhero --from minter-controller | [images](./images/stability_report/configure_minter/) | +| Mint Asset | The Minter successfully minted 100 udrachma into a users account | 🟢 | herod tx tokenfactory mint [cosmos1qtw23j6y9758juk6mnm937uands7vyxsxkhptu][user1] 100udrachma --from minter --fees 500uhero | [images](./images/stability_report/mint_asset/) | +| Mint Asset - Over Allowance | Attempted to mint an amount of asset over the allowance allocated by the Mint Controller. This transaction correctly failed because 9,000,000 was over the allotted 1,000,000 allocated by the Mint Controller. | 🟢 | herod tx tokenfactory mint [cosmos1qtw23j6y9758juk6mnm937uands7vyxsxkhptu][user1] 9000000udrachma --from minter --fees 500uhero | [images](./images/stability_report/mint_asset_over_allowance/) | +| Update Blacklister | Successfully created the blacklist account using the privileged “Owner” account. | 🟢 | herod tx tokenfactory update-blacklister [cosmos1w9v9nfa2lvfhx3u6g8l67g64deu9d4wvjav7vk][blacklister] --fees 500uhero --from owner | [images](./images/stability_report/update_blacklister/) | +| Blacklist User | Successfully blacklisted a users account using the privileged “Blacklister” account. Note: when querying for blacklisted accounts, it is not possible to get a list of all blacklisted accounts. It is only possible to query whether a specified address is blacklisted. | 🟢 | herod tx tokenfactory blacklist [cosmos1qtw23j6y9758juk6mnm937uands7vyxsxkhptu][user1] --from black-lister --fees 500uhero | [images](./images/stability_report/blacklist_user/) | +| Mint Asset to Blacklisted User | The Minter was correctly not able to mint 100 udrachma into a blacklisted users account | 🟢 | herod tx tokenfactory mint [cosmos1qtw23j6y9758juk6mnm937uands7vyxsxkhptu][user1] 100udrachma --from minter --fees 500uhero | [images](./images/stability_report/mint_asset_to_blacklisted_user/) | +| Send tokenfactory asset to Blacklisted User | It was incorrectly possible for a non-blacklisted user to send minted funds to a blacklisted user. This was a bug discovered and [fixed](https://github.com/strangelove-ventures/hero/pull/4). | ❌ | herod tx bank send user2 [cosmos1qtw23j6y9758juk6mnm937uands7vyxsxkhptu][user1] 100udrachma --fees 500uhero | [images](./images/stability_report/send_tokenfactory_asset_to_bl_user/) | +| Send Tokenfactory Asset from Blacklisted User | Attempted to send a minted asset using a blacklisted account. The client acted correctly and the tx was never broadcast. | 🟢 | herod tx bank send [cosmos1qtw23j6y9758juk6mnm937uands7vyxsxkhptu][user1] [cosmos1zaamktfya6ps3ektdpt7xgka5nu9hx2w8ruthx][user2]100udrachma --fees 500uhero | [images](./images/stability_report/send_tokenfactory_asset_from_bl_user/) | +| Un-Blacklist User | Successfully un-blacklisted a user account using the privileged “Blacklister” account. The Minter was then correctly able to mint assets into the previously blacklisted account. | 🟢 | herod tx tokenfactory unblacklist [cosmos1qtw23j6y9758juk6mnm937uands7vyxsxkhptu][user1] --fees 500uhero --from black-lister | [images](./images/stability_report/unblacklist_user/) | +| Update Pauser | Successfully updated Pauser account using privileged “owner” account. Note: when querying for the pauser address, the address itself is not needed. | 🟢 | herod tx tokenfactory update-pauser [cosmos1earswrsr7xhl8mgkglvfvcxqxqsflpu9cvun93][pauser] --from owner --fees 500uhero | [images](./images/stability_report/update_pauser/) | +| Pause | Successfully paused chain using the privileged “pauser” account | 🟢 | herod tx tokenfactory pause --fees 500uhero --from pauser | [images](./images/stability_report/pause/) | +| Mint Asset While Paused | The Minter correctly failed to mint 100 udrachma into a user account because the chain was paused. | 🟢 | herod tx tokenfactory mint [cosmos1qtw23j6y9758juk6mnm937uands7vyxsxkhptu][user1] 100udrachma --from minter --fees 500uhero | [images](./images/stability_report/mint_asset_while_paused/) | +| Send Tokenfactory Asset While Paused | Attempted to send a minted asset while the chain was paused. The client acted correctly and the tx was never broadcast | 🟢 | herod tx bank send user1 [cosmos1zaamktfya6ps3ektdpt7xgka5nu9hx2w8ruthx][user2] 100udrachma --fees 500uhero | [images](./images/stability_report/send_tokenfactory_asset_while_paused/) | +| Send Non-Tokenfactory Asset While Paused | Attempted to send a non-tokenfactory asset while the chain was paused. The client acted correctly and the tx was never broadcast. | 🟢 | herod tx bank send user1 [cosmos1zaamktfya6ps3ektdpt7xgka5nu9hx2w8ruthx][user2] 100uhero --fees 500uhero | [images](./images/stability_report/send_non_tokenfactory_asset_while_paused/) | +| Un-Pause | Successfully un-paused chain using the privileged “pauser” account | 🟢 | herod tx tokenfactory unpause --fees 500uhero --from pauser | [images](./images/stability_report/un_pause/) | + + + +## Admin Module + + +The [Admin Module](https://github.com/Ethernal-Tech/admin-module/) was built by the [Ethernal Team](https://github.com/Ethernal-Tech). This module allows the chain to be upgraded by bypassing the provider chain's validator set which would otherwise rely on a two week public governance process. +We were unable to test this in the Game of Chains Testnet due to the provider chain halt and subsequent Hero chain halt. However, we have confirmed this functionality works with an “[ibctest](https://github.com/strangelove-ventures/ibctest)” test case. + +It should be noted that once [Cosmos SDK](https://github.com/cosmos/cosmos-sdk) 0.47 is released, this custom module will not be needed. +The Gov module in this upgraded version of the SDK will have this functionality natively built in. + + + +## Future Testing and Validation + +* Lambda testnet (Set to launch mid to early January 2023) +* Integration tests with asset issuer(s) +* Continuing to build out more robust [CI/CD tests](https://github.com/strangelove-ventures/hero/tree/main/ibctest) using the [ibctest](https://github.com/strangelove-ventures/ibctest) test suite + + +## Conclusion + + +Besides the three bugs discovered in the Tokenfactory module, the Hero chain worked and functioned as intended. The halt of Game of Chains hindered some testing capacity but ibctest proved a reliable replacement. + +While the chain functionality itself is easy to validate with the ibctest suite, the intricacies of Interchain Security along with more rigorous widespread testing of Tokenfactory behavior can be further explored during the [Cosmos SDK Rho](https://hub.cosmos.network/main/roadmap/cosmos-hub-roadmap-2.0.html#v8-rho-upgrade-expected-q1-2023) Testnet and via a third party audit conducted by [Oak Security](https://www.oaksecurity.io/). \ No newline at end of file diff --git a/readme.md b/readme.md index b9ca041..4fe41c9 100644 --- a/readme.md +++ b/readme.md @@ -38,7 +38,7 @@ herod init $MONIKER | **Update Master Minter** | | x | | | | | | x | | **Update Owner** | | x | | | | | | x | | **Update Pauser** | | x | | | | | | x | -| **Transer Tokens** | x | x | x | x | x | x | x | | +| **Transfer Tokens** | x | x | x | x | x | x | x | | ## Launch with genesis file or run as standalone chain