솔라나 6월 1일 수요일 약 16:30 UTC에 Solana의 메인넷 베타 클러스터는 내구성이 뛰어난 논스 트랜잭션 기능의 버그로 인해 합의 지연으로 인해 블록 생성을 이후 4시간 30분 동안 중단하였습니다. 검증기 운영자들은 가장 진전된 지점을 식별하기 위해 작업했고, 네트워크 재시동을 집단적으로 시행했으며, 이로 인해 내구성이 강한 논스 트랜잭션이 일시적으로 비활성화되었습니다. 블록 제작은 같은 날 21:00 UTC에 재개되었고, 네트워크 운영자들은 몇 시간 동안 클라이언트 서비스를 계속 복구했습니다. 참고: 이 문제는 1.10 및 1.11의 개선 사항과 관련이 없습니다. 향후 개선 사항에 대한 자세한 내용은 여기에서 확인할 수 있습니다. | 중단의 원인은? 내구 논스 트랜잭션 기능에 의해 트리거된 런타임 버그를 통해 특정 상황에서 실패한 내구 논스 트랜잭션을 두 번 처리할 수 있습니다. 이것은 검증자가 트랜잭션을 두 번째로 처리했을 때 비결정론으로 이어졌고, 일부 노드는 후속 블록을 거부했고, 다른 노드는 이를 받아들였습니다. 비판적으로 33% 이상의 검증자가 블록을 승인했지만, 그 수는 비결정론을 조정하는데 필요한 66%에 미치지 못했습니다. 논스 트랜잭션은 어떻게 작동하며, 일반 트랜잭션과 어떻게 다른가요? Solana는 중복되지 않는 트랜잭션의 병렬 처리를 활용하여 처리량을 크게 향상시킵니다. 트랜잭션을 직렬로 처리하는 네트워크는 증가된 nonce를 사용할 수 있습니다. Solana는 트랜잭션이 두 번 처리되지 않도록 하기 위해 다른 방법을 사용합니다. 솔라나 블록체인의 트랜잭션 중 99.99% 이상을 차지하는 정상 트랜잭션의 경우 네트워크는 최근 블록 해시를 활용하고 해당 창 내에서 처리된 트랜잭션의 기록을 유지하여 중복이 처리되지 않도록 한다. 내구성이 뛰어난 논스 트랜잭션은 만료되지 않도록 설계되었기 때문에 이중 처리를 방지하기 위한 다른 메커니즘이 필요하며, 순차적으로 처리됩니다. 이러한 트랜잭션은 내구성이 뛰어난 논스 트랜잭션이 처리될 때마다 순환되는 각 계정에 고유한 온체인 값을 사용합니다. 값이 회전된 후에는 동일한 내구성이 뛰어난 논스 트랜잭션을 다시 처리할 수 없습니다. | 무슨 일이 일어났나? 특정 환경에서 내구성이 뛰어난 논스 트랜잭션을 처리한 결과 네트워크가 전진하지 못하게 하는 런타임의 버그가 발견되었습니다. 이 버그는 내구성이 뛰어난 논스 트랜잭션이 실패하도록 요구했으며 성공적인 트랜잭션에 의해 트리거되지 않았습니다. 트랜잭션이 정상 트랜잭션으로 처리될 수 있을 만큼 블록 해시가 최근인 동안 영구 논스 트랜잭션이 처리되었습니다. 최근 블록 해시를 보고 런타임은 영구적인 논스 트랜잭션이 아닌 정상적인 트랜잭션을 처리하고 있다고 가정했습니다. 이 트랜잭션은 실패했으며 영구 트랜잭션으로 처리되지 않았기 때문에 온체인 논스 값이 의도한 대로 진행되지 않았습니다. 실패한 거래가 성공적으로 블록에 추가되었기 때문에, 그것의 거래 수수료가 지불되었다. 내구거래가 한 번 처리됐다가 실패한 후에도 여전히 내구거래로 다시 처리될 수 있었던 것은 참조한 nonce값이 진전되지 않아 여전히 사용 가능했기 때문입니다. 실패한 트랜잭션이 처리된 후 다시 nonce가 사용되기 전에 사용자는 처리를 위해 동일한 트랜잭션을 다시 제출했습니다. 이 재제출로 인해 런타임에 버그가 활성화되었습니다. 실패한 내구성 논스 트랜잭션이 클러스터에 다시 제출되었습니다. 블록 프로듀서가 빌드 중인 블록으로 이 트랜잭션을 잘못 수락했습니다. 온체인에서 nonce 값이 진행되지 않았기 때문입니다. 검증자가 블록을 검증했을 때, 새로운 블록이 발견된 부분에는 이전에 처리되었던 트랜잭션이 포함되었는데, 이는 이 영구적인 논스 트랜잭션이 포함되었기 때문입니다 . 트랜잭션의 이전 인스턴스가 더 이상 최근에 처리된 캐시에 없기 때문에 한 검증자 집합이 블록을 거부한 반면 다른 집합은 블록을 수락했습니다. 비판적으로 33% 이상의 검증자가 블록을 승인했지만, 그 수는 비결정론을 조정하는데 필요한 66%에 미치지 못했습니다. | 진행 중인 것. 동일한 상황이 다시 발생할 경우 네트워크가 중지되는 것을 방지하기 위해 릴리스 v1.9.28/v1.10.23에서 내구성이 뛰어난 논스 트랜잭션 기능을 사용할 수 없도록 설정했습니다. 완화가 적용되고 다음 릴리스에서 기능이 다시 활성화될 때까지 내구성이 뛰어난 논스 트랜잭션은 처리되지 않습니다. [추천영상] |