Smart Contract20 동일한 스마트 컨트랙트 주소로 배포 CREATE2 ✏️ 서로 다른 체인 간 계약 주소가 동일할 수 있을까? 결론부터 얘기하면 서도 다른 체인, 즉 이더리움 네트워크와 클레이튼 네트워크에 동일한 계약주소로 계약을 배포할 수 있습니다. 계약주소를 생성할 때 기본적으로 사용되는 CREATE opcode는 아래와 같은 식으로 2개의 인자값으로 계약 주소를 생성합니다. opcode에 대해 궁금하시면 아래 글을 참고해 주세요. EVM과 Ethereum Opcode ✏️ EVM EVM(Ethereum Virtual Machine)은 이더리움 가상 머신으로, 우리가 흔히 geth 같은 이더리움 클라이언트를 설치하면 스마트 계약을 실행하기 위해 특별히 제작된 경량 운영 체제인 EVM도 함께 제공 tech-talks.tistory.com keccak256(rlp([sen.. Smart Contract/Smart Contracts 2023. 12. 24. 외부 컨트랙트 호출하기 call ✏️ 외부 컨트랙트를 호출? A컨트랙트에서 B컨트랙트에 함수를 호출할 수 있을까요? 결론부터 말하면 가능합니다. 정확히는 A에서 B의 계약주소만 알고 있다면 가능합니다. 방법은 A컨트랙트에서 B의 계약주소와 call( ) 메서드를 사용하여 접근이 가능합니다. 이 외에도 delegatecall( ) 메서드를 사용하여 접근이 가능하지만 오늘은 call( ) 메서드에 대해서만 다뤄보도록 하겠습니다. 이때 call 메서드의 인자값으로 bytecode가 필요한데, 이 bytecode는 실행할 함수, 인자값을 인코딩한 bytecode입니다. bytecode와 EVM이 스마트 컨트랙트를 실행하는 동작원리가 궁금하시면 아래 글을 참고해 주세요. EVM과 Ethereum Opcode ✏️ EVM EVM(Ethereum .. Smart Contract/Smart Contracts 2023. 12. 22. Hardhat ✏️ Hardhat Hardhat은 이더리움 소프트웨어를 위한 개발 환경입니다. 스마트 계약 및 dApp을 편집, 컴파일, 디버깅 및 배포하기 위한 다양한 요소로 구성되며, 모두 함께 작동하여 완전한 개발 환경을 만듭니다. 🤔 Hardhat 기능 1️⃣ 테스팅 환경 Hardhat은 테스트 환경을 설정하고 테스트 코드를 작성하는데 큰 편의를 제공합니다. Mocha와 Chai를 기본적으로 지원하며, 테스트 케이스 작성, 실행, 결과 보고 등을 간편하게 수행할 수 있습니다. 또한 스마트 컨트랙트의 함수를 테스트하기 위해 Hardhat EVM을 사용하여 로컬 블록체인에서 테스트를 실행할 수 있습니다. 더보기 💡 Mocha Mocha는 Javascript 프레임워크로, 테스트 코드를 작성하고 실행하기 위한 기능들.. Smart Contract/Frameworks 2023. 11. 9. Solidity ✏️ Solidity 문법 ❗️변수 1️⃣ Local 변수 함수 내부에서 선언합니다. 블록체인에 저장되지 않습니다. 2️⃣ State 변수 함수 외부에서 선언합니다. 블록체인에 저장됩니다. 3️⃣ Global 변수 블록체인에 대한 정보를 제공합니다. // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; contract Variables { // 블록체인에 저장되는 상태 변수입니다. string public text = "Hello"; uint public num = 123; function doSomething() public { // 블록체인에 저장되지 않는 로컬 변수입니다. uint i = 456; // 블록체인에 대한 정보를 제공해주는 글로벌 변수입니.. Smart Contract/Languages 2023. 11. 9. 스마트 컨트랙트 보안 도구 - Echidna ✏️ Echidna Echidna는 스마트 컨트랙트의 무작위 테스트를 수행하는 도구로 사용됩니다. Echidna는 특정 조건을 만족하는 테스트 케이스를 자동으로 생성하여 스마트 컨트랙트의 안정성과 보안을 향상시키는 데 도움을 줍니다. Echidna는 기존 테스트 케이스를 확장하고 이를 기반으로 새로운 테스트 케이스를 생성합니다. 이 과정에서 무작위성을 사용하여 가능한 다양한 상황에서 스마트 컨트랙트를 테스트합니다. 이러한 무작위 테스트는 예상치 못한 상황에서 코드의 문제점을 발견하고, 보안적으로 취약한 부분을 확인하는 데 도움을 줍니다. 🤔 Echidna 기능 1️⃣ 무작위 테스트 생성 Echidna는 무작위성을 사용하여 새로운 테스트 케이스를 자동으로 생성합니다. 이는 기존 테스트 케이스만으로는 도달하.. Smart Contract/Security Tools 2023. 11. 7. 스마트 컨트랙트 보안 도구 - Slither ✏️ Slither Slither은 스마트 컨트랙트 보안 정적 분석을 위한 오픈 소스 도구로, Solidity와 Vyper와 같은 이더리움 스마트 컨트랙트 언어로 작성된 스마트 컨트랙트의 취약점을 검사하고 보안 문제를 발견하는 데 사용됩니다. Slither은 다양한 보안 문제를 식별하고, 스마트 컨트랙트의 코드 품질을 분석하여 보다 안전하고 견고한 스마트 컨트랙트를 개발하는 데 도움을 줍니다. 이를 통해 개발자는 스마트 컨트랙트를 배포하기 전에 잠재적인 취약성을 미리 파악하고 조치를 취할 수 있습니다. 🤔 Slither 기능 1️⃣ 정적 분석 스마트 컨트랙트 코드를 분석하여 정적으로 취약점을 식별합니다. 예를 들어, 무한 루프, 잠재적인 오버플로우, 사용자 입력의 제대로 된 검증 여부 등을 확인합니다. .. Smart Contract/Security Tools 2023. 11. 7. 스마트 컨트랙트 보안 도구 - MythX ✏️ MythX MythX는 이더리움 스마트 컨트랙트의 보안 검사를 위한 자동화된 플랫폼입니다. 스마트 컨트랙트는 블록체인에서 실행되는 프로그램으로, 보안 결함이나 취약점이 있을 경우 심각한 결과를 초래할 수 있습니다. MythX는 이러한 스마트 컨트랙트의 보안 취약성을 식별하고 개선하기 위해 개발되었습니다. 🤔 MythX 기능 1️⃣ 단언 및 속성 검사 Solidity assert 위반 : 심볼릭 분석, 퍼징 (바이트 코드) MythX 단언 위반 (AssertionFailed 이벤트) : 심볼릭 분석, 퍼징 (바이트 코드) MythX가 스마트 컨트랙트 코드 내에서 단언이 실패하는 경우를 탐지합니다. 2️⃣ 바이트 코드 안전성 산술 연산 중 정수 오버플로우 : 심볼릭 분석, 퍼징 (바이트 코드) 산술 연.. Smart Contract/Security Tools 2023. 11. 7. 스마트 컨트랙트 공격 - Private 변수 악용 ⛔️ Private 변수 악용 스마트 컨트랙트의 변수를 private로 선언하면 외부에서 접근할 수 없다는 일반적인 개념과 달리, Solidity에서 private로 선언된 변수는 외부에서 접근이 가능합니다. 이는 Solidity 의 스토리지 구조와 저장 방식 때문에 발생합니다. ❗️ Solidity 스토리지 구조 Solidity에서 변수는 스토리지(storage) 또는 메모리(memory)에 저장됩니다. 스토리지는 하드 디스크에 데이터를 저장하는 것으로 비교할 수 있으며, 메모리는 RAM에 데이터를 저장하는 것으로 비교할 수 있습니다. 스토리지는 슬롯(slot)으로 구성되어 있으며, 총 스토리지 크기는 2^256 바이트이고, 각 슬롯은 32 바이트를 차지합니다. 데이터는 선언된 순서대로 순차적으로 저장.. Smart Contract/Security 2023. 11. 7. 스마트 컨트랙트 공격 - 리플레이 공격 ⛔️ 리플레이 공격 리플레이 공격은 블록체인에서 발생하는 보안 위협 중 하나로, 유효한 데이터 전송을 악의적이거나 부정하게 반복 또는 지연시켜 발생하는 공격입니다. 이러한 공격은 특히 블록체인에서 중요한 거래나 계약을 수행하는 경우에 매우 치명적일 수 있습니다. 리플레이 공격은 주로 블록체인 트랜잭션을 그대로 복사하여 다른 블록체인 또는 같은 블록체인 상의 다른 계정에 다시 제출하는 것으로 이루어집니다. 이로 인해 같은 거래가 두 번 이상 처리되는 결과를 초래할 수 있습니다. 멀티시그 지갑을 통해 리플레이 공격에 대해 설명하겠습니다. 잔액이 2 ETH이고 두 명의 관리자인 Bill과 Elon이 있는 멀티시그 지갑이 있습니다. Bill이 지갑에서 1 ETH를 인출하려면 아래와 같은 절차를 거칩니다. 1️⃣.. Smart Contract/Security 2023. 11. 6. 스마트 컨트랙트 공격 - 복제 논리 공격 ⛔️ 복제 논리 공격 스마트 컨트랙트의 임의성 또는 복제 논리 공격은 스마트 컨트랙트에서 랜덤한 값을 생성하거나 결정할 때 발생하는 취약점입니다. 복제 논리 공격은 공격자가 랜덤 숫자 생성 로직을 스마트 컨트랙트와 동일하게 복제하여 정확한 결과를 예측하는 방법입니다. 즉, 공격자가 스마트 컨트랙트에서 사용하는 난수 생성 함수를 자신의 공격용 컨트랙트에 동일하게 구현하고, 이를 통해 스마트 컨트랙트와 동일한 랜덤한 값을 얻어냅니다. 따라서 스마트 컨트랙트의 랜덤 결과를 예측할 수 있게 되어 공격자가 불공정하게 게임을 이길 수 있거나 다른 부정한 행위를 할 수 있는 상황이 발생합니다. 😭 피해자 스마트 컨트랙트 // SPDX-License-Identifier: MIT pragma solidity ^0.8.9.. Smart Contract/Security 2023. 11. 6. 스마트 컨트랙트 공격 - DelegateCall 스토리지 충돌 공격 ⛔️ DelegateCall 스토리지 충돌 공격 이 공격을 이해하기 전에, Solidity가 상태 변수를 저장하는 방식을 이해해야 합니다. 먼저 call과 delegatecall의 차이점을 설명하겠습니다. Solidity는 스마트 컨트랙트 함수에 메시지를 전달하는 두 가지 저수준 인터페이스를 지원합니다. 이러한 인터페이스는 스마트 컨트랙트 인스턴스 대신 스마트 컨트랙트 주소를 기반으로 작동합니다. ❗️ Call vs DelegateCall Solidity는 스마트 컨트랙트 함수에 메시지를 전달하는 두 가지 저수준 인터페이스를 지원합니다. 이러한 인터페이스는 스마트 컨트랙트 인스턴스 대신 주소를 기반으로 작동합니다. 🟠 Call Call은 호출된 스마트 컨트랙트의 스토리지 컨텍스트를 가진 호출자에서 호출된.. Smart Contract/Security 2023. 11. 6. 스마트 컨트랙트 공격 - 서비스 거부 공격 (DoS) ⛔️ 서비스 거부 공격 (Denial of Service) 서비스 거부 공격은 악의적인 공격자가 네트워크 또는 시스템을 과부하시키거나 새로운 연결을 거부하여 정상적인 사용자들이 서비스를 이용할 수 없도록 만드는 공격입니다. 이러한 공격은 서버 또는 네트워크 자원을 초과해서 사용하여 서비스를 정상적으로 처리할 수 없게 만드는 것이 목표입니다. ❗️ 예기치 않은 Revert 아래는 예기치 않은 Revert가 DoS를 유발할 수 있는 방법을 설명하기 위한 입찰 스마트 컨트랙트입니다. 😭 피해자 스마트 컨트랙트 // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; contract Auction { address frontRunner; uint256 highestBi.. Smart Contract/Security 2023. 11. 6. 이전 1 2 다음