Charity address string is “all you need is love” in hex format - insures nobody has access to it.

Funds distribution

The distribution of funds among charitable organizations is done manually (though totally transparently).

Owner of the contract calls adminTransferCharity function and specifies an amount and a receiver address. The amount is transferred from vault balance to receiver’s balance. On transfer LogCharityTransfer event is fired and charityPayed public variable is incremented by the amount transferred. Receivers then need to withdraw their balance.

Simple answer - it is simpler. Other options would require a lot more coding, which is more bugs and more constraints. But we want flexibility and security. We want to transfer any amount to any charity at anytime. So a little bit of good old centralization won’t harm.

Instead of making it trustless let us build trust. In other words just watch funds being continuously sent to charities and trust that this will continue to happen in the future.

How to control charity distribution?

The easiest way to control funds distribution is to check this Google Spreadsheet file. It lists all charity operations and summarizes them. First check that totals match and then randomly find several transaction on block explorer and check them too.

For a more thorough examination:

Check 0x616c6C20796F75206e656564206973206C6f7665 address balance to see how much of the charity funds is stored in the contract.

Check charityPayed public variable to see how much charity is payed out.