본문으로 건너뛰기

스토리지 데몬

스토리지 데몬은 TON 네트워크에서 파일을 다운로드하고 공유하는 데 사용되는 프로그램입니다. storage-daemon-cli 콘솔 프로그램은 실행 중인 스토리지 데몬을 관리하는 데 사용됩니다.

스토리지 데몬의 현재 버전은 Testnet 브랜치에서 찾을 수 있습니다.

하드웨어 요구사항

  • 최소 1GHz 및 2코어 CPU
  • 최소 2 GB RAM
  • 최소 2 GB SSD (토렌트를 위한 공간은 제외)
  • 고정 IP를 가진 10 Mb/s 네트워크 대역폭

바이너리

Linux/Windows/MacOS용 storage-daemonstorage-daemon-cli 바이너리는 TON Auto Builds에서 다운로드할 수 있습니다.

소스에서 컴파일하기

지침을 사용하여 storage-daemonstorage-damon-cli를 소스에서 컴파일할 수 있습니다.

주요 개념

  • 파일 가방 또는 Bag - TON Storage를 통해 배포되는 파일 모음
  • TON Storage의 네트워크 부분은 토렌트와 유사한 기술을 기반으로 하므로, Torrent, Bag of files, Bag이라는 용어를 서로 바꿔 사용할 수 있습니다. 그러나 몇 가지 차이점에 주목해야 합니다: TON Storage는 RLDP 프로토콜을 통해 ADNL을 통해 데이터를 전송하고, 각 Bag은 자체 네트워크 오버레이를 통해 배포되며, 머클 구조는 효율적인 다운로드를 위한 대용량 청크와 효율적인 소유권 증명을 위한 작은 청크의 두 가지 버전으로 존재할 수 있으며, 피어를 찾기 위해 TON DHT 네트워크가 사용됩니다.
  • 파일 가방토렌트 정보와 데이터 블록으로 구성됩니다.
  • 데이터 블록은 토렌트 헤더로 시작합니다 - 파일 이름과 크기가 포함된 파일 목록이 있는 구조입니다. 데이터 블록에는 파일 자체가 이어집니다.
  • 데이터 블록은 청크로 나뉘며(기본값 128 KB), 이러한 청크의 SHA256 해시에 대해 머클 트리(TVM 셀로 만들어짐)가 구축됩니다. 이를 통해 개별 청크의 머클 증명을 구축하고 검증할 수 있으며, 수정된 청크의 증명만 교환하여 효율적으로 Bag을 재생성할 수 있습니다.
  • 토렌트 정보에는 다음의 머클 루트가 포함됩니다
    • 청크 크기 (데이터 블록)
    • 청크 크기 목록
    • 해시 머클 트리
    • 설명 - 토렌트 생성자가 지정한 텍스트
  • 토렌트 정보는 TVM 셀로 직렬화됩니다. 이 셀의 해시를 BagID라고 하며, 이는 Bag을 고유하게 식별합니다.
  • Bag 메타토렌트 정보토렌트 헤더를 포함하는 파일입니다.* 이는 .torrent 파일의 아날로그입니다.

스토리지 데몬 및 storage-daemon-cli 시작하기

storage-daemon을 시작하기 위한 예제 명령:

storage-daemon -v 3 -C global.config.json -I <ip>:3333 -p 5555 -D storage-db

  • -v - 상세 수준 (INFO)
  • -C - 글로벌 네트워크 설정 (글로벌 설정 다운로드)
  • -I - adnl을 위한 IP 주소와 포트
  • -p - 콘솔 인터페이스를 위한 TCP 포트
  • -D - 스토리지 데몬 데이터베이스 디렉토리

storage-daemon-cli 관리

다음과 같이 시작됩니다:

storage-daemon-cli -I 127.0.0.1:5555 -k storage-db/cli-keys/client -p storage-db/cli-keys/server.pub
  • -I - 데몬의 IP 주소와 포트 (포트는 위의 -p 매개변수에 지정된 것과 동일)
  • -k-p - 클라이언트의 개인 키와 서버의 공개 키 (validator-engine-console와 유사). 이 키들은 데몬의 첫 실행 시 생성되어 <db>/cli-keys/에 저장됩니다.

명령 목록

storage-daemon-cli 명령 목록은 help 명령으로 얻을 수 있습니다.

명령에는 위치 매개변수와 플래그가 있습니다. 공백이 있는 매개변수는 따옴표(' 또는 ")로 둘러싸야 하며, 공백은 이스케이프될 수 있습니다. 다른 이스케이프도 사용 가능합니다. 예:

create filename\ with\ spaces.txt -d "Description\nSecond line of \"description\"\nBackslash: \\"

-- 플래그 뒤의 모든 매개변수는 위치 매개변수입니다. 대시로 시작하는 파일 이름을 지정하는 데 사용할 수 있습니다:

create -d "Description" -- -filename.txt

storage-daemon-cli는 실행할 명령을 전달하여 비대화형 모드로 실행할 수 있습니다:

storage-daemon-cli ... -c "add-by-meta m" -c "list --hashes"

파일 가방 추가하기

파일 가방을 다운로드하려면 BagID를 알거나 메타 파일이 있어야 합니다. 다운로드를 위해 Bag을 추가하는 데 다음 명령을 사용할 수 있습니다:

add-by-hash <hash> -d directory
add-by-meta <meta-file> -d directory

Bag은 지정된 디렉토리에 다운로드됩니다. 생략하면 스토리지 데몬 디렉토리에 저장됩니다.

정보

해시는 16진수 형식으로 지정됩니다(길이 - 64자).

메타 파일로 Bag을 추가할 때는 Bag에 대한 정보(크기, 설명, 파일 목록)를 즉시 사용할 수 있습니다. 해시로 추가할 때는 이 정보가 로드될 때까지 기다려야 합니다.

추가된 Bag 관리하기

  • list 명령은 Bag 목록을 출력합니다.
  • list --hashes는 전체 해시가 포함된 목록을 출력합니다.

이후의 모든 명령에서 <BagID>는 해시(16진수) 또는 세션 내 Bag의 순서 번호(list 명령으로 볼 수 있는 번호)입니다. Bag의 순서 번호는 storage-daemon-cli 재시작 사이에 저장되지 않으며 비대화형 모드에서는 사용할 수 없습니다.

메소드

  • get <BagID> - Bag에 대한 자세한 정보를 출력합니다: 설명, 크기, 다운로드 속도, 파일 목록.
  • get-peers <BagID> - 피어 목록을 출력합니다.
  • download-pause <BagID>, download-resume <BagID> - 다운로드를 일시 중지하거나 재개합니다.
  • upload-pause <BagID>, upload-resume <BagID> - 업로드를 일시 중지하거나 재개합니다.
  • remove <BagID> - Bag을 제거합니다. remove --remove-filesBag의 모든 파일도 삭제합니다. Bag이 내부 스토리지 데몬 디렉토리에 저장된 경우 파일이 어떤 경우에도 삭제됩니다.

부분 다운로드, 우선순위

정보

Bag을 추가할 때 다운로드할 파일을 지정할 수 있습니다:

add-by-hash <hash> -d dir --partial file1 file2 file3
add-by-meta <meta-file> -d dir --partial file1 file2 file3

우선순위

파일 가방의 각 파일에는 0에서 255 사이의 우선순위 번호가 있습니다. 우선순위 0은 파일이 다운로드되지 않음을 의미합니다. --partial 플래그는 지정된 파일의 우선순위를 1로, 나머지는 0으로 설정합니다.

이미 추가된 Bag의 우선순위는 다음 명령으로 변경할 수 있습니다:

  • priority-all <BagID> <priority> - 모든 파일에 대해.
  • priority-idx <BagID> <idx> <priority> - 번호로 하나의 파일에 대해 (get 명령으로 확인).
  • priority-name <BagID> <name> <priority> - 이름으로 하나의 파일에 대해. 파일 목록이 다운로드되기 전에도 우선순위를 설정할 수 있습니다.

파일 가방 만들기

Bag을 만들고 배포를 시작하려면 create 명령을 사용합니다:

create <path>

<path>는 단일 파일이나 디렉토리를 가리킬 수 있습니다. Bag을 만들 때 설명을 지정할 수 있습니다:

create <path> -d "Bag of Files description"

Bag이 생성되면 콘솔에 자세한 정보가 표시되며(Bag을 식별하는 BagID인 해시 포함), 데몬이 토렌트 배포를 시작합니다. create의 추가 옵션:

  • --no-upload - 데몬이 피어에게 파일을 배포하지 않습니다. 업로드는 upload-resume을 사용하여 시작할 수 있습니다.
  • --copy - 파일이 스토리지 데몬의 내부 디렉토리에 복사됩니다.

다른 사용자가 Bag을 다운로드하려면 해시만 알면 됩니다. 토렌트 메타 파일도 저장할 수 있습니다:

get-meta <BagID> <meta-file>