OPEN MARKET PROTOCOL
The reference implementation for the Open Market Protocol
Note: the documentation is very outdated for the private message format.
* build(..MPA_*): rebuilds the transaction for a given and spits outs the rawtx. * validate(MPA_*): validate that a marketplace action conforms to the protocol. * verify(..MPA_*): verifies a _chain_ of MarketPlaceActions. * strip(MPA_*): strip any fields that do not belong in the protocol (simple: delete all that start with "_"). * create(MPA_LISTING_ADD): returns MPA_BID. * accept(MPA_LISTING_ADD, MPA_BID): returns MPA_ACCEPT (partially signed destruction tx, partially signed release tx). * lock(MPA_LISTING_ADD, MPA_BID, MPA_ACCEPT): make this also create the release tx. returns MPA_LOCK. (signed destruction tx, partially signed bix txn) * complete(MPA_LISTING_ADD, MPA_BID, MPA_ACCEPT, MPA_LOCK): returns a fully signed bid rawtx for the seller. * release(MPA_LISTING_ADD, MPA_BID, MPA_ACCEPT, MPA_LOCK): returns a fully signed release rawtx for the buyer. * refund(MPA_LISTING_ADD, MPA_BID, MPA_ACCEPT, MPA_LOCK): returns a fully signed refund rawtx for the seller.
The format validators can be found in the
These purely validate:
- required fields
- the right types (string, number, ..)
- non-negative fields
The sequence verifiers can be found in the
These purely verify that the provide sequence of actions is correct:
- validate format of action first
- check the sequence to verify that the order is correct (e.g. no bids before listing)
- verify that the sequence linked by the hashes is correct
- verify that the cryptocurrency in the bid is allowed in the listing
- verify that the escrow type over the sequence doesn't change
Deterministic transaction generation
Given a sequence of MPA's (marketplace actions), the resulting transaction generated by this library should be identical, byte-for-byte. The library rebuilds the transactions and stores a state of (potentially incomplete) transactions in the private fields of a message.
Additional fields can be supplied by the database with an "_", these should be stripped out using
We only use these when building transactions.
Run the test environment by running: python3 particl-test-env.py
Then run the test with: yarn test