The salesperson pattern
Intent
Creation of a smart contract where 1 instance of the smart contract will allow for an arbitrary amount of trades, where each trade is an exchange between a customer and the creator.
Consequences
- There are an arbitrary amount of traders that all trade with the creator.
- The smart contract is able to run indefinitely.
Structure
Again, the way that the buyer gets hold of the customerInvitation is a
design choice made by the smart contract designer: it is not included in
this pattern.
Participants
- Creator: the entity that starts an instance of the smart contract.
- Customer: the entity that wants to trade with the creator.
Implementation
const start = zcf => {
let internalSeat;
const sellOfferHandler = creatorSeat => {
internalSeat = creatorSeat;
//...
};
const buyOfferHandler = customerSeat => {
//some trade between customerSeat and internalSeat
};
const creatorInvitation = zcf.makeInvitation(sellOfferHandler, 'sell');
return harden({ creatorInvitation });
};
harden(start);
export { start };
The smart contract has an internal seat internalSeat. The first thing
that the creator should do, is register itself as the seller. The offer
handler linked to the creatorInvitation will set the internalSeat
equal to the creatorSeat. Thus, by offering the creatorInvitation,
the creator can register itself as the salesperson. All customers will
trade with this internalSeat: the offer handler related to the
customerInvitation will perform some kind of reallocation between the
customerSeat and the internalSeat. Just as in the managed assets
pattern, the high-level overview of the implementation of the
salesperson pattern does not include how the invitation linked to the
buyOfferHandler is obtained. This is a decision that should be made by
the contract designer.
Known uses
- The sell items smart contract.
Related patterns
- The managed assets pattern: as stated before, both the managed assets pattern and the salesperson pattern run indefinitely, and provide a way to let a creator trade with an arbitrary amount of customers.
- The exchange pattern: as stated before, both patterns allow a contract to run indefinitely. The only difference is who the participants of the smart contract trade with: all customers trade with the creator in the salesperson pattern, while all traders trade with one another in the exchange pattern.