BTC
ETH
HTX
SOL
BNB
시장 동향 보기
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

한 기사에서 이더리움 트랜잭션이 경험할 수 있는 8가지 상태를 읽어보세요.

区块链大本营
特邀专栏作者
이 기사는 약 3253자로, 전체를 읽는 데 약 5분이 소요됩니다
이 기사에서는 이더리움의 복잡한 트랜잭션 수명 주기, dapp이 이러한 상황에서 이상적인 사용자 경험을 제공하도록 노력하는 개발자의 과제, dfuse가 이러한 과제를 극복하는 데 어떻게 도움이
AI 요약
이 기사에서는 이더리움의 복잡한 트랜잭션 수명 주기, dapp이 이러한 상황에서 이상적인 사용자 경험을 제공하도록 노력하는 개발자의 과제, dfuse가 이러한 과제를 극복하는 데 어떻게 도움이

편집자 주: 이 기사의 출처는블록체인 캠프 (ID: blockchain_camp)편집자 주: 이 기사의 출처는

블록체인 캠프 (ID: blockchain_camp)

블록체인 캠프 (ID: blockchain_camp)

, 저자: dfuse, 승인을 받아 Odaily에서 복제.

트랜잭션이 이더리움 네트워크에 제출될 때마다 다소 복잡한 일련의 상태를 거치며 모든 상태 전환이 전달되는 것은 아닙니다. 트랜잭션은 이전 상태로 롤백될 수 있고 다른 트랜잭션 교체로 대체될 수 있습니다. 완전한 포크. (트랜잭션의 수명 주기는 아래에 자세히 설명되어 있습니다.)

dapp에서 트랜잭션 진행 상황을 추적하고 사용자에게 좋은 경험을 제공하는 것은 어려운 일입니다. 오늘날 많은 이더리움 기반 dapp은 매력적이지만 여전히 상대적으로 정적인 사용자 경험을 제공할 수 있습니다. 애플리케이션은 특정 시점에서 트랜잭션 상태를 표시할 수 있지만 새로고침해야 합니다(클릭하여 새로고침하거나 dapp UI가 페이지를 주기적으로 새로고침). 정보 업데이트를 받으십시오. 시장에는 상대적으로 더 역동적인 인터페이스가 있지만 제공된 데이터 세분성은 여전히 ​​충분하지 않거나 높은 네트워크 트래픽을 희생시키면서 기본 블록체인 노드에 높은 부하를 부과합니다.

다음으로 우리는 이것이 왜 그런지, 네트워크 및 서버 효율적인 방식으로 세분화된 트랜잭션 상태 업데이트가 최신 표준을 충족하는 dapp에서 원활한 사용자 경험을 제공할 수 있는 방법에 대해 논의합니다.

보조 제목

오늘날의 Dapp 인터페이스

사용자는 트랜잭션 중에 정보를 업데이트해야 하는 경우가 많으므로(예: 전송 완료 시점을 알기 위해) dapp은 인터페이스에 "새로 고침" 버튼을 놓거나(또는 주기적으로 사용자를 위해 페이지를 자동으로 새로 고침) 사용자가 업데이트를 받으려면 브라우저의 새로고침 버튼을 직접 클릭해야 합니다.

보다 성숙한 사용자 경험을 제공하는 일부 dapp은 사용자에게 거래의 동적 업데이트를 표시합니다. 백그라운드에서 AJAX 요청을 폴링하고 Ethereum 노드에서 업데이트를 다시 확인하고 프런트엔드에 업데이트를 게시합니다. 거래의 수명 주기를 처음부터 끝까지 추적하기 위해 dapp이 다양한 데이터 소스(블록, 멤풀 및 네트워크 조건 포함)를 쿼리하는 수많은 API 호출을 만들어야 하기 때문에 그렇게 하는 것은 복잡합니다.

이 접근 방식에는 단점이 있습니다: 트랜잭션이 자주 업데이트되지 않고 정보 세분화가 커서 사용자가 업데이트를 더 빨리 얻기 위해 반복적으로 "새로고침"을 클릭하게 하거나 dapp이 블록체인을 자주 폴링해야 하므로 많은 수의 네트워크 트래픽이 발생합니다. , 기본 블록체인 노드에 높은 부하를 부과합니다.

보조 제목

  • 온체인 이벤트 기반 인터페이스를 사용하지 않는 이유는 무엇입니까?

  • dapp 개발자에게는 이더리움 노드에서 제공하는 API의 특성을 반영하여 정적 페이지를 수행하거나 폴링하는 것이 유일한 두 가지 옵션이었습니다. 체인에 푸시된 트랜잭션 상태 업데이트를 수신하고 사용자에게 실시간 피드백을 제공할 수 있는 온체인 이벤트 기반 인터페이스가 있는 경우 dapp은 더 나은 사용자 경험을 제공할 수 있지만 표준 이더리움 노드는 풍부한 실시간을 제공하지 않습니다. 거래 데이터.

  • 이더리움 노드는 온체인 이벤트의 스트림 읽기를 제공하지만 기능이 제한되어 있고 이더리움의 JSON-RPC 인터페이스를 사용하는 PUB/SUB 기능을 통해서만 사용할 수 있습니다(GraphQL을 사용할 때는 사용할 수 없음). PUB/SUB 인터페이스를 통해 dapp은 일부 이벤트 유형에 대한 알림을 수신할 수 있습니다.

  • newHeads - 새 블록 헤더가 체인에 추가될 때마다

newPendingTransactions - 보류 상태에 진입하고 노드에서 사용 가능한 키로 서명된 모든 트랜잭션의 해시(퍼블릭 노드에서는 드뭅니다)

syncing - 노드가 동기화를 시작하거나 중지하는 시기를 나타냅니다.

보조 제목

이더리움 트랜잭션 수명 주기

Ethereum 트랜잭션에는 복잡한 수명 주기가 있습니다. 각 트랜잭션은 여러 상태(상태)를 거치고 프로세스 전반에 걸쳐 다양한 상태 변경을 거치며 앞으로 이동하거나 롤백할 수 있습니다.

  • 보조 제목

  • 거래현황

  • 이더리움 트랜잭션을 제출하는 것부터 블록에 들어가는 것(일정한 성공 확률 포함)까지 다음과 같은 일련의 상태를 거칩니다.

  • UNKNOWN(알 수 없음): 네트워크에서 감지되거나 처리되지 않은 트랜잭션은 UNKOWN 상태에 있는 것으로 정의됩니다.

  1. PENDING: 우리가 mempool이라고 부르는 거래는 광부가 선택하고 처리하기를 기다리고 있습니다. 채굴자들은 일반적으로 가스 가격이 높은 트랜잭션을 먼저 선택하므로 가스 가격이 낮은 트랜잭션은 오랫동안 PENDING 상태에 있을 수 있습니다. 가장 낮은 가스 가격을 가진 트랜잭션은 선택되지 않을 수 있으며, 무기한 PENDING 상태로 남게 됩니다.

  2. IN_BLOCK: 채굴자가 트랜잭션을 성공적으로 선택하고 블록으로 처리하면 트랜잭션이 IN_BLOCK 상태로 들어갑니다. 트랜잭션이 IN_BLOCK 상태에 들어가지만 해당 블록이 포크된 경우 트랜잭션이 PENDING 상태로 돌아갈 수 있습니다.

동일한 nonce를 가진 동일한 발신자의 다른 트랜잭션이 IN_BLOCK 상태에 들어가거나



nonce는 같지만 가스 가격이 12% 더 높은 동일한 발신자의 또 다른 트랜잭션이 PENDING 상태에 진입합니다.

아래 다이어그램은 이러한 상태와 상태 간 전환을 보여줍니다.

  • 보조 제목

  • 상태 전환

  • 위의 그림과 같이 상태 간 전환도 이름으로 정의됩니다.

  • POOLED(풀로): UNKOWN(알 수 없음) 상태의 트랜잭션은 광부가 선택하기를 기다리는 트랜잭션 풀에 들어가고 POOLED라고 하며 PENDING(보류) 상태에 들어갑니다. 교체 조건이 더 이상 참이 아닌 경우 REPLACED 상태의 트랜잭션(예: 드물지만 IN_BLOCK에서 가스 가격이 낮은 트랜잭션이 분기되어 동일한 nonce로 대체되고 전자의 트랜잭션이 다음과 같은 경우 전송됨) 여전히 네트워크에 떠 있는 경우) 다시 POOLED 상태로 변경할 수도 있습니다.

  • MINED(채굴됨): 채굴된 트랜잭션은 블록을 생성하는 채굴자가 처리하는 트랜잭션입니다. 일단 채굴되면 트랜잭션은 IN_BLOCK 상태에 있는 것으로 간주됩니다. 이더리움 네트워크의 피어 투 피어 특성으로 인해 지정된 노드의 관점에서 트랜잭션은 명시적으로 PENDING(보류) 상태를 거치지 않고 UNKNOWN(알 수 없음) 상태에서 IN_BLOCK 상태로 직접 들어갈 수 있습니다. 같은 이유로 트랜잭션은 주어진 노드의 관점에서 모니터링되는 PENDING 상태를 거치지 않고 REPLACED 상태에서 IN_BLOCK 상태로 직접 전환할 수도 있습니다.

FORKED(포킹): 채굴된 트랜잭션이 네트워크에 의해 취소된 블록에 있을 때, 그것은 포크된 트랜잭션입니다. 해당 블록의 모든 트랜잭션은 IN_BLOCK(수신 블록) 상태에서 PENDING(보류 중) 상태로 차례로 분기됩니다.

CONFIRMED: IN_BLOCK 상태의 트랜잭션은 후속 하위 블록이 채굴될 때마다 확인됩니다.

위에서 언급했듯이 이더리움의 트랜잭션 수명 주기는 매우 복잡하기 때문에 dapp이 이를 정확하게 추적하고 사용자에게 원활하고 원활한 업데이트를 제공하기 어렵습니다.

보조 제목

거래 상태를 쉽게 추적

dfuse 플랫폼은 스트리밍 모니터링이 가능한 풍부한 인터페이스를 제공하여 이더리움 트랜잭션의 수명 주기에 대한 실시간 상세 추적을 지원합니다. dfuse Ethereum Transaction Status Tracker API를 사용하면 개발자가 Ethereum 트랜잭션을 제출한 다음 수명 주기 동안 트랜잭션의 진행 상황에 따라 동일한 데이터 채널에서 세분화된 상태 업데이트를 즉시 얻을 수 있습니다.

GraphQL을 사용하면 지정된 트랜잭션 유형의 변경 사항을 실시간으로 모니터링하는 동시에 트랜잭션이 변경될 때마다 수신하려는 데이터를 정확하게 지정할 수 있습니다. dfuse 플랫폼은 트랜잭션을 추적하고 이벤트가 발생할 때 실시간으로 dapp에 스트리밍하는 복잡성을 처리합니다.

아래 애니메이션은 이 복잡한 수명 주기를 거치는 트랜잭션을 보여줍니다. 블록에 포함되고 확인되기 전에 8가지 상태 전환을 거칩니다.

dfuse를 사용하지 않는 경우 dapp은 블록체인에 계속해서 액세스하여 트랜잭션에서 경험한 모든 전환을 캡처하고 사용자에게 업데이트해야 하며 각 상태 전환을 처리할 백엔드 코드를 준비해야 합니다.

dfuse를 사용하면 dapp은 단일 연결을 통해 스트리밍 업데이트만 받으면 되며 dfuse는 운명이 확정될 때까지 다양한 우여곡절을 통해 트랜잭션을 추적합니다.

  • 보조 제목

  • 고급 Dapp을 위한 최신 플랫폼

  • Lifecycle API는 dfuse 플랫폼의 작고 중요한 부분일 뿐입니다. dfuse는 다음과 같이 dapp을 위한 완전한 최신 인프라 계층을 제공합니다.

  • 빠른,

  • 확장 가능

ETH
Odaily 공식 커뮤니티에 가입하세요