Solidity University

Смарт контракт

Смарт-контракт — это автоматически исполняемый код на платформе Ethereum. Контракты состоят из набора правил и условий, которые определяют, что и при каких условиях должно быть выполнено.

Смарт-контракты были представлены Виталиком Бутериным в 2013 году. Их наличие конкурентно выделило Эфир и показал всему миру, что блокчейн может использоваться не только как платежная система. Для написания смарт контрактов используют язык программирования Solidity, а их исполнение происходит на распределенных мощностях Ethereum Virtual Machine.

Работают смарт контракты по принципу "если-то". Если выполняется определенное условие - происходят определенные действия. Например если на контракт приходят деньги, они обмениваются на токены.

Пример смарт контракта


Давайте рассмотрим пример простого смарт контракта. В нашем случае контракт будет принимать на свой счет средства и замораживать их на определенный срок. Например вы хотите сделать своего рода копилку.

pragma solidity ^0.8.0;

contract LockedFunds {
    address public owner;
    uint256 public lockTime;
    mapping(address => uint256) public balances;
    
    event LogDeposit(address indexed sender, uint256 amount);
    event LogWithdrawal(address indexed sender, uint256 amount);
    
    constructor(uint256 _lockTime) {
        owner = msg.sender;
        lockTime = block.timestamp + _lockTime;
    }
    
    function deposit() external payable {
        require(msg.value > 0, "Deposit amount must be greater than zero.");
        balances[msg.sender] += msg.value;
        emit LogDeposit(msg.sender, msg.value);
    }
    
    function withdraw() external {
        require(msg.sender == owner, "Only the contract owner can withdraw.");
        require(block.timestamp >= lockTime, "Funds are locked and cannot be withdrawn yet.");
        uint256 amount = address(this).balance;
        owner.transfer(amount);
        emit LogWithdrawal(msg.sender, amount);
    }
    
    function getBalance(address account) external view returns (uint256) {
        return balances[account];
    }
}

В момент деплоя контракта мы сами указываем на сколько будут замораживаться средства, для этого в constructor мы просим передать значение переменной _lockTime.

А так же у нас есть 2 простые функции: первая принимает деньги, вторая снимает их с контракта. Таким образом можно реализовать простое хранилище, куда вы и ваши друзья будут откладывать деньги на какую-то цель.

Важно заметить, что пополнять контракт может кто угодно, а снимать средства только owner и только по истечению периода лока.

Итог

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

Бывали случи когда из-за неграмотности разработчика на контракте оставалось много ETH, снять которые не представлялось возможным. За это можно любить и ненавидеть децентрализированные системы.


Подпишись и получи доступ к бесплатным курсам и обучающим материалам от Solidity University! Изучай Solidity и Блокчейн Разработку вместе с нами!

Информация об авторе
Nick Newermin

Nick Newermin

Привет! Меня зовут Николай, я занимаюсь web3 разработкой уже более пяти лет, веду канал "Блокчейн Разработчик" и создаю образовательную онлайн платформу Solidity University. #Web3ForEveryone

Solidity University

Подпишись и получи бесплатный доступ к нашим курсам и обучающим материалам

Solidity University

Отлично! Вы успешно зарегистрировались.

С возвращением! Вы успешно вошли в систему.

Вы успешно подписались на Solidity University.

Успех! Проверьте вашу электронную почту для входа по магической ссылке.

Успех! Ваши платежные данные обновлены.

Ваши платежные данные не были обновлены.