提供私人数据空间的赞助费
费用赞助允许用户在没有持有 XOR 的情况下提交私人数据空间交易.用户仍然签署了交易.交易的元数据指向赞助商账户,运行时间为网络费用借款赞助商的余额 XOR.
集成有三个移动部分:
- 节点允许费用赞助
- 赞助商账户存在,并拥有 XOR
- 每个用户对该赞助商拥有
CanUseFeeSponsor
在此之后,每一个赞助的用户交易只需要这个元数据:
{
"fee_sponsor": "<SPONSOR_ACCOUNT_I105>"
}这个页面显示了两个常见的模式:
- 免费用户写道:赞助商支付 XOR 而用户没有支付.
- 地方代币费用:用户以应用代币支付赞助商,赞助商则以 XOR 支付网络.
首先使用 Taira 或私有测试网络. 新的私人数据空间是运营商和治理变化;它不是由客户端配置创建的.
示例值
下面的命令使用这些位置持有符:
export DATASPACE="team"
export USER="<USER_ACCOUNT_I105>"
export SPONSOR="<SPONSOR_ACCOUNT_I105>"
export TREASURY="<TREASURY_ACCOUNT_I105>"
export XOR_ASSET="xor#universal"
export BILLING_DOMAIN="billing.team"
export LOCAL_FEE_ASSET="usage#billing.team"
export LOCAL_FEE_ASSET_ID="<LOCAL_FEE_ASSET_DEFINITION_BASE58>"
export USER_ALIAS="alice@team"
export PHONE_POLICY="phone#team"
export EMAIL_POLICY="email#team"
export POLICY_OWNER="<IDENTIFIER_POLICY_OWNER_ACCOUNT_I105>"使用常规 I105 帐户 IDs,除非您的部署对相同账户有活跃账户号.
1. 准备数据空间
从 中描述的私人数据空间目录和路由工作开始连接到 SORA Nexus 数据域.一个面向操作员的碎片看起来像这样:
[[nexus.lane_catalog]]
index = 5
alias = "team-private"
description = "Private team lane"
dataspace = "team"
visibility = "private"
metadata = {}
[[nexus.dataspace_catalog]]
alias = "team"
id = 42
description = "Private team dataspace"
fault_tolerance = 1
[[nexus.routing_policy.rules]]
lane = 5
dataspace = "team"
[nexus.routing_policy.rules.matcher]
account_prefix = "team."
description = "Route team domains to the private dataspace"在转移到用户交易之前,请检查:
- 在
/status节点响应中显示私人车道 - 用户帐户由您的私人登录流程接入
- 赞助商账户存在
- XOR 费用资产和费用清算账户在网络上有效
2. 在数据空间中注册资产
在将其传输到应用逻辑中之前,注册用户将在私人数据空间内保留的资产定义.对于本地代币费用模式,教程使用usage#billing.team:
<asset-name>#<domain>.<dataspace>
usage#billing.team首先设置拥有资产名称空间的域名和 SNS 租协议.为 $BILLING_DOMAIN创建一个无秘密的 AliasSetupPlanRequestV1意图,包括数值 team数据空间 ID,法定所有者,租期限和当前报价保护:
iroha --config ./operator.client.toml \
app alias setup plan \
--intent-file ./billing-domain.intent.json \
--plan-file ./billing-domain.plan.json
iroha --config ./operator.client.toml \
app alias setup apply --plan-file ./billing-domain.plan.json然后注册资产定义. 规范性 --id 是网络级资产定义 ID.开发人员和最终用户应该在数据空间代码中使用的称:
iroha --config ./operator.client.toml \
ledger asset definition register \
--id "$LOCAL_FEE_ASSET_ID" \
--name usage \
--alias "$LOCAL_FEE_ASSET" \
--scale 0在登录过程中将本地代币发货或转移给用户:
iroha --config ./operator.client.toml \
ledger asset mint \
--definition-alias "$LOCAL_FEE_ASSET" \
--account "$USER" \
--quantity 100检查用户的平衡:
iroha --config ./operator.client.toml \
ledger asset get \
--definition-alias "$LOCAL_FEE_ASSET" \
--account "$USER"使用数据空间中的应用资产的模式相同. 每个代币注册一个资产定义,给每个代码一个数据空间别名,并引用 SDK 代码的代号而不是硬编码的正规资产定义 IDs.
3. 登记用户姓名
账户仍然是常规的 I105 帐户 IDs.面向用户的名称是账户号,而号应是不敏感的手柄,如alice@team或alice@members.team.不要用电话号码或电子邮件地址作为号.这些都属于下一节的私人识别器流中.
姓名设置使用与域名设置相同的声明规划器.让 SDK 或登录服务创建一个无秘密的 AliasSetupPlanRequestV1意图,其帐户代号输入 目标 $USER,选择主要角色,键入数值数据空间 ID,并执行当前租报价保护.然后规划并将其作为一个原子交易:
iroha --config ./operator.client.toml \
app alias setup plan \
--intent-file ./user-alias.intent.json \
--plan-file ./user-alias.plan.json
iroha --config ./operator.client.toml \
app alias setup apply --plan-file ./user-alias.plan.json如果用户不应该支付 XOR,请使用批准的赞助商知情登录服务来构建和提交设置交易.不要将租收购和密号绑定分为独立申请交易.
在密名被绑定后,请从 CLI 检查:
iroha --config ./operator.client.toml \
app alias resolve --alias "$USER_ALIAS"
iroha --config ./operator.client.toml \
app alias by-account \
--account-id "$USER" \
--dataspace "$DATASPACE"对于创建新账户,最好使用稳定 uaid和必要时初始 label构建 NewAccount 的安装服务.简单的 ledger account register --id命令只会记录正规帐户 ID.
4. 通过 FHE 私下登记电话和电子邮件.
使用电话号码和电子邮件地址作为私人识别器索赔,而不是公开姓氏.支持 FHE 的流量将原始识别器排除在账户姓氏,交易元数据和世界状态之外:
- 运营商注册RAM-LFE/FHE 电话和电子邮件项目政策
- 运营商注册活跃标识策略,如
phone#team和email#team - 钱包将电话或电子邮件正常化.
- 钱包将加密值发送到解决器
- 解析器返回一个
IdentifierResolutionReceipt - 使用者将
ClaimIdentifier附收据提交 - 链存储一个不透明的标识符和收件哈希,而不是原始电话或电子邮件值.
运营商方策略设置是 SDK 或服务任务.为每个标识符类型构建并提交这些指令对:
RegisterRamLfeProgramPolicy(
program_id = "phone_team",
owner = "$POLICY_OWNER",
backend = "bfv-programmed-sha3-256-v1",
verification_mode = "signed",
commitment = "<HIDDEN_PROGRAM_POLICY_COMMITMENT>",
resolver_public_key = "<RESOLVER_PUBLIC_KEY>"
)
ActivateRamLfeProgramPolicy(program_id = "phone_team")
RegisterIdentifierPolicy(
id = "$PHONE_POLICY",
owner = "$POLICY_OWNER",
normalization = "PhoneE164",
program_id = "phone_team",
note = "Private phone registration for team dataspace"
)
ActivateIdentifierPolicy(policy_id = "$PHONE_POLICY")复制为电子邮件:
program_id = "email_team"
policy_id = "$EMAIL_POLICY"
normalization = "EmailAddress"在安装过程中,钱包或后端应本地正常化:
PhoneE164: "+15551234567"
EmailAddress: "alice@example.com"在第8步创建赞助商元数据文件后,提交使用者签署的索赔指示,并附上该元数据:
ClaimIdentifier(
account = "$USER",
receipt = IdentifierResolutionReceipt {
payload: {
policy_id: "$PHONE_POLICY",
opaque_id: "<OPAQUE_ACCOUNT_ID>",
uaid: "<USER_UAID>",
account_id: "$USER",
...
},
attestation: "<RESOLVER_SIGNATURE_OR_PROOF>"
}
)电流 CLI 不显示这些身份指令的输入命令.使用 SDK 生成序列化InstructionBox值,并通过 ledger transaction stdin提交它们:
printf '["<BASE64_CLAIM_IDENTIFIER_INSTRUCTION_BOX>"]\n' |
iroha --config ./alice.client.toml \
--metadata ./sponsored-fee.json \
ledger transaction stdin在安装服务中保留这些防护:
- 账户名字只能被人读取的手柄
- 原始电话和电子邮件值永远不会出现在号,元数据,日志或交易有效载荷中.
- 在申请私人标识符之前,该账户有
uaid - 收据结合
policy_id,opaque_id,uaid,account_id,并过期 - 解决方案密钥和隐藏程序承诺由治理控制
5. 启用节点上的赞助
费用赞助是节点/运行时间政策. 在 Nexus 费用配置中启用:
[nexus.fees]
fee_asset_id = "xor#universal"
fee_sink_account_id = "<FEE_SINK_ACCOUNT_I105_OR_ALIAS>"
base_fee = "0"
per_byte_fee = "0"
per_instruction_fee = "0.001"
per_gas_unit_fee = "0.00005"
sponsorship_enabled = true
sponsor_max_fee = "0"fee_asset_id是网络费用资产.对于 SORA Nexus,这是 XOR.使用您的网络所曝光的活跃 XOR 号或常规 XOR 资产定义 ID
sponsor_max_fee = "0"意味着没有每笔交易的赞助商上限. 在您知道数据空间交易的正常规模和气体配置后,设置非零限量.
在正常操作程序中重新启动或滚动这个配置.
6. 创建和资助赞助者
如果需要,生成一个赞助商关键对:
kagami keys --algorithm ed25519 --json将公钥转换为网络帐户格式:
iroha tools address convert \
--network-prefix <CHAIN_DISCRIMINANT> \
<SPONSOR_ED25519_PUBLIC_KEY_HEX>通过您的私人登录流程注册赞助商账户:
iroha --config ./operator.client.toml \
ledger account register --id "$SPONSOR"通过 XOR 从财政部,索赔账户或其他资助帐户为赞助商提供资金:
iroha --config ./treasury.client.toml \
ledger asset transfer \
--definition-alias "$XOR_ASSET" \
--account "$TREASURY" \
--to "$SPONSOR" \
--quantity 1000对于 Taira 试炼,除了水龙头助手 获取测试网 XOR 在 Taira 作为 taira_faucet_claim.py, 然后通过公共水龙头来资助赞助商,而不是财政转账:
export SPONSOR='<SPONSOR_TAIRA_I105_ACCOUNT_ID>'
export XOR_ASSET=6TEAJqbb8oEPmLncoNiMRbLEK6tw
python3 taira_faucet_claim.py "$SPONSOR"
iroha --config ./sponsor.client.toml \
ledger asset get \
--definition "$XOR_ASSET" \
--account "$SPONSOR"查看赞助商的 XOR 余额:
iroha --config ./operator.client.toml \
ledger asset get \
--definition-alias "$XOR_ASSET" \
--account "$SPONSOR"7. 让用户访问赞助商
赞助商必须允许每个用户向其收取费用.补贴是阻止用户命名任意赞助商账户的原因.
运行这个作为赞助商账户,或者作为一个经营帐户允许的运行时间政策:
printf '{
"name": "CanUseFeeSponsor",
"payload": {
"sponsor": "%s"
}
}\n' "$SPONSOR" |
iroha --config ./sponsor.client.toml \
ledger account permission grant --id "$USER"对于登录服务,将此作为一个正常的账户提供步骤,并记录:
- 用户帐户
- 赞助商账户
- 数据空间或应用
- 批准票或治理决定
检查用户的资助:
iroha --config ./operator.client.toml \
ledger account permission list --id "$USER"8. 附加赞助商的元数据
创建可重复使用的元数据文件:
printf '{
"fee_sponsor": "%s"
}\n' "$SPONSOR" > sponsored-fee.json用此元数据提交的任何笔记本将向赞助商收取:
iroha --config ./alice.client.toml \
--metadata ./sponsored-fee.json \
ledger transaction ping --msg "sponsored private-dataspace write"对于 SDKs,将相同的交易元数据对象添加到签署的交易中.用户用用户密钥签署交易.赞助商不会签署每个用户交易,因为之前的CanUseFeeSponsor授予是授权.
第一个模式:用户免费付款
在应用程序或运营商收取所有网络费时使用此方法.
开发者检查列表:
- 保持用户的正常交易有效载荷不变.
- 添加
fee_sponsor的交易元数据. - 作为用户签署.
- 通过私人数据空间路线提交.
用户帐户不需要 XOR 的余额.赞助商账户必须保持足够的 XOR 来支付配置的 Nexus 费用.
模式2:用户支付本地代币
如果用户不应该持有 XOR,但数据空间仍然需要内部应用程序费用,信用支出或配额代币时使用这个.
在这种模式下,本地代币是应用程序支付.它不是网络费资产.赞助商仍然支付网络费用在 XOR.
例如,在私人数据空间中使用本地代币:
usage#billing.team在登录,订阅更新或配额分配期间,资助用户使用 usage#billing.team.然后将用户交易变为原子:
- 将本地代币从用户转移到赞助商
- 执行所要求的应用程序操作
- 包含
fee_sponsor元数据,因此赞助商支付 XOR
一个最小的 CLI 烟雾测试仅仅是由 XOR 赞助的本地代币转移:
iroha --config ./alice.client.toml \
--metadata ./sponsored-fee.json \
ledger asset transfer \
--definition-alias "$LOCAL_FEE_ASSET" \
--account "$USER" \
--to "$SPONSOR" \
--quantity 1对于真正的应用程序,不要将本地代币支付作为一个单独的最佳努力交易.构建包含支付和业务指令的签名交易,或者在运行业务之前暴露收取本地代码的合同入口点.
在您的应用程序或合同中保存转换政策:
- 哪个操作成本多少个本地代币单位
- 如何支持本地代币输入地图 XOR 补充
- 如果用户平衡太低,会发生什么?
- 当赞助商 XOR 余额太低时会发生什么?
WARNING
不要使用 gas_asset_id 除非您希望赞助商在该气体资产中也收取费用. 在当前的运行时间, fee_sponsor 也使赞助商为配置管道气体资产借款的付款人.对于本地代币用户费用,通过转让或合同规则,明确收集代币.
检查未成功的赞助交易
常见的拒绝理由通常指向一个缺失的设置步骤:
| 错误文本 | 检查什么? |
|---|---|
fee sponsorship is disabled | nexus.fees.sponsorship_enabled 现在还在 false 在节点上. |
fee sponsor is not authorized | 用户没有 CanUseFeeSponsor用于此赞助商. |
fee asset ... is missing | 赞助商没有配置的 XOR 费用资产. |
fee balance ... is insufficient | 补充赞助商的 XOR 保持平衡. |
fee exceeds sponsor_max_fee | 增加 sponsor_max_fee或减少交易规模/气体. |
invalid nexus fee asset id | 固定 nexus.fees.fee_asset_id或 XOR 资产别名. |
在调试模式2时,检查两个平衡:
iroha --config ./operator.client.toml \
ledger asset get \
--definition-alias "$XOR_ASSET" \
--account "$SPONSOR"
iroha --config ./operator.client.toml \
ledger asset get \
--definition-alias "$LOCAL_FEE_ASSET" \
--account "$USER"运营赞助商
处理赞助商作为一个财政账户:
- 保持测试网,阶段化和主网的分别赞助钥匙
- 提醒赞助商 XOR 余额到达入学楼层
- 一旦交通特征化,设置非零限
sponsor_max_fee - 在您的应用程序或网关中赞助的笔记
- 当用户离开数据空间时,取消
CanUseFeeSponsor - 调整用户交易哈希,本地代币支付和赞助人 XOR 抵押金
取消用户的赞助权:
printf '{
"name": "CanUseFeeSponsor",
"payload": {
"sponsor": "%s"
}
}\n' "$SPONSOR" |
iroha --config ./sponsor.client.toml \
ledger account permission revoke --id "$USER"相关页面
- 连接到 SORA Nexus 数据库
- 通过 CLI运行 Iroha 3
- 资产
- 许可证
- 许可证代币