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

时间:2021-05-21 18:48:38

标签: blockchain ethereum solidity

我已经在币安智能链上部署了一个合约。我现在想为这个合约添加时间锁定功能,以在一段时间内锁定一些代币。我知道智能合约是不可变的,因此无法更改已部署的合约。我的问题是:我可以部署一个只有时间锁定功能的新合约,与我已经部署的合约交互并锁定已经部署的合约的一些代币吗?简而言之,我想要做的是将一个新功能添加到一个已经部署的合约中,并带有一个新合约。这可能吗 ?我认为应该这样做,否则将没有任何方法可以向已部署的合同添加新功能,但我找不到任何相关教程。如果有办法,你们能指出我正确的方向吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

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

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


<块引用>

我可以部署一个只有时间锁定功能的新合约,与我已经部署的合约交互并锁定已经部署的合约的一些代币吗?

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

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