Example #1
0
def invite_members():
    """
    Invite member as an initialization step after a `PostmanRole` contract is seen.
    """
    return init(). \
        from_(PostmanRole). \
        update([PostmanRole.InviteParticipant(
                    party=member['party_name'],
                    address=member['party_address'])
                for member in MEMBERS])
def send_to_five_friends(member):
    """
    Send letters to five friends for the given member.
    """
    # This is just a demonstration; in a real system, this interaction would
    # likely have to happen "outside" the ledger program.
    party_index = member['party_index']
    party_address = member['party_address']

    return init(). \
        from_(AuthorRole). \
        update([AuthorRole.CreateLetter(
            address=party_address,
            content='I am a letter from {} to {}.'.format(party_index, friend_index))
            for friend_index in
            [i % len(MEMBERS) for i in range(party_index + 1, party_index + 6)]])
def set_up() -> Application:
    """
    Create the application.
    """
    app_builder = ApplicationBuilder()

    app_builder.as_party('POSTMAN'). \
        add(init().update(PostmanRole(postman='POSTMAN'))). \
        add(invite_members()). \
        add(sort_and_deliver())

    for member in MEMBERS:
        party = member['party_name']
        app_builder.as_party(party). \
            add(InviteAuthorRole.Accept()). \
            add(InviteReceiverRole.Accept()). \
            add(send_to_five_friends(member))

    return app_builder.build()