| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> Solidity之DelegateCall委托调用详解 -> 正文阅读 |
|
[区块链]Solidity之DelegateCall委托调用详解 |
前言在编写以太坊智能合约代码时,有些情况下(功能的解耦,分区明确)我们需要与其他合约进行交互。如果只是为了代码复用,可把公共代码单独抽离出来,部署到一个library中(类似util工具包),后面就可以直接引入使用了。但是library中不允许定义任何storage类型的变量,这就意味着library不能修改合约的状态。如果需要修改合约状态变量,我们就需要另外部署一个新合约,具体怎么操作呢? 贴个官方文档说明:
?通俗地理解就是如何调用另一个合约函数。 三种调用函数在 Solidity 中,call 函数簇可以实现跨合约的函数调用功能,其中包括 call、delegatecall 和 callcode 三种方式。
这些函数提供了灵活的方式与合约进行交互,并且可以接受任何长度、任何类型的参数,其传入的参数会被填充至 32 字节最后拼接为一个字符串序列,由 EVM 解析执行。在函数调用的过程中,Solidity 中的内置变量? 异同点
delegatecall 与 call 的区别1、如果我们知道目标合约ABI,可以直接使用函数签名调用。假设我们已经部署了一个名为“Storage”的简单合约,它允许用户保存一个val状态变量值。
我们要部署另一个名为“Machine”的合约,它是“Storage”合约的调用者。“Machine”引用“Storage”合约并更改val值,如下。
在这种情况下,我们知道“Storage”的 ABI 及其地址,这样我们就可以用地址初始化现有的“Storage”合约,ABI 告诉我们如何调用“Storage”合约的函数。 我们可以看到“Machine”合约调用“Storage”setValue()函数。 2、如果我们不知道目标合约 ABI,请使用 call 或 delegatecall调用。在解释call()和delegatcall()之前,了解EVM如何保存合约变量以理解后续内容将有很有帮助。 EVM如何保存字段变量到存储 在以太坊中,有两种保存合约字段变量的空间。一个是“memory”,另一个是“storage”。' foo is saved to storage' 意味着' foo'的值被永久记录到区块链上了。 EVM为字段变量分配槽号(slot number),有点抽象哈。
?因为first在“Sample1”中首先声明,所以它被分配了0号槽位。每个不同的变量由它的槽号来区分。
顾名思义,DelegateCall是调用方合约如何调用目标合约函数的调用机制,但当目标合约执行其逻辑时,上下文不是在执行调用方合约的用户上,而是在调用方合约上。 ?那么当合约委托调用到目标合约时,存储的状态将如何改变? delegatecall合约测试
?关于如何操作此合约的步骤,我会单独录制一小段视频来介绍,有兴趣或动手能力强的小伙伴可以对照着注释调试哈。其实呢delegatecall函数设计的初衷是使用给定地址的代码,其他信息则使用当前合约(如存储、余额等),某种程度上也是为了代码的复用吧。 欢迎━(*`?′*)ノ亻!博友们发现问题和提出宝贵建议,谢谢! 参考资料:https://medium.com/coinmonks/delegatecall-calling-another-contract-function-in-solidity-b579f804178c |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 19:27:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |