728x90
오늘은 Solidity를 사용하여 간단한 스마트 계약을 작성해 보았습니다. 이 스마트 계약은 인사말을 저장하고, 이를 조회하거나 변경할 수 있는 기능을 가지고 있습니다. Solidity의 기본적인 문법과 개념을 익히기 좋은 예제입니다.
계약 내용
이 스마트 계약은 다음과 같은 두 가지 기능을 제공합니다:
- 인사말 조회: 계약이 생성될 때 설정된 인사말을 조회할 수 있습니다.
- 인사말 변경: 계약의 인사말을 새로운 인사말로 변경할 수 있습니다.
코드 설명
// SPDX-License-Identifier: MIT
pragma solidity ^0.5.8; // Solidity 버전 지정
// Greeter 계약 정의
contract Greeter {
address creator; // 계약 생성자의 주소를 저장하는 변수
string greeting; // 인사말을 저장하는 변수
// 생성자 함수: 계약을 배포할 때 인사말을 초기화
constructor(string memory _greeting) public {
creator = msg.sender; // 계약을 배포한 사람의 주소를 creator 변수에 저장
greeting = _greeting; // 전달받은 인사말을 greeting 변수에 저장
}
// 현재의 인사말을 반환하는 함수
function greet() public view returns (string memory) {
return greeting; // 저장된 인사말을 반환
}
// 새로운 인사말로 변경하는 함수
function setGreeting(string memory _newgreeting) public {
greeting = _newgreeting; // 전달받은 새로운 인사말로 greeting 변수 값을 변경
}
}
코드 분석
- Solidity 버전:
- 코드 상단에서
pragma solidity ^0.5.8;
을 사용하여 Solidity 버전을 지정합니다. 이는 우리가 사용하는 Solidity의 버전이 0.5.8 이상이어야 함을 의미합니다.
- 코드 상단에서
- 계약 변수:
address creator
: 계약을 배포한 사람의 주소를 저장하는 변수입니다.msg.sender
는 계약을 배포한 주소를 나타냅니다.string greeting
: 계약에 저장되는 인사말을 저장하는 변수입니다. 계약을 배포할 때 초기화됩니다.
- 생성자(constructor):
- 계약이 배포될 때 한 번 실행되는 생성자 함수입니다. 생성자에서는
creator
주소와greeting
을 초기화합니다. msg.sender
를 사용해 계약을 배포한 사람의 주소를creator
에 저장하고,_greeting
을 사용해 초기 인사말을 설정합니다.
- 계약이 배포될 때 한 번 실행되는 생성자 함수입니다. 생성자에서는
- greet() 함수:
greet()
함수는 현재 계약에 저장된 인사말을 반환하는 함수입니다.public view
로 설정되어 있어 외부에서 호출할 수 있으며, 상태를 변경하지 않는 읽기 전용 함수입니다.
- setGreeting() 함수:
setGreeting()
함수는 계약에 저장된 인사말을 새롭게 변경하는 함수입니다. 외부에서 새로운 인사말을 전달받아 이를greeting
변수에 저장합니다.
실행 과정
- 계약 배포:
- 계약을 배포할 때 인사말을 전달하여
greeting
을 초기화합니다. 예를 들어, "Hello, Blockchain!"을 전달하면, 계약이 배포되면서 인사말이 설정됩니다.
- 계약을 배포할 때 인사말을 전달하여
- 인사말 조회:
greet()
함수를 호출하면 설정된 인사말을 반환받을 수 있습니다. 예를 들어, "Hello, Blockchain!"이 반환됩니다.
- 인사말 변경:
setGreeting("New Greeting")
과 같이 새로운 인사말을 설정하면,greeting
이 "New Greeting"으로 변경됩니다.
느낀 점
이번 예제를 통해 Solidity에서의 상태 변수, 생성자, 함수 호출 등의 기본적인 개념을 실습할 수 있었습니다. Solidity는 스마트 계약을 작성할 때 사용하는 언어로, 블록체인 상에서 자동으로 실행되는 계약을 만들 수 있게 해줍니다. 인사말 계약처럼 간단한 계약을 작성하면서, Solidity의 동작 방식과 구조를 잘 이해할 수 있었습니다.
앞으로 더 복잡한 스마트 계약을 작성하면서 다양한 기능들을 추가해 볼 계획입니다. 스마트 계약의 보안과 최적화에도 신경을 써야 할 부분이 많으니, 차근차근 공부해 나가야겠습니다!
728x90
'Decentralization' 카테고리의 다른 글
Solidity 스마트 컨트랙트: SimpleAuction 경매 시스템 (1) | 2025.03.15 |
---|---|
Solidity로 복권 스마트 컨트랙트 구현하기 (2) | 2025.03.15 |
Solidity 기초 스마트 계약을 이용한 토큰 시스템 만들기 (1) | 2025.03.15 |
이더리움 기반 간편 투표 시스템 구축하기 Ganache, Solidity, Web3.js로 스마트 컨트랙트 배포 및 웹 애플리케이션 개발 (2) | 2025.03.15 |
블록체인에서 디센트(Decentralization) 카테고리 변경 (1) | 2025.03.14 |