Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [%%version 0.5]
- type storage = {
- usersDocuments : (address,address set) big_map;
- documents: string set;
- }
- let%init storage : storage = {
- usersDocuments = BigMap;
- documents = Set;
- }
- contract Document = struct
- type storage = string * address * address set * address set
- let%entry main () storage =
- [],storage
- let%entry sign () storage =
- let (hash, owner, signs, access) = storage in
- let userAddress = Current.sender() in
- if not(Set.mem userAddress access) then failwith ("Sign not alowed");
- if Set.mem userAddress signs then failwith ("sign already exist");
- let signs = Set.add userAddress signs in
- [], (hash, owner, signs, access)
- let%entry addAccess (user:address) storage =
- let (hash, owner, signs, access) = storage in
- let userAddress = Current.sender() in
- if owner <> userAddress then failwith "you not owner";
- let access = Set.add user access in
- [], (hash, owner, signs, access)
- let%entry removeAccess (user:address) storage =
- let (hash, owner, signs, access) = storage in
- let userAddress = Current.sender() in
- if owner <> userAddress then failwith "you not owner";
- let access = Set.remove user access in
- [], (hash, owner, signs, access)
- end
- let%entry createFile ((fileHash : string),(manager:key_hash)) storage =
- let userAddress = Current.sender() in
- if Set.mem fileHash storage.documents then
- failwith "sorry file exist use him api";
- let (createContractOp,docAddress) =
- Contract.create
- ~storage: (fileHash,userAddress,Set,Set)
- ~manager:manager
- ~spendable:true
- ~delegatable:true
- ~delegate:(None)
- ~amount:0tz (contract Document)
- in
- let userDocuments = match Map.find userAddress storage.usersDocuments with
- | None -> Set
- | Some docSotrage -> docSotrage
- in
- let userDocuments = Set.add docAddress userDocuments in
- let documents = Set.add fileHash storage.documents in
- let usersDocuments = Map.add userAddress userDocuments storage.usersDocuments in
- let storage = storage.usersDocuments <- usersDocuments in
- let storage = storage.documents <- documents in
- [ createContractOp], storage
- let%entry main () storage =
- ([], storage)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement