Cointime

Download App
iOS & Android

스마트 계약 개발의 핵심 이슈: 각 단계의 보안 보장

저자: Roman Palamarchuk 편집: Cointime.com 237

스마트 계약은 많은 블록체인 애플리케이션의 핵심입니다. 분산 시스템에 대한 신뢰를 증진하는 데 있어 불변이지만, 이는 또한 개발 주기 동안 엄격한 보안 조치의 필요성을 강조합니다.

잠재력에도 불구하고 스마트 계약은 재진입 공격 및 플래시 론 공격과 같은 위협에도 취약합니다. 잘못된 해석이나 계산 착오로 인해 예상치 못한 취약점과 공격이 발생할 수도 있습니다.

이러한 위험을 완화하기 위해 안전한 스마트 계약 개발의 다양한 단계를 다루고 실행 가능한 통찰력과 지침을 제공할 것입니다.

보안 스마트 계약 개발 개요

안전한 스마트 계약을 개발하는 데는 몇 가지 주요 단계가 있으며 각 단계에는 세심한 주의와 이해가 필요합니다.

1. 보안 스마트 계약 설계 고려 사항

스마트 계약 설계의 기본 원칙을 설명하고 블록체인 이해의 중요성, 설계를 단순하고 모듈식으로 유지하는 것 등을 강조합니다.

2. 안전한 스마트 컨트랙트 개발 실습

우리는 안전한 스마트 계약 개발을 위한 효과적인 방법을 공유할 것입니다.

3. 스마트 계약 테스트 및 검토

이 섹션에서는 철저한 테스트의 중요성을 강조하고 스마트 계약을 분석하기 위한 다양한 도구를 소개합니다.

4. 안전한 스마트 계약 배포

스마트 계약 배포 단계에서 주요 보안 고려 사항에 대해 논의할 것입니다.

5. 스마트 계약 보안 유지

마지막으로 스마트 계약의 장기적인 보안을 보장하기 위해 지속적인 모니터링과 업데이트의 필요성을 강조합니다.

각 단계에서 실제 사례와 통찰력을 통합하여 숙련된 Web3 개발자이든 호기심 많은 기업가이든 스마트 계약 개발의 복잡한 측면을 더 쉽게 이해하고 구현할 수 있도록 합니다.

안전한 스마트 계약을 위한 설계 고려 사항

안전한 스마트 계약을 설계하려면 몇 가지 기본 개념에 대한 철저한 이해와 일부 설계 원칙에 대한 헌신이 필요합니다.

1. 시스템의 기본 비즈니스 논리에 대한 사려 깊은 설계는 안전한 스마트 계약 개발의 핵심입니다. 논리는 강력하고 명확해야 하며 프로젝트 목표와 일치해야 합니다.

이 논리를 설계하는 것은 기존 시장 솔루션을 모방하는 것이 아니라 이를 이해하고 강점과 약점을 파악한 다음 개선하는 것입니다. 이 프로세스에는 다른 사람들이 직면한 유사한 문제를 조사하고, 그들로부터 배우고, 이러한 통찰력을 사용하여 자신의 디자인을 개선하는 것이 포함됩니다.

이 논리를 설계하는 것은 기존 시장 솔루션을 모방하는 것이 아니라 이를 이해하고 강점과 약점을 파악한 다음 개선하는 것입니다. 이 프로세스에는 다른 사람들이 직면한 유사한 문제를 조사하고, 그들로부터 배우고, 이러한 통찰력을 사용하여 자신의 디자인을 개선하는 것이 포함됩니다.

각 시스템은 고유하며 한 시스템에서 작동하는 것이 다른 시스템에서는 작동하지 않을 수 있음을 기억하십시오. 따라서 자신의 솔루션에 대한 비판적 분석은 잠재적 함정을 발견하는 데 필수적입니다. 시스템에서 발생할 수 있는 엣지 케이스와 스마트 계약이 이를 처리하는 방법을 고려하십시오. 아래에 설명된 "미끄러짐" 예제와 같이 구현에서 발생하는 악용 기회에 주의하십시오.

2. 블록체인 기술의 본질을 마스터하는 것은 필수 불가결한 전제 조건입니다. 여기에는 트랜잭션 작동 방식, 분산 원장의 세부 정보, 공개 및 개인 키의 의미에 대한 이해가 포함됩니다. 또한 안전한 스마트 계약을 개발할 때 타사 시스템 통합에 대한 철저한 이해가 중요합니다. UniswapV3 통합 감사의 실제 사례는 포괄적인 이해가 부족할 때 발생할 수 있는 일을 명확하게 보여줍니다.

이 코드 스니펫에서는 _sellAmount를 입력 금액으로 사용하고 amountOutMinimum을 0으로 설정하여 UniswapV3 스왑 작업을 수행합니다. 이 설정, 즉 출력 토큰의 최소량(amountOutMinimum)을 0으로 설정하면 "슬립페이지"라는 일반적인 문제가 발생할 수 있습니다.

Uniswap과 같은 분산형 거래소에서 슬리피지는 예상 거래 가격과 실제 실행된 거래 가격 간의 차이를 나타냅니다. 시장이 불안정할 때 시장가 주문을 사용할 때 종종 발생합니다. 이 경우 하한선이 설정되지 않았기 때문에 트레이더는 시장 변동으로 인해 예상보다 적은 양의 토큰을 받을 수 있습니다.

테스트 중에 이러한 문제를 감지하는 것은 까다로울 수 있습니다. 특정 시장 조건에서 대부분 나타나기 때문입니다. 개발자에게 이러한 취약점을 찾는 것은 똑같이 어려운 일입니다. 철저한 계획과 엄격한 테스트에도 불구하고 이러한 미묘함은 눈에 띄지 않을 수 있으며 개발 프로세스에서 감사의 중요한 역할과 이러한 숨겨진 위험을 발견하고 해결하기 위한 전문 감사자의 필요성을 강조합니다.

3. 단순성과 모듈성의 원칙은 스마트 계약 설계의 또 다른 기둥입니다. 단순성은 버그를 숨길 위험을 줄이고 개발자와 사용자 간의 이해를 향상시킵니다. 모듈성은 프로그램을 별도의 기능적 구성 요소로 분할하여 오류를 쉽게 식별하고 문제 해결을 단순화하며 개발 유연성을 높입니다.

4. 초기 설계 단계에서 업그레이드 가능성도 고려해야 합니다. 블록체인은 변경할 수 없기 때문에 스마트 계약 업그레이드에는 프록시 계약 사용, 데이터 및 논리 분리, 향후 호환성 보장과 같은 전략 구현이 필요합니다.

안전한 스마트 계약 개발 관행

시스템 아키텍처의 신중한 계획, 사용할 타사 서비스에 대한 철저한 이해 및 신중한 업데이트 전략을 마친 후 이제 개발 단계로 이동할 준비가 되었습니다.

다음과 같이 자주 반복되는 보안 개발 팁 외에도:

1. 최신 솔리디티 버전을 사용하세요.

2. 계약 기능을 제한합니다.

3. Assert, Require 및 Revert 기능을 구현합니다.

4. 확인-효과-상호작용 패턴을 따릅니다.

5. 역할과 해당 권한을 신중하게 할당합니다.

6. 스마트 계약을 테스트합니다.

이 목록에 나만의 제안을 추가하고 싶습니다.

1. 가스 최적화 우선순위 지정

6. 스마트 계약을 테스트합니다.

이 목록에 나만의 제안을 추가하고 싶습니다.

1. 가스 최적화 우선순위 지정

스마트 계약은 가스 제한이 있으며 신중한 최적화가 필요합니다. 모든 작업에는 가스 비용이 발생하며 이러한 비용은 매우 변동이 심할 수 있습니다. 불필요한 계산을 제거하고 적절한 데이터 유형을 선택하고 외부 계약 호출의 가스 비용을 고려하여 코드를 최적화하십시오. 가변 패킹을 고려하고 루프 작동의 가스 효율을 평가합니다. 이렇게 하면 상호 작용 비용이 줄어들 뿐만 아니라 악용될 수 있는 가스 아웃 버그의 위험도 줄어듭니다. 다음 섹션에서 가스 사용량을 확인하는 도구에 대해 설명합니다.

2. 타사 통합을 주의해서 처리합니다.

앞서 언급했듯이 사용하려는 서비스를 이해하는 것이 중요합니다. 각 변수의 역할을 이해하고 잠재적 위험을 검토하며 데이터 소스의 관련성을 확인합니다. 예를 들어, ChainLink의 가격은 타임라인을 검증하여 시대에 뒤떨어지는 것을 방지해야 합니다.

3. 공식 코딩 스타일 가이드를 따르고 NatSpec 문서를 사용하세요.

공식 코딩 스타일 가이드에 따라 코드를 작성하고 문서화에 NatSpec을 사용하면 코드 가독성을 크게 높일 수 있습니다. 이는 코드를 검토해야 할 수 있는 타사 개발자 및 감사자에게 특히 유용합니다. 이러한 향상된 이해는 오류 및 보안 문제의 가능성을 줄입니다.

스마트 계약 테스트 및 검토

스마트 계약 개발에서 철저한 테스트의 중요성을 과소평가할 수 없습니다. 스마트 계약의 불변성과 처리되는 고가치 거래를 감안할 때, 눈에 띄지 않는 오류나 취약성은 돌이킬 수 없는 결과를 초래할 수 있습니다. 따라서 단위 테스트가 중요하며 100% 코드 커버리지를 달성하는 것이 가장 좋습니다. 이렇게 하면 모든 기능, 분기 및 코드 라인이 검증되어 실제 환경에서 예기치 않은 동작 또는 악용의 위험이 줄어듭니다.

Solidity 코드의 적용 범위를 테스트하려면 Solidity Coverage 플러그인을 사용하는 것이 좋습니다. Solidity Gas Reporter(Hardhat에 내장되어 있고 다른 도구를 위한 독립 실행형 플러그인으로도 사용 가능)와 함께 작동하여 스마트 계약이 어떻게 수행되는지, 거래 비용 및 다른 네트워크에서 기타 측면을 테스트하는 데 도움이 됩니다.

또한 돌연변이 테스트 접근 방식을 사용하는 것이 좋습니다. 이 접근 방식은 테스트 도구 모음의 품질을 측정하고 시스템에 일련의 "변형" 또는 수정을 가하고 약간 다른 버전의 소프트웨어를 생성하고 이러한 변형을 테스트하여 테스트가 다음을 감지할 수 있는지 여부를 평가함으로써 테스트되지 않은 소프트웨어 영역을 식별합니다. 변화.

SuMo는 Solidity 기반 스마트 계약을 위해 설계된 탁월한 돌연변이 테스트 도구입니다. SuMo는 소스 코드에 작은 버그 또는 "돌연변이"를 주입하고 테스트 스위트가 이러한 변경 사항을 감지할 수 있었는지 여부를 평가하여 테스트의 견고성을 평가할 수 있습니다. 이 프로세스는 테스트에서 약점을 찾아내어 전반적인 품질을 향상시키는 데 도움이 됩니다.

SuMo에는 기존 연산자와 특히 Solidity용 연산자를 포함하여 선택할 수 있는 많은 변형 연산자가 있으며 프로젝트 요구 사항에 따라 켜거나 끌 수 있습니다. 또한 돌연변이에 대해 특정 계약 및 테스트 사례를 선택할 수 있는 돌연변이 테스트 프로세스에 대한 사용자 지정 옵션을 제공합니다. 또한 SuMo의 테스트 인터페이스는 유연하고 다양하며 다양한 테스트 프레임워크 및 블록체인 시뮬레이터와 호환됩니다.

GitHub에서 SuMo에 대한 자세한 정보를 보려면 풀 요청을 볼 수 있습니다.

https://github.com/MorenaBarboni/SuMo-SOlidity-MUtator

위의 사례 외에도 Slither, Solgraph, Mythril, Echidna, MythX 및 Semgrep과 같은 분석 도구를 사용하는 것이 좋습니다. 이러한 도구는 잠재적인 취약성을 감지하고, 계약 종속성을 시각화하고, 보안 속성을 분석하고, 알려진 문제를 스캔하는 데 도움이 됩니다. 이러한 도구를 활용하면 계약을 완전히 감사하고 전반적인 보안을 강화할 수 있습니다.

보안 감사를 수행하는 것은 스마트 계약의 견고성을 보장하는 또 다른 중요한 단계입니다. 감사는 허점이나 오류를 탐지하기 위해 독립 기관이 계약 코드를 체계적으로 검토하는 것입니다. 이 프로세스는 계약이 배포되기 전에 계약의 보안 및 무결성을 추가로 보장합니다.

보안 스마트 계약 배포

스마트 계약의 배포 단계는 개발만큼 중요합니다. 배포 프로세스의 무결성은 계약의 보안 및 운용성에 큰 영향을 미칩니다. 따라서 원활하고 안전한 배포를 위해 몇 가지 문제를 해결해야 합니다. 몇 가지 제안이 있습니다 :

1. 먼저 테스트 네트워크 사용

메인넷에 배포하기 전에 항상 테스트 네트워크(예: Ropsten, Rinkeby, Kovan)에 스마트 계약을 배포하십시오. 이를 통해 메인넷을 시뮬레이션하지만 실제 자금을 위험에 빠뜨리지 않는 네트워크에서 테스트할 수 있습니다.

2. 여러 차례의 테스트

메인넷에 배포하기 전에 항상 테스트 네트워크(예: Ropsten, Rinkeby, Kovan)에 스마트 계약을 배포하십시오. 이를 통해 메인넷을 시뮬레이션하지만 실제 자금을 위험에 빠뜨리지 않는 네트워크에서 테스트할 수 있습니다.

2. 여러 차례의 테스트

단위 테스트, 통합 테스트, 시스템 테스트 및 승인 테스트를 포함하여 다양한 수준에서 여러 라운드의 테스트를 수행합니다. 이렇게 하면 모든 수준에서 버그나 취약성을 발견하는 데 도움이 됩니다.

3. 반복 가능하고 자동화된 배포 프로세스 사용

이는 Truffle 마이그레이션과 같은 스크립팅 가능한 배포 도구를 사용하여 달성할 수 있습니다. 목표는 배포 프로세스가 결정적이고 반복 가능하며 가능한 한 많이 자동화되도록 하는 것입니다.

4. 시간 잠금 메커니즘 추가

시간이 제한된 업그레이드 또는 변경 사항을 계약에 통합합니다. 이를 통해 사용자는 변경 사항에 대해 이의를 제기할 시간을 확보하고 추가적인 보안 계층을 제공할 수 있습니다.

5. 기능 권한 제한

계약의 각 기능, 특히 배포 및 관리 권한과 관련된 권한을 제한하십시오. 이는 무단 액세스를 방지하고 공격으로부터 보호하기 위한 것입니다.

6. 소스코드 확인

배포 후 Etherscan과 같은 블록체인 탐색기에서 계약의 소스 코드를 확인합니다. 이 프로세스는 누구나 계약서를 읽고 그 기능을 이해할 수 있으므로 투명성을 높입니다.

7. 비상 정지 메커니즘

계약서에 "비상 정지" 메커니즘을 추가하십시오. 이러한 방식으로 이상 또는 오류가 감지되면 계약의 특정 기능을 일시 중지할 수 있습니다.

스마트 계약 보안 유지

배포 후 단계로 이동하면서 보안 유지는 스마트 계약이 배포된 후 끝나는 일회성 작업이 아님을 깨달아야 합니다. 오히려 지속적인 모니터링과 지속적인 유지 관리가 필요한 지속적인 프로세스입니다. 배포된 스마트 계약의 보안을 관리하고 유지하기 위한 몇 가지 효과적인 전략은 다음과 같습니다.

1. 스마트 계약의 지속적인 모니터링을 위한 실시간 추적 시스템을 구현하는 것이 효과적인 전략입니다. Hacken Extractor와 같은 시스템은 갑작스러운 거래량 급증, 의심스러운 거래 또는 계약 잔액의 중대한 변화와 같은 비정상적인 활동에 대해 경고할 수 있습니다. 계약의 가스 사용량을 모니터링하면 네트워크와의 상호 작용에 대한 귀중한 통찰력을 제공하여 잠재적인 최적화 영역이나 문제가 있는 영역을 파악하는 데 도움이 됩니다.

2. 배포 후 보안 유지 관리의 또 다른 중요한 측면은 버그 바운티 프로그램의 효과적인 사용입니다. 버그 바운티 프로그램을 설정하면 스마트 계약에서 취약성을 찾고 보고하는 데 도움이 되도록 커뮤니티에 인센티브를 제공할 수 있습니다. HackenProof와 같은 플랫폼은 이러한 체계를 관리하는 전용 서비스를 제공하여 이 프로세스를 위한 안전한 환경을 보장합니다. 이것은 계약의 보안을 강화할 뿐만 아니라 보안에 대한 귀하의 약속을 보여줌으로써 사용자와의 신뢰를 구축합니다.

3. 마지막으로 생태계에서 발견된 최신 취약점을 파악하는 것이 중요합니다. Ethereum Security Community와 같은 플랫폼은 최신 스마트 계약 취약성 목록을 컴파일하고 유지 관리합니다. 이러한 플랫폼을 정기적으로 확인하거나 업데이트를 구독하면 잠재적인 위협에 대한 정보를 계속 얻을 수 있습니다.

요약하면 스마트 계약을 안전하게 유지하는 핵심은 팀 내에서 보안 우선 문화를 모니터링, 감사, 업데이트 및 육성하는 지속적인 주기입니다.

결론적으로

설계, 개발, 테스트 및 검토, 배포 및 유지 관리의 5가지 주요 단계에는 모두 고유한 보안 고려 사항이 필요합니다. 사려깊고 견고한 설계, 부지런한 개발, 철저한 테스트, 신중한 배포 및 지속적인 유지 관리는 모두 이 프로세스의 핵심 측면입니다. 또한 생태계의 최신 취약점을 인식하고 버그 바운티 프로그램과 같은 이니셔티브를 통해 커뮤니티의 힘을 활용하면 스마트 계약 보안을 크게 강화할 수 있습니다.

궁극적으로 스마트 계약을 안전하게 생성, 배포 및 유지 관리하려면 확실한 이해, 신중한 계획, 철저한 테스트 및 지속적인 경계가 필요합니다. 불완전한 보안은 금전적 손실이나 명성 손상과 같은 결과를 초래할 수 있으므로 이러한 노력은 매우 중요합니다. 이러한 통찰력과 관행으로 무장한 개발자와 팀은 끊임없이 진화하는 블록체인 기술 분야에 안전한 스마트 계약 기여를 할 수 있습니다.

댓글

모든 댓글

Recommended for you

  • 멀티-VM 풀체인 인프라 네트워크 망고네트워크, 1,350만달러 자금조달 완료 발표

    멀티-VM 풀 체인 인프라 네트워크 Mango Network는 1,350만 달러의 자금 조달을 완료했다고 발표했습니다. 홍콩의 Ainfra Ventures, Kucoin Ventures, Tido Capital, Connectico Capital, Becker Ventures, Tfund, Mobile Capital, CatcherVC, Family Office를 포함한 투자자들이 이번 자금 조달에 참여했습니다.

  • 분산형 컴퓨팅 파워 수익화 네트워크 NodeGo, Hash Capital 주도로 800만 달러 자금 조달 완료

    분산형 컴퓨팅 파워 수익화 네트워크인 NodeGo는 Hash Capital이 주도한 800만 달러 규모의 자금 조달 라운드를 완료했다고 발표했습니다. 이 새로운 자금은 사용자와 기업이 공간 및 기타 계산을 완료하여 AI 작업에 기여할 수 있는 네트워크를 구축하는 데 사용되며, 참여자는 보상을 받을 수 있습니다.

  • DeFi 투자 플랫폼 Prodigy.Fi, Quantstamp와 Republic가 주도한 500만 달러 시드 라운드 자금 조달 완료

    DeFi 투자 플랫폼 Prodigy.Fi는 Quantstamp와 Republic가 주도하고 Arbelos Markets, RSK Capital, Samara Alpha Management가 참여한 500만 달러 규모의 시드 라운드 자금 조달을 완료했다고 발표했습니다. 이 새로운 자금은 Berachain을 기반으로 하는 래핑된 Ethereum(WETH)과 같은 암호화폐를 매수 또는 매도하는 플랫폼을 지원하는 데 사용될 예정입니다.

  • 블록체인 클라우드 게임 개발사 The Game Company, 1,000만 달러 규모의 자본 및 토큰 자금 조달 라운드 완료

    두바이에 본사를 둔 블록체인 클라우드 게임 개발사인 The Game Company가 주식 및 토큰 펀딩으로 1,000만 달러를 모금했습니다. Telcoin과 CEO Paul Neuner, BullPerks, NodeMarket, HyperCycle, Singularity DAO가 이 라운드에 참여했습니다. 게임 컴퍼니는 2023년 4월에 500만 달러를 모금했으며, 회사 측은 이 새로운 자금을 기본 암호 토큰을 배포하고, 플랫폼을 개선하고, Web3 및 Web2 생태계를 통합한 후 올해 말에 제품을 공개적으로 출시하는 데 사용할 것이라고 밝혔습니다.

  • Lightchain AI, 테스트넷 출시 발표 및 1,500만 달러 자금 조달 완료

    Bitcoin.com에 따르면, 블록체인 프로젝트 Lightchain AI가 테스트 네트워크를 공식 출시하고 1,500만 달러의 자금 조달을 완료했다고 발표했습니다. 이 프로젝트의 주요 기술 혁신으로는 PoI(Proof of Intelligence) 합의 메커니즘과 AIVM(AI Virtual Machine)이 있습니다. 이 중 PoI 합의 메커니즘은 AI 컴퓨팅 문제를 해결하는 노드에 보상을 제공하는 방식으로 구현되며, AIVM은 개발자에게 블록체인에서 AI 애플리케이션을 구축하기 위한 툴셋을 제공합니다. 이 프로젝트는 현재 사전 판매의 마지막 단계에 있으며, 모금된 자금은 기술 개발, 인프라 확장, 인재 채용에 사용될 예정입니다. Lightchain AI는 2025년에 메인넷을 출시할 계획이며, 향후 기업 수준의 분산형 AI 솔루션 사업 개발에 집중할 예정입니다.

  • 지난 1시간 동안 주로 장기 주문으로 인해 6454만4000달러 이상이 청산되었습니다.

    데이터에 따르면 지난 1시간 동안 전체 네트워크의 총 청산 금액은 64,540,400,000달러에 달했으며, 이 중 롱 포지션 청산 금액은 약 63,100,700,000달러이고 숏 포지션 청산 금액은 약 2,201,600,000달러였습니다. .

  • 국무원 관세위원회: 미국산 일부 수입품에 추가 관세 부과

    국무원 관세위원회는 다음과 같이 공고했습니다. 국무원의 승인을 거쳐 2025년 2월 10일부터 미국에서 수입되는 일부 상품에 대해 추가 관세를 부과합니다. 석탄과 액화천연가스에는 15%의 관세가 부과되고, 원유, 농기계, 대형차, 픽업트럭에는 10%의 관세가 부과됩니다. (골든텐)

  • WLFI는 지난 6시간 동안 Coinbase Prime에 3억 700만 달러 상당의 8개 암호화폐 자산을 이체했습니다.

    Spot On Chain에 따르면, World Liberty Financial은 지난 6시간 동안 자금 관리 및 사업 운영을 위해 총 3억 700만 달러 상당의 암호화폐 자산 8개를 Coinbase Prime으로 이체했습니다. 이후 19,423개의 stETH가 언스테이킹되어 ETH로 전환되었고, 1,826개의 ETH가 코인당 평균 2,738달러의 가격으로 500만 USDC에 매수되었습니다. 현재, 월드 리버티 파이낸셜은 알려진 9개의 지갑에 9,662만 달러 상당의 다양한 자산을 보유하고 있습니다.

  • 어제의 시장 폭락 동안 Aave V3 프로토콜은 거의 2억 달러를 청산했습니다.

    Dune 데이터에 따르면, 어제의 시장 폭락 동안 Aave V3 프로토콜은 총 1억 9,800만 달러를 청산했습니다. 이 수치는 V3 프로토콜 출시 이후 총 청산 금액(7억 1,800만 달러)의 27%를 차지합니다. 어제의 하락으로 인해 한 고래의 WETH 담보가 1,389만 달러 상당으로 청산되었습니다.

  • 텔레그램의 AI 게임 네트워크 GOAT Gaming이 전략적 자금 조달에 400만 달러를 완료했습니다.

    공식 뉴스에 따르면, 텔레그램의 AI 게임 네트워크인 GOAT Gaming이 TON Ventures, Karatage, Amber Group, Bitscale Capital이 주도한 400만 달러 규모의 전략적 자금 조달 라운드를 완료했다고 발표했습니다. 이 자금 조달로 Mighty Bear의 총 투자가 늘어났습니다. Games, 게임 제작사에서 400만 달러로 인수. 자금 조달 금액은 1,500만 달러에 달했습니다.