ERC20代币的集中授权 / 学习智能合约#21

token.jpg

ERC20有个恼人的转帐问题:如果有另外的智能合约需要调用ERC20合约,就需要先授权再转帐(approve + transferFrom)。如果你有多个智能合约需要调用ERC20,那你就需要一个一个授权再转帐,如上图所示,这真是艰难啊!

tokenproxy.jpg

有没有办法使用一个集中授权一个合约,别的合约调用它来转帐即可以了?上网查了下,有人使用了一个合约代理的功能来实现。如上图所示,你只需要授权一次即可,其它合约要转帐时就可以调用这个合约代理来转帐。这有点类似中央银行的功能。代码如下:

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;
    }
}

代理合约只有一个转帐的功能,也是它的核心功能。这样做完后就可以很方便地完成授权,网站在后期也可以更好地拓展。

Sort:  

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

2crm8l.jpg
@steemauto