Founder's Addresses and private keys

Lazy question so I don’t have to go figure it out on my own:
Were the founder’s reward addresses generated by the same rules and cryptography as any other t-address?

1 Like

The simple answer is yes. They are hard-coded into the protocol specification and you can see them all on page 45 here https://raw.githubusercontent.com/zcash/zips/master/protocol/protocol.pdf. There are 48 of them and they are multi-sig transparent addresses (as indicated by the t3 prefix) and change once per month. There is some more info here: Proposal to create a Zcash Ecosystem Fund directly funded by the Founder's Reward

3 Likes

I didn’t realize this was even part of bitcoin core. neat!

1 Like

They were generated as 2-of-3 multisig addresses using custom software; there’s nothing special about them other than being multisig.

I’ll continue my string of lazy requests:

Would zcashco be willing to publish (at least in part?) the software used for generating 2 of 3, or if implemented, m of n multisig script addresses? If yes, the same for signing transactions?

Or If using the tools in libbitcoin-explorer would allow me the same capability then I guess I don’t need your tools, as long as they are compatible.

Ah jeez there’s an RPC call spelled out in 6.3.1 AddMultiSigAddress. I’ll look into that instead. Disregard the above request

So for signing a raw transaction from a m of n multisig address would I roughly have to do this:
(pseudo code)

zcash-cli signrawtransaction UNSIGNED_RAW_TX [] ["$ADDR_0_PRIVATE_KEY"]
Output: PARTIALLYSIGNED_RAW_TX1
zcash-cli signrawtransaction PARTIALLYSIGNED_RAW_TX1 [] ["$ADDR_1_PRIVATE_KEY"]
Output: PARTIALLYSIGNED_RAW_TX2

zcash-cli signrawtransaction PARTIALLYSIGNED_RAW_TXm [] ["$ADDR_m-1_PRIVATE_KEY"]
Output: FULLYSIGNED_RAW_TX

And then broadcast with

zcash-cli sendrawtransaction FULLYSIGNED_RAW_TX

I think this is correct from what I read in the bitcoin documentation (assuming the current bitcoin documentation is close to the version forked for zcash at v0.11.x.

1 Like

I know I’m sort of having a conversation with myself here but I’m just wondering why anyone would use anything less than a multi signature address for a cold storage application. Physically separating multiple keys, generating all transactions offline and submitting them from different, anonymous nodes.

I have to imagine that the founders addresses would be using this for more reasons than just security from outside influence, but also from internal theft.

Ahah. So maybe I do really want your custom software.

@daira
How do I create a transaction from multisig address to Z_address like was done from the first FR address in Tx
231c92d871f0578a5537fb949fc5cf9fd27f125fac4afb9e251b46d3d077e206 in block 000000003d7d6af1badc4c25323092f4580ab571b0293dfa8ee57c9633c86b61

As far as I can see from the documentation I can’t spend the amounts in a multisig address with Z_sendmany unless I have imported m private keys into the client. I think that would defeat the security of keeping private keys private and only signing transactions. Is there a way to use a signed transaction as an input to Z-sendmany?