From bitcoin/bitcoin#19160 (comment), proxy-types marshalling code is hard to read and understand if it's doing the correct thing. I think it can be improved by adding some documentation, also by removing c++11isms (#46), and maybe by making the code less repetitive (same code is pasted repeatedly to deal with raw pointers/shared pointers/unique pointers/optionals, tuples/pairs, map/list/set/vector).