Blockchain 如何向已部署的智能合约添加功能

Blockchain 如何向已部署的智能合约添加功能,blockchain,ethereum,solidity,Blockchain,Ethereum,Solidity,我已经在Binance智能链上部署了一个契约。我现在想在这个契约中添加时间锁定功能,在一段时间内锁定一些令牌。我知道智能合约是不可变的,因此无法更改已部署的合约。我的问题是:我可以部署一个新的契约,它只具有与我已经部署的契约交互的时间锁定功能,并锁定已经部署的契约的一些令牌吗?简而言之,我想做的是用一个新契约向已经部署的契约添加一个新函数。这可能吗?我认为应该这样做,因为否则就不会有任何方法向已部署的契约中添加新功能,但我找不到任何关于这方面的教程。如果有办法的话,你们能告诉我正确的方向吗 非常

我已经在Binance智能链上部署了一个契约。我现在想在这个契约中添加时间锁定功能,在一段时间内锁定一些令牌。我知道智能合约是不可变的,因此无法更改已部署的合约。我的问题是:我可以部署一个新的契约,它只具有与我已经部署的契约交互的时间锁定功能,并锁定已经部署的契约的一些令牌吗?简而言之,我想做的是用一个新契约向已经部署的契约添加一个新函数。这可能吗?我认为应该这样做,因为否则就不会有任何方法向已部署的契约中添加新功能,但我找不到任何关于这方面的教程。如果有办法的话,你们能告诉我正确的方向吗


非常感谢。

向合同中添加功能的常用方法是使用可升级代理模式。OpenZeppelin有一个很好的例子来解释这种模式

简而言之:您的面向用户的合同没有任何功能,除了某个实现的代理,以及从授权地址更改代理设置的功能。当需要升级时,只需将较新的实现部署到不同的地址,并在代理中反映新的地址。由于
delegatecall
的工作方式,它使用代理合约的存储。当您开始使用新的实现契约时,存储的值保持不变


我是否可以部署一个新契约,该契约只具有与我已经部署的契约交互的时间锁定功能,并锁定已经部署的契约的一些令牌

如果您试图锁定现有令牌,这将不起作用。原始合同无法调用新合同来检查是否允许转让代币,或者代币是否被锁定

但是,如果您在原始合同中有造币功能,您可以造币属于锁合同的新代币。锁定合同将允许一些授权用户在一段时间后(即timelock)使用其拥有的代币