• Peter Goodspeed-Niklaus's avatar
    Factor out can_set_code (#5317) · a9b9ca5f
    Peter Goodspeed-Niklaus authored
    * Factor out can_set_code
    
    The motivation for this feature is parachain runtime upgrades, which
    happen in two different moments: the initial call, when the checks
    should be performed, and at the actual upgrade block. It's much
    better and more maintainable to just call `can_set_code` in the
    function than to manually copy those checks.
    
    I'm not entirely thrilled with the interface, which requires
    cloning the entire code vector in `set_code`. However, it looks
    like something in `decl_module!` does not play nicely with
    references in its function arguments. If `code` has a lifetime,
    it _must_ be named, which gives us this signature.
    
    ```rust
    pub fn can_set_code<'a>(origin, code: &'a [u8]) {
    ```
    
    Unfortunately, attempting to compile with that signature generates
    a very large and baffling collection of build errors, so I decided
    to abandon that path for now.
    
    * make can_set_code non-dispatchable per PR revew
    
    Not only can we now borrow the `code` slice, but we also no longer
    need to worry about people sending a `can_set_code` transaction because
    of some misunderstanding.
    
    * move into existing impl block
    a9b9ca5f