对于实现ERC20的新合约而言,唯一的区别在于ERC777TokensSender和ERC777TokensRecipient通过ERC820的注册必须早于ERC20的注册。这意味着即使是对ERC20的transfer方法的调用,代币合约也必须通过ERC820检查from或to是否实现了tokensToSend/tokensReceived接口并在可用时进行调用。注意当调用合约的ERC20的transfer方法时,如果合约...
但是, tokensToSend() 和 tokensReceived() 的强大之处在于,它们不是由合约地址定义的,而是分别位于代币发送方和接收方的合约内。由此一来,发送方和接收方就有权决定是否要达成交易,还可以实现更高级的功能。 tokensToSend() 允许持币者以 “在代币离开该账户之前” 的形式提供条件和操作。 tokensReceived() 允...
因此 ERC777TokensSender 实现会被多个ERC777合约调用,在ERC777TokensSender接口的实现合约里, msg.sender 是ERC777合约地址,而不是操作者。 ERC777TokensRecipient 接口定义如下: interfaceERC777TokensRecipient{functiontokensReceived(addressoperator,addressfrom,address to,uint256 amount,bytes calldata data,bytes calld...
interfaceERC777TokensRecipient{functiontokensReceived(address operator,address from,address to,uint256 amount,bytes calldata data,bytes calldata operatorData)external;} 如果接收者希望在转账时收到代币转移通知,就需要在ERC1820合约上注册及实现ERC777TokensRecipient接口。 如果接收者是一个合约地址, 则必须要注册及...
如果持有者有通过 ERC1820 注册ERC777TokensSender实现接口, 代币合约必须调用其tokensToSend钩子函数。 如果接收者有通过 ERC1820 注册ERC777TokensRecipient实现接口, 代币合约必须调用其tokensReceived钩子函数。 如果有tokensToSend钩子函数,必须在修改余额状态之前调用。
(TokenValue).toString(), (await ERC777Instance.balanceOf(sender)).toString()); }); it('测试剩余代币数量: remainingTokens()', async function () { assert.equal(ether((parseInt(totalSupply) - parseInt(TokenValue)).toString()).toString(), (await CrowdsaleInstance.remainingTokens()).toString()...
对于实现ERC20的新合约而言,唯一的区别在于ERC777TokensSender和ERC777TokensRecipient通过ERC820的注册必须早于ERC20的注册。这意味着即使是对ERC20的transfer方法的调用,代币合约也必须通过ERC820检查from或to是否实现了tokensToSend/tokensReceived接口并在可用时进行调用。注意当调用合约的ERC20的transfer方法时,如果合约...
interface ERC777TokensRecipient { function tokensReceived( address operator, address from, address to, uint256 amount, bytes calldata data, bytes calldata operatorData ) external; } 用来同时发送者和接收者进行相应的响应,当然发送者和接收者也可以选择不响应(不实现接口)。
可以看到release函数,释放代币时,是先进行的转账处理,然后在清理的数据,加上token本身是777代币,那么这里就存在重入攻击。 这里主要讲怎么利用ERC777代币重入.首先看到_callTokensToSend函数,由于这里的from地址是该合约地址,那么这里就无法利用。 因为要利用_callTokensToSend函数回调的话,必须在ERC1820合约注册,而注册...
This is an interesting proposal, but I worry about the entire ecosystem having to migrate to new multisig wallets in order to be able to receive ERC777 tokens. It seems like there was an attempt made to create a whitelist of contracts that one can safely transfer to even if they do not...