1234567891011121314151617181920212223242526272829303132333435363738 |
- // Contract simulating developers organization
- contract HackBG =
- record state = { developers: map(address, developer) }
- record developer = { name: string
- , age: int
- , skillset: map(skill, experience) }
- type skill = string
- type experience = int
- datatype event =
- LogDeveloperAdded(indexed address, indexed int, string)
- entrypoint init() : state = { developers = {} }
- stateful entrypoint dev_add(account: address, dev_name: string, dev_age: int) =
- require(!is_member(account), "ERROR_DEVELOPER_ALREADY_EXISTS")
- let dev : developer = { name = dev_name
- , age = dev_age
- , skillset = {} }
- put(state{ developers[account] = dev })
- Chain.event(LogDeveloperAdded(account, Chain.timestamp, dev_name))
- stateful entrypoint dev_update(account: address, dev_name: string, dev_age: int) =
- require(is_member(account), "ERROR_DEVELOPER_DOES_NOT_EXIST")
- put(state{ developers[account].name = dev_name })
- put(state{ developers[account].age = dev_age })
- function is_member(account: address) : bool =
- Map.member(account, state.developers)
- stateful entrypoint dev_skill_modify(account: address, skill: string, experience: int) =
- put(state{ developers[account].skillset[skill] = experience })
- entrypoint dev_get(account: address) : developer =
- state.developers[account]
|