Ownership transfer
Example
An example that is meant to illustrate how protocol ownership may be transferred in exchange for ownership of another protocol.
Specifically, this example involves a Deliverable
that is exchanged for Money
. The transfer is accomplished via a
Swap
protocol. When this protocol comes into effect, it permits either deliverableOwner
or moneyOwner
to perform
the swap()
under the agreed upon conditions. For each of the underlying protocols the transfer
permission requires
that both the original owner
as well as the
external party newOwner
invoke. This
orchestration is the job of the Swap
protocol.
Source
protocol[owner] Deliverable() {
permission[owner & *newOwner] transfer() {
this.owner = newOwner;
};
};
protocol[owner] Money() {
permission[owner & *newOwner] transfer() {
this.owner = newOwner;
};
};
protocol[deliverableOwner, moneyOwner] Swap(var deliverable: Deliverable, var money: Money) {
initial state unswapped;
final state swapped;
permission[deliverableOwner | moneyOwner] swap() | unswapped {
deliverable.transfer[deliverableOwner, moneyOwner]();
money.transfer[moneyOwner, deliverableOwner]();
become swapped;
};
};
Tests
const OWNER_DELIVERABLE = 'd';
const OWNER_MONEY = 'm';
@test
function testSwap(test: Test) -> {
// Two assets
var deliverable = Deliverable[OWNER_DELIVERABLE]();
var money = Money[OWNER_MONEY]();
// An agreed-upon swap
var swap = Swap[OWNER_DELIVERABLE, OWNER_MONEY](deliverable, money);
// Attempt a swap
swap.swap[OWNER_DELIVERABLE]();
};