@gavofyork
https://hackmd.io/@polkadot/Protocolberg2023np
An "Account" generally means "Caller identifier"; confers certain privileges within some logic.
Signed
)Origin
Origin
Origin
Note:
In Frame, accounts are a distant second-class citizen, not in the exhaulted place within the EVM EE. This means we can play around with them a lot more or, if we want disregard them completely and use a more effective abstraction.
Root
Treasury
CollectiveMembers(Amount, Count)
Parachain(Index)
Person(Alias)
Xcm(Location)
In Frame, just use the Utility.batch
call.
In Frame, just use the Utility.proxy
call.
In Frame, just use the Utility.multisig
call.
In Frame, just use the Recovery.as_recovered
call.
In Frame at the level of a chain, we just implement Verify
for any crypto we wish to support.
(Currently this includes Schnorr/Ristretto 25519, Ed25519 and ECDSA/SECP256k1.)
In Frame if we want to introduce a module which allows for using arbitrary new crypto, we just use a SignedExtension
or ValidateUnsigned
.
(This was used to great effect for claiming DOT tokens from an ETH address.)
In Frame, paying fees is not a first-class citizen; it's a SignedExtension
. So paying fees in multiple tokens (either with a multiasset treasury or through an exchange) is a trival reimplementation.
In Frame, paying someone else's fees is as trivial as the Utility.proxy
call.
(The main reason this is not yet prevalent on Polkadot is the transmission of the intention, but a decentralised and secure system for this is expected soon.)
Frame has the ability to return Pays::No
from any calls, meaning the system picks up the tab. Frame can also support not even requiring the sender account to exist prior with an appropriate SignedExtension
.
"Some rules can be bent; others broken."