paxos: make promise an interface