# Solidity - 理解call和delegatecall **Published by:** [Lujet](https://paragraph.com/@lujet/) **Published on:** 2023-11-06 **URL:** https://paragraph.com/@lujet/solidity-call-delegatecall ## Content 理解call和delegatecall使用ABI编码的方式调用合约函数, 为函数调用提供了抽象能力。 使用合约地址进行底层调用:底层调用失败不是发生异常(revert), 而是用返回值表示call()调用切换上下文delegatecall()调用保持上下文**(只是使用了目标合约的代码逻辑,数据还是调用方的数据)**call和delegatecall的区别delegatecall 的应用场景:代理合约(Proxy Contract):将智能合约的存储合约和逻辑合约分开; 代理合约存储所有相关的变量,并且保存逻辑合约的地址;逻辑合约存储所有函数,通过delegatecall执行。当升级时,只需要将代理合约指向新的逻辑合约即可。EIP-2535 Diamonds(钻石):钻石是一个支持构建可在生产中扩展的模块化智能合约系统的标准。钻石是具有多个实施合同的代理合同。 ## Publication Information - [Lujet](https://paragraph.com/@lujet/): Publication homepage - [All Posts](https://paragraph.com/@lujet/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@lujet): Subscribe to updates