운반은 Veilid. 정산은 Monero. 사이에 운영자는 없습니다.
DUCAT 서버는 어디에도 없습니다. 연락처도, 메시지도, 청구서도, 영수증도 모두 DHT 레코드이자 종단 간 봉인된 페이로드입니다. 그리고 모든 휴대폰이 완전한 Veilid 노드로 돌아가며, 자기가 쓴 만큼의 중계와 저장을 되돌려 줍니다.
디버그 서명, stagenet 전용. 아직 실제 돈을 위한 것이 아닙니다.
두카트는 여섯 세기 동안 베네치아에서 빈을 거쳐 레반트까지 통용된 금화였습니다. 발행자와의 관계도, 뒤에 붙은 계좌도, 딸려 오는 허가도 없었습니다. DUCAT은 바로 그것을, 누군가의 앞에 서서 거래하는 그 순간을 위해 다시 만든 것입니다.
연락처도, 청구서도, 결제도, 영수증도 Veilid의 DHT 위를 종단 간 봉인된 페이로드로 오갑니다. 소환장을 보낼 곳도, 속도를 조일 곳도, 플랫폼에서 내릴 곳도, 꺼 버릴 곳도 없습니다. 돌아가는 것이 아무것도 없기 때문입니다. 모든 휴대폰이 완전한 노드이며, 자기가 쓴 만큼의 중계와 저장을 되돌려 줍니다.
휴대폰 안에서 만들어집니다. 이메일도, 전화번호도, 가입할 곳도 없습니다 — 그래서 누구도 대신 복구해 줄 수 없기도 합니다. 앱은 그 사실을 묻어 두는 대신 소리 내어 말합니다.
상대에게 카드를 건넵니다 — QR이든, ducat: 링크든, NFC 접촉이든. 그리고 그것은
단 한 사람에게만 유효합니다. 한 번 받아 가면 더는 작동하지 않으므로, 어딘가로
흘러간 스크린샷은 들어오는 통로가 되지 못합니다.
X3DH 형태의 암호화. 일회용 사전키와 순방향 비밀성을 갖췄습니다. 앱이 서명된 사전키로 물러서야 할 때는, 그것을 감추는 대신 열린 자물쇠를 보여 줍니다.
우편함 방식의 스레드는 한쪽이 오프라인이어도 돌아갑니다. 여기에는 항목별 청구서가 실립니다 — 각 줄의 합이 총액과 맞지 않으면 메시지 자체가 거절됩니다 — 그리고 결제, 받는 쪽이 발행하며 자신이 인정한 거래를 가리키는 영수증이 함께 실립니다. 소규모 그룹도 바로 그 일대일 스레드로 퍼질 뿐입니다. 그룹 키도, 공유 기록도 없고, 스레드의 성질은 하나도 달라지지 않습니다.
이 페이지의 모든 화면 사진은 실제 휴대폰에서 돌아가는 앱입니다. 목업이 아닙니다. 여기에는 가입을 요구하는 것이 하나도 없습니다. 가입할 상대가 아예 없기 때문입니다.
당신의 신원은 기기 안에서 만들어진 키 한 쌍입니다. 이메일도, 전화번호도, 가입할 곳도 없고, 그래서 누구도 대신 복구해 줄 수 없습니다. 마지막 단계가 백업인 이유는, 복구할 수 없는 지갑이야말로 여기서 사람이 정말로 돈을 잃는 유일한 길이기 때문입니다.
열쇠를 직접 보관하는 Monero 지갑. 어느 화면에서나 현지 통화로 환산되며, 내장된 monero-oxide 엔진이 스캔과 지출을 맡습니다. 휴대폰에 지갑 데몬은 없습니다.
결제할 때는 금액, 예상 네트워크 수수료, 총액, 보내고 나서 남는 액수, 몇 장의 지폐를 쓰는지, 대략 얼마나 걸리는지가 모두 보이고 속도도 고를 수 있습니다. 내역은 체인에서 다시 짜입니다. 보낸 건은 key image로 식별하고, 거스름돈을 수입처럼 표시하지 않으며, 각 줄마다 누적 잔액이 붙고, 내역 전체를 CSV로 내보낼 수 있습니다.
Monero는 잔액이 아니라 낱장의 지폐를 씁니다. 그래서 큰 지폐 한 장만 든 지갑은 연달아 두 번 결제하지 못할 수 있습니다. 앱은 쓸 수 있는 지폐 수를 세어, 계산대 앞에서 막히는 대신 그곳에 가기 전에 한 장을 헐어 두라고 알려 줍니다.
연락처는 식별자가 아니라 키 한 쌍입니다. 한 번 스캔하면 한쪽이 오프라인이어도 돌아가는 우편함 방식의 대화가 열립니다 — 그리고 그 스레드는 글자만이 아니라 거래를 실어 나릅니다.
상대에게 카드를 건넵니다 — QR로든, ducat: 링크로든, NFC 접촉으로든. 그리고 그것은
단 한 사람에게만 유효합니다. 한 번 받아 가면 더는 작동하지 않으므로, 어딘가로
흘러간 스크린샷은 들어오는 통로가 되지 못합니다.
그룹은 늘어나기만 하는 명단이고, 그 말들은 세대마다 하나의 공유 게시판 레코드에 실려 갑니다(§16.24). 각 구성원은 명단이 지니고 다니는 그룹 키 아래 자기 페이지를 쓰므로, 다섯 사람에게 보내는 메시지는 다섯 번이 아니라 한 번의 쓰기가 되고, 네트워크는 그 레코드를 다른 어떤 것과도 구별하지 못합니다. 누구도 남의 이름으로 위조할 수 없고, 나가는 일은 이 기기 안에서 끝납니다. 그룹은 계산을 나눌 수도 있습니다. 하나의 총액이 각 사람에게 가는 개별 요청이 되고, 거기에 모두가 계산을 확인할 수 있는 한 문장이 붙으며, 각 요청은 그 참조가 도착하는 대로 결제됨으로 바뀝니다.
아홉 가지 모드 가운데 하나를 고르면 앱 전체가 자리를 내어 줍니다. 탭도 그 모드의 것이 되고, 지갑의 흔적은 남지 않습니다. 그 대부분이 새로운 프로토콜 객체를 필요로 하지 않았는데, 명세가 가장 자랑스러워 하는 문장이 바로 그것입니다.
판매 시점 모드는 품목을 찍거나 입력한 총액을 받아, 해당 지역의 판매세를 계산하고 코드 하나를 보여 줍니다. 손님이 찍는 순간 청구서가 그 휴대폰에 도착하고, 결제하면 영수증이 돌아옵니다. 술집 외상은 잔마다 손님에게 알리고 마지막에 한 장의 청구서로 닫습니다. 키오스크는 휴대폰을 통째로 손님에게 넘기고, 직원 화면은 PIN 뒤에 둡니다. 후원함은 두 갈래를 모두 엽니다. 대화를 열고 돈이 도착하는 즉시 영수증을 보내는 DUCAT 코드와, 어떤 Monero 지갑에서든 보낼 수 있는 상설 주소 — 연결 가능성이라는 대가는 약관이 아니라 화면 위에 적혀 있습니다.
어디로 갈지 입력합니다. 휴대폰은 GPS 위치를 지오셀로 바꿉니다 — 그 장소 자체가 주소인 공개 게시판입니다 — 그리고 호출을 붙입니다. 한 번만 쓰는 카드, 대략적인 구역, 그리고 실제 주행 경로에서 뽑아낸 제시 금액. 게시판에는 이름이 올라가지 않습니다 — 카드에도, 그 뒤의 레코드에도. 기사들은 자기 셀과 이웃 셀을 지켜보다 그것을 가져갑니다. 경쟁을 판정하는 것은 DHT이며, 중개자는 어디에도 없습니다.
초록색 선이 핵심입니다. DUCAT의 요금은 플랫폼이 승객에게 받는 금액보다 약 15% 낮고, 게다가 기사가 그 전부를 가져갑니다 — 빠져나갔을 플랫폼 수수료가 양쪽 모두에게 돌아간 것입니다. 수락은 얼굴과 함께 도착합니다 — 이름, 차, 색, 번호판, 도착 예정 시각. 그것은 승객에게만 봉인되어 전해지고 게시판에는 결코 드러나지 않습니다. 당신의 이름과 지금 서 있는 그 문간은 같은 순간 반대 방향으로, 호출을 가져간 단 한 명의 기사에게 갑니다.
단 하나의 타협을 화면 위에 분명히 적어 두었습니다. 주소 검색도, 경로 탐색도, 지도 타일도 OpenStreetMap에 묻습니다 — DUCAT이 위치를 기기 밖으로 내보내는 유일한 지점입니다. 게시판 자체는 결코 약 1.2 km보다 정밀한 정보를 담지 않습니다.
같은 게시판 장치가 이동보다 많은 것을 실어 나릅니다. 장터 매물도, 대여도, 숙련된 도움 한 시간도 모두 동네를 주소로 하는 게시판에 붙습니다. 그리고 가까이 있는 낯선 사람이 그것을 읽습니다 — 그동안 두 사람 다 어떤 플랫폼에도 손대지 않은 채로.
매물은 호출보다 성긴 게시판에 앉습니다 — 지름 오 킬로미터쯤. 열쇠 꾸러미를 가지러 사람들은 기꺼이 움직이니까요. 검색은 당신의 게시판과 그 둘레의 고리를 읽고, 응답이 오는 대로 결과를 그려 나갑니다. 그래서 가까이 세워 둔 물건은 육 초도 안 되어 화면에 뜨지만, 「이 근처에는 아무것도 없습니다」는 사십 초쯤 걸리며 그동안 확인이 끝난 구역을 하나씩 지워 나갑니다.
매물 등록 양식은 둘로 나뉘어 있고, 앱이 어느 쪽이 어느 쪽인지 알려 줍니다. 앞부분에 적은 것은 근처의 누구나 읽을 수 있는 공개 게시판으로 나갑니다. 주소, 열쇠를 둔 자리, 차량 번호는 뒷부분에 들어가며, 그쪽은 예약이 실제로 성사되기 전까지 당신의 휴대폰을 벗어나지 않습니다.
청구서를 실어 나르는 레코드는 페이지도 똑같이 실어 나릅니다. 당신의 키는 이미 주소이므로, 당신이 쓴 것은 누구에게 자리를 청하지 않고도 머물 곳이 있습니다.
한 인격의 집은 그 자신의 키가 이름 붙인 주소에 서 있고, 피드는 곁에 둔 사람들의 시간선입니다 — 글 하나가 사진과 파일을 함께 실을 수 있고, 하트는 돌아옵니다. 사이트는 그것을 펴낸 사람이 자기 디스크에서 내어 주며 봉인된 방에서 열리므로, 하나를 읽는다고 다른 어디에서 무언가를 끌어오지 않습니다.
출판물 — 신문, 연재물, 소프트웨어 한 조각 — 은 동네가 아니라 주제별 게시판에서 전 세계로 팔립니다. 한 편의 글은 주제의 게시판과 그 언어의 게시판 양쪽에 내려앉고, 「전체」는 여섯 선반을 나란히 읽습니다. 매물은 자기 꾸러미를 파는 사람의 휴대폰에서 가져옵니다 — 원본 크기 사진 최대 24장, 설명, 사양, 첨부 파일 — 그리고 자기가 이름 붙이지 않은 키를 만나면 통째로 거절되므로, 나쁜 문서가 좋은 사진을 숨길 수 없습니다.
가운데에서 한쪽 편을 들어 줄 회사가 없으니, DUCAT은 더 단순한 일을 합니다. 돈은 두 사람만 열 수 있는 주소에 놓이고, 해제되면 각자의 보증금이 이름을 달고 돌아갑니다. 보증금을 가져갈 수 있는 사람은 아무도 없습니다 — 우리도 마찬가지입니다. 돈을 줘야 할 「우리」라는 것이 애초에 없으니까요.
그 숫자들은 어림짐작이 아니라 논거를 갖춘 것입니다. 수탁자를 두지 않는 Bisq의 2-of-2 방식이 가장 가까운 실제 선례이고, 양방향 예치금에 관한 연구는 균형 상태에서 이 구조가 속임수에 견딘다는 것을 보여 줍니다. 여기서 두 개의 한계가 나옵니다. 돌려주는 수수료보다 값이 낮은 보증금은 장식이 아니라 0이 되고, 어떤 보증금도 가격의 절반을 넘지 않습니다. 더 많이 노출된 쪽이 두 번째로 넣기 때문에, 그 사람의 돈이 공유 주소에 혼자 놓이는 일은 없습니다.
거래가 보증금 이상을 요구할 때 — 승객, 기사, 그리고 양쪽이 함께 신뢰하는 중재인 연락처가 봉인된 스레드 위에서 분산 키 생성을 실행합니다. 세 기기가 하나의 Monero 주소를 이끌어 내고, 각자는 몫만 가지며, 임의의 둘이 서명할 수 있고, 나눠 주는 주체는 어디에도 없습니다. 순조로운 길은 두 번의 탭입니다.
그 밖의 모든 경우는 합의입니다. 한쪽이 나눔을 제안하면 다른 쪽이 서명하거나 역제안합니다. 발이 묶인 쪽은 중재인에게 묻고, 중재인의 공동 서명이 곧 판정입니다 — 장악당한 중재인이라도 기껏해야 이름이 적힌 당사자들 가운데 하나를 고를 수 있을 뿐, 자기 자신에게 지급할 수는 결코 없습니다. 두 입력을 쓰는 FROST 해제를 포함해, 모든 형태가 stagenet에서 체인으로 입증되었습니다.
어떤 거래가 있기 전에 먼저 낯선 사람이 있고, 물음은 그 이름이 그에게 얼마의 대가를 치르게 했는가 입니다. 페르소나는 Monero를 소각할 수 있습니다 — 아무도 열쇠를 갖고 있지 않은 주소, 그것도 누구나 다시 계산해 볼 수 있는 해시에서 나온 주소로 보내고, 그에 대한 Monero 자신의 결제 증명을 지니는 것입니다. 당신의 앱은 그 증명을 자기 노드에 비추어 확인하고, 두 번째 노드에 그 거래가 블록에 들어갔는지 묻고, 그때부터 당신이 무언가를 결정하는 자리마다 그 페르소나를 말로 보여 줍니다. 0.01 XMR 소각, 블록 N부터. 점수는 결코 매기지 않습니다. 중요한 규칙은 경고입니다. 당신이 걸려는 것이 상대가 소각한 것보다 값나갈 때 앱이 그렇게 말해 줍니다. 아무 대가도 치르지 않은 이름은 사라져도 잃을 것이 없으니까요.
거래가 마무리된 뒤에는 양쪽 모두 평가가 담긴 영수증에 서명할 수 있고, 직접 만난 적이 있는 사람은 누구나 보증에 서명할 수 있습니다. 둘 다 봉인된 스레드를 타고 오가며, 둘 다 읽는 쪽이 혼자서 무게를 답니다 — 서명자 한 사람당 한 표, 그것도 당신이 소각을 확인한 서명자만 세고, 보증은 이미 당신의 연락처에 있는 사람에게서 온 것만 셉니다. 한 걸음뿐, 그래프도 없고, 어디에도 공개되지 않습니다. 프라이버시 대신 돈이 드는 평판입니다.
쓰기 불편한 프라이버시 도구는 한 번 쓰이고 맙니다. 이 앱은 무엇이 당신에게 어떤 대가를 치르게 하는지 이름 붙여 말하고, 스무 개 언어를 하며, 나중에 덧붙인 것이 아닌 어두운 테마를 갖고 있습니다.
프라이버시 체계에서 편리함에는 값이 있고, 앱은 그 값을 아무도 읽지 않는 약관이 아니라 당신이 고르는 바로 그 자리에서 말합니다. 연락처가 당신에게 직접 보내게 한다는 것은 주소 하나를 다시 쓴다는 뜻입니다 — 그래서 앱은 체인을 지켜보는 사람이라면 매번 같은 사람에게 돈이 갔다는 걸 알 수 있다고, 당신에게 딱 한 번만 보낸 사람들까지도 알게 된다고 말하고, 대안을 가리킵니다. 같은 태도가 곳곳에 흐릅니다. mempool에서 목격된 것은 보였을 뿐, 정산되지 않음으로 표시되고, 프로필은 언제나 그것이 실제로 그러한 것 — 본인의 주장 — 으로 제시됩니다.
스무 개 언어를 합니다 — 모든 화면이 리소스에서 글자를 읽고, 복수형은 이어 붙이는 대신 조립되며, 아랍어와 페르시아어가 그 뒤집기를 증명합니다. 영수증은 메시지가 아니라 기록입니다. 영수증마다 제 저장소에 살고, 스레드와 연락처를 지워도 남으며, 암호화된 백업에 실려 갑니다 — 그 백업은 돈만큼이나 사람도 함께 실어 나릅니다.
휴대폰이 돌리는 것과 같은 Rust 위에 선 네이티브 창 — 그래서 장사하는 사람의 계산대, 키오스크, 기자실, 장터, 피드가 이식이 아니라 하나의 구현입니다.
휴대폰과 같은 리소스에서 스무 개 언어를 말하고, 휴대폰을 상대로 모든 의례에서 검증되었습니다. 채팅, 게시판 위의 그룹, 청구서와 영수증, 그 책상을 한 번도 만난 적 없는 휴대폰에서 결제된 키오스크 주문, 내어 주고 받아 오는 파일과 사이트, 그리고 진짜 소리가 나는 통화.
README는 진짜 네트워크와 진짜 stagenet 위에서 실제로 끝까지 돌아간 것들을 장부처럼 적어 둡니다 — 그리고 빈 곳도 묻어 두지 않고 그대로 밝힙니다.
core/를 한 번도 읽지 않은 구현자가 아직 없음모든 빌드는 디버그 서명되어 있고 Monero의 stagenet에서 정산합니다 — 설계상 가치가 없는 코인입니다. 명세는 초안 1.1.0-dev13이며 스스로에 대해 이렇게 말합니다. 여기 최종인 것은 아무것도 없고, §14야말로 진짜 과제라고. 써 보고, 부숴 보고, 읽어 보십시오 — 다만 돈을 넣지는 마십시오.
ducat-protocol.md가 일차 산출물입니다 — 다섯 부분, 맨 앞의 변경 기록, 그리고 두 번째
구현이 돌리는 적합성 모음. 문서가 코드에서 소리 없이 멀어지지 못하게 하기 위해서입니다.
★ ducat-protocol.md 명세 — 초안 1.1.0-dev13, 변경 기록이 맨 앞 core/ 참조 구현 (Rust) vectors/ 406건의 적합성 사례 + 스키마 conformance/ 네 가지 검사, push 때마다 실행 harness/ 실제 Veilid 경로 위에서 끝에서 끝까지 sim/ 오프라인 시뮬레이터, 시장 시나리오 applications/ android/ + desktop/ (같은 소스) mobile/ Rust 다리: 지갑 · 우편함 · 노드 research/ 제품이 아니라 증거
schema.json에 비추어 검증책임은 바람이 아니라 규범입니다. §18.7은 Veilid의 윤리를 적합성 요건으로 만듭니다 — 프로토콜 수수료 없음, 노드에 대한 지급 없음, 영원히. 이 코드로 무엇을 만들든 좋지만, 운반으로 돈을 버는 클라이언트는 DUCAT이 아닙니다.
먼저 설치할 것은 없습니다 — 빌드마다 자체 Rust 라이브러리와 JVM을 품고 있습니다. 휴대폰에서는 Android, 그리고 Linux·Windows·macOS에서는 같은 응용 프로그램이 네이티브 창으로 섭니다. iOS 빌드는 없습니다; 그럴 자격을 갖추면 그때 폴더를 하나 얻게 됩니다.
휴대폰 브라우저로, 가장 최신 빌드를. 릴리스 목록을 헤맬 필요가 없습니다. armeabi-v7a는
대략 2016년보다 오래된 기기 전용이고, x86_64는 에뮬레이터용입니다.
디버그 서명, stagenet 전용 — 실제 돈을 위한 것이 아닙니다.