애플리케이션 모듈

애플리케이션 모듈은 현재 sigilaris-core가 제공하는 path-independent 상태 모델이다. 이 모듈은 typed blueprint, path-bound mounted module, reducer contract, transaction envelope, store abstraction을 통해 애플리케이션 특화 블록체인 상태를 조합한다.

현재 표면

왜 필요한가

Sigilaris는 상태 변경 로직을 다음 두 단계로 나눈다.

이 분리 덕분에 같은 모듈 로직을 다른 배포 경로에 올리면서도 schema validation, prefix-free safety, provider projection을 컴파일 타임에 유지할 수 있다.

컴파일 타임 빌딩 블록

현재 Blueprint Wiring

import cats.data.{EitherT, Kleisli}
import cats.effect.IO
import org.sigilaris.core.application.feature.accounts.module.AccountsBP
import org.sigilaris.core.application.feature.group.module.GroupsBP
import org.sigilaris.core.application.module.provider.TablesProvider
import org.sigilaris.core.application.module.runtime.StateModule
import org.sigilaris.core.merkle.{MerkleTrie, MerkleTrieNode}

given MerkleTrie.NodeStore[IO] = Kleisli: (_: MerkleTrieNode.MerkleHash) =>
  EitherT.rightT[IO, String](None)

val accountsModule =
  StateModule.mount[("app", "accounts")](AccountsBP[IO])
val accountsProvider = TablesProvider.fromModule(accountsModule)
val groupsModule =
  StateModule.mount[("app", "groups")](GroupsBP[IO](accountsProvider))

현재 저장소의 integration/scheduling test도 이 방식의 mounted-module wiring을 사용한다. assembly layer는 이 primitive 위에 얇은 DSL을 더하는 것이지, application module을 대체하지 않는다.

현재 Baseline

관련 페이지