CITA设置Quota模式的问题

起链时将economicalModel = 0(Quota 模型),从管理员地址转token到地址A,交易记录显示成功,但是地址A中没有收到任何token,如果设置为1(charge模型)则可以正常接收token。是Quota模型不支持么?

是的

Quota 模型没有转账的概念(也就是账户没有 balance 的概念)

这个我们会在文档里面进行补充说明

@kaikai 那如果设置charge模型,可以将交易配置设置为0么,即取消交易配额?如何设置?我们试了下文档中修改交易配置的命令,好像不能设置为0

你是说设置交易时候的 quota 吗,每个不同的交易都有基本的交易费用,都会至少消耗一定量的配额数值,
比如交易是 2300(这个我之后确认一下)

是交易的quota,用命令无法修改为0,如果有修改为0的方法请告知,谢谢

您好,在 Charge 模型下,执行交易时可以指定 quota 的数额,如果不指定,cli 会按照默认的 quota 值填充,如果你指定 quota 等于0,但是在 charge 模型下,会报 Not enough base quota. 的错误。

在quota模式下的交易都是要消耗quota的。
我理解你的诉求可能是:
在Charge模式下,用户在没有balance的情况下,能够正常使用CITA链,其中包括但不限于发送交易
对吗?

如果是这样,你可以考虑用superAdmin把quotaPrice设置为0.
参考这里

你可以考虑用superAdmin把quotaPrice设置为0.

quotaPrice 是不能设置为零的

不可以的,类似 ethereum,每个交易都有交易费用。

ethereum 的交易费用是给矿工的,我们默认是给共识节点的,但是可以交易费用设置为某个账户的

但是可以交易费用设置为某个账户的
这句话的意思是不是说,在当前合约下所有的交易费用都由某个固定的账户支付,例如合约的owner,而且所有使用合约进行的交易的用户都不需要自己出交易费用?如何将交易费用设置为某个固定用户呢?

我说的有点误解,我刚刚意思是产生的交易费用可以设置给某个账户。

交易费用一定是要 sender 扣除的,假设我上面说的你设置了账户A 为交易费用的获益者,A 发的交易扣除的交易费用就会流回给A,是一个闭环的循环。
其他账户B可以协商定期从 A 获取,也可以实现类似免费的机制

不是的,代交费功能目前在 CITA 和以太坊中都是不存在的。我理解您的需求是用户发交易免费,但同时保留系统代币。下面是几个可能的解决方案:

  1. 设置 quotaPrice = 0,目前还不支持,不过已经建了 issue,不出意外很快会支持(https://github.com/cryptape/cita/issues/350)
  2. 设置经济模型为 quota 模式,发交易不需要手续费,同时设置一个 ERC20 代币作为默认代币,在用户层进行转换,用户使用上无感知。

@cipher case2如何实现呢?
我们测试时将economicalModel = 0(Quota 模型),从管理员地址转token到地址A,交易记录显示成功,但是地址A中没有收到任何token

你这里实现的 token 还是系统代币,economicalModel = 0 下系统代币是无效的。我建议的是在 economicalModel = 0 条件下,部署一个 ERC20 代币,作为默认代币,在客户端实现转账、余额查询等功能。

现在CITA可以支持在创建链的时候将QuotaPrice设置成0.

./scripts/create_cita_config.py create --super_admin "0x4b5ae4567ad5d9fb92bc9afd6a657e6fa13a2523" --nodes "127.0.0.1:4000,127.0.0.1:4001,127.0.0.1:4002,127.0.0.1:4003" --contract_arguments SysConfig.economicalModel=1 PriceManager.quotaPrice=0

链启动后,查询(进入cita-cli命令行):

cita> scm PriceManager getQuotaPrice
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

我尝试了一下,一个普通用户(没有balance)也可以部署合约,发送交易。

1赞

不过,一旦你选择将用将QuotaPrice将成非0, 就没有办法再将它设成0了。

不知这样能否满足你的要求?

这是个好主意,应该能解决楼主的问题了。不过要记得初始化设置为 0,之后还是可以设置为大于 0 的。反向则不行。

好的,我们暂时用起链时将QuotaPrice设置为0解决了问题,非常感谢

1赞

反向设置只能用 amend
不建议使用,如果需要我们可以提供操作手册

1赞

请提供下相关的操作手册,我们参考下,谢谢