> loading_
# Vetiver 9.0.0 Upgrade Walkthrough for Node Operators & Developers
# ===================================================================
# STEP 1: Check your current RSKj node version
# Before anything else, confirm what you're running.
# SSH into your node and run:
java -cp rskj-core.jar co.rsk.Start --version
# Expected output (pre-upgrade): something < 9.0.0
# If you're already on 9.0.0, you're good — skip to Step 4.
# STEP 2: Download and install Vetiver 9.0.0
# Pull the latest release from the official GitHub repository.
# Always verify checksums to ensure binary integrity.
wget https://github.com/rsksmart/rskj/releases/download/VETIVER-9.0.0/rskj-core-9.0.0-VETIVER-all.jar
sha256sum rskj-core-9.0.0-VETIVER-all.jar
# Compare the output against the checksum published on the official release page.
# DO NOT skip this step — running a tampered binary on a consensus node is catastrophic.
# STEP 3: Stop your current node, swap the JAR, and restart
# Gracefully shut down to avoid database corruption.
sudo systemctl stop rsk # or however you manage the rskj process
cp rskj-core-9.0.0-VETIVER-all.jar /opt/rsk/rskj-core.jar # adjust path to your setup
sudo systemctl start rsk
# Monitor logs to confirm the node syncs correctly on the new version:
tail -f /var/log/rsk/rsk.log | grep -i 'block'
# You should see blocks advancing. Watch for any ERROR-level messages.
# STEP 4: Audit your dApp's JSON-RPC calls against the new defaults
# Vetiver 9.0.0 changes several JSON-RPC API default values.
# If your frontend or backend relies on implicit defaults, things may break.
# Example: Test eth_call behavior with explicit vs. default block parameter
curl -X POST http://localhost:4444 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_call",
"params": [{
"to": "0xYOUR_CONTRACT_ADDRESS",
"data": "0xSOME_FUNCTION_SELECTOR"
}],
"id": 1
}'
# NOTE: Previously, omitting the block parameter might have defaulted to "latest".
# Verify this still holds in 9.0.0 — if not, explicitly pass "latest" as the second param.
# STEP 5: Validate peg-out cost estimation improvements
# If your dApp facilitates BTC peg-outs, test the new estimation on Testnet first.
# The Testnet activation block is 7,604,200 — confirm it has already passed:
curl -X POST https://public-node.testnet.rsk.co \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
# Convert the hex result to decimal and confirm it's > 7,604,200.
# STEP 6: (Forward-looking) Start exploring Account Abstraction patterns
# While full AA isn't live yet, you can begin prototyping ERC-4337-style
# smart contract wallets that will leverage the protocol-level support
# landing in a future upgrade.
#
# Skeleton: deploy a minimal smart contract wallet on RSK Testnet
# that validates UserOperation-like structs:
# // SPDX-License-Identifier: MIT
# pragma solidity ^0.8.24;
#
# contract SimpleAccountAbstraction {
# address public owner;
#
# constructor(address _owner) {
# owner = _owner;
# }
#
# function validateOp(bytes calldata signature, bytes32 opHash) external view returns (bool) {
# // Recover signer from signature and compare to owner
# // This is a stub — real implementation needs EIP-712 typed signing
# return true;
# }
#
# function execute(address dest, uint256 value, bytes calldata data) external {
# require(msg.sender == owner, "not authorized");
# (bool success,) = dest.call{value: value}(data);
# require(success, "execution failed");
# }
#
# receive() external payable {}
# }
# Deploy this on RSK Testnet using Hardhat or Foundry with the RSK Testnet RPC:
# https://public-node.testnet.rsk.co
# Chain ID: 31
# KEY DEADLINES:
# - Testnet activation: block 7,604,200 (may have already passed)
# - Mainnet activation: block 8,804,200 (MANDATORY — upgrade before this block)
# - If you're running infrastructure, upgrade NOW. Don't wait for activation day.