Смарт-контракт — это автоматически исполняемый код на платформе 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 и Блокчейн Разработку вместе с нами!