Skip to content

Commit

Permalink
Update Passi0n1.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Passi0n1 authored Sep 29, 2024
1 parent b10d056 commit fadc329
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions Passi0n1.md
Original file line number Diff line number Diff line change
Expand Up @@ -517,4 +517,48 @@ contract Example {
constant 可以用于业务手续费,一些元数据的存放,而 immutable 更适合于 `有些情况下,不可变的值需要在合约部署时根据外部输入来确定。例如,一个去中心化金融(DeFi)合约可能需要根据用户的初始存款来设置某些参数。`
### 2024.09.29
#### 学习笔记
不同类型的引用变量相互赋值时,修改其中一个的值,不会导致另一个的值随之改变的是以下哪种情况:
选择一个答案
A. 合约中的 storage 赋值给本地的 storage
B. 合约中的 memory 赋值给本地的 memory
C. 合约中的 storage 赋值给本地的 memory
D. 以上全部
```
在以太坊智能合约中,变量的存储位置主要有三种:storage、memory 和 calldata。它们之间的赋值和修改行为如下:
A. 合约中的storage赋值给本地的storage:这种情况下,赋值实际上是一个引用赋值。如果修改了本地storage变量的值,合约中的storage变量的值也会随之改变。
B. 合约中的memory赋值给本地的memory:memory 是一个临时存储区域,通常用于函数调用时传递参数或局部变量。如果一个memory变量被赋值给另一个memory变量,它们是相互独立的副本,修改一个不会影响另一个。
C. 合约中的storage赋值给本地的memory:这种情况下,memory变量会获得storage变量的一个副本。修改memory中的副本不会影响storage中的原始值。
根据上述解释,正确答案是:
B. 合约中的memory赋值给本地的memory
以及
C. 合约中的storage赋值给本地的memory
因为这两种情况下,修改其中一个变量的值不会导致另一个变量的值随之改变。选项A会导致值的改变,因为它们是引用同一个存储位置。选项D不正确,因为它包含了A选项。
```
但是感觉还是不对,需要再看看。
消耗 gas 最多的变量类型为:
A. 状态变量
B. 局部变量
C. 全局变量
```
A. 状态变量
解释:
在 Solidity 中,不同类型的变量对 gas 消耗的影响是不同的。其中,状态变量是消耗 gas 最多的变量类型。
• 状态变量: 存储在链上,是永久性的,每次读写都会消耗 gas。初始化一个新的存储槽需要 20000 gas,修改一个已有的存储槽需要 5000 gas。
• 局部变量: 存储在内存中,是临时的,函数调用结束后会被销毁。相对于状态变量,局部变量的 gas 消耗较小。
• 全局变量: 在 Solidity 中没有明确的全局变量概念。如果指的是合约级别的变量,那么通常是指状态变量。
```
<!-- Content_END -->

0 comments on commit fadc329

Please sign in to comment.