World’s First Phonon Transfer!

Daniel Veenstra
31 min readOct 28, 2021

I’m happy to announce the successful transfer of the world’s first phonon!

Phonon is a powerful new scaling and privacy primitive for the entire crypto ecosystem. The protocol uses secure hardware to allow users to transact off-chain, endowing any cryptocurrency with all the properties of a cash transaction: fast, free, and privacy-preserving.

As a peer-to-peer system, it’s linearly scalable with no need to run nodes or any other sort of network. Myself and the team at GridPlus have been working on the specification and initial implementation for two years. It is now working and the next step is put the system into the public domain so that others may contribute to the protocol.

It’s Alive!

The following is an overview of how the first transaction was executed along with technical details for those curious about the protocol. To see the actual moment of execution, check out the embedded video below!

The exchange securely transmitted a phonon containing a private key encumbering 100 Satoshi’s worth of Bitcoin from one physical phonon card, over the internet, to another phonon card. The transfer was conducted between fellow Phonon engineer Nate Maile and myself.

It’s extremely gratifying to see a successful phonon transfer come to fruition after many months of dedicated development spanning Phonon Network protocol design and specification, Phonon applet Javacard development, and phonon client development in golang. This milestone shows that all of the individual pieces of Phonon are falling into place, and soon we will be able to declare an alpha release and welcome more contributors to the Phonon Network.

So, without further ado, here’s what this phonon transfer looked like in practice.

Here’s the terminal output from the operation conducted within the phonon-client REPL. (For Read Evaluate Print Loop, aka an interactive terminal.) This is merely the first UI built for phonon alpha, the client is designed to be easily used by multiple user interfaces, including the graphical variety. First a connection to the card is established, and the PIN is entered to unlock access to the card.

Welcome to the phonon command interface
refreshing sessions
DEBU[0000] readers: [HID Global OMNIKEY 3x21 Smart Card Reader]
DEBU[0000] sending SELECT apdu
DEBU[0000] apdu command hex: 00 A4 04 00 08 A0 00 00 08 20 00 03 01 00
DEBU[0000] apdu response hex: A4 5F 8F 10 3C CF 40 52 67 41 AC 8B 08 5B 01 8B AC 13 8D 63 80 41 04 8A D6 9A 3A 0F 89 64 C5 1E 11 C8 6D 96 75 80 5B 71 C0 0B 17 FA 15 03 D0 A3 E4 08 3E 90 AA DF 35 12 41 4A 70 1A CB 7A B8 8E 84 39 67 79 47 23 47 34 5D 45 0B B7 84 78 B9 04 75 9F 3F 40 4F 8A 73 02 02 00 02 03 01 FC 8D 01 07 90 00
DEBU[0000] length of select response data: 97
DEBU[0000] pin initialized
DEBU[0000] Pairing generated key: 04 A8 51 A2 4D A7 52 B4 31 D6 06 73 4E 93 51 C5 36 9D B8 47 8B 2F 4E D3 39 90 B8 36 1C D9 D9 6C 8B 11 EA 9A 18 3B 48 EF 63 11 DC E8 5C 70 20 44 74 E6 60 B4 BE 96 8B 55 59 F7 7F 7A E0 46 7C 9A 19
DEBU[0000] sending PAIR command
DEBU[0000] payload length: 99
DEBU[0000] apdu command hex: 80 12 00 00 63 8F 66 9F 1A 94 43 23 F9 3D EA C1 29 E3 BF 27 35 7A 61 44 B0 9B DF CD 14 60 C5 80 D3 A0 BC B2 8B 80 41 04 85 8D A2 0B CA 7F 1D 77 50 DC E9 0C 7A E5 02 5D B8 DE BE 56 98 AB 59 CA 3C 7A F1 A2 89 AE A7 CB E7 BB DA F3 CA 1D 40 34 DB 7F A0 62 22 61 36 61 62 BC D2 3A 13 78 E5 F9 FE 89 0A F2 C2 D6 3A A9
DEBU[0000] apdu response hex: 4E 68 30 53 E8 D1 53 01 2F 78 77 98 88 CA 00 18 63 90 97 92 D5 6F 59 63 53 5C AE F6 61 09 25 71 30 8F 02 02 00 00 80 41 04 83 61 0D E2 2A 5E 20 4A D4 7E 8A B1 99 D8 22 52 55 E9 23 1C 26 92 B3 85 3C 08 63 80 00 A0 5E 3F A6 E8 6C BE 5E 74 B0 FD DD 3C 92 BB 6A 40 DD A9 08 9C E7 86 A6 10 3D 6C EF 90 A7 F6 27 F9 9B DB 30 44 02 20 39 C2 A6 E2 DE A5 3F 73 D9 EA 09 28 11 31 F6 B3 ED 83 C5 C2 DD 47 6E 36 4D A1 DA 7F D3 E2 97 57 02 20 1C 58 46 79 86 D0 9A A0 79 F3 AB 78 72 58 13 B0 49 8C 35 12 23 0D 2D C9 51 A0 44 79 E5 1F 97 C4 00 00 30 45 02 20 08 05 D9 1B 54 56 7A 57 53 D1 F0 C8 EE 18 CF E3 F4 77 D8 AF C4 CF 42 AD 66 4B 55 D9 27 D4 70 58 02 21 00 FE 84 F0 36 1F 31 4D 77 86 76 78 88 4B CA 2C 2C C4 DC 0F 55 EA 3D B9 A3 53 8A 93 40 CA E5 E9 23 90 00
DEBU[0000] end of resp len(71): 30 45 02 20 08 05 D9 1B 54 56 7A 57 53 D1 F0 C8 EE 18 CF E3 F4 77 D8 AF C4 CF 42 AD 66 4B 55 D9 27 D4 70 58 02 21 00 FE 84 F0 36 1F 31 4D 77 86 76 78 88 4B CA 2C 2C C4 DC 0F 55 EA 3D B9 A3 53 8A 93 40 CA E5 E9 23
DEBU[0000] certificate signature valid: true
DEBU[0000] certificate public key valid: true
DEBU[0000] sending PAIR step 2 cmd
DEBU[0000] apdu command hex: 80 12 01 00 20 32 5E 1D 64 11 17 93 DF 85 1C 12 E5 45 E0 80 FB EF D3 FA 80 8F E8 55 39 62 BD 69 31 51 04 F6 B7
DEBU[0000] apdu response hex: 00 49 99 BE DF DD 4F E4 CF 14 06 89 14 E7 38 DD 54 8C EA 44 80 86 81 7E 61 97 4C 3B 35 B5 A2 D9 AA 90 00
DEBU[0000] raw pairStep2 resp: 00 49 99 BE DF DD 4F E4 CF 14 06 89 14 E7 38 DD 54 8C EA 44 80 86 81 7E 61 97 4C 3B 35 B5 A2 D9 AA
DEBU[0000] pairStep2Resp: { 0 49 99 BE DF DD 4F E4 CF 14 06 89 14 E7 38 DD 54 8C EA 44 80 86 81 7E 61 97 4C 3B 35 B5 A2 D9 AA}
DEBU[0000] derived pairing key: 6A D2 7C 31 B2 F4 16 51 1A CF 58 C5 9D 60 69 48 B3 C8 8A 94 E1 D5 A8 93 6B 42 34 01 9D 92 8D 5D
DEBU[0000] pairing succeeded
DEBU[0000] sending OPEN_SECURE_CHANNEL command
DEBU[0000] apdu command hex: 80 10 00 00 41 04 A8 51 A2 4D A7 52 B4 31 D6 06 73 4E 93 51 C5 36 9D B8 47 8B 2F 4E D3 39 90 B8 36 1C D9 D9 6C 8B 11 EA 9A 18 3B 48 EF 63 11 DC E8 5C 70 20 44 74 E6 60 B4 BE 96 8B 55 59 F7 7F 7A E0 46 7C 9A 19
DEBU[0000] apdu response hex: E6 14 3D C6 AE BA 47 C9 14 A5 EF CD 54 EB 8E CD F5 3E 2A 9C BA 0E DA 0A A7 D4 77 9D A7 92 78 44 EA 02 FE 79 B6 D7 26 19 29 3D E6 95 3A 8E E8 CA 90 00
DEBU[0000] sending MUTUAL_AUTH command
DEBU[0000] raw command before encryption: CLA: 80 Ins: 11 P1: 0 P2: 0 Data: 07 86 26 70 FF ED 18 CD 56 7D 09 62 05 7C C5 3C E4 1F 80 5F 89 2F 2C EF 47 81 BF DC DB FA 11 A3
DEBU[0000] apdu command hex: 80 11 00 00 40 B6 DA E6 A9 B6 5E 54 FD 19 BB B8 80 39 14 9E BC 39 68 63 90 AD B5 77 04 34 28 10 D1 7B 99 85 6E F1 BF 14 2E F8 6F 5B 2A 5B DB 7D A7 97 30 30 26 5B 8B 2A 5D 11 53 0B 38 14 F8 D1 05 EF 3A 50 39
DEBU[0000] apdu response hex: 5F 4D 0C 31 76 E1 D0 55 CA 3F FA E5 93 85 85 DE 78 93 EA 15 77 18 02 ED DA F5 57 1D 98 16 A5 29 E4 B5 EF C0 05 D1 69 99 E0 FF 77 51 75 E2 22 F7 DB 1A 20 DA 3E 75 3F 7E 65 A3 82 BD A6 C0 0C C3 90 00
DEBU[0000] apdu response decrypted hex: 0C 3C AB 8E CE 80 DF 0C DB 8A A3 67 9F 6B 0F DA E4 DA E0 DA 29 1F E8 71 5E 1C 0A 97 09 B7 1D 1C 90 00
one attached card detected, setting as active
0483610de22a5e20 selected
0483610de22a5e20-locked>unlock
Please enter pin
DEBU[0006] sending VERIFY_PIN command
DEBU[0006] raw command before encryption: CLA: 80 Ins: 20 P1: 0 P2: 0 Data: 31 31 31 31 31 31
DEBU[0006] apdu command hex: 80 20 00 00 20 C3 33 94 48 69 A6 A4 4F 7C F9 0C 95 A8 87 8A 57 60 03 67 F0 12 9B 1C DC 7A E0 E3 C5 2B 5E 50 BB
DEBU[0006] apdu response hex: E6 14 CE 1D DE E9 95 8E FC 3F F3 D2 76 48 FB F7 26 0E 3E 24 9F 02 15 68 57 2B 5F 6B 71 58 2D 8B 90 00
DEBU[0006] apdu response decrypted hex: 90 00
card successfully unlocked

Next, the phonon is created. This instructs the card to generate a public/private keypair, and to return the public key to the terminal. The private key remains securely stored on the card, it cannot be revealed unless it is being redeemed, which simultaneously destroys the copy on the card. This property ensures that phonons stored within the system cannot be double spent outside the system.

0483610de22a5e20>create
DEBU[0065] sending CREATE_PHONON command
DEBU[0065] raw command before encryption: CLA: 0 Ins: 30 P1: 0 P2: 0 Data: 00
DEBU[0065] apdu command hex: 00 30 00 00 20 4E 48 16 C0 4D 1C A5 33 4F B3 C2 E9 F4 23 19 C4 53 B4 9E 36 5F A7 77 9A 44 29 09 1A C8 62 92 15
DEBU[0066] apdu response hex: 38 36 F1 A9 AA B4 CA 99 15 40 87 0A 54 82 07 8F 78 C2 D3 42 DE EB 7D C7 A5 FD A7 5F A9 20 AC 86 14 88 E3 55 30 C4 A4 18 96 01 FD A1 AC 06 17 35 01 A9 D8 EA AC 6A 69 0B 6E 69 F6 DE 82 F3 9C EB 65 D3 5B 41 AF C2 1E 1D C6 B1 F1 BB E1 8E 6C 42 A7 23 FA 6B 93 8D 47 8C F4 C0 47 A1 13 4F 42 AB 90 00
DEBU[0066] apdu response decrypted hex: 40 48 41 02 00 06 80 41 04 50 ED A4 17 4A A0 B8 97 1A BD BD 75 ED 22 36 2F 1D 18 3A C0 0F C2 08 AD E4 98 D6 65 20 1B 43 0B AB E1 AB 6C 1B D5 70 29 4F 7D A2 1A 7B 96 5F C0 87 F2 82 4A 73 9D DA 6A 56 87 79 9B CD A4 4B 1F 90 00
created phonon
Key Index: 6
Public Key: 0450eda4174aa0b8971abdbd75ed22362f1d183ac00fc208ade498d665201b430babe1ab6c1bd570294f7da21a7b965fc087f2824a739dda6a5687799bcda44b1fThis public key can now be used to derive a Bitcoin address and “deposit” assets into this phonon by transferring BTC to that address. Nate accomplishes this by sending 100 Satoshi’s to the address using the GridPlus Web Wallet. The owner of this phonon now controls the Bitcoin at this address, as the private key is only accessible by redeeming it from a phonon card containing the phonon. The next step is to set the descriptor for the phonon on the card. This stores additional metadata alongside the phonon private key, which is useful bookkeeping for the person who initially deposits the phonon, and also provides the necessary information for counterparties to look up and validate the asset encumbrance for any phonons they are planning to receive.

This public key can now be used to derive a Bitcoin address and “deposit” assets into this phonon by transferring BTC to that address. Nate accomplishes this by sending 100 Satoshis to the address using the GridPlus Web Wallet.

The owner of this phonon now controls the Bitcoin at this address, as the private key is only accessible by redeeming it from a phonon card containing the phonon.

The next step is to set the descriptor for the phonon on the card. This stores additional metadata alongside the phonon private key, which is useful bookkeeping for the person who initially deposits the phonon, and also provides the necessary information for counterparties to look up and validate the asset encumbrance for any phonons they are planning to receive.

setting descriptor with values:  6 Bitcoin 100
DEBU[0077] sending SET_DESCRIPTOR command
DEBU[0077] raw command before encryption: CLA: 80 Ins: 31 P1: 0 P2: 0 Data: 50 0E 41 02 00 06 82 02 00 01 83 04 42 C8 00 00
DEBU[0077] apdu command hex: 80 31 00 00 30 4C 73 91 3F E1 A0 4C B6 4A FC A6 5A 24 39 CD 4B 94 8E 7A 34 F7 21 9E 7E 2C F3 B7 77 67 EB 2F 14 3C B5 8E 1B 8D 5A 9E 05 10 4E 0A 8C 97 4A E9 F8
DEBU[0077] apdu response hex: A8 5F 6C 3E E8 A6 D5 EC F4 7B A1 FF 50 A9 F6 B8 D0 A6 22 AF 5D 9A B2 56 5B F7 D5 DF 11 72 EE C1 90 00
DEBU[0077] apdu response decrypted hex: 90 00
descriptor set successfully

Next, a quick list to show what phonons exist on this card:

0483610de22a5e20>list
DEBU[0082] sending list phonons command
DEBU[0082] List phonons command data:
DEBU[0082] 60 10 82 02 00 00 84 04 00 00 00 00 85 04 00 00 00 00
DEBU[0082] p2: 0
DEBU[0082] raw command before encryption: CLA: 0 Ins: 32 P1: 0 P2: 0 Data: 60 10 82 02 00 00 84 04 00 00 00 00 85 04 00 00 00 00
DEBU[0082] apdu command hex: 00 32 00 00 30 27 74 9A 46 CE ED E4 C0 D6 EF 18 90 D6 3E 8F 1A 9F F7 77 B8 EE 93 20 61 4D 06 AF 64 4C 8D 9D 1F DD 79 9C D1 A8 66 4F F6 27 83 A1 8D 7D F3 7E C9
DEBU[0083] apdu response hex: 8D D9 46 7E 12 6B 21 CD 73 49 1F 31 42 BF 5E 9E BC ED D1 37 7E 44 64 14 84 C2 26 05 EC 4B 1F 47 6D C3 6C 6A D3 65 D7 54 2E 11 B1 23 6C 1D E9 49 5B C1 89 DE 5D BF 38 9A 3C A9 91 AF B4 B3 51 E6 90 00
DEBU[0083] apdu response decrypted hex: 52 20 50 0E 83 04 3F 80 00 00 82 02 00 02 41 02 00 02 50 0E 83 04 42 C8 00 00 82 02 00 01 41 02 00 06 90 00
DEBU[0083] sending GET_PHONON_PUB_KEY command
DEBU[0083] raw command before encryption: CLA: 0 Ins: 33 P1: 0 P2: 0 Data: 41 02 00 02
DEBU[0083] apdu command hex: 00 33 00 00 20 FB A7 96 7E 38 DA E9 22 38 CA 7C 2E 6B 67 92 C4 25 99 23 7D E7 C1 12 81 FB 95 EC 3E 7F 6A 99 F4
DEBU[0084] apdu response hex: 92 12 0F 38 1F D0 55 ED ED 2B 52 CD 62 C4 B3 79 68 C3 DE EE 93 B7 2A D1 63 4C E1 BF 9F DA 1E DF DB CC DD A2 73 F0 CF 3B 94 F5 1C BB 4E 33 07 C4 21 FC 08 F5 C9 9B B1 56 77 C2 E2 EA 4C 5A 3E 79 FD D5 B0 E6 D9 46 31 A5 EB 69 D8 0E 7F 62 15 B0 09 03 71 6E 0C 64 96 45 80 8A 32 A1 18 F3 AB 2C 90 00
DEBU[0084] apdu response decrypted hex: 80 41 04 90 3A FC 5B 6A 08 03 82 7B EE 2E 0C 3E 38 85 79 46 EE 1F 45 16 B2 96 4E 0C BD 7B D8 34 32 14 71 8A E4 C7 A9 26 32 2B 11 34 B2 E5 D7 3D 4B 32 AB 35 ED D8 4D 69 F4 0F EE 84 73 39 B0 57 84 1D 7B 90 00
retrieved pubKey: &{0xc0001815f0 65237269030348443715514992099039619091381432582207977082752127139667634164849 62823392243036736390026042856297913902969068134975442682864041968510192328059}
DEBU[0084] sending GET_PHONON_PUB_KEY command
DEBU[0084] raw command before encryption: CLA: 0 Ins: 33 P1: 0 P2: 0 Data: 41 02 00 06
DEBU[0084] apdu command hex: 00 33 00 00 20 A0 4B E8 85 8E D7 8A 5C D1 D2 4B 30 C5 97 CE 49 14 DB C8 3F 22 07 78 F1 54 E8 04 53 0A 77 F5 4B
DEBU[0084] apdu response hex: 21 61 48 5F 0B 92 67 29 A1 82 E7 04 0A 23 59 C4 BB FE 93 68 1B 26 23 28 BC B3 FC BB B1 80 BB 61 88 3A C0 34 70 6F 16 DE B5 7D 66 F2 BD 88 77 E7 DC 30 46 1C 1E A2 72 00 9A 40 4D C1 07 6B DB 68 F3 6C E8 83 6D 76 3C A5 DD 39 8B 06 F8 50 E4 AD CC BC 48 47 F7 1A BC A2 D1 13 CA 55 AE 30 34 0C 90 00
DEBU[0084] apdu response decrypted hex: 80 41 04 50 ED A4 17 4A A0 B8 97 1A BD BD 75 ED 22 36 2F 1D 18 3A C0 0F C2 08 AD E4 98 D6 65 20 1B 43 0B AB E1 AB 6C 1B D5 70 29 4F 7D A2 1A 7B 96 5F C0 87 F2 82 4A 73 9D DA 6A 56 87 79 9B CD A4 4B 1F 90 00
retrieved pubKey: &{0xc0001815f0 36604903155352661543767306289346825223603042179009110720750182946298803208971 77744220810544465353771056553000550807102959611455209663056981633184106302239}
phonons:
KeyIndex: 2, Value: 1.000000, currencyType: Ethereum, PubKey: 04903afc5b6a0803827bee2e0c3e38857946ee1f4516b2964e0cbd7bd8343214718ae4c7a926322b1134b2e5d73d4b32ab35edd84d69f40fee847339b057841d7b
KeyIndex: 6, Value: 100.000000, currencyType: Bitcoin, PubKey: 0450eda4174aa0b8971abdbd75ed22362f1d183ac00fc208ade498d665201b430babe1ab6c1bd570294f7da21a7b965fc087f2824a739dda6a5687799bcda44b1f

We can see there are two phonons currently on this card. We’re interested in KeyIndex 6, our 100 Satoshi phonon.

Next, we establish a remote connection between the two cards over the phonon-client’s bridge server. This is the view from Nate’s side, the same command except with Nate’s card ID was run shortly afterward on my repl, with similar output appearing on my side.

Once the server picks up the second card is attempting to connect, it automatically initiates card to card pairing, which establishes the end to end encrypted channel which will be used to securely transmit our phonon. Both cards have been pin verified and unlocked already at this point.

0483610de22a5e20>pairRemote https://phonon.npmaile.com:8080/phonon/04c55218a98e3224
connecting to remote
INFO[0937] connecting
INFO[0937] successfully connected to remote server. Establishing connection to peer
DEBU[0937] GetCertificate returning cert: &{{ 30 8F 2 2 00 00 80 41} 04 83 61 0D E2 2A 5E 20 4A D4 7E 8A B1 99 D8 22 52 55 E9 23 1C 26 92 B3 85 3C 08 63 80 00 A0 5E 3F A6 E8 6C BE 5E 74 B0 FD DD 3C 92 BB 6A 40 DD A9 08 9C E7 86 A6 10 3D 6C EF 90 A7 F6 27 F9 9B DB 30 44 02 20 39 C2 A6 E2 DE A5 3F 73 D9 EA 09 28 11 31 F6 B3 ED 83 C5 C2 DD 47 6E 36 4D A1 DA 7F D3 E2 97 57 02 20 1C 58 46 79 86 D0 9A A0 79 F3 AB 78 72 58 13 B0 49 8C 35 12 23 0D 2D C9 51 A0 44 79 E5 1F 97 C4}
-�Dy��RU�&c^?�^t�j@熦=l'�D 9¦�?s� (1��Gn6M��W XFyКy�rXI5#
DEBU[0937] sending IDENTIFY_CARD command
DEBU[0937] apdu command hex: 80 14 00 00 20 19 30 CF 7D 01 6D BA A8 E7 DA 4D 34 F1 C2 32 97 0C 7F 98 F8 02 06 7F FF 23 94 02 DA 4C C2 7B A5
DEBU[0937] apdu response hex: 80 41 04 83 61 0D E2 2A 5E 20 4A D4 7E 8A B1 99 D8 22 52 55 E9 23 1C 26 92 B3 85 3C 08 63 80 00 A0 5E 3F A6 E8 6C BE 5E 74 B0 FD DD 3C 92 BB 6A 40 DD A9 08 9C E7 86 A6 10 3D 6C EF 90 A7 F6 27 F9 9B DB 30 44 02 20 10 92 DE BD 92 68 74 25 8C F3 42 7B 07 9A AE 29 C8 7A A0 15 B3 DD EF A6 05 5A E7 A0 4B 4F CD 4A 02 20 57 22 7E AA B2 23 19 CE EA 71 02 ED CA 8C 3A A5 78 72 62 2E E4 E0 81 86 C3 AD D9 A6 E3 45 9A 12 90 00
DEBU[0937] identify card resp:
00000000 80 41 04 83 61 0d e2 2a 5e 20 4a d4 7e 8a b1 99 |.A..a..*^ J.~...|
00000010 d8 22 52 55 e9 23 1c 26 92 b3 85 3c 08 63 80 00 |."RU.#.&...<.c..|
00000020 a0 5e 3f a6 e8 6c be 5e 74 b0 fd dd 3c 92 bb 6a |.^?..l.^t...<..j|
00000030 40 dd a9 08 9c e7 86 a6 10 3d 6c ef 90 a7 f6 27 |@........=l....'|
00000040 f9 9b db 30 44 02 20 10 92 de bd 92 68 74 25 8c |...0D. .....ht%.|
00000050 f3 42 7b 07 9a ae 29 c8 7a a0 15 b3 dd ef a6 05 |.B{...).z.......|
00000060 5a e7 a0 4b 4f cd 4a 02 20 57 22 7e aa b2 23 19 |Z..KO.J. W"~..#.|
00000070 ce ea 71 02 ed ca 8c 3a a5 78 72 62 2e e4 e0 81 |..q....:.xrb....|
00000080 86 c3 ad d9 a6 e3 45 9a 12 |......E..|
DEBU[0937] IdentifyResponse*ECDSASignatureRS
I!޽ht%�{)��Z�O�!W"~#�q�:xrb.�í٦�
INFO[0937] received Identified with server
INFO[0937] sending requestConnectCard2Card message
DEBU[0937] Connect2Card04c55218a98e3224
ERRO[0938] No connected card
DEBU[0939] RequestCert
DEBU[0939] sending INIT_CARD_PAIRING command
DEBU[0939] raw command before encryption: CLA: 80 Ins: 50 P1: 0 P2: 0 Data: 90 8F 30 8F 02 02 00 00 80 41 04 C5 52 18 A9 8E 32 24 BD 15 21 58 52 B0 D9 8D 37 6A 79 C4 C2 3E D9 21 6E 0D CC CC 58 1F 53 C7 CB 4F 17 DD 0F C3 48 A1 34 22 1C 0B EB 65 1F 31 75 D7 D7 B3 9F 36 CE 7A 51 03 38 CD 87 A3 06 25 62 30 44 02 20 37 F4 E6 B4 76 90 D7 41 57 9A D6 A4 25 0C D1 A3 80 B4 3F F2 EE 64 65 64 6E 06 26 81 6F FD 11 68 02 20 17 2F 26 81 1E 82 92 99 CE 8D B3 14 DD 86 B6 86 2D 6E F9 B5 98 76 36 53 15 CA 55 BC 56 BC 94 AB
DEBU[0939] apdu command hex: 80 50 00 00 B0 B8 1B AC 77 35 F3 45 46 8E 70 1F 31 4E 8F 38 FB E2 FF 3B 1A 1D 74 7E 28 8B D5 73 B4 42 CA 39 97 AB 8C B1 F0 E7 E0 C4 03 AE 53 2A A0 A3 45 67 21 75 52 D9 D5 16 AD 57 8E 43 C7 9F 89 D1 9C B7 BF F9 B4 E0 2A 56 E0 40 BF C0 B4 AA D8 99 9C 26 52 1C 33 69 38 E8 48 F2 9E 61 15 6E 72 67 83 E3 A8 77 58 7F B7 52 D3 28 3A 23 DD A8 A0 84 B2 30 0A D7 23 F1 95 0B ED 01 93 43 01 39 1D F9 3E D5 A5 7B F4 A8 C7 57 4D F3 CA 7E 63 A3 E3 3E 9F 0B F3 DB 05 40 E9 DA 55 B2 F8 4D 47 44 E3 1E 9F 85 83 58 52 DD B7 BB 16 C9 44 2F 6F 43 EA 7C 44 2D 55
DEBU[0939] apdu response hex: 33 EA 13 C8 A9 78 DB 6A 65 FE 6D C4 7D 0A 52 63 40 AD 83 B0 D8 B6 CE 96 0B 0F B2 6E C9 56 3B FE F1 CB 5B 3F 90 7E 86 EA DD E4 3B 22 9E 27 9C 1D BF 2C 3F AF 1A 67 B0 FE 33 8C 73 D2 EC C8 03 98 D1 39 A2 51 7C 65 1E 5C 3D 88 E0 18 8F 90 0D C4 2F 8A 71 8E 74 43 CB E8 C4 7F CF 08 59 34 49 A4 0C 8A CA A4 B7 B2 4C CA 11 55 DB 4F C5 E3 10 6C 48 F8 1F 33 4D 4E 9C 03 C5 75 2C 3B 61 31 D1 E7 F8 06 7E FC 23 20 30 40 2A 13 67 FD 5F 94 DC F6 88 0C AD B9 E1 F2 10 45 70 09 E0 67 48 83 15 3E CD 5B 2B 6A C1 7F 8F E9 4A 8D B7 E5 BE E1 9C 99 F9 00 6C FE DD 14 A0 32 59 79 1C AB C9 E3 FF 39 B8 A8 73 F4 4D DF 25 45 F8 EC A4 9F A4 E4 32 3C 90 00
DEBU[0939] apdu response decrypted hex: 90 91 30 8F 02 02 00 00 80 41 04 83 61 0D E2 2A 5E 20 4A D4 7E 8A B1 99 D8 22 52 55 E9 23 1C 26 92 B3 85 3C 08 63 80 00 A0 5E 3F A6 E8 6C BE 5E 74 B0 FD DD 3C 92 BB 6A 40 DD A9 08 9C E7 86 A6 10 3D 6C EF 90 A7 F6 27 F9 9B DB 30 44 02 20 39 C2 A6 E2 DE A5 3F 73 D9 EA 09 28 11 31 F6 B3 ED 83 C5 C2 DD 47 6E 36 4D A1 DA 7F D3 E2 97 57 02 20 1C 58 46 79 86 D0 9A A0 79 F3 AB 78 72 58 13 B0 49 8C 35 12 23 0D 2D C9 51 A0 44 79 E5 1F 97 C4 00 00 91 20 F6 48 47 37 99 7D 99 AC 29 8F 06 78 4B B5 11 4E 40 08 55 4E C6 60 08 E5 7C 97 58 DD F3 03 FA 28 90 00
-�Dy�� HG7})xKNUN�X�( l'�D 9¦�?s� (1��Gn6M��W XFyКy�rXI5#
DEBU[0939] sending CARD_PAIR_2 command
DEBU[0939] raw command before encryption: CLA: 80 Ins: 52 P1: 0 P2: 0 Data: 91 20 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 92 10 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 93 47 30 45 02 21 00 F3 80 A2 F2 55 59 BD 93 0F F0 9C 52 D5 01 7A DB 15 96 91 B3 38 33 36 33 D7 D1 37 02 61 07 6D 0C 02 20 5B 1A 2D 3F 43 2F 68 C9 63 F7 86 AB D8 11 A6 34 35 F9 5E 6B B9 2C 58 08 67 68 4B 88 CF F3 E2 B9
DEBU[0939] apdu command hex: 80 52 00 00 90 BF 56 85 0B 77 43 EF E5 20 F9 F7 04 32 C2 D2 F2 9C B5 63 5A 73 82 E8 E5 07 E2 01 F8 C4 ED A6 2B A4 08 C8 F3 10 54 04 D4 D4 8F 1D B2 CC 1C 3E AE 77 EB DD E2 53 D3 03 10 DD 3F 08 49 E5 46 50 D9 2B E5 CA 93 6E FC ED 52 E0 F2 CE 82 2E 04 CD C4 40 1C 31 4D C6 BB 89 41 04 EF 6E 1D F8 FE 77 78 A3 28 90 2D 2D 4F CF 9C 31 3E EC E1 4F 22 6D 7F 83 1D B3 CD 9C 90 31 7C BD 1F 4F 83 08 00 14 00 C4 F8 4E 1C FE 06 2C 22 FF E0 77 20 4B 2A 59 04
DEBU[0941] apdu response hex: 26 2F 06 EE 9C 48 2F 52 92 67 0F 01 06 9F B8 E6 DD F1 DF 41 6D 85 9C 81 94 18 D1 D8 BA 16 0E 18 DB A0 4C 7C B9 12 A5 B0 F5 EC BD 5C E3 84 94 43 6A 38 62 F7 29 42 93 6E F6 7D 03 1A A3 A1 26 0E 68 0D 04 1D C5 70 B4 A2 7B CC 8C FB 18 84 D0 EC 36 83 8C C7 51 3E C8 FE 8E CD 0C 4F 50 E9 6E C8 90 00
DEBU[0941] apdu response decrypted hex: 93 46 30 44 02 20 5E 12 FA 9C AC A4 D4 35 79 32 09 2E CB 86 D3 1D C8 83 2D 13 05 E0 CE EF DF 8F 10 34 EC 0D DC 22 02 20 3B F3 76 57 49 E3 20 72 95 6E 1F 8D 8B BC 6A 1C BD D3 EA 76 6E 55 B7 0A 6C 9B AB CE 78 92 F7 04 90 00
DEBU[0941] set card session paired
DEBU[0941] FinalizeCardPair

Finally, the step we’ve all been waiting for, sending the phonon. Here the sendPhonons command is executed referencing keyIndex 6, our 100 Satoshi phonon.

0483610de22a5e20>sendPhonons 6
DEBU[0961] sending SEND_PHONONS command
DEBU[0961] raw command before encryption: CLA: 0 Ins: 35 P1: 0 P2: 1 Data: 42 02 00 06
DEBU[0961] apdu command hex: 00 35 00 01 20 D2 2A 09 71 DA EC 4F 7A 7A B5 10 6A C4 47 72 EE 15 07 1C F4 78 B6 A5 6B 2D A7 7C 0B 18 AF 75 6C
DEBU[0962] apdu response hex: F0 44 BD 62 1C 6E B3 0D D4 F9 2B 3C 62 A8 6D 91 46 8B 51 2A EB 21 64 52 B1 EF 71 9D 6C B9 BB AE 92 52 26 97 89 B9 D8 84 A3 5A 8D A2 C5 69 69 FC 58 E1 44 05 48 26 0D EB 0F A2 74 54 B0 97 3A 4A C2 90 20 BC 52 8A E3 A6 E8 77 F8 4D 1A 3C 03 B4 A5 AC CC 96 00 A8 96 BA 6C 9A 43 A3 DF 79 92 FF 4D CF 2E E3 8A 3C C5 31 DD 92 39 D7 32 D8 97 80 90 00
DEBU[0962] apdu response decrypted hex: 53 E5 2B D2 43 29 7B F7 2C 83 12 04 B1 C7 2B D1 E1 47 F8 7C AE AF 2D 60 23 85 CF E2 32 52 76 8E 3A B3 DC E8 E6 F8 6B 2F 12 70 B1 C8 2E 82 E3 0E 4B 41 AE 85 B4 9C 44 35 64 3E 12 FB 79 F9 7A 13 02 E3 80 ED 88 59 7C FA C2 35 9B 90 42 55 04 3F 90 00
DEBU[0962] requestReceivePhonon

And now the phonon is transferred! To confirm, here’s the connection, pairing, and eventual listing of the received phonon on my side of the transaction.

04c55218a98e3224>pairRemote https://phonon.npmaile.com:8080/phonon/0483610de22a5e20
connecting to remote
INFO[0707] connecting
INFO[0707] successfully connected to remote server. Establishing connection to peer
DEBU[0707] GetCertificate returning cert: &{{ 30 8F 2 2 00 00 80 41} 04 C5 52 18 A9 8E 32 24 BD 15 21 58 52 B0 D9 8D 37 6A 79 C4 C2 3E D9 21 6E 0D CC CC 58 1F 53 C7 CB 4F 17 DD 0F C3 48 A1 34 22 1C 0B EB 65 1F 31 75 D7 D7 B3 9F 36 CE 7A 51 03 38 CD 87 A3 06 25 62 30 44 02 20 37 F4 E6 B4 76 90 D7 41 57 9A D6 A4 25 0C D1 A3 80 B4 3F F2 EE 64 65 64 6E 06 26 81 6F FD 11 68 02 20 17 2F 26 81 1E 82 92 99 CE 8D B3 14 DD 86 B6 86 2D 6E F9 B5 98 76 36 53 15 CA 55 BC 56 BC 94 AB}
��XS��O��H�4"sponseCert0��A�R��2$�!XR�ٍ7jy��>�!n
�e1u�׳�6�zQ8͇�%b0D 7��v��AW�֤%
ѣ��?��dedn&�o�h /&����΍�݆��-n�v6S�U�V���
DEBU[0708] sending IDENTIFY_CARD command
DEBU[0708] apdu command hex: 80 14 00 00 20 13 FB 8F BA B0 96 1C C4 1D EA D1 E0 9A BB 9B 69 9B 34 94 AD 1C D9 71 95 2E F2 03 9C 29 BE 0C 60
DEBU[0708] apdu response hex: 80 41 04 C5 52 18 A9 8E 32 24 BD 15 21 58 52 B0 D9 8D 37 6A 79 C4 C2 3E D9 21 6E 0D CC CC 58 1F 53 C7 CB 4F 17 DD 0F C3 48 A1 34 22 1C 0B EB 65 1F 31 75 D7 D7 B3 9F 36 CE 7A 51 03 38 CD 87 A3 06 25 62 30 45 02 20 7B AA FC 66 70 BD E4 EF 7A 79 6A 7B E4 89 AA DB 5C 31 DB 6A E4 E7 03 0F EB AD 70 AE 5C DF D8 2E 02 21 00 FF 64 D6 E9 97 06 43 A8 D0 C6 F8 3E 33 44 3A BC B5 34 1A 6B B8 4E 2F 36 55 31 56 75 2D 95 F0 81 90 00
DEBU[0708] identify card resp:
00000000 80 41 04 c5 52 18 a9 8e 32 24 bd 15 21 58 52 b0 |.A..R...2$..!XR.|
00000010 d9 8d 37 6a 79 c4 c2 3e d9 21 6e 0d cc cc 58 1f |..7jy..>.!n...X.|
00000020 53 c7 cb 4f 17 dd 0f c3 48 a1 34 22 1c 0b eb 65 |S..O....H.4"...e|
00000030 1f 31 75 d7 d7 b3 9f 36 ce 7a 51 03 38 cd 87 a3 |.1u....6.zQ.8...|
00000040 06 25 62 30 45 02 20 7b aa fc 66 70 bd e4 ef 7a |.%b0E. {..fp...z|
00000050 79 6a 7b e4 89 aa db 5c 31 db 6a e4 e7 03 0f eb |yj{....\1.j.....|
00000060 ad 70 ae 5c df d8 2e 02 21 00 ff 64 d6 e9 97 06 |.p.\....!..d....|
00000070 43 a8 d0 c6 f8 3e 33 44 3a bc b5 34 1a 6b b8 4e |C....>3D:..4.k.N|
00000080 2f 36 55 31 56 75 2d 95 f0 81 |/6U1Vu-...|
DEBU[0708] IdentifyResponse*��ECDSASignature��R��S��
����I��!{��fp���zyj{䉪�\1�j���p�\��.!�d��C����>3D:��4k�N/6U1Vu-��
INFO[0708] received Identified with server
INFO[0708] sending requestConnectCard2Card message
DEBU[0708] Connect2Card0483610de22a5e20
04c55218a98e3224>DEBU[0708] sending CARD_PAIR command
DEBU[0708] raw command before encryption: CLA: 80 Ins: 51 P1: 0 P2: 0 Data: 90 91 30 8F 02 02 00 00 80 41 04 83 61 0D E2 2A 5E 20 4A D4 7E 8A B1 99 D8 22 52 55 E9 23 1C 26 92 B3 85 3C 08 63 80 00 A0 5E 3F A6 E8 6C BE 5E 74 B0 FD DD 3C 92 BB 6A 40 DD A9 08 9C E7 86 A6 10 3D 6C EF 90 A7 F6 27 F9 9B DB 30 44 02 20 39 C2 A6 E2 DE A5 3F 73 D9 EA 09 28 11 31 F6 B3 ED 83 C5 C2 DD 47 6E 36 4D A1 DA 7F D3 E2 97 57 02 20 1C 58 46 79 86 D0 9A A0 79 F3 AB 78 72 58 13 B0 49 8C 35 12 23 0D 2D C9 51 A0 44 79 E5 1F 97 C4 00 00 91 20 F6 48 47 37 99 7D 99 AC 29 8F 06 78 4B B5 11 4E 40 08 55 4E C6 60 08 E5 7C 97 58 DD F3 03 FA 28
DEBU[0708] apdu command hex: 80 51 00 00 D0 A8 88 D8 F2 D0 A6 C9 05 22 58 BC B1 97 86 36 31 06 3A 1C A9 1F 4C 1B C1 6B E0 62 AF 4C 87 E0 B1 E1 B5 02 33 C0 FB 7F 93 A4 62 DC 98 0F 24 7E 6F C4 98 9F BA 49 56 49 75 B6 FC E6 8C AA 58 4B BF 04 A0 CA DE AB 0D F7 9D 21 48 F9 1C E5 10 54 F9 47 28 BA 43 2A 58 CA 40 44 BE 79 22 67 22 7A 96 F6 DB 80 5C 45 48 8D 30 3C B6 0D 51 A2 50 91 E2 76 77 EB 02 0B E0 62 04 D6 06 E1 74 14 0A A5 4A A9 B4 0F D8 90 2E F9 24 A1 0E AE 60 EB DA 25 D4 B4 99 1D D2 5A DC C8 9B AB D1 9E B7 9A 98 8B 6C CB 61 2D E2 27 43 E9 34 2C 9E 78 4D 4E 61 19 1B 39 78 C6 21 CA 94 F9 35 11 42 5A 9C 9D 27 5A 8C 89 EA 0B FE F8 B4 FC 19 41 C0 D1 C4 0C C1 D7 F8
DEBU[0708] apdu response hex: 5B 0C 38 5F EA 5B E5 9C F7 D7 10 C0 08 E0 EE CE E7 F0 60 4C 27 2C 56 29 87 28 BF 83 1B FB 69 D3 4E 44 08 9F 34 54 F6 5B 23 7B 4B A3 3E 93 8C 37 FE 98 4D 4E 5D 29 84 08 5C A5 A9 03 33 46 A2 AF 48 D9 2B A5 DB B8 C7 3A 0B 6F C3 DE 60 21 76 82 8A 92 43 AD 1A 8C 53 93 F2 0B 64 B5 38 1A 73 7A B3 DB 30 97 B6 1E E3 8A A9 6C 77 AE D7 37 86 1A 3D 08 23 0C 50 24 95 68 A2 22 88 AC FE 96 E5 0C B4 50 75 7F EC FD A9 B9 E9 C7 7B EB 98 24 5E 5E 90 00
DEBU[0708] apdu response decrypted hex: 91 20 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 92 10 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 93 47 30 45 02 21 00 F3 80 A2 F2 55 59 BD 93 0F F0 9C 52 D5 01 7A DB 15 96 91 B3 38 33 36 33 D7 D1 37 02 61 07 6D 0C 02 20 5B 1A 2D 3F 43 2F 68 C9 63 F7 86 AB D8 11 A6 34 35 F9 5E 6B B9 2C 58 08 67 68 4B 88 CF F3 E2 B9 90 00
DEBU[0708] CardPair1Response� ��G0E!��UY���R�z����8363��7am
[-?C/h�c���45�^k�,ghK����
DEBU[0710] sending FINALIZE_CARD_PAIR command
DEBU[0710] raw command before encryption: CLA: 80 Ins: 53 P1: 0 P2: 0 Data: 93 46 30 44 02 20 5E 12 FA 9C AC A4 D4 35 79 32 09 2E CB 86 D3 1D C8 83 2D 13 05 E0 CE EF DF 8F 10 34 EC 0D DC 22 02 20 3B F3 76 57 49 E3 20 72 95 6E 1F 8D 8B BC 6A 1C BD D3 EA 76 6E 55 B7 0A 6C 9B AB CE 78 92 F7 04
DEBU[0710] apdu command hex: 80 53 00 00 60 92 30 39 F2 22 C5 67 CB E6 80 69 AA CC 65 F3 54 86 C1 4D 4A 18 59 B2 3D 2D EC FE D0 44 D5 39 F9 0B E7 B2 7E 35 FE 48 65 CD 5F A2 DD 08 A3 B8 82 45 74 96 E9 51 4C F0 A5 CA 97 E7 19 DD 10 2D F2 AA 5E AC CC BA A3 9E E6 16 7A 03 5A 37 DA BD 61 B0 65 04 23 63 58 07 C1 37 98 5B 32 27 25 FB 58
DEBU[0712] apdu response hex: 23 55 64 E7 D6 7A 1D 0B D3 D5 52 FA 5E 7B FD 20 F6 61 22 7B 7B 03 2E 5A 46 B2 65 94 16 ED 67 18 90 00
DEBU[0712] apdu response decrypted hex: 90 00
DEBU[0712] FinalizeCardPairResponse
DEBU[0731] sending RECV_PHONONS command
DEBU[0731] raw command before encryption: CLA: 0 Ins: 36 P1: 0 P2: 0 Data: 53 E5 2B D2 43 29 7B F7 2C 83 12 04 B1 C7 2B D1 E1 47 F8 7C AE AF 2D 60 23 85 CF E2 32 52 76 8E 3A B3 DC E8 E6 F8 6B 2F 12 70 B1 C8 2E 82 E3 0E 4B 41 AE 85 B4 9C 44 35 64 3E 12 FB 79 F9 7A 13 02 E3 80 ED 88 59 7C FA C2 35 9B 90 42 55 04 3F
DEBU[0731] apdu command hex: 00 36 00 00 70 BA E7 AA F7 12 C3 DB 67 D6 12 73 45 FF 87 CF 91 FF 3A 30 DC 9B 10 B8 E0 66 E0 DB 0F 22 50 20 AA 61 57 43 21 FE FE FD DD 6E 2C 0C BE D2 C7 85 FD 60 CC 56 61 9B B3 B6 83 43 F5 1D 38 D1 A5 9A 78 57 FA 16 37 5A 6C 0D 57 24 25 BF 35 7D 4E ED D6 4C 53 3B 8A 00 77 65 57 59 F5 9A 71 A5 A0 20 1B C6 3E 5F A9 4C E8 59 0F 6E 86 6D F0 F4 AD 8C A8
DEBU[0734] apdu response hex: 33 CD 73 7F EF D3 17 7D 85 F2 27 CD 3A CA A1 92 69 4D EE 17 46 1B 9E 43 13 68 8D 64 0B BB 76 74 90 00
DEBU[0734] apdu response decrypted hex: 90 00
DEBU[0734] AckPhonon
04c55218a98e3224>
04c55218a98e3224>list
DEBU[0747] sending list phonons command
DEBU[0747] List phonons command data:
DEBU[0747] 60 10 82 02 00 00 84 04 00 00 00 00 85 04 00 00 00 00
DEBU[0747] p2: 0
DEBU[0747] raw command before encryption: CLA: 0 Ins: 32 P1: 0 P2: 0 Data: 60 10 82 02 00 00 84 04 00 00 00 00 85 04 00 00 00 00
DEBU[0747] apdu command hex: 00 32 00 00 30 8C 0A 99 D0 98 16 00 22 26 08 D8 29 48 60 7C 6C 85 8D 45 C4 19 49 84 0F CB 37 3C 69 40 22 47 87 79 F9 B2 56 0E 0B 63 8B 63 1A 8B 7F A2 F5 A6 4E
DEBU[0748] apdu response hex: BF CB EB 0B CB D5 F9 12 34 0B 43 D7 49 0C A9 89 7C 47 1E 7C 28 16 FB 51 9B EB 55 65 64 05 8E 3F 84 99 3B 22 1E 28 D6 84 10 E7 AC 35 EA 5D 25 EA 90 00
DEBU[0748] apdu response decrypted hex: 52 10 50 0E 83 04 42 C8 00 00 82 02 00 01 41 02 00 01 90 00
DEBU[0748] sending GET_PHONON_PUB_KEY command
DEBU[0748] raw command before encryption: CLA: 0 Ins: 33 P1: 0 P2: 0 Data: 41 02 00 01
DEBU[0748] apdu command hex: 00 33 00 00 20 2A 0C F7 6B 77 21 24 53 2E 85 35 8C 08 AC 6B 56 3B F8 72 9E 64 C3 22 59 E5 77 DA 9D FF 26 BE BF
DEBU[0748] apdu response hex: 15 36 1E 80 8A C4 DA BE 96 08 A5 9F 57 E3 E0 91 43 7B B0 5C 67 97 90 3E FB 2B 65 B9 CA 93 CC 80 71 51 86 99 12 A0 68 CE 5A D9 B6 71 A2 52 97 95 A1 8D 89 4F 88 F5 34 39 E5 B0 8C 7F 3F CA BE 1B 9F 06 09 02 0D 1E 31 23 EE 68 32 53 4C 75 3A F6 0E D1 E2 76 87 68 94 40 20 73 EB 1F 49 52 9C 6B 90 00
DEBU[0748] apdu response decrypted hex: 80 41 04 50 ED A4 17 4A A0 B8 97 1A BD BD 75 ED 22 36 2F 1D 18 3A C0 0F C2 08 AD E4 98 D6 65 20 1B 43 0B AB E1 AB 6C 1B D5 70 29 4F 7D A2 1A 7B 96 5F C0 87 F2 82 4A 73 9D DA 6A 56 87 79 9B CD A4 4B 1F 90 00
retrieved pubKey: &{0xc00009b620 36604903155352661543767306289346825223603042179009110720750182946298803208971 77744220810544465353771056553000550807102959611455209663056981633184106302239}
phonons:
KeyIndex: 1, Value: 100.000000, currencyType: Bitcoin, PubKey: 0450eda4174aa0b8971abdbd75ed22362f1d183ac00fc208ade498d665201b430babe1ab6c1bd570294f7da21a7b965fc087f2824a739dda6a5687799bcda44b1f

And while this confirms the successful transfer of the phonon, there is one more step to ensure the system works end to end, and that is redeeming the phonon private key for usage outside of phonon.

This step is executed on my card, retrieving the private key in Bitcoin’s WIF (Wallet Import Format) so it can be used to transact on chain. This step permanently deletes the private key along with the whole phonon definition from the card, preventing the user now in possession of the private key from doublespending the phonon.

While the current incarnation of the redeem function just prints out the private key in text, there is no reason that in the future this step couldn’t seamlessly transition the phonon key directly into an onchain wallet.

04c55218a98e3224>redeem 1
Are you sure you wish to redeem this phonon?
Performing this action will permanently delete the phonon from the card and present you with it's private key. After this, preserving this private key is your responsibility and there will be no other way to retrieve it.
no
❯ yes
DEBU[0055] sending DESTROY_PHONON command
DEBU[0055] raw command before encryption: CLA: 0 Ins: 34 P1: 0 P2: 0 Data: 41 02 00 01
DEBU[0055] apdu command hex: 00 34 00 00 20 91 C5 91 01 11 6F 0D 0F 3B 75 F9 E1 05 2B 08 C4 B2 A1 8A 3D 0A C5 14 1A 9A A2 D6 EB 48 49 B6 7E
OMITTED FOR SECURITY
redeemed phonon at keyIndex: 1
private key:
OMITTED FOR SECURITY
WIF format for BTC keys:
OMITTED FOR SECURITY

So there you have it, the world’s first phonon transfer!

It’s Just Starting to Get Interesting

While this transfer marks a significant milestone for the project, it is merely the end of the beginning. There are many more milestones to come as Phonon makes progress towards a truly scalable, private, peer to peer hardware enforced payment system.

To keep up to speed on new developments follow PhononDAO and GridPlus on Twitter and join the GridPlus Discord for more information!

--

--

Daniel Veenstra

Breadth first software engineer interested in data, distributed systems, crypto, and building a better world. @danveens