Another exciting week of technical updates for Stacks 2.0 as the protocol continues to mature. For an in-depth description of the current testnet phase, check out this forum post from Diwaker Gupta, Blockstack PBC’s Head of Engineering.
In short, the testnet hit some road bumps last week and encountered reliability issues. Fixes required a handful of resets throughout the week, so we appreciate your patience as the issue was debugged.
Reminder: There are a multitude of bounties available for uncovering bugs in the codebase or building tools that help other developers. → Bounties
Here are highlights from the past week:
A monster, high-priority fix was applied to trie_ancestor_hash_bytes_cache usage in MARF. This PR corrects an error in the MARF storage that would lead to invalid states. Debugging was led by Aaron Blankstein (Blockstack PBC) and Jude Nelson (Stacks Foundation) — they discovered that the cache needed to be cleared whenever there is a change in the open block. → Full Post-Morten
Functionality was added that allows easier detection of MARF corruption. This PR adds a high-level testcase in which we confirm that it is possible to render a StacksChainState in an unusable state. It also adds another low-level tool to blockstack-core to replay a chainstate’s blocks and sortitions. → Github
The DevEx team has started monthly testing with developers never previously exposed to Blockstack in order to evaluate documentation and tutorials. Thanks to this feedback, numerous fixes were applied to reduce obstacles and improve experience. → Github
Additional features were added to the Explorer Sandbox. Logging in with Blockstack Connect is now available, Sandbox UI has been improved, and minor performance tweaks were pushed. → Github
Fixed an issue in stacks-transactions-js that caused the broadcastTransaction function to return transaction ID incorrectly formatted with quotes. → Github
A big shoutout to community member PSQ for his efforts identifying bugs, fixing typos, and cleaning up repositories. This week there was a fantastic discussion around bad nonce output messages. → Github
Helpful debug symbols were added to our release profile, plus improvements to debug logging. → Github
A PR was merged to stacks-blockchain-api that requires an account property in order to check account balance. → Github
DevEx extraordinaire Alex Graebe did his Sidecar chores this week and added improved docs for core node, address, and search endpoints, better document request and response fields, and a “Run in Postman” button. → Github
ICYMI - The sidecar repository has been renamed to stacks-blockchain-api for better recognizability. → Github
A PR was merged that added the literal type pending to MempoolTransactions, facilitating union types. → Github
Again, a huge thank you to everyone experimenting with the testnet! The MARF bug this week is a perfect example of why your efforts are so valuable — this bug was impossible to reproduce locally or in any other environment, only manifesting when someone was mining invalid blocks and a specific sequence of events was triggered.
Hey there, Blockstackers. Another week of Stacks 2.0 testnet means a whole new set of development updates as we work towards Proof-of-Transfer, Stacking, and eventually a Stacks 2.0 mainnet launch!
In general, the team continues to be heads down with PoX development.
Resources:
new : A public tracker has been set up so you can easily follow stacks-blockchain progress on the upcoming phase (Krypton) of the testnet
Bounties are still available and we’re paying faster than ever - take a look!
Here are the most significant updates from the past week:
A PR was merged ensuring that the parent burn header hash is used to confirm that the latest burn block (seen by a miner when the block commit was produced) is the parent of the sortition in which that block won. → Github
This also fixed a regression problem for neon_node.rs in the next branch and alleviated a bug that was causing particular tests to time out due to a regression in the way a block’s parent’s header is loaded. → Github
Community member PSQ was the lead contributor to an updated implementation of withdraw-reward. He identified that it would be more efficient to directly credit miners without an additional transaction. → Github
When connecting peers using NAT, the “Confirm IP Address” step of the public IP-learning protocol was removed. Now, the IP-learning protocol just asks one of the initial seed nodes given to the peer DB for the peer IP address. → Github
A PR was merged that makes sure that all DB commits to the sortition DB and Stacks DB first commit their MARF-indexed values, and then commit their MARF tries. It removes a race condition where an indexed commit was superseding the full transaction commit, and was the root-cause of at least one observed thread of panic on the testnet. → Github
We are systemically changing the way we index Stacks blocks in preparation of Proof of Transfer. A PR was merged that begins the chainstate refactor for the transition. In doing so, Stacks blocks are unique to their PoX fork. This PR will not be compatible with the current Argon testnet.→ Github
Various bug report templates were added to the stacks-transactions-js repo to allow for more formalized and categorized bug reporting. → Github
A PR has been merged that enables the construction of sponsored transactions where a second “sponsor” signer can pay the fees of a transaction signed by the origin. → Github
The stacks-blockchain-api has also been updated to enable sponsored transactions. → Github
A bug was fixed where an address’ STX balance value was not taking fees into account. Also, a new API for STX-only wallets which doesn’t perform queries on FTs/NFTs was added. → Github
A GH Action workflow was added to the stacks-blockchain-api repo which automates linting, testing, build, release & semantic versioning. → Github
A slew of updates have been applied to the Blockstack docs. In the pipeline is a new URL scheme, major image consolidation, retitling of pages, and helpful formatting fixes. → Github
In case you missed it: In the stacks-blockchain repo, we’re starting to use the pattern of merging any significant upgrades in the next branch instead of the master branch. The intention is that the next branch will be deployed on the next testnet reset, whereas whatever is in master is safe to run against what’s currently live on the testnet.
Proof-of-Transfer is currently the primary focus for implementation on the Stacks 2.0 Testnet. Feature updates and bug fixes are pouring in thanks to contributions from the community.
Check out the highest priority updates from the past week:
In addition to general documentation design overhaul, a Stacks 2.0 testnet status checker has been added above the navigation bar on various related documentation pages to assist with monitoring downtime. → Github
A status checker is also in the works for the testnet explorer. → Github
A PR was merged that allows more parameters to be configured via configuration file, and better default download_interval for mining on testnet. This should alleviate issues some users were encountering with bitcoin-test failure, and greatly increase ease of spinning up a miner and downloading blocks. → Github
An update was merged to stacks-blockchain that exposes tx-sender and contract-caller to bare code in smart contracts. Fixes an issue where they were not available during contract initialization. → Github
Multi-sig transaction support is in the works for stacks-transactions-js after hash modes are implemented and authentication clearing is verified. → Github
Support for unsigned transactions is also in the works. This should add compatibility for certain hardware wallets such as Ledger that sign transactions while keeping the private key on the device. → Github
A pull request is in review to bring native string-ascii and string-utf8 types to Clarity. →Github
Call for community feedback: The implementation of Proof-of-Transfer is on its way. We want to hear from developers what elements should exposed through the API, and what features should be added to the explorer. → Github
Resources:
A public tracker has been set up so you can easily follow stacks-blockchain progress on the upcoming phase (Krypton) of the testnet.
The first round of bug bounty payments will be announced soon and bounties are still available - take a look!
One last reminder: In the stacks-blockchain repo, we’re starting to use the pattern of merging any significant upgrades in the next branch instead of the master branch. The intention is that the next branch will be deployed on the next testnet reset, whereas whatever is in master is safe to run against what’s currently live on the testnet.
There was a wide-spread outage of PBC infrastructure on Friday that led to many services, including testnet, being unavailable. This was followed by additional instability over the weekend, culminating in another reset on Sunday.
If you have any questions on the updates included in this email, or on PoX, STX Mining, or the Stacks 2.0 testnet, please reach out to Xan at [email protected].
What do autumn and the Krypton testnet phase have in common? They’re both right around the corner! Everyone has been in heads-down development mode and the testnet implementation of Proof-of-Transfer is now on the horizon. Learn more about the PoX consensus mechanism straight from Blockstack Co-Founder, Muneeb Ali, this weekend at the FuturePROOF Summit.
Technical highlights:
A fix was applied that solves p2p handle deadlock issues on the testnet. Improvements were made to PeerRequest commands. → Github
A PR was merged that integrated the ChainsCoordinator with the bitcoin indexer, network relayer, and run_loop::neon implementation. This implementation constructs a set of singleton communication channels for signaling to the coordinator. → Github
Bug fixes were applied that enables an alternative implementation of array buffers. → Github
RPC Websocket improvements such as event streams for specific addresses or transactions. → Github
Documentation update:
The Blockstack documentation pages have been completely overhauled and redesigned!
Overview of documentation design updates. → Github
Converts the docs site from using jekyll to using next.js and mdx. This gives us the ability to write standard markdown, but include react components, and ultimately render it with all of our standing UI components found within @blockstack/ui.
MDX gives us the ability to write JSX (similar in nature to liquid, which jekyll used as a templating language) directly in our markdown.
Also integrated the Remark preprocessor. It allows specialization and customization of text, and automatic combination of many markdown documents into one.
A multitude of design, UX, and content upgrades. For instance: a brand new overview page for the docs and a dark-mode switcher!
The ability to search has been added to the docs, allowing easy querying for specific items. → Github
Improved references for better automation and readability. → Github
A fix was applied to the status indicator component of the docs, allowing for quick monitoring of network health. → Github
For the docs, the shiki syntax highlighter has been implemented for more structured & visual code representation. → Github
Image management and formatting in the docs has been greatly streamlined using imgix. → Github
Revamp of docs URL structures to improve SEO and folder structure. → Github
Resources:
A public tracker has been set up so you can easily follow stacks-blockchain progress on the upcoming phase (Krypton) of the testnet.
Bug Bounties are still available, paying out $BTC for discovering vulnerabilities.
One last reminder: In the stacks-blockchain repo, we’re starting to use the pattern of merging any significant upgrades in the next branch instead of the master branch. The intention is that the next branch will be deployed on the next testnet reset, whereas whatever is in master is safe to run against what’s currently live on the testnet.
A big congratulations goes out to the recipients of the first round of Stacks 2.0 Testnet Bug Bounty payments! Community rockstars Friedger Müffke and Pascal Belloncle both made significant contributions to the Blockstack Github repositories, and always inspire educational conversation surrounding issues. Pascal was able to uncover two major mining related bugs, while Friedger knocked out three minor bugs related to Clarity and stacks-transactions-js. Don’t forget that the bug bounties are still available and this $BTC is just begging to be paid out!
3 Months into Argon
This week marks 3 months into the Argon phase of the Stacks 2.0 Testnet! After a jam-packed weekend full of awesome talks & workshops at FuturePROOF, we’re back to the grindstone. Pull requests for the Proof-of-Transfer implementation are starting to trickle in, and the transition from the Argon phase to Krypton is just weeks away.
Take a look at the most significant technical updates from the last week:
Multi-signature transaction support was added to stacks-transactions-js! The same PR introduces the ability to construct transactions and sign them later as a separate step. → Github
Changes are being iterated on for the launch on Xenon, the testnet phase after Krypton. Identifying requirements like a testnet bitcoinid or a testnet $BTC faucet. → Github
ELI5: We’re starting to work on Stacks 2.0 integration with Bitcoin’s primary testnet (Argon and Krypton both use a bitcoin regtest setup). This is an important step in building confidence in our ability to work with Bitcoin’s mainnet!
Rosetta implementation PRs are starting to trickle in, thanks to work by Tintash! → Github
A trait lookup fix was applied to stacks-blockchain that alleviates an issue where contract-of couldn’t be used with traits from function parameters in clarity within a let context. → Github
Proof-of-Transfer anchor block detection was implemented! This PR also included some test cases for the ChainsCoordinator that exercise the detection mechanism. → Github
A client library has been generated for stacks-blockchain-api. We use openapi-generator to generate a client library based off the openapi.yaml and json schema files. → Github
A PR to be merged soon for the API client library documentation. → Github
Support for passing traits as arguments in a contract call is being added to stacks-transactions-js → Github
Module import improvements & miscellaneous fixes were applied to stacks-transactions-js. This included a lodash update, eslint reconfiguration, a webpack UMD build fix, fetch error handling, and global scope pollution. → Github
A new blockstack.js release persists etags in the UserSession store so they don’t always need to be fetched when the page is loaded. → Github
Added two new Stacks API endpoints for block time to provide clients with a programmatic way to estimate how much time a transaction will take to complete. This will be used in the Explorer soon to improve UX. → Github
Just a heads up: Some important PRs are currently in-review for Clarity and PoX! Such as native string types in Clarity, PoX anchor block detection, PoX lockup and delegation, and more!
Resources:
Follow stacks-blockchain progress for the upcoming phase (Krypton) of the testnet on Github with the public tracker.
Note : We’ve bumped up the block interval from 30 seconds to 2 minutes (so the chain is producing bitcoin blocks slower than before). The reason being is Bitcoin mainnet has 10 minute block intervals, so we gradually want to increase our block intervals to simulate that environment.
A full description of the current Argon phase from the Blockstack forum.
It’s been another busy week in Stacks 2.0 Github repositories. Soon we’ll be saying goodbye to the Argon phase of the testnet, and hello to Krypton. More pull requests for Proof-of-Transfer & Stacking functionality are being merged every week thanks to hard work from community members. Keep your eyes peeled for a Krypton launch date soon!
Take a look at the most significant technical updates from the past week:
The stacks-blockchain Github workflow has been updated to build a docker image and release with new distributions. → Github
Required adjustments are beginning to be made for the transition to Krypton, and eventually Xenon, so that Stacks nodes can interact with the Bitcoin test network. → Github
A PR has been merged that introduces string-ascii & string-utf8 as types in Clarity. → Github
Support for these new String types has been added to stacks-transactions-js. → Github
Some of the core mechanisms of Proof-of-Transfer are starting to be implemented, such as sortition evaluation using recipients selected from the reward set. → Github
A PR implementing the Proof-of-Transfer STX lock-up and PoX delegation logic is in review. → Github
The instructions for installing RUST on a machine have been simplified. Before, it was up to the user to select the default installation. Community member Jason Schrader identified that the default installation can be designated within the single-line installation command. → Github
Documentation information has been updated pertaining to the API Client Library. This should help developers using the JS WebSocket. → Github
A developer preview of the Stacks Blockchain API is now available! → Forum
A Rosetta implementation is underway (two PRs merged and two more in-progress) thanks to fantastic work from community members. → Github
A script was to stacks-transactions-js added that allows for a self-contained Docker image which will start a Stacks 2.0 blockchain and API testnet. → Github
Documentation has been reworked with an OpenAPI section for mempool transactions. → Github
A new version of blockstack.js has been released. → Github
Added a Stacks API endpoint for block time to help clients estimate how long it will take for a transaction to complete. → Github
Resources:
Follow stacks-blockchain progress for the upcoming phase (Krypton) of the testnet on Github with the public tracker.
September 17, 2020 Closing in on full Proof-of-Transfer
Welcome back, Blockstackers. After a Labor Day hiatus, Stacks 2.0 updates return with a heaping pile of merged PRs and feature additions. Engineering (with the help of some superstar community members) is hard at work putting the finishing touches on the Krypton phase of testnet, including full Proof-of-Transfer.
Here were the most significant development updates from the past week:
The Verifiable Random Function (VRF) is now allowed to reuse public keys, and will only register a key once in the node. → Github
Small change → HUGE IMPACT. This reduces BTC fees for STX miners by eliminating repeated VRF key registration transactions. Also improves mining behavior by eliminating the need to scan the burnchain for certain transactions. → Github
A square root function has been implemented, which fixes issues encountered with Clarity’s power function (pow) having undocumented restrictions on exponents. → Github
After a much iteration, stacks-blockchain has added support for trait lookup and passing traits as arguments in contract calls. → Github
We are transitioning the NPM scope of the explorer UI from @blockstack to @stacks. → Github
Fixed a bug where the standalone docker image was unexpectedly starting stacks-node twice. → Github
Improvements were made to the openapi schema, including adding response definitions and function argument parameters to read-only functions. → Github
A readOnlyFunctionArgs call has been added to the stacks-blockchain-api. This should alleviate problems where developers desired functionArgs as a property of CallReadOnlyFunctionRequest. → Github
Pagination options were added to the client libraries → Github
The rest of the necessary data api endpoints have been added for the implementation of Rosetta. → Github
The option to start the self-contained image in mocknet mode has been added to the stacks-blockchain-api. → Github
Updated the jsonrc package to fix a critical dependency error. → Github
A lot of substantial documentation upgrades are happening in anticipation of Krypton.
Transaction signing docs have been have been polished for testnet release. → Github
Page naming convention was reorganized and standardized. → Github
A breaking change was fixed in mdx-remote that corrects highlighting across external markdown files. → Github
The project now uses new packages, @stacks/ui and @stacks/ui-core to enable the use of emotion & theme-ui in place of styled-components and styled-system. → Github
Bugs were fixed in the claim-from-faucet function cause by map-set and err arguments. → Github
Resources:
Follow stacks-blockchain progress for the upcoming phase (Krypton) of the testnet on Github with the public tracker.
Good afternoon, Blockstackers! It felt like Christmas in September last week when the Krypton phase of the Stacks 2.0 testnet officially went live! This was a massive milestone on the way toward Mainnet, and we’re looking forward to community members testing out all the new features. PoX Mining and Stacking are open for business, and documentation has been updated so you can dive into experimentation.
Here are the most substantial technical developments from the past week:
stacks-blockchain
Updates to the networking stack for Proof-of-Transfer: This PR implemented many of the features needed for Krypton, including a ground-up rewrite of the block inventory synchronization logic that takes into account what the local and remote nodes know about the states of PoX anchor blocks. → Github
In the first phase, a node incrementally builds a view of the remote node’s knowledge of PoX anchor blocks.
Once a local node has a view of a remote node’s PoX state, it will incrementally build up a view of the remote node’s present Stacks blocks and microblocks.
Adjustments to the Krypton deployment. Determined Krypton PoX parameters such as Reward cycle length, threshold, and prepare length. → Github
Numerous bug fixes were applied for Krypton. → Github
chainstate.get_reward_addresses needed to take the current burnchain block height as an additional argument.
The default constants in the pox.clar change depending on mainnet flag.
The reward set is sorted by address.
Developer Experience adjustments for Krypton. → Github
Mechanism to let the sidecar know that a transaction stacked some STX.
Ability to discover PoX parameters.
Ability to confirm that a user is eligible for PoX.
Includes a noop handler for STXLockEvent. → Github
Fixed the neighbor walk logic so it doesn’t get stuck in a GetHandshakesBegin state forever if it tries to connect to an unresponsive neighbor. → Github
Thanks whoabuddy on Github, the ‘neighbors failed to connect’ messages have been changed from info to debug. → Github
Fixed event ID resource leak for connecting sockets that time out. This should cause the follower node to not freeze up after a few hours. → Github
Another PR adds a compile-enabled feature for storing to a table a copy of the transaction ID and transaction data whenever a transaction is processed. This lets devs figure out whether or not a particular TXID was processed, and if so, what the result of it was. → Github
stacks-transactions-js
The multisig feature has now been documented in the README. → Github
docs
Some quick fixes were applied, including low-hanging fruit structural changes. → Github
User-facing docs for Stacks Wallet Trezor support were added. → Github
Tutorials and guides have been updated for Krypton PoX mining. → Github
Updated rpc references and added a missing redirect. → Github
stacks-blockchain-api
Rosetta construction/preprocess endpoint implementation will be used to construct metadata to build a transaction except for nonce. → Github
Implemented a Prometheus metrics endpoint with the same libraries being used in the new Explorer. → Github
This endpoint can be accessed at the root of port 9153.
Testnet faucet generosity has been adjusted to give users a larger amount of testnet STX upon request. Required for Stacking. → Github
Updating all hardcoded records to use CNAME’d records. → Github
Added version 2 PoX endpoint proxy and documentation. → Github
Added a follower-mode VScode debugging configuration. → Github
Implementation of rosetta construction/metadata & hash endpoints. → Github
Resources:
Follow stacks-blockchain progress for the upcoming phase (Xenon) of the testnet on Github with the public tracker.
Hello out there all you blockchain believers! The Krypton phase of Stacks 2.0 has been live for three weeks now and users are beginning to sink their teeth into new features like Proof-of-Transfer Mining and Stacking. A whole new slew of upgrades came in this week, including delegated/pooled Stacking features just as this post on the Stacking Earnings Model dropped.
Here’s a detailed look at the most substantial technical updates from the past week:
stacks-blockchain (v23.0.0.4-krypton)
This PR implements block download rate tracking by making it so the burnchain-processing loop in the testnet node will:
Fetch burnchain blocks and process sortitions in batches with length no greater than the reward cycle length.
Monitor the Stacks staging DB for blocks that are imminently processable while the P2P thread downloads blocks and the relayer thread processes them. → Github
This PR adds delegation and pooling support to the pox contract. It does so by adding four public methods:
delegate-stx, revoke-delegate-stx, delegator-stack-stx, and stack-aggregation-commit.
Additionally, other modifications were made to PoX contract behavior such as making reward addresses reusable. → Github
A fix has been applied that alleviates strange miner behavior. A node can now accept BlocksData messages from inbound authenticated neighbors, as well as outbound. → Github
Copyright assignment for the stacks-blockchain repository has transitioned to the Stacks Foundation! → Github
stacks-transactions-js (v0.4.1)
You can now query the blockchain for data map entries of a contract. This pull request adds the getMapEntry function which uses helper methods cvToHex and parseMapEntryResponse. → Github
A broken standalone docker image has been repaired. → Github
Added support for public keys in preprocess and metadata endpoint to accommodate Rosetta functionality. → Github
docs
Testnet participation workflow streamlined and instructions updated. → Github
A reference has been added to the stacks-gen repo, created by psq, which helps with generating keys needed for stacking and mining on testnet. → Github
A guide for Stacking on the Stacks 2.0 testnet has been made live! → Github
Instructions for the most recent wallet release (v3.1.0) were updated. → Github
Stacks Blockchain overview has been reworked to be comprehensible and consistent with other Blockstack messaging. → Github
Replaced the current link to the source code of AuthOptions from the connect repo to the ux repo. → Github
Also updated the optional flags in the properties table of AuthOptions.
Hacktoberfest
Blockstack will be offering additional Hacktoberfest prizing to encourage the Stacks Community to contribute to open source! In addition to the typical Hacktoberfest prizing (2020 edition tee or a tree planted on your behalf), eligible participants will receive custom Stacks branded swag.
Check out Blockstack’s Hacktoberfest repos and start hacking now.
Happy Stacks-o-ween, everyone! Below, you’ll find a full candy bag brimming with the most significant technical updates from the past week.
Don’t miss: our friends at Daemon Technologies launched a testnet Mining Competition on Monday! Check it out for your chance to get some hands-on experience with the Proof-of-Transfer consensus mechanism; mine the most testnet blocks and you could take home a cool $1k.
This PR adds a rudimentary toolset for testing multiple Stacks nodes and alleviates bugs related to mining and transaction relaying. → Github
A Dockerfile has been added that can run net-test scripts, as well as add more 500 logging to the faucet, and a fallbackfee option to bitcoind. → Github
OUTPUTS_PER_COMMIT has been changed to 2, effectively allowing two reward addresses per block. This requires that all commitments, regardless of whether or not they were burn commitments, have OUTPUTS_PER_COMMIT outputs. → Github
Burn block info has been added to events. This PR adds burn_block_hash, burn_block_height, and miner_txid to the block events sent out via the event_dispatcher. → Github
This will enable viewing of relevant Bitcoin info in the Explorer soon!
A fix has been applied to the panic in tuple_to_pox_addr. → Github
With the number of PoX outputs increasing, the default burn cap has been increased to clear the dust UTXO limit. → Github
Stacks 1.0 to Stacks 2.0 Transition: This PR adds a hook to the end of each block, which watches the .miner namespace. Once 20 name registrations is reached, it records the block height in the db. It also monitors when the block threshold is breached and outputs a log entry. → Github
This PR does an initial port of our logging macros to slog. → Github
Important upgrade allowing node operators to enable structured logging (e.g. JSON logging). This is critical for anyone potentially running a stacks-node in a robust production environment, making it much easier to log ingestion in systems such as elasticsearch.
docs
Instructions have been added for running a testnet node in docker. → Github
Minor fixes applied to transaction signing sample code and content. → Github
NEW: stacks.js
Version:v1.0.3
We released the public beta of Stacks.js - a reorganization of libraries in the Stacks ecosystem → Forum
If you have an existing app, read the migration guide → Github
Previous updates for blockstack.js, blockstack-cli and stacks-transactions-js will be covered in this project going forward.
Blockstack will be offering additional Hacktoberfest prizing to encourage the Stacks Community to contribute to open source! In addition to the typical Hacktoberfest prizing (2020-edition tee or a tree planted on your behalf), eligible participants will receive custom Stacks branded swag.
To sweeten the deal for Hacktoberfest, we’ll be awarding a $250 grand prize to the hacker who submits the most valid pull requests to Blockstack’s Hacktoberfest repos (on top of the required 4 PRs).
Our team is gearing up for an epic sprint we’re dubbing “Docs Week”. It will be an ecosystem wide push to clean up, improve, and expand upon all of Blockstack’s documentation. That way when mainnet rolls around, all of the resources for docs and users alike will be current, comprehensive, and bug-free. We really want the community to get involved in this, as you all are the primary consumers of the docs! Stay tuned to the dedicated Docs Week Github project board to find interesting documentation issues to work on, and you could win cash prizes.
Happy November, Stacks Pack! Hope you all enjoyed Stacks-o-ween last Friday. The day was jam-packed with awesome sessions like the October Town Hall, Docs Week Kickoff, Stacks Foundation Grants Demo Day, and a live Clarity demo from two Blockstack community members! The entire Stacks ecosystem is full steam ahead on the testnet, and sprinting towards the Mainnet finish line. Huge shoutout to all the passionate builders submitting bug bounties, participating in hackathons, or just hanging out in the Discord helping newcomers!
For a deeper dive on blockchain development, take a look at the most substantive technical updates from the past week:
stacks-blockchain
Version:v23.0.0.10-krypton
SLOG uses RUSTs debug-assertions by default, and was turning off debug logs during release builds. This PR re-enables debug logs in release builds. → Github
This PR adds a new command argument that takes takes a fast-dump file, and its consensus hash, then outputs a JSON file containing all account STX balances. Both vesting and liquid STX are included. → Github
This is a component of the work required to upgrade Stacks 1.0 to Stacks 2.0!
Work is being done on the ‘Sunsetting’ phase of the proof-of-transfer consensus mechanism proposed in SIP-007. → Github
This PR addresses several open problems in the block-relay and mining logic that make it difficult for NAT’ed miners to build on the longest chain tip. As a result of applying this PR, NAT’ed miners should have a much easier time detecting the latest chain tip and propagating blocks. → Github
A fix has been applied to the RBF that solves an error where the calculation was overpaying by a factor of 2048. → Github
stacks-blockchain-api
Version:v0.29.2
New bitcoin fields were added to the block API: burn_block_hash, burn_block_height, miner_txid. Additionally, the docker setup was changed to pull the stacks-node binary from the official docker hub images. → Github
This info will also be available on the new testnet explorer.
When running the faucet for Stacking, the /v2/pox endpoint is queried to ensure the minimum required STX amount for stacking is send → Github
A pull request template was configured for uniform documenting. → Github
stacks.js
Version:v1.0.0-beta.8
A PR is currently being drafted to add a package to make it easier to integrate stacking. → Github
Renamed Blockstack Connect to Stacks Connect and relocated under Stacks Org on NPM. → Github
Function showBlockstackConnect has been renamed to showConnect.
0x prefixes have been added to hex strings in transaction results. → Github
Browser extension instructions have been improved, and header & formatting has been clarified. → Github
Connect reference has been updated to the correct url. → Github
The original implementation of Connect’s UI was written in React. It has been rewritten using web components so if you are not using React, you don’t have to include it as a dependency. → Github
docs
Authentication and tutorial updates have been made to the new Stacks NPM packages. → Github
Links to blockstack.js reference docs throughout documentation have been updated to stacks.js. → Github
A Gitpod in-browser IDE has been added to the docs to allow for simple, compartmentalized experimentation without the need to setup a development environment. → Github
2 more days of Docs Week!
Docs Week is an ecosystem-wide effort to show the docs some undivided attention, and make our technical content as excellent as possible. → Github project board
Up for grabs are brand new ‘Ultimate Stacks Swag Kits’, with Stacks apparel and accessories valued at a whopping $150! There will be seven award categories, championing various personas we think will take the docs to the next level. For example, the “Visual Vanguard” will win a prize because they produced excellent visual aids or illustrations to accompany docs content.
Hey there, Stacks Pack! Another week, another tidal wave of technical updates from the Stacks 2.0 testnet. As we approach the final stretch before mainnet launch the community is laser-focused on bug squashing, appending features, and ensuring reliability. Docs Week brought with it a multitude of content upgrades that will undoubtedly improve new developer onboarding.
Last but not least, the HackStacks hackathon wraps up today so get those submissions in!
To get a deeper understanding of technical developments from the past week, check out the specific Github pull requests:
stacks-blockchain
Version:v23.0.0.11-krypton
This PR fixes a regression issue that didn’t quite calculate the new RBF relay fee correctly. → Github
Clarity (at-block) behavior fixed when mutations are pending. → Github
Tuple signatures have been corrected so developers can create tuples in Clarity. → Github
A public Helm chart has been implemented for the community to easily deploy a stacks node to a local or remote Kubernetes cluster. → Github
This PR implements stacking events for unlocks and rewards by adding a new endpoint for the event dispatcher: POST /new_burn_block. → Github
The Stacks Blockchain API was extended to fully support Coinbase’s Rosetta standard! → Blog Post
Various changes were needed in the Rosetta API for construction. → Github
The design chapter form api spec has been removed, and the design details will now be explained in the API guide inside the docs. → Github
As a developer, you don’t want to be required to relearn an API for different clients (RPC vs js lib). This PR renames the block hash parameter in the RPC API from block_hash to hash. → Github
ux
App instructions have been simplified. Commands have been consolidated, which was needed for both development and the extension, with clone and directory navigation inclusions. → Github
Additional url validation is now implemented. → Github
Updated dependencies for React and Blockstack to fix issues where it was requesting legacy versions. → Github
docs
Docs Week has been a massive success (30+ active pull requests and counting!) and we are seeing the entire Stacks ecosystem band together to merge heaping piles of docs pull requests. A big thank you to everyone that has participated, and a reminder to everyone that you can always contribute to maintaining the docs! Take a look at some highlights we merged in just the last week:
Updated running-testnet-node.md to avoid confusion for beginners. → Github
Added a tutorial for the Stacks Blockchain API client. → Github
This PR updates the Todo app tutorial page and removes direct references to the Connect package in favor of the merged @stacks/auth package. The standalone Connect page has also been removed. → Github
The Clarity reference has been separated into four pages to improve readability. → Github
This PR cleans up the BNS content, making it applicable to BNS when Stacks 2.0 launches. → Github
Added documentation on different subcommands and configuration options available for the stacks-node binary. → Github
Stacks 2.0 To Reach Code Completion by December 15th, January 14th Launch
Thanks to the hard work of engineers at PBC, the Stacks Foundation, and community contributors, the Stacks 2.0 blockchain is on target to reach code completion by December 15th. After discussing with exchanges, launch partners, and potential miners we can now set a launch date of January 14th. This date is the recommendation by PBC after consultation with other entities; miners will ultimately decide exactly when and how the launch happens. Stay tuned for other significant news in the coming weeks and thank you for your support!
More good news: To celebrate code completion and community momentum, the Stacks Foundation is putting up 1 million STX to be won in an upcoming mining challenge hosted by Daemon Technologies. The mining challenge will follow code completion on Dec 15th.
Independent miners will be the ones to launch the network, so this will be a great way for prospective miners to learn the final system before that and to celebrate their key role in enabling the user-owned internet on Bitcoin.
Hi Friends! Time for your weekly Stacks Snack. We’ve got a downpour of updates this week as we come off of a sensational Docs Week that exceeded all of our expectations! A big thank you goes out to every community member that helped tidy up the documentation, and made it even easier for newcomers to learn the tech and build on Stacks 2.0. We’re also starting to see some pull requests trickle in configuring the launch of mainnet!
Don’t forget there’s still time to get involved in the HackDeFi hackathon, and the deadline has even been extended to December 4th to give you time to finish up those rockstar DeFi projects.
For a more detailed overview of recent developments, check out the technical updates on Github from the past week:
Added event_index for ordering events (the dispatch matrix scrambles the event order).
Add locked_address field to stx_lock_event.
These will ultimately allow the Explorer & Wallet to show more stacking info.
Fixed issues (with miners reusing microblock public key hashes) by mixing the burn block height into the microblock private key rotation. → Github
This had been troublesome when upgrading the stacks-node software without a chain reset (so your node would have to catch up from other nodes on the network).
Added burn_block_height field to /new_burn_block event-dispatcher endpoint. → Github
This pull request adds a docker file to meet Rosetta’s requirements. It includes instructions on how to run rosetta-cli against it to test the implementation. → Github
Three Rosetta fixes: API_TAG in stx-rosetta, contract function args, and fees calculation. → Github
v2/info documentation maintenance and adding descriptions for the fields. → Github
Upgrade to es2020 from es2019, and nodejs v14 (LTS) from v13. Full native bigint support!
Fixed bug with rosetta endpoints not being included in openapi definition.
Stub response for the /new_burn_block event. Allows the sidecar to run with latest core-node. → Github
There is also a PR in flight that uses this to expose some really useful information. → Github
Updated the Miner STX reward event handling to fix an issue where the balance reported by the API did not match the balance reported by miner/follower. → Github
The client lib generation process was outputting tens of thousands of lines, making Github actions almost impossible to read and debug. Output has been drastically reduced. → Github
Contract names were previously required to be at least 5 chars long. This is not the case with the pox contract, and perhaps no longer the case at all in core. Either way, the restriction was unnecessary and lifted. → Github
Use a Blob for posting transactions instead of string.
Use a string as result type for posting transactions instead of void.
docs
This PR updates next.js to version 10, and removes our cool but ultimately flawed deploy script. This means we will now only rely on the vercel plugin until we can perhaps sort out the issues of deploying forked PRs. → Github
The stacks burn height has been added to the Stacking guide. → Github
Hello again, Stacks Family! A happy Thanksgiving week to all you US-based Stackers. We’re thankful for Satoshi Nakamoto realizing structural flaws in the legacy financial markets, and setting out to build a technology that ensures decentralization, privacy, and security.
It’s time to say goodbye to our beloved Krypton testnet phase, and get excited for the launch of Xenon very soon! This will be the final phase of the testnet before mainnet launch. The biggest change is that instead of using Bitcoin regtest nodes, Xenon will be integrated with the primary Bitcoin testnet. Whereas Regtest was a fully controlled environment (e.g. we could reset the BTC chain whenever the testnet reset), the main Bitcoin testnet will help us test how Stacks 2.0 will behave in a more dynamic, real-world environment where we don’t have as much control.
For more comprehensive understanding of recent developments, check out the specific Github changes from the past week:
stacks-blockchain
Version:v23.0.0.12-krypton
This PR is addressing a few issues that were blocking users from running a node on a Bitcoin Testnet network. → Github
Load dynamic cost functions from chainstate based on the voting contract. → Github
Added the property zonefile_hash to the names exported in chainstate.json. → Github
[Stacks v1 → v2 Upgrade] Moved the zonefile contents for on-chain names from the chainstate.json file and into a new file name_zonefiles.txt. Uses the same new-line delimitated format as the subdomain_zonefiles.txt file. → Github
[Stacks v1 → v2 Upgrade] We now export the chainstate file as csv rather than json, which is 18MB compared to 29MB. This is important because we are expecting to commit this file directly into git. → Github
explorer
Version:v1.0.3
A big PR is in the works, configuring the explorer with extra features for Stacks 2.0 mainnet launch. → Github
It implements and improves many aspects of the explorer:
A new homepage
Address pages
Transaction pages
Blocks page + block single pages.
It also adds the new branding and man design improvements, along with a completely re-thought sandbox experience that is now hooked up to Connect.
stacks-blockchain-api
Version:v0.33.0
Increased the faucet STX amount sent for Stacking by 20%. This fixes an issue where the min STX amount would increase by the time the faucet tx completed. → Github
Expose BTC reward events by adding three new endpoints under /v1/extended/burnchain which show BTC pox reward information. → Github
Fixed mempool transactions disappearing during re-orgs. → Github
This was a bug in the sidecar’s handling of mempool transactions. Transactions were not “re-inserted” into the mempool in the event that the block they were mined in became non-canonical.
Also increased logging for tx handling in db. → Github
It was necessary to wrap mempool transaction inserts in sql transactions. → Github
First Week of Xenon
Happy December to you all. We’ve got another jam packed week ahead of us as we plow towards mainnet code completion on December 15th. Last week we officially transitioned to the final Stacks 2.0 testnet phase: Xenon!
For a deeper dive on specific technical updates, take a look at the Github pull requests:
stacks-blockchain: v23.0.0.12-krypton
Fixed a circular reference error on nested function invocation → Github
Bumped MAXIMUM_MEMPOOL_TX_CHAINING to 25 and made it configurable. → Github
Hello again, Blockstack Brigade! In case you missed it, as of Tuesday, Stacks 2.0 is officially feature complete! This is an exciting milestone for Stacks 2.0, and signals that the final stretch is upon us. Over the next month, PBC, the Stacks Foundation, and the entire community will be tightening the screws and polishing up the stacks-blockchain to make sure it’s totally prepared for the big release. We’re already looking forward to seeing you at the launch event!
Also not to be missed, a brand new Stacks 2.0 Whitepaper came out Monday to provide an easy-to-understand overview of the network and ecosystem.
Last, a quick note for STX Miners: There is an important update related to Daemon Technologies’ Mine to 1 Million STX Challenge you should see on the forum.
For expanded details on all of the technical updates, click through the items below to view original Github issue:
stacks-blockchain: v24.0.0.0-xenon
This PR implements microblock fork-handling and basic mining. → Github
Refactors the chainstate storage and indexing logic for microblocks.
Updates the block inventory and download logic to use the new microblock indexing system.
Implements the PoisonMicroblock transaction variant.
It modifies the anchored block mining logic to detect microblock forks in the microblock stream it confirms.
Removes the miner payment cache, and removes coinbase sharing and smoothing.
Fixed the bug that NCC group discovered in the MARF proof verifier. → Github
Allowed a CostTracker to intercept the cost calculation of contract-call invocations when specific targets are used. → Github
Uses a Rust build script to compress the STX balance and vesting contents from chainstate.txt into deflate streams.
During the STX balance and vesting export, mapped the placeholder addresses to the known STX addresses. → Github
Implemented the proposed coinbase schedule and the pay-forward of missed sortitions scheme. → Github
The map function in Clarity is now variadic and allows functions that takes more than one argument, mapping them over a number of sequences matching their arity. → Github
Now we do not bypass read-only checks for writing operations. → Github
Added a new Github workflow to automate the change, commit, and PR creation of updating the chainstate and chainstate consensus files for the V1 → V2 migration. → Github
Introduced a merge function into Clarity. → Github
Cost Function Voting Contract has been implemented. → Github
Implemented the networking parts of Atlas along with a revisited BNS/SNS contract. → Github
chainstate.txt genesis data hashed in v2/info endpoint. → Github
This PR made next’s Xenon mode use Xe as the magic bytes for Bitcoin operations. → Github
Implemented auto-unlock vesting schedules for STX tokens. → Github
Implemented three conveniences for Clarity. → Github
let* - This is an iterative let, where binding definitions may use prior binding values in the same let.
element-at - Get the ith element from a sequence.
contains - Does the given sequence contain an entry that is-eq to the given item?
We changed a config variable name from mstx_balance to ustx_balance in tomls and readmes. → Github
Fourth Week of Xenon
Happy Holidays, Stackers! We’ve got a huge batch of technical updates under the tree this week. As of last week, code for the Stacks 2.0 mainnet is officially feature complete, and the next month will be devoted to testing, fixing bugs, improving performance, and writing documentation. The launch event in January is sure to be quite the celebration, so sign up here to make sure you don’t miss the party!
For a more descriptive overview of technical updates, examine the specific Github pull requests:
Refactored the runtime_cost function to take a Vec instead of a single u64, enabling Clarity cost functions to take multiple size input args. → Github
Added a read-only method that returns a price, given a namespace and a name (it previously required to pass the price function). → Github
Made the prepare phase proof-of-burn only. → Github
It tweaks PoxConstants so that reward_slots() is the difference between the reward cycle length and prepare phase length.
We’ve also shortened the prepare phase (from 240 to 100 blocks).
Added transaction fees to the miner’s block reward. → Github
Per SIP-001, each miner gets all of its anchored block’s transaction fees, as well as 40% of the microblocks it produces, as well as 60% of the microblocks it confirms.
This PR integrated the cost voting contract with the boot code and LimitedCostTracker. → Github
This PR addresses miner commitment issues by introducing a “burn parent modulus” to allow the stacks-node to detect when a commitment may be missed. → Github
This PR also updates the smoothing function to: min(last_burn, median).