存储提供商
存储提供商是一项服务,用于收费存储文件。
二进制文件
您可以从TON自动构建下载适用于Linux/Windows/MacOS的storage-daemon
和storage-daemon-cli
二进制文件。
从源代码编译
您可以使用此说明从源代码编译storage-daemon
和storage-damon-cli
。
关键概念
它由一个智能合约组成,该合约接受存储请求并管理来自客户的支付,以及一个上传和向客户提供文件的应用程序。以下是它的工作原理:
- 提供商的所有者启动
storage-daemon
,部署主智能合约,并设置参数。合约的地址与潜在客户共享。 - 使用
storage-daemon
,客户端创建一个包含其文件的包并向提供商的智能合约发送特殊的内部消息。 - 提供商的智能合约创建一个存储合约来处理这个特定包。
- 提供商在区块链中找到请求后,下载包并激活存储合约。
- 客户端可以向存储合约转账支付存储费用。为了接收支付,提供商定期向合约提供证明,证明他们仍在存储该包。
- 如果存储合约上的资金用尽,合约将被视为非活动状态,提供商不再需要存储该包。客户端可以重新填充合约或检索其文件。
客户端也可以随时通过向存储合约提供所有权证明来检索其文件。合约随后将文件释放给客户端并停用自身。
智能合约
客户使用提供商
要使用存储提供商,您需要知道其智能合约的地址。客户端可以使用storage-daemon-cli
中的以下命令获取提供商的参数:
get-provider-params <address>
提供商的参数:
- 是否接受新的存储合约。
- 单个包的最小和最大大小(以字节为单位)。
- 价格 - 存储费用。以每天每兆字节nanoTON计。
- 最大间隔 - 提供商应该多久提交一次包存储证明。
存储请求
您需要创建一个包并生成以下命令的消息:
new-contract-message <BagID> <file> --query-id 0 --provider <address>
信息:
执行此命令可能需要一些时间来处理大型包。消息正文将保存到<file>
(不是整个内部消息)。查询ID可以是0到2^64-1
的任何数字。消息包含提供商的参数(价格和最大间隔)。这些参数将在执行命令后打印出来,因此应在发送前进行双重检查。如果提供商的所有者更改参数,消息将被拒绝,因此新存储合约的条件将完全符合客户的预期。
然后,客户端必须将带有此 body 的消息发送到提供商的地址。如果出现错误,消息将返回给发件人(弹回)。否则,将创建一个新的存储合约,客户端将收到来自它的消息,其中包含op=0xbf7bd0c1
和相同的查询ID。
此时,合约尚未激活。一旦提供商下载了包,它将激活存储合约,客户端将收到来自存储合约的op=0xd4caedcd
消息。
存储合约有一个“客户端余额” - 这是客户端转移给合约的资金,尚未支付给提供商。资金以每天每兆字节的速率逐渐从此余额中扣除。初始余额是客户端随创建存储合约的请求一起转移的金额。然后,客户端可以通过对存储合约进行简单转账来补充余额(可以从任何地址进行)。剩余客户端余额可通过get_storage_contract_data
get方法返回,作为第二个值(balance
)。
合约可能因以下情况关闭:
如果存储合约关闭,客户端将收到带有剩余余额的消息和op=0xb6236d63