# TestNet and MainNet Update: 3.12.2

**URL:** <https://forum.algorand.co/t/testnet-and-mainnet-update-3-12-2/8406>\
**Category:** Announcements\
**Tags:** testnet, mainnet\
**Created:** [November 30, 2022, 5:14pm UTC](https://forum.algorand.co/t/testnet-and-mainnet-update-3-12-2/8406 "2022-11-30T17:14:16Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![devops-service](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.algorand.co/devops-service/32/2205_2.png) [@devops-service](https://forum.algorand.co/u/devops-service)\
**Post date:** [November 30, 2022, 5:14pm UTC](https://forum.algorand.co/t/testnet-and-mainnet-update-3-12-2/8406/1 "2022-11-30T17:14:16Z")

</div>

MainNet and TestNet have been updated to 3.12.2 today, Wed Nov 30, 2022 12:00PM EST (5:00PM UTC).

 ![GitHub Logo](https://us1.discourse-cdn.com/flex016/uploads/algorand/original/1X/fcd756bba61094f9e8774e43ec402e311aeea50e.jpeg)

| **IMPORTANT**  
 **This release requires a protocol upgrade.**   
 This release contains a consensus protocol upgrade, which implements the following spec: [GitHub - algorandfoundation/specs at 44fa607d6051730f5264526bf3c108d51f0eadb6](https://github.com/algorandfoundation/specs/tree/44fa607d6051730f5264526bf3c108d51f0eadb6) |
| --- |

| **IMPORTANT**  
 **The keys used to sign the release packages have been renewed.**   
 See the [instructions below](#how-to-update-signing-key) on how to update for a specific system |
| --- |

# What's New

- AVM: box storage is now available. Apps can create an unlimited number of boxes for storing unstructured data.
- AVM: `switch`, `match`, and frame pointer opcodes are now available. These enable more efficient TEAL programs in terms of program length and computation.
- Bugfixes related to catchpoints, performance enhancements, and additional logging.

# Changelog

## New Features

- AVM: match, pushints, and pushbytess opcodes ([#4645](https://github.com/algorand/go-algorand/pull/4645))
- AVM: Add support for Boxes ([#4149](https://github.com/algorand/go-algorand/pull/4149))
- Catchpoint Dump Utility: catchpointdump now supports tar.gz ([#4743](https://github.com/algorand/go-algorand/pull/4743))

## Enhancements

- API: bump max size of teal source and dryrun ([#4633](https://github.com/algorand/go-algorand/pull/4633))
- Perf Test: Transaction group handle/verify ([#4652](https://github.com/algorand/go-algorand/pull/4652))
- Consensus: v36 upgrade ([#4722](https://github.com/algorand/go-algorand/pull/4722))
- Lint: enable go vet printf format arg checks for logging ([#4679](https://github.com/algorand/go-algorand/pull/4679))
- Logging: demote LeaseInLedgerError from warn to info level ([#4685](https://github.com/algorand/go-algorand/pull/4685))
- Netgoal: Update netgoal generate flags and variables ([#4656](https://github.com/algorand/go-algorand/pull/4656))
- Performance: Agreement state serialization using msgp ([#4644](https://github.com/algorand/go-algorand/pull/4644))
- Performance: don't create child cow in TestTransactionGroup ([#4706](https://github.com/algorand/go-algorand/pull/4706))
- Prefetcher: enable prefetcher for assets and apps ([#4352](https://github.com/algorand/go-algorand/pull/4352))
- Tests: 20221012 improvements ([#4639](https://github.com/algorand/go-algorand/pull/4639))
- Tools: Allow specification of Reward Pool Account Balance in Genesis ([#4643](https://github.com/algorand/go-algorand/pull/4643))
- API: Update oapi-codegen version to v1.12.0 of our fork ([#4707](https://github.com/algorand/go-algorand/pull/4707))
- Accountdb: add migration 8 for resetting accounthashes on betanet ([#4822](https://github.com/algorand/go-algorand/pull/4822))
- Algod: Consolidate models ([#4714](https://github.com/algorand/go-algorand/pull/4714))
- Algod: Delete v1 usage from client and remove `V2` prefix from APIs ([#4767](https://github.com/algorand/go-algorand/pull/4767))
- Algod: Migrate internal uses of v1 algod API to v2 ([#4684](https://github.com/algorand/go-algorand/pull/4684))
- Alphanet: update vAlpha5 to point to v36 ([#4729](https://github.com/algorand/go-algorand/pull/4729))
- Catchpoints: Enrich catchpoint generation and status with KV metadata ([#4808](https://github.com/algorand/go-algorand/pull/4808))
- Ci: Notify when CircleCI build failures for master and rel branches only ([#4789](https://github.com/algorand/go-algorand/pull/4789))
- Ci: Notify when GHA workflow fails on master ([#4791](https://github.com/algorand/go-algorand/pull/4791))
- Docs: Update SECURITY.md ([#4782](https://github.com/algorand/go-algorand/pull/4782))
- Goal: Add URL to goal asset info. ([#4731](https://github.com/algorand/go-algorand/pull/4731))
- Metrics: add TransactionGroupTxSyncHandled ([#4815](https://github.com/algorand/go-algorand/pull/4815))
- Metrics: split out /Transaction/AssembleBlock metrics ([#4795](https://github.com/algorand/go-algorand/pull/4795))
- Netgoal: start with at least 20GB RootStorage ([#4779](https://github.com/algorand/go-algorand/pull/4779))
- Performance: turn cache misses during assembly into cache hits during eval ([#4617](https://github.com/algorand/go-algorand/pull/4617))
- Performance: Don't preallocate rarely used maps in MakeStateDelta ([#4715](https://github.com/algorand/go-algorand/pull/4715))
- Tech Debt: Reduce number of dependencies. ([#4750](https://github.com/algorand/go-algorand/pull/4750))
- Telemetry: add TCP RTT info collection ([#4745](https://github.com/algorand/go-algorand/pull/4745))
- Tests: Squelch macOS accept incoming network connections notifications ([#4814](https://github.com/algorand/go-algorand/pull/4814))
- Tests: large generated accountdb cluster test ([#4772](https://github.com/algorand/go-algorand/pull/4772))
- Tests: Fix txid-string comparison ([#4792](https://github.com/algorand/go-algorand/pull/4792))
- Tests: Move box test artifacts to a temp directory ([#4771](https://github.com/algorand/go-algorand/pull/4771))
- Tests: Lint for unparallelized tests without explicit reason ([#4746](https://github.com/algorand/go-algorand/pull/4746))
- Tools: update catchpointdump 'database' and 'database check' commands to handle staging tables and KVs ([#4802](https://github.com/algorand/go-algorand/pull/4802))
- Txhandler: add more metric ([#4786](https://github.com/algorand/go-algorand/pull/4786))

## Bugfixes

- AVM: fix early eval exits for Debugger ([#4719](https://github.com/algorand/go-algorand/pull/4719))
- Bug-fix: Blank Import Needs Commenting for Indexer's Lint ([#4720](https://github.com/algorand/go-algorand/pull/4720))
- Bug-fix: return v2 spec from swagger endpoint ([#4697](https://github.com/algorand/go-algorand/pull/4697))
- Catchpoint: actualize limit constants and fix txtail table init ([#4703](https://github.com/algorand/go-algorand/pull/4703))
- Devops: update docker container for docker hub ([#4723](https://github.com/algorand/go-algorand/pull/4723))
- Dispenser: add input validation ([#4713](https://github.com/algorand/go-algorand/pull/4713))
- Network: align duplicateFilterCount to prevent panic on 32-bit platforms ([#4702](https://github.com/algorand/go-algorand/pull/4702))
- Catchpoints: Add the kv hashes into the trie ([#4812](https://github.com/algorand/go-algorand/pull/4812))
- Ci: Fix GHA failure notification trigger condition ([#4810](https://github.com/algorand/go-algorand/pull/4810))
- Cow: always process KvMods to add OldData to mods when building StateDeltas ([#4804](https://github.com/algorand/go-algorand/pull/4804))
- Daemon: pool error messages and old txn expiration ([#4755](https://github.com/algorand/go-algorand/pull/4755))
- Goal: Change asset commands to use AccountAssetInformation ([#4758](https://github.com/algorand/go-algorand/pull/4758))
- Tests: Fix resolver test endpoint ([#4784](https://github.com/algorand/go-algorand/pull/4784))
- Tests: Fix types in assertions and change to using libgoal client when getting `PendingTransaction` information ([#4754](https://github.com/algorand/go-algorand/pull/4754))
- Tests: disable TestWebsocketNetworkTelemetryTCP on CI ([#4827](https://github.com/algorand/go-algorand/pull/4827))
- Txhandler: service does not restart after node catching up ([#4809](https://github.com/algorand/go-algorand/pull/4809))
- Txsyncer: service does not start after node catching up ([#4768](https://github.com/algorand/go-algorand/pull/4768))

## Activations (previously in vFuture)

- AVM: Switch opcode ([#4458](https://github.com/algorand/go-algorand/pull/4458))

## Additional Resources

- [Algorand Forum](https://forum.algorand.co)
- [Developer Documentation](https://developer.algorand.org)

## How to Update Signing Key

Debian/Ubuntu

```auto
curl -o - https://releases.algorand.com/key.pub | sudo tee /etc/apt/trusted.gpg.d/algorand.asc

```

RHEL/RPM

```auto
curl -O https://releases.algorand.com/rpm/rpm_algorand.pub
sudo rpmkeys --import rpm_algorand.pub

```

## Additional Resources

- [Algorand Forum](https://forum.algorand.co)
- [Developer Documentation](https://developer.algorand.org)

To update your current version, run the following goal command: `./update.sh -c stable -i -d <data-directory> -n` If you haven’t already done so, we also advise setting up a CRON job to automatically update your algorand networks. If you haven’t done this yet, you can follow the instructions here: [Install a node - Algorand Developer Portal](https://developer.algorand.org/docs/run-a-node/setup/install/#updating-node)
