private void AddFile(Address from, Address target, IArchive archive) { Runtime.Expect(Runtime.IsWitness(from), "invalid witness"); Runtime.Expect(HasPermission(from, target), $"permissions missing for {from} to add file to {target}"); Runtime.Expect(target.IsUser, "destination address must be user address"); Runtime.Expect(archive != null, "archive does not exist"); BigInteger requiredSize = archive.Size; var targetUsedSize = GetUsedSpace(target); var targetStakedAmount = Runtime.GetStake(target); var targetAvailableSize = CalculateStorageSizeForStake(targetStakedAmount); targetAvailableSize -= targetUsedSize; Runtime.Expect(targetAvailableSize >= requiredSize, "target account does not have available space"); if (!archive.IsOwner(target)) { Runtime.AddOwnerToArchive(archive.Hash, target); } var list = _storageMap.Get <Address, StorageList>(target); list.Add <Hash>(archive.Hash); }