From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Mon, 23 Mar 2026 02:54:29 -0700 Received: from mail-qt1-f191.google.com ([209.85.160.191]) by mail.fairlystable.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1w4bzR-0004GK-6I for bitcoindev@gnusha.org; Mon, 23 Mar 2026 02:54:29 -0700 Received: by mail-qt1-f191.google.com with SMTP id d75a77b69052e-50b4661881esf27563941cf.0 for ; Mon, 23 Mar 2026 02:54:28 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1774259662; cv=pass; d=google.com; s=arc-20240605; b=O39lGwEc60IUPIYP8o5LOOQAJ8pC+y+PGkYSJqq1LkxpYe0m9qLj9rkPSyS81H+RVO rq+v3DMKds38d2uzD2VdYZK4AThywqKgiZLJ8wrcqjXmdirvERorvT4aNRW9F3TpCTBZ Rro+cL8zNuYN60INVpoZ/ASkSklUfXRIa2DYFdemY9JM4cObdup+30QejRE1hLwHlYjy 21ewIdF6alAP7XSPQDbg1tOXyD694I5+d2hOIKCnxtvPV9F1lLjl9QcCsxYvhl8CRx0d HjApCE0RtobKYUKJWF4wRRdOxupb0qOTffeDaHC+mAhNisOlfUOfJqOTPwGyo/olYM7F fUUg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to:content-transfer-encoding :mime-version:feedback-id:references:in-reply-to:message-id:subject :cc:from:to:date:dkim-signature; bh=llrq0fbvYxvG9McLUIuSIYLTjZn1/FB7Ljmh4yw7NJk=; fh=XeVL7N2FVUWPbZC63OMxdp2Kf0DsS0TOj1tp27+ikZg=; b=jTEMmVaRX1deM8jYdJXOEy6dGW4c7IXHNFZfczQVTDcY/fXaawxpq0a5Qs5Yu667EQ PCEWfyBDHGXVjz48xa9iRO82kPkTdbVlgelEUiBbVAFzwNfUx/5wYy9FTkUeYP3ml0m0 FsdsW+jg7gwjaNN9EQBE1PPxDk3MLoU2NkdGWDzIm1IJi7WbTaHYpRK+1BVPfVMsLtOH BDi0kpOlQhzia+Zjm1DNY1fDVK+4NgcFaU9oMDi2vPZqzgl1Gwm9LjEAhNCuJuI4UJh6 hbZXxd0VwRVS1iJLXhOl71b9FvrHPYcV2qiIWVUxQa2SNQWnbi08RvZpjyfR8LptUynv eOIw==; darn=gnusha.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@protonmail.com header.s=protonmail3 header.b=fKw2RPfU; spf=pass (google.com: domain of orenz0@protonmail.com designates 79.135.106.99 as permitted sender) smtp.mailfrom=orenz0@protonmail.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=protonmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20251104; t=1774259662; x=1774864462; darn=gnusha.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender :content-transfer-encoding:mime-version:feedback-id:references :in-reply-to:message-id:subject:cc:from:to:date:from:to:cc:subject :date:message-id:reply-to; bh=llrq0fbvYxvG9McLUIuSIYLTjZn1/FB7Ljmh4yw7NJk=; b=D8uHq6dRFEtlnVUKd+aFRzZpYqFgy6HlBQHtrwR1Jhm2plwdKXcUmAjEhxZK0fHDB3 rP1cyjbrmzFUm60LY7PWQotXWVTSh6wtNVcLjK64Y21phWnbfcZugWO77RnoUoJPhoun 4sKDasCyTKQEiDQaBAj1VGygm2vN5TX8OEvtpeK3PbDKYvCxrgDwB/rPG57s6mIXWVNS t1LC49im+QhVzbaj64aKE4/vb7ONIz99jX8SU+BQCpWVhGpzFdu81dt70hrjA+RR7k8t vkaEL8XA/z9mU6uUlcFLfVu44Z7ghoFsQMf7GkT5aKNFe5wvopufliVS7NeDfQ+0GO2p pe+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774259662; x=1774864462; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender :content-transfer-encoding:mime-version:feedback-id:references :in-reply-to:message-id:subject:cc:from:to:date:x-beenthere :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=llrq0fbvYxvG9McLUIuSIYLTjZn1/FB7Ljmh4yw7NJk=; b=l95cHrO0RYVXYyw2wMVgpr6NBHg6mbwcT7BjqFccepFcTs5cmTBGnJaipgXQlGY+Tk YmyggRVAX8r7EqwdlmTdROc17z1k+4zVyChhODGSsNLJOmt5M+AqwwKqHC6AzvVevPuE +y3C7bgnGNroOgTe3hUx/Q2ySJQykizlpgnk7EG61HIan7jNm2pBBIoJEmMOMDprThXG aPPY9fBm1wzcwImdws8wacHv7u2lLr2Y0mpQs1LW6KeSP8rXjF00Cyz8lKjqwbYaG+9t GoC36wKKKXmmqBvV0D81H/qAuVLJ3t/00nvP0Yo/d5LqAg2ws99Ai5f5NruzM9cx16kS JjDg== X-Forwarded-Encrypted: i=2; AJvYcCWzymcg5EBtif+UvksUEhPffCBTe76KBOxwIxXLxNM0BK3YGnPw6/G1s69Tp9ABl1UbTSEIayqUkEjC@gnusha.org X-Gm-Message-State: AOJu0YwuEGbU6Z798sEmoJP+db+T7wcSQF+5MqixlfpfQDrkppH72MZ9 NOZAzOhpR4xRzQ/IgVq1wwRH0tPF4tQvyR43hIH08lwCuHtwRDMFq0DJ X-Received: by 2002:a05:622a:6116:b0:50b:1e5d:992b with SMTP id d75a77b69052e-50b3754309fmr150339861cf.54.1774259661859; Mon, 23 Mar 2026 02:54:21 -0700 (PDT) X-BeenThere: bitcoindev@googlegroups.com; h="AV1CL+Gm685Dn5eP9OyMDvYaRSzAn2GklhYaQ40RMDcbp9Ws4g==" Received: by 2002:ac8:5d14:0:b0:509:3099:cc75 with SMTP id d75a77b69052e-50b25582db9ls78658711cf.2.-pod-prod-08-us; Mon, 23 Mar 2026 02:54:16 -0700 (PDT) X-Received: by 2002:a05:620a:414f:b0:8c9:fc46:235c with SMTP id af79cd13be357-8cfc80a86damr1737872985a.71.1774259656745; Mon, 23 Mar 2026 02:54:16 -0700 (PDT) Received: by 2002:a05:6402:22e4:b0:662:75ea:c072 with SMTP id 4fb4d7f45d1cf-663b7cc960emsa12; Fri, 13 Mar 2026 09:05:50 -0700 (PDT) X-Received: by 2002:a17:906:a418:b0:b76:f57f:a2c3 with SMTP id a640c23a62f3a-b976507d653mr211672466b.12.1773417948408; Fri, 13 Mar 2026 09:05:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773417948; cv=none; d=google.com; s=arc-20240605; b=SO4+ZF0bArFHZkkru/BRm6RSvL5lvLOVE98KP2uNrMXg8nrjnveqHquB3UxdK0rtWF 16RMNJR5t34zyzkmqpEzGDhwrPOIi+ooibMC4+oK9c20M2hDQtRZrxIhI4ttsz8kqmsD NlizpIHWQ66K++eE5PE9PQSOtwBx9Va6S8Hv8OyeQ7xsvZBYIt1S6Mgpi3K+zajolud8 SAzo9cfV02bUfS50sF8iuOFCLs8SGfXKbPmwfpIAM+9Hhcwe5EL8hlaVs+no8Cu6ZKvt 671O81mSNfCP9gWjAHSl0mYR8bEeeTCY5S6TkFTFgvWxTWUg4KAqX+B7/7FRYXJu2LMU Ce8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:mime-version:feedback-id:references :in-reply-to:message-id:subject:cc:from:to:date:dkim-signature; bh=1kWnMCm1ebm31ZT89HyZAd3W4PnuhNgS/Lc/RFB51ZU=; fh=YuMn9NmkucDJ341Ag++/fDMKTswVs/zfvuiXOCyHJ7Q=; b=S6SgcYIolfyOk3iczBDvzc8q/uOTjrE3AlK5cYm1/ZU1RowKTyUlGbTs1akd1oHzI/ BCdInfwea6YtSm7Br08fiCKrt+LL6C9QBwdV+AjBw42fTnqudXf26cY9Zjk/UDHvSJJB kfBKmnZp4WNeSG7lmEWeFxX8g+EHUCXXHzHeITymJT9LgNm6ug4o7Xq93ssJsQnJZslN oC6ImMlmkFbKjeSx/C4vq1A76hzDupT/sVYHu7Qq+wuUwEP6GcxTic0MTrnfSi+7wIVK azGQ0bL4Xqqk4RaehPwjmBXMvwRZm8xNjsI3GIPrqHK5Z5cE2cuyzFoLW4DdITl+r/m/ B2/A==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@protonmail.com header.s=protonmail3 header.b=fKw2RPfU; spf=pass (google.com: domain of orenz0@protonmail.com designates 79.135.106.99 as permitted sender) smtp.mailfrom=orenz0@protonmail.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=protonmail.com Received: from mail-10699.protonmail.ch (mail-10699.protonmail.ch. [79.135.106.99]) by gmr-mx.google.com with ESMTPS id a640c23a62f3a-b976cec81fbsi3744966b.3.2026.03.13.09.05.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 09:05:48 -0700 (PDT) Received-SPF: pass (google.com: domain of orenz0@protonmail.com designates 79.135.106.99 as permitted sender) client-ip=79.135.106.99; Date: Fri, 13 Mar 2026 16:05:41 +0000 To: Matt Whitlock From: "'orenz0' via Bitcoin Development Mailing List" Cc: Bitcoin Development Mailing List Subject: [bitcoindev] Re: BIP idea: Timelock-Recovery storage format Message-ID: In-Reply-To: References: <8fefdd9e-8c71-4e11-9d90-ebbd8e25dc56n@googlegroups.com> Feedback-ID: 57900198:user:proton X-Pm-Message-ID: e343d296b7b709b798bb327a35f7e53dec3eb953 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Original-Sender: orenz0@protonmail.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@protonmail.com header.s=protonmail3 header.b=fKw2RPfU; spf=pass (google.com: domain of orenz0@protonmail.com designates 79.135.106.99 as permitted sender) smtp.mailfrom=orenz0@protonmail.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=protonmail.com X-Original-From: orenz0 Reply-To: orenz0 Precedence: list Mailing-list: list bitcoindev@googlegroups.com; contact bitcoindev+owners@googlegroups.com List-ID: X-Google-Group-Id: 786775582512 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , X-Spam-Score: -0.8 (/) Hi Matt, I can't find your message on https://groups.google.com/g/bitcoindev so I'll= answer directly from my email. > * What should be the value of the "checksum" field during the checksum ca= lculation? Null? An empty string? Absent entirely? None of those options sa= tisfy the schema, which mandates that the value must be a string of 8 to 64= characters. Perhaps a string of eight zeros? The checksum field should be absent entirely during checksum calculation. > * What is "an array of key, value pairs"? Is it [{"key":"one","value":1},= {"key":"two","value":2}]? The example JavaScript code implies that it shoul= d be [["one",1],["two",2]], but this is not spelled out in the normative te= xt. Typically in a specification, example code is non-normative, and all ne= cessary information to implement the spec is provided in the normative text= . Your interpretation is correct, key-value pairs are exactly converting an o= bject like {"one":1,"two":2} into [["one",1],["two",2]]. How would you improve the description of "...by converting the top-level JS= ON object to an array of [key, value] pairs" (in https://github.com/bitcoin= /bips/blob/master/bip-0128.mediawiki#checksum-calculation )? Converting objects into key-value pairs (i.e. with the Object.entries() fun= ction) is pretty common when the order of the keys is important - i.e. when= you need a consistent hash. For example it is used in the Nostr protocol b= efore signing event objects. > * What does "stringifying" mean? There are many ways to encode abstract s= tructured data into JSON. For instance, just look at all the possible "flag= s" that can be passed to PHP's json_encode function: https://www.php.net/js= on_encode . Are non-ASCII characters to be encoded in UTF-8 or as hex escap= es? How about control characters? How are quotation marks to be escaped: as= a backslash and a quotation mark or as a Unicode hex escape? Is there any = optional whitespace between terminals in the encoding? If so, where, and ar= e the line endings LF or CR+LF? I think we should agree that "stringifying" means using Javascript's JSON.s= tringify() function with a single parameter (no "replacer" and no "space" p= arameters). All other programming languages should follow the ECMAScript sp= ecification. Regards, Oren P.S. I'm curious what you're working on. If it's relevant, I'd be happy to = publish it on https://timelockrecovery.com . If you're looking for a good way to communicate the recovery details to you= r heirs, you should definitely check out the Timelock Recovery plugin for E= lectrum. It's an internal plugin that was reviewed by Electrum's team (sometimes peo= ple hear the word "plugin" and assume it's external code). The plugin lets you generate PDFs like this one: https://timelockrecovery.c= om/assets/recovery.pdf which includes a step-by-step tutorial for your heir= s. On Sunday, 8 March 2026 at 19:24, Matt Whitlock = wrote: > On Sunday, December 28, 2025 at 9:59:43=E2=80=AFAM UTC-5, Oren wrote: > > The BIP will be about the JSON format, which includes not only the raw > > transactions themselves, but also user-information (i.e. name, descript= ion, > > destination-labels, wallet-name, wallet-version), and data about the > > transactions (i.e. txids, amounts, fees, input-utxos, anchor-addresses, > > relative-locktime). > > A standard JSON format will allow implementing a compatible feature on > > other wallets, as well as apps/servers for monitoring & initiating > > timelock-recovery plans - such as the one being developed by RITREK.com > > (disclosure: I'm one of RITREK's founders). >=20 > I appreciate this BIP, as I have personally implemented a two-phase, rela= tive-time-locked, alertable/recoverable transaction scheme to pass along my= inheritance, but I had previously no standardized way of communicating the= details of my implementation to my heirs. This BIP solves that problem, so= thank you. >=20 > However, in trying to implement the BIP, I am finding that the section de= scribing the checksum calculation is extremely vague and not at all rigorou= s. Some questions include: >=20 > * What should be the value of the "checksum" field during the checksum ca= lculation? Null? An empty string? Absent entirely? None of those options sa= tisfy the schema, which mandates that the value must be a string of 8 to 64= characters. Perhaps a string of eight zeros? >=20 > * What is "an array of key, value pairs"? Is it [{"key":"one","value":1},= {"key":"two","value":2}]? The example JavaScript code implies that it shoul= d be [["one",1],["two",2]], but this is not spelled out in the normative te= xt. Typically in a specification, example code is non-normative, and all ne= cessary information to implement the spec is provided in the normative text= . >=20 > * When sorting the array, how are elements to be compared? Are strings to= be compared lexicographically? Is the comparison case-sensitive? What char= acter encoding is used? Are strings compared lexicographically by UTF-8 cod= e units, by UTF-16 code units, or by Unicode code points? How are non-strin= g values to be compared with string values? Please sort the following value= s in ascending order: [12,false], 5, true, "seven". >=20 > * What does "stringifying" mean? There are many ways to encode abstract s= tructured data into JSON. For instance, just look at all the possible "flag= s" that can be passed to PHP's json_encode function: https://www.php.net/js= on_encode . Are non-ASCII characters to be encoded in UTF-8 or as hex escap= es? How about control characters? How are quotation marks to be escaped: as= a backslash and a quotation mark or as a Unicode hex escape? Is there any = optional whitespace between terminals in the encoding? If so, where, and ar= e the line endings LF or CR+LF? >=20 > Perhaps there already exists a standard canonicalized encoding for JSON f= or purposes of digesting and MAC'ing, and your BIP could simply incorporate= that standard by reference. >=20 --=20 You received this message because you are subscribed to the Google Groups "= Bitcoin Development Mailing List" group. To unsubscribe from this group and stop receiving emails from it, send an e= mail to bitcoindev+unsubscribe@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/bitcoindev/= V4jlo4nh2GdJFIW0NM2ljGIWqgsKi5afoKeyGHgaBusUlSLeQU-JKKuiQ8cuRtlBi3566Y3qmGw= 4NOJz_LOE5Nfl1r6EqHM46kBPE38GEPs%3D%40protonmail.com.