Node v1.0.0 release notes
For the complete documentation index, see llms.txt
- Version: v1.0.0
- Date: May 20, 2026
- Environment: All public networks at time of release
Docker images
docker pull midnightntwrk/midnight-node:1.0.0
docker pull midnightntwrk/midnight-node-toolkit:1.0.0
High-level summary
Node v1.0.0은 메인넷 GA 릴리스입니다. spec_version을 1_000_000으로, transaction_version을 3으로 올립니다. 런타임은 더 이상 쓰지 않는 SignedExtension을 대체해 TransactionExtension을 채택하고, throttle pallet을 더 엄격하게 조이며, Cardano-to-Midnight 브리지를 위한 Midnight 측 핸들러 훅을 포함합니다. 브리지 자체는 이번 릴리스에서 활성화되지 않으며, 이 훅은 사전 준비용 배관일 뿐입니다. 런타임은 측정 기반 벤치마크 가중치로도 전환됩니다.
노드는 polkadot-stable2603 Substrate SDK에 정렬되고, OpenRPC v1.4 스펙을 제공하는 자기 기술형 rpc.discover 엔드포인트를 추가하며, midnight-ledger 8.1.0과 함께 감사에서 도출된 여러 보안 강화를 반영합니다. 이제 toolkit은 독립적으로 버전을 관리하는 이미지로 배포되며, 트랜잭션 생성, 캐싱, 관측성 관련 기능이 대폭 추가되었습니다.
이번 릴리스에는 런타임 업그레이드가 필요합니다. polkadot.js나 subxt를 사용하는 SDK 소비자에게는 호환성 문제가 없습니다. 새로 추가된 AuthorizeCall과 WeightReclaim 확장은 크기가 0이어서 인코딩된 트랜잭션 바이트가 바뀌지 않습니다. 서명 해시에 섞여 들어가는 암묵적 transaction_version만 달라지며, 라이브 서명자는 서명할 때마다 이 값을 체인 상태에서 가져옵니다. 유일하게 실제로 깨지는 경우는 업그레이드 경계를 넘어 보관된 사전 서명 extrinsic인데, 이는 spec_version이 올라갈 때면 언제나 마찬가지입니다.
Audience
이 릴리스 노트는 다음 사용자에게 해당됩니다.
- Node operators (all networks): 필수 업그레이드입니다. 바이너리를 교체한 뒤 런타임 업그레이드를 제출하세요. 이제 부팅 시 검증되는 chainspec의
networkId를 다시 확인하세요. - DApp developers and SDK consumers: 라이브 서명에는 별도 조치가 필요 없습니다. polkadot.js와 subxt는 서명할 때마다
transaction_version과spec_version을 체인 상태에서 가져오며, 새로 추가된 두TransactionExtension항목은 크기가 0이어서 인코딩된 트랜잭션 바이트가 바뀌지 않습니다. 업그레이드 경계를 넘어 보관된 사전 서명 extrinsic은 다시 서명해야 합니다. 스펙으로부터 클라이언트를 생성한다면rpc.discover를 사용하세요. - Toolkit users and load-test operators: 필수 업그레이드입니다. 이제 toolkit은 독립적으로 버전을 관리하며, 새로운 구조적 로깅 스택과 함께
show-block,batch-single-tx서브커맨드, 시드별 캐싱을 제공합니다. - Governance signers:
motion_close에 새proposal_weight_bound파라미터가 필요합니다. toolkit의runtime-upgrade와update-ledger-parameters커맨드는 긴 형식의--council-members와--technical-committee-members플래그를 받습니다. - Cardano bridge consumers: Cardano-to-Midnight 브리지는 1.0.0에서 활성화되지 않습니다. 핸들러 훅이 런타임에 포함되어 있어 on-chain 형태에 맞춰 개발할 수 있지만, 이후 릴리스에서 브리지가 켜지기 전까지는 어떤 전송도 흐르지 않습니다.
What changed (Summary of updates)
아래 업데이트는 이번 릴리스의 주요 변경 사항을 영역별로 정리한 것입니다.
Runtime
SignedExtension에서TransactionExtension으로 전환하면서 크기가 0인AuthorizeCall과WeightReclaim확장을 추가하고transaction_version을 2에서 3으로 올렸습니다.- throttle pallet에 계정별 트랜잭션 개수 제한(
MaxTxs)과AccountUsage스토리지 마이그레이션을 추가했습니다. motion_close에 필수proposal_weight_bound파라미터가 추가되고, operational dispatch 클래스로 승격되었습니다.- FRAME 및 로컬 pallet 전반에서 기본 가중치를 측정 기반 벤치마크 가중치로 교체했습니다.
- midnight pallet의 조기 블록 가중치 검사가 비용이 큰 ledger 검증이 실행되기 전에 과도하게 큰 트랜잭션을
ExhaustsResources로 거부합니다. - 노드, 런타임, relay, partner-chains를
polkadot-stable2603Substrate SDK에 정렬했습니다. - Cardano-to-Midnight 브리지 핸들러 훅을 포함했습니다. 이벤트, 각 전송에 담기는
McTxHash, 그리고 브리지 이벤트에 첨부되는 핸들러 반환값입니다. 사전 준비용일 뿐이며 브리지는 활성화되지 않습니다.
Node
midnight-ledger를 8.1.0으로 올려 storage-core 1.2.0의 증분 가비지 컬렉션과 함께 경쟁 상태, panic, 누수, lock 순서 관련 수정을 반영했습니다.- 새
rpc.discover엔드포인트가 JSON Schema 타입과 함께 16개의 커스텀 메서드와 52개의 Substrate 메서드를 다루는 OpenRPC v1.4 스펙을 제공합니다. networkId는 노드 부팅 시 genesis 상태에 대해 검증됩니다.- genesis 파일 로딩이 심볼릭 링크, 일반 파일이 아닌 파일, 10MB를 넘는 파일을 거부합니다. 필요한 경우 심볼릭 링크 지원을 복원하는 새
unsafe_allow_symlinks옵션(기본값 off)이 추가되었습니다. - Postgres 연결을 위한 새
ssl_root_cert설정 옵션이 추가되었습니다. - 데이터베이스 호스트, 포트, 이름이 오류 로그에서 마스킹됩니다. 전체 상세 정보는 debug 레벨에서 그대로 확인할 수 있습니다.
- cNIGHT observation 쿼리가 인메모리
multi_asset.id캐시와 거친 기본 키 범위 경계 덕분에 더 빨라졌습니다. 이 범위 경계는 Postgres가 join 전에 행을 미리 솎아내도록 합니다. - unclean shutdown 이후 발생하던 체인 상태 절단(truncation)을 수정했습니다.
Toolkit
- 이제 toolkit 이미지는
toolkit-X.Y.Z태그로 독립 버전 관리됩니다. - 새
show-block진단 커맨드와 파일 기반 캐시를 사용하는batch-single-tx대량 트랜잭션 생성 기능이 추가되었습니다. - 구조적 로깅이
--log-json,--verbose,--quiet플래그와 함께tracing_subscriber로 이전되었습니다. JSON 로그 포맷 변경은 로그 소비자에게 호환성을 깨는 변경입니다. - 배치 intent에서 다중 shielded 코인 입력, fallible 컨트랙트 호출, zswap 상태 체이닝을 지원합니다.
- subxt를 v0.44에서 v0.50으로 업그레이드했고, 감사에서 도출된 다수의 정확성·보안 수정을 반영했습니다.
New features
Cardano-to-Midnight bridge handler
런타임이 Cardano-to-Midnight 브리지의 Midnight 측 핸들러를 구현합니다. 브리지는 이벤트를 발생시키고, 각 전송은 McTxHash를 담으며, 핸들러는 브리지 이벤트에 첨부되는 값을 반환합니다. 이는 사전 준비용 배관으로, 이후 릴리스에서 브리지가 활성화되기 전까지는 어떤 전송도 흐르지 않습니다.
Self-describing JSON-RPC API (rpc.discover)
노드는 새 rpc.discover 엔드포인트를 통해 OpenRPC v1.4 스펙을 제공하며, JSON Schema 타입과 함께 16개의 커스텀 Midnight 메서드와 52개의 Substrate 메서드를 다룹니다. 이 스펙은 오프라인 클라이언트 생성을 위해 docs/openrpc.json으로 리포지토리에도 커밋되어 있습니다.
Throttle pallet: per-account transaction-count limit
throttle pallet에 계정별 트랜잭션 개수 제한 MaxTxs가 추가되며, 새 AccountUsage 항목을 위한 스토리지 마이그레이션이 함께 포함됩니다.
Diagnostic show-block toolkit command
toolkit은 새 show-block 서브커맨드로 진단을 위해 블록의 내용을 렌더링할 수 있습니다.
Bulk transaction generation
toolkit에 대량 트랜잭션 생성을 위한 batch-single-tx, 시드별로 키가 매겨지는 파일 기반 캐시, fetch의 --seeds 옵션이 추가되었습니다.
Per-SQL-query Prometheus timing
midnight 데이터 소스가 SQL 쿼리별 Prometheus 타이밍 지표를 노출하여, 운영자가 db-sync 쿼리 비용을 파악할 수 있습니다.
New features requiring configuration updates
- v0.22.5에서 이어진
--max-tx-gas-cost트랜잭션 풀 필터. ssl_root_certPostgres TLS 옵션.unsafe_allow_symlinks파일 로딩 옵션(기본값 off). 아래 known issue를 참고하세요.- 부팅 시
networkId검증. 업그레이드하기 전에 chainspec의networkId가 genesis 상태와 일치하는지 확인하세요.
Deprecations
SignedExtension과SignedExtra런타임 확장 타입 —TransactionExtension으로 대체되었습니다.- toolkit
structured_loggerJSON 로그 포맷 —tracing_subscriber로 대체되었습니다. maintain-contract의 위치 인자new_authority— 이름 있는 플래그로 대체되었습니다.*-hfledger feature 플래그와cfg(hardfork_test)테스트 설정.
Breaking changes or required actions
transaction_versionbumped to 3: 라이브 서명자는 버전 자료를 체인 상태에서 가져오므로 영향을 받지 않지만, 업그레이드 경계를 넘어 보관된 사전 서명 extrinsic은 다시 서명해야 합니다.- Cardano-to-Midnight bridge handler API changed: 이제 핸들러는 브리지 이벤트에 첨부되는 값을 반환하며, 각 전송은
McTxHash를 담습니다. motion_closesignature changed: governance 서명자는 새proposal_weight_bound파라미터를 제공해야 합니다.- Throttle pallet storage migration:
AccountUsage마이그레이션이 런타임 업그레이드의 일부로 실행됩니다. - Toolkit JSON log format changed: 기존
structured_logger출력을 파싱하던 로그 소비자는tracing_subscriber포맷에 맞춰 업데이트해야 합니다. - Toolkit image tag scheme changed: 이제 toolkit 이미지는
toolkit-X.Y.Z로 독립적으로 태깅됩니다.
Bug fixes and quality improvements
이번 릴리스의 많은 수정은 Least Authority의 2026년 1분기 노드 감사에서 비롯되었습니다. 사용자에게 가장 눈에 띄는 수정은 다음과 같습니다.
- Toolkit: zswap 상태를 인코딩할 때 nullifier를 nonce로 사용하던 문제를 수정했으며, nonce와 nullifier 구분을 다루는 회귀 테스트를 추가했습니다.
- Node: unclean shutdown 이후 발생하던 체인 상태 절단을, 데이터베이스 백엔드를 명시적으로 drop해 parity-db가 write-ahead log를 비우도록 하여 수정했습니다.
- Toolkit:
DustWallet이 연속 지출에서 이미 사용된 출력을 반환할 수 있던 문제를 수정했습니다. - Toolkit: 스펙에서 벗어나 있던 Dust 주소 포맷을 이제 스펙에 맞췄습니다.
- Toolkit: offer 생성 산술에서 조용히 발생하던 오버플로가 이제 명시적인
OfferBuildError를 반환하며, wallet seed 증가는 오버플로 시 명시적 오류를 반환합니다. - Toolkit: intent 파일 읽기를 64MB로 제한하고, parent-block-hash 폴백은 이제 암호학적으로 안전한 RNG를 사용합니다.
- Node: 알 수 없는 시스템 트랜잭션 유형을 조용히 수용하던 대신 이제 명시적 오류로 거부합니다.
- Node: genesis 로더가 기본적으로 더 이상 심볼릭 링크나 10MB를 넘는 파일을 수용하지 않습니다.
- Security:
rustls-webpki(RUSTSEC-2026-0049)와astral-tokio-tar(RUSTSEC-2026-0066) 권고를 반영했습니다.
Known issues
Config error: missing field unsafe_allow_symlinks
unsafe_allow_symlinks는 노드가 심볼릭 링크를 따르도록 지시하는 새 설정 값입니다. 이번 릴리스에서는 이 필드가 필수이므로, TOML 설정 파일 없이 실행하는 노드는 필드 누락 오류로 부팅에 실패합니다. 오류를 피하려면 값을 제공하세요. 예를 들어 UNSAFE_ALLOW_SYMLINKS=true입니다. 필드에 기본값을 부여한 v1.0.1에서 수정되었습니다.
Initial sync performance
genesis부터의 초기 동기화가 일부 운영자 하드웨어에서 느리며, 초당 약 0.2 블록이 관측되었습니다. 사용하는 네트워크에 큐레이션된 paritydb 스냅샷이 공개되어 있다면 이를 사용하고, 그렇지 않다면 최초 부트스트랩에 시간을 넉넉히 두세요. #1298에서 추적 중입니다.