출시 전: 체인이 잡아내는 결함, 수수료 전용 NRO
출시를 준비하며 지난 몇 주간의 결함을 검토했고, 그 공통점을 찾았습니다. 거의 모든 결함이 다른 샤드가 소유한 상태에 대한 쓰기이거나, 완전한 회계 없이 샤드 간에 이동한 가치였습니다. 리뷰는 그것들을 하나씩 찾아냈습니다. 저희는 시스템이 스스로 찾아내야 한다고 결정했습니다.
스토리지 계층의 소유권 가드
이제 데이터베이스에 대한 모든 쓰기는 어느 샤드가 그 키를 소유하는지 확인합니다. 샤드가 자신이 소유하지 않은 레코드에 쓰면 트랜잭션 전체가 롤백되며, 테스트에서는 호출 위치를 알려 줍니다. 이 접근 방식은 상태 키가 수신 계정 범위로 제한되는 NEAR를 따릅니다. 가드는 첫날 오래된 결함 네 개를 찾아냈습니다. 예를 들어 모든 크로스샤드 전송이 다른 샤드에서 송신자의 nonce를 움직이고 있었습니다.
공급량 불변식
모든 샤드는 NRO와 각 자산이 얼마나 생성되고, 소각되고, 다른 샤드로 보내지고, 다른 샤드에서 받았는지 장부를 유지합니다.
잔액, 거래 계정, 풀, 스테이크의 합은 장부와 일치해야 합니다 — Cosmos SDK의 TotalSupply 불변식과 같은 아이디어입니다.
이 검사는 단위 테스트에서, 그리고 모든 네트워크 테스트 이후에 실행되며, 모든 병합 전에 실행하는 시리즈는 샤드 하나와 둘을
모두 포괄합니다.
수수료 화폐로만 쓰이는 NRO
DEX는 첫날부터 켜져 있지만, NRO는 거래 자산이 아닙니다. NRO가 들어간 풀도, 거래 계정으로의 NRO 입금도 없습니다. 하나의
거버넌스 파라미터 dex_nro_tradable 이 이를 결정하므로, NRO 페어는 나중에 릴리스 없이 투표로 열 수 있습니다. 저희는
기존의 두 메커니즘을 바탕으로 만들었습니다. Cosmos SDK에서는 단일 코인의 전송을 거버넌스가 켜고 끄며, Cosmos Hub는
정확히 그렇게 출시되었습니다. ATOM 전송은 제네시스 시점에 꺼져 있었고 투표로 켜졌습니다. Osmosis에서는 풀이 사용할 수
있는 기본 자산을 거버넌스가 정합니다. 파라미터가 다시 꺼지더라도 빠져나가는 길은 열려 있습니다. 유동성과 NRO 잔액은
언제든 인출할 수 있습니다.
메인 잔액에서 내는 자산 발행 수수료
자산 발행 수수료는 이제 거래 계정이 아니라 가스처럼 메인 NRO 잔액에서 지불됩니다 — Osmosis에서 풀 생성 수수료를 내는 방식과 같습니다. 다른 샤드에서 자산을 발행하면 수수료가 작업과 함께 이동하며, 발행이 거부되면(예를 들어 심볼이 이미 사용 중인 경우) 수수료는 전액 반환됩니다.
결과
단위 테스트 373개. DEX 네트워크 테스트는 자산/자산 페어용으로 다시 작성되었으며 NRO 거부, 다른 샤드에서 발행된 자산, 수수료 환불을 확인합니다. 9개 네트워크 테스트 전체 시리즈가 통과했고, 공급량 불변식은 모든 실행에서 유지되었습니다. 다음으로 트랜잭션을 적용하는 모든 경로를 이 두 규칙에 비추어 확인합니다.