type
status
date
slug
summary
tags
category
icon
password
以太坊中的账户
以太坊中有两种账户,它们共享相同的地址空间:
- 外部账户由公私钥对控制,也就是人类控制
- 合约账户由与账户一起存储的代码控制
外部账户的地址由公钥确定,而合约的地址在合约创建时确定(它是从创建者的地址和从该地址发送的交易数量,即所谓的“nonce”派生而来)。
交易
交易是从一个账户发送到另一个账户的消息。它可以包含二进制数据(有效载荷)和以太币。
如果目标账户包含代码,则执行该代码,并将有效载荷作为输入数据。
这句话我不是很理解,让AI给解释了一下,AI真好用,要多用

gas
每个交易都会被收取一定的gas,由交易的发起者(
tx.origin
)提供。当EVM执行交易时,gas会根据规则逐渐耗尽。如果在任何时候gas耗尽(即变为负数),则会触发超出gas异常,这将结束执行并撤销当前调用帧中对状态所做的所有修改。
该机制鼓励经济地使用EVM执行时间,并补偿EVM执行者(矿工、质押者)的工作。
gas价格是由交易的发起者设置的值,发起者必须提前支付gas。如果执行后有gas剩余,则会返还给发起者。
存储、临时存储、内存和栈
- 存储:每个账户都有一个被称为存储的数据区域。该区域的存储是持久的,但操作成本也高。
- 可以把它想象成家里的保险柜,存放的东西会一直保留,但是每次打开和关闭的操作成本很高,需要支付昂贵的gas
- 保险柜只能你自己使用,也就是合约只能操作自己的存储
- 取放东西越频繁,费用越高(存储初始化和修改成本高)
- 应该只存真正重要的东西(比如账户余额),其他的杂物(比如计算中间值)不要往里放
- 临时存储:数据仅在一次交易内有效,成本低
- 可以把它想象成办公室里开会用的白板,可以在上面写临时的笔记
- 会议结束(交易结束)后,白板会被擦干净
- 写字和擦除的成本都很低
- 适合临时记东西,比如处理交易时的中间状态
- 内存:每次调用函数会被分配新内存,可按需扩展是成本递增
- 可以把它想象成草稿纸,每次做数学题都会有几张新的,每页纸可以写的字数是有限的(256位的字)
- 刚开始用的几张纸是很便宜的,但是如果你需要更多纸(扩展内存),每加一页纸的价格会越来越贵(gas按照平方级增长)
- 题目做完(函数执行完),草稿纸会被粉碎(内存会释放)
- 可以用来短期计算
- 栈:所有计算在此进行,只能操作最顶部的元素
- 最大为1024个元素,包含256位的字
- 可以将顶部的16个元素中的一个复制到栈顶,或将栈顶元素与下面的16个元素中的一个交换
- 所有其他操作从栈中取出顶部一个或多个元素,并将结果推送到栈顶
- 在未移除栈顶元素的情况下,无法直接访问栈中更深处的任意元素
总结:
- 存储:存关键资产,尽量少动它
- 临时存储:记临时数据,用完就丢
- 内存:适合复杂运算,但是不要写太多
- 栈:专心做基础运算,要小心栈溢出
EVM 就像一个精打细算的管家,每用一次工具都要收费(Gas)。
设计合约时,重要数据放保险柜(存储),临时数据写白板(临时存储),复杂计算用草稿纸(内存),基础操作靠叠盘子(栈)!
类型
solidity是一种静态类型语言,它的每个变量,都需要被指定类型。
值类型
值类型足够小,不指定存储位置,可以存储在栈上。它们的变量总是按值传递,也就是作为函数参数或赋值的时候,总是被复制。
- 布尔类型
!
逻辑非&&
逻辑与||
逻辑或==
相等!=
不相等
可能的值是
true
、false
- 整型
int
/uint
:各种大小的有符号和无符号整数。关键字uint8
到uint256
以8
为步长和int8
到int256
。uint
和int
分别是uint256
和int256
的别名。地址类型
地址类型有两种基本相同的变体:
address
:保存一个20字节的值,以太坊地址的大小
address payable
:与address
相同,但具有额外的成员transfer
和send
address payable
可以隐式地转为address
类型,但是address
到address payable
的转换必须显示地使用payable<address>
进行。如果你需要
address
类型的变量,并计划向其发送以太币,那么将其类型声明为address payable
可以明确的表达你的需求。此外,应尽早进行这种区分和转换。- Author:web3a8
- URL:http://preview.tangly1024.com/article/solidity%E4%B8%8E%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!