Skip to content

Commit

Permalink
feat: 馃幐 [WIP] upgrade types
Browse files Browse the repository at this point in the history
  • Loading branch information
monitz87 committed Aug 16, 2021
1 parent 71cb0f8 commit 56fe378
Show file tree
Hide file tree
Showing 27 changed files with 949 additions and 225 deletions.
29 changes: 24 additions & 5 deletions scripts/transactions.json
Expand Up @@ -258,7 +258,8 @@
"claim_classic_ticker": "claim_classic_ticker",
"add_documents": "add_documents",
"remove_documents": "remove_documents",
"reserve_classic_ticker": "reserve_classic_ticker"
"reserve_classic_ticker": "reserve_classic_ticker",
"register_custom_asset_type": "register_custom_asset_type"
},
"Dividend": {
"new": "new",
Expand Down Expand Up @@ -329,7 +330,9 @@
"batch_unfreeze_tx": "batch_unfreeze_tx",
"freeze_txs": "freeze_txs",
"unfreeze_txs": "unfreeze_txs",
"handle_scheduled_bridge_tx": "handle_scheduled_bridge_tx"
"handle_scheduled_bridge_tx": "handle_scheduled_bridge_tx",
"add_freeze_admin": "add_freeze_admin",
"remove_freeze_admin": "remove_freeze_admin"
},
"ComplianceManager": {
"add_active_rule": "add_active_rule",
Expand Down Expand Up @@ -387,7 +390,9 @@
"affirm_with_receipts": "affirm_with_receipts",
"execute_scheduled_instruction": "execute_scheduled_instruction",
"change_receipt_validity": "change_receipt_validity",
"reschedule_instruction": "reschedule_instruction"
"reschedule_instruction": "reschedule_instruction",
"update_venue_details": "update_venue_details",
"update_venue_type": "update_venue_type"
},
"Sto": {
"create_fundraiser": "create_fundraiser",
Expand Down Expand Up @@ -422,7 +427,8 @@
"delete_portfolio": "delete_portfolio",
"move_portfolio_funds": "move_portfolio_funds",
"rename_portfolio": "rename_portfolio",
"quit_portfolio_custody": "quit_portfolio_custody"
"quit_portfolio_custody": "quit_portfolio_custody",
"accept_portfolio_custody": "accept_portfolio_custody"
},
"Confidential": {
"add_range_proof": "add_range_proof",
Expand Down Expand Up @@ -485,6 +491,19 @@
"set_group_permissions": "set_group_permissions",
"remove_agent": "remove_agent",
"abdicate": "abdicate",
"change_group": "change_group"
"change_group": "change_group",
"accept_become_agent": "accept_become_agent"
},
"Relayer": {
"set_paying_key": "set_paying_key",
"accept_paying_key": "accept_paying_key",
"remove_paying_key": "remove_paying_key",
"update_polyx_limit": "update_polyx_limit",
"increase_polyx_limit": "increase_polyx_limit",
"decrease_polyx_limit": "decrease_polyx_limit"
},
"Rewards": {
"claim_itn_reward": "claim_itn_reward",
"set_itn_reward_status": "set_itn_reward_status"
}
}
2 changes: 1 addition & 1 deletion src/api/entities/CorporateAction/index.ts
Expand Up @@ -110,8 +110,8 @@ export class CorporateAction extends Entity<UniqueIdentifiers, unknown> {
const {
kind,
declarationDate,
description,
targets,
description,
defaultTaxWithholding,
taxWithholdings,
...identifiers
Expand Down
5 changes: 2 additions & 3 deletions src/api/entities/SecurityToken/index.ts
Expand Up @@ -37,7 +37,6 @@ import {
import { MAX_TICKER_LENGTH } from '~/utils/constants';
import {
assetIdentifierToTokenIdentifier,
assetNameToString,
assetTypeToString,
balanceToBigNumber,
boolToBoolean,
Expand Down Expand Up @@ -211,7 +210,7 @@ export class SecurityToken extends Entity<UniqueIdentifiers, string> {

/* eslint-disable @typescript-eslint/naming-convention */
const assembleResult = (
{ name, total_supply, divisible, owner_did, asset_type }: MeshSecurityToken,
{ total_supply, divisible, owner_did, asset_type }: MeshSecurityToken,
agentGroups: [StorageKey<[Ticker, IdentityId]>, Option<AgentGroup>][]
): SecurityTokenDetails => {
const primaryIssuanceAgents: Identity[] = [];
Expand All @@ -232,7 +231,7 @@ export class SecurityToken extends Entity<UniqueIdentifiers, string> {
return {
assetType: assetTypeToString(asset_type),
isDivisible: boolToBoolean(divisible),
name: assetNameToString(name),
name: 'placeholder',
owner,
totalSupply: balanceToBigNumber(total_supply),
primaryIssuanceAgents,
Expand Down
Expand Up @@ -537,7 +537,6 @@ describe('configureDividendDistribution procedure', () => {
Scheduled: [dsMockUtils.createMockU64(1), dsMockUtils.createMockU64(2)],
},
}),
details: description,
targets,
default_withholding_tax: defaultTaxWithholding.shiftedBy(4).toNumber(),
withholding_tax: taxWithholdings.map(({ identity, percentage }) =>
Expand All @@ -561,6 +560,9 @@ describe('configureDividendDistribution procedure', () => {
dsMockUtils.createQueryStub('corporateAction', 'corporateActions', {
returnValue: dsMockUtils.createMockOption(rawCorporateAction),
});
dsMockUtils.createQueryStub('corporateAction', 'details', {
returnValue: dsMockUtils.createMockText(description),
});
});

beforeEach(() => {
Expand Down
11 changes: 8 additions & 3 deletions src/api/procedures/__tests__/createSecurityToken.ts
Expand Up @@ -71,6 +71,7 @@ describe('createSecurityToken procedure', () => {
let rawType: AssetType;
let rawIdentifiers: AssetIdentifier[];
let rawFundingRound: FundingRoundName;
let rawDisableIu: bool;
let rawDocuments: Document[];
let args: Params;

Expand Down Expand Up @@ -142,6 +143,7 @@ describe('createSecurityToken procedure', () => {
})
);
rawFundingRound = dsMockUtils.createMockFundingRoundName(fundingRound);
rawDisableIu = dsMockUtils.createMockBool(false);
args = {
ticker,
name,
Expand Down Expand Up @@ -241,7 +243,8 @@ describe('createSecurityToken procedure', () => {
rawIsDivisible,
rawType,
rawIdentifiers,
rawFundingRound
rawFundingRound,
rawDisableIu
);
expect(result).toMatchObject(entityMockUtils.getSecurityTokenInstance({ ticker }));

Expand All @@ -261,7 +264,8 @@ describe('createSecurityToken procedure', () => {
rawIsDivisible,
rawType,
[],
null
null,
rawDisableIu
);

const issueTransaction = dsMockUtils.createTxStub('asset', 'issue');
Expand Down Expand Up @@ -295,7 +299,8 @@ describe('createSecurityToken procedure', () => {
rawIsDivisible,
rawType,
rawIdentifiers,
rawFundingRound
rawFundingRound,
rawDisableIu
);
expect(result).toMatchObject(entityMockUtils.getSecurityTokenInstance({ ticker }));
});
Expand Down
25 changes: 21 additions & 4 deletions src/api/procedures/__tests__/modifyVenue.ts
Expand Up @@ -109,26 +109,43 @@ describe('modifyVenue procedure', () => {
sinon.stub(utilsConversionModule, 'stringToVenueDetails').returns(rawDetails);
sinon.stub(utilsConversionModule, 'venueTypeToMeshVenueType').returns(rawType);

const transaction = dsMockUtils.createTxStub('settlement', 'updateVenue');
const updateVenueDetailsTransaction = dsMockUtils.createTxStub(
'settlement',
'updateVenueDetails'
);
const updateVenueTypeTransaction = dsMockUtils.createTxStub('settlement', 'updateVenueType');
const proc = procedureMockUtils.getInstance<Params, void>(mockContext);

await prepareModifyVenue.call(proc, args);

sinon.assert.calledWith(addTransactionStub, transaction, {}, rawId, rawDetails, rawType);
sinon.assert.calledWith(
addTransactionStub,
updateVenueDetailsTransaction,
{},
rawId,
rawDetails
);
sinon.assert.calledWith(addTransactionStub, updateVenueTypeTransaction, {}, rawId, rawType);

await prepareModifyVenue.call(proc, {
venueId,
type,
});

sinon.assert.calledWith(addTransactionStub, transaction, {}, rawId, null, rawType);
sinon.assert.calledWith(addTransactionStub, updateVenueTypeTransaction, {}, rawId, rawType);

await prepareModifyVenue.call(proc, {
venueId,
description,
});

sinon.assert.calledWith(addTransactionStub, transaction, {}, rawId, rawDetails, null);
sinon.assert.calledWith(
addTransactionStub,
updateVenueDetailsTransaction,
{},
rawId,
rawDetails
);
});

describe('getAuthorization', () => {
Expand Down
15 changes: 9 additions & 6 deletions src/api/procedures/configureDividendDistribution.ts
Expand Up @@ -38,18 +38,21 @@ export const createDividendDistributionResolver = (context: Context) => async (
receipt: ISubmittableResult
): Promise<DividendDistribution> => {
const [{ data }] = filterEventRecords(receipt, 'capitalDistribution', 'Created');
const [, { ticker, local_id: localId }, distribution] = data;
const [, caId, distribution] = data;
const { ticker, local_id: localId } = caId;

const corporateAction = await context.polymeshApi.query.corporateAction.corporateActions(
ticker,
localId
);
const { corporateAction } = context.polymeshApi.query;

const [corpAction, details] = await Promise.all([
corporateAction.corporateActions(ticker, localId),
corporateAction.details(caId),
]);

return new DividendDistribution(
{
ticker: tickerToString(ticker),
id: u32ToBigNumber(localId),
...meshCorporateActionToCorporateActionParams(corporateAction.unwrap(), context),
...meshCorporateActionToCorporateActionParams(corpAction.unwrap(), details, context),
...distributionToDividendDistributionParams(distribution, context),
},
context
Expand Down
132 changes: 132 additions & 0 deletions src/api/procedures/consumeAddMultisigSignerAuthorization.ts
@@ -0,0 +1,132 @@
import { TxTag, TxTags } from 'polymesh-types/types';

import { PolymeshError } from '~/base/PolymeshError';
import { Account, AuthorizationRequest, Procedure } from '~/internal';
import { ErrorCode, Role } from '~/types';
import { ProcedureAuthorization } from '~/types/internal';
import {
booleanToBool,
numberToU64,
signerToSignerValue,
signerToString,
signerValueToSignatory,
} from '~/utils/conversion';
import { getDid } from '~/utils/internal';

/**
* @hidden
*/
export type ConsumeAddMultisigSignerAuthorizationParams = {
authRequest: AuthorizationRequest;
accept: boolean;
};

/**
* @hidden
*/
export async function prepareConsumeAddMultisigSignerAuthorization(
this: Procedure<ConsumeAddMultisigSignerAuthorizationParams>,
args: ConsumeAddMultisigSignerAuthorizationParams
): Promise<void> {
const {
context: {
polymeshApi: {
tx: { multiSig, identity },
},
},
context,
} = this;
const { authRequest, accept } = args;

const { target, authId, expiry } = authRequest;

if (authRequest.isExpired()) {
throw new PolymeshError({
code: ErrorCode.ValidationError,
message: 'The Authorization Request has expired',
data: {
expiry,
},
});
}

let transaction;

const rawAuthId = numberToU64(authId, context);

if (!accept) {
this.addTransaction(
identity.removeAuthorization,
{},
signerValueToSignatory(signerToSignerValue(target), context),
rawAuthId,
booleanToBool(false, context)
);

return;
}

if (target instanceof Account) {
transaction = multiSig.acceptMultisigSignerAsKey;
} else {
transaction = multiSig.acceptMultisigSignerAsIdentity;
}

this.addTransaction(transaction, {}, rawAuthId);
}

/**
* @hidden
*/
export async function getAuthorization(
this: Procedure<ConsumeAddMultisigSignerAuthorizationParams>,
{ authRequest, accept }: ConsumeAddMultisigSignerAuthorizationParams
): Promise<ProcedureAuthorization> {
const { target, issuer } = authRequest;
const { context } = this;

let condition;
let did: string | undefined;
const fetchDid = async (): Promise<string> => getDid(did, context);

let transactions: TxTag[];

let roles: Role[] | boolean;

if (target instanceof Account) {
const { address } = context.getCurrentAccount();
condition = address === target.address;
transactions = [TxTags.multiSig.AcceptMultisigSignerAsKey];
} else {
did = await fetchDid();
condition = did === target.did;
transactions = [TxTags.multiSig.AcceptMultisigSignerAsIdentity];
}

if (!accept) {
transactions = [TxTags.identity.RemoveAuthorization];
try {
did = await fetchDid();
} catch (err) {
// do nothing
}
condition = condition || did === issuer.did;
}

if (bypassSignerPermissions) {
return {
roles,
};
}

return {
roles,
permissions: { transactions, tokens: [], portfolios: [] },
};
}

/**
* @hidden
*/
export const consumeAddMultisigSignerAuthorization = (): Procedure<ConsumeAddMultisigSignerAuthorizationParams> =>
new Procedure(prepareConsumeAddMultisigSignerAuthorization, getAuthorization);

0 comments on commit 56fe378

Please sign in to comment.