第一个智能合约
集成开发环境Remix
remix.ethereum.org/#lang=en&op…
脚本语言 Solidity
这个我感觉没啥,程序员出身,就是了解下
- 基础数据类型
- 函数写法
// 声明一个智能合约,名为SimpleStorage
contract SimpleStorage {
// 定义一个名为favoriteNumber的公开变量,类型为uint256。
uint256 public favoriteNumber;
// 定义一个名为store的公开函数,接受一个名为_favoriteNumber的uint256类型的参数。
function store(uint256 _favoriteNumber) public {
// 这意味着每当这个函数被调用时,favoriteNumber的值都会被更新为函数调用时传入的值。
favoriteNumber = _favoriteNumber;
}
}
简单的交易流程
- 点击编译,如果出现绿色√证明程序运行正确
- 点击部署,出现下面的交易就意味着部署成功了
这里的Account是虚拟的,每个账户都配有一个以太(ETH)余额。这些账户和余额完全是虚拟的,用于在Remix的虚拟Ethereum环境中进行测试和开发,使开发者能够模拟智能合约的交互和以太币的转账,而无需连接到实际的以太坊网络。
可以看到当我们成功部署了一个合约时,eth被消耗了
- 执行交易,点开我们部署好的合约
可以看到我们声明的store函数,在输入框中输入数字,点击store,就可以执行函数了
关键字view和pure
view
不进行任何交易操作,只是读取数据
pure
不进行任何交易操作,也不能读取数据,但是可以得到一些结果
数据类型Struct
我理解就是JavaScript中的对象类型
数组
其实有编程基础,这都很好理解,定义一个struct类型的变量People
声明一个数组people,里面元素的类型就是People
用People创造一个People类型的变量,然后push进去people数组,就可以读到啦
但是这里出现了一个新的标识符memory
memory
关键字表明newPerson
是一个临时变量,它将在内存中创建一个People
类型的新实例,其生命周期仅限于当前函数调用。- 在这个示例中,使用
memory
意味着newPerson
变量在函数执行完毕后不会被保存到区块链上,它仅用于函数内部的计算或逻辑处理。 ———————————————————————————————————————
Storage、Memory、Calldata
Storage
storage
用于持久存储数据,其数据存储在区块链上。storage
变量是永久的,即它们会在交易之间持久保存。- 修改
storage
数据会耗费更多的Gas,因为这会永久改变区块链的状态。
Memory
memory
用于临时存储数据,其数据仅在外部函数调用的上下文中存活。memory
变量在函数调用结束后即被清除,不会永久存储在区块链上。- 使用
memory
比storage
更加节省Gas,因为它不会修改区块链的状态。
Calldata
calldata
是一种不可变、只读的存储位置,专门用于存储函数的输入参数。calldata
类型的变量在整个函数调用过程中都是不可变的。- 与
memory
类似,calldata
也是一种临时的数据存储方式,但它更加节约Gas。
Mapping
复合类型,这个也好理解,看看就懂