DMRVN 노드가 내려받아 실행할 방법론 소스와 검증된 WASM 패키지입니다.
- 아래 빌드 목록에서 필요한 ID/version의
manifest.json,methodology.wasm을 받습니다. 기기 검증 방법론만device-policy.json도 받습니다. - 승인 Registry/Claim에 고정된
methodologyHash와 manifest를 비교하고, 모듈 bytes의 keccak256이wasmHash와 같은지 확인합니다. - manifest의 input schema와 ABI에 따라 실행하고 output schema로 결과를 해석합니다.
기존 패키지는 legacy ABI를 유지합니다. 신규 범용 방법론은 JSON_WASM_V2를 사용하며 Rust 툴체인은 wasm/json-abi/rust-toolchain.toml에 고정합니다. 신규 ABI는 memory, alloc(length), compute(inputPointer, inputLength), result_len(), dealloc(pointer, length)를 export하고 imports를 허용하지 않습니다. 입력·출력은 UTF-8 JSON 객체이며 manifest의 JSON Schema 2020-12로 검사합니다. 이 실행기와 ABI는 기존 legacy 패키지를 변경하지 않습니다.
현재 JSON ABI 시험 패키지:
| 방법론 | JSON 입력 예 | JSON 출력 예 | 의미 |
|---|---|---|---|
| PET 2003/v3 | {"petBottleCount":3} |
{"estimated_co2e":{"value":"60","unit":"gCO2e","scale":0}} |
통합 시험용 계수이며 실제 재활용이나 공식 감축량 증명이 아님 |
| 텀블러 2001/v4 | 서명 측정 합계의 {"waterIntakeMl":850} |
{"avoided_pet_co2e":{"value":"20","unit":"gCO2e","scale":0}} |
기존 승인본 보존. v4 계산식은 변경하지 않음 |
| 텀블러 2001/v5 | 서명 측정 합계의 {"waterIntakeMl":850} |
{"avoided_pet_co2e":{"value":"85","unit":"gCO2e","scale":0}} |
Claim별 합산량에 MRV 컨트랙트 변환식을 적용하는 JSON ABI v2 시험 |
| 태양광 2004/v2 | 측정 배열, 배출계수, 프로젝트 배출량 | 기준선·프로젝트 배출량·순감축량 객체와 측정 건수 | JSON 입출력 통합 시험용이며 승인된 탄소 방법론이 아님 |
| 샘플 | 입력 | 검증 | 결과 |
|---|---|---|---|
| PET 1003 / 2003/v1 | petBottleCount=3 (1..100000) |
DECLARED_INPUTS_V1: 파트너 신고 입력 |
estimated_co2e=60 gCO2e |
| 텀블러 1001 / 2001/v4 | 서명 측정 합계 850 mL | 기기 서명·정책·예약 검증 + JSON ABI v2 | 기존 출력 avoided_pet_co2e=20 gCO2e |
| 텀블러 1001 / 2001/v5 | 서명 측정 합계 850 mL | 기기 서명·정책·예약 검증 + JSON ABI v2 | Claim 단위 floor(850 / 10) = 85, avoided_pet_co2e=85 gCO2e |
| 태양광 1004 / 2004/v2 | 발전량 측정 2건과 시험용 배출값 | JSON Schema 입력 검증 + JSON ABI v2 | 기준선 450.1125, 순감축량 440.1125 tCO2e 시험 객체 |
PET는 시험용 count × 20입니다. 텀블러 v4는 기존 계산식을 보존하고, v5는 텀블러 MRV 컨트랙트와 같은 carbonReducedG = floor(waterIntakeMl / 10)을 Claim별 총량에 적용합니다. 컨트랙트가 여러 배치 합계에 한 번 내림하는 것과 달리 DMRVN은 Claim마다 계산합니다. 이 결과는 공식 탄소크레딧 인증을 뜻하지 않습니다. PET 패키지도 실제 폐기·재활용이나 공식 감축량을 증명하지 않습니다. 텀블러 v3 legacy ABI와 v4 JSON ABI는 각각 기존 Claim 실행을 위해 보존됩니다.
GitHub 빌드 성공은 Registry 승인이나 운영 기본 버전 변경을 뜻하지 않습니다. 노드는 가장 높은 버전이 아니라 Claim에 고정된 버전·hash를 사용합니다.
검증 시각: 2026-11-09T09:42:36.129Z (UTC)
소스 커밋: 6a73fd0295a1b6520de3e08a152939dc744286f1 · Node v22.23.4
GitHub Actions 실행 기록
기계 판독용 catalog.json
| 방법론 | 활동 | WASM | manifest | 정책 | 빌드 정보 |
|---|---|---|---|---|---|
| 2003/v1 | 1003 | 44 bytes | JSON | Not required (declared inputs) | wabt 1.0.37, 3 vectors |
| 2001/v3 | 1001 | 48 bytes | JSON | JSON | wabt 1.0.37, 6 vectors |
| 2003/v3 | 1003 | 89544 bytes | JSON | Not required (declared inputs) | rustc rustc 1.85.1 (4eb161250 2025-03-15), 2 vectors |
| 2004/v2 | 1004 | 108215 bytes | JSON | Not required (declared inputs) | rustc rustc 1.85.1 (4eb161250 2025-03-15), 2 vectors |
| 2001/v4 | 1001 | 89574 bytes | JSON | JSON | rustc rustc 1.85.1 (4eb161250 2025-03-15), 6 vectors |
| 2001/v5 | 1001 | 89570 bytes | JSON | JSON | rustc rustc 1.85.1 (4eb161250 2025-03-15), 8 vectors |
- wasmHash:
0x60265f20ca003ae4b20f0bca18f73d0d4e9bb7c9497627d7f680113dac4c91d9 - methodologyHash:
0xdcc09ee621f2e388dd858f8f7399dbf2725cbec3526d52b0dd06909da892ff77
- wasmHash:
0xcff1a1905d2541aabdbff86181bf0314b6ad5b93fb175469a332b89ee6e9ba84 - methodologyHash:
0x9591f325e7ce716ab9a4a61a21cc5e5a3afbcf814092636f0a861febc236b03c
- wasmHash:
0x8d7b604b5b02a30d6dda9927ec9657bb28fbccf15850958d6cdb20f3dd696b53 - methodologyHash:
0x4aff2b393d0d4d9fd4e4144845a4ad4058ad693115ce8643310ae81144578370
- wasmHash:
0x6c501cf75708c5116a51f7e064c62b7d7a2d08f95e2e22742211ba992b9450a8 - methodologyHash:
0xae7b574f9f78c830ebbe407b51ad1b384b94ab10173dc651decdb5121792307c
- wasmHash:
0xcdc5f448396e488a473fabbb1d3619ad61c86d5cc174d37c4184867d95d8bb54 - methodologyHash:
0xc5e8996442f3b2a061e1ddecdf2b71b44d21da9ac73329388a01ad30f5396cb5
- wasmHash:
0xabd7e7ddaabf74e06fb074280028c58bc5f9f034b832bd239ac5c381b05b4081 - methodologyHash:
0x5a65e4015caf6d2627038e369b7779135bec89c3a4acc3aa37a73bc3d2c6666f
legacy ABI 방법론은 methodologies/<분류>/<ID>-v<version>/에 definition.json, methodology.wat, vectors.json을 둡니다. 신규 JSON ABI 방법론은 같은 디렉터리에 definition.json, vectors.json, package-config.json과 독립 wasm/ Cargo crate를 둡니다. package-config.json은 JSON_WASM_V2 런타임과 crate 디렉터리를 지정하고, crate는 공용 ABI 매크로를 호출해 자기 계산 함수만 연결합니다. 새 방법론은 공용 Rust 런타임·빌더에 방법론 이름이나 계산 분기를 추가하지 않습니다. 새 입력·출력은 JSON Schema로 정의하고 Rust 계산 함수에서 JSON을 직접 파싱·생성합니다. 기존 승인 버전은 수정하지 않습니다.
npm run setup:wasm
npm ci --ignore-scripts
npm test
npm run verify:all
npm run verify:reproducibleai-workspace에서 PET·태양광·텀블러를 서버리스/Attestor와 함께 검증할 때는 패키지를 다시 빌드한 뒤 npm run sync:workspace-fixtures를 실행합니다. 이 명령은 검증된 manifest.json, methodology.wasm, vectors.json을 복사하고, 기기 서명 정책이 있는 텀블러 패키지는 device-policy.json도 함께 복사합니다. 배포·Registry 등록은 하지 않습니다. CI나 리뷰 전에는 npm run verify:workspace-fixtures로 복사본의 바이트·버전 일치를 확인합니다. downstream 테스트는 Claim에 고정된 방법론 버전과 WASM hash가 정확히 일치하는지 검증합니다.
JSON ABI용 Rust 버전은 rust-toolchain.toml이 단일 기준입니다. npm run setup:wasm은 npm 패키지 설치 전에도 실행할 수 있으며, 해당 Rust 버전과 WASM 타깃만 준비합니다. 빌드는 PATH의 임의 Cargo 대신 pin된 Cargo/Rustc를 선택하며 lockfile을 강제합니다. 툴체인이나 WASM 타깃이 없거나 버전이 다르면 필요한 조치를 오류로 표시합니다. Cargo 의존성 캐시와 빌드 산출물은 기본적으로 저장소의 무시되는 경로에 둡니다. CARGO_HOME과 target 경로는 Rust 출력에서 고정 경로로 remap하며, 빌드기가 로컬 경로 누출을 검사합니다. 따라서 셸별 캐시·target 위치가 WASM bytes나 wasmHash에 영향을 주지 않아야 합니다. 의도적인 캐시 경로 변경은 DMRVN_CARGO_HOME, 격리 빌드 디렉터리는 DMRVN_WASM_TARGET_DIR로 지정할 수 있습니다.
npm run verify:all은 legacy ABI와 JSON ABI 패키지를 모두 빌드하고 검증합니다. npm run build:json과 npm run verify:json은 JSON ABI만 따로 빌드하거나 기존 산출물을 검사할 때 사용할 수 있습니다. GitHub Actions도 같은 pin과 WASM 타깃을 설치한 뒤 테스트, 전체 검증, 재현성 검증을 실행합니다. 기본 브랜치에서 성공하면 builds/와 이 목록을 자동 커밋합니다. PR은 검증만 합니다. wasmHash는 bytes의 keccak256, methodologyHash는 manifest의 정렬 JSON/JCS 허용 부분집합 keccak256입니다. 상세 검증 근거는 VALIDATION.md를 참고합니다.