시작하지 얼마 안된 초보가 질문 하나 드립니다

컨트렉트 상에서 유저들이 메소드에 동시접근이 가능한건가요?

예를들어 1씩 플러스 되는 메소드가 있다면.

a 유저 b 유저 동시 접근 했을떄…

문제가 생길수있다고 생각하는데요.

컨트렉트 상에서 메소드에 동시호출이 될수 있는지 궁금합니다.

안녕하세요.

컨트랙트의 메소드를 호출하기 위해서는, 각 사용자는 컨트랙트 메소드를 실행하는 트랜잭션을 생성 및 전송해야 합니다.

만약, A 유저가 컨트랙트의 +1을 증가시키는 메소드를 호출하기 위해 트랜잭션을 생성 및 전송하며
B 유저 역시 +1을 증가시키는 메소드를 호출하기 위해 트랜잭션을 생성 및 전송한다고 했을 때,

A와 B 유저의 트랜잭션 중 먼저 도달한 트랜잭션부터 컨트랙트 메소드를 순차적으로 실행합니다.
따라서, 동시에 실행하는 상황은 발생하지 않습니다.

감사합니다 :slight_smile:

1개의 좋아요

답변감사합니다.

그럼 궁금한것이 있습니다.
컨트렉트 상은 멀티쓰레드 형태가 아닌건지요?
동시에 접근한다고 해도 줄세우기로인해서 하나씩 처리가 되는건지가 궁금합니다.

가령 A컨트렉트에 A 메소드를 실행할때 이 메소드가 끝나야
다른 사용자가 A컨트렉트에 A메소드에 접근이 가능하게 되는건지요?

네, 맞습니다.

말씀해주신 것처럼, 두 사용자의 서로 다른 트랜잭션이 컨트랙트에 동시에 접근한다고 해도
줄세우기로 인해 하나씩 처리가 됩니다.

사용자들이 전송한 서로 다른 트랜잭션은 하나의 블록에 포함되며,
따라서 블록 내의 트랜잭션들이 순차적으로 실행 (각 트랜잭션 실행에 의해 컨트랙트는 상태 변화를 하며, 이후의 트랜잭션은 컨트랙트의 변경된 상태를 기반으로 실행)됩니다.

Alice, Bob 두 사용자가 컨트랙트의 count 값을 +1 증가시키는 함수를 호출하는 트랜잭션을 전송하는 상황을 가정하겠습니다.

현재 컨트랙트의 count 값이 0이며, Alice의 트랜잭션이 먼저 실행된다면 count 값은 1로 증가하게 됩니다. 그리고, Bob의 트랜잭션에 의해, 컨트랙트는 Alice의 트랜잭션에 의해 실행되어 변경된 count 값에 추가적으로 +1이 증가하게 되어, 최종적으로는 count 값은 2가 됩니다.

감사합니다 :slight_smile:

1개의 좋아요