---
status: PERMISSIONLESS_CAPABILITY_ADMISSION_AND_PC_MAILBOX_SELF_TESTED_NOT_LIVE
fixed_node_allowlist_required_after_bootstrap: false
production_admission_activated: false
operator_signing_used: false
validator_signing_used: false
external_transaction_used: false
---

# 불특정 적격 PC capability admission staging

## 해결하려는 문제

PC Sync의 live canary policy는 안전한 첫 시험을 위해 target node key를 명시한다. 이것은 canary fencing에는 적합하지만 최종 목표인 “불특정 적격 PC가 동적으로 역할을 얻고 떠날 수 있는 구조”의 admission 방식으로 사용할 수 없다.

`E:\aisfor\services\permissionlessCapabilityAdmissionProtocol.js`는 고정 hostname/node allowlist를 최종 신뢰 기준으로 쓰지 않고, 이전 epoch의 검증된 role lease 보유자들이 새 PC를 다중 증인으로 admission하는 규칙을 구현한다.

## 신뢰 연속성

1. bootstrap witness certificate 집합을 commitment로 만든다.
2. 그 eligibility-set commitment는 finalized chain proof 또는 검증된 3-node manifest vote anchor에 묶인다.
3. 새 PC는 별도 Ed25519 node key로 capability claim을 서명한다.
4. 기존의 유효한 `recovery-cache` 또는 `rpc-read` lease 보유자 최소 3명이 resource challenge 결과와 target claim hash에 서명한다.
5. witness는 최소 2개 failure domain에 있어야 한다.
6. witness vote와 target claim은 동일 RPC-finalized block, epoch, nonce, resource/failure-domain commitment에 묶인다.
7. 발급된 짧은 lease certificate는 다음 epoch eligibility set에 들어갈 수 있다.
8. 갱신 quorum을 얻지 못하면 lease expiry로 자동 퇴출된다.

따라서 bootstrap 이후 node key 집합은 고정되지 않으며, 새 노드 가입·기존 노드 이탈이 epoch commitment로 이어진다.

## 거부 규칙

- target 자기 자신이 witness가 되는 경우
- witness lease 만료 또는 witness capability 부족
- 같은 witness key 중복
- 3표 미만
- witness failure domain 2개 미만
- challenge result 불일치
- target claim/resource/failure-domain 변조
- RPC block mismatch
- epoch rollback 또는 이전 eligibility-set anchor mismatch
- 같은 epoch에서 다른 commitment로의 equivocation

## self-test 결과

- root witness 3개
- 새 PC admission 3-of-3
- witness failure domain 3개
- 새 PC가 다음 epoch witness eligibility에 포함됨
- 2표·동일 failure domain·rollback·anchor 변조 거부
- operator/validator signing, hostname admission, production traffic 미사용

증거: `evidence/permissionless-capability-admission-self-test-redacted.json`

## PC Sync candidate 연결

PC Sync candidate `1.4.81-node-bound-distinct-upnp-port-default-off-locked`에는 다음 default-OFF endpoint가 연결됐다.

- `POST /gateway/capability/resource-challenge`
- `POST /gateway/capability/witness`
- `GET|POST /gateway/capability/admission`
- `GET|POST /gateway/capability/eligibility`

별도 feature `permissionlessCapabilityAdmissionEnabled`와 환경 잠금 `AISFOR_PERMISSIONLESS_CAPABILITY_ADMISSION_ENABLED`가 모두 기존 public relay/RPC/capsule gate 뒤에 있다. endpoint는 다음을 한 receipt로 묶어 target node key로 서명한다.

1. 최대 8192-byte(검증값 4096-byte) 합성 암호문을 별도 임시 경로에 exclusive write
2. 즉시 재읽어 payload/persisted/retrieved hash 일치 확인
3. 임시 파일 삭제 확인
4. child-process fenced capsule의 commitment/request/result hash 확인
5. 동일 block의 RPC certificate 3표 확인

증인 endpoint는 target public URL의 health/node key, capsule commitment, 동일 RPC certificate를 실제 HTTP로 직접 조회한다. target claim·resource receipt·failure-domain commitment를 묶어 증인 자신의 Ed25519 key로 서명한다. admission endpoint는 서로 다른 증인 key 3개와 failure domain 최소 2개를 요구한다.

검증된 admission certificate는 eligibility mailbox로 교환할 수 있다. epoch `N`에 admission된 PC는 동일 epoch의 자기 admission에는 참여할 수 없고 epoch `N+1`부터 증인이 된다. 인증서가 만료되거나 검증 체인이 끊기면 eligibility에서 제외된다.

embedded self-test는 다음을 통과했다.

- 임시 암호문 파일 write/read/hash/delete
- fenced capsule 결과와 RPC 3표 결합
- target 및 witness Ed25519 서명
- 실제 localhost HTTP health/capsule/RPC endpoint probe
- 3개 증인 및 3개 failure-domain 집계
- 2표 quorum 거부
- 동일 epoch 순환 admission 거부
- 새 PC의 다음 epoch eligibility 포함
- receipt 변조 거부

production storage/chunk/DB는 사용하지 않았다. 후보 크기는 `481811` bytes, SHA-256은 `bbac9679202b815127ec270ea8646f56d1abb872ff6e652e3bfc9556f358ce96`다. 증거는 `evidence/permissionless-resource-challenge-self-test-redacted.json`이다.

## 아직 남은 live gate

코드 staging은 연결됐지만 다음은 아직 production/live 증명이 아니다.

1. 서로 다른 public failure domain의 실제 PC 3대 이상에서 challenge/witness/admission/eligibility 교환
2. verified admission certificate만 service-directory endpoint 후보로 자동 포함
3. lease expiry 시 endpoint·mapping·assignment 자동 철회 및 재가입
4. physical Android가 동적 directory를 수신해 failover
5. 별도 승인된 메인 서버 격리 시험

실제 public challenge는 router canary 승인 전에는 실행하지 않는다.
