起链时将economicalModel = 0(Quota 模型),从管理员地址转token到地址A,交易记录显示成功,但是地址A中没有收到任何token,如果设置为1(charge模型)则可以正常接收token。是Quota模型不支持么?
CITA设置Quota模式的问题
是的
Quota 模型没有转账的概念(也就是账户没有 balance 的概念)
这个我们会在文档里面进行补充说明
你是说设置交易时候的 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 和以太坊中都是不存在的。我理解您的需求是用户发交易免费,但同时保留系统代币。下面是几个可能的解决方案:
- 设置 quotaPrice = 0,目前还不支持,不过已经建了 issue,不出意外很快会支持(https://github.com/cryptape/cita/issues/350)
- 设置经济模型为 quota 模式,发交易不需要手续费,同时设置一个 ERC20 代币作为默认代币,在用户层进行转换,用户使用上无感知。
你这里实现的 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)也可以部署合约,发送交易。
不过,一旦你选择将用将QuotaPrice将成非0, 就没有办法再将它设成0了。
不知这样能否满足你的要求?
这是个好主意,应该能解决楼主的问题了。不过要记得初始化设置为 0,之后还是可以设置为大于 0 的。反向则不行。
好的,我们暂时用起链时将QuotaPrice设置为0解决了问题,非常感谢
反向设置只能用 amend
不建议使用,如果需要我们可以提供操作手册
请提供下相关的操作手册,我们参考下,谢谢