コード例 #1
0
        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);
        }