Web3 - Фонд Solidity

Типы данных твердости

Четыре основных типа данных Solidity: boolean, uint, int и address.

bytes — тип данных более низкого уровня, bytes32 — максимальное пространство, разрешенное bytes
логическое определение true и false
unitцелое число без знака , что означает, что это число не является положительным или отрицательным, оно может быть только положительным, и дайте ему Пространство распределения, на самом деле, это то, сколько памяти выделено для этого числа, и оно может быть таким большим, как оно есть.Если написано uint8, 8 бит выделяется следующим образом

uint8 favoriteNum = 123;
string str =123”
Int256 faint = -123
address myaddr = “xxxxxxxxxxxx”
bytes32 fabytes = “cat” // “cat”是一个string但是可以自动转化为bytes

Максимум uint256, если не назначено, то по умолчанию uint256, для uint минимум ставить 8 бит, т.к. 8bit это байт, увеличиваем пространство соответственно байту. Например, uint8, uint16, uint32 и т. д. Знайте, что uint256 является наибольшим, а если значение по умолчанию равно 0.
int означает положительный или отрицательный
адрес означает адрес

Функция солидности

Функция или метод относится к независимому модулю, который выполняет определенные инструкции, когда мы его вызываем. Это то же самое, что и функция JavaScript. Обозначается «функцией».
Функции и переменные имеют 4 идентификатора видимости, они бывают публичными, приватными, внешними и внутренними.

Общественность видна как снаружи, так и внутри. Любой, кто взаимодействует с контрактом, может видеть значение, хранящееся в переменной, указанной как public. Public создает функции-получатели для хранения и переменных состояния.

uint256 public favorNum;

Добавление public в FavorNum фактически создает функцию-получатель для FavorNum. Возвращается значение FavorNum.
private означает, что эта функция может быть вызвана только в этом контракте, а
external означает, что она видна только вне контракта. Указывает, что могут звонить аккаунты вне контракта.
внутренний означает, что только этот контракт или контракт, который наследует его, может быть прочитан, по умолчанию является внутренним

структурная структура

«Структура» о символах может быть создана через struct,

struct People{
    
    
	Uint256 age;
	String name;
}

Тип «Люди» теперь доступен. Назовите его человеком, потому что мы сделали его структурой, поэтому нам нужно добавить сюда {}, чтобы солидность знала, что используются переменные этих структур.

People public person = People({
    
     age:24,name:”zhangsan”});

Массив (массив) — это структура данных, которая создает метод списка, а данные — это способ хранения списка или серии объектов. Создание массива аналогично инициализации любого другого типа. Обычно сначала объявляется тип объекта, затем видимость объекта и, наконец, имя переменной. Как показано ниже: "[]" представляет собой массив

People[] public people;// 没指定大小,表明大小是任意的,是动态数组
People[3] public people;// 最多只能放进去三个People对象。
People memory newperson = People({
    
     age:24,name:”zhangsan”}); // 变量的数据类型必须是“storage”,“memory”,或者“calldata”
people.push(newperson );//通过push添加数据。

Есть 6 способов хранения данных в Solidity

1、Стек
2、Память
3、Хранилище
4、Данные вызовов
5、Код
6、Журналы.

«memory» и «calldata» означают, что эта переменная существует только временно, calldata не может быть изменена как временная переменная, а память может быть изменена как временная переменная.
«хранилище» существует вне исполняющей функции, даже вне исполняющей функции. storage может быть изменен как постоянная переменная.

function addPerson(string memory name, uint256 age) public {
    
    
	people.push(People(name,age ));
}

Структуры массивов считаются особыми типами в Solidity. Solidity может автоматически узнать позицию unit 256. Для функции addPerson Solidity знает, что uint256 существует только в содержимом, но Solidity не уверена, какой будет строка. В принципе, строка на самом деле представляет собой массив байтов. Поскольку строка является массивом, необходимо добавить память, чтобы Solidity знал расположение данных в структуре массива или отображении.
Примечание . Когда структуры, карты и массивы добавляются в качестве параметров к различным функциям, необходимо указать ключевое слово «memory» или «calldata».

Отображение

Если в массиве People есть сотни данных, если вы найдете одно из них, то обход индекса будет очень неэффективным, В это время мы можем использовать отображение отображения, которое можно представить как словарь, или карту в js и java — это данные, которые хранятся в виде групповых пар ключ-значение, и каждый ключ возвращает значение, связанное с ключом. Переменные сопоставления создаются так же, как и другие переменные.

mapping(string => uint256) public nameToAge; 

Каждое имя будет сопоставлено с определенным возрастом, а также будет добавлено в сопоставление при добавлении людей в массив.

function addPerson(string memory name, uint256 age) public {
    
    
people.push(People(name,age ));
nameToAge[name] = age;
}

рекомендация

отblog.csdn.net/weixin_43506403/article/details/129767086