관리 메뉴

평행우주 : world 1

[블록체인이론] 스마트컨트랙트의 생명주기 본문

텃밭 1 : BlockChain/이론

[블록체인이론] 스마트컨트랙트의 생명주기

parallelworlds 2022. 3. 27. 14:12

 

 

스마트컨트랙트의 생명주기

스마트컨트랙트는 일반적으로 솔리디티 같은 고급언어로 작성된다

그러나 컨트랙트를 실행하려면, EVM에서 실행되는 저수준의 바이트 코드로 컴파일 되어야 한다

일단 컴파일 되면 고유한 컨트랙트 생성 트랜잭션을 사용하여 이더리움 플랫폼에 배포되며,

이 트랜잭션은 고유한 컨트랙트 생성 주소,

즉 0x0으로 전송된다 

 

 

+) 참고

2022.03.27 - [텃밭 1 : BlockChain/이론] - [블록체인이론] 특별 트랜잭션 : 컨트랙트 생성

 

[블록체인이론] 특별 트랜잭션 : 컨트랙트 생성

특별 트랜잭션 : 컨트랙트 생성 블록체인에 새로운 컨트랙트를 만들어 향후 사용을 위해 배포하는 트랜잭션 컨트랙트 생성 트랜잭션은 제로 어드레스라고 하는 특수 대상 주소로 전송된다 컨트

1parallelworlds.tistory.com

 

 

각 컨트랙트는 이더리움 주소로 식별되며,

이 주소는 원래 계정 및 논스의 함수로 컨트랙트 생성 트랜잭션에서 파생된다

컨트랙트의 이더리움 주소는 트랜잭션에서 수신자로 사용되거나, 컨트랙트에 자금을 보내거나, 컨트랙트 함수를 호출하는데 사용할 수 있다

EOA와 달리 새 스마트 컨트랙트를 위해 생성한 계정과 관련된 키는 없다

컨트랙트 작성자는 프로토콜 수준에서 특별한 권한을 얻지 못한다 (컨트랙트 계정을 위한 개인키를 받지 못함)

여기서 우리는 스마트 컨트랙트 계정은 그들 자체를 소유하고 있다고 말할 수 있다

 

중요한 것은 컨트랙트가 트랜잭션에 의해 호출된 경우에만 실행된다는 것이다

이더리움의 모든 스마트 컨트랙트는 EOA에서 시작된 트랜잭션에 의해 실행된다

컨트랙트는 다른 컨트랙트를 호출할 수 있고, 그 컨트랙트는 또 다른 컨트랙트를 호출할 수 있지만,

이러한 체인에서 첫 번째 컨트랙트 실행은 항상 EOA로부터 트랜잭션에 의해 호출된다

컨트랙트는 자체적으로 또는 백그라운드에서 실행되지 않는다

스마트 컨트랙트는 체인의 일부분으로 트랜잭션에 의해 직접 혹은 간접적으로 호출되기 저나지는 대기 상태에 놓인다

스마트 컨트랙트는 또한 '병렬적'으로 실행되지 않는다 (이더리움 월드 컴퓨터는 단일 스레드 컴퓨터)

 

트랜잭션은 모든 실행이 성공적으로 종료된 경우에만 글로벌 상태의 모든 변경사항이 기록되고 전체가 실행된다

성공적인 종료는 프로그램이 오류 없이 실행되었고 실행의 끝까지 도달했음을 의미한다

오류로 인해 실행이 실패하면 모든 상태 변경은 트랜잭션이 실행되지 않은 것처럼 롤백된다

실패한 트랜잭션은 여전히 시도된 것으로 기록되며, 실행을 위해 가스로 소비된 이더는 계정에서 차감되지만,

컨트랙트 또는 계좌 상태에는 영향을 미치지 않는다

 

컨트랙트 코드는 변경할 수 없지만, 

컨트랙트를 '삭제'하여 해당 주소에서 코드와 내부상태(스토리지)를 제거하고 빈 계정으로 남길 수 있다

컨트랙트가 삭제된 후 해당 계정 주소로 전송된 트랜잭션은 더 이상 코드가 실행되지 않는다

SELFDESTRUCT라는 EVM 연산코드를 실행하면, 컨트랙트를 삭제할 수 있다

이 기능은 컨트랙트 작성자가 해당 기능을 갖기 위해 스마트컨트랙트를 프로그래밍한 경우에만 사용 가능하다

이 작업은 '음의 가스' 즉 가스 환불이 일어난다

이 방법으로 컨트랙트를 삭제해도  블록체인 자체를 변경하지는 못하기 때문에 컨트랙트의 트랜잭션 과거 내역이 제거되지는 않는다

 

 

 

 

 

 

Comments