【发布时间】:2021-06-18 09:09:24
【问题描述】:
我正在使用solidity 编程语言并尝试实现一个合同,每笔交易都扣除税费,并且该税费应转移到正在创建的合同的某个特定地址。这可能吗?
【问题讨论】:
标签: blockchain ethereum solidity
我正在使用solidity 编程语言并尝试实现一个合同,每笔交易都扣除税费,并且该税费应转移到正在创建的合同的某个特定地址。这可能吗?
【问题讨论】:
标签: blockchain ethereum solidity
是的,这是可能的。所有以太坊代币标准(ERC-20、ERC-721、...)只定义了一个接口和几个其他点(例如何时发出事件)。因此,您可以随意实现所需的方法。
假设您有一个非常简单的transfer() 实现,没有任何费用。
注意:这不符合 ERC-* 标准,并且在 Solidity integer overflow 的攻击。我已对其进行了简化以更好地显示计算结果。
function transfer(address _to, uint256 _amount) external {
balances[msg.sender] -= _amount;
balances[_to] += _amount;
}
添加费用只是一个小计算:
address admin = address(0x123);
function transfer(address _to, uint256 _amount) external returns (bool) {
uint256 fee = (_amount / 100) * 3; // Calculate 3% fee
balances[msg.sender] -= _amount; // subtract the full amount
balances[admin] += fee; // add the fee to the admin balance
balances[_to] += (_amount - fee); // add the remainder to the recipient balance
}
注意:这是为了演示基础知识,并没有考虑到少数情况,例如 _amount 的值不能被 100 整除(在这种情况下,费用不会正好是 3%) .
【讨论】:
transfer() 令牌无法以任何方式连接到更大的 DeFi 生态系统。
require 实现自定义检查或使用SafeMath 等库。
admin 地址值定义为您持有私钥的地址。然后,您可以像转移任何其他令牌一样(从管理员地址)转移令牌 - 通过调用 transfer() 函数。