Skip to content

Commit

Permalink
Rework Worker api and make it work against recent integritee-worker…
Browse files Browse the repository at this point in the history
… (aka tls directly into the enclave) (#89)

* [worker] test simple websocket connection

* [jest] allow any kind of certificate

* [worker] update get balance to just get regular balance of incognito accounts

* [network] update localDockerNetwork to be correct

* [worker.spec] successfully connect to the worker.

* Revert "[worker.spec] successfully connect to the worker."

This reverts commit 3768996.

* [worker.spec] connect to worker with original implementation; protocol changes needed.

* [worker] implement new trusted rpc protocol and successfully fetch the shielding key

* [worker.spec] remove primitive websocket test

* [worker.spec] separate tests for encointer-specific protocol

* [worker] successfully get free balance of an account

* [worker] implement getting shard vault

* [worker] fix return value parsing in generic cases

* [worker] refactor request creation into its own file

* [worker] rename getter api to sendRequest

* [worker] update public getter

* [worker] rename callGetter to sendRequest

* [worker] more explicit naming

* [worker] implement draft of trusted call balance transfer, (getting nonce fails currently)

* [worker] fix getting nonce by using toHex instead of to u8a

* [worker] fix signature type in trusted calls/getters

* [worker] fix interpreting the result of getters

* [worker] fix signature of trusted call

* [worker] try to encrypt the trusted call upon sending

* [worker] introduce trusted operation

* [worker] fix encryption

* [worker] add comment for node-rsa setting

* [worker] successfully send a top to the worker.

* [worker] better doc

* [worker] fix sending trusted calls with `author_submitExtrinsic`

* [jest] remove tls certificate config that didn't work

* [jest] remove tls certificate config that didn't work

* [worker] implement balance_unshield trusted call

* [worker] use charlie in tests

* [worker] rename interface IEncointerWorker to IIntegriteeWorker

* [worker] separate encointer from integritee worker

* [worker] finalize separation of workers

* [worker] separate types of integritee and encointer

* [worker] fix unused imports in encointer worker

* [worker] skip CI that needs a worker

* [worker] add todo for encointer worker
  • Loading branch information
clangenb authored Apr 10, 2024
1 parent d51cc20 commit 5d9a714
Show file tree
Hide file tree
Showing 25 changed files with 1,109 additions and 513 deletions.
35 changes: 27 additions & 8 deletions packages/types/src/interfaces/augment-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@ import type { BusinessData, BusinessIdentifier, OfferingData, OfferingIdentifier
import type { Assignment, AssignmentCount, AssignmentParams, Attestation, AttestationIndexType, CeremonyIndexType, CeremonyPhaseType, ClaimOfAttendance, ClaimOfAttendanceSigningPayload, CommunityCeremonyStats, CommunityReputation, Meetup, MeetupAssignment, MeetupIndexType, MeetupResult, MeetupTimeOffsetType, ParticipantIndexType, ParticipantRegistration, ProofOfAttendance, RegistrationType, Reputation } from '@encointer/types/interfaces/ceremony';
import type { FixedI64F64, IpfsCid, PalletString } from '@encointer/types/interfaces/common';
import type { AnnouncementSigner, Bip340, CidDigest, CidName, CommunityCeremony, CommunityIdentifier, CommunityMetadataType, CommunityRules, DegreeFixed, DegreeRpc, GeoHash, Location, LocationRpc, NominalIncomeType } from '@encointer/types/interfaces/community';
import type { EncointerBalanceTransferArgs, EncointerGetter, EncointerGetterArgs, EncointerPublicGetter, EncointerTrustedCall, EncointerTrustedCallSigned, EncointerTrustedGetter, EncointerTrustedGetterSigned, GrantReputationArgs, RegisterAttestationsArgs, RegisterParticipantArgs } from '@encointer/types/interfaces/encointerWorker';
import type { BalanceSetBalanceArgs, BalanceShieldArgs, BalanceTransferArgs, BalanceUnshieldArgs, IntegriteeGetter, IntegriteePublicGetter, IntegriteeTrustedCall, IntegriteeTrustedCallSigned, IntegriteeTrustedGetter, IntegriteeTrustedGetterSigned, IntegriteeTrustedOperation, TimestampSetArgs } from '@encointer/types/interfaces/integriteeWorker';
import type { SchedulerState, SystemNumber } from '@encointer/types/interfaces/scheduler';
import type { BalanceTransferArgs, ClientRequest, Enclave, Getter, GetterArgs, GrantReputationArgs, PublicGetter, RegisterAttestationsArgs, RegisterParticipantArgs, Request, ShardIdentifier, TrustedCall, TrustedCallSigned, TrustedGetter, TrustedGetterSigned, WorkerEncoded } from '@encointer/types/interfaces/worker';
import type { DirectRequestStatus, Enclave, GetterArgs, ParentchainId, Request, RpcReturnValue, ShardIdentifier, TrustedOperationStatus, Vault, WorkerEncoded } from '@encointer/types/interfaces/worker';
import type { Data, StorageKey } from '@polkadot/types';
import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, ISize, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, isize, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec';
import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets';
Expand Down Expand Up @@ -158,8 +160,11 @@ declare module '@polkadot/types/types/registry' {
Balance: Balance;
BalanceEntry: BalanceEntry;
BalanceOf: BalanceOf;
BalanceSetBalanceArgs: BalanceSetBalanceArgs;
BalanceShieldArgs: BalanceShieldArgs;
BalanceTransferArgs: BalanceTransferArgs;
BalanceType: BalanceType;
BalanceUnshieldArgs: BalanceUnshieldArgs;
BeefyAuthoritySet: BeefyAuthoritySet;
BeefyCommitment: BeefyCommitment;
BeefyEquivocationProof: BeefyEquivocationProof;
Expand Down Expand Up @@ -242,7 +247,6 @@ declare module '@polkadot/types/types/registry' {
ClassDetails: ClassDetails;
ClassId: ClassId;
ClassMetadata: ClassMetadata;
ClientRequest: ClientRequest;
CodecHash: CodecHash;
CodeHash: CodeHash;
CodeSource: CodeSource;
Expand Down Expand Up @@ -367,6 +371,7 @@ declare module '@polkadot/types/types/registry' {
Digest: Digest;
DigestItem: DigestItem;
DigestOf: DigestOf;
DirectRequestStatus: DirectRequestStatus;
DispatchClass: DispatchClass;
DispatchError: DispatchError;
DispatchErrorModule: DispatchErrorModule;
Expand Down Expand Up @@ -406,6 +411,14 @@ declare module '@polkadot/types/types/registry' {
Enclave: Enclave;
EncodedFinalityProofs: EncodedFinalityProofs;
EncodedJustification: EncodedJustification;
EncointerBalanceTransferArgs: EncointerBalanceTransferArgs;
EncointerGetter: EncointerGetter;
EncointerGetterArgs: EncointerGetterArgs;
EncointerPublicGetter: EncointerPublicGetter;
EncointerTrustedCall: EncointerTrustedCall;
EncointerTrustedCallSigned: EncointerTrustedCallSigned;
EncointerTrustedGetter: EncointerTrustedGetter;
EncointerTrustedGetterSigned: EncointerTrustedGetterSigned;
Epoch: Epoch;
EpochAuthorship: EpochAuthorship;
Era: Era;
Expand Down Expand Up @@ -542,7 +555,6 @@ declare module '@polkadot/types/types/registry' {
FungiblesAccessError: FungiblesAccessError;
Gas: Gas;
GeoHash: GeoHash;
Getter: Getter;
GetterArgs: GetterArgs;
GiltBid: GiltBid;
GlobalValidationData: GlobalValidationData;
Expand Down Expand Up @@ -628,6 +640,13 @@ declare module '@polkadot/types/types/registry' {
InstantiateReturnValueTo267: InstantiateReturnValueTo267;
InstructionV2: InstructionV2;
InstructionWeights: InstructionWeights;
IntegriteeGetter: IntegriteeGetter;
IntegriteePublicGetter: IntegriteePublicGetter;
IntegriteeTrustedCall: IntegriteeTrustedCall;
IntegriteeTrustedCallSigned: IntegriteeTrustedCallSigned;
IntegriteeTrustedGetter: IntegriteeTrustedGetter;
IntegriteeTrustedGetterSigned: IntegriteeTrustedGetterSigned;
IntegriteeTrustedOperation: IntegriteeTrustedOperation;
InteriorMultiLocation: InteriorMultiLocation;
InvalidDisputeStatementKind: InvalidDisputeStatementKind;
InvalidTransaction: InvalidTransaction;
Expand Down Expand Up @@ -830,6 +849,7 @@ declare module '@polkadot/types/types/registry' {
ParathreadClaimQueue: ParathreadClaimQueue;
ParathreadEntry: ParathreadEntry;
ParaValidatorIndex: ParaValidatorIndex;
ParentchainId: ParentchainId;
ParticipantIndexType: ParticipantIndexType;
ParticipantRegistration: ParticipantRegistration;
Pays: Pays;
Expand Down Expand Up @@ -876,7 +896,6 @@ declare module '@polkadot/types/types/registry' {
ProxyDefinition: ProxyDefinition;
ProxyState: ProxyState;
ProxyType: ProxyType;
PublicGetter: PublicGetter;
PvfCheckStatement: PvfCheckStatement;
PvfExecTimeoutKind: PvfExecTimeoutKind;
PvfPrepTimeoutKind: PvfPrepTimeoutKind;
Expand Down Expand Up @@ -947,6 +966,7 @@ declare module '@polkadot/types/types/registry' {
RoundSnapshot: RoundSnapshot;
RoundState: RoundState;
RpcMethods: RpcMethods;
RpcReturnValue: RpcReturnValue;
RuntimeApiMetadataLatest: RuntimeApiMetadataLatest;
RuntimeApiMetadataV15: RuntimeApiMetadataV15;
RuntimeApiMethodMetadataV15: RuntimeApiMethodMetadataV15;
Expand Down Expand Up @@ -1132,6 +1152,7 @@ declare module '@polkadot/types/types/registry' {
TAssetDepositBalance: TAssetDepositBalance;
Text: Text;
Timepoint: Timepoint;
TimestampSetArgs: TimestampSetArgs;
TokenError: TokenError;
TombstoneContractInfo: TombstoneContractInfo;
TraceBlockResponse: TraceBlockResponse;
Expand All @@ -1152,10 +1173,7 @@ declare module '@polkadot/types/types/registry' {
TreasuryProposal: TreasuryProposal;
TrieId: TrieId;
TrieIndex: TrieIndex;
TrustedCall: TrustedCall;
TrustedCallSigned: TrustedCallSigned;
TrustedGetter: TrustedGetter;
TrustedGetterSigned: TrustedGetterSigned;
TrustedOperationStatus: TrustedOperationStatus;
Type: Type;
u128: u128;
U128: U128;
Expand Down Expand Up @@ -1203,6 +1221,7 @@ declare module '@polkadot/types/types/registry' {
ValidDisputeStatementKind: ValidDisputeStatementKind;
ValidityAttestation: ValidityAttestation;
ValidTransaction: ValidTransaction;
Vault: Vault;
VecInboundHrmpMessage: VecInboundHrmpMessage;
VersionedMultiAsset: VersionedMultiAsset;
VersionedMultiAssets: VersionedMultiAssets;
Expand Down
2 changes: 2 additions & 0 deletions packages/types/src/interfaces/definitions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ export { default as ceremony } from './ceremony/definitions.js';
export { default as community } from './community/definitions.js';
export { default as scheduler } from './scheduler/definitions.js';
export { default as worker } from './worker/definitions.js';
export { default as encointerWorker } from './encointerWorker/definitions.js'
export { default as integriteeWorker } from './integriteeWorker/definitions.js'
53 changes: 53 additions & 0 deletions packages/types/src/interfaces/encointerWorker/definitions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
export default {
rpc: {},
types: {
EncointerGetterArgs: '(AccountId, CommunityIdentifier)',
EncointerPublicGetter: {
_enum: {
total_issuance: 'CommunityIdentifier',
participant_count: 'CommunityIdentifier',
meetup_count: 'CommunityIdentifier',
ceremony_reward: 'CommunityIdentifier',
location_tolerance: 'CommunityIdentifier',
time_tolerance: 'CommunityIdentifier',
scheduler_state: 'CommunityIdentifier'
}
},
EncointerTrustedGetter: {
_enum: {
balance: '(AccountId, CommunityIdentifier)',
participant_index: '(AccountId, CommunityIdentifier)',
meetup_index: '(AccountId, CommunityIdentifier)',
attestations: '(AccountId, CommunityIdentifier)',
meetup_registry: '(AccountId, CommunityIdentifier)'
}
},
EncointerTrustedGetterSigned: {
getter: 'EncointerTrustedGetter',
signature: 'Signature'
},
EncointerGetter: {
_enum: {
public: 'EncointerPublicGetter',
trusted: 'EncointerTrustedGetterSigned'
}
},
EncointerTrustedCallSigned: {
call: 'EncointerTrustedCall',
nonce: 'u32',
signature: 'Signature'
},
EncointerTrustedCall: {
_enum: {
balance_transfer: 'EncointerBalanceTransferArgs',
ceremonies_register_participant: 'RegisterParticipantArgs',
ceremonies_register_attestations: 'RegisterAttestationsArgs',
ceremonies_grant_reputation: 'GrantReputationArgs'
}
},
EncointerBalanceTransferArgs: '(AccountId, AccountId, CommunityIdentifier, BalanceType)',
RegisterParticipantArgs: '(AccountId, CommunityIdentifier, Option<ProofOfAttendance<MultiSignature, AccountId>>)',
RegisterAttestationsArgs: '(AccountId, Vec<Attestation<MultiSignature, AccountId, u64>>)',
GrantReputationArgs: '(AccountId, CommunityIdentifier, AccountId)'
}
}
4 changes: 4 additions & 0 deletions packages/types/src/interfaces/encointerWorker/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
/* eslint-disable */

export * from './types.js';
96 changes: 96 additions & 0 deletions packages/types/src/interfaces/encointerWorker/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
/* eslint-disable */

import type { BalanceType } from '@encointer/types/interfaces/balances';
import type { Attestation, ProofOfAttendance } from '@encointer/types/interfaces/ceremony';
import type { CommunityIdentifier } from '@encointer/types/interfaces/community';
import type { Enum, Option, Struct, Vec, u32 } from '@polkadot/types-codec';
import type { ITuple } from '@polkadot/types-codec/types';
import type { Signature } from '@polkadot/types/interfaces/extrinsics';
import type { AccountId } from '@polkadot/types/interfaces/runtime';

/** @name EncointerBalanceTransferArgs */
export interface EncointerBalanceTransferArgs extends ITuple<[AccountId, AccountId, CommunityIdentifier, BalanceType]> {}

/** @name EncointerGetter */
export interface EncointerGetter extends Enum {
readonly isPublic: boolean;
readonly asPublic: EncointerPublicGetter;
readonly isTrusted: boolean;
readonly asTrusted: EncointerTrustedGetterSigned;
readonly type: 'Public' | 'Trusted';
}

/** @name EncointerGetterArgs */
export interface EncointerGetterArgs extends ITuple<[AccountId, CommunityIdentifier]> {}

/** @name EncointerPublicGetter */
export interface EncointerPublicGetter extends Enum {
readonly isTotalIssuance: boolean;
readonly asTotalIssuance: CommunityIdentifier;
readonly isParticipantCount: boolean;
readonly asParticipantCount: CommunityIdentifier;
readonly isMeetupCount: boolean;
readonly asMeetupCount: CommunityIdentifier;
readonly isCeremonyReward: boolean;
readonly asCeremonyReward: CommunityIdentifier;
readonly isLocationTolerance: boolean;
readonly asLocationTolerance: CommunityIdentifier;
readonly isTimeTolerance: boolean;
readonly asTimeTolerance: CommunityIdentifier;
readonly isSchedulerState: boolean;
readonly asSchedulerState: CommunityIdentifier;
readonly type: 'TotalIssuance' | 'ParticipantCount' | 'MeetupCount' | 'CeremonyReward' | 'LocationTolerance' | 'TimeTolerance' | 'SchedulerState';
}

/** @name EncointerTrustedCall */
export interface EncointerTrustedCall extends Enum {
readonly isBalanceTransfer: boolean;
readonly asBalanceTransfer: EncointerBalanceTransferArgs;
readonly isCeremoniesRegisterParticipant: boolean;
readonly asCeremoniesRegisterParticipant: RegisterParticipantArgs;
readonly isCeremoniesRegisterAttestations: boolean;
readonly asCeremoniesRegisterAttestations: RegisterAttestationsArgs;
readonly isCeremoniesGrantReputation: boolean;
readonly asCeremoniesGrantReputation: GrantReputationArgs;
readonly type: 'BalanceTransfer' | 'CeremoniesRegisterParticipant' | 'CeremoniesRegisterAttestations' | 'CeremoniesGrantReputation';
}

/** @name EncointerTrustedCallSigned */
export interface EncointerTrustedCallSigned extends Struct {
readonly call: EncointerTrustedCall;
readonly nonce: u32;
readonly signature: Signature;
}

/** @name EncointerTrustedGetter */
export interface EncointerTrustedGetter extends Enum {
readonly isBalance: boolean;
readonly asBalance: ITuple<[AccountId, CommunityIdentifier]>;
readonly isParticipantIndex: boolean;
readonly asParticipantIndex: ITuple<[AccountId, CommunityIdentifier]>;
readonly isMeetupIndex: boolean;
readonly asMeetupIndex: ITuple<[AccountId, CommunityIdentifier]>;
readonly isAttestations: boolean;
readonly asAttestations: ITuple<[AccountId, CommunityIdentifier]>;
readonly isMeetupRegistry: boolean;
readonly asMeetupRegistry: ITuple<[AccountId, CommunityIdentifier]>;
readonly type: 'Balance' | 'ParticipantIndex' | 'MeetupIndex' | 'Attestations' | 'MeetupRegistry';
}

/** @name EncointerTrustedGetterSigned */
export interface EncointerTrustedGetterSigned extends Struct {
readonly getter: EncointerTrustedGetter;
readonly signature: Signature;
}

/** @name GrantReputationArgs */
export interface GrantReputationArgs extends ITuple<[AccountId, CommunityIdentifier, AccountId]> {}

/** @name RegisterAttestationsArgs */
export interface RegisterAttestationsArgs extends ITuple<[AccountId, Vec<Attestation>]> {}

/** @name RegisterParticipantArgs */
export interface RegisterParticipantArgs extends ITuple<[AccountId, CommunityIdentifier, Option<ProofOfAttendance>]> {}

export type PHANTOM_ENCOINTERWORKER = 'encointerWorker';
60 changes: 60 additions & 0 deletions packages/types/src/interfaces/integriteeWorker/definitions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
export default {
rpc: {},
types: {
IntegriteePublicGetter: {
_enum: {
total_issuance: 'CommunityIdentifier',
participant_count: 'CommunityIdentifier',
meetup_count: 'CommunityIdentifier',
ceremony_reward: 'CommunityIdentifier',
location_tolerance: 'CommunityIdentifier',
time_tolerance: 'CommunityIdentifier',
scheduler_state: 'CommunityIdentifier'
}
},
IntegriteeTrustedGetter: {
_enum: {
free_balance: 'AccountId',
reserved_balance: 'AccountId',
nonce: 'AccountId',
}
},
IntegriteeTrustedGetterSigned: {
getter: 'IntegriteeTrustedGetter',
signature: 'MultiSignature'
},
IntegriteeGetter: {
_enum: {
public: 'IntegriteePublicGetter',
trusted: 'IntegriteeTrustedGetterSigned'
}
},
IntegriteeTrustedOperation: {
_enum: {
indirect_call: 'IntegriteeTrustedCallSigned',
direct_call: 'IntegriteeTrustedCallSigned',
get: 'IntegriteeGetter'
}
},
IntegriteeTrustedCallSigned: {
call: 'IntegriteeTrustedCall',
nonce: 'u32',
signature: 'MultiSignature'
},
IntegriteeTrustedCall: {
_enum: {
noop: 'AccountId',
balance_set_balance: 'BalanceSetBalanceArgs',
balance_transfer: 'BalanceTransferArgs',
balance_unshield: 'BalanceUnshieldArgs',
balance_shield: 'BalanceShieldArgs',
timestamp_set: 'TimestampSetArgs',
}
},
BalanceSetBalanceArgs: '(AccountId, AccountId, BalanceType, BalanceType)',
BalanceTransferArgs: '(AccountId, AccountId, BalanceType)',
BalanceUnshieldArgs: '(AccountId, AccountId, BalanceType, ShardIdentifier)',
BalanceShieldArgs: '(AccountId, AccountId, BalanceType, ParentchainId)',
TimestampSetArgs: '(AccountId, H160, BalanceType)',
}
}
4 changes: 4 additions & 0 deletions packages/types/src/interfaces/integriteeWorker/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
/* eslint-disable */

export * from './types.js';
Loading

0 comments on commit 5d9a714

Please sign in to comment.