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()