솔리디티 튜토리얼: 조건문에 관한 모든 것
스마트 컨트랙트 예시를 통한 이해

매일 코드를 작성하는 모든 사람은 if / else
진술이다. 하지만 여전히, 우리는 "솔리디티의 모든 것" 기사 시리즈우리는 Solidity 스마트 계약 언어에 대한 모든 것을 다룰 것입니다!
구부러진 규칙이 없습니다! 조건문은 생략할 수 없습니다!
오늘의 기사에서 우리는 여전히 Solidity의 기본 조건문과 그 변형에 대해 다룰 것입니다.
하지만 다시 설명하기 보다는 if
진술을 처음부터 다시 시작하여, 우리는 4개의 매우 인기 있는 스마트 계약 프로젝트의 Solidity 코드(CryptoKitties, BarnBridge, Sablier 및 LUKSO)를 사용할 것입니다.
따라서 일부 인기 있는 스마트 계약이 작동하는 방식을 배우고 이해하고 호기심을 높일 수 있습니다.
OverviewExample 1 — CryptoKitties
Basic if statement (one condition)
Either one condition or another with ||
Use a variable as a conditionExample 2 — BarnBridge
Concatenating multiple conditions with &&
if { … } else { … }Example 3 — Sablier
One line if statements
What else can be written inside if statements in Solidity?Example 4 — LUKSO
omitting curly bracesFinal Notes on Solidity conditionalsReferences
Solidity의 조건문은 다른 프로그래밍 언어의 기본 구조를 따릅니다.
- 조건은 괄호 안에 래핑됩니다.
if
성명. - 조건이 다음과 같이 평가되면
true
중괄호 안의 코드가 실행됩니다. - 조건이 다음과 같이 평가되면
false
프로그램 실행은 닫는 괄호 뒤의 다음 문으로 점프합니다.}
.
여기에 새로운 것은 없습니다! 그러나 현재 메인넷에서 실행 중인 실제 솔리디티 코드로 실제로 봅시다!
기본 if 문(하나의 조건)
if ( ) {
// run this Solidity code...
}
새끼 고양이 "자신과 번식할 수 없다". 따라서 우리는 기모사와 씨에 대해 동일한 ID를 제공할 수 없습니다. 따라서 matron이 Sir과 같으면 유효한 짝짓기 쌍이 아닙니다. KittyBreeding.sol 134행 참조.
// A Kitty can't breed with itself!
if (_matronId == _sireId) {
return false;
}
하나의 조건 또는 다른
고양이는 누구나 짐작할 수 있듯이 부모와 교배할 수 없습니다. 따라서 남성 부모(부부)도 여성 부모(매트론)도 아닙니다.
이것은 단락 연산자를 사용하여 수행할 수 있습니다. ||
조건문 내부. 두 조건 중 하나 이상이 true로 평가되면 내부 코드 if
블록이 실행됩니다.
CryptoKitties의 경우 결합 쌍이 유효하지 않습니다. 참조 KittyBreeding.sol, 139행.
// Kitties can't breed with their parents.
if (_matron.matronId == _sireId || _matron.sireId == _sireId) {
return false;
}if (_sire.matronId == _matronId || _sire.sireId == _matronId) {
return false;
}
변수를 조건으로 사용
최초의 인기 NFT 게임 CryptoKitties는 경매 메커니즘 후드. 이라는 기능이 포함되어 있습니다. autobirth
누구든지 데몬을 설정하여 giveBirth(...)
적시에 기능합니다.
이것은 기본적으로 다음과 동일합니다.
채굴 크립토키티! ⛏ 😸 🙀 ⛓
그만큼 autobirth
크립토키티의 옵션은 계약서에서 찾을 수 있습니다 KittyAuction.sol
. 경매 입찰가가 포함된 경우 autobirth
회비, doAutoBirth
모드가 활성화되고 새 크립토키튼을 만드는 데 사용됩니다. 추가 AutoBirth
이벤트는 크립토키튼이 데몬에 의해 생성되었다는 신호로 네트워크에서 발생합니다.
if (doAutoBirth) {
// Auto birth fee provided, trigger autobirth event
Kitty storage matron = kitties[_matronId];
AutoBirth(_matronId, matron.cooldownEndTime);
}

BarnBridge의 Solidity 코드를 보고 스마트 계약에서 더 많은 형태의 조건문을 살펴보겠습니다.
BarnBridge는 Defi에서 위험에 베팅하는 것을 목표로 하는 프로토콜입니다. 사용자는 채권(토큰 형태)을 구매하고 이 채권을 사용하여 다른 Defi 프로토콜이 직면할 수 있는 잠재적 위험에 베팅할 수 있습니다(예: 인플레이션, Defi 금리의 변동, Defi 프로토콜의 기본 ERC20 토큰의 가격 변동성 등...).
그들은 다양한 위험 범주에 대해 여러 상품/채권을 제공합니다. Smart Yields는 그 중 하나이며 Defi 금리의 변동에 중점을 둡니다.
요약하자면 BarnBridges는 다음을 목표로 합니다.
Defi 환경에서 위험 토큰화
살펴보자 SmartYield.sol
계약, 더 많은 예를 보려면 if
조건부.
여러 조건 연결
단락 연산자를 사용하여 조건을 연결할 수 있습니다. &&
.
BarnBridge에서 만료된 채권을 확인하는 데 사용됩니다. 청산되지 않은 선순위 채권은 만기에 도달하는 즉시 제거해야 합니다. SmartYield.sol의 576행 참조
다른 경우라면 …
고전적인 if
진술은 없이 설명되지 않습니다 else
성명. 다음은 기본 알림입니다.
- 조건이 다음과 같이 평가되면
true
내부의 코드if
블록이 실행됩니다. - 조건이 다음과 같이 평가되면
false
내부의 코드else
블콕이 실행됩니다.
여기 if { ... } else { ... }
BarnBridge의 성명. 만기일에 따라 후순위 채권을 취급하는 데 사용됩니다. SmartYield.sol, 326행을 참조하십시오.
한 줄 if
진술
조건이 true로 평가되는 경우 실행되어야 하는 코드를 동일한 줄에 작성할 수 있습니다. if
문(대신if
차단하다).
다음은 Sablier 프로토콜의 완벽한 예입니다. 기능 자세히 살펴보기 withdrawFromStream(...)
특히 258행.
사용자가 이전에 개설한 스트리밍 "채널"에서 돈을 인출하는 경우 프로토콜은 채널에 남아 있는 잔액을 확인합니다. 자금이 남아 있지 않으면 채널이 닫히고 삭제됩니다.
이것은 다음과 같이 수행됩니다. if
중괄호로 블록을 열지 않고 한 줄로 된 문.
Solidity의 if 문 안에 무엇을 쓸 수 있습니까?
거의 모든 것! 계약의 논리를 기반으로 합니다. 그러나 몇 가지 일반적인 예는 다음과 같습니다.
- 외부 계약 호출
return
함수
다음은 Sablier의 두 가지 기본 예입니다.
마지막 기능 cancelStream(...)
계약에서 스트림을 취소할 수 있으며 모든 토큰을 스트림의 의도된 수신자에게 다시 전송합니다.
외부 호출을 통해 함수 내부를 볼 수 있습니다. token.safeTransfer(...)
) 스트림 비용을 지불하는 데 사용된 토큰 계약. 보다 Sablier.sol
287-288행.
또 다른 예로, deltaOf(...)
기능에는 두 가지가 포함됩니다. if
진술 return
즉시 가치에 따라 block.timestamp
. 보다 Sablier.sol
101-102행.
여기에 두 가지 기본 예를 제시했지만 상상할 수 있듯이, if
조건문은 Solidity에서 사용할 수 있는 거의 모든 것으로 이어질 수 있습니다. 다른 시나리오는 계약 상태를 업데이트하거나 되돌릴 수 있습니다.
LUKSO는 새로운 창조 경제에 초점을 맞춘 새로운 EVM 기반 블록체인입니다. 현재 블록체인 공간을 지배하고 있는 금융(Defi) 또는 기술 애플리케이션보다는 사회적이고 창의적인 사용 사례에 더 중점을 둡니다.
LUKSO는 사용자 중심이며 "국민을 위한 블록체인"이라고 할 수 있습니다. 보다 관련성이 높은 애플리케이션을 구축하기 위한 기반으로 사용할 수 있는 생태계입니다. "일상 사용자". 이러한 응용 프로그램에는 유니버설 프로필, 문화 화폐, 평판 시스템 또는 중계 서비스가 포함됩니다.
여기 🆙에서 유니버설 프로필에 중점을 둘 것입니다. 유니버설 프로필은 블록체인에서 프로필 ID 역할을 하는 스마트 계약 기반 계정입니다.

자신만의 유니버설 프로필을 만들고 싶으십니까? 🆙universalprofile.cloud로 이동!
이러한 프로필은 KeyManager
. 그만큼 KeyManager
유니버설 프로필에 대한 세부적인 제어를 제공하여 다른 당사자나 에이전트(Dapp, 신뢰할 수 있는 주소 또는 유니버설 프로필에 로그인하는 데 사용하는 장치 등)에게 특정 권한을 부여할 수 있습니다.
의 최종 변형 예를 살펴보겠습니다. if
의 진술 LSP6KeyManagerCore.sol
.
또한보십시오
@lukso/lsp-smart-contracts
전체 Solidity 코드는 Github에서 확인하세요.LUKSO 생태계에 대한 훌륭한 개요는 Felix Hildebrandt의 3개 기사 시리즈도 읽을 수 있습니다 🔎
중괄호 생략
안에 if
Solidity의 문에서 평가되는 조건이 한 줄 문으로 이어지는 경우 다음 줄에 이 문을 작성하고 중괄호를 생략할 수 있습니다. if
차단하다. (읽기 및 이해가 불가능하므로 다시 작성해 주세요)
주의: 이 경우 올바른 들여쓰기가 필요합니다.
KeyManager에 정의된 다른 권한은 수혜자에게 유니버설 프로필을 대신하여 특정 기능을 수행할 수 있는 기능을 제공합니다. 이러한 기능에는 다음이 포함됩니다.
- 프로필 데이터 편집.
- 네트워크의 다른 계약과 상호 작용합니다.
- 유니버설 프로필의 소유권을 다른 사람에게 양도
address
.
3)을 살펴보자. 유니버설 프로필의 소유권을 다른 사람에게 넘기기 위해 address
(새 KeyManager 또는 간단한 외부 소유 계정), address
요청하려면 특정 권한이 있어야 합니다. CHANGEOWNER
.
이 조건부를 찾을 수 있습니다 if
명세서 라인 268–269 LSP6KeymanagerCore.sol
. 간단하게 핵심만 짚고 넘어가도록 단순화된 요지를 만들었습니다.
Solidity의 조건문에 대한 두 가지 최종 참고 사항:
- 괄호는 생략할 수 없습니다.
if
조건부. - C와 달리 부울이 아닌 유형에서 부울 유형으로의 유형 변환이 없습니다.
이것은 다음 문장이 Solidity에서 유효하지 않음을 의미합니다.
if (1) {
// ...
}
'Coding' 카테고리의 다른 글
BP의 Daily Digest: Musk의 Twitter 분석, iPad의 코드 등 (0) | 2022.04.15 |
---|---|
JavaScript의 모듈 – CommonJS 및 ESmodules 설명 (0) | 2022.04.14 |
DNS 서버가 응답하지 않음 - 서비스를 사용할 수 없음 DNS 오류 해결하는 방법 (0) | 2022.04.12 |
더 나은 파이썬(Python) 프로젝트 설정을 위한 5가지 도구 및 기술 (0) | 2022.04.11 |
마이크로태스크 대기열이란 ? 작동 방법까지 상세히 알아보자 (0) | 2022.04.10 |