일이 잘못되었을 때 부분 변경 처리
기억하시겠지만 전송 흐름은 여러 비동기 메시지에 분산됩니다. 첫 번째 메시지는 보낸 사람의 SHIB 잔액을 줄이고 두 번째 메시지는 받는 사람의 SHIB 잔액을 늘립니다. 이것은 모든 것이 순조롭게 진행되는 행복한 흐름에서 의미가 있지만 두 번째 메시지가 어떻게든 실패하면 어떻게 됩니까?
Ethereum의 EVM과 같은 대부분의 스마트 컨트랙트 시스템은 트랜잭션을 완전히 원자적이고 동기식으로 처리하므로 이후 단계 중 하나가 실패하면 전체 트랜잭션이 되돌아가고 이 트랜잭션으로 인한 모든 상태 변경도 되돌아갑니다. 이 메커니즘은 실제로 이해하기 매우 쉽습니다. 불행하게도 TON의 메시지는 원자적이거나 동기적이지 않기 때문에 이 자동 되돌리기 기능을 사용할 수 없습니다.
그래서 우리가 뭘 할 수 있지? 되돌리기 흐름을 직접 처리해야 합니다. 이것은 TON에서 스마트 컨트랙트 개발을 조금 더 어렵게 만드는 예입니다.
발생한 예외로 인해 TON에서 메시지 처리가 실패할 때 이 메시지의 bounce 플래그가 설정되어 있으면 시스템은 실패한 메시지를 플래그가 설정된 발신자에게 자동으로 다시 보냅니다 bounced. 여기에서 이 메시지 수신 거부 메커니즘 에 대한 사양을 읽을 수 있습니다.
위의 예인 전송 흐름에서 두 번째 메시지의 실패로 돌아가 보겠습니다. 이 메시지는 SHIB 발신자가 SHIB 잔액을 보낸 금액만큼 줄인 후에 실패합니다. 시스템의 일관성을 유지하려면 실패 시 이 감소를 실행 취소해야 합니다. 어떻게 작동할까요? 두 번째 메시지가 플래그가 설정된 상태로 전송되었다고 가정하면 bounce (반송) 된 두 번째 메시지가 수신되면 보낸 사람의 감소를 취소할 수 있습니다. 여기에서 반송된 메시지를 처리하는 공식 Jetton 코드를 볼 수 있고 여기에서 감소를 실행 취소할 수 있습니다 .
이 작업을 신중하게 수행하십시오! TON에서 복잡한 메시지 흐름을 디자인할 때 화이트보드를 꺼내 이 게시물에서 했던 것처럼 다양한 메시지 흐름 다이어그램을 그립니다. 이 작업에서 제가 가장 좋아하는 도구는 훌륭한 오픈 소스 Excalidraw 입니다. 그런 다음 흐름의 모든 단계에서 잠재적인 실패 및 메시지 바운스 시뮬레이션을 시작하여 코드가 실행 취소를 올바르게 처리하는지 확인합니다.
즐거운 코딩하세요!
Tal은 Orbs Network 의 창립자입니다. 그는 열정적인 블록체인 개발자이자 오픈 소스 지지자이자 TON 생태계의 기여자입니다. 그는 또한 TONcoin Fund 의 주요 개발자 중 한 명입니다. TON에 대한 Tal의 작업은 GitHub 에서 팔로우하십시오 . Tal의 개인 작업을 보려면 GitHub 및 Twitter를 팔로우하세요 .
Last updated