다섯 언어의 일관성을 유지하는 방법
- 커밋 전에 각 언어의 액션 목록, 라우트 유형 표기, 버전 번호를 자동으로 비교합니다.
- Python 바인딩은 스크립트로 Go에서 생성하며, 생성 결과가 수작업으로 고쳐지지 않았는지 검증합니다.
- 암호화와 관련된 형식(메일함, 그룹, 파일 자격 증명, 백업, 노드 디렉터리)에는 공유 테스트 벡터가 있으며, Go, Dart, Python 세 곳에서 바이트 단위로 비교합니다.
GProtocol은 동일한 프로토콜 정의를 다섯 가지 언어로 유지합니다. 액션 상수, 메시지 구조, 오류 key, 버전 번호입니다. Go가 기준 원본이며 나머지 언어는 항목별로 이에 맞춥니다.
| 언어 | 패키지 이름 | 내용 | 상태 |
|---|---|---|---|
| Go | gather-gprotocol/go | 상수, 메시지 구조, 버전 판단, 서명 원문 조립 같은 보조 함수 | 노드에서 사용 중 |
| Dart | gather_protocol | 상수와 타입(JSON 직렬화 포함) | 앱에서 사용 중 |
| Java | top.gather.protocol | 상수와 타입 | 정의만 있음 |
| JavaScript | @gather-network/gather-protocol | 상수, 타입, 메시지 팩토리 함수 | 정의만 있음 |
| Python | gather_protocol | 액션과 상수. Go 버전에서 자동 생성 | 정의만 있음 |
메일함, 그룹, 파일 자격 증명, 백업 네 부분의 암호화 형식에는 테스트 벡터를 생성하고 검증하는 데 쓰는 Python 참조 구현이 따로 있습니다. 각 언어의 프로토콜 라이브러리 자체에는 암호화, 네트워크, 클라이언트 구현이 포함되어 있지 않습니다.
프로토콜 정의 라이브러리와 서드파티 개발 문서는 현재 아직 공개되지 않았습니다. 공개 계획이 정해지면 입수 방법과 문서를 여기에서 안내하겠습니다.