Список кейсов Тайшаньского краудфандингового исследования (объяснение)
Список кейсов Тайшаньского краудфандингового исследования (объяснение)

Простой смарт-контракт начинается с очень простого примера.

contract ZhaoxiStorage {

Язык кода:javascript
копировать
uint storedData;

function set(uint x) {
    storedData = x;
}

function get() constant returns (uint retVal) {
    return storedData;
}

}В Solidity контракт состоит из набора кода (функций контракта) и данных (состояния контракта). Контракт расположен по адресу в блокчейне Ethereum.

Список кейсов Тайшаньского краудфандингового исследования (объяснение)
Список кейсов Тайшаньского краудфандингового исследования (объяснение)

uint storeData Эта строка кода объявляет переменную состояния с именем StoredData и типа беззнакового целого числа uint. Его можно рассматривать как запись в базе данных, которую можно запрашивать и изменять, вызывая функции. В Ethereum обычно это может сделать только владелец контракта. В этом примере функции set и get используются для изменения и запроса значения переменной соответственно.

Как и во многих других языках, при доступе к переменным состояния нет необходимости добавлять такой префикс впереди.

Любой может вызвать метод set, чтобы установить номер, отличный от опубликованного вами. Но ваши номера останутся в истории блокчейна. Как увеличить лимиты доступа, мы узнаем позже.

Пример криптовалюты Следующий контракт реализует криптовалюту в ее простейшей форме. С помощью этого кода каждый может отправлять деньги другим без регистрации имени пользователя и пароля, если у него есть пара открытого и закрытого ключей Ethereum.

contract ZhaoxiCoin {

Язык кода:javascript
копировать
// Ключевое слово «public» делает переменную доступной вне контракта.
address public minter;
mapping (address => uint) public balances;

// Событие позволяет легким клиентам эффективно реагировать на изменения.
event Sent(address from, address to, uint amount);

// Код, создающий функцию, запускается только при создании контракта.
function ZhaoxiCoin() {
    minter = msg.sender;
}

// Создатель контракта может позвонить в Mint
function mint(address receiver, uint amount) {
    if (msg.sender != minter) return;
    balances[receiver] += amount;
}

// send может быть вызван любым владельцем токена
function send(address receiver, uint amount) {
    if (balances[msg.sender] < amount) return;
    balances[msg.sender] -= amount;
    balances[receiver] += amount;
    Sent(msg.sender, receiver, amount);
}

}address public minter Эта строка кода объявляет общедоступную переменную состояния типа адреса. Размер значения типа адреса составляет 160 бит, что подходит для хранения адреса контракта или чужих открытых и закрытых ключей. Ключевое слово public автоматически сгенерирует функцию доступа для изменяемой им переменной состояния. Переменные без ключевого слова public не будут доступны другим контрактам. Кроме того, можно писать только код внутри этого контракта. Автоматически генерируемые функции следующие:

function minter() returns (address) { return minter; }Следующая строка сопоставления кода (address => uint) public balances; Создается общедоступная переменная состояния, но ее тип более сложный. Этот тип сопоставляет некоторый адрес с беззнаковым целым числом. Отображение можно рассматривать как хеш-таблицу, и значение, соответствующее каждому возможному ключу, практически инициализируется нулями. Для сопоставления невозможно получить связанный список, содержащий все его ключи или значения. Поэтому нам нужно запомнить, что мы добавили в отображение. В этом примере функция доступа, сгенерированная ключевым словом public, будет более сложной, и ее код будет примерно следующим:

function balances(address _account) returns (uint balance) {

Язык кода:javascript
копировать
return balances[_account];

}Событие отправлено (адрес, адрес, значение uint) Эта строка кода объявляет «событие». Запускается последней строкой кода в функции отправки. Клиенты могут прослушивать эти события, вызванные блокчейном. При срабатывании события прослушиватель одновременно получит параметры from, to и value, которые можно удобно использовать для отслеживания транзакций. Чтобы прослушать это событие, вы можете использовать следующий код:

ZhaoxiCoin.Sent().watch({}, '', function(error, result) {

Язык кода:javascript
копировать
if (!error) {
    console.log("ZhaoxiCoin transfer: " + result.args.amount +
        " coins were sent from " + result.args.from +
        " to " + result.args.to + ".");
    console.log("Balances now:\n" +
        "Sender: " + ZhaoxiCoin.balances.call(result.args.from) +
        "Receiver: " + ZhaoxiCoin.balances.call(result.args.to));
}

}Здесь есть специальная функция ZhaoxiCoin. Это конструктор, который будет запущен при создании контракта и не может быть вызван позже. Он будет постоянно хранить адрес создателя контракта. msg (наряду с tx и блоком) — это глобальная переменная, содержащая некоторые свойства, принадлежащие блокчейну, к которым можно получить доступ с помощью кода контракта. msg.sender всегда сохраняет адрес внешнего вызывающего объекта текущей функции.

Наконец, функции, которые на самом деле вызываются пользователями или другими контрактами для выполнения функций этого контракта, — это mint и send. Если кто-то, кроме создателя контракта, позвонит в mint, ничего не произойдет. Отправить может вызвать любой человек (владеющий определенным количеством токенов) для отправки одних монет другим.

Выше приведен полный код и описание простой криптовалюты.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose