공유 주소 하나로는 안 되는 이유
암호화폐를 받는 모든 플랫폼이 같은 벽에 같은 순서로 부딪칩니다. 보통은 아무도 찾을 수 없는 결제에 대한 첫 문의가 들어온 뒤입니다.
- 주소 하나가 알려 주는 것은 금액과 보낸 곳이며, 그것이 어느 이용자의 것인지는 결코 알려 주지 않습니다. 금액으로 맞추는 방식은 두 사람이 같은 숫자를 보내는 첫 순간에 무너집니다.
- 흔한 우회책은 전부 한데 모아 두었다가 나중에 지급하는 것입니다. 그러면 결제 기능이 남의 돈을 보관하는 일로 바뀌는데, 그것은 플랫폼이 짊어질 수 있는 것 중 가장 무거운 한 가지입니다.
- 이용자에게 메모나 참조값을 붙여 달라고 하는 방식은 누군가 잊어버릴 때까지만 통합니다. 그 뒤에는 사람이 손으로 블록체인을 맞춰 보게 됩니다.
이용자당 한 번의 호출, 그것으로 끝
이용자에 대한 자사 식별자를 보내면, 결코 바뀌지 않는 주소를 돌려받습니다. 그래서 이 호출은 가입 시점에 한 번 일어나고 다시 일어나지 않습니다.
- 01
자사 식별자로 고객을 만듭니다
기존 이용자 식별자를 `external_ref`로 넘기세요. Unheld가 별도의 식별자를 만들어 주고 그것을 저장하고 매핑하게 만들지 않습니다. 레코드는 이미 데이터베이스가 쓰는 그 식별자로 키가 잡힙니다.
- 02
돌려받은 주소를 저장합니다
응답에는 그 이용자의 입금 주소가 담겨 있고, 판매자 본인의 지갑에서 파생된 것입니다. 고정된 주소이므로 화면에 표시하거나 QR 코드에 담거나, 이용자가 저장해 두고 어디서든 보내게 할 수 있습니다.
- 03
웹훅이 도착하면 계정에 반영합니다
그 주소로 온 결제는 자기가 속한 고객에게 귀속되고, 알림은 판매자 자신의 `externalRef`를 그대로 돌려줍니다. 애플리케이션은 금액을 맞춰 보거나 체인을 읽지 않고, 이미 알고 있는 이용자 식별자에 반영하기만 하면 됩니다.
실제 호출
요청
curl -X POST https://api.unheld.io/api/v1/customers \
-H "Authorization: Bearer $UNHELD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_ref": "user_8412",
"label": "Ada Lovelace",
"supported_assets": ["ETH", "USDC"],
"evm": true
}'응답
{
"id": "c7f1…",
"external_ref": "user_8412",
"label": "Ada Lovelace",
"evm_address": "0x…",
"supported_assets": ["ETH", "USDC"],
"receive_method": "auto"
}`customers:write` 스코프를 가진 API 키가 필요하고, 되읽어 오려면 `customers:read`가 필요합니다. 이용자가 결제할 수 있는 모든 체인의 주소는 `GET /api/v1/customers/:id/addresses` 에서 받을 수 있습니다.
결제가 자기 이용자를 찾아가는 방식
주소가 곧 식별자입니다. 정확히 한 명의 고객에게 속하고 결코 바뀌지 않으므로, 도착한 결제는 메모도 참조 항목도 금액 조회도 없이 귀속됩니다. 실제 운영에서 무너지는 것이 바로 그 세 가지입니다.
청구서도 `customerId`로 고객에 연결할 수 있으므로, 일회성 청구와 상시 입금 주소가 대시보드와 웹훅에서 같은 이용자에게 귀속됩니다.
돈이 실제로 놓여 있는 곳
자금은 판매자 본인의 지갑에서 파생된 주소로 들어옵니다. Unheld는 조회 전용 공개 부분만 저장하므로 그것을 옮기거나 동결하거나 잃어버릴 수 없고, 나중에 판매자에게 지급되기를 기다리며 여기에 보관되는 잔액도 없습니다.
그것이 알려 주지 못하는 것은, 판매자의 플랫폼이 이용자를 위해 자금을 보유하고 있는지 여부입니다. 판매자가 관리하는 주소로 결제가 들어오고 그 가치를 이용자에게 빚지고 있다면, 아마 보유하고 있는 것입니다. 그것은 판매자의 사업 구조와 관할권에 대한 질문이며 저희가 대신 답해 드릴 수 있는 것이 아닙니다. 그에 대해서는 자문을 받으세요. 저희가 말할 수 있는 것은 저희 쪽 사실뿐입니다. 돈은 Unheld를 결코 거치지 않습니다.
이 위에 설계하기
어느 것이나 실제 운영에서 마주치는 것보다 지금 설계에 반영하는 편이 쉽습니다.
- 모든 이용자 주소는 하나의 지갑 — 판매자의 지갑 — 에서 파생됩니다. 그래서 지켜야 할 복구 구문이 이용자마다가 아니라 하나뿐이고, 동시에 자금이 키 단위로 이용자별로 분리되어 있지 않다는 뜻입니다.
- 고정 주소는 설계상 재사용되며, 그것이 귀속을 작동하게 만듭니다. 동시에 어떤 이용자가 판매자에게 결제한 이력이, 그 주소를 알게 된 누구에게든 체인 위에서 이어져 보인다는 뜻이기도 합니다.
- 이용자의 주소는 체인 계열마다 고정되므로, 같은 EVM 주소가 활성화한 모든 EVM 네트워크에서 수취합니다. 새 체인을 활성화해도 주소를 다시 발급할 필요가 없습니다.
- 고객을 삭제하면 플랫폼이 그 주소를 지켜보는 일이 멈춥니다. 이미 그리로 보내진 것을 움직이지는 않으며 움직일 수도 없습니다. 삭제 후 도착한 돈도 여전히 판매자의 것이지만, 그것에 대해 알려 주는 것은 아무것도 없습니다.
자주 묻는 질문
Unheld가 제 이용자들의 자금을 보관하나요?
아닙니다. 결제는 판매자 본인의 지갑에서 파생된 주소로 가고 Unheld는 조회 전용 공개 키만 저장하므로, 여기에 잔액도 출금할 것도 없습니다. 판매자의 플랫폼이 스스로 이용자를 위해 가치를 보유하고 있는지는 판매자 자신의 사업 구조에 대한 별개의 질문이며, 마케팅 페이지의 답변보다 자문을 받을 만한 사안입니다.
몇 명의 이용자가 각자 주소를 가질 수 있나요?
이용자당 주소 개수 제한은 없습니다. 주소는 풀에서 배정되는 것이 아니라 파생되는 것이므로, 백만 번째 고객을 만드는 일이 첫 번째와 같은 작업입니다. 계량되는 것은 요금제의 고객 허용량과 거래 건수이며, 요금제 페이지에 표시되어 있습니다.
이용자의 주소가 바뀔 수 있나요?
아닙니다. 이 설계 전체가 딛고 있는 성질이 바로 그것입니다. 주소가 이용자를 식별하므로 한 번 발급되면 그대로 남습니다. 화면에 표시하거나 QR 코드에 담거나 이용자가 자기 지갑에 저장해 두게 해도, 1년 뒤에도 여전히 맞습니다.
두 이용자가 같은 금액을 같은 시각에 결제하면 어떻게 되나요?
모호한 일은 일어나지 않습니다. 누군가를 식별하는 데 금액을 쓰는 일이 결코 없기 때문입니다. 각 결제는 정확히 한 명의 고객에게 속한 주소로 도착하고, 웹훅은 그 고객에 대한 판매자 자신의 참조값을 실어 나릅니다. 금액이 같든 시각이 같든 보낸 곳이 같든 아무 상관이 없습니다.