ERC20有个恼人的转帐问题:如果有另外的智能合约需要调用ERC20合约,就需要先授权再转帐(approve + transferFrom)。如果你有多个智能合约需要调用ERC20,那你就需要一个一个授权再转帐,如上图所示,这真是艰难啊!
有没有办法使用一个集中授权一个合约,别的合约调用它来转帐即可以了?上网查了下,有人使用了一个合约代理的功能来实现。如上图所示,你只需要授权一次即可,其它合约要转帐时就可以调用这个合约代理来转帐。这有点类似中央银行的功能。代码如下:
pragma solidity >=0.4.22 <0.7.0;
interface TokenToProxy {
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}
contract TokenProxy {
TokenToProxy token = TokenToProxy(0xF7ce62C8b520CD4246E31E0FCd22425497651042);
function transferFromProxy(address recipient, uint256 amount)
public
returns (bool)
{
token.transferFrom(tx.origin, recipient, amount);
return true;
}
}
代理合约只有一个转帐的功能,也是它的核心功能。这样做完后就可以很方便地完成授权,网站在后期也可以更好地拓展。
Hey ..
It would be great if you can post your thread bilingual ..
I knew your country got more people who speak mandarin, then my country, were WE speak German a/o English ..
But for the rest of our world, it's not easy to translate your text ..
It was just a thought of myself & maybe I brought you to think about it ...
Greetings/Grüße olllieeee
My lastest project #aim
@steemauto