체인 위의 파일 (DFS)
ZooBC에는 파일을 보관하는 방법이 두 가지 있습니다. DFS 파일은 작은 내용을 위한 것입니다. 파일은 자기 트랜잭션 안에 담겨 전달되고, 체인은 이를 소유자의 데이터셋 행으로 기록합니다. 더 큰 파일은 분산 저장소로 가며, 체인에는 결코 닿지 않는 조각으로 잘립니다. 이 문서는 DFS 파일을 다룹니다.
기록과 내용
어떤 소유자가 어떤 경로에 둔 DFS 파일은 데이터셋 행 (owner, owner, "dfs:" + path)입니다. 설정자와 수신자는 모두 소유자이고, 속성은 dfs: 뒤에 경로를 붙인 것입니다. 행의 값은 메타데이터 기록을 16진수로 적은 것입니다.
- 내용의 SHA3-256 해시와 크기
- 권한(0644)
- 타임스탬프 두 개
- 청크의 수와 각 청크의 해시
내용 자체는 트랜잭션 본문 안에 담겨 전달됩니다. 본문은 최대 65,536바이트이므로 DFS 파일은 최대 약 64 KiB를 담습니다. 노드들은 그 바이트를 체인 옆의 로컬 청크 테이블에 보관하며, 이는 합의 상태의 일부가 아닙니다. 체인의 행이 해시를 담고 있으므로 누구나 내용을 그것과 대조해 확인할 수 있습니다.
경로
경로는 /로 시작하며 길이는 최대 1,024바이트입니다. //, .., NUL 바이트, 캐리지 리턴, 줄 바꿈을 포함할 수 없습니다. 끝의 /는 떨어지므로 /a/b/와 /a/b는 같은 파일을 가리킵니다. dfs:나 dfs:dir: 아래의 행은 DFS 트랜잭션만 기록할 수 있으며, 둘 중 어느 접두사든 SetupAccountDataset은 거부됩니다.
만들기, 갱신, 삭제
| 트랜잭션 | 유형 | 하는 일 |
|---|---|---|
| DFSCreateFile | 8 | 경로에 내용과 함께 파일을 만듦 |
| DFSUpdateFile | 264 | 같은 경로의 내용을 교체함 |
| DFSDeleteFile | 520 | 파일을 제거함 |
이미 있는 파일 위에 만들기, 그리고 없는 파일의 갱신이나 삭제는 수수료를 내는 무동작입니다. 수수료가 부과되고 아무것도 바뀌지 않습니다. 따라서 앱은 만들기와 갱신 중 하나를 고르기 전에 그 경로의 행을 읽어야 합니다.
임대료와 환불
DFS 행은 다른 것과 다를 바 없는 데이터셋 객체입니다. 누구나 자금을 넣을 수 있는 자체 예치금 주소(ZBS_…)가 있으며, 자기 바이트(속성과 16진수 값)에 대해 기간마다 데이터셋 임대료를 냅니다. 시작 가격에서는 mainnet 기준 기간당 MiB당 0.05 ZBC입니다. 임대료는 예치금에서, 그다음 소유자에게서 가져가며 롱제비티 풀에 입금됩니다. 둘 다 낼 수 없으면 다른 데이터셋과 마찬가지로 행이 비활성화됩니다.
DFS 파일을 삭제하면 소유자를 포함한 각 납부자가 예치금 중 자기가 쓰지 않은 부분을 돌려받습니다. 돈은 선입선출로 소비됩니다. 가장 오래된 납부금을 다 쓴 뒤에 다음 것에 손을 대므로, 가장 최근의 납부자들이 가장 많이 돌려받습니다.
DFS 파일인가, 저장된 파일인가
| DFS 파일 | 저장된 파일 | |
|---|---|---|
| 크기 | 최대 약 64 KiB | 1 MiB 조각 최대 100,000개 |
| 내용 | 트랜잭션 안 | 보유 노드 다섯 개의 조각, 체인에는 결코 없음 |
| 체인에 있는 것 | dfs: 아래 행 하나 | 매니페스트: 루트, 크기, 조각 id |
| 변경 | 같은 경로에서 갱신과 삭제 | 새 내용은 새 루트를 가지므로 새 파일 |
| 임대료가 가는 곳 | 롱제비티 풀 | 스토리지 풀 |
| 접근 통제 | 없음: 내용이 공개 트랜잭션 안에 있음 | 허용 목록이 있는 비공개 플래그 |
어느 방법도 ZooBC Foundation의 컴퓨터나 업로드한 사람의 컴퓨터에 의존하지 않습니다.