public async Task CanAddFractionalRoyaltyToTokenDefinition()
    {
        await using var fxAccount = await TestAccount.CreateAsync(_network);

        await using var fxToken = await TestToken.CreateAsync(_network, null, fxAccount);

        var fractionalRoyalties = new TokenRoyalty[] { new TokenRoyalty(fxAccount, 1, 2, 1, 100) };
        var receipt             = await fxToken.Client.UpdateRoyaltiesAsync(fxToken, fractionalRoyalties, fxToken.RoyaltiesPrivateKey);

        Assert.Equal(ResponseCode.Success, fxToken.Record.Status);

        var info = await fxToken.Client.GetTokenInfoAsync(fxToken.Record.Token);

        Assert.Single(info.Royalties);

        Assert.Equal(fractionalRoyalties[0], info.Royalties[0]);
    }
    public async Task CanNotAddFractionalRoyaltyToAssetDefinition()
    {
        await using var fxAccount = await TestAccount.CreateAsync(_network);

        await using var fxAsset = await TestAsset.CreateAsync(_network, null, fxAccount);

        var fractionalRoyalties = new TokenRoyalty[] { new TokenRoyalty(fxAccount, 1, 2, 1, 100) };

        var tex = await Assert.ThrowsAsync <TransactionException>(async() =>
        {
            await fxAsset.Client.UpdateRoyaltiesAsync(fxAsset, fractionalRoyalties, fxAsset.RoyaltiesPrivateKey);
        });

        Assert.Equal(ResponseCode.CustomFractionalFeeOnlyAllowedForFungibleCommon, tex.Status);
        Assert.StartsWith("Unable to Update Royalties, status: CustomFractionalFeeOnlyAllowedForFungibleCommon", tex.Message);

        var info = await fxAsset.Client.GetTokenInfoAsync(fxAsset.Record.Token);

        Assert.Empty(info.Royalties);
    }
    public async Task CanAddFixedAndFractionalRoyaltiesToTokenDefinition()
    {
        await using var fxAccount = await TestAccount.CreateAsync(_network);

        await using var comToken = await TestToken.CreateAsync(_network, null, fxAccount);

        await using var fxToken = await TestToken.CreateAsync(_network, null, fxAccount);

        var fixedRoyalty      = new FixedRoyalty(fxAccount, comToken, 100);
        var fractionalRoyalty = new TokenRoyalty(fxAccount, 1, 2, 1, 100);
        var receipt           = await fxToken.Client.UpdateRoyaltiesAsync(fxToken, new IRoyalty[] { fixedRoyalty, fractionalRoyalty }, fxToken.RoyaltiesPrivateKey);

        Assert.Equal(ResponseCode.Success, fxToken.Record.Status);

        var info = await fxToken.Client.GetTokenInfoAsync(fxToken.Record.Token);

        Assert.Equal(2, info.Royalties.Count);

        Assert.Equal(fixedRoyalty, info.Royalties.First(f => f.RoyaltyType == RoyaltyType.Fixed));
        Assert.Equal(fractionalRoyalty, info.Royalties.First(f => f.RoyaltyType == RoyaltyType.Token));
    }
    public async Task CanCreateTokenWithFixedAndFractionalRoyalties()
    {
        await using var fxAccount = await TestAccount.CreateAsync(_network);

        await using var comToken = await TestToken.CreateAsync(_network, null, fxAccount);

        var fixedRoyalty      = new FixedRoyalty(fxAccount, comToken, 100);
        var fractionalRoyalty = new TokenRoyalty(fxAccount, 1, 2, 1, 100);

        await using var fxToken = await TestToken.CreateAsync(_network, fx =>
        {
            fx.Params.Royalties = new IRoyalty[] { fixedRoyalty, fractionalRoyalty };
            fx.Params.Signatory = new Signatory(fx.Params.Signatory, fxAccount.PrivateKey);
        });

        Assert.Equal(ResponseCode.Success, fxToken.Record.Status);

        var info = await fxToken.Client.GetTokenInfoAsync(fxToken.Record.Token);

        Assert.Equal(2, info.Royalties.Count);

        Assert.Equal(fixedRoyalty, info.Royalties.First(f => f.RoyaltyType == RoyaltyType.Fixed));
        Assert.Equal(fractionalRoyalty, info.Royalties.First(f => f.RoyaltyType == RoyaltyType.Token));
    }