> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# 代理合约

> 在 Tenderly 中导入代理合约、查看其实现和历史目标地址，并将非标准合约转换为代理合约。

<Note>
  在使用代理合约模拟交易时，Tenderly 会同时显示代理合约以及它所委托的合约中的所有函数，方便您更轻松地进行[调试和源码编辑](/debugger/overview)。
</Note>

<img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Screenshot%202021-10-14%20at%2016.17.04.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=aeea939cb83ff93c6ab1b4cd8bdcea0d" alt="" width="2880" height="1306" data-path="images/Screenshot 2021-10-14 at 16.17.04.webp" />

代理合约基本上只包含一个变量，即用于转发交易的目标地址。它们主要用于简化合约版本管理或错误修复：如果您想更改智能合约，可以进行新的部署而无需担心依赖关系，只需将代理合约中的目标地址更改为新更新的合约即可。

您可以通过标准流程导入任何合约：

<img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Screenshot%202021-10-14%20at%2016.23.09.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=fd02bef92cebc285a2e36c341f44b965" alt="" width="2880" height="1306" data-path="images/Screenshot 2021-10-14 at 16.23.09.webp" />

Tenderly 会自动检测代理合约，并为您提供同时添加其最新实现的选项：

<img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Screenshot%202021-10-14%20at%2016.24.23.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=0c0f6cc012c13fc439e397527d17ad0b" alt="" width="2880" height="1230" data-path="images/Screenshot 2021-10-14 at 16.24.23.webp" />

<img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Screenshot%202021-10-14%20at%2016.25.05.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=c591dfc680eac559f90d84a2f5334bc6" alt="" width="2880" height="1230" data-path="images/Screenshot 2021-10-14 at 16.25.05.webp" />

<img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Screenshot%202021-10-14%20at%2016.25.42.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=5e172dbf4a714e0ddc35f47b6a9b7544" alt="" width="2880" height="1230" data-path="images/Screenshot 2021-10-14 at 16.25.42.webp" />

您还可以查看为您的代理合约设置过的所有历史目标地址：

<img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Screenshot%202021-10-14%20at%2016.26.29.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=3c275cad2a346440fa5a6b2de81bc686" alt="" width="2880" height="1230" data-path="images/Screenshot 2021-10-14 at 16.26.29.webp" />

此外，如果您的合约用作代理但未符合当前行业标准，您可以将任何合约转换为代理合约：

<img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Screenshot%202021-10-14%20at%2016.28.13.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=b6bc4a32c37215bbcf6ecad6e7c576ab" alt="" width="2880" height="1230" data-path="images/Screenshot 2021-10-14 at 16.28.13.webp" />

如果您导入的代理合约不符合 Tenderly 自动检测的两种行业标准（EIP-1967 和 EIP-1167），您现在可以轻松地将该代理合约转换为 Tenderly 可识别的形式。

如果您使用的是上述两种标准之外的其他标准，您可以提供合约中定义的、返回实现地址的 view 函数。您还可以手动设置包含实现地址的存储[槽位](https://docs.soliditylang.org/en/v0.8.11/internals/layout_in_storage.html#layout-of-state-variables-in-storage)，将该合约转换为代理。

<img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Screenshot%202022-04-14%20at%2013.42.06.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=baf27e8d2ec58c54d5a678e9feaecdcb" alt="" width="2556" height="977" data-path="images/Screenshot 2022-04-14 at 13.42.06.webp" />

Tenderly 会列出所有不带参数且返回类型为 `address` 的函数，您可以选择一个返回被代理合约实现地址的函数。您还可以选择发送该交易的账户，这一点很重要——如果您选择的代理合约函数具有特定的执行规则（例如仅可从特定地址调用），此设置就尤为关键。

<img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Screenshot%202022-04-14%20at%2013.45.17.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=b6f06b95e94a9043320c93f1c102e7d5" alt="" width="2556" height="977" data-path="images/Screenshot 2022-04-14 at 13.45.17.webp" />

<img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Screenshot%202022-04-14%20at%2013.50.05.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=3e8bb80f25d8ae4f87ee1fca78c85042" alt="" width="2556" height="977" data-path="images/Screenshot 2022-04-14 at 13.50.05.webp" />

如果您更喜欢通过实现槽位哈希导入代理合约的方式，仍然可以通过切换 `use storage slot` 开关来使用该方式。
