Skip to content

Commit

Permalink
feat: validate just the PIA can call issue and redeem token
Browse files Browse the repository at this point in the history
  • Loading branch information
shuffledex committed Jan 19, 2021
1 parent 32f5064 commit 3893226
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 24 deletions.
12 changes: 3 additions & 9 deletions src/api/entities/Identity/__tests__/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ import {
Role,
RoleType,
TickerOwnerRole,
TokenOwnerOrPiaRole,
TokenOwnerRole,
TokenPiaRole,
VenueOwnerRole,
} from '~/types';
import * as utilsConversionModule from '~/utils/conversion';
Expand Down Expand Up @@ -133,18 +133,12 @@ describe('Identity class', () => {
expect(hasRole).toBe(false);
});

test('hasRole should check whether the Identity has the Token Owner role or the PIA role', async () => {
test('hasRole should check whether the Identity has the Token PIA role', async () => {
const identity = new Identity({ did: 'someDid' }, context);
const role: TokenOwnerOrPiaRole = { type: RoleType.TokenOwnerOrPia, ticker: 'someTicker' };
const role: TokenPiaRole = { type: RoleType.TokenPia, ticker: 'someTicker' };

let hasRole = await identity.hasRole(role);

expect(hasRole).toBe(true);

identity.did = 'otherDid';

hasRole = await identity.hasRole(role);

expect(hasRole).toBe(false);

entityMockUtils.configureMocks({
Expand Down
11 changes: 7 additions & 4 deletions src/api/entities/Identity/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ import {
isCddProviderRole,
isPortfolioCustodianRole,
isTickerOwnerRole,
isTokenOwnerOrPiaRole,
isTokenOwnerRole,
isTokenPiaRole,
isVenueOwnerRole,
Order,
ResultSet,
Expand Down Expand Up @@ -106,13 +106,16 @@ export class Identity extends Entity<UniqueIdentifiers> {
const { owner } = await token.details();

return owner.did === did;
} else if (isTokenOwnerOrPiaRole(role)) {
} else if (isTokenPiaRole(role)) {
const { ticker } = role;

const token = new SecurityToken({ ticker }, context);
const { owner, primaryIssuanceAgent } = await token.details();
const { primaryIssuanceAgent } = await token.details();

return (primaryIssuanceAgent && primaryIssuanceAgent.did === did) || owner.did === did;
if (primaryIssuanceAgent) {
return primaryIssuanceAgent.did === did;
}
return false;
} else if (isCddProviderRole(role)) {
const {
polymeshApi: {
Expand Down
2 changes: 1 addition & 1 deletion src/api/procedures/__tests__/issueTokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ describe('issueTokens procedure', () => {
} as IssueTokensParams;

expect(boundFunc(args)).toEqual({
identityRoles: [{ type: RoleType.TokenOwner, ticker }],
identityRoles: [{ type: RoleType.TokenPia, ticker }],
signerPermissions: {
transactions: [TxTags.asset.Issue],
tokens: [entityMockUtils.getSecurityTokenInstance({ ticker })],
Expand Down
4 changes: 2 additions & 2 deletions src/api/procedures/__tests__/redeemToken.ts
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ describe('redeemToken procedure', () => {
let result = await boundFunc(params);

expect(result).toEqual({
identityRoles: [{ type: RoleType.TokenOwnerOrPia, ticker }],
identityRoles: [{ type: RoleType.TokenPia, ticker }],
signerPermissions: {
transactions: [TxTags.asset.Redeem],
tokens: [new SecurityToken({ ticker }, mockContext)],
Expand All @@ -190,7 +190,7 @@ describe('redeemToken procedure', () => {
result = await boundFunc(params);

expect(result).toEqual({
identityRoles: [{ type: RoleType.TokenOwnerOrPia, ticker }],
identityRoles: [{ type: RoleType.TokenPia, ticker }],
signerPermissions: {
transactions: [TxTags.asset.Redeem],
tokens: [new SecurityToken({ ticker }, mockContext)],
Expand Down
2 changes: 1 addition & 1 deletion src/api/procedures/issueTokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ export function getAuthorization(
): ProcedureAuthorization {
const { context } = this;
return {
identityRoles: [{ type: RoleType.TokenOwner, ticker }],
identityRoles: [{ type: RoleType.TokenPia, ticker }],
signerPermissions: {
transactions: [TxTags.asset.Issue],
tokens: [new SecurityToken({ ticker }, context)],
Expand Down
2 changes: 1 addition & 1 deletion src/api/procedures/redeemToken.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export async function getAuthorization(
const { owner, primaryIssuanceAgent } = await securityToken.details();

return {
identityRoles: [{ type: RoleType.TokenOwnerOrPia, ticker }],
identityRoles: [{ type: RoleType.TokenPia, ticker }],
signerPermissions: {
transactions: [TxTags.asset.Redeem],
tokens: [new SecurityToken({ ticker }, context)],
Expand Down
12 changes: 6 additions & 6 deletions src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ export enum TransactionQueueStatus {
export enum RoleType {
TickerOwner = 'TickerOwner',
TokenOwner = 'TokenOwner',
TokenOwnerOrPia = 'TokenOwnerOrPia',
TokenPia = 'TokenPia',
CddProvider = 'CddProvider',
VenueOwner = 'VenueOwner',
PortfolioCustodian = 'PortfolioCustodian',
Expand Down Expand Up @@ -107,16 +107,16 @@ export function isTokenOwnerRole(role: Role): role is TokenOwnerRole {
return role.type === RoleType.TokenOwner;
}

export interface TokenOwnerOrPiaRole {
type: RoleType.TokenOwnerOrPia;
export interface TokenPiaRole {
type: RoleType.TokenPia;
ticker: string;
}

/**
* @hidden
*/
export function isTokenOwnerOrPiaRole(role: Role): role is TokenOwnerOrPiaRole {
return role.type === RoleType.TokenOwnerOrPia;
export function isTokenPiaRole(role: Role): role is TokenPiaRole {
return role.type === RoleType.TokenPia;
}

export interface CddProviderRole {
Expand Down Expand Up @@ -157,7 +157,7 @@ export function isPortfolioCustodianRole(role: Role): role is PortfolioCustodian
export type Role =
| TickerOwnerRole
| TokenOwnerRole
| TokenOwnerOrPiaRole
| TokenPiaRole
| CddProviderRole
| VenueOwnerRole
| PortfolioCustodianRole;
Expand Down

0 comments on commit 3893226

Please sign in to comment.