Negative balances not allowed

Interface Trip Stop - SRS 有警告Negative balance not allowed.不能自动创建发票
链接:http://www.itpub.net/thread-375321-1-1.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/356396/viewspace-680503/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/356396/viewspace-680503/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个基于Solidity语言编写的SMT合约中的 "transferProxy" 函数。下面对其进行详细解释: ```solidity function transferProxy(address _from, address _to, uint256 _value, uint256 _feeSmt, uint8 _v,bytes32 _r, bytes32 _s) public transferAllowed(_from) returns (bool){ ``` - 函数名:transferProxy - 参数: - _from:要转移代币的账户 - _to:接收代币的账户 - _value:要转移的代币数量 - _feeSmt:转账手续费 - _v, _r, _s:用于验证签名的参数 - 修饰符:transferAllowed(_from) - 返回值:bool类型,表示转账是否成功 ```solidity if(balances[_from] < _feeSmt + _value) revert(); ``` 该语句用于判断转账账户的余额是否足够支付转账金额和手续费。如果余额不足,则抛出异常,转账失败。 ```solidity uint256 nonce = nonces[_from]; bytes32 h = keccak256(_from,_to,_value,_feeSmt,nonce); if(_from != ecrecover(h,_v,_r,_s)) revert(); ``` 该语句用于验证转账操作的签名是否合法。SMT合约中通过使用_ecrecover函数来验证签名是否合法。具体而言,该语句首先获取转账账户的nonce值,然后使用keccak256哈希函数对转账参数进行哈希,最后使用_ecrecover函数对哈希结果进行验证。如果签名验证失败,则抛出异常,转账失败。 ```solidity if(balances[_to] + _value < balances[_to] || balances[msg.sender] + _feeSmt < balances[msg.sender]) revert(); ``` 该语句用于检查接收代币的账户和手续费支付账户的余额是否足够接收代币和手续费。如果余额不足,则抛出异常,转账失败。 ```solidity balances[_to] += _value; Transfer(_from, _to, _value); balances[msg.sender] += _feeSmt; Transfer(_from, msg.sender, _feeSmt); balances[_from] -= _value + _feeSmt; nonces[_from] = nonce + 1; ``` 该语句用于完成转账操作。具体而言,该语句首先将要转移的代币数量加到接收代币的账户中,并触发Transfer事件;然后将转账手续费加到手续费支付账户中,并触发Transfer事件;最后从转账账户中扣除转移的代币数量和手续费,并将nonce加1,表示转账操作的nonce值已经使用过。 最后,函数返回true,表示转账操作成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值