目录
一、前言
二、结构体与数组(Structs and Arrays)
1、创建新的结构体
2、实战
三、私有 / 公共函数(Private / Public Functions)
1、函数默认属性
2、私有函数
3、实战
看了一些区块链的教程,论文,在网上刚刚找到了一个项目实战,CryptoZombies。从这篇博客开始总结自己的学习笔记,与大家一同分享。
如果你想了解更多有关于机器学习、深度学习、区块链、计算机视觉等相关技术的内容,想与更多大佬一起沟通,那就扫描下方二维码加入我们吧!
上几次我们讲到了结构体数组,用到了一个示例。示例如下:
struct Person {
uint age;
string name;
}
Person[] public people;
现在我们创建新的 Person
结构,然后把它加入到名为 people
的数组中:
// 创建一个新的Person:
Person syx = Person(21, "Shuiyixin");
// 将新创建的satoshi添加进people数组:
people.push(syx);
我们也可以把上面两个操作简化为一个操作:
people.push(Person(21, "Shuiyixin"));
注:
array.push()
在数组的 尾部 加入新元素 ,元素在数组中的顺序就是我们添加的顺序。
1.在createZombie函数里新创建一个 Zombie
, 然后把它加入 zombies
数组中。 新创建的僵尸的 name
和 dna
,来自于函数的参数。
2.用一行代码简洁地完成它。
pragma solidity ^0.4.25;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
function createZombie (string _name, uint _dna) {
// start here
zombies.push(Zombie(_name,_dna));
}
}
Solidity 定义的函数的属性默认是公共的。 这就意味着任何一方 (或其它合约) 都可以调用这个合约里的函数。
不是任何时候,其他合约都可以调用某个合约中的函数,而且容易受到攻击。
注:一般情况下,将函数定义为私有,只有外部调用时,才设置为公共。
设置私有函数方式如下:
uint[] numbers;
function _addToArray(uint _number) private {
numbers.push(_number);
}
在这个代码中,我们定义一个无符号整数数组,并通过函数为其添加元素。
1.添加private意味着:只有合约中的其它函数才能够调用这个函数。
2.和函数的参数类似,私有函数的名字用(
_
)起始
将createZombie函数设置为私有。
注意设置私有要设置两个地方:
1.给函数名添加前缀_。
2.在参数后面添加private
pragma solidity ^0.4.25;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
function _createZombie (string _name, uint _dna) private {
// start here
zombies.push(Zombie(_name,_dna));
}
}