-
bitcoin $87959.907984 USD
1.34% -
ethereum $2920.497338 USD
3.04% -
tether $0.999775 USD
0.00% -
xrp $2.237324 USD
8.12% -
bnb $860.243768 USD
0.90% -
solana $138.089498 USD
5.43% -
usd-coin $0.999807 USD
0.01% -
tron $0.272801 USD
-1.53% -
dogecoin $0.150904 USD
2.96% -
cardano $0.421635 USD
1.97% -
hyperliquid $32.152445 USD
2.23% -
bitcoin-cash $533.301069 USD
-1.94% -
chainlink $12.953417 USD
2.68% -
unus-sed-leo $9.535951 USD
0.73% -
zcash $521.483386 USD
-2.87%
견고성의 재창조를 방지하는 방법은 무엇입니까?
Reentrancy in Solidity occurs when an external call allows a malicious contract to recursively execute the same function, potentially draining funds or corrupting state.
2025/07/20 08:49
견고성의 재 신장 이해
Reentrancy는 내부 상태 변경을 완료하기 전에 함수가 신뢰할 수없는 계약을 외부 호출 할 때 발생하는 Soldy Smart 계약 의 중요한 보안 취약점입니다. 이를 통해 외부 계약은 원래 기능으로 재귀 적으로 다시 전화하여 자금을 배수하거나 계약의 논리를 손상시킬 수 있습니다.
2016 년 악명 높은 DAO 해킹은 재창조를 어떻게 이용할 수 있는지에 대한 대표적인 예였습니다. 공격자는 악의적 인 폴백 기능을 사용하여 계약이 잔액을 업데이트하기 전에 철수를 반복적으로 트리거하여 수백만의 에테르가 손실되었습니다.
이러한 취약점을 방지하기 위해 개발자는 외부 통화를 확보 하고 외부 상호 작용 전에 상태 변경이 발생하는 모범 사례 및 설계 패턴을 구현해야합니다.
점검 효과 상호 작용 패턴을 사용하십시오
재창조를 방지하는 가장 효과적인 방법 중 하나는 점검 효과 상호 작용 패턴을 따르는 것입니다. 이 패턴은 외부 통화가 실행되기 전에 모든 내부 상태 변경이 이루어 지도록합니다.
- 점검 : 입력 및 조건을 확인하십시오.
- 효과 : 계약의 상태 변수를 업데이트하십시오.
- 상호 작용 : 외부 계약을 호출하거나 에테르를 보내십시오.
이 순서를 준수함으로써, 재창조 시도가 발생하더라도 내부 상태가 이미 업데이트되어 이중 지출 또는 무단 잔액 액세스를 방지해야합니다.
예를 들어 간단한 철수 기능을 고려하십시오.
function withdraw(uint amount) public {require(balances[msg.sender] >= amount); balances[msg.sender] -= amount; (bool success, ) = msg.sender.call{value: amount}(''); require(success);
}
이 경우 잔액은 외부 호출 전에 업데이트되어 재창조로부터 안전 합니다.
Mutex 잠금을 구현하십시오
재창조를 방지하는 또 다른 효과적인 방법은 뮤 테스 잠금 장치를 사용하는 것입니다. 이는 실행 중 재창조를 방지하는 상태 변수입니다.
간단한 예는 부울 플래그를 사용하여 재입고를 차단하는 것입니다.
bool private locked;기능 철수 (uint 금액) public {require(!locked); locked = true; require(balances[msg.sender] >= amount); balances[msg.sender] -= amount; (bool success, ) = msg.sender.call{value: amount}(''); require(success); locked = false;}
이렇게하면 기능이 여전히 실행되는 동안 기능을 다시 입력 할 수 없으며 재귀 호출을 효과적으로 차단합니다. 그러나 개발자는 뮤텍스를 사용할 때 교착 상태 나 예기치 않은 동작을 만들지 않도록주의해야합니다.
OpenZeppelin의 ReentrancyGuard를 사용하십시오
개발자는 MUTEX 로직을 수동으로 구현하는 대신 OpenZeppelin 이 제공하는 ReentrancyGuard 계약을 사용하여 안전하고 테스트 된 솔루션을 제공 할 수 있습니다.
ReentrancyGuard를 사용하려면 :
- 계약 가져 오기 :
import '@openzeppelin/contracts/security/ReentrancyGuard.sol'; - 계약에서 상속 :
contract MyContract is ReentrancyGuard - 재생성에 취약한 기능에
nonReentrant수정자를 적용하십시오.
pragma solidity ^0.8.0;import '@OpenZeppelin/contracts/security/reentrancyguard.sol';계약 SecureWithDrawal은 ReentrancyGuard {
mapping(address => uint) public balances; function deposit() external payable { balances[msg.sender] += msg.value; } function withdraw(uint amount) external nonReentrant { require(balances[msg.sender] >= amount, 'Insufficient balance'); balances[msg.sender] -= amount; (bool success, ) = msg.sender.call{value: amount}(''); require(success, 'Transfer failed'); }}
이 접근법은 Mutex 처리의 복잡성을 추상화하고 버그를 도입 할 위험을 줄여서 많은 개발자에게 선호되는 방법입니다.
원시 통화를 피하고 안전하게 전송을 사용하십시오
Solidity에서 address.call{value: ...}('') 는 transfer() 또는 send() 보다 유연하지만 가스 제한을 제거하여 Reentrancy에 취약합니다.
-
transfer()및send()가 2300 가스 만 앞으로 전달하여 의미있는 실행에 불충분하므로 재창조를 방지합니다 . - 그러나
call()는 사용 가능한 모든 가스를 전달하여 공격자가 폴백 중에 복잡한 악성 논리를 실행하거나 기능을 수신 할 수 있습니다.
이것을 완화하기 위해 :
- 간단한 에테르 전송에 대해
transfer()또는send()선호합니다. -
call()사용하는 경우 전화가 발생하기 전에 상태 변경이 발생하고 재창조 경비원이 마련되어 있는지 확인하십시오.
FAQ : 자주 묻는 질문
Q : 견고성에 대한 재창조 공격은 무엇입니까? A : 재창조 공격은 외부 계약이 실행을 완료하기 전에 통화 함수로 다시 전화를 걸 때 발생하며, 종종 승인되지 않은 자금 철회 또는 주 부패 로 이어집니다.
Q : OpenZeppelin의 ReentrancyGuard를 사용하지 않고 재창조를 방지 할 수 있습니까? A : 그렇습니다. 체크 효과-인터 링크 패턴을 수동으로 구현하거나 함수 실행 중에 재창조를 차단하기 위해 뮤트 잠금 장치를 사용하여.
Q : 현대식 견고성 버전에서 address.transfer ()를 사용하는 것이 안전합니까? A : transfer() 가 가스를 제한하고 재창조를 방지하는 동안 수신자 계약이 가스가 부족한 경우 예기치 않게 실패 할 수 있습니다. 간단한 전송에 대한 call() 보다 여전히 안전한 것으로 간주됩니다.
Q : Solidity의 모든 외부 통화가 Reentrancy에 취약합니까? A : 전부는 아니지만 사용자 제어 계약 에 대한 외부 호출은 잠재적 벡터가 될 수 있습니다. 상태 변경이 통화 자체가 아니라 외부 통화를 따를 때 취약성이 발생합니다.
부인 성명:info@kdj.com
제공된 정보는 거래 조언이 아닙니다. kdj.com은 이 기사에 제공된 정보를 기반으로 이루어진 투자에 대해 어떠한 책임도 지지 않습니다. 암호화폐는 변동성이 매우 높으므로 철저한 조사 후 신중하게 투자하는 것이 좋습니다!
본 웹사이트에 사용된 내용이 귀하의 저작권을 침해한다고 판단되는 경우, 즉시 당사(info@kdj.com)로 연락주시면 즉시 삭제하도록 하겠습니다.
- Bitcoin, eCash Fork 및 Airdrop Dynamics: 암호화폐의 최신 논란에 대한 심층 분석
- 2026-05-03 12:55:01
- 2026년 마이애미 컨센서스: Web3, 블록체인, 암호화폐, NFT, 메타버스, 컨퍼런스, 5월 5일 — 월스트리트가 디지털 프론티어를 만나는 곳
- 2026-05-02 12:45:01
- 연준은 금리를 안정적으로 유지하여 지정학적 긴장 속에서 비트코인 가격 하락을 촉발했습니다
- 2026-05-01 06:45:01
- 비트코인 채굴자들이 전력망을 전기화하다: 오하이오 가스 공장 인수로 디지털 금의 새로운 시대가 열리다
- 2026-05-01 00:45:01
- MegaETH의 MEGA 토큰이 빅 애플을 강타했습니다: 실시간 블록체인을 위한 새로운 성능 벤치마크 설정
- 2026-05-01 00:55:01
- 솔라나의 미끄러운 경사: 가격 예측은 저항 손실 및 추가 하락 가능성을 지적합니다.
- 2026-05-01 06:45:01
관련 지식
암호화폐 선물의 청산 가격을 낮추는 방법은 무엇입니까?
2026-07-01 01:40:20
선물 거래의 청산 메커니즘 이해 1. 청산은 거래자의 증거금 잔액이 유지 증거금 요건 이하로 떨어지면 발생하며, 거래소에서 자동 포지션 청산을 시작합니다. 2. 청산 가격은 진입 가격, 레버리지 수준, 포지션 크기 및 펀딩 비율 조정을 기준으로 계산됩니다. 각 변수는 ...
선물 포지션이 청산되면 어떻게 되나요?
2026-07-02 17:40:00
암호화폐 선물의 포지션 청산 메커니즘 1. 거래자의 마진 잔액이 유지 마진 수준 이하로 떨어지면 거래소는 마이너스 자산을 방지하기 위해 자동 청산을 시작합니다. 2. 청산 엔진은 레버리지, 진입 가격 및 시장 움직임을 기반으로 포지션이 과소담보되는 정확한 가격을 계산합...
암호화폐 계약에서 과도한 레버리지를 방지하는 방법은 무엇입니까?
2026-06-26 19:00:10
레버리지를 통한 위험 증폭 1. 레버리지는 이익과 손실을 비례적으로 곱합니다. 10배 포지션은 손절매 보호 없이 가격이 진입에 대해 10%만 움직일 경우 거래자가 전체 청산에 노출됩니다. 2. 펀딩 비율 변동성은 장기간의 횡보 또는 불리한 추세 동안, 특히 여러 펀딩 ...
선물 거래에서 위험 관리를 설정하는 방법은 무엇입니까?
2026-07-02 22:19:54
암호화폐 선물 시장의 위험 식별 1. 온체인 이벤트 발표에 의해 촉발된 변동성 급증은 종종 급격한 가격 변동에 앞서 발생합니다. 2. 여러 계약에 걸쳐 마진 임계값이 동시에 균일하게 위반될 때 거래소별 청산 연속 현상이 발생합니다. 3. 주요 지지/저항 수준의 주문장 ...
암호화폐 선물의 손익을 어떻게 계산하나요?
2026-07-01 20:39:43
시장 변동성 패턴 1. Bitcoin의 가격 변동은 금리 발표, 인플레이션 데이터 발표 등 거시경제적 신호를 반영하는 경우가 많습니다. 2. 시장 불확실성이 높아지는 기간 동안 BTC와 알트코인의 상관관계가 강화되어 다각화 혜택이 감소하는 경향이 있습니다. 3. 상장지...
선물의 표시 가격과 최종 가격은 무엇입니까?
2026-07-07 23:39:53
시장 변동성 패턴 1. Bitcoin 가격 변동폭은 유동성이 높은 기간 동안 단일 거래 세션 내에서 5%를 초과하는 경우가 많습니다. 2. 알트코인 지수는 전통적인 주식 벤치마크보다 이더리움과 더 강한 상관관계를 보여줍니다. 3. 파생상품 미결제약정 급등은 현물 시장의...
암호화폐 선물의 청산 가격을 낮추는 방법은 무엇입니까?
2026-07-01 01:40:20
선물 거래의 청산 메커니즘 이해 1. 청산은 거래자의 증거금 잔액이 유지 증거금 요건 이하로 떨어지면 발생하며, 거래소에서 자동 포지션 청산을 시작합니다. 2. 청산 가격은 진입 가격, 레버리지 수준, 포지션 크기 및 펀딩 비율 조정을 기준으로 계산됩니다. 각 변수는 ...
선물 포지션이 청산되면 어떻게 되나요?
2026-07-02 17:40:00
암호화폐 선물의 포지션 청산 메커니즘 1. 거래자의 마진 잔액이 유지 마진 수준 이하로 떨어지면 거래소는 마이너스 자산을 방지하기 위해 자동 청산을 시작합니다. 2. 청산 엔진은 레버리지, 진입 가격 및 시장 움직임을 기반으로 포지션이 과소담보되는 정확한 가격을 계산합...
암호화폐 계약에서 과도한 레버리지를 방지하는 방법은 무엇입니까?
2026-06-26 19:00:10
레버리지를 통한 위험 증폭 1. 레버리지는 이익과 손실을 비례적으로 곱합니다. 10배 포지션은 손절매 보호 없이 가격이 진입에 대해 10%만 움직일 경우 거래자가 전체 청산에 노출됩니다. 2. 펀딩 비율 변동성은 장기간의 횡보 또는 불리한 추세 동안, 특히 여러 펀딩 ...
선물 거래에서 위험 관리를 설정하는 방법은 무엇입니까?
2026-07-02 22:19:54
암호화폐 선물 시장의 위험 식별 1. 온체인 이벤트 발표에 의해 촉발된 변동성 급증은 종종 급격한 가격 변동에 앞서 발생합니다. 2. 여러 계약에 걸쳐 마진 임계값이 동시에 균일하게 위반될 때 거래소별 청산 연속 현상이 발생합니다. 3. 주요 지지/저항 수준의 주문장 ...
암호화폐 선물의 손익을 어떻게 계산하나요?
2026-07-01 20:39:43
시장 변동성 패턴 1. Bitcoin의 가격 변동은 금리 발표, 인플레이션 데이터 발표 등 거시경제적 신호를 반영하는 경우가 많습니다. 2. 시장 불확실성이 높아지는 기간 동안 BTC와 알트코인의 상관관계가 강화되어 다각화 혜택이 감소하는 경향이 있습니다. 3. 상장지...
선물의 표시 가격과 최종 가격은 무엇입니까?
2026-07-07 23:39:53
시장 변동성 패턴 1. Bitcoin 가격 변동폭은 유동성이 높은 기간 동안 단일 거래 세션 내에서 5%를 초과하는 경우가 많습니다. 2. 알트코인 지수는 전통적인 주식 벤치마크보다 이더리움과 더 강한 상관관계를 보여줍니다. 3. 파생상품 미결제약정 급등은 현물 시장의...
모든 기사 보기














