18:01First, let me opine (state an opinion). The whitepaper says:
> The Libra mission is to enable a simple global currency and financial infrastructure that empowers
billions of people
I believe that is disingenuous. Maybe the development team believes that, but if that was FB's mission for Libra, while FB's own mission, by law, is profit, they would have gone about it a different way. They want to empower people the same way FB wants to connect people.
That said, they want to ride the blockchain wave as well, and we've learned a lot from our time there. Like, having cryptographers design computing systems doesn't make for foolproof systems. It can make for an incredibly secure infrastructure that people can't use safely. Like having a bank vault door on your house, but you can easily lock yourself out, or accidentally leave it unlocked and not know it.
Let's look at a couple
move samples:
public deposit(payee: address, to_deposit: Coin) {
let to_deposit_value: u64 = Unpack<Coin>(move(to_deposit));
let coin_ref: &mut Coin = BorrowGlobal<Coin>(move(payee));
let coin_value_ref: &mut u64 = &mut move(coin_ref).value;
let coin_value: u64 = *move(coin_value_ref);
*move(coin_value_ref) = move(coin_value) + move(to_deposit_value);
}
public withdraw_from_sender(amount: u64): Coin {
let transaction_sender_address: address = GetTxnSenderAddress();
let coin_ref: &mut Coin = BorrowGlobal<Coin>(move(transaction_sender_address));
let coin_value_ref: &mut u64 = &mut move(coin_ref).value;
let coin_value: u64 = *move(coin_value_ref);
RejectUnless(copy(coin_value) >= copy(amount));
*move(coin_value_ref) = move(coin_value) - copy(amount);
let new_coin: Coin = Pack<Coin>(move(amount));
return move(new_coin);
}If you want to avoid mistakes, that doesn't look like a language to help you do it.
18:10But the name "Move" sparked a thought. It's just that, with no analysis. If what you want is the ability to move assets from one place to another, shouldn't that all be built in? You may have conditions to check, but if you just had one
move method, with a source, destination, and amount, it either works (atomically) or fails for some reason that it gives you (e.g. source account doesn't have enough funds).
In a world of separate systems, sure, you need
deposit and
withdraw, with some conversions possibly taking place as well. But within a single system, where there are X assets of a single type, that can only move from place to place, never being created or destroyed, you only need
move. Build that into the system and avoid the gobbledygook above, that will be done wrong by many people.
*Can* we support Libra? Yes. It's just a VM and bytecode. *Should* we? Not just yet.