希望你能在这种情况下帮我
几个月前,一个令牌已经被创建,并被发送到几个钱包。现在,开发人员希望为用户添加一些更好的功能。
用户需要向新契约发送相同数量(我们称之为100)的令牌,其中这100个令牌被交换成100个新令牌。
但需要注意的是,开发人员丢失了一个钱包,里面有一些令牌(大约30,000枚),如果有人发现了,他想排除在获得新令牌的可能性之外。
现在的问题是;
因此,基本上,我在寻找一种方式,以交换新的硬币从旧合同,并排除一个特定的钱包地址。
(如果您也可以添加标准代码)
谢谢你帮我:-)
发布于 2018-05-24 07:02:50
不幸的是,我不能对飞行的回答发表评论,但以下是一些需要注意的事情:
oldToken.trasnferFrom提取旧令牌余额。如果适当的话,可以考虑使用oldTokens,或者将其发送到address(this)。它将允许您执行双重检查并确保正确性。oldToken之后,考虑检查“前”和“后”的余额。不要盲目信任oldToken.trasnferFrom返回值,显式检查oldToken.balanceOf。发布于 2018-02-01 01:13:17
我不打算写出要使用的完整合同,但这里有一个简单的示例:契约/工作流使用审批/传输工作流,前提是原始令牌符合ERC20。您必须实现新令牌契约的ERC20方面。也没有办法阻止人们从丢失的钱包中发送->,另一个钱包,->,然后升级令牌。您所能做的最好是添加一个截止日期,当最后一次升级是可能的。
import 'ERC20.sol`;
contract NewToken{
ERC20 public oldToken;
address public addressToIgnore;
function NewToken(address _oldTokenAdddress, address _addressToIgnore){
oldTokenAddress=_oldTokenAddress;
addressToIgnore=_addressToIgnore;
}
function upgradeTokens(uint amountToUpgrade){
require(amountToUpgrade<=oldToken.balanceOf(msg.sender));
require(amountToUpgrade<=allowance(msg.sender, this));
require(msg.sender!=addressToIgnore);
if(transferFrom(msg.sender, 0x0, amountToUpgrade)){
//Mint the new tokens
}
}
}以下是一般流程:
approve(newTokenAddress, usersBalance),以允许新的令牌契约占用他们的余额。upgradeTokens(amountToUpgrade)。https://ethereum.stackexchange.com/questions/38149
复制相似问题