본문으로 건너뛰기

스토리지 공급자

스토리지 공급자는 유료로 파일을 저장하는 서비스입니다.

바이너리

리눅스/윈도우/맥OS 바이너리용 storage-daemonstorage-daemon-cliTON 자동 빌드에서 다운로드할 수 있습니다.

소스에서 컴파일

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

주요 개념

이는 클라이언트의 스토리지 요청을 수락하고 결제를 관리하는 스마트 컨트랙트와 파일을 업로드하고 클라이언트에게 제공하는 애플리케이션으로 구성됩니다. 작동 방식은 다음과 같습니다:

  1. 공급자의 소유자는 '스토리지-데몬'을 실행하고, 메인 스마트 컨트랙트를 배포하고, 매개변수를 설정합니다. 컨트랙트의 주소는 잠재 고객과 공유됩니다.
  2. 클라이언트는 '스토리지-데몬'을 사용하여 파일에서 백을 생성하고 공급자의 스마트 컨트랙트에 특별한 내부 메시지를 보냅니다.
  3. 공급자의 스마트 컨트랙트는 이 특정 백을 처리하기 위한 스토리지 컨트랙트를 생성합니다.
  4. 공급자는 블록체인에서 요청을 발견하면 백을 다운로드하고 스토리지 컨트랙트를 활성화합니다.
  5. 그런 다음 고객은 보관 계약에 따라 보관 대금을 이체할 수 있습니다. 대금을 받기 위해 제공업체는 정기적으로 계약서에 가방을 보관하고 있다는 증거를 제시합니다.
  6. 보관 계약의 자금이 모두 소진되면 계약은 비활성 상태로 간주되며 공급자는 더 이상 백을 보관할 필요가 없습니다. 클라이언트는 컨트랙트를 다시 채우거나 파일을 검색할 수 있습니다.
정보

또한 클라이언트는 스토리지 계약에 소유권 증명을 제공하여 언제든지 파일을 검색할 수 있습니다. 그러면 컨트랙트는 파일을 클라이언트에게 릴리스하고 스스로 비활성화합니다.

스마트 계약

스마트 컨트랙트 소스 코드.

클라이언트의 공급자 사용

스토리지 공급자를 사용하려면 해당 스마트 컨트랙트의 주소를 알아야 합니다. 클라이언트는 storage-daemon-cli에서 다음 명령을 사용하여 공급자의 파라미터를 얻을 수 있습니다:

get-provider-params <address>

공급자의 매개 변수입니다:

  • 새 스토리지 계약이 수락되었는지 여부.
  • 최소 및 최대 Bag 크기(바이트 단위).
  • 요금 - 스토리지 비용입니다. 하루 메가바이트당 나노톤 단위로 지정됩니다.
  • 최대 범위 - 공급자가 Bag 저장소에 대한 증명을 제공해야 하는 빈도입니다.

저장 요청

Bag*을 생성하고 다음 명령을 사용하여 메시지를 생성해야 합니다:

new-contract-message <BagID> <file> --query-id 0 --provider <address>

정보:

이 명령을 실행하는 데는 대용량 Bags의 경우 다소 시간이 걸릴 수 있습니다. 메시지 본문은 <file>에 저장됩니다(내부 메시지 전체가 아님). 쿼리 ID는 0에서 2^64-1까지 임의의 숫자가 될 수 있습니다. 메시지에는 공급자의 매개변수(요금 및 최대 스팬)가 포함됩니다. 이러한 매개변수는 명령을 실행한 후 출력되므로 전송하기 전에 다시 확인해야 합니다. 공급자의 소유자가 파라미터를 변경하면 메시지가 거부되므로 새 스토리지 계약의 조건은 클라이언트가 기대하는 것과 정확히 일치하게 됩니다.

그런 다음 클라이언트는 이 본문이 포함된 메시지를 공급자의 주소로 보내야 합니다. 오류가 발생하면 메시지는 발신자에게 반송됩니다(반송). 그렇지 않으면 새 스토리지 컨트랙트가 생성되고 클라이언트는 op=0xbf7bd0c1 및 동일한 쿼리 ID를 가진 메시지를 받게 됩니다.

이 시점에서는 컨트랙트가 아직 활성화되지 않았습니다. 공급자가 Bag를 다운로드하면 스토리지 컨트랙트가 활성화되고 클라이언트는 op=0xd4caedcd라는 메시지를 받게 됩니다(또한 스토리지 컨트랙트에서).

스토리지 계약에는 고객이 계약으로 이체하고 아직 공급업체에 지불하지 않은 자금인 '고객 잔액'이 있습니다. 자금은 이 잔액에서 점차적으로 차감됩니다(하루 메가바이트당 요금과 동일한 비율로). 초기 잔액은 고객이 스토리지 계약 생성 요청과 함께 전송한 금액입니다. 그런 다음 클라이언트는 스토리지 계약으로 간단한 이체를 통해 잔액을 충전할 수 있습니다(모든 주소에서 이체 가능). 남은 클라이언트 잔액은 get_storage_contract_data get 메서드에서 두 번째 값(balance)으로 반환됩니다.

다음과 같은 경우 계약이 해지될 수 있습니다:

정보

스토리지 계약이 종료되는 경우 클라이언트는 잔액과 op=0xb6236d63 메시지를 받습니다.

  • 생성 직후, 활성화 전, 공급자가 계약 수락을 거부하는 경우(공급자의 한도 초과 또는 기타 오류).
  • 클라이언트 잔액이 0에 도달합니다.
  • 공급자는 자발적으로 계약을 해지할 수 있습니다.
  • 클라이언트는 자신의 주소와 쿼리 ID로 op=0x79f937ea 메시지를 보내 자발적으로 계약을 해지할 수 있습니다.

공급자 실행 및 구성

스토리지 공급자는 storage-daemon의 일부이며, storage-daemon-cli에 의해 관리됩니다. 스토리지 데몬-P` 플래그로 시작해야 합니다.

메인 스마트 컨트랙트 만들기

저장소-대몬-cli`에서 이 작업을 수행할 수 있습니다:

deploy-provider
중요!

공급자를 초기화하기 위해 지정된 주소로 반송 불가 메시지 1톤을 전송하라는 메시지가 표시됩니다. 'get-provider-info' 명령을 사용하여 컨트랙트가 생성되었는지 확인할 수 있습니다.

기본적으로 이 계약은 새 스토리지 계약을 수락하지 않도록 설정되어 있습니다. 활성화하기 전에 공급자를 구성해야 합니다. 공급자의 설정은 구성('스토리지-데몬'에 저장)과 컨트랙트 매개변수(블록체인에 저장)로 구성됩니다.

구성:

  • '최대 계약' - 동시에 존재할 수 있는 스토리지 계약의 최대 수입니다.
  • 최대 총 크기 - 스토리지 컨트랙트에서 *Bags*의 최대 총 크기입니다. get-provider-info를 사용하여 구성 값을 확인하고, 이를 변경할 수 있습니다:
set-provider-config --max-contracts 100 --max-total-size 100000000000

계약 매개변수:

  • '수락' - 새 스토리지 계약을 수락할지 여부입니다.
  • 최대 파일 크기, 최소 파일 크기` - 하나의 Bag에 대한 크기 제한입니다.
  • 요금` - 스토리지 비용(하루 메가바이트당 나노톤 단위로 지정).
  • '최대 스팬' - 공급자가 저장소 증명을 제출해야 하는 빈도입니다.

get-provider-info`를 사용하여 매개변수를 확인하고 다음을 사용하여 변경할 수 있습니다:

set-provider-params --accept 1 --rate 1000000000 --max-span 86400 --min-file-size 1024 --max-file-size 1000000000

주목할 가치가 있습니다.

참고: set-provider-params 명령에서는 일부 매개변수만 지정할 수 있습니다. 나머지는 현재 매개변수에서 가져옵니다. 블록체인의 데이터는 즉시 업데이트되지 않으므로 set-provider-params 명령을 여러 번 연속해서 실행하면 예기치 않은 결과가 발생할 수 있습니다.

스토리지 계약에 대한 수수료를 충당할 수 있는 충분한 자금이 확보되도록 처음에는 공급자의 잔액에 1톤 이상을 넣는 것이 좋습니다. 그러나 반송되지 않는 첫 번째 메시지로 너무 많은 TON을 보내지 마세요.

accept매개변수를1`로 설정하면 스마트 컨트랙트는 클라이언트의 요청을 수락하고 스토리지 컨트랙트를 생성하기 시작하며, 스토리지 데몬은 Bag 다운로드 및 배포, 스토리지 증명 생성 등 자동으로 이를 처리합니다.

제공업체와의 추가 작업

기존 스토리지 계약 목록

get-provider-info --contracts --balances

각 스토리지 컨트랙트에는 '클라이언트$'와 '컨트랙트$'의 잔액이 나열되어 있으며, withdraw <address> 명령으로 차액을 기본 공급자 컨트랙트로 출금할 수 있습니다.

'withdraw-all' 명령은 사용 가능한 '1톤' 이상의 모든 계약에서 자금을 출금합니다.

모든 스토리지 계약은 close-contract <address> 명령으로 해지할 수 있습니다. 이렇게 하면 자금이 기본 계약으로 이체됩니다. 클라이언트의 잔액이 소진되면 자동으로 같은 일이 발생합니다. 이 경우 Bag 파일은 삭제됩니다(동일한 Bag를 사용하는 다른 컨트랙트가 없는 경우).

전송

메인 스마트 컨트랙트에서 원하는 주소로 자금을 이체할 수 있습니다(금액은 나노톤에 명시되어 있습니다):

send-coins <address> <amount>
send-coins <address> <amount> --message "Some message"
정보

공급자가 저장한 모든 Bagslist 명령으로 사용할 수 있으며, 평소와 같이 사용할 수 있습니다. 공급자의 작업을 방해하지 않으려면 삭제하거나 이 스토리지 데몬을 사용하여 다른 Bags와 작업하지 마세요.