Node Common

sigilaris-node-commonsigilaris-core와 runtime-specific node implementation 사이에 놓인 shared node contract layer다. public surface는 cross-platform이며 org.sigilaris.node.gossip, org.sigilaris.node.gossip.tx, org.sigilaris.node.txpipeline 아래에 있다.

현재 Baseline

이 레이어의 목적은 gossip protocol contract와 shared runtime rule을 JVM 전용 transport/storage detail과 분리해 재사용 가능하게 유지하는 데 있다.

언제 직접 의존할까

아래가 필요하면 sigilaris-node-common에 직접 의존하면 된다.

Armeria transport, Typesafe config loading, SwayDB helper, HotStuff runtime assembly가 필요하면 Node JVM으로 올라가면 된다.

Transaction Pipeline Identity

TxPipelineIdentityStrategy[F]는 normalized request에서 하나의 TxPipelineIdentity를 계산한다. 결과는 durable canonicalPayloadHashpipelineId를 함께 담으며, admission은 replay 검사, record 생성, collision convergence, idempotency alias binding에 같은 결과를 재사용해야 한다.

TxPipelineIdentityStrategy.v1(identityScope)는 JVM과 Scala.js 모두에서 기존 bbgo.tx-pipeline.id.v1 preimage와 lowercase SHA-256 출력을 보존한다. JVM은 platform MessageDigest provider를 사용하고 Scala.js 구현은 같은 vector로 고정된다. waitFor는 제외하고 명시적 scope를 포함하며, pipeline id는 txp_ 뒤에 canonical payload hash를 붙여 만든다. Embedder는 custom strategy를 제공할 수 있지만 canonical hash는 normalized request와 identity scope에 대해 deterministic하고 collision-resistant해야 한다. Admission은 replay, alias binding, idempotency key 없는 convergence에서 동일 hash를 동일 canonical request의 증거로 취급한다. Pipeline id와 hash/id pair도 안정적으로 유지해야 한다. 운영 중 strategy 변경은 durable identity 의미를 바꾸므로 coordinated rollout과 data compatibility 계획이 필요하다.

현재 제한 사항

관련 페이지