From 342cd187cc0323f9cbdbac270a923b0ea396ed44 Mon Sep 17 00:00:00 2001 From: Kris Nuttycombe Date: Sat, 13 Jan 2024 11:19:27 -0700 Subject: [PATCH] ZIP 320: Add a link to proof-of-concept Traceable Address javascript library. --- zip-0320.html | 33 +++++++++++++++++++++++---------- zip-0320.rst | 18 ++++++++++++------ 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/zip-0320.html b/zip-0320.html index c29bb3eb..45ebcb4f 100644 --- a/zip-0320.html +++ b/zip-0320.html @@ -78,7 +78,7 @@ import bs58check from 'bs58check' import {bech32m} from 'bech32' // From t1 to tex var b58decoded = bs58check.decode('t1VmmGiyjVNeCjxDZzg7vZmd99WyzVby9yC') -console.assert(len(b58decoded) == 22, 'Invalid length'); +console.assert(b58decoded.length == 22, 'Invalid length'); console.assert(b58decoded[0] == 0x1C && b58decoded[1] == 0xB8, 'Invalid address prefix'); var pkh = b58decoded.slice(2) var tex = bech32m.encode('tex', bech32m.toWords(pkh)) @@ -87,7 +87,7 @@ console.log(tex) var bech32decoded = bech32m.decode('tex1s2rt77ggv6q989lr49rkgzmh5slsksa9khdgte') console.assert(bech32decoded.prefix == 'tex', 'Invalid address prefix') var pkh2 = Uint8Array.from(bech32m.fromWords(bech32decoded.words)) -console.assert(len(pkh2) == 20, 'Invalid length'); +console.assert(pkh2.length == 20, 'Invalid length'); var t1 = bs58check.encode(Buffer.concat([Uint8Array.from([0x1C, 0xB8]), pkh2])) console.log(t1) --> @@ -134,13 +134,18 @@ A Unified Viewing Key MUST contain at least one shielded Item (Typecodes

Wallets and other Senders sending to a Traceable Unified Address MUST ensure that only transparent UTXOs are spent in the creation of a transaction.

Reference Implementation (Alternative 2)

-

Javascript library zcash_address_wasm:

+

Javascript library zcash_address_wasm 13:

+import init, { to_traceable_address } from 'zcash_address_wasm;; + init().then(() => { + var t_address = "t1VmmGiyjVNeCjxDZzg7vZmd99WyzVby9yC"; + // Create a deposit address that is valid for 30 days + var expiry_time = new Date(); + expiry_time.setDate(expiry_time.getDate() + 30); + var expiry_unix_seconds = BigInt(Math.floor(expiry_time.getTime() / 1000)); + var traceable_address = to_traceable_address(t_address, expiry_unix_seconds); + console.log(traceable_address); + }); -->

Rust: