Ticket Support

This is the implementation of tickets, as described in https://ripple.com/wiki/Multisign, which is required for M-of-N work.

A set of integrations tests to check ticket creation, lookup and deletion will be needed and will be pushed into this request as soon as they are done. 
True, but it's also less logic and fewer conditions - rather than the one
line...


On Thu, Aug 28, 2014 at 12:27 PM, Nik Bougalis <notifications@github.com>
wrote:

> In src/ripple/module/app/transactors/CancelTicket.cpp:
>
> > +    if (mTxnAccountID == ticket_owner)
> > +        authorized = true;
> > +
> > +    // The target can also always remove a ticket
> > +    if (!authorized && mTxn.isFieldPresent (sfTarget))
> > +    {
> > +        if (mTxnAccountID == sleTicket->getFieldAccount160 (sfTarget))
> > +            authorized = true;
> > +    }
> > +
> > +    // And finally, anyone can remove an expired ticket
> > +    if (!authorized && sleTicket->isFieldPresent (sfExpiration))
> > +    {
> > +        std::uint32_t const expiration = sleTicket->getFieldU32 (sfExpiration);
> > +
> > +        if (mEngine->getLedger ()->getParentCloseTimeNC () >= expiration)
>
> Do you have APL syndrome? Not *everything* needs to be in one line, as
> condensed as possible.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/ripple/rippled/pull/516/files#r16851010>.
>