sample.aes.txt 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. // Contract simulating developers organization
  2. contract HackBG =
  3. record state = { developers: map(address, developer) }
  4. record developer = { name: string
  5. , age: int
  6. , skillset: map(skill, experience) }
  7. type skill = string
  8. type experience = int
  9. datatype event =
  10. LogDeveloperAdded(indexed address, indexed int, string)
  11. entrypoint init() : state = { developers = {} }
  12. stateful entrypoint dev_add(account: address, dev_name: string, dev_age: int) =
  13. require(!is_member(account), "ERROR_DEVELOPER_ALREADY_EXISTS")
  14. let dev : developer = { name = dev_name
  15. , age = dev_age
  16. , skillset = {} }
  17. put(state{ developers[account] = dev })
  18. Chain.event(LogDeveloperAdded(account, Chain.timestamp, dev_name))
  19. stateful entrypoint dev_update(account: address, dev_name: string, dev_age: int) =
  20. require(is_member(account), "ERROR_DEVELOPER_DOES_NOT_EXIST")
  21. put(state{ developers[account].name = dev_name })
  22. put(state{ developers[account].age = dev_age })
  23. function is_member(account: address) : bool =
  24. Map.member(account, state.developers)
  25. stateful entrypoint dev_skill_modify(account: address, skill: string, experience: int) =
  26. put(state{ developers[account].skillset[skill] = experience })
  27. entrypoint dev_get(account: address) : developer =
  28. state.developers[account]