Skip to content

Commit 7a123d9

Browse files
authored
Merge pull request #279 from smartcontractkit/rtinianov_teeRuntimeAndRestricted
Add restrictions in a prehook
2 parents 45ee43a + d3d4422 commit 7a123d9

22 files changed

Lines changed: 1254 additions & 16 deletions

File tree

packages/cre-sdk/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
COMMON_VERSION ?= cre-std-tests@0.8.0
1+
COMMON_VERSION ?= cre-std-tests@0.9.0
22
MODULE := github.com/smartcontractkit/chainlink-common
33
TEST_PATTERN ?= ^TestStandard
44

packages/cre-sdk/src/generated-sdk/capabilities/blockchain/aptos/v1alpha/client_sdk_gen.ts

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import {
3030
WriteReportRequestSchema,
3131
} from '@cre/generated/capabilities/blockchain/aptos/v1alpha/client_pb'
3232
import {
33+
type CapabilityRestrictionJson,
3334
type ReportResponse,
3435
type ReportResponseJson,
3536
ReportResponseSchema,
@@ -314,3 +315,72 @@ export class ClientCapability {
314315
}
315316
}
316317
}
318+
319+
export class ClientRestrictor {
320+
constructor(private readonly ChainSelector: bigint) {}
321+
322+
limitAccountAPTBalance(maxCalls: number): CapabilityRestrictionJson {
323+
// Include all labels in capability ID for routing when specified
324+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
325+
326+
return {
327+
method: {
328+
id: capabilityId,
329+
method: 'AccountAPTBalance',
330+
maxCalls,
331+
},
332+
}
333+
}
334+
335+
limitView(maxCalls: number): CapabilityRestrictionJson {
336+
// Include all labels in capability ID for routing when specified
337+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
338+
339+
return {
340+
method: {
341+
id: capabilityId,
342+
method: 'View',
343+
maxCalls,
344+
},
345+
}
346+
}
347+
348+
limitTransactionByHash(maxCalls: number): CapabilityRestrictionJson {
349+
// Include all labels in capability ID for routing when specified
350+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
351+
352+
return {
353+
method: {
354+
id: capabilityId,
355+
method: 'TransactionByHash',
356+
maxCalls,
357+
},
358+
}
359+
}
360+
361+
limitAccountTransactions(maxCalls: number): CapabilityRestrictionJson {
362+
// Include all labels in capability ID for routing when specified
363+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
364+
365+
return {
366+
method: {
367+
id: capabilityId,
368+
method: 'AccountTransactions',
369+
maxCalls,
370+
},
371+
}
372+
}
373+
374+
limitWriteReport(maxCalls: number): CapabilityRestrictionJson {
375+
// Include all labels in capability ID for routing when specified
376+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
377+
378+
return {
379+
method: {
380+
id: capabilityId,
381+
method: 'WriteReport',
382+
maxCalls,
383+
},
384+
}
385+
}
386+
}

packages/cre-sdk/src/generated-sdk/capabilities/blockchain/evm/v1alpha/client_sdk_gen.ts

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import {
5151
WriteReportRequestSchema,
5252
} from '@cre/generated/capabilities/blockchain/evm/v1alpha/client_pb'
5353
import {
54+
type CapabilityRestrictionJson,
5455
type ReportResponse,
5556
type ReportResponseJson,
5657
ReportResponseSchema,
@@ -564,3 +565,110 @@ class ClientLogTrigger implements Trigger<Log, Log> {
564565
return rawOutput
565566
}
566567
}
568+
export class ClientRestrictor {
569+
constructor(private readonly ChainSelector: bigint) {}
570+
571+
limitCallContract(maxCalls: number): CapabilityRestrictionJson {
572+
// Include all labels in capability ID for routing when specified
573+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
574+
575+
return {
576+
method: {
577+
id: capabilityId,
578+
method: 'CallContract',
579+
maxCalls,
580+
},
581+
}
582+
}
583+
584+
limitFilterLogs(maxCalls: number): CapabilityRestrictionJson {
585+
// Include all labels in capability ID for routing when specified
586+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
587+
588+
return {
589+
method: {
590+
id: capabilityId,
591+
method: 'FilterLogs',
592+
maxCalls,
593+
},
594+
}
595+
}
596+
597+
limitBalanceAt(maxCalls: number): CapabilityRestrictionJson {
598+
// Include all labels in capability ID for routing when specified
599+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
600+
601+
return {
602+
method: {
603+
id: capabilityId,
604+
method: 'BalanceAt',
605+
maxCalls,
606+
},
607+
}
608+
}
609+
610+
limitEstimateGas(maxCalls: number): CapabilityRestrictionJson {
611+
// Include all labels in capability ID for routing when specified
612+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
613+
614+
return {
615+
method: {
616+
id: capabilityId,
617+
method: 'EstimateGas',
618+
maxCalls,
619+
},
620+
}
621+
}
622+
623+
limitGetTransactionByHash(maxCalls: number): CapabilityRestrictionJson {
624+
// Include all labels in capability ID for routing when specified
625+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
626+
627+
return {
628+
method: {
629+
id: capabilityId,
630+
method: 'GetTransactionByHash',
631+
maxCalls,
632+
},
633+
}
634+
}
635+
636+
limitGetTransactionReceipt(maxCalls: number): CapabilityRestrictionJson {
637+
// Include all labels in capability ID for routing when specified
638+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
639+
640+
return {
641+
method: {
642+
id: capabilityId,
643+
method: 'GetTransactionReceipt',
644+
maxCalls,
645+
},
646+
}
647+
}
648+
649+
limitHeaderByNumber(maxCalls: number): CapabilityRestrictionJson {
650+
// Include all labels in capability ID for routing when specified
651+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
652+
653+
return {
654+
method: {
655+
id: capabilityId,
656+
method: 'HeaderByNumber',
657+
maxCalls,
658+
},
659+
}
660+
}
661+
662+
limitWriteReport(maxCalls: number): CapabilityRestrictionJson {
663+
// Include all labels in capability ID for routing when specified
664+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
665+
666+
return {
667+
method: {
668+
id: capabilityId,
669+
method: 'WriteReport',
670+
maxCalls,
671+
},
672+
}
673+
}
674+
}

packages/cre-sdk/src/generated-sdk/capabilities/blockchain/solana/v1alpha/client_sdk_gen.ts

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ import {
6464
WriteReportRequestSchema,
6565
} from '@cre/generated/capabilities/blockchain/solana/v1alpha/client_pb'
6666
import {
67+
type CapabilityRestrictionJson,
6768
type ReportResponse,
6869
type ReportResponseJson,
6970
ReportResponseSchema,
@@ -629,3 +630,136 @@ class ClientLogTrigger implements Trigger<Log, Log> {
629630
return rawOutput
630631
}
631632
}
633+
export class ClientRestrictor {
634+
constructor(private readonly ChainSelector: bigint) {}
635+
636+
limitGetAccountInfoWithOpts(maxCalls: number): CapabilityRestrictionJson {
637+
// Include all labels in capability ID for routing when specified
638+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
639+
640+
return {
641+
method: {
642+
id: capabilityId,
643+
method: 'GetAccountInfoWithOpts',
644+
maxCalls,
645+
},
646+
}
647+
}
648+
649+
limitGetBalance(maxCalls: number): CapabilityRestrictionJson {
650+
// Include all labels in capability ID for routing when specified
651+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
652+
653+
return {
654+
method: {
655+
id: capabilityId,
656+
method: 'GetBalance',
657+
maxCalls,
658+
},
659+
}
660+
}
661+
662+
limitGetBlock(maxCalls: number): CapabilityRestrictionJson {
663+
// Include all labels in capability ID for routing when specified
664+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
665+
666+
return {
667+
method: {
668+
id: capabilityId,
669+
method: 'GetBlock',
670+
maxCalls,
671+
},
672+
}
673+
}
674+
675+
limitGetFeeForMessage(maxCalls: number): CapabilityRestrictionJson {
676+
// Include all labels in capability ID for routing when specified
677+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
678+
679+
return {
680+
method: {
681+
id: capabilityId,
682+
method: 'GetFeeForMessage',
683+
maxCalls,
684+
},
685+
}
686+
}
687+
688+
limitGetMultipleAccountsWithOpts(maxCalls: number): CapabilityRestrictionJson {
689+
// Include all labels in capability ID for routing when specified
690+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
691+
692+
return {
693+
method: {
694+
id: capabilityId,
695+
method: 'GetMultipleAccountsWithOpts',
696+
maxCalls,
697+
},
698+
}
699+
}
700+
701+
limitGetProgramAccounts(maxCalls: number): CapabilityRestrictionJson {
702+
// Include all labels in capability ID for routing when specified
703+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
704+
705+
return {
706+
method: {
707+
id: capabilityId,
708+
method: 'GetProgramAccounts',
709+
maxCalls,
710+
},
711+
}
712+
}
713+
714+
limitGetSignatureStatuses(maxCalls: number): CapabilityRestrictionJson {
715+
// Include all labels in capability ID for routing when specified
716+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
717+
718+
return {
719+
method: {
720+
id: capabilityId,
721+
method: 'GetSignatureStatuses',
722+
maxCalls,
723+
},
724+
}
725+
}
726+
727+
limitGetSlotHeight(maxCalls: number): CapabilityRestrictionJson {
728+
// Include all labels in capability ID for routing when specified
729+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
730+
731+
return {
732+
method: {
733+
id: capabilityId,
734+
method: 'GetSlotHeight',
735+
maxCalls,
736+
},
737+
}
738+
}
739+
740+
limitGetTransaction(maxCalls: number): CapabilityRestrictionJson {
741+
// Include all labels in capability ID for routing when specified
742+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
743+
744+
return {
745+
method: {
746+
id: capabilityId,
747+
method: 'GetTransaction',
748+
maxCalls,
749+
},
750+
}
751+
}
752+
753+
limitWriteReport(maxCalls: number): CapabilityRestrictionJson {
754+
// Include all labels in capability ID for routing when specified
755+
const capabilityId = `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.ChainSelector}@${ClientCapability.CAPABILITY_VERSION}`
756+
757+
return {
758+
method: {
759+
id: capabilityId,
760+
method: 'WriteReport',
761+
maxCalls,
762+
},
763+
}
764+
}
765+
}

packages/cre-sdk/src/generated-sdk/capabilities/internal/actionandtrigger/v1/basic_sdk_gen.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
type TriggerEvent,
1313
TriggerEventSchema,
1414
} from '@cre/generated/capabilities/internal/actionandtrigger/v1/action_and_trigger_pb'
15+
import type { CapabilityRestrictionJson } from '@cre/generated/sdk/v1alpha/sdk_pb'
1516
import type { Runtime } from '@cre/sdk'
1617
import { Report } from '@cre/sdk/report'
1718
import { hexToBytes } from '@cre/sdk/utils/hex-utils'
@@ -113,3 +114,16 @@ class BasicTrigger implements Trigger<TriggerEvent, TriggerEvent> {
113114
return rawOutput
114115
}
115116
}
117+
export class BasicRestrictor {
118+
limitAction(maxCalls: number): CapabilityRestrictionJson {
119+
const capabilityId = BasicCapability.CAPABILITY_ID
120+
121+
return {
122+
method: {
123+
id: capabilityId,
124+
method: 'Action',
125+
maxCalls,
126+
},
127+
}
128+
}
129+
}

0 commit comments

Comments
 (0)