solidity之Storage与Memory

在solidity中,两个地方存储变量,分别是storage和memory。Storage变量是永久存在区块链中的变量,而memory变量则是临时的,当外部函数对某合约调用完成时memory即被移除。 但其实大多数时候你都用不到这些关键字,默认情况下 Solidity 会自动处理它们。 下面以一个例子来说明 contract SandwichFactory { struct Sandwich { string name; string status; } Sandwich[] sandwiches; function eatSandwich(uint _index) public { // Sandwich mySandwich = sandwiches[_index]; // ^ 看上去很直接,不过 Solidity 将会给出警告 // 告诉你应该明确在这里定义 `storage` 或者 `memory`。 // 所以你应该明确定义 `storage`: Sandwich storage mySandwich = sandwiches[_index]; // ...这样 `mySandwich` 是指向 `sandwiches[_index]`的指针 // 在存储里,另外... mySandwich....

April 26, 2021 · 1 min · Rufus

Solidity之数组

在最近看到的Solidity语言里面的数组的定义和之前学的稍有不同,记录一下。 下面是在单个合约里的情形,这些数组只能在test合约中被访问。 pragma solidity ^0.4.19; contract test { // 固定长度为2的静态数组: uint[2] fixedArray; // 固定长度为5的string类型的静态数组: string[5] stringArray; // 动态数组,长度不固定,可以动态添加元素: uint[] dynamicArray; } 然后是公共数组,这个数组可以被test合约之外的其他合约读取 contract test { Person[] public people; } 另外,solidity里的数组有一个push方法,效果和python中的append类似 uint[] public a; a.push(1); a.push(2); a.push(3); // 此时a=[1, 2, 3]

April 26, 2021 · 1 min · Rufus