@chainlink/cre-sdk 1.1.3 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/capabilities/blockchain/evm/v1alpha/client_pb.js +1 -1
- package/dist/generated-sdk/capabilities/blockchain/evm/v1alpha/client_sdk_gen.d.ts +1 -0
- package/dist/generated-sdk/capabilities/blockchain/evm/v1alpha/client_sdk_gen.js +1 -0
- package/dist/sdk/utils/capabilities/blockchain/blockchain-helpers.d.ts +38 -1
- package/dist/sdk/utils/capabilities/blockchain/blockchain-helpers.js +80 -6
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@ import { file_values_v1_values } from '../../../../values/v1/values_pb';
|
|
|
10
10
|
*/
|
|
11
11
|
export const file_capabilities_blockchain_evm_v1alpha_client =
|
|
12
12
|
/*@__PURE__*/
|
|
13
|
-
fileDesc('
|
|
13
|
+
fileDesc('CjBjYXBhYmlsaXRpZXMvYmxvY2tjaGFpbi9ldm0vdjFhbHBoYS9jbGllbnQucHJvdG8SI2NhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhIh0KC1RvcGljVmFsdWVzEg4KBnZhbHVlcxgBIAMoDCK4AQoXRmlsdGVyTG9nVHJpZ2dlclJlcXVlc3QSEQoJYWRkcmVzc2VzGAEgAygMEkAKBnRvcGljcxgCIAMoCzIwLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLlRvcGljVmFsdWVzEkgKCmNvbmZpZGVuY2UYAyABKA4yNC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Db25maWRlbmNlTGV2ZWwiegoTQ2FsbENvbnRyYWN0UmVxdWVzdBI6CgRjYWxsGAEgASgLMiwuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuQ2FsbE1zZxInCgxibG9ja19udW1iZXIYAiABKAsyES52YWx1ZXMudjEuQmlnSW50IiEKEUNhbGxDb250cmFjdFJlcGx5EgwKBGRhdGEYASABKAwiWwoRRmlsdGVyTG9nc1JlcXVlc3QSRgoMZmlsdGVyX3F1ZXJ5GAEgASgLMjAuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuRmlsdGVyUXVlcnkiSQoPRmlsdGVyTG9nc1JlcGx5EjYKBGxvZ3MYASADKAsyKC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Mb2cixwEKA0xvZxIPCgdhZGRyZXNzGAEgASgMEg4KBnRvcGljcxgCIAMoDBIPCgd0eF9oYXNoGAMgASgMEhIKCmJsb2NrX2hhc2gYBCABKAwSDAoEZGF0YRgFIAEoDBIRCglldmVudF9zaWcYBiABKAwSJwoMYmxvY2tfbnVtYmVyGAcgASgLMhEudmFsdWVzLnYxLkJpZ0ludBIQCgh0eF9pbmRleBgIIAEoDRINCgVpbmRleBgJIAEoDRIPCgdyZW1vdmVkGAogASgIIjEKB0NhbGxNc2cSDAoEZnJvbRgBIAEoDBIKCgJ0bxgCIAEoDBIMCgRkYXRhGAMgASgMIr0BCgtGaWx0ZXJRdWVyeRISCgpibG9ja19oYXNoGAEgASgMEiUKCmZyb21fYmxvY2sYAiABKAsyES52YWx1ZXMudjEuQmlnSW50EiMKCHRvX2Jsb2NrGAMgASgLMhEudmFsdWVzLnYxLkJpZ0ludBIRCglhZGRyZXNzZXMYBCADKAwSOwoGdG9waWNzGAUgAygLMisuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuVG9waWNzIhcKBlRvcGljcxINCgV0b3BpYxgBIAMoDCJMChBCYWxhbmNlQXRSZXF1ZXN0Eg8KB2FjY291bnQYASABKAwSJwoMYmxvY2tfbnVtYmVyGAIgASgLMhEudmFsdWVzLnYxLkJpZ0ludCI0Cg5CYWxhbmNlQXRSZXBseRIiCgdiYWxhbmNlGAEgASgLMhEudmFsdWVzLnYxLkJpZ0ludCJPChJFc3RpbWF0ZUdhc1JlcXVlc3QSOQoDbXNnGAEgASgLMiwuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuQ2FsbE1zZyIjChBFc3RpbWF0ZUdhc1JlcGx5Eg8KA2dhcxgBIAEoBEICMAAiKwobR2V0VHJhbnNhY3Rpb25CeUhhc2hSZXF1ZXN0EgwKBGhhc2gYASABKAwiYgoZR2V0VHJhbnNhY3Rpb25CeUhhc2hSZXBseRJFCgt0cmFuc2FjdGlvbhgBIAEoCzIwLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLlRyYW5zYWN0aW9uIqEBCgtUcmFuc2FjdGlvbhIRCgVub25jZRgBIAEoBEICMAASDwoDZ2FzGAIgASgEQgIwABIKCgJ0bxgDIAEoDBIMCgRkYXRhGAQgASgMEgwKBGhhc2gYBSABKAwSIAoFdmFsdWUYBiABKAsyES52YWx1ZXMudjEuQmlnSW50EiQKCWdhc19wcmljZRgHIAEoCzIRLnZhbHVlcy52MS5CaWdJbnQiLAocR2V0VHJhbnNhY3Rpb25SZWNlaXB0UmVxdWVzdBIMCgRoYXNoGAEgASgMIlsKGkdldFRyYW5zYWN0aW9uUmVjZWlwdFJlcGx5Ej0KB3JlY2VpcHQYASABKAsyLC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5SZWNlaXB0IpkCCgdSZWNlaXB0EhIKBnN0YXR1cxgBIAEoBEICMAASFAoIZ2FzX3VzZWQYAiABKARCAjAAEhQKCHR4X2luZGV4GAMgASgEQgIwABISCgpibG9ja19oYXNoGAQgASgMEjYKBGxvZ3MYBiADKAsyKC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Mb2cSDwoHdHhfaGFzaBgHIAEoDBIuChNlZmZlY3RpdmVfZ2FzX3ByaWNlGAggASgLMhEudmFsdWVzLnYxLkJpZ0ludBInCgxibG9ja19udW1iZXIYCSABKAsyES52YWx1ZXMudjEuQmlnSW50EhgKEGNvbnRyYWN0X2FkZHJlc3MYCiABKAwiQAoVSGVhZGVyQnlOdW1iZXJSZXF1ZXN0EicKDGJsb2NrX251bWJlchgBIAEoCzIRLnZhbHVlcy52MS5CaWdJbnQiUgoTSGVhZGVyQnlOdW1iZXJSZXBseRI7CgZoZWFkZXIYASABKAsyKy5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5IZWFkZXIiawoGSGVhZGVyEhUKCXRpbWVzdGFtcBgBIAEoBEICMAASJwoMYmxvY2tfbnVtYmVyGAIgASgLMhEudmFsdWVzLnYxLkJpZ0ludBIMCgRoYXNoGAMgASgMEhMKC3BhcmVudF9oYXNoGAQgASgMIqsBChJXcml0ZVJlcG9ydFJlcXVlc3QSEAoIcmVjZWl2ZXIYASABKAwSKwoGcmVwb3J0GAIgASgLMhsuc2RrLnYxYWxwaGEuUmVwb3J0UmVzcG9uc2USRwoKZ2FzX2NvbmZpZxgDIAEoCzIuLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkdhc0NvbmZpZ0gAiAEBQg0KC19nYXNfY29uZmlnIiIKCUdhc0NvbmZpZxIVCglnYXNfbGltaXQYASABKARCAjAAIocDChBXcml0ZVJlcG9ydFJlcGx5EkAKCXR4X3N0YXR1cxgBIAEoDjItLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLlR4U3RhdHVzEnUKInJlY2VpdmVyX2NvbnRyYWN0X2V4ZWN1dGlvbl9zdGF0dXMYAiABKA4yRC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5SZWNlaXZlckNvbnRyYWN0RXhlY3V0aW9uU3RhdHVzSACIAQESFAoHdHhfaGFzaBgDIAEoDEgBiAEBEi8KD3RyYW5zYWN0aW9uX2ZlZRgEIAEoCzIRLnZhbHVlcy52MS5CaWdJbnRIAogBARIaCg1lcnJvcl9tZXNzYWdlGAUgASgJSAOIAQFCJQojX3JlY2VpdmVyX2NvbnRyYWN0X2V4ZWN1dGlvbl9zdGF0dXNCCgoIX3R4X2hhc2hCEgoQX3RyYW5zYWN0aW9uX2ZlZUIQCg5fZXJyb3JfbWVzc2FnZSppCg9Db25maWRlbmNlTGV2ZWwSGQoVQ09ORklERU5DRV9MRVZFTF9TQUZFEAASGwoXQ09ORklERU5DRV9MRVZFTF9MQVRFU1QQARIeChpDT05GSURFTkNFX0xFVkVMX0ZJTkFMSVpFRBACKoIBCh9SZWNlaXZlckNvbnRyYWN0RXhlY3V0aW9uU3RhdHVzEi4KKlJFQ0VJVkVSX0NPTlRSQUNUX0VYRUNVVElPTl9TVEFUVVNfU1VDQ0VTUxAAEi8KK1JFQ0VJVkVSX0NPTlRSQUNUX0VYRUNVVElPTl9TVEFUVVNfUkVWRVJURUQQASpOCghUeFN0YXR1cxITCg9UWF9TVEFUVVNfRkFUQUwQABIWChJUWF9TVEFUVVNfUkVWRVJURUQQARIVChFUWF9TVEFUVVNfU1VDQ0VTUxACMs8SCgZDbGllbnQSgAEKDENhbGxDb250cmFjdBI4LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkNhbGxDb250cmFjdFJlcXVlc3QaNi5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5DYWxsQ29udHJhY3RSZXBseRJ6CgpGaWx0ZXJMb2dzEjYuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuRmlsdGVyTG9nc1JlcXVlc3QaNC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5GaWx0ZXJMb2dzUmVwbHkSdwoJQmFsYW5jZUF0EjUuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuQmFsYW5jZUF0UmVxdWVzdBozLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkJhbGFuY2VBdFJlcGx5En0KC0VzdGltYXRlR2FzEjcuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuRXN0aW1hdGVHYXNSZXF1ZXN0GjUuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuRXN0aW1hdGVHYXNSZXBseRKYAQoUR2V0VHJhbnNhY3Rpb25CeUhhc2gSQC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5HZXRUcmFuc2FjdGlvbkJ5SGFzaFJlcXVlc3QaPi5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5HZXRUcmFuc2FjdGlvbkJ5SGFzaFJlcGx5EpsBChVHZXRUcmFuc2FjdGlvblJlY2VpcHQSQS5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5HZXRUcmFuc2FjdGlvblJlY2VpcHRSZXF1ZXN0Gj8uY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuR2V0VHJhbnNhY3Rpb25SZWNlaXB0UmVwbHkShgEKDkhlYWRlckJ5TnVtYmVyEjouY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuSGVhZGVyQnlOdW1iZXJSZXF1ZXN0GjguY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuSGVhZGVyQnlOdW1iZXJSZXBseRJ2CgpMb2dUcmlnZ2VyEjwuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuRmlsdGVyTG9nVHJpZ2dlclJlcXVlc3QaKC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Mb2cwARJ9CgtXcml0ZVJlcG9ydBI3LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLldyaXRlUmVwb3J0UmVxdWVzdBo1LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLldyaXRlUmVwb3J0UmVwbHkalAmCtRiPCQgBEglldm1AMS4wLjAa/wgKDUNoYWluU2VsZWN0b3IS7QgS6ggKJAoXYXBlY2hhaW4tdGVzdG5ldC1jdXJ0aXMQwcO0+I3EkrKJAQoXCgthcmMtdGVzdG5ldBDnxoye19fQjSoKHQoRYXZhbGFuY2hlLW1haW5uZXQQ1eeKwOHVmKRZCiMKFmF2YWxhbmNoZS10ZXN0bmV0LWZ1amkQm/n8kKLjqPjMAQooChtiaW5hbmNlX3NtYXJ0X2NoYWluLW1haW5uZXQQz/eU8djtlbidAQooChtiaW5hbmNlX3NtYXJ0X2NoYWluLXRlc3RuZXQQ+62+nICu5Iq4AQocChBldGhlcmV1bS1tYWlubmV0EJX28eTPsqbCRQonChtldGhlcmV1bS1tYWlubmV0LWFyYml0cnVtLTEQxOiNzY6boddECiQKF2V0aGVyZXVtLW1haW5uZXQtYmFzZS0xEIL/q6L+uZDT3QEKJwobZXRoZXJldW0tbWFpbm5ldC1vcHRpbWlzbS0xELiVj8P3/tDpMwopCh1ldGhlcmV1bS1tYWlubmV0LXdvcmxkY2hhaW4tMRCH77q3xbbCuBwKJQoZZXRoZXJldW0tbWFpbm5ldC14bGF5ZXItMRCWpfycpqjv7SkKJQoZZXRoZXJldW0tbWFpbm5ldC16a3N5bmMtMRCU7pfZ7bSx1xUKJQoYZXRoZXJldW0tdGVzdG5ldC1zZXBvbGlhENm15M78ye6g3gEKLwojZXRoZXJldW0tdGVzdG5ldC1zZXBvbGlhLWFyYml0cnVtLTEQ6s7u/+q2hKMwCiwKH2V0aGVyZXVtLXRlc3RuZXQtc2Vwb2xpYS1iYXNlLTEQuMq57/aQrsiPAQosCiBldGhlcmV1bS10ZXN0bmV0LXNlcG9saWEtbGluZWEtMRDrqtT+gvnmr08KLwojZXRoZXJldW0tdGVzdG5ldC1zZXBvbGlhLW9wdGltaXNtLTEQn4bFob7Yw8BICjEKJWV0aGVyZXVtLXRlc3RuZXQtc2Vwb2xpYS13b3JsZGNoYWluLTEQut/gxcep88VJCi0KIWV0aGVyZXVtLXRlc3RuZXQtc2Vwb2xpYS16a3N5bmMtMRC3wfz98sSA3l8KHwoTaHlwZXJsaXF1aWQtdGVzdG5ldBCIzt3Il+DJvTsKIAoTaW5rLXRlc3RuZXQtc2Vwb2xpYRDo9Kel8+aWwIcBChkKDWpvdmF5LW1haW5uZXQQtcPEmqGA35IVChkKDWpvdmF5LXRlc3RuZXQQ5M+KhN6y3o4NCiQKF3BoYXJvcy1hdGxhbnRpYy10ZXN0bmV0EMyZ7eDOvK+03wEKGgoOcGhhcm9zLW1haW5uZXQQyMGHnvXvzaFsChoKDnBsYXNtYS10ZXN0bmV0ENWbv6XDtJmHNwobCg9wb2x5Z29uLW1haW5uZXQQsavk8JqShp04CiEKFHBvbHlnb24tdGVzdG5ldC1hbW95EM2P1t/xx5D64QEKJAoYcHJpdmF0ZS10ZXN0bmV0LWFuZGVzaXRlENSmmKXBj9z8X0LlAQonY29tLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhQgtDbGllbnRQcm90b1ABogIDQ0JFqgIjQ2FwYWJpbGl0aWVzLkJsb2NrY2hhaW4uRXZtLlYxYWxwaGHKAiNDYXBhYmlsaXRpZXNcQmxvY2tjaGFpblxFdm1cVjFhbHBoYeICL0NhcGFiaWxpdGllc1xCbG9ja2NoYWluXEV2bVxWMWFscGhhXEdQQk1ldGFkYXRh6gImQ2FwYWJpbGl0aWVzOjpCbG9ja2NoYWluOjpFdm06OlYxYWxwaGFiBnByb3RvMw', [file_sdk_v1alpha_sdk, file_tools_generator_v1alpha_cre_metadata, file_values_v1_values]);
|
|
14
14
|
/**
|
|
15
15
|
* Describes the message capabilities.blockchain.evm.v1alpha.TopicValues.
|
|
16
16
|
* Use `create(TopicValuesSchema)` to create a new message.
|
|
@@ -56,6 +56,7 @@ export declare class ClientCapability {
|
|
|
56
56
|
readonly 'ink-testnet-sepolia': 9763904284804119144n;
|
|
57
57
|
readonly 'jovay-mainnet': 1523760397290643893n;
|
|
58
58
|
readonly 'jovay-testnet': 945045181441419236n;
|
|
59
|
+
readonly 'pharos-atlantic-testnet': 16098325658947243212n;
|
|
59
60
|
readonly 'pharos-mainnet': 7801139999541420232n;
|
|
60
61
|
readonly 'plasma-testnet': 3967220077692964309n;
|
|
61
62
|
readonly 'polygon-mainnet': 4051577828743386545n;
|
|
@@ -66,6 +66,7 @@ export class ClientCapability {
|
|
|
66
66
|
'ink-testnet-sepolia': 9763904284804119144n,
|
|
67
67
|
'jovay-mainnet': 1523760397290643893n,
|
|
68
68
|
'jovay-testnet': 945045181441419236n,
|
|
69
|
+
'pharos-atlantic-testnet': 16098325658947243212n,
|
|
69
70
|
'pharos-mainnet': 7801139999541420232n,
|
|
70
71
|
'plasma-testnet': 3967220077692964309n,
|
|
71
72
|
'polygon-mainnet': 4051577828743386545n,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CallMsgJson } from '../../../../generated/capabilities/blockchain/evm/v1alpha/client_pb';
|
|
1
|
+
import type { CallMsgJson, FilterLogTriggerRequestJson } from '../../../../generated/capabilities/blockchain/evm/v1alpha/client_pb';
|
|
2
2
|
import type { ReportRequestJson } from '../../../../generated/sdk/v1alpha/sdk_pb';
|
|
3
3
|
import { type BigInt as GeneratedBigInt } from '../../../../generated/values/v1/values_pb';
|
|
4
4
|
import type { Address, Hex } from 'viem';
|
|
@@ -107,4 +107,41 @@ export declare const EVM_DEFAULT_REPORT_ENCODER: {
|
|
|
107
107
|
* @returns The prepared report request.
|
|
108
108
|
*/
|
|
109
109
|
export declare const prepareReportRequest: (hexEncodedPayload: Hex, reportEncoder?: Omit<ReportRequestJson, "encodedPayload">) => ReportRequestJson;
|
|
110
|
+
export interface LogTriggerConfigOptions {
|
|
111
|
+
/** EVM addresses to monitor — hex strings with 0x prefix (20 bytes each) */
|
|
112
|
+
addresses: Hex[];
|
|
113
|
+
/** Topic filters — array of up to 4 arrays of hex topic values (32 bytes each).
|
|
114
|
+
* - topics[0]: event signatures (keccak256 hashes), at least one required
|
|
115
|
+
* - topics[1]: possible values for first indexed arg (optional)
|
|
116
|
+
* - topics[2]: possible values for second indexed arg (optional)
|
|
117
|
+
* - topics[3]: possible values for third indexed arg (optional)
|
|
118
|
+
*/
|
|
119
|
+
topics?: Hex[][];
|
|
120
|
+
/** Confidence level for log finality. Defaults to SAFE. */
|
|
121
|
+
confidence?: 'SAFE' | 'LATEST' | 'FINALIZED';
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Creates a log trigger configuration from hex-encoded addresses and topics.
|
|
125
|
+
*
|
|
126
|
+
* This helper converts hex addresses and topic hashes to the base64-encoded format
|
|
127
|
+
* expected by the EVM capability's `FilterLogTriggerRequest`, and validates that
|
|
128
|
+
* addresses are 20 bytes and topics are 32 bytes.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* const WETH = '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9'
|
|
132
|
+
* const TRANSFER = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'
|
|
133
|
+
*
|
|
134
|
+
* handler(
|
|
135
|
+
* evmClient.logTrigger(logTriggerConfig({
|
|
136
|
+
* addresses: [WETH],
|
|
137
|
+
* topics: [[TRANSFER]],
|
|
138
|
+
* confidence: 'LATEST',
|
|
139
|
+
* })),
|
|
140
|
+
* onLogTrigger,
|
|
141
|
+
* )
|
|
142
|
+
*
|
|
143
|
+
* @param opts - Hex-encoded addresses, topic filters, and optional confidence level.
|
|
144
|
+
* @returns The `FilterLogTriggerRequestJson` ready to pass to `evmClient.logTrigger()`.
|
|
145
|
+
*/
|
|
146
|
+
export declare const logTriggerConfig: (opts: LogTriggerConfigOptions) => FilterLogTriggerRequestJson;
|
|
110
147
|
export declare const isChainSelectorSupported: (chainSelectorName: string) => boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { create, toJson } from '@bufbuild/protobuf';
|
|
2
2
|
import { BigIntSchema } from '../../../../generated/values/v1/values_pb';
|
|
3
3
|
import { EVMClient } from '../../../cre';
|
|
4
|
-
import { bigintToBytes, bytesToBigint, hexToBase64 } from '../../hex-utils';
|
|
4
|
+
import { bigintToBytes, bytesToBigint, hexToBase64, hexToBytes } from '../../hex-utils';
|
|
5
5
|
/**
|
|
6
6
|
* Converts a native JS bigint to a protobuf BigInt JSON representation.
|
|
7
7
|
* Use this when passing bigint values to SDK methods.
|
|
@@ -95,11 +95,21 @@ export const LATEST_BLOCK_NUMBER = {
|
|
|
95
95
|
* @param payload - The call message payload to encode.
|
|
96
96
|
* @returns The encoded call message payload.
|
|
97
97
|
*/
|
|
98
|
-
export const encodeCallMsg = (payload) =>
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
98
|
+
export const encodeCallMsg = (payload) => {
|
|
99
|
+
const encodeField = (fieldName, value) => {
|
|
100
|
+
try {
|
|
101
|
+
return hexToBase64(value);
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
throw new Error(`Invalid hex in '${fieldName}' field of CallMsg: ${e instanceof Error ? e.message : String(e)}`);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
return {
|
|
108
|
+
from: encodeField('from', payload.from),
|
|
109
|
+
to: encodeField('to', payload.to),
|
|
110
|
+
data: encodeField('data', payload.data),
|
|
111
|
+
};
|
|
112
|
+
};
|
|
103
113
|
/**
|
|
104
114
|
* Default values expected by the EVM capability for report encoding.
|
|
105
115
|
*/
|
|
@@ -119,4 +129,68 @@ export const prepareReportRequest = (hexEncodedPayload, reportEncoder = EVM_DEFA
|
|
|
119
129
|
encodedPayload: hexToBase64(hexEncodedPayload),
|
|
120
130
|
...reportEncoder,
|
|
121
131
|
});
|
|
132
|
+
/**
|
|
133
|
+
* Validates a hex string and checks that the decoded bytes have the expected length.
|
|
134
|
+
*/
|
|
135
|
+
const validateHexByteLength = (hex, expectedBytes, fieldLabel) => {
|
|
136
|
+
const bytes = hexToBytes(hex);
|
|
137
|
+
if (bytes.length !== expectedBytes) {
|
|
138
|
+
throw new Error(`Invalid ${fieldLabel}: expected ${expectedBytes} bytes, got ${bytes.length} bytes from '${hex.length > 200 ? hex.slice(0, 200) + '...' : hex}'. EVM ${fieldLabel}s must be exactly ${expectedBytes} bytes.`);
|
|
139
|
+
}
|
|
140
|
+
return hexToBase64(hex);
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Creates a log trigger configuration from hex-encoded addresses and topics.
|
|
144
|
+
*
|
|
145
|
+
* This helper converts hex addresses and topic hashes to the base64-encoded format
|
|
146
|
+
* expected by the EVM capability's `FilterLogTriggerRequest`, and validates that
|
|
147
|
+
* addresses are 20 bytes and topics are 32 bytes.
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* const WETH = '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9'
|
|
151
|
+
* const TRANSFER = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'
|
|
152
|
+
*
|
|
153
|
+
* handler(
|
|
154
|
+
* evmClient.logTrigger(logTriggerConfig({
|
|
155
|
+
* addresses: [WETH],
|
|
156
|
+
* topics: [[TRANSFER]],
|
|
157
|
+
* confidence: 'LATEST',
|
|
158
|
+
* })),
|
|
159
|
+
* onLogTrigger,
|
|
160
|
+
* )
|
|
161
|
+
*
|
|
162
|
+
* @param opts - Hex-encoded addresses, topic filters, and optional confidence level.
|
|
163
|
+
* @returns The `FilterLogTriggerRequestJson` ready to pass to `evmClient.logTrigger()`.
|
|
164
|
+
*/
|
|
165
|
+
export const logTriggerConfig = (opts) => {
|
|
166
|
+
if (!opts.addresses || opts.addresses.length === 0) {
|
|
167
|
+
throw new Error('logTriggerConfig requires at least one address. Provide an array of hex-encoded EVM addresses (20 bytes each).');
|
|
168
|
+
}
|
|
169
|
+
const addresses = opts.addresses.map((addr, i) => {
|
|
170
|
+
try {
|
|
171
|
+
return validateHexByteLength(addr, 20, 'address');
|
|
172
|
+
}
|
|
173
|
+
catch (e) {
|
|
174
|
+
throw new Error(`Invalid address at index ${i}: ${e instanceof Error ? e.message : String(e)}`);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
const topics = opts.topics?.map((topicSlot, slotIndex) => ({
|
|
178
|
+
values: topicSlot.map((topic, valueIndex) => {
|
|
179
|
+
try {
|
|
180
|
+
return validateHexByteLength(topic, 32, 'topic');
|
|
181
|
+
}
|
|
182
|
+
catch (e) {
|
|
183
|
+
throw new Error(`Invalid topic at topics[${slotIndex}][${valueIndex}]: ${e instanceof Error ? e.message : String(e)}`);
|
|
184
|
+
}
|
|
185
|
+
}),
|
|
186
|
+
}));
|
|
187
|
+
const confidence = opts.confidence
|
|
188
|
+
? `CONFIDENCE_LEVEL_${opts.confidence}`
|
|
189
|
+
: undefined;
|
|
190
|
+
return {
|
|
191
|
+
addresses,
|
|
192
|
+
...(topics ? { topics } : {}),
|
|
193
|
+
...(confidence ? { confidence } : {}),
|
|
194
|
+
};
|
|
195
|
+
};
|
|
122
196
|
export const isChainSelectorSupported = (chainSelectorName) => Object.keys(EVMClient.SUPPORTED_CHAIN_SELECTORS).includes(chainSelectorName);
|