什么是delegatecall与代理模式

概述

  • 合约升级问题:代理模式
  • 软件复用:library
  • 技术基础:delegatecall

知识储备

存储布局

Storage loyout

  • 成员变量按照它们出现的顺序在storage中按照一种规则次第堆放,这使得每个成员变量具有固定的的位置。在slot中一个变量从低位开始存
    在这里插入图片描述

值类型堆叠规则

  • 值类型需要的空间就是这个数据类型的数据块大小(字节)
  • 值类型数据如果不能在当前slot剩余空间存得下则新起一个slot
  • 结构和数组不会与其他数据分享slot,之前或者之后

动态数组和映射

  • 动态数组和mapping参与成员变量的堆叠占有一个32位的slot,但数据通过哈希运算存在别的存储slot中,不参与堆叠
  • 动态数组的slot存放数组大小,mapping空着
    在这里插入图片描述
    一个合约有成员变量,每个成员变量根据它的类型占有固定长度的空间并按照规则堆叠上去。这个成员变量序列的布置是固定的,每个成员变量的位置是固定的。
  • 合约编译成的机器码是用这个位置来访问它的!在幕后,合约机器代码只认位置,不认变量名称!

Layout中的递归与继承

  • Struct和array的数据的堆叠跟上述成员变量的堆叠规则一样
  • 对于合约继承,按照C3线性化的结果以此堆叠,并且允许父子数据共存于一个slot
  • 如官方文档所言,layout原则并不是内部技术,而是与语言的外部行为有关的!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值